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.