10 eqType&, EquationProps&, EquationOutputs&, EquationNdop&)>>;
16SetEquationPropertiesMapType set_equation_props = {
23 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
25 using namespace consts;
26 auto& cep_mod = simulation->get_cep_mod();
27 lEq.phys = consts::EquationType::phys_CEP;
29 propL[0][0] = PhysicalPropertyType::fluid_density;
30 propL[1][0] = PhysicalPropertyType::backflow_stab;
31 propL[2][0] = PhysicalPropertyType::f_x;
32 propL[3][0] = PhysicalPropertyType::f_y;
34 if (simulation->com_mod.nsd == 3) {
35 propL[4][0] = PhysicalPropertyType::f_z;
40 read_domain(simulation, eq_params, lEq, propL);
43 outPuts[0] = OutputNameType::out_voltage;
46 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
55 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
57 using namespace consts;
58 auto& com_mod = simulation->get_com_mod();
59 lEq.phys = consts::EquationType::phys_CMM;
61 bool pstEq = eq_params->prestress.defined() && eq_params->prestress.value();
63 com_mod.cmmBdry.resize(com_mod.gtnNo);
64 if (eq_params->initialize.defined()) {
65 com_mod.cmmInit =
true;
67 if (com_mod.nEq > 1) {
68 throw std::runtime_error(
"More than one eqn. is not allowed while initializing CMM.");
73 auto init_str = eq_params->initialize();
74 std::transform(init_str.begin(), init_str.end(), init_str.begin(), ::tolower);
76 if (std::set<std::string>{
"inflate",
"inf"}.count(init_str) != 0) {
77 com_mod.pstEq =
false;
78 }
else if (std::set<std::string>{
"prestress",
"prest"}.count(init_str) != 0) {
81 throw std::runtime_error(
"Unknown CMM initialize type '" + init_str +
"'.");
85 for (
int iM = 0; iM < com_mod.nMsh; iM++) {
86 set_cmm_bdry(com_mod.msh[iM], com_mod.cmmBdry);
92 if (eq_params->variable_wall_properties.defined()) {
93 com_mod.cmmVarWall =
true;
95 if (com_mod.varWallProps.size() == 0) {
97 com_mod.varWallProps.resize(2, com_mod.gtnNo);
100 auto mesh_name = eq_params->variable_wall_properties.mesh_name.value();
103 if (com_mod.cmmInit) {
104 all_fun::find_msh(com_mod.msh, mesh_name, iM);
106 all_fun::find_face(com_mod.msh, mesh_name, iM, iFa);
108 auto file_path = eq_params->variable_wall_properties.wall_properties_file_path.value();
109 read_wall_props_ff(com_mod, file_path, iM, iFa);
112 if (!com_mod.cmmInit) {
113 propL[0][0] = PhysicalPropertyType::fluid_density;
114 propL[1][0] = PhysicalPropertyType::backflow_stab;
115 propL[2][0] = PhysicalPropertyType::solid_density;
116 propL[3][0] = PhysicalPropertyType::poisson_ratio;
117 propL[4][0] = PhysicalPropertyType::damping;
119 if (!com_mod.cmmVarWall) {
120 propL[5][0] = PhysicalPropertyType::shell_thickness;
121 propL[6][0] = PhysicalPropertyType::elasticity_modulus;
124 propL[7][0] = PhysicalPropertyType::f_x;
125 propL[8][0] = PhysicalPropertyType::f_y;
126 if (simulation->com_mod.nsd == 3) {
127 propL[9][0] = PhysicalPropertyType::f_z;
130 nDOP = {12, 4, 3, 0};
132 OutputNameType::out_velocity,
133 OutputNameType::out_pressure,
134 OutputNameType::out_WSS,
135 OutputNameType::out_displacement,
136 OutputNameType::out_energyFlux,
137 OutputNameType::out_traction,
138 OutputNameType::out_vorticity,
139 OutputNameType::out_vortex,
140 OutputNameType::out_strainInv,
141 OutputNameType::out_viscosity,
142 OutputNameType::out_divergence,
143 OutputNameType::out_acceleration
147 propL[0][0] = PhysicalPropertyType::poisson_ratio;
148 if (!com_mod.cmmVarWall) {
149 propL[1][0] = PhysicalPropertyType::shell_thickness;
150 propL[2][0] = PhysicalPropertyType::elasticity_modulus;
153 propL[7][0] = PhysicalPropertyType::f_x;
154 propL[8][0] = PhysicalPropertyType::f_y;
155 if (simulation->com_mod.nsd == 3) {
156 propL[9][0] = PhysicalPropertyType::f_z;
161 outPuts = { OutputNameType::out_displacement, OutputNameType::out_stress };
164 outPuts[0] = OutputNameType::out_displacement;
168 read_domain(simulation, eq_params, lEq, propL);
170 if (com_mod.cmmInit) {
171 for (
auto& domain : lEq.dmn) {
172 domain.prop[PhysicalPropertyType::solid_density] = 0.0;
177 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
186 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
188 using namespace consts;
189 auto& com_mod = simulation->get_com_mod();
190 lEq.phys = consts::EquationType::phys_fluid;
192 propL[0][0] = PhysicalPropertyType::fluid_density;
193 propL[1][0] = PhysicalPropertyType::backflow_stab;
194 propL[2][0] = PhysicalPropertyType::brinkman_inverse_permeability;
195 propL[3][0] = PhysicalPropertyType::f_x;
196 propL[4][0] = PhysicalPropertyType::f_y;
198 if (simulation->com_mod.nsd == 3) {
199 propL[5][0] = PhysicalPropertyType::f_z;
203 read_domain(simulation, eq_params, lEq, propL);
205 nDOP = {11, 2, 3, 0};
208 OutputNameType::out_velocity,
209 OutputNameType::out_pressure,
210 OutputNameType::out_WSS,
211 OutputNameType::out_traction,
212 OutputNameType::out_vorticity,
213 OutputNameType::out_vortex,
214 OutputNameType::out_strainInv,
215 OutputNameType::out_energyFlux,
216 OutputNameType::out_viscosity,
217 OutputNameType::out_divergence,
218 OutputNameType::out_acceleration
222 read_ls(simulation, eq_params, SolverType::lSolver_NS, lEq);
231 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
233 using namespace consts;
234 auto& com_mod = simulation->get_com_mod();
235 lEq.phys = consts::EquationType::phys_heatF;
237 propL[0][0] = PhysicalPropertyType::conductivity;
238 propL[1][0] = PhysicalPropertyType::source_term;
240 read_domain(simulation, eq_params, lEq, propL);
243 outPuts = {OutputNameType::out_temperature,
244 OutputNameType::out_heatFlux,
245 OutputNameType::out_velocity};
248 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
257 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
259 using namespace consts;
260 auto& com_mod = simulation->get_com_mod();
261 lEq.phys = consts::EquationType::phys_heatS;
263 propL[0][0] = PhysicalPropertyType::conductivity;
264 propL[1][0] = PhysicalPropertyType::source_term;
265 propL[2][0] = PhysicalPropertyType::solid_density;
267 read_domain(simulation, eq_params, lEq, propL);
270 outPuts = {OutputNameType::out_temperature, OutputNameType::out_heatFlux};
273 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
281 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
283 using namespace consts;
284 auto& com_mod = simulation->get_com_mod();
285 lEq.phys = consts::EquationType::phys_darcy;
287 propL[0][0] = PhysicalPropertyType::darcy_permeability;
288 propL[1][0] = PhysicalPropertyType::source_term;
289 propL[2][0] = PhysicalPropertyType::fluid_density;
290 propL[3][0] = PhysicalPropertyType::darcy_compressibility;
291 propL[4][0] = PhysicalPropertyType::darcy_fluid_viscosity;
293 read_domain(simulation, eq_params, lEq, propL);
295 for (
const auto& domain : lEq.dmn) {
300 outPuts = {OutputNameType::out_darcyPressure, OutputNameType::out_darcyFlux};
303 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
312 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
314 using namespace consts;
315 auto& com_mod = simulation->get_com_mod();
316 lEq.phys = consts::EquationType::phys_FSI;
317 com_mod.mvMsh =
true;
320 EquationPhys phys { EquationType::phys_fluid, EquationType::phys_struct, EquationType::phys_ustruct, EquationType::phys_lElas };
324 propL[0][n] = PhysicalPropertyType::fluid_density;
325 propL[1][n] = PhysicalPropertyType::backflow_stab;
326 propL[2][n] = PhysicalPropertyType::f_x;
327 propL[3][n] = PhysicalPropertyType::f_y;
328 if (simulation->com_mod.nsd == 3) {
329 propL[4][n] = PhysicalPropertyType::f_z;
334 propL[0][n] = PhysicalPropertyType::solid_density;
335 propL[1][n] = PhysicalPropertyType::elasticity_modulus;
336 propL[2][n] = PhysicalPropertyType::poisson_ratio;
337 propL[3][n] = PhysicalPropertyType::damping;
338 propL[4][n] = PhysicalPropertyType::f_x;
339 propL[5][n] = PhysicalPropertyType::f_y;
340 if (simulation->com_mod.nsd == 3) {
341 propL[6][n] = PhysicalPropertyType::f_z;
346 propL[0][n] = PhysicalPropertyType::solid_density;
347 propL[1][n] = PhysicalPropertyType::elasticity_modulus;
348 propL[2][n] = PhysicalPropertyType::poisson_ratio;
349 propL[3][n] = PhysicalPropertyType::ctau_M;
350 propL[4][n] = PhysicalPropertyType::ctau_C;
351 propL[5][n] = PhysicalPropertyType::f_x;
352 propL[6][n] = PhysicalPropertyType::f_y;
353 if (simulation->com_mod.nsd == 3) {
354 propL[7][n] = PhysicalPropertyType::f_z;
359 propL[0][n] = PhysicalPropertyType::solid_density;
360 propL[1][n] = PhysicalPropertyType::elasticity_modulus;
361 propL[2][n] = PhysicalPropertyType::poisson_ratio;
362 propL[3][n] = PhysicalPropertyType::f_x;
363 propL[4][n] = PhysicalPropertyType::f_y;
364 if (simulation->com_mod.nsd == 3) {
365 propL[5][n] = PhysicalPropertyType::f_z;
369 read_domain(simulation, eq_params, lEq, propL, phys);
371 nDOP = {22, 4, 2, 0};
373 OutputNameType::out_velocity,
374 OutputNameType::out_pressure,
375 OutputNameType::out_displacement,
376 OutputNameType::out_mises,
378 OutputNameType::out_WSS,
379 OutputNameType::out_traction,
380 OutputNameType::out_vorticity,
381 OutputNameType::out_vortex,
382 OutputNameType::out_strainInv,
383 OutputNameType::out_energyFlux,
384 OutputNameType::out_viscosity,
385 OutputNameType::out_absVelocity,
386 OutputNameType::out_stress,
387 OutputNameType::out_cauchy,
388 OutputNameType::out_strain,
389 OutputNameType::out_jacobian,
390 OutputNameType::out_defGrad,
391 OutputNameType::out_integ,
392 OutputNameType::out_fibDir,
393 OutputNameType::out_fibAlign,
395 OutputNameType::out_divergence,
396 OutputNameType::out_acceleration
400 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
402 if (com_mod.rmsh.isReqd && !com_mod.resetSim) {
403 read_rmsh(simulation, eq_params);
413 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
415 using namespace consts;
416 auto& com_mod = simulation->get_com_mod();
417 lEq.phys = consts::EquationType::phys_lElas;
419 propL[0][0] = PhysicalPropertyType::solid_density;
420 propL[1][0] = PhysicalPropertyType::elasticity_modulus;
421 propL[2][0] = PhysicalPropertyType::poisson_ratio;
422 propL[3][0] = PhysicalPropertyType::f_x;
423 propL[4][0] = PhysicalPropertyType::f_y;
424 if (simulation->com_mod.nsd == 3) {
425 propL[5][0] = PhysicalPropertyType::f_z;
428 read_domain(simulation, eq_params, lEq, propL);
430 if (eq_params->prestress.defined() && eq_params->prestress.value()) {
432 outPuts = {OutputNameType::out_displacement, OutputNameType::out_stress, OutputNameType::out_strain};
436 OutputNameType::out_displacement, OutputNameType::out_mises, OutputNameType::out_stress,
437 OutputNameType::out_strain, OutputNameType::out_velocity, OutputNameType::out_acceleration,
438 OutputNameType::out_integ, OutputNameType::out_jacobian
443 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
452 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
454 using namespace consts;
455 auto& com_mod = simulation->get_com_mod();
456 lEq.phys = consts::EquationType::phys_mesh;
458 propL[0][0] = PhysicalPropertyType::solid_density;
459 propL[1][0] = PhysicalPropertyType::elasticity_modulus;
460 propL[2][0] = PhysicalPropertyType::poisson_ratio;
461 propL[3][0] = PhysicalPropertyType::f_x;
462 propL[4][0] = PhysicalPropertyType::f_y;
463 if (simulation->com_mod.nsd == 3) {
464 propL[5][0] = PhysicalPropertyType::f_z;
467 read_domain(simulation, eq_params, lEq, propL);
469 for (
auto& domain : lEq.dmn) {
470 domain.prop[PhysicalPropertyType::solid_density] = 0.0;
471 domain.prop[PhysicalPropertyType::elasticity_modulus] = 1.0;
475 outPuts = {OutputNameType::out_displacement, OutputNameType::out_velocity, OutputNameType::out_acceleration };
480 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
489 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
491 using namespace consts;
492 auto& com_mod = simulation->get_com_mod();
493 lEq.phys = consts::EquationType::phys_shell;
494 com_mod.shlEq =
true;
496 propL[0][0] = PhysicalPropertyType::solid_density;
497 propL[1][0] = PhysicalPropertyType::damping;
498 propL[2][0] = PhysicalPropertyType::elasticity_modulus;
499 propL[3][0] = PhysicalPropertyType::poisson_ratio;
500 propL[4][0] = PhysicalPropertyType::shell_thickness;
501 propL[5][0] = PhysicalPropertyType::f_x;
502 propL[6][0] = PhysicalPropertyType::f_y;
503 propL[7][0] = PhysicalPropertyType::f_z;
505 read_domain(simulation, eq_params, lEq, propL);
509 OutputNameType::out_displacement,
510 OutputNameType::out_stress,
511 OutputNameType::out_strain,
512 OutputNameType::out_jacobian,
513 OutputNameType::out_defGrad,
514 OutputNameType::out_velocity,
515 OutputNameType::out_integ,
516 OutputNameType::out_CGstrain,
517 OutputNameType::out_CGInv1
521 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
530 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
532 using namespace consts;
533 auto& com_mod = simulation->get_com_mod();
534 lEq.phys = consts::EquationType::phys_stokes;
536 propL[0][0] = PhysicalPropertyType::ctau_M;
537 propL[1][0] = PhysicalPropertyType::f_x;
538 propL[2][0] = PhysicalPropertyType::f_y;
539 if (simulation->com_mod.nsd == 3) {
540 propL[3][0] = PhysicalPropertyType::f_z;
542 read_domain(simulation, eq_params, lEq, propL);
546 OutputNameType::out_velocity,
547 OutputNameType::out_pressure,
548 OutputNameType::out_WSS,
549 OutputNameType::out_vorticity,
550 OutputNameType::out_traction,
551 OutputNameType::out_strainInv,
552 OutputNameType::out_viscosity,
553 OutputNameType::out_divergence
557 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
566 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
568 using namespace consts;
569 auto& com_mod = simulation->get_com_mod();
570 lEq.phys = consts::EquationType::phys_struct;
572 propL[0][0] = PhysicalPropertyType::solid_density;
573 propL[1][0] = PhysicalPropertyType::damping;
574 propL[2][0] = PhysicalPropertyType::elasticity_modulus;
575 propL[3][0] = PhysicalPropertyType::poisson_ratio;
576 propL[4][0] = PhysicalPropertyType::f_x;
577 propL[5][0] = PhysicalPropertyType::f_y;
578 if (simulation->com_mod.nsd == 3) {
579 propL[6][0] = PhysicalPropertyType::f_z;
582 read_domain(simulation, eq_params, lEq, propL);
584 if (eq_params->prestress.defined() && eq_params->prestress.value()) {
586 outPuts = {OutputNameType::out_displacement, OutputNameType::out_stress, OutputNameType::out_cauchy, OutputNameType::out_strain};
589 nDOP = {17, 2, 0, 0};
590 outPuts = {OutputNameType::out_displacement,
591 OutputNameType::out_mises,
592 OutputNameType::out_stress,
593 OutputNameType::out_cauchy,
594 OutputNameType::out_strain,
595 OutputNameType::out_jacobian,
596 OutputNameType::out_defGrad,
597 OutputNameType::out_integ,
598 OutputNameType::out_fibDir,
599 OutputNameType::out_fibAlign,
600 OutputNameType::out_velocity,
601 OutputNameType::out_acceleration,
602 OutputNameType::out_fibStretch,
603 OutputNameType::out_fibStretchRate,
604 OutputNameType::out_activeTensionFibers,
605 OutputNameType::out_activeTensionSheets,
606 OutputNameType::out_activeTensionNormal};
610 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
619 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
621 using namespace consts;
622 auto& com_mod = simulation->get_com_mod();
624 lEq.phys = consts::EquationType::phys_ustruct;
625 com_mod.sstEq =
true;
627 propL[0][0] = PhysicalPropertyType::solid_density;
628 propL[1][0] = PhysicalPropertyType::elasticity_modulus;
629 propL[2][0] = PhysicalPropertyType::poisson_ratio;
630 propL[3][0] = PhysicalPropertyType::ctau_M;
631 propL[4][0] = PhysicalPropertyType::ctau_C;
632 propL[5][0] = PhysicalPropertyType::f_x;
633 propL[6][0] = PhysicalPropertyType::f_y;
634 if (simulation->com_mod.nsd == 3) {
635 propL[7][0] = PhysicalPropertyType::f_z;
638 read_domain(simulation, eq_params, lEq, propL);
640 nDOP = {19, 2, 0, 0};
641 outPuts = {OutputNameType::out_displacement,
642 OutputNameType::out_mises,
643 OutputNameType::out_stress,
644 OutputNameType::out_cauchy,
645 OutputNameType::out_strain,
646 OutputNameType::out_jacobian,
647 OutputNameType::out_defGrad,
648 OutputNameType::out_integ,
649 OutputNameType::out_fibDir,
650 OutputNameType::out_fibAlign,
651 OutputNameType::out_velocity,
652 OutputNameType::out_pressure,
653 OutputNameType::out_acceleration,
654 OutputNameType::out_divergence,
655 OutputNameType::out_fibStretch,
656 OutputNameType::out_fibStretchRate,
657 OutputNameType::out_activeTensionFibers,
658 OutputNameType::out_activeTensionSheets,
659 OutputNameType::out_activeTensionNormal};
662 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:1748
Definition Simulation.h:19
Equation type.
Definition ComMod.h:1084
void validate_material_properties(const dmnType &domain)
Definition darcy.cpp:15