65 int nb_integration_pts = OP::getGaussPts().size2();
67 auto get_tag = [&]() {
68 if (physicalPtr->tagVsRangePtr) {
69 for (
const auto &tag_range_pair : *(physicalPtr->tagVsRangePtr)) {
70 if (tag_range_pair.second.find(DomainEleOp::getFEEntityHandle()) !=
71 tag_range_pair.second.end()) {
72 return tag_range_pair.first;
79 "ADOL-C tag not found " +
80 std::to_string(physicalPtr->tAg));
83 return physicalPtr->tAg;
86 const int current_tag = get_tag();
87 auto *fe_ptr =
const_cast<FEMethod *
>(this->getFEMethod());
90 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->resize(DIM, DIM,
false);
91 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"P")->resize(DIM, DIM,
false);
92 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"P_dF")->resize(
93 DIM * DIM, DIM * DIM,
false);
94 auto mat_grad_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"grad");
95 auto mat_P_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"P");
96 auto mat_P_dF_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"P_dF");
99 if (!mat_grad_ptr || !mat_P_ptr || !mat_P_dF_ptr) {
101 "Missing common data for ADOL-C evaluation");
103 if (mat_grad_ptr->size2() != DIM * DIM) {
105 "Inconsistent size of gradient matrix for ADOL-C evaluation");
107 if (mat_grad_ptr->size1() != nb_integration_pts) {
109 "Inconsistent size of gradient matrix data for ADOL-C evaluation "
111 mat_grad_ptr->size1(), nb_integration_pts);
116 auto get_grad_at_pts =
118 *mat_grad_ptr, nb_integration_pts);
121 *mat_P_ptr, nb_integration_pts);
122 auto get_P_dF_at_pts =
124 DL>::size(*mat_P_dF_ptr, nb_integration_pts);
130 auto t_grad_at_pts = get_grad_at_pts();
131 auto t_P_at_pts = get_P_at_pts();
138 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
139 auto t_F = getFTensor2FromPtr<DIM, DIM>(
140 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
141 t_F(
i,
J) = t_grad_at_pts(
i,
J);
142 CHKERR physicalPtr->setParams(fe_ptr, gg);
143 CHKERR physicalPtr->evaluateVariable(current_tag, ent, gg);
144 auto t_P = getFTensor2FromPtr<DIM, DIM>(
145 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"P")->data().data());
146 t_P_at_pts(
i,
J) = t_P(
i,
J);
157 auto t_grad_at_pts = get_grad_at_pts();
158 auto t_P_dF_at_pts = get_P_dF_at_pts();
164 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
165 auto t_F = getFTensor2FromPtr<DIM, DIM>(
166 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
167 t_F(
i,
J) = t_grad_at_pts(
i,
J);
168 CHKERR physicalPtr->setParams(fe_ptr, gg);
169 CHKERR physicalPtr->evaluateDerivatives(current_tag, ent, gg);
170 auto t_P_dF = getFTensor4FromPtr<DIM, DIM, DIM, DIM>(
171 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"P_dF")
174 t_P_dF_at_pts(
i,
J,
k,
L) = t_P_dF(
i,
J,
k,
L);
183 auto t_grad_at_pts = get_grad_at_pts();
184 auto next = [&]() { ++t_grad_at_pts; };
186 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
187 auto t_F = getFTensor2FromPtr<DIM, DIM>(
188 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
189 t_F(
i,
J) = t_grad_at_pts(
i,
J);
190 CHKERR physicalPtr->setParams(fe_ptr, gg);
191 CHKERR physicalPtr->updateState(current_tag, ent, gg);
225 int nb_integration_pts = OP::getGaussPts().size2();
227 auto get_tag = [&]() {
228 if (physicalPtr->tagVsRangePtr) {
229 for (
const auto &tag_range_pair : *(physicalPtr->tagVsRangePtr)) {
230 if (tag_range_pair.second.find(DomainEleOp::getFEEntityHandle()) !=
231 tag_range_pair.second.end()) {
232 return tag_range_pair.first;
239 "ADOL-C tag not found " +
240 std::to_string(physicalPtr->tAg));
243 return physicalPtr->tAg;
246 const int current_tag = get_tag();
247 auto *fe_ptr =
const_cast<FEMethod *
>(this->getFEMethod());
250 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"Jac")->resize(DIM, DIM,
false);
251 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"Obj")->resize(1,
false);
252 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"dObj")->resize(
254 auto mat_jac_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"Jac");
255 auto mat_grad_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"grad");
256 auto mat_var_grad_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"var_grad");
257 auto mat_obj_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"Obj");
258 auto mat_dObj_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"dObj");
261 if (!mat_jac_ptr || !mat_grad_ptr || !mat_var_grad_ptr || !mat_obj_ptr ||
264 "Missing common data for ADOL-C evaluation");
269 auto get_jac_at_pts =
271 *mat_jac_ptr, nb_integration_pts);
272 [[maybe_unused]]
auto get_grad_at_pts =
274 *mat_grad_ptr, nb_integration_pts);
275 [[maybe_unused]]
auto get_var_grad_at_pts =
277 *mat_var_grad_ptr, nb_integration_pts);
278 auto get_obj_at_pts =
280 *mat_obj_ptr, nb_integration_pts);
281 auto get_dObj_at_pts =
283 *mat_dObj_ptr, nb_integration_pts);
289 auto t_jac_at_pts = get_jac_at_pts();
290 auto t_obj_at_pts = get_obj_at_pts();
297 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
298 auto t_jac = getFTensor2FromPtr<DIM, DIM>(
299 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"Jac")->data().data());
300 t_jac(
i,
J) = t_jac_at_pts(
i,
J);
301 CHKERR physicalPtr->setParams(fe_ptr, gg);
302 CHKERR physicalPtr->evaluateVariable(current_tag, ent, gg);
303 auto t_obj = getFTensor1FromPtr<1, 1>(
304 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"Obj")
307 t_obj_at_pts(0) = t_obj(0);
318 auto t_jac_at_pts = get_jac_at_pts();
319 auto t_dObj_at_pts = get_dObj_at_pts();
325 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
326 auto t_jac = getFTensor2FromPtr<DIM, DIM>(
327 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"Jac")->data().data());
328 t_jac(
i,
J) = t_jac_at_pts(
i,
J);
329 CHKERR physicalPtr->setParams(fe_ptr, gg);
330 CHKERR physicalPtr->evaluateDerivatives(current_tag, ent, gg);
331 auto t_dObj = getFTensor2FromPtr<DIM, DIM>(
332 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"dObj")
335 t_dObj_at_pts(
i,
J) = t_dObj(
i,
J);