56 int nb_integration_pts = OP::getGaussPts().size2();
58 auto get_tag = [&]() {
59 if (physicalPtr->tagVsRangePtr) {
60 for (
const auto &tag_range_pair : *(physicalPtr->tagVsRangePtr)) {
61 if (tag_range_pair.second.find(DomainEleOp::getFEEntityHandle()) !=
62 tag_range_pair.second.end()) {
63 return tag_range_pair.first;
70 "ADOL-C tag not found " +
71 std::to_string(physicalPtr->tAg));
74 return physicalPtr->tAg;
77 const int current_tag = get_tag();
78 auto *fe_ptr =
const_cast<FEMethod *
>(this->getFEMethod());
81 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->resize(DIM, DIM,
false);
82 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"P")->resize(DIM, DIM,
false);
83 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"P_dF")->resize(
84 DIM * DIM, DIM * DIM,
false);
85 auto mat_grad_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"grad");
86 auto mat_P_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"P");
87 auto mat_P_dF_ptr = physicalPtr->matOpsDataPtr->getCommonDataPtr(
"P_dF");
90 if (!mat_grad_ptr || !mat_P_ptr || !mat_P_dF_ptr) {
92 "Missing common data for ADOL-C evaluation");
94 if (mat_grad_ptr->size2() != DIM * DIM) {
96 "Inconsistent size of gradient matrix for ADOL-C evaluation");
98 if (mat_grad_ptr->size1() != nb_integration_pts) {
100 "Inconsistent size of gradient matrix data for ADOL-C evaluation "
102 mat_grad_ptr->size1(), nb_integration_pts);
107 auto get_grad_at_pts =
109 *mat_grad_ptr, nb_integration_pts);
112 *mat_P_ptr, nb_integration_pts);
113 auto get_P_dF_at_pts =
115 DL>::size(*mat_P_dF_ptr, nb_integration_pts);
121 auto t_grad_at_pts = get_grad_at_pts();
122 auto t_P_at_pts = get_P_at_pts();
131 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
132 auto t_F = getFTensor2FromPtr<DIM, DIM>(
133 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
134 t_F(
i,
J) = t_grad_at_pts(
i,
J);
135 CHKERR physicalPtr->setParams(fe_ptr, gg);
136 CHKERR physicalPtr->evaluateVariable(current_tag, ent, gg);
137 auto t_P = getFTensor2FromPtr<DIM, DIM>(
138 physicalPtr->matOpsDataPtr->getDependentDataPtr(
"P")->data().data());
139 t_P_at_pts(
i,
J) = t_P(
i,
J);
150 auto t_grad_at_pts = get_grad_at_pts();
151 auto t_P_dF_at_pts = get_P_dF_at_pts();
159 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
160 auto t_F = getFTensor2FromPtr<DIM, DIM>(
161 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
162 t_F(
i,
J) = t_grad_at_pts(
i,
J);
163 CHKERR physicalPtr->setParams(fe_ptr, gg);
164 CHKERR physicalPtr->evaluateDerivatives(current_tag, ent, gg);
165 auto t_P_dF = getFTensor4FromPtr<DIM, DIM, DIM, DIM>(
166 physicalPtr->matOpsDataPtr->getDependentDerivativesDataPtr(
"P_dF")
169 t_P_dF_at_pts(
i,
J,
k,
L) = t_P_dF(
i,
J,
k,
L);
178 auto t_grad_at_pts = get_grad_at_pts();
179 auto next = [&]() { ++t_grad_at_pts; };
181 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
182 auto t_F = getFTensor2FromPtr<DIM, DIM>(
183 physicalPtr->matOpsDataPtr->getActiveDataPtr(
"F")->data().data());
184 t_F(
i,
J) = t_grad_at_pts(
i,
J);
185 CHKERR physicalPtr->setParams(fe_ptr, gg);
186 CHKERR physicalPtr->updateState(current_tag, ent, gg);