167 int nb_integration_pts = data.
getN().size1();
169 constexpr int adolc_return_value = 0;
171 auto physics_ptr = physicalPtr;
173 auto get_tag = [&]() {
174 if (physics_ptr->tagVsRangePtr) {
175 for (
const auto &tag_range_pair : *physics_ptr->tagVsRangePtr) {
176 if (tag_range_pair.second.find(DomainEleOp::getFEEntityHandle()) !=
177 tag_range_pair.second.end()) {
178 return tag_range_pair.first;
182 return physics_ptr->tAg;
185 auto mat_grad_ptr = physics_ptr->adolcDataPtr->getCommonDataPtr(
"grad");
186 auto mat_k_ptr = physics_ptr->adolcDataPtr->getCommonDataPtr(
"k");
187 auto mat_k_dF_ptr = physics_ptr->adolcDataPtr->getCommonDataPtr(
"k_dF");
190 if (!mat_grad_ptr || !mat_k_ptr || !mat_k_dF_ptr) {
192 "Missing common data for ADOL-C evaluation");
194 if (mat_grad_ptr->size1() != DIM * DIM) {
196 "Inconsistent size of gradient matrix for ADOL-C evaluation");
198 if (mat_grad_ptr->size2() != nb_integration_pts) {
200 "Inconsistent size of gradient matrix data for ADOL-C evaluation");
210 auto t_grad_at_pts = getFTensor2FromMat<DIM, DIM>(*mat_grad_ptr);
211 mat_k_ptr->resize(1, nb_integration_pts,
false);
212 auto t_k_at_pts = getFTensor1FromMat<1>(*mat_k_ptr);
221 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
222 auto t_F = getFTensor2FromPtr<DIM, DIM>(
223 physics_ptr->adolcDataPtr->getActiveDataPtr(
"F")->data().data());
225 CHKERR physics_ptr->setActiveContinuousVector();
226 CHKERR physics_ptr->setDependentContinuousVector();
227 CHKERR physics_ptr->setParams(this->getFEEntityHandle(), gg);
228 int r = ::function(get_tag(), physics_ptr->dependentVariables.size(),
229 physics_ptr->activeVariables.size(),
230 physics_ptr->activeVariables.data(),
231 physics_ptr->dependentVariables.data());
232 if (PetscUnlikely(r < adolc_return_value)) {
234 "ADOL-C function evaluation with error");
236 CHKERR physics_ptr->getDependentContinuousVector();
238 (*physics_ptr->adolcDataPtr->getDependentDataPtr(
"k"))(0, 0);
249 const int number_of_active_variables = physics_ptr->activeVariables.size();
250 const int number_of_dependent_variables =
251 physics_ptr->dependentVariables.size();
252 CHKERR physics_ptr->setDependentDerivativesContinuousVector();
253 std::vector<double *> jac_ptr(number_of_dependent_variables);
254 for (
unsigned int n = 0;
n != number_of_dependent_variables; ++
n) {
257 ->dependentVariablesDerivatives[
n * number_of_active_variables]);
260 auto t_grad_at_pts = getFTensor2FromMat<DIM, DIM>(*mat_grad_ptr);
261 mat_k_dF_ptr->resize(DIM * DIM, nb_integration_pts,
false);
262 auto t_k_dF_at_pts = getFTensor2FromMat<DIM, DIM>(*mat_k_dF_ptr);
271 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
272 auto t_F = getFTensor2FromPtr<DIM, DIM>(
273 physics_ptr->adolcDataPtr->getActiveDataPtr(
"F")->data().data());
275 CHKERR physics_ptr->setActiveContinuousVector();
276 CHKERR physics_ptr->setDependentContinuousVector();
277 CHKERR physics_ptr->setParams(this->getFEEntityHandle(), gg);
278 int r = ::jacobian(get_tag(), number_of_dependent_variables,
279 number_of_active_variables,
280 physics_ptr->activeVariables.data(), jac_ptr.data());
281 if (PetscUnlikely(r < adolc_return_value)) {
283 "ADOL-C function evaluation with error");
285 CHKERR physics_ptr->getDependentDerivativesContinuousVector();
286 auto t_k_dF = getFTensor2FromPtr<DIM, DIM>(
287 physics_ptr->adolcDataPtr->getDependentDerivativesDataPtr(
"k_dF")
290 t_k_dF_at_pts(
i,
J) = t_k_dF(
i,
J);