68 int nb_integration_pts = OP::getGaussPts().size2();
70 auto get_tag = [&]() {
71 if (physicalPtr->tagVsRangePtr) {
72 for (
const auto &tag_range_pair : *(physicalPtr->tagVsRangePtr)) {
73 if (tag_range_pair.second.find(DomainEleOp::getFEEntityHandle()) !=
74 tag_range_pair.second.end()) {
75 return tag_range_pair.first;
82 "ADOL-C tag not found " +
83 std::to_string(physicalPtr->tAg));
86 return physicalPtr->tAg;
89 const int current_tag = get_tag();
90 auto *fe_ptr =
const_cast<FEMethod *
>(this->getFEMethod());
93 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->resize(DIM, DIM,
false);
94 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"P")->resize(DIM, DIM,
false);
95 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"P_dF")->resize(
96 DIM * DIM, DIM * DIM,
false);
97 auto mat_grad_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"grad");
98 auto mat_P_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"P");
99 auto mat_P_dF_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"P_dF");
102 if (!mat_grad_ptr || !mat_P_ptr || !mat_P_dF_ptr) {
104 "Missing common data for ADOL-C evaluation");
106 if (mat_grad_ptr->size2() != DIM * DIM) {
108 "Inconsistent size of gradient matrix for ADOL-C evaluation");
110 if (mat_grad_ptr->size1() != nb_integration_pts) {
112 "Inconsistent size of gradient matrix data for ADOL-C evaluation "
114 mat_grad_ptr->size1(), nb_integration_pts);
119 auto get_grad_at_pts =
121 *mat_grad_ptr, nb_integration_pts);
124 *mat_P_ptr, nb_integration_pts);
125 auto get_P_dF_at_pts =
127 DL>
::size(*mat_P_dF_ptr, nb_integration_pts);
133 auto t_grad_at_pts = get_grad_at_pts();
134 auto t_P_at_pts = get_P_at_pts();
141 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
142 auto t_F = getFTensor2FromPtr<DIM, DIM>(
143 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
144 t_F(
i,
J) = t_grad_at_pts(
i,
J);
145 CHKERR physicalPtr->setParams(fe_ptr, gg);
146 CHKERR physicalPtr->evaluateVariable(current_tag, ent, gg);
147 auto t_P = getFTensor2FromPtr<DIM, DIM>(
148 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"P")->data().data());
149 t_P_at_pts(
i,
J) = t_P(
i,
J);
160 auto t_grad_at_pts = get_grad_at_pts();
161 auto t_P_dF_at_pts = get_P_dF_at_pts();
167 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
168 auto t_F = getFTensor2FromPtr<DIM, DIM>(
169 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
170 t_F(
i,
J) = t_grad_at_pts(
i,
J);
171 CHKERR physicalPtr->setParams(fe_ptr, gg);
172 CHKERR physicalPtr->evaluateDerivatives(current_tag, ent, gg);
173 auto t_P_dF = getFTensor4FromPtr<DIM, DIM, DIM, DIM>(
174 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"P_dF")
177 t_P_dF_at_pts(
i,
J,
k,
L) = t_P_dF(
i,
J,
k,
L);
186 auto t_grad_at_pts = get_grad_at_pts();
187 auto next = [&]() { ++t_grad_at_pts; };
189 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
190 auto t_F = getFTensor2FromPtr<DIM, DIM>(
191 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
192 t_F(
i,
J) = t_grad_at_pts(
i,
J);
193 CHKERR physicalPtr->setParams(fe_ptr, gg);
194 CHKERR physicalPtr->updateState(current_tag, ent, gg);
228 int nb_integration_pts = OP::getGaussPts().size2();
230 auto get_tag = [&]() {
231 if (physicalPtr->tagVsRangePtr) {
232 for (
const auto &tag_range_pair : *(physicalPtr->tagVsRangePtr)) {
233 if (tag_range_pair.second.find(DomainEleOp::getFEEntityHandle()) !=
234 tag_range_pair.second.end()) {
235 return tag_range_pair.first;
242 "ADOL-C tag not found " +
243 std::to_string(physicalPtr->tAg));
246 return physicalPtr->tAg;
249 const int current_tag = get_tag();
250 auto *fe_ptr =
const_cast<FEMethod *
>(this->getFEMethod());
253 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"Jac")->resize(DIM, DIM,
false);
254 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"Obj")->resize(1,
false);
255 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"dObj")->resize(
257 auto mat_jac_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"Jac");
258 auto mat_grad_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"grad");
259 auto mat_var_grad_ptr =
260 physicalPtr->matOpsDataPtr->getCommonDataPtr(
"var_grad");
261 auto mat_obj_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"Obj");
262 auto mat_dObj_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"dObj");
265 if (!mat_jac_ptr || !mat_grad_ptr || !mat_var_grad_ptr || !mat_obj_ptr ||
268 "Missing common data for ADOL-C evaluation");
273 auto get_jac_at_pts =
275 *mat_jac_ptr, nb_integration_pts);
276 [[maybe_unused]]
auto get_grad_at_pts =
278 *mat_grad_ptr, nb_integration_pts);
279 [[maybe_unused]]
auto get_var_grad_at_pts =
281 *mat_var_grad_ptr, nb_integration_pts);
282 auto get_obj_at_pts =
284 *mat_obj_ptr, nb_integration_pts);
285 auto get_dObj_at_pts =
287 *mat_dObj_ptr, nb_integration_pts);
293 auto t_jac_at_pts = get_jac_at_pts();
294 auto t_obj_at_pts = get_obj_at_pts();
301 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
302 auto t_jac = getFTensor2FromPtr<DIM, DIM>(
303 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"Jac")->data().data());
304 t_jac(
i,
J) = t_jac_at_pts(
i,
J);
305 CHKERR physicalPtr->setParams(fe_ptr, gg);
306 CHKERR physicalPtr->evaluateVariable(current_tag, ent, gg);
307 auto t_obj = getFTensor1FromPtr<1, 1>(
308 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"Obj")
311 t_obj_at_pts(0) = t_obj(0);
322 auto t_jac_at_pts = get_jac_at_pts();
323 auto t_dObj_at_pts = get_dObj_at_pts();
329 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
330 auto t_jac = getFTensor2FromPtr<DIM, DIM>(
331 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"Jac")->data().data());
332 t_jac(
i,
J) = t_jac_at_pts(
i,
J);
333 CHKERR physicalPtr->setParams(fe_ptr, gg);
334 CHKERR physicalPtr->evaluateDerivatives(current_tag, ent, gg);
335 auto t_dObj = getFTensor2FromPtr<DIM, DIM>(
336 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"dObj")
339 t_dObj_at_pts(
i,
J) = t_dObj(
i,
J);