OGS
ProjectData.h
Go to the documentation of this file.
1
14#pragma once
15
16#include <map>
17#include <memory>
18#include <optional>
19#include <string>
20
28#include "ProcessLib/Process.h"
30
31#ifdef OGS_EMBED_PYTHON_INTERPRETER
32#include <pybind11/embed.h>
33#endif
34
35namespace MeshLib
36{
37class Mesh;
38}
39
40namespace NumLib
41{
43}
44
45namespace ProcessLib
46{
47class TimeLoop;
48}
49
55class ProjectData final
56{
57public:
61
71 ProjectData(BaseLib::ConfigTree const& project_config,
72 std::string const& project_directory,
73 std::string const& output_directory,
74 std::string const& mesh_directory,
75 [[maybe_unused]] std::string const& script_directory);
76
78
79 //
80 // Process interface
81 //
82
84 std::vector<std::unique_ptr<ProcessLib::Process>> const& getProcesses()
85 const
86 {
87 return _processes;
88 }
89
91
92 MeshLib::Mesh* getMesh(std::string const& mesh_name) const;
93
94 std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const&
95 getMedia() const
96 {
97 return _media;
98 }
99
100private:
105 BaseLib::ConfigTree const& process_variables_config);
106
110 std::vector<std::string> parseParameters(
111 BaseLib::ConfigTree const& parameters_config);
112
114 void parseMedia(std::optional<BaseLib::ConfigTree> const& media_config);
115
119 void parseProcesses(BaseLib::ConfigTree const& processes_config,
120 std::string const& project_directory,
121 std::string const& output_directory,
122 std::unique_ptr<ChemistryLib::ChemicalSolverInterface>&&
123 chemical_solver_interface);
124
126 void parseTimeLoop(BaseLib::ConfigTree const& config,
127 const std::string& output_directory);
128
129 void parseLinearSolvers(BaseLib::ConfigTree const& config);
130
131 void parseNonlinearSolvers(BaseLib::ConfigTree const& config);
132
133 void parseCurves(std::optional<BaseLib::ConfigTree> const& config);
134
135 std::unique_ptr<ChemistryLib::ChemicalSolverInterface>
137 std::optional<BaseLib::ConfigTree> const& config,
138 const std::string& output_directory);
139
140 std::vector<std::unique_ptr<MeshLib::Mesh>> _mesh_vec;
141 std::vector<std::unique_ptr<ProcessLib::Process>> _processes;
142 std::vector<ProcessLib::ProcessVariable> _process_variables;
143
145 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> _parameters;
146
147 std::optional<ParameterLib::CoordinateSystem> _local_coordinate_system;
148
149 std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> _media;
150
152 std::unique_ptr<ProcessLib::TimeLoop> _time_loop;
153
154 std::map<std::string, std::unique_ptr<GlobalLinearSolver>> _linear_solvers;
155
156 std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>>
158 std::map<std::string,
159 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>>
161
162#ifdef OGS_EMBED_PYTHON_INTERPRETER
163 std::optional<pybind11::scoped_interpreter> _py_scoped_interpreter;
164#endif
165};
Definition of the PiecewiseLinearInterpolation class.
Time loop capable of time-integrating several processes at once.
Definition: TimeLoop.h:37
std::map< std::string, std::unique_ptr< GlobalLinearSolver > > _linear_solvers
Definition: ProjectData.h:154
std::optional< ParameterLib::CoordinateSystem > _local_coordinate_system
Definition: ProjectData.h:147
ProcessLib::TimeLoop & getTimeLoop()
Definition: ProjectData.h:90
std::map< std::string, std::unique_ptr< NumLib::NonlinearSolverBase > > _nonlinear_solvers
Definition: ProjectData.h:157
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.
Definition: ProjectData.h:145
std::vector< std::unique_ptr< ProcessLib::Process > > _processes
Definition: ProjectData.h:141
MeshLib::Mesh * getMesh(std::string const &mesh_name) const
void parseNonlinearSolvers(BaseLib::ConfigTree const &config)
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & getMedia() const
Definition: ProjectData.h:95
std::vector< ProcessLib::ProcessVariable > _process_variables
Definition: ProjectData.h:142
void parseProcessVariables(BaseLib::ConfigTree const &process_variables_config)
std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > _curves
Definition: ProjectData.h:160
void parseCurves(std::optional< BaseLib::ConfigTree > const &config)
std::vector< std::unique_ptr< MeshLib::Mesh > > _mesh_vec
Definition: ProjectData.h:140
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
Definition: ProjectData.h:149
ProjectData(ProjectData &)=delete
std::vector< std::string > parseParameters(BaseLib::ConfigTree const &parameters_config)
std::vector< std::unique_ptr< ProcessLib::Process > > const & getProcesses() const
Provides read access to the process container.
Definition: ProjectData.h:84
std::unique_ptr< ProcessLib::TimeLoop > _time_loop
The time loop used to solve this project's processes.
Definition: ProjectData.h:152