OGS
CreateMedium.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "CreateMedium.h"
5
7#include "CreatePhase.h"
8#include "CreateProperty.h"
9#include "Medium.h"
12
13namespace MaterialPropertyLib
14{
15std::unique_ptr<Medium> createMedium(
16 int const material_id,
17 int const geometry_dimension,
18 BaseLib::ConfigTree const& config,
19 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
20 ParameterLib::CoordinateSystem const* const local_coordinate_system,
21 std::map<std::string,
22 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
23 curves)
24{
25 // Parsing the phases
26 // Properties of phases may be not required in all the cases.
27 auto&& phases = createPhases(geometry_dimension,
29 config.getConfigSubtreeOptional("phases"),
30 parameters, local_coordinate_system, curves);
31
32 // Parsing medium properties, overwriting the defaults.
33 auto&& properties =
34 createProperties(geometry_dimension,
36 config.getConfigSubtreeOptional("properties"),
37 parameters, local_coordinate_system, curves);
38
39 if (phases.empty() && !properties)
40 {
41 OGS_FATAL("Neither tag <phases> nor tag <properties> has been found.");
42 }
43
44 return std::make_unique<Medium>(material_id, std::move(phases),
45 std::move(properties));
46}
47
48} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:19
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
std::unique_ptr< PropertyArray > createProperties(int const geometry_dimension, std::optional< BaseLib::ConfigTree > const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
std::vector< std::unique_ptr< Phase > > createPhases(int const geometry_dimension, std::optional< BaseLib::ConfigTree > const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
std::unique_ptr< Medium > createMedium(int const material_id, int const geometry_dimension, BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, ParameterLib::CoordinateSystem const *const local_coordinate_system, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
A local coordinate system used for tensor transformations.