OGS
CreateMedium.cpp
Go to the documentation of this file.
1 
13 #include "CreateMedium.h"
14 
15 #include "BaseLib/ConfigTree.h"
16 #include "CreatePhase.h"
17 #include "CreateProperty.h"
18 #include "Medium.h"
19 #include "ParameterLib/Parameter.h"
20 #include "Properties/Properties.h"
21 
22 namespace MaterialPropertyLib
23 {
24 std::unique_ptr<Medium> createMedium(
25  int const geometry_dimension,
26  BaseLib::ConfigTree const& config,
27  std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
28  ParameterLib::CoordinateSystem const* const local_coordinate_system,
29  std::map<std::string,
30  std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
31  curves)
32 {
33  // Parsing the phases
34  // Properties of phases may be not required in all the cases.
35  auto&& phases = createPhases(geometry_dimension,
37  config.getConfigSubtreeOptional("phases"),
38  parameters, local_coordinate_system, curves);
39 
40  // Parsing medium properties, overwriting the defaults.
41  auto&& properties =
42  createProperties(geometry_dimension,
44  config.getConfigSubtreeOptional("properties"),
45  parameters, local_coordinate_system, curves);
46 
47  if (phases.empty() && !properties)
48  {
49  OGS_FATAL("Neither tag <phases> nor tag <properties> has been found.");
50  }
51 
52  return std::make_unique<Medium>(std::move(phases), std::move(properties));
53 }
54 
55 } // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition: Error.h:26
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
Definition: ConfigTree.cpp:155
std::vector< std::unique_ptr< Phase > > createPhases(int const geometry_dimension, std::optional< BaseLib::ConfigTree > const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves)
Definition: CreatePhase.cpp:91
std::unique_ptr< Medium > createMedium(int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves)
std::unique_ptr< PropertyArray > createProperties(int const geometry_dimension, std::optional< BaseLib::ConfigTree > const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation >> const &curves)