Skip to content

Commit 84e5221

Browse files
committed
python binding material opt
1 parent 946d4bf commit 84e5221

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

cmake/recipes/polyfem.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ message(STATUS "Third-party: creating target 'polyfem::polyfem'")
1717
# FetchContent_MakeAvailable(polyfem)
1818

1919
include(CPM)
20-
CPMAddPackage("gh:polyfem/polyfem#71b67e6416c59f498589ddc1633c11e6c246b392")
20+
CPMAddPackage("gh:polyfem/polyfem#c18c17c538dd6abc5a7f1b4ed502b7e9bb3a7f51")

src/differentiable/adjoint.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ void define_adjoint(py::module_ &m)
2525
},
2626
py::arg("solver"));
2727

28+
m.def(
29+
"elastic_material_derivative",
30+
[](State &state) {
31+
Eigen::VectorXd term;
32+
if (state.problem->is_time_dependent())
33+
AdjointTools::dJ_material_transient_adjoint_term(state, state.get_adjoint_mat(1), state.get_adjoint_mat(0), term);
34+
else
35+
AdjointTools::dJ_material_static_adjoint_term(state, state.diff_cached.u(0), state.get_adjoint_mat(0), term);
36+
37+
return utils::unflatten(term, state.bases.size());
38+
},
39+
py::arg("solver"));
40+
2841
m.def(
2942
"initial_velocity_derivative",
3043
[](State &state) {

src/differentiable/objective.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,4 @@ void define_objective(py::module_ &m)
3737

3838
m.def("create_objective", &AdjointOptUtils::create_simple_form,
3939
py::arg("obj_type"), py::arg("param_type"), py::arg("solver"), py::arg("parameters"));
40-
41-
// obj = std::make_shared<StressNormForm>(var2sim, *(states[args["state"]]), args);
4240
}

src/state/state.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,19 @@ void define_solver(py::module_ &m)
600600
}
601601
},
602602
"set initial displacement for one body", py::arg("body_id"),
603-
py::arg("displacement"));
603+
py::arg("displacement"))
604+
.def(
605+
"set_per_element_material",
606+
[](State &self, const Eigen::VectorXd &lambda, const Eigen::VectorXd &mu) {
607+
if (self.bases.size() == 0)
608+
log_and_throw_adjoint_error("Build basis first!");
609+
610+
assert(lambda.size() == self.bases.size());
611+
assert(mu.size() == self.bases.size());
612+
self.assembler->update_lame_params(lambda, mu);
613+
},
614+
"set per-element Lame parameters", py::arg("lambda"),
615+
py::arg("mu"));
604616
}
605617

606618
void define_solve(py::module_ &m)

0 commit comments

Comments
 (0)