41           boost::shared_ptr<NonlinearElasticElement::
 
   42                                 FunctionsToCalculatePiolaKirchhoffI<adouble>>>
 
   78  virtual MoFEMErrorCode 
iNit() {
 
   83        boost::make_shared<NonlinearElasticElement::
 
   84                               FunctionsToCalculatePiolaKirchhoffI<adouble>>();
 
   90        boost::make_shared<NeoHookean<adouble>>();
 
   92        boost::make_shared<NeoHookean<double>>();
 
   93    std::ostringstream avilable_materials;
 
   94    avilable_materials << 
"set elastic material < ";
 
   98                     double>>>::iterator mit;
 
  101      avilable_materials << mit->first << 
" ";
 
  103    avilable_materials << 
">";
 
  105    PetscOptionsBegin(
mField.
get_comm(), 
"", 
"Elastic Materials Configuration",
 
  107    char default_material[255];
 
  108    PetscBool def_mat_set;
 
  109    CHKERR PetscOptionsString(
 
  110        "-default_material", avilable_materials.str().c_str(), 
"",
 
  111        defMaterial.c_str(), default_material, 255, &def_mat_set);
 
  117                "material <%s> not implemented", default_material);
 
  120    char config_file[255];
 
  121    CHKERR PetscOptionsString(
"-elastic_material_configuration",
 
  122                              "elastic materials configure file name", 
"",
 
 
  168    po::options_description config_file_options;
 
  171      std::ostringstream str_order;
 
  172      str_order << 
"block_" << it->getMeshsetId() << 
".displacemet_order";
 
  173      config_file_options.add_options()(
 
  174          str_order.str().c_str(),
 
  175          po::value<int>(&
blockData[it->getMeshsetId()].oRder)
 
  176              ->default_value(-1));
 
  178      std::ostringstream str_material;
 
  179      str_material << 
"block_" << it->getMeshsetId() << 
".material";
 
  180      config_file_options.add_options()(
 
  181          str_material.str().c_str(),
 
  182          po::value<std::string>(&
blockData[it->getMeshsetId()].mAterial)
 
  185      std::ostringstream str_ym;
 
  186      str_ym << 
"block_" << it->getMeshsetId() << 
".young_modulus";
 
  187      config_file_options.add_options()(
 
  188          str_ym.str().c_str(),
 
  189          po::value<double>(&
blockData[it->getMeshsetId()].yOung)
 
  190              ->default_value(-1));
 
  192      std::ostringstream str_pr;
 
  193      str_pr << 
"block_" << it->getMeshsetId() << 
".poisson_ratio";
 
  194      config_file_options.add_options()(
 
  195          str_pr.str().c_str(),
 
  196          po::value<double>(&
blockData[it->getMeshsetId()].pOisson)
 
  197              ->default_value(-2));
 
  199      std::ostringstream str_density;
 
  200      str_density << 
"block_" << it->getMeshsetId() << 
".density";
 
  201      config_file_options.add_options()(
 
  202          str_density.str().c_str(),
 
  203          po::value<double>(&
blockData[it->getMeshsetId()].dEnsity)
 
  204              ->default_value(-1));
 
  206      std::ostringstream str_dashG;
 
  207      str_dashG << 
"block_" << it->getMeshsetId() << 
".dashG";
 
  208      config_file_options.add_options()(
 
  209          str_dashG.str().c_str(),
 
  210          po::value<double>(&
blockData[it->getMeshsetId()].dashG)
 
  211              ->default_value(-1));
 
  213      std::ostringstream str_dashPoisson;
 
  214      str_dashPoisson << 
"block_" << it->getMeshsetId() << 
".dashPoisson";
 
  215      config_file_options.add_options()(
 
  216          str_dashPoisson.str().c_str(),
 
  217          po::value<double>(&
blockData[it->getMeshsetId()].dashPoisson)
 
  218              ->default_value(-2));
 
  220      std::ostringstream str_ax;
 
  221      str_ax << 
"block_" << it->getMeshsetId() << 
".a_x";
 
  222      config_file_options.add_options()(
 
  223          str_ax.str().c_str(),
 
  224          po::value<double>(&
blockData[it->getMeshsetId()].aX)
 
  227      std::ostringstream str_ay;
 
  228      str_ay << 
"block_" << it->getMeshsetId() << 
".a_y";
 
  229      config_file_options.add_options()(
 
  230          str_ay.str().c_str(),
 
  231          po::value<double>(&
blockData[it->getMeshsetId()].aY)
 
  234      std::ostringstream str_az;
 
  235      str_az << 
"block_" << it->getMeshsetId() << 
".a_z";
 
  236      config_file_options.add_options()(
 
  237          str_az.str().c_str(),
 
  238          po::value<double>(&
blockData[it->getMeshsetId()].aZ)
 
  241    po::parsed_options parsed =
 
  242        parse_config_file(file, config_file_options, 
true);
 
  245    std::vector<std::string> additional_parameters;
 
  246    additional_parameters =
 
  247        collect_unrecognized(parsed.options, po::include_positional);
 
  248    for (std::vector<std::string>::iterator vit = additional_parameters.begin();
 
  249         vit != additional_parameters.end(); vit++) {
 
  250      CHKERR PetscPrintf(PETSC_COMM_WORLD,
 
  251                         "** WARNING Unrecognized option %s\n", vit->c_str());
 
 
  261    PetscBool flg = PETSC_TRUE;
 
  263    CHKERR PetscOptionsGetInt(PETSC_NULLPTR, PETSC_NULLPTR, 
"-order", &disp_order,
 
  265    if (flg != PETSC_TRUE) {
 
  269      if (
blockData[it->getMeshsetId()].oRder == -1)
 
  271      if (
blockData[it->getMeshsetId()].oRder == disp_order)
 
  274                  it->getMeshsetId(), 
blockData[it->getMeshsetId()].oRder);
 
  276      rval = 
mField.
get_moab().get_entities_by_handle(it->meshset, block_ents,
 
  279      Range ents_to_set_order;
 
  281          block_ents, 3, 
false, ents_to_set_order, moab::Interface::UNION);
 
  282      ents_to_set_order = ents_to_set_order.subset_by_type(MBTET);
 
  284          block_ents, 2, 
false, ents_to_set_order, moab::Interface::UNION);
 
  286          block_ents, 1, 
false, ents_to_set_order, moab::Interface::UNION);
 
 
  307#ifdef __NONLINEAR_ELASTIC_HPP 
  309  virtual MoFEMErrorCode
 
  310  setBlocks(std::map<int, NonlinearElasticElement::BlockData> &set_of_blocks) {
 
  321      int id = it->getMeshsetId();
 
  323      CHKERR it->getAttributeDataStructure(mydata);
 
  326          meshset, MBTET, set_of_blocks[
id].tEts, 
true);
 
  327      set_of_blocks[id].iD = id;
 
  328      set_of_blocks[id].E = mydata.data.Young;
 
  329      set_of_blocks[id].PoissonRatio = mydata.data.Poisson;
 
  331        set_of_blocks[id].E = 
blockData[id].yOung;
 
  333        set_of_blocks[id].PoissonRatio = 
blockData[id].pOisson;
 
  337      set_of_blocks[id].materialAdoublePtr =
 
  341                  "Block Id %d Young Modulus %3.2g Poisson Ratio %3.2f " 
  342                  "Material model %s Nb. of elements %d\n",
 
  343                  id, set_of_blocks[
id].
E, set_of_blocks[
id].PoissonRatio,
 
  345                  set_of_blocks[
id].tEts.size());
 
  348        set_of_blocks[id].materialDoublePtr =
 
  350        set_of_blocks[id].materialAdoublePtr =
 
  354        set_of_blocks[id].materialAdoublePtr =
 
  357        set_of_blocks[id].materialDoublePtr =
 
  359        set_of_blocks[id].materialAdoublePtr =
 
  363                "field with that space is not implemented");
 
  371#ifdef __CONVECTIVE_MASS_ELEMENT_HPP 
  374  setBlocks(std::map<int, ConvectiveMassElement::BlockData> &set_of_blocks) {
 
  385      int id = it->getMeshsetId();
 
  388          meshset, MBTET, set_of_blocks[
id].tEts, 
true);
 
  389      Block_BodyForces mydata;
 
  390      CHKERR it->getAttributeDataStructure(mydata);
 
  391      set_of_blocks[id].rho0 = mydata.data.density;
 
  392      set_of_blocks[id].a0.resize(3);
 
  393      set_of_blocks[id].a0[0] = mydata.data.acceleration_x;
 
  394      set_of_blocks[id].a0[1] = mydata.data.acceleration_y;
 
  395      set_of_blocks[id].a0[2] = mydata.data.acceleration_z;
 
  397        set_of_blocks[id].rho0 = 
blockData[id].dEnsity;
 
  398        std::ostringstream str_ax;
 
  399        str_ax << 
"block_" << it->getMeshsetId() << 
".a_x";
 
  400        std::ostringstream str_ay;
 
  401        str_ay << 
"block_" << it->getMeshsetId() << 
".a_y";
 
  402        std::ostringstream str_az;
 
  403        str_az << 
"block_" << it->getMeshsetId() << 
".a_z";
 
  404        if (
vM.count(str_ax.str().c_str())) {
 
  405          set_of_blocks[id].a0[0] = 
blockData[id].aX;
 
  407        if (
vM.count(str_ay.str().c_str())) {
 
  408          set_of_blocks[id].a0[1] = 
blockData[id].aY;
 
  410        if (
vM.count(str_az.str().c_str())) {
 
  411          set_of_blocks[id].a0[2] = 
blockData[id].aZ;
 
  415                  "Block Id %d Density %3.2g a_x = %3.2g a_y = %3.2g a_z = " 
  416                  "%3.2g Nb. of elements %ld\n",
 
  417                  id, set_of_blocks[
id].rho0, set_of_blocks[
id].a0[0],
 
  418                  set_of_blocks[
id].a0[1], set_of_blocks[
id].a0[2],
 
  419                  set_of_blocks[
id].tEts.size());
 
  427#ifdef __KELVIN_VOIGT_DAMPER_HPP__ 
  430      std::map<int, KelvinVoigtDamper::BlockMaterialData> &set_of_blocks) {
 
  442      int id = it->getMeshsetId();
 
  444      if (it->getName().compare(0, 6, 
"DAMPER") == 0) {
 
  446        std::vector<double> data;
 
  447        CHKERR it->getAttributes(data);
 
  448        if (data.size() < 2) {
 
  449          SETERRQ(PETSC_COMM_SELF, 1, 
"Data inconsistency");
 
  452            it->meshset, MBTET, set_of_blocks[it->getMeshsetId()].tEts, 
true);
 
  454        set_of_blocks[it->getMeshsetId()].gBeta = data[0];
 
  455        set_of_blocks[it->getMeshsetId()].vBeta = data[1];
 
  461            mField.
get_moab().get_entities_by_type(meshset, MBTET, tEts, 
true);
 
  465        set_of_blocks[it->getMeshsetId()].tEts = tEts;
 
  466        set_of_blocks[it->getMeshsetId()].gBeta = 
blockData[id].dashG;
 
  467        set_of_blocks[it->getMeshsetId()].vBeta = 
blockData[id].dashPoisson;
 
  472            "Block Id %d Damper Shear Modulus = %3.2g Poisson ratio = %3.2g\n",
 
  473            id, set_of_blocks[
id].gBeta, set_of_blocks[
id].vBeta);
 
 
virtual MoFEMErrorCode set_field_order(const EntityHandle meshset, const EntityType type, const std::string &name, const ApproximationOrder order, int verb=DEFAULT_VERBOSITY)=0
Set order approximation of the entities in the field.