Serac  0.1
Serac is an implicit thermal strucural mechanics simulation code.
input.hpp
Go to the documentation of this file.
1 // Copyright (c) 2019-2023, Lawrence Livermore National Security, LLC and
2 // other Serac Project Developers. See the top-level LICENSE file for
3 // details.
4 //
5 // SPDX-License-Identifier: (BSD-3-Clause)
6 
13 #pragma once
14 
15 #include <string>
16 #include <variant>
17 #include <optional>
18 
19 #include "mfem.hpp"
20 #include "axom/inlet.hpp"
21 #include "axom/sidre.hpp"
22 
27 namespace serac::input {
28 
32 enum class Language
33 {
34  Lua,
35  JSON,
36  YAML
37 };
38 
48 axom::inlet::Inlet initialize(axom::sidre::DataStore& datastore, const std::string& input_file_path,
49  const Language language = Language::Lua, const std::string& sidre_path = "input_file");
50 
59 std::string findMeshFilePath(const std::string& mesh_path, const std::string& input_file_path);
60 
67 std::string fullDirectoryFromPath(const std::string& file_path);
68 
77 std::string getInputFileName(const std::string& file_path);
78 
83 void defineVectorInputFileSchema(axom::inlet::Container& container);
84 
93  using VecFunc = std::function<void(const mfem::Vector&, double, mfem::Vector&)>;
94 
99  using ScalarFunc = std::function<double(const mfem::Vector&, double)>;
104 
109 
113  std::optional<double> scalar_constant;
114 
118  std::optional<mfem::Vector> vector_constant;
119 
123  std::unordered_map<int, double> scalar_pw_const;
124 
128  std::unordered_map<int, mfem::Vector> vector_pw_const;
129 
133  std::optional<int> component;
137  bool isVector() const;
141  std::unique_ptr<mfem::VectorCoefficient> constructVector(const int dim = 3) const;
145  std::unique_ptr<mfem::Coefficient> constructScalar() const;
149  static void defineInputFileSchema(axom::inlet::Container& container);
150 };
151 
159  std::set<int> attrs{};
169  static void defineInputFileSchema(axom::inlet::Container& container);
170 };
171 
172 } // namespace serac::input
173 
179 template <>
180 struct FromInlet<mfem::Vector> {
182  mfem::Vector operator()(const axom::inlet::Container& base);
183 };
184 
190 template <>
191 struct FromInlet<serac::input::CoefficientInputOptions> {
193  serac::input::CoefficientInputOptions operator()(const axom::inlet::Container& base);
194 };
195 
201 template <>
202 struct FromInlet<serac::input::BoundaryConditionInputOptions> {
204  serac::input::BoundaryConditionInputOptions operator()(const axom::inlet::Container& base);
205 };
The input related helper functions and objects.
Definition: input.cpp:18
Language
The input file languages supported by Inlet.
Definition: input.hpp:33
axom::inlet::Inlet initialize(axom::sidre::DataStore &datastore, const std::string &input_file_path, const Language language, const std::string &sidre_path)
Initializes Inlet with the given datastore and input file.
Definition: input.cpp:20
void defineVectorInputFileSchema(axom::inlet::Container &container)
Defines the schema for a vector in R^{1,2,3} space.
Definition: input.cpp:96
std::string findMeshFilePath(const std::string &mesh_path, const std::string &input_file_path)
Returns the absolute path of the given mesh either relative to CWD or the input file.
Definition: input.cpp:46
std::string fullDirectoryFromPath(const std::string &path)
Returns the absolute directory of the given file path.
Definition: input.cpp:68
std::string getInputFileName(const std::string &file_path)
Returns the name of the input file (base name with file extension removed).
Definition: input.cpp:80
Accelerator functionality.
Definition: serac.cpp:38
The information required from the input file for a boundary condition.
Definition: input.hpp:155
std::set< int > attrs
The mesh attributes on which to apply the boundary condition.
Definition: input.hpp:159
static void defineInputFileSchema(axom::inlet::Container &container)
Input file parameters specific to this class.
Definition: input.cpp:105
CoefficientInputOptions coef_opts
The information from the input file on the BC coefficient.
Definition: input.hpp:163
The information required from the input file for an mfem::(Vector)(Function)Coefficient.
Definition: input.hpp:88
std::unordered_map< int, mfem::Vector > vector_pw_const
Vector piecewise constant definition map.
Definition: input.hpp:128
std::function< void(const mfem::Vector &, double, mfem::Vector &)> VecFunc
The type for coefficient functions that are vector-valued.
Definition: input.hpp:93
static void defineInputFileSchema(axom::inlet::Container &container)
Defines the input file schema on the provided inlet container.
Definition: input.cpp:190
bool isVector() const
Returns whether the contained function corresponds to a vector coefficient.
Definition: input.cpp:111
std::unordered_map< int, double > scalar_pw_const
Scalar piecewise constant definition map.
Definition: input.hpp:123
VecFunc vector_function
The vector std::function corresponding to a function coefficient.
Definition: input.hpp:108
std::optional< int > component
The component to which a scalar coefficient should be applied.
Definition: input.hpp:133
std::optional< double > scalar_constant
The scalar constant associated with the coefficient.
Definition: input.hpp:113
std::unique_ptr< mfem::VectorCoefficient > constructVector(const int dim=3) const
Constructs a vector coefficient with the requested dimension.
Definition: input.cpp:116
std::optional< mfem::Vector > vector_constant
The vector constant associated with the coefficient.
Definition: input.hpp:118
std::function< double(const mfem::Vector &, double)> ScalarFunc
The type for coefficient functions that are scalar-valued.
Definition: input.hpp:99
ScalarFunc scalar_function
The scalar std::function corresponding to a function coefficient.
Definition: input.hpp:103
std::unique_ptr< mfem::Coefficient > constructScalar() const
Constructs a scalar coefficient.
Definition: input.cpp:156