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] = PhysicalProperyType::fluid_density;
30 propL[1][0] = PhysicalProperyType::backflow_stab;
31 propL[2][0] = PhysicalProperyType::f_x;
32 propL[3][0] = PhysicalProperyType::f_y;
34 if (simulation->com_mod.nsd == 3) {
35 propL[4][0] = PhysicalProperyType::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] = PhysicalProperyType::fluid_density;
114 propL[1][0] = PhysicalProperyType::backflow_stab;
115 propL[2][0] = PhysicalProperyType::solid_density;
116 propL[3][0] = PhysicalProperyType::poisson_ratio;
117 propL[4][0] = PhysicalProperyType::damping;
119 if (!com_mod.cmmVarWall) {
120 propL[5][0] = PhysicalProperyType::shell_thickness;
121 propL[6][0] = PhysicalProperyType::elasticity_modulus;
124 propL[7][0] = PhysicalProperyType::f_x;
125 propL[8][0] = PhysicalProperyType::f_y;
126 if (simulation->com_mod.nsd == 3) {
127 propL[9][0] = PhysicalProperyType::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] = PhysicalProperyType::poisson_ratio;
148 if (!com_mod.cmmVarWall) {
149 propL[1][0] = PhysicalProperyType::shell_thickness;
150 propL[2][0] = PhysicalProperyType::elasticity_modulus;
153 propL[7][0] = PhysicalProperyType::f_x;
154 propL[8][0] = PhysicalProperyType::f_y;
155 if (simulation->com_mod.nsd == 3) {
156 propL[9][0] = PhysicalProperyType::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[PhysicalProperyType::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] = PhysicalProperyType::fluid_density;
193 propL[1][0] = PhysicalProperyType::backflow_stab;
194 propL[2][0] = PhysicalProperyType::inverse_darcy_permeability;
195 propL[3][0] = PhysicalProperyType::f_x;
196 propL[4][0] = PhysicalProperyType::f_y;
198 if (simulation->com_mod.nsd == 3) {
199 propL[5][0] = PhysicalProperyType::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] = PhysicalProperyType::conductivity;
238 propL[1][0] = PhysicalProperyType::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] = PhysicalProperyType::conductivity;
264 propL[1][0] = PhysicalProperyType::source_term;
265 propL[2][0] = PhysicalProperyType::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);
282 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
284 using namespace consts;
285 auto& com_mod = simulation->get_com_mod();
286 lEq.phys = consts::EquationType::phys_FSI;
287 com_mod.mvMsh =
true;
290 EquationPhys phys { EquationType::phys_fluid, EquationType::phys_struct, EquationType::phys_ustruct, EquationType::phys_lElas };
294 propL[0][n] = PhysicalProperyType::fluid_density;
295 propL[1][n] = PhysicalProperyType::backflow_stab;
296 propL[2][n] = PhysicalProperyType::f_x;
297 propL[3][n] = PhysicalProperyType::f_y;
298 if (simulation->com_mod.nsd == 3) {
299 propL[4][n] = PhysicalProperyType::f_z;
304 propL[0][n] = PhysicalProperyType::solid_density;
305 propL[1][n] = PhysicalProperyType::elasticity_modulus;
306 propL[2][n] = PhysicalProperyType::poisson_ratio;
307 propL[3][n] = PhysicalProperyType::damping;
308 propL[4][n] = PhysicalProperyType::f_x;
309 propL[5][n] = PhysicalProperyType::f_y;
310 if (simulation->com_mod.nsd == 3) {
311 propL[6][n] = PhysicalProperyType::f_z;
316 propL[0][n] = PhysicalProperyType::solid_density;
317 propL[1][n] = PhysicalProperyType::elasticity_modulus;
318 propL[2][n] = PhysicalProperyType::poisson_ratio;
319 propL[3][n] = PhysicalProperyType::ctau_M;
320 propL[4][n] = PhysicalProperyType::ctau_C;
321 propL[5][n] = PhysicalProperyType::f_x;
322 propL[6][n] = PhysicalProperyType::f_y;
323 if (simulation->com_mod.nsd == 3) {
324 propL[7][n] = PhysicalProperyType::f_z;
329 propL[0][n] = PhysicalProperyType::solid_density;
330 propL[1][n] = PhysicalProperyType::elasticity_modulus;
331 propL[2][n] = PhysicalProperyType::poisson_ratio;
332 propL[3][n] = PhysicalProperyType::f_x;
333 propL[4][n] = PhysicalProperyType::f_y;
334 if (simulation->com_mod.nsd == 3) {
335 propL[5][n] = PhysicalProperyType::f_z;
339 read_domain(simulation, eq_params, lEq, propL, phys);
341 nDOP = {22, 4, 2, 0};
343 OutputNameType::out_velocity,
344 OutputNameType::out_pressure,
345 OutputNameType::out_displacement,
346 OutputNameType::out_mises,
348 OutputNameType::out_WSS,
349 OutputNameType::out_traction,
350 OutputNameType::out_vorticity,
351 OutputNameType::out_vortex,
352 OutputNameType::out_strainInv,
353 OutputNameType::out_energyFlux,
354 OutputNameType::out_viscosity,
355 OutputNameType::out_absVelocity,
356 OutputNameType::out_stress,
357 OutputNameType::out_cauchy,
358 OutputNameType::out_strain,
359 OutputNameType::out_jacobian,
360 OutputNameType::out_defGrad,
361 OutputNameType::out_integ,
362 OutputNameType::out_fibDir,
363 OutputNameType::out_fibAlign,
365 OutputNameType::out_divergence,
366 OutputNameType::out_acceleration
370 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
372 if (com_mod.rmsh.isReqd && !com_mod.resetSim) {
373 read_rmsh(simulation, eq_params);
383 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
385 using namespace consts;
386 auto& com_mod = simulation->get_com_mod();
387 lEq.phys = consts::EquationType::phys_lElas;
389 propL[0][0] = PhysicalProperyType::solid_density;
390 propL[1][0] = PhysicalProperyType::elasticity_modulus;
391 propL[2][0] = PhysicalProperyType::poisson_ratio;
392 propL[3][0] = PhysicalProperyType::f_x;
393 propL[4][0] = PhysicalProperyType::f_y;
394 if (simulation->com_mod.nsd == 3) {
395 propL[5][0] = PhysicalProperyType::f_z;
398 read_domain(simulation, eq_params, lEq, propL);
400 if (eq_params->prestress.defined() && eq_params->prestress.value()) {
402 outPuts = {OutputNameType::out_displacement, OutputNameType::out_stress, OutputNameType::out_strain};
406 OutputNameType::out_displacement, OutputNameType::out_mises, OutputNameType::out_stress,
407 OutputNameType::out_strain, OutputNameType::out_velocity, OutputNameType::out_acceleration,
408 OutputNameType::out_integ, OutputNameType::out_jacobian
413 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
422 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
424 using namespace consts;
425 auto& com_mod = simulation->get_com_mod();
426 lEq.phys = consts::EquationType::phys_mesh;
428 propL[0][0] = PhysicalProperyType::solid_density;
429 propL[1][0] = PhysicalProperyType::elasticity_modulus;
430 propL[2][0] = PhysicalProperyType::poisson_ratio;
431 propL[3][0] = PhysicalProperyType::f_x;
432 propL[4][0] = PhysicalProperyType::f_y;
433 if (simulation->com_mod.nsd == 3) {
434 propL[5][0] = PhysicalProperyType::f_z;
437 read_domain(simulation, eq_params, lEq, propL);
439 for (
auto& domain : lEq.dmn) {
440 domain.prop[PhysicalProperyType::solid_density] = 0.0;
441 domain.prop[PhysicalProperyType::elasticity_modulus] = 1.0;
445 outPuts = {OutputNameType::out_displacement, OutputNameType::out_velocity, OutputNameType::out_acceleration };
450 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
459 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
461 using namespace consts;
462 auto& com_mod = simulation->get_com_mod();
463 lEq.phys = consts::EquationType::phys_shell;
464 com_mod.shlEq =
true;
466 propL[0][0] = PhysicalProperyType::solid_density;
467 propL[1][0] = PhysicalProperyType::damping;
468 propL[2][0] = PhysicalProperyType::elasticity_modulus;
469 propL[3][0] = PhysicalProperyType::poisson_ratio;
470 propL[4][0] = PhysicalProperyType::shell_thickness;
471 propL[5][0] = PhysicalProperyType::f_x;
472 propL[6][0] = PhysicalProperyType::f_y;
473 propL[7][0] = PhysicalProperyType::f_z;
475 read_domain(simulation, eq_params, lEq, propL);
479 OutputNameType::out_displacement,
480 OutputNameType::out_stress,
481 OutputNameType::out_strain,
482 OutputNameType::out_jacobian,
483 OutputNameType::out_defGrad,
484 OutputNameType::out_velocity,
485 OutputNameType::out_integ,
486 OutputNameType::out_CGstrain,
487 OutputNameType::out_CGInv1
491 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
500 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
502 using namespace consts;
503 auto& com_mod = simulation->get_com_mod();
504 lEq.phys = consts::EquationType::phys_stokes;
506 propL[0][0] = PhysicalProperyType::ctau_M;
507 propL[1][0] = PhysicalProperyType::f_x;
508 propL[2][0] = PhysicalProperyType::f_y;
509 if (simulation->com_mod.nsd == 3) {
510 propL[3][0] = PhysicalProperyType::f_z;
512 read_domain(simulation, eq_params, lEq, propL);
516 OutputNameType::out_velocity,
517 OutputNameType::out_pressure,
518 OutputNameType::out_WSS,
519 OutputNameType::out_vorticity,
520 OutputNameType::out_traction,
521 OutputNameType::out_strainInv,
522 OutputNameType::out_viscosity,
523 OutputNameType::out_divergence
527 read_ls(simulation, eq_params, SolverType::lSolver_GMRES, lEq);
536 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
538 using namespace consts;
539 auto& com_mod = simulation->get_com_mod();
540 lEq.phys = consts::EquationType::phys_struct;
542 propL[0][0] = PhysicalProperyType::solid_density;
543 propL[1][0] = PhysicalProperyType::damping;
544 propL[2][0] = PhysicalProperyType::elasticity_modulus;
545 propL[3][0] = PhysicalProperyType::poisson_ratio;
546 propL[4][0] = PhysicalProperyType::f_x;
547 propL[5][0] = PhysicalProperyType::f_y;
548 if (simulation->com_mod.nsd == 3) {
549 propL[6][0] = PhysicalProperyType::f_z;
552 read_domain(simulation, eq_params, lEq, propL);
554 if (eq_params->prestress.defined() && eq_params->prestress.value()) {
556 outPuts = {OutputNameType::out_displacement, OutputNameType::out_stress, OutputNameType::out_cauchy, OutputNameType::out_strain};
561 OutputNameType::out_displacement, OutputNameType::out_mises, OutputNameType::out_stress,
562 OutputNameType::out_cauchy, OutputNameType::out_strain, OutputNameType::out_jacobian,
563 OutputNameType::out_defGrad, OutputNameType::out_integ, OutputNameType::out_fibDir,
564 OutputNameType::out_fibAlign, OutputNameType::out_velocity, OutputNameType::out_acceleration
569 read_ls(simulation, eq_params, SolverType::lSolver_CG, lEq);
578 EquationOutputs& outPuts, EquationNdop& nDOP) ->
void
580 using namespace consts;
581 auto& com_mod = simulation->get_com_mod();
583 lEq.phys = consts::EquationType::phys_ustruct;
584 com_mod.sstEq =
true;
586 propL[0][0] = PhysicalProperyType::solid_density;
587 propL[1][0] = PhysicalProperyType::elasticity_modulus;
588 propL[2][0] = PhysicalProperyType::poisson_ratio;
589 propL[3][0] = PhysicalProperyType::ctau_M;
590 propL[4][0] = PhysicalProperyType::ctau_C;
591 propL[5][0] = PhysicalProperyType::f_x;
592 propL[6][0] = PhysicalProperyType::f_y;
593 if (simulation->com_mod.nsd == 3) {
594 propL[7][0] = PhysicalProperyType::f_z;
597 read_domain(simulation, eq_params, lEq, propL);
599 nDOP = {14, 2, 0, 0};
601 OutputNameType::out_displacement,
602 OutputNameType::out_mises,
603 OutputNameType::out_stress,
604 OutputNameType::out_cauchy,
605 OutputNameType::out_strain,
606 OutputNameType::out_jacobian,
607 OutputNameType::out_defGrad,
608 OutputNameType::out_integ,
609 OutputNameType::out_fibDir,
610 OutputNameType::out_fibAlign,
611 OutputNameType::out_velocity,
612 OutputNameType::out_pressure,
613 OutputNameType::out_acceleration,
614 OutputNameType::out_divergence
618 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:1290
Definition Simulation.h:14
Equation type.
Definition ComMod.h:1069