495 {
497#ifdef WITH_ADOL_C
504 }
508 AdolCOps::createAdolCPhysicalEquationsPtr<AdolCOps::HUHU, modelType>(
510 }
511
514
519
520 auto add_domain_ops_lhs = [&](auto &pip) {
523 "GEOMETRY");
525 template opLhsFactory<PETSC, GAUSS, DomainEleOp>(
mField, pip,
"U",
528 template opLhsFactory<PETSC, GAUSS, DomainEleOp>(
531 };
532
533 auto add_domain_ops_rhs = [&](auto &pip) {
536 "GEOMETRY");
538 template opRhsFactory<PETSC, GAUSS, DomainEleOp>(
mField, pip,
"U",
541 template opRhsFactory<PETSC, GAUSS, DomainEleOp>(
544 };
545
546 CHKERR add_domain_ops_lhs(pipeline_mng->getOpDomainLhsPipeline());
547 CHKERR add_domain_ops_rhs(pipeline_mng->getOpDomainRhsPipeline());
548
552
553 PetscBool post_proc_vol;
554 PetscBool post_proc_skin;
555
557 post_proc_vol = PETSC_TRUE;
558 post_proc_skin = PETSC_FALSE;
559 } else {
560 post_proc_vol = PETSC_FALSE;
561 post_proc_skin = PETSC_TRUE;
562 }
563
565 &post_proc_vol, PETSC_NULLPTR);
567 &post_proc_skin, PETSC_NULLPTR);
568
569
570 auto create_post_proc_fe = [&]() {
571 auto post_proc_ele_domain = [&](auto &pip_domain) {
574 "GEOMETRY");
578 };
579
580 auto post_proc_map = [&](auto &pip, auto u_ptr) {
582 using OpPPMap = OpPostProcMapInMoab<SPACE_DIM, SPACE_DIM>;
583 auto grad_ptr =
585 auto first_piola_ptr =
587 pip->getOpPtrVector().push_back(
new OpPPMap(
588 pip->getPostProcMesh(), pip->getMapGaussPts(), {}, {{"U", u_ptr}},
589 {{"GRAD", grad_ptr}, {"FIRST_PIOLA", first_piola_ptr}}, {}));
591 };
592
593 auto push_post_proc_bdy = [&](auto &pip_bdy) {
594 if (post_proc_skin == PETSC_FALSE)
595 return boost::shared_ptr<PostProcEleBdy>();
597 auto domain_fe_name =
simple->getDomainFEName();
598 auto u_ptr = boost::make_shared<MatrixDouble>();
599 pip_bdy->getOpPtrVector().push_back(
600 new OpCalculateVectorFieldValues<SPACE_DIM>("U", u_ptr));
601 auto op_loop_side =
603 CHKERR post_proc_ele_domain(op_loop_side->getOpPtrVector());
604 pip_bdy->getOpPtrVector().push_back(op_loop_side);
605 CHKERR post_proc_map(pip_bdy, u_ptr);
606 return pip_bdy;
607 };
608
609 auto push_post_proc_domain = [&](auto &pip_domain) {
610 if (post_proc_vol == PETSC_FALSE)
611 return boost::shared_ptr<PostProcEleDomain>();
612 auto u_ptr = boost::make_shared<MatrixDouble>();
613 pip_domain->getOpPtrVector().push_back(
614 new OpCalculateVectorFieldValues<SPACE_DIM>("U", u_ptr));
615 CHKERR post_proc_ele_domain(pip_domain->getOpPtrVector());
616 CHKERR post_proc_map(pip_domain, u_ptr);
617
618 return pip_domain;
619 };
620
621 auto post_proc_fe_domain = boost::make_shared<PostProcEleDomain>(
mField);
622 auto post_proc_fe_bdy = boost::make_shared<PostProcEleBdy>(
mField);
623
624 return std::make_pair(push_post_proc_domain(post_proc_fe_domain),
625 push_post_proc_bdy(post_proc_fe_bdy));
626 };
627
628 auto post_proc_pair = create_post_proc_fe();
631
632#else
634 "ADOL-C support is not enabled. Please reconfigure with "
635 "-DWITH_ADOL_C=ON and recompile to use AdolC material model.");
636
637#endif
639}
void simple(double P1[], double P2[], double P3[], double c[], const int N)
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
boost::shared_ptr< ADolCData > createADolCDataPtr()
boost::shared_ptr< PhysicalEquations > createAdolCPhysicalEquationsPtr(boost::shared_ptr< ADolCData > adolc_data_ptr, int tag)
PetscErrorCode PetscOptionsGetBool(PetscOptions *, const char pre[], const char name[], PetscBool *bval, PetscBool *set)
OpPostProcMapInMoab< SPACE_DIM, SPACE_DIM > OpPPMap
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
boost::shared_ptr< PostProcEleBdy > postProcBdyFe
boost::shared_ptr< AdolCOps::PhysicalEquations > physicalEquationsPtr
boost::shared_ptr< DomainEle > reactionFe
static constexpr int modelType
boost::shared_ptr< PostProcEleDomain > postProcDomainFe
boost::shared_ptr< AdolCOps::PhysicalEquations > physicalHuHuPtr