514 {
516
519
522 };
523
527
528#ifdef WITH_ADOL_C
534 mat_ops_data_ptr,
536 }
537
538 #ifdef WITH_ADOL_C_GENERIC_ELASTIC
539 {
540 auto generic_physical_equations_ptr =
543 mat_ops_data_ptr,
545
547
548 generic_physical_equations_ptr->hookEvaluateVariable =
550 generic_physical_equations_ptr->hookEvaluateDerivatives =
552 generic_physical_equations_ptr->hookUpdateState =
554
555 CHKERR generic_physical_equations_ptr->getOptions(&
mField);
556 CHKERR generic_physical_equations_ptr->recordTape();
557
559 material_map[generic_physical_equations_ptr->tAg] =
560 generic_physical_equations_ptr;
562 }
563 #endif
564
565 #ifdef WITH_ADOL_C_SIMPLE_DAMAGE
566 {
567 auto generic_physical_equations_ptr =
571 "GenericElasticSimpleDamage"));
572
574 mField, boost::dynamic_pointer_cast<MatOps::GenericElastic>(
575 generic_physical_equations_ptr));
576
577 CHKERR generic_physical_equations_ptr->getOptions(&
mField);
578 CHKERR generic_physical_equations_ptr->recordTape();
579
581 material_map[generic_physical_equations_ptr->tAg] =
582 generic_physical_equations_ptr;
584 }
585 #endif
586
590 }
591
595 MatOps::createMatOpsPhysicalEquationsPtr<MatOps::HUHU, modelType>(
599 }
600
601 auto add_domain_ops_lhs = [&](auto &pip) {
604 "GEOMETRY");
607 template opLhsFactory<PETSC, GAUSS, DomainEleOp>(
609 }
612 template opLhsFactory<PETSC, GAUSS, DomainEleOp>(
614 }
616 };
617
618 auto add_domain_ops_rhs = [&](auto &pip) {
621 "GEOMETRY");
624 template opRhsFactory<PETSC, GAUSS, DomainEleOp>(
626 }
629 template opRhsFactory<PETSC, GAUSS, DomainEleOp>(
631 }
633 };
634
635 auto add_domain_ops_update = [&](auto &pip) {
638 "GEOMETRY");
642 }
644 };
645
646 CHKERR add_domain_ops_lhs(pipeline_mng->getOpDomainLhsPipeline());
647 CHKERR add_domain_ops_rhs(pipeline_mng->getOpDomainRhsPipeline());
648
652
658
659 PetscBool post_proc_vol;
660 PetscBool post_proc_skin;
661
663 post_proc_vol = PETSC_TRUE;
664 post_proc_skin = PETSC_FALSE;
665 } else {
666 post_proc_vol = PETSC_FALSE;
667 post_proc_skin = PETSC_TRUE;
668 }
669
671 &post_proc_vol, PETSC_NULLPTR);
673 &post_proc_skin, PETSC_NULLPTR);
674
675
676 auto create_post_proc_fe = [&]() {
677 using OpPPMap = OpPostProcMapInMoab<SPACE_DIM, SPACE_DIM>;
678
679 auto post_proc_ele_domain = [&](auto &pip_domain) {
682 "GEOMETRY");
686 }
688 };
689
690 auto post_proc_map = [&](auto &pip, auto u_ptr) {
693 auto grad_ptr =
695 auto first_piola_ptr =
697 pip->getOpPtrVector().push_back(
new OpPPMap(
698 pip->getPostProcMesh(), pip->getMapGaussPts(), {}, {{"U", u_ptr}},
699 {{"GRAD", grad_ptr}, {"FIRST_PIOLA", first_piola_ptr}}, {}));
700 }
702 };
703
704 auto push_post_proc_bdy = [&](auto &pip_bdy) {
705 if (post_proc_skin == PETSC_FALSE)
706 return boost::shared_ptr<PostProcEleBdy>();
708 auto domain_fe_name =
simple->getDomainFEName();
709 auto u_ptr = boost::make_shared<MatrixDouble>();
710 pip_bdy->getOpPtrVector().push_back(
711 new OpCalculateVectorFieldValues<SPACE_DIM>("U", u_ptr));
712 auto op_loop_side =
714 CHKERR post_proc_ele_domain(op_loop_side->getOpPtrVector());
715 pip_bdy->getOpPtrVector().push_back(op_loop_side);
716 CHKERR post_proc_map(pip_bdy, u_ptr);
717 return pip_bdy;
718 };
719
720 auto push_post_proc_domain = [&](auto &pip_domain) {
721 if (post_proc_vol == PETSC_FALSE)
722 return boost::shared_ptr<PostProcEleDomain>();
723 auto u_ptr = boost::make_shared<MatrixDouble>();
724 pip_domain->getOpPtrVector().push_back(
725 new OpCalculateVectorFieldValues<SPACE_DIM>("U", u_ptr));
726 CHKERR post_proc_ele_domain(pip_domain->getOpPtrVector());
727
731 if (!state_tags.empty()) {
733 int state_order = 2;
735 PETSC_NULLPTR);
736 auto op_loop_this = new OpLoopThis<DomainEle>(
739 pip_domain->getOpPtrVector().push_back(op_loop_this);
740 CHKERR addTagDGProjectionOps<SPACE_DIM, SPACE_DIM>(
742 op_loop_this->getThisFEPtr()->getOpPtrVector(),
743 pip_domain->getPostProcMesh(), pip_domain->getMapGaussPts(),
744 state_tags, state_order);
745 }
746 }
747
748 CHKERR post_proc_map(pip_domain, u_ptr);
749
750 return pip_domain;
751 };
752
753 auto post_proc_fe_domain = boost::make_shared<PostProcEleDomain>(
mField);
754 auto post_proc_fe_bdy = boost::make_shared<PostProcEleBdy>(
mField);
755
756 return std::make_pair(push_post_proc_domain(post_proc_fe_domain),
757 push_post_proc_bdy(post_proc_fe_bdy));
758 };
759
760 auto post_proc_pair = create_post_proc_fe();
763
764#else
766 "ADOL-C support is not enabled. Please reconfigure with "
767 "-DWITH_ADOL_C=ON and recompile to use AdolC material model.");
768
769#endif
771}
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.
MoFEMErrorCode configureSimpleDamage(MoFEM::Interface &m_field, boost::shared_ptr< MatOps::GenericElastic > physical_ptr)
std::map< int, boost::shared_ptr< PhysicalEquations > > & getMetaElasticMap(boost::shared_ptr< PhysicalEquations > meta_ptr)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< MatOpsData > createMatOpsDataPtr()
PetscErrorCode PetscOptionsGetInt(PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
PetscErrorCode PetscOptionsGetBool(PetscOptions *, const char pre[], const char name[], PetscBool *bval, PetscBool *set)
OpPostProcMapInMoab< SPACE_DIM, SPACE_DIM > OpPPMap
static constexpr int approx_order
static MoFEMErrorCode hookEvaluateVariable(boost::shared_ptr< MatOps::MatOpsData > mat_ops_data_ptr, int, EntityHandle, int)
static MoFEMErrorCode hookEvaluateDerivatives(boost::shared_ptr< MatOps::MatOpsData > mat_ops_data_ptr, int, EntityHandle, int)
static MoFEMErrorCode hookUpdateState(boost::shared_ptr< MatOps::MatOpsData >, int, EntityHandle, int)
virtual moab::Interface & get_moab()=0
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
boost::shared_ptr< PostProcEleBdy > postProcBdyFe
boost::shared_ptr< DomainEle > reactionFe
boost::shared_ptr< MatOps::PhysicalEquations > physicalEquationsPtr
static constexpr int modelType
boost::shared_ptr< PostProcEleDomain > postProcDomainFe
boost::shared_ptr< MatOps::PhysicalEquations > physicalHuHuPtr
boost::shared_ptr< DomainEle > updateFe