37 eqType&, EquationProps&, EquationOutputs&, EquationNdop&)>>;
43SetEquationPropertiesMapType set_equation_props = {
50 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
52 using namespace consts;
53 auto& cep_mod = simulation->get_cep_mod();
54 lEq.phys = consts::EquationType::phys_CEP;
56 propL[0][0] = PhysicalProperyType::fluid_density;
57 propL[1][0] = PhysicalProperyType::backflow_stab;
58 propL[2][0] = PhysicalProperyType::f_x;
59 propL[3][0] = PhysicalProperyType::f_y;
61 if (simulation->com_mod.nsd == 3) {
62 propL[4][0] = PhysicalProperyType::f_z;
67 read_domain(simulation, eq_params, lEq, propL);
70 outPuts[0] = OutputNameType::out_voltage;
73 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
82 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
84 using namespace consts;
85 auto& com_mod = simulation->get_com_mod();
86 lEq.phys = consts::EquationType::phys_CMM;
88 bool pstEq = eq_params->prestress.defined() && eq_params->prestress.value();
90 com_mod.cmmBdry.resize(com_mod.gtnNo);
91 if (eq_params->initialize.defined()) {
92 com_mod.cmmInit =
true;
94 if (com_mod.nEq > 1) {
95 throw std::runtime_error(
"More than one eqn. is not allowed while initializing CMM.");
100 auto init_str = eq_params->initialize();
101 std::transform(init_str.begin(), init_str.end(), init_str.begin(), ::tolower);
103 if (std::set<std::string>{
"inflate",
"inf"}.count(init_str) != 0) {
104 com_mod.pstEq =
false;
105 }
else if (std::set<std::string>{
"prestress",
"prest"}.count(init_str) != 0) {
106 com_mod.pstEq =
true;
108 throw std::runtime_error(
"Unknown CMM initialize type '" + init_str +
"'.");
112 for (
int iM = 0; iM < com_mod.nMsh; iM++) {
113 set_cmm_bdry(com_mod.msh[iM], com_mod.cmmBdry);
119 if (eq_params->variable_wall_properties.defined()) {
120 com_mod.cmmVarWall =
true;
122 if (com_mod.varWallProps.size() == 0) {
124 com_mod.varWallProps.resize(2, com_mod.gtnNo);
127 auto mesh_name = eq_params->variable_wall_properties.mesh_name.value();
130 if (com_mod.cmmInit) {
131 all_fun::find_msh(com_mod.msh, mesh_name, iM);
133 all_fun::find_face(com_mod.msh, mesh_name, iM, iFa);
135 auto file_path = eq_params->variable_wall_properties.wall_properties_file_path.value();
136 read_wall_props_ff(com_mod, file_path, iM, iFa);
139 if (!com_mod.cmmInit) {
140 propL[0][0] = PhysicalProperyType::fluid_density;
141 propL[1][0] = PhysicalProperyType::backflow_stab;
142 propL[2][0] = PhysicalProperyType::solid_density;
143 propL[3][0] = PhysicalProperyType::poisson_ratio;
144 propL[4][0] = PhysicalProperyType::damping;
146 if (!com_mod.cmmVarWall) {
147 propL[5][0] = PhysicalProperyType::shell_thickness;
148 propL[6][0] = PhysicalProperyType::elasticity_modulus;
151 propL[7][0] = PhysicalProperyType::f_x;
152 propL[8][0] = PhysicalProperyType::f_y;
153 if (simulation->com_mod.nsd == 3) {
154 propL[9][0] = PhysicalProperyType::f_z;
157 nDOP = {12, 4, 3, 0};
159 OutputNameType::out_velocity,
160 OutputNameType::out_pressure,
161 OutputNameType::out_WSS,
162 OutputNameType::out_displacement,
163 OutputNameType::out_energyFlux,
164 OutputNameType::out_traction,
165 OutputNameType::out_vorticity,
166 OutputNameType::out_vortex,
167 OutputNameType::out_strainInv,
168 OutputNameType::out_viscosity,
169 OutputNameType::out_divergence,
170 OutputNameType::out_acceleration
174 propL[0][0] = PhysicalProperyType::poisson_ratio;
175 if (!com_mod.cmmVarWall) {
176 propL[1][0] = PhysicalProperyType::shell_thickness;
177 propL[2][0] = PhysicalProperyType::elasticity_modulus;
180 propL[7][0] = PhysicalProperyType::f_x;
181 propL[8][0] = PhysicalProperyType::f_y;
182 if (simulation->com_mod.nsd == 3) {
183 propL[9][0] = PhysicalProperyType::f_z;
188 outPuts = { OutputNameType::out_displacement, OutputNameType::out_stress };
191 outPuts[0] = OutputNameType::out_displacement;
195 read_domain(simulation, eq_params, lEq, propL);
197 if (com_mod.cmmInit) {
198 for (
auto& domain : lEq.dmn) {
199 domain.prop[PhysicalProperyType::solid_density] = 0.0;
204 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
213 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
215 using namespace consts;
216 auto& com_mod = simulation->get_com_mod();
217 lEq.phys = consts::EquationType::phys_fluid;
219 propL[0][0] = PhysicalProperyType::fluid_density;
220 propL[1][0] = PhysicalProperyType::backflow_stab;
221 propL[2][0] = PhysicalProperyType::inverse_darcy_permeability;
222 propL[3][0] = PhysicalProperyType::f_x;
223 propL[4][0] = PhysicalProperyType::f_y;
225 if (simulation->com_mod.nsd == 3) {
226 propL[5][0] = PhysicalProperyType::f_z;
230 read_domain(simulation, eq_params, lEq, propL);
232 nDOP = {11, 2, 3, 0};
235 OutputNameType::out_velocity,
236 OutputNameType::out_pressure,
237 OutputNameType::out_WSS,
238 OutputNameType::out_traction,
239 OutputNameType::out_vorticity,
240 OutputNameType::out_vortex,
241 OutputNameType::out_strainInv,
242 OutputNameType::out_energyFlux,
243 OutputNameType::out_viscosity,
244 OutputNameType::out_divergence,
245 OutputNameType::out_acceleration
249 read_ls(simulation, eq_params, SolverType::lSolver_NS, lEq);
258 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
260 using namespace consts;
261 auto& com_mod = simulation->get_com_mod();
262 lEq.phys = consts::EquationType::phys_heatF;
264 propL[0][0] = PhysicalProperyType::conductivity;
265 propL[1][0] = PhysicalProperyType::source_term;
267 read_domain(simulation, eq_params, lEq, propL);
270 outPuts = {OutputNameType::out_temperature,
271 OutputNameType::out_heatFlux,
272 OutputNameType::out_velocity};
275 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
284 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
286 using namespace consts;
287 auto& com_mod = simulation->get_com_mod();
288 lEq.phys = consts::EquationType::phys_heatS;
290 propL[0][0] = PhysicalProperyType::conductivity;
291 propL[1][0] = PhysicalProperyType::source_term;
292 propL[2][0] = PhysicalProperyType::solid_density;
294 read_domain(simulation, eq_params, lEq, propL);
297 outPuts = {OutputNameType::out_temperature, OutputNameType::out_heatFlux};
300 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
309 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
311 using namespace consts;
312 auto& com_mod = simulation->get_com_mod();
313 lEq.phys = consts::EquationType::phys_FSI;
314 com_mod.mvMsh =
true;
317 EquationPhys phys { EquationType::phys_fluid, EquationType::phys_struct, EquationType::phys_ustruct, EquationType::phys_lElas };
321 propL[0][n] = PhysicalProperyType::fluid_density;
322 propL[1][n] = PhysicalProperyType::backflow_stab;
323 propL[2][n] = PhysicalProperyType::f_x;
324 propL[3][n] = PhysicalProperyType::f_y;
325 if (simulation->com_mod.nsd == 3) {
326 propL[4][n] = PhysicalProperyType::f_z;
331 propL[0][n] = PhysicalProperyType::solid_density;
332 propL[1][n] = PhysicalProperyType::elasticity_modulus;
333 propL[2][n] = PhysicalProperyType::poisson_ratio;
334 propL[3][n] = PhysicalProperyType::damping;
335 propL[4][n] = PhysicalProperyType::f_x;
336 propL[5][n] = PhysicalProperyType::f_y;
337 if (simulation->com_mod.nsd == 3) {
338 propL[6][n] = PhysicalProperyType::f_z;
343 propL[0][n] = PhysicalProperyType::solid_density;
344 propL[1][n] = PhysicalProperyType::elasticity_modulus;
345 propL[2][n] = PhysicalProperyType::poisson_ratio;
346 propL[3][n] = PhysicalProperyType::ctau_M;
347 propL[4][n] = PhysicalProperyType::ctau_C;
348 propL[5][n] = PhysicalProperyType::f_x;
349 propL[6][n] = PhysicalProperyType::f_y;
350 if (simulation->com_mod.nsd == 3) {
351 propL[7][n] = PhysicalProperyType::f_z;
356 propL[0][n] = PhysicalProperyType::solid_density;
357 propL[1][n] = PhysicalProperyType::elasticity_modulus;
358 propL[2][n] = PhysicalProperyType::poisson_ratio;
359 propL[3][n] = PhysicalProperyType::f_x;
360 propL[4][n] = PhysicalProperyType::f_y;
361 if (simulation->com_mod.nsd == 3) {
362 propL[5][n] = PhysicalProperyType::f_z;
366 read_domain(simulation, eq_params, lEq, propL, phys);
368 nDOP = {22, 4, 2, 0};
370 OutputNameType::out_velocity,
371 OutputNameType::out_pressure,
372 OutputNameType::out_displacement,
373 OutputNameType::out_mises,
375 OutputNameType::out_WSS,
376 OutputNameType::out_traction,
377 OutputNameType::out_vorticity,
378 OutputNameType::out_vortex,
379 OutputNameType::out_strainInv,
380 OutputNameType::out_energyFlux,
381 OutputNameType::out_viscosity,
382 OutputNameType::out_absVelocity,
383 OutputNameType::out_stress,
384 OutputNameType::out_cauchy,
385 OutputNameType::out_strain,
386 OutputNameType::out_jacobian,
387 OutputNameType::out_defGrad,
388 OutputNameType::out_integ,
389 OutputNameType::out_fibDir,
390 OutputNameType::out_fibAlign,
392 OutputNameType::out_divergence,
393 OutputNameType::out_acceleration
397 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
399 if (com_mod.rmsh.isReqd && !com_mod.resetSim) {
400 read_rmsh(simulation, eq_params);
410 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
412 using namespace consts;
413 auto& com_mod = simulation->get_com_mod();
414 lEq.phys = consts::EquationType::phys_lElas;
416 propL[0][0] = PhysicalProperyType::solid_density;
417 propL[1][0] = PhysicalProperyType::elasticity_modulus;
418 propL[2][0] = PhysicalProperyType::poisson_ratio;
419 propL[3][0] = PhysicalProperyType::f_x;
420 propL[4][0] = PhysicalProperyType::f_y;
421 if (simulation->com_mod.nsd == 3) {
422 propL[5][0] = PhysicalProperyType::f_z;
425 read_domain(simulation, eq_params, lEq, propL);
427 if (eq_params->prestress.defined() && eq_params->prestress.value()) {
429 outPuts = {OutputNameType::out_displacement, OutputNameType::out_stress, OutputNameType::out_strain};
433 OutputNameType::out_displacement, OutputNameType::out_mises, OutputNameType::out_stress,
434 OutputNameType::out_strain, OutputNameType::out_velocity, OutputNameType::out_acceleration,
435 OutputNameType::out_integ, OutputNameType::out_jacobian
440 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
449 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
451 using namespace consts;
452 auto& com_mod = simulation->get_com_mod();
453 lEq.phys = consts::EquationType::phys_mesh;
455 propL[0][0] = PhysicalProperyType::solid_density;
456 propL[1][0] = PhysicalProperyType::elasticity_modulus;
457 propL[2][0] = PhysicalProperyType::poisson_ratio;
458 propL[3][0] = PhysicalProperyType::f_x;
459 propL[4][0] = PhysicalProperyType::f_y;
460 if (simulation->com_mod.nsd == 3) {
461 propL[5][0] = PhysicalProperyType::f_z;
464 read_domain(simulation, eq_params, lEq, propL);
466 for (
auto& domain : lEq.dmn) {
467 domain.prop[PhysicalProperyType::solid_density] = 0.0;
468 domain.prop[PhysicalProperyType::elasticity_modulus] = 1.0;
472 outPuts = {OutputNameType::out_displacement, OutputNameType::out_velocity, OutputNameType::out_acceleration };
477 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
486 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
488 using namespace consts;
489 auto& com_mod = simulation->get_com_mod();
490 lEq.phys = consts::EquationType::phys_shell;
491 com_mod.shlEq =
true;
493 propL[0][0] = PhysicalProperyType::solid_density;
494 propL[1][0] = PhysicalProperyType::damping;
495 propL[2][0] = PhysicalProperyType::elasticity_modulus;
496 propL[3][0] = PhysicalProperyType::poisson_ratio;
497 propL[4][0] = PhysicalProperyType::shell_thickness;
498 propL[5][0] = PhysicalProperyType::f_x;
499 propL[6][0] = PhysicalProperyType::f_y;
500 propL[7][0] = PhysicalProperyType::f_z;
502 read_domain(simulation, eq_params, lEq, propL);
506 OutputNameType::out_displacement,
507 OutputNameType::out_stress,
508 OutputNameType::out_strain,
509 OutputNameType::out_jacobian,
510 OutputNameType::out_defGrad,
511 OutputNameType::out_velocity,
512 OutputNameType::out_integ,
513 OutputNameType::out_CGstrain,
514 OutputNameType::out_CGInv1
518 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
527 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
529 using namespace consts;
530 auto& com_mod = simulation->get_com_mod();
531 lEq.phys = consts::EquationType::phys_stokes;
533 propL[0][0] = PhysicalProperyType::ctau_M;
534 propL[1][0] = PhysicalProperyType::f_x;
535 propL[2][0] = PhysicalProperyType::f_y;
536 if (simulation->com_mod.nsd == 3) {
537 propL[3][0] = PhysicalProperyType::f_z;
539 read_domain(simulation, eq_params, lEq, propL);
543 OutputNameType::out_velocity,
544 OutputNameType::out_pressure,
545 OutputNameType::out_WSS,
546 OutputNameType::out_vorticity,
547 OutputNameType::out_traction,
548 OutputNameType::out_strainInv,
549 OutputNameType::out_viscosity,
550 OutputNameType::out_divergence
554 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
563 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
565 using namespace consts;
566 auto& com_mod = simulation->get_com_mod();
567 lEq.phys = consts::EquationType::phys_struct;
569 propL[0][0] = PhysicalProperyType::solid_density;
570 propL[1][0] = PhysicalProperyType::damping;
571 propL[2][0] = PhysicalProperyType::elasticity_modulus;
572 propL[3][0] = PhysicalProperyType::poisson_ratio;
573 propL[4][0] = PhysicalProperyType::f_x;
574 propL[5][0] = PhysicalProperyType::f_y;
575 if (simulation->com_mod.nsd == 3) {
576 propL[6][0] = PhysicalProperyType::f_z;
579 read_domain(simulation, eq_params, lEq, propL);
581 if (eq_params->prestress.defined() && eq_params->prestress.value()) {
583 outPuts = {OutputNameType::out_displacement, OutputNameType::out_stress, OutputNameType::out_cauchy, OutputNameType::out_strain};
588 OutputNameType::out_displacement, OutputNameType::out_mises, OutputNameType::out_stress,
589 OutputNameType::out_cauchy, OutputNameType::out_strain, OutputNameType::out_jacobian,
590 OutputNameType::out_defGrad, OutputNameType::out_integ, OutputNameType::out_fibDir,
591 OutputNameType::out_fibAlign, OutputNameType::out_velocity, OutputNameType::out_acceleration
596 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
605 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
607 using namespace consts;
608 auto& com_mod = simulation->get_com_mod();
610 lEq.phys = consts::EquationType::phys_ustruct;
611 com_mod.sstEq =
true;
613 propL[0][0] = PhysicalProperyType::solid_density;
614 propL[1][0] = PhysicalProperyType::elasticity_modulus;
615 propL[2][0] = PhysicalProperyType::poisson_ratio;
616 propL[3][0] = PhysicalProperyType::ctau_M;
617 propL[4][0] = PhysicalProperyType::ctau_C;
618 propL[5][0] = PhysicalProperyType::f_x;
619 propL[6][0] = PhysicalProperyType::f_y;
620 if (simulation->com_mod.nsd == 3) {
621 propL[7][0] = PhysicalProperyType::f_z;
624 read_domain(simulation, eq_params, lEq, propL);
626 nDOP = {14, 2, 0, 0};
628 OutputNameType::out_displacement,
629 OutputNameType::out_mises,
630 OutputNameType::out_stress,
631 OutputNameType::out_cauchy,
632 OutputNameType::out_strain,
633 OutputNameType::out_jacobian,
634 OutputNameType::out_defGrad,
635 OutputNameType::out_integ,
636 OutputNameType::out_fibDir,
637 OutputNameType::out_fibAlign,
638 OutputNameType::out_velocity,
639 OutputNameType::out_pressure,
640 OutputNameType::out_acceleration,
641 OutputNameType::out_divergence
645 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
The EquationParameters class stores parameters for the 'Add_equation' XML element used to specify an ...
Definition Parameters.h:1218
Definition Simulation.h:41
Equation type.
Definition ComMod.h:1022