17 #include <boost/algorithm/string/predicate.hpp>
22 #include <pybind11/eval.h>
31 #include "InfoLib/CMakeInfo.h"
51 #ifdef OGS_BUILD_PROCESS_COMPONENTTRANSPORT
55 #ifdef OGS_BUILD_PROCESS_STEADYSTATEDIFFUSION
58 #ifdef OGS_BUILD_PROCESS_HT
61 #ifdef OGS_BUILD_PROCESS_HEATCONDUCTION
64 #ifdef OGS_BUILD_PROCESS_HEATTRANSPORTBHE
67 #ifdef OGS_BUILD_PROCESS_HYDROMECHANICS
70 #ifdef OGS_BUILD_PROCESS_LIE
74 #ifdef OGS_BUILD_PROCESS_LIQUIDFLOW
77 #ifdef OGS_BUILD_PROCESS_STOKESFLOW
81 #ifdef OGS_BUILD_PROCESS_THERMORICHARDSMECHANICS
85 #ifdef OGS_BUILD_PROCESS_PHASEFIELD
88 #ifdef OGS_BUILD_PROCESS_RICHARDSCOMPONENTTRANSPORT
91 #ifdef OGS_BUILD_PROCESS_RICHARDSFLOW
94 #ifdef OGS_BUILD_PROCESS_RICHARDSMECHANICS
97 #ifdef OGS_BUILD_PROCESS_SMALLDEFORMATION
100 #ifdef OGS_BUILD_PROCESS_SMALLDEFORMATIONNONLOCAL
103 #ifdef OGS_BUILD_PROCESS_TES
106 #ifdef OGS_BUILD_PROCESS_TH2M
109 #ifdef OGS_BUILD_PROCESS_THERMALTWOPHASEFLOWWITHPP
112 #ifdef OGS_BUILD_PROCESS_THERMOHYDROMECHANICS
115 #ifdef OGS_BUILD_PROCESS_THERMOMECHANICALPHASEFIELD
118 #ifdef OGS_BUILD_PROCESS_THERMOMECHANICS
121 #ifdef OGS_BUILD_PROCESS_THERMORICHARDSFLOW
124 #ifdef OGS_BUILD_PROCESS_TWOPHASEFLOWWITHPP
127 #ifdef OGS_BUILD_PROCESS_TWOPHASEFLOWWITHPRHO
135 DBUG(
"Reading geometry file '{:s}'.", fname);
146 DBUG(
"Reading mesh file '{:s}'.", mesh_file);
148 auto mesh = std::unique_ptr<MeshLib::Mesh>(
152 OGS_FATAL(
"Could not read mesh from '{:s}' file. No mesh added.",
156 #ifdef DOXYGEN_DOCU_ONLY
161 if (
auto const axially_symmetric =
164 "axially_symmetric"))
166 mesh->setAxiallySymmetric(*axially_symmetric);
175 std::vector<std::unique_ptr<MeshLib::Mesh>> meshes;
181 DBUG(
"Reading multiple meshes.");
183 auto const configs = optional_meshes->getConfigParameterList(
"mesh");
185 configs.begin(), configs.end(), std::back_inserter(meshes),
187 { return readSingleMesh(mesh_config, project_directory); });
192 "Consider switching from mesh and geometry input to multiple "
194 "https://www.opengeosys.org/docs/tools/meshing-submeshes/"
195 "constructmeshesfromgeometry/ tool for conversion.");
207 std::unique_ptr<MeshGeoToolsLib::SearchLength> search_length_algorithm =
209 bool const multiple_nodes_allowed =
false;
210 auto additional_meshes =
212 geoObjects, *meshes[0], std::move(search_length_algorithm),
213 multiple_nodes_allowed);
215 std::move(begin(additional_meshes), end(additional_meshes),
216 std::back_inserter(meshes));
225 std::optional<BaseLib::ConfigTree>
const& config,
226 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters)
233 DBUG(
"Reading coordinate system configuration.");
238 auto const& basis_vector_0 = ParameterLib::findParameter<double>(
241 "basis_vector_0", parameters, 0 );
242 int const dimension = basis_vector_0.getNumberOfGlobalComponents();
245 if (dimension != 2 && dimension != 3)
248 "Basis vector parameter '{:s}' must have two or three components, "
250 basis_vector_0.name, dimension);
257 auto const& basis_vector_1 = ParameterLib::findParameter<double>(
260 "basis_vector_1", parameters, dimension);
273 auto const& basis_vector_2 = ParameterLib::findParameter<double>(
276 "basis_vector_2", parameters, dimension);
286 std::string
const& output_directory)
289 if (
auto const python_script =
293 #ifdef OGS_USE_PYTHON
294 namespace py = pybind11;
297 auto py_path = py::module::import(
"sys").attr(
"path");
300 py_path.attr(
"append")(
301 CMakeInfoLib::CMakeInfo::python_virtualenv_sitepackages);
303 auto const script_path =
307 py::object scope = py::module::import(
"__main__").attr(
"__dict__");
309 auto globals = py::dict(scope);
311 py::eval_file(script_path, scope);
313 OGS_FATAL(
"OpenGeoSys has not been built with Python support.");
320 auto parameter_names_for_transformation =
331 if (std::find(begin(parameter_names_for_transformation),
332 end(parameter_names_for_transformation),
334 end(parameter_names_for_transformation))
339 "The parameter '{:s}' is using the local coordinate system "
340 "but no local coordinate system was provided.",
366 std::move(chemical_solver_interface));
379 DBUG(
"Parse process variables:");
381 std::set<std::string> names;
389 auto const mesh_name =
391 var_config.getConfigParameter<std::string>(
"mesh",
396 [&mesh_name](
auto const& m) {
return m->getName() == mesh_name; },
397 "Expected to find a mesh named " + mesh_name +
".");
401 if (!names.insert(pv.getName()).second)
403 OGS_FATAL(
"A process variable with name `{:s}' already exists.",
416 std::set<std::string> names;
417 std::vector<std::string> parameter_names_for_transformation;
419 DBUG(
"Reading parameters:");
420 for (
auto parameter_config :
426 if (!names.insert(
p->name).second)
428 OGS_FATAL(
"A parameter with name `{:s}' already exists.",
p->name);
431 auto const use_local_coordinate_system =
433 parameter_config.getConfigParameterOptional<
bool>(
434 "use_local_coordinate_system");
435 if (!!use_local_coordinate_system && *use_local_coordinate_system)
437 parameter_names_for_transformation.push_back(
p->name);
447 return parameter_names_for_transformation;
451 std::optional<BaseLib::ConfigTree>
const& media_config)
458 DBUG(
"Reading media:");
462 ERR(
"A mesh is required to define medium materials.");
466 for (
auto const& medium_config :
468 media_config->getConfigSubtreeList(
"medium"))
470 auto material_id_string =
472 medium_config.getConfigAttribute<std::string>(
"id",
"0");
474 auto const material_ids_of_this_medium =
477 for (
auto const&
id : material_ids_of_this_medium)
482 "Multiple media were specified for the same material id "
483 "'{:d}'. Keep in mind, that if no material id is "
484 "specified, it is assumed to be 0 by default.",
488 if (
id == material_ids_of_this_medium[0])
508 OGS_FATAL(
"No entity is found inside <media>.");
512 std::unique_ptr<ChemistryLib::ChemicalSolverInterface>
514 std::optional<BaseLib::ConfigTree>
const& config,
515 std::string
const& output_directory)
522 std::unique_ptr<ChemistryLib::ChemicalSolverInterface>
523 chemical_solver_interface;
524 #ifdef OGS_BUILD_PROCESS_COMPONENTTRANSPORT
526 "Ready for initializing interface to a chemical solver for water "
527 "chemistry calculation.");
529 auto const chemical_solver =
531 config->getConfigAttribute<std::string>(
"chemical_solver");
533 if (boost::iequals(chemical_solver,
"Phreeqc"))
536 "Configuring phreeqc interface for water chemistry calculation "
537 "using file-based approach.");
541 *config, output_directory);
543 else if (boost::iequals(chemical_solver,
"PhreeqcKernel"))
546 "The chemical solver option of PhreeqcKernel is not accessible for "
547 "the time being. Please set 'Phreeqc'' as the chemical solver for "
548 "reactive transport modeling.");
553 "Unknown chemical solver. Please specify either Phreeqc or "
554 "PhreeqcKernel as the solver for water chemistry calculation "
558 (void)output_directory;
561 "Found the type of the process to be solved is not component transport "
562 "process. Please specify the process type to ComponentTransport. At "
563 "the present, water chemistry calculation is only available for "
564 "component transport process.");
566 return chemical_solver_interface;
572 std::string
const& output_directory,
573 [[maybe_unused]] std::unique_ptr<ChemistryLib::ChemicalSolverInterface>&&
574 chemical_solver_interface)
577 (void)output_directory;
579 DBUG(
"Reading processes:");
585 process_config.peekConfigParameter<std::string>(
"type");
589 process_config.getConfigParameter<std::string>(
"name");
591 auto const integration_order =
593 process_config.getConfigParameter<
int>(
"integration_order");
595 std::unique_ptr<ProcessLib::Process> process;
599 process_config.getConfigSubtreeOptional(
"jacobian_assembler"));
601 #ifdef OGS_BUILD_PROCESS_STEADYSTATEDIFFUSION
602 if (type ==
"STEADY_STATE_DIFFUSION")
617 #ifdef OGS_BUILD_PROCESS_LIQUIDFLOW
618 if (type ==
"LIQUID_FLOW")
627 #ifdef OGS_BUILD_PROCESS_STOKESFLOW
628 if (type ==
"StokesFlow")
641 "StokesFlow process does not support given "
648 #ifdef OGS_BUILD_PROCESS_TES
658 #ifdef OGS_BUILD_PROCESS_TH2M
678 OGS_FATAL(
"TH2M process does not support given dimension");
683 #ifdef OGS_BUILD_PROCESS_HEATCONDUCTION
684 if (type ==
"HEAT_CONDUCTION")
693 #ifdef OGS_BUILD_PROCESS_HEATTRANSPORTBHE
694 if (type ==
"HEAT_TRANSPORT_BHE")
699 "HEAT_TRANSPORT_BHE can only work with a 3-dimensional "
711 #ifdef OGS_BUILD_PROCESS_HYDROMECHANICS
712 if (type ==
"HYDRO_MECHANICS")
715 switch (process_config.getConfigParameter<
int>(
"dimension"))
721 std::move(jacobian_assembler),
730 std::move(jacobian_assembler),
737 "HYDRO_MECHANICS process does not support given "
743 #ifdef OGS_BUILD_PROCESS_LIE
744 if (type ==
"HYDRO_MECHANICS_WITH_LIE")
747 switch (process_config.getConfigParameter<
int>(
"dimension"))
767 "HYDRO_MECHANICS_WITH_LIE process does not support "
773 #ifdef OGS_BUILD_PROCESS_HT
783 #ifdef OGS_BUILD_PROCESS_COMPONENTTRANSPORT
784 if (type ==
"ComponentTransport")
791 std::move(chemical_solver_interface));
795 #ifdef OGS_BUILD_PROCESS_PHASEFIELD
796 if (type ==
"PHASE_FIELD")
820 #ifdef OGS_BUILD_PROCESS_RICHARDSCOMPONENTTRANSPORT
821 if (type ==
"RichardsComponentTransport")
831 #ifdef OGS_BUILD_PROCESS_SMALLDEFORMATION
832 if (type ==
"SMALL_DEFORMATION")
854 "SMALL_DEFORMATION process does not support given "
860 #ifdef OGS_BUILD_PROCESS_SMALLDEFORMATIONNONLOCAL
861 if (type ==
"SMALL_DEFORMATION_NONLOCAL")
883 "SMALL_DEFORMATION_NONLOCAL process does not support "
884 "given dimension {:d}",
890 #ifdef OGS_BUILD_PROCESS_LIE
891 if (type ==
"SMALL_DEFORMATION_WITH_LIE")
894 switch (process_config.getConfigParameter<
int>(
"dimension"))
914 "SMALL_DEFORMATION_WITH_LIE process does not support "
920 #ifdef OGS_BUILD_PROCESS_THERMOHYDROMECHANICS
921 if (type ==
"THERMO_HYDRO_MECHANICS")
924 switch (process_config.getConfigParameter<
int>(
"dimension"))
944 "THERMO_HYDRO_MECHANICS process does not support given "
950 #ifdef OGS_BUILD_PROCESS_THERMOMECHANICALPHASEFIELD
951 if (type ==
"THERMO_MECHANICAL_PHASE_FIELD")
975 #ifdef OGS_BUILD_PROCESS_THERMOMECHANICS
976 if (type ==
"THERMO_MECHANICS")
1000 #ifdef OGS_BUILD_PROCESS_RICHARDSFLOW
1001 if (type ==
"RICHARDS_FLOW")
1010 #ifdef OGS_BUILD_PROCESS_RICHARDSMECHANICS
1011 if (type ==
"RICHARDS_MECHANICS")
1014 switch (process_config.getConfigParameter<
int>(
"dimension"))
1036 #ifdef OGS_BUILD_PROCESS_THERMORICHARDSFLOW
1037 if (type ==
"THERMO_RICHARDS_FLOW")
1047 #ifdef OGS_BUILD_PROCESS_THERMORICHARDSMECHANICS
1048 if (type ==
"THERMO_RICHARDS_MECHANICS")
1073 #ifdef OGS_BUILD_PROCESS_TWOPHASEFLOWWITHPP
1074 if (type ==
"TWOPHASE_FLOW_PP")
1084 #ifdef OGS_BUILD_PROCESS_TWOPHASEFLOWWITHPRHO
1085 if (type ==
"TWOPHASE_FLOW_PRHO")
1095 #ifdef OGS_BUILD_PROCESS_THERMALTWOPHASEFLOWWITHPP
1096 if (type ==
"THERMAL_TWOPHASE_WITH_PP")
1107 OGS_FATAL(
"Unknown process type: {:s}", type);
1112 [&
name](std::unique_ptr<ProcessLib::Process>
const&
p)
1113 {
return p->name ==
name; }))
1122 std::string
const& output_directory)
1124 DBUG(
"Reading time loop configuration.");
1131 OGS_FATAL(
"Initialization of time loop failed.");
1137 DBUG(
"Reading linear solver configuration.");
1143 auto const name = conf.getConfigParameter<std::string>(
"name");
1147 std::make_unique<GlobalLinearSolver>(
"", &conf),
1148 "The linear solver name is not unique");
1154 DBUG(
"Reading non-linear solver configuration.");
1159 auto const ls_name =
1161 conf.getConfigParameter<std::string>(
"linear_solver");
1164 "A linear solver with the given name does not exist.");
1167 auto const name = conf.getConfigParameter<std::string>(
"name");
1172 "The nonlinear solver name is not unique");
1183 DBUG(
"Reading curves configuration.");
1186 for (
auto conf : config->getConfigSubtreeList(
"curve"))
1189 auto const name = conf.getConfigParameter<std::string>(
"name");
1195 "The curve name is not unique.");
1201 auto const material_ids_strings =
1204 std::vector<int> material_ids;
1205 for (
auto& mid_str : material_ids_strings)
1207 std::size_t num_chars_processed = 0;
1211 material_id = std::stoi(mid_str, &num_chars_processed);
1213 catch (std::invalid_argument&)
1216 "Could not parse material ID from '{}' to a valid "
1220 catch (std::out_of_range&)
1223 "Could not parse material ID from '{}'. The integer value "
1224 "of the given string exceeds the permitted range.",
1228 if (num_chars_processed != mid_str.size())
1231 if (
auto const it = std::find_if_not(
1232 begin(mid_str) + num_chars_processed, end(mid_str),
1233 [](
unsigned char const c) {
return std::isspace(
c); });
1237 "Could not parse material ID from '{}'. Please "
1238 "separate multiple material IDs by comma only. "
1239 "Invalid character: '{}' at position {}.",
1240 mid_str, *it, distance(begin(mid_str), it));
1244 material_ids.push_back(material_id);
1247 return material_ids;
Definition of the BoostXmlGmlInterface class.
Functionality to build different search length algorithm objects from given config.
Definition of the GEOObjects class.
void INFO(char const *fmt, Args const &... args)
void ERR(char const *fmt, Args const &... args)
void DBUG(char const *fmt, Args const &... args)
void WARN(char const *fmt, Args const &... args)
Definition of the Mesh class.
std::vector< int > splitMaterialIdString(std::string const &material_id_string)
Base class for different search length strategies.
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
std::optional< T > getConfigParameterOptional(std::string const ¶m) const
T getConfigParameter(std::string const ¶m) const
Range< SubtreeIterator > getConfigSubtreeList(std::string const &root) const
ConfigTree getConfigSubtree(std::string const &root) const
std::optional< T > getConfigAttributeOptional(std::string const &attr) const
Container class for geometric objects.
bool readFile(const std::string &fname) override
Reads an xml-file containing OGS geometry.
std::map< std::string, std::unique_ptr< GlobalLinearSolver > > _linear_solvers
std::optional< ParameterLib::CoordinateSystem > _local_coordinate_system
std::map< std::string, std::unique_ptr< NumLib::NonlinearSolverBase > > _nonlinear_solvers
void parseProcesses(BaseLib::ConfigTree const &processes_config, std::string const &project_directory, std::string const &output_directory, std::unique_ptr< ChemistryLib::ChemicalSolverInterface > &&chemical_solver_interface)
std::unique_ptr< ChemistryLib::ChemicalSolverInterface > parseChemicalSolverInterface(std::optional< BaseLib::ConfigTree > const &config, const std::string &output_directory)
void parseMedia(std::optional< BaseLib::ConfigTree > const &media_config)
Parses media configuration and saves them in an object.
void parseLinearSolvers(BaseLib::ConfigTree const &config)
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > _parameters
Buffer for each parameter config passed to the process.
std::vector< std::unique_ptr< ProcessLib::Process > > _processes
void parseNonlinearSolvers(BaseLib::ConfigTree const &config)
std::vector< ProcessLib::ProcessVariable > _process_variables
void parseProcessVariables(BaseLib::ConfigTree const &process_variables_config)
std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > _curves
void parseCurves(std::optional< BaseLib::ConfigTree > const &config)
std::vector< std::unique_ptr< MeshLib::Mesh > > _mesh_vec
void parseTimeLoop(BaseLib::ConfigTree const &config, const std::string &output_directory)
Parses the time loop configuration.
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > _media
std::vector< std::string > parseParameters(BaseLib::ConfigTree const ¶meters_config)
std::unique_ptr< ProcessLib::TimeLoop > _time_loop
The time loop used to solve this project's processes.
std::unique_ptr< GeoLib::GEOObjects > readGeometry(std::string const &filename)
std::pair< std::unique_ptr< NonlinearSolverBase >, NonlinearSolverTag > createNonlinearSolver(GlobalLinearSolver &linear_solver, BaseLib::ConfigTree const &config)
std::vector< std::unique_ptr< MeshLib::Mesh > > readMeshes(std::vector< std::string > const &filenames)
Map::mapped_type & getOrError(Map &map, Key const &key, std::string const &error_message)
void insertIfKeyUniqueElseError(Map &map, Key const &key, Value &&value, std::string const &error_message)
bool containsIf(Container const &container, Predicate &&predicate)
std::string copyPathToFileName(const std::string &file_name, const std::string &source)
std::vector< std::string > splitString(std::string const &str)
std::iterator_traits< InputIt >::reference findElementOrError(InputIt begin, InputIt end, Predicate predicate, std::string const &error="")
std::unique_ptr< ChemicalSolverInterface > createChemicalSolverInterface(std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes, std::map< std::string, std::unique_ptr< GlobalLinearSolver >> const &linear_solvers, BaseLib::ConfigTree const &config, std::string const &output_directory)
std::unique_ptr< Medium > createMedium(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves)
std::unique_ptr< CurveType > createPiecewiseLinearCurve(BaseLib::ConfigTree const &config)
MeshLib::Mesh * readMeshFromFile(const std::string &file_name)
void setMeshSpaceDimension(std::vector< std::unique_ptr< Mesh >> const &meshes)
std::unique_ptr< ParameterBase > createParameter(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves)
std::unique_ptr< Process > createComponentTransportProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media, std::unique_ptr< ChemistryLib::ChemicalSolverInterface > &&chemical_solver_interface)
std::unique_ptr< Process > createHTProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createHeatConductionProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createHeatTransportBHEProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createHydroMechanicsProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createHydroMechanicsProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
template std::unique_ptr< Process > createHydroMechanicsProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
std::unique_ptr< Process > createLiquidFlowProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createPhaseFieldProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
template std::unique_ptr< Process > createPhaseFieldProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
std::unique_ptr< Process > createRichardsComponentTransportProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createRichardsFlowProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createRichardsMechanicsProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createRichardsMechanicsProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createSteadyStateDiffusion(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createStokesFlowProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createTESProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config)
template std::unique_ptr< Process > createTH2MProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createTH2MProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createThermalTwoPhaseFlowWithPPProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves)
template std::unique_ptr< Process > createThermoHydroMechanicsProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createThermoHydroMechanicsProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createThermoMechanicalPhaseFieldProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
template std::unique_ptr< Process > createThermoMechanicalPhaseFieldProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config)
template std::unique_ptr< Process > createThermoMechanicsProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createThermoMechanicsProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createThermoRichardsFlowProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createThermoRichardsMechanicsProcess< 3 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
template std::unique_ptr< Process > createThermoRichardsMechanicsProcess< 2 >(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createTwoPhaseFlowWithPPProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium >> const &media)
std::unique_ptr< Process > createTwoPhaseFlowWithPrhoProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< ProcessVariable > const &variables, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, unsigned const integration_order, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves)
std::unique_ptr< TimeLoop > createTimeLoop(BaseLib::ConfigTree const &config, std::string const &output_directory, const std::vector< std::unique_ptr< Process >> &processes, const std::map< std::string, std::unique_ptr< NumLib::NonlinearSolverBase >> &nonlinear_solvers, std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes)
Builds a TimeLoop from the given configuration.
std::unique_ptr< AbstractJacobianAssembler > createJacobianAssembler(std::optional< BaseLib::ConfigTree > const &config)
std::unique_ptr< MeshLib::Mesh > readSingleMesh(BaseLib::ConfigTree const &mesh_config_parameter, std::string const &project_directory)
std::optional< ParameterLib::CoordinateSystem > parseLocalCoordinateSystem(std::optional< BaseLib::ConfigTree > const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters)
unsigned getDimension(MeshLib::MeshElemType eleType)
Definition of readMeshFromFile function.
Single, constant value parameter.
static const std::string zero_parameter_name