preCICE
Loading...
Searching...
No Matches
MappingConfiguration.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5#include "logging/Logger.hpp"
7#include "mapping/Mapping.hpp"
11#include "xml/XMLTag.hpp"
12
13namespace precice::mapping {
14
17public:
19 enum Direction {
22 };
23
39
41 std::string executor = "cpu"; // Default used for PUM
42 std::string solver = "cg-solver";
43 std::string preconditioner = "jacobi-preconditioner";
44 double residualNorm = 1e-8;
45 std::size_t maxIterations = 1e6;
46 bool usePreconditioner = false;
47 unsigned int jacobiBlockSize = 4;
48 unsigned int deviceId = 0;
49 unsigned int nThreads = 0;
50 bool enableUnifiedMemory = false;
51 };
52
54 xml::XMLTag &parent,
55 mesh::PtrMeshConfiguration meshConfiguration);
56
57 void setExperimental(bool experimental);
58
64 void xmlTagCallback(
65 const xml::ConfigurationContext &context,
66 xml::XMLTag &callingTag) override;
67
74 const xml::ConfigurationContext &context,
75 xml::XMLTag &callingTag) override;
76
78 const std::vector<ConfiguredMapping> &mappings();
79
80 // Only relevant for RBF related mappings
81 // Being public here is only required for testing purposes
101
108
112 {
113 return _rbfConfig;
114 }
115
117 {
118 _mappings.clear();
119 }
120
121private:
122 mutable logging::Logger _log{"config:MappingConfiguration"};
123
124 bool _experimental = false;
125
126 const std::string TAG = "mapping";
127
128 // First, declare common attributes and associated options
129 const std::string ATTR_TYPE = "type";
130 const std::string TYPE_NEAREST_NEIGHBOR = "nearest-neighbor";
131 const std::string TYPE_NEAREST_NEIGHBOR_GRADIENT = "nearest-neighbor-gradient";
132 const std::string TYPE_NEAREST_PROJECTION = "nearest-projection";
133 const std::string TYPE_LINEAR_CELL_INTERPOLATION = "linear-cell-interpolation";
134 const std::string TYPE_RBF_GLOBAL_DIRECT = "rbf-global-direct";
135 const std::string TYPE_RBF_GLOBAL_ITERATIVE = "rbf-global-iterative";
136 const std::string TYPE_RBF_PUM_DIRECT = "rbf-pum-direct";
137 const std::string TYPE_RBF_ALIAS = "rbf";
138 const std::string TYPE_COARSE_GRAINING = "coarse-graining";
139 const std::string TYPE_AXIAL_GEOMETRIC_MULTISCALE = "axial-geometric-multiscale";
140 const std::string TYPE_RADIAL_GEOMETRIC_MULTISCALE = "radial-geometric-multiscale";
141
142 const std::string ATTR_DIRECTION = "direction";
143 const std::string DIRECTION_WRITE = "write";
144 const std::string DIRECTION_READ = "read";
145
146 const std::string ATTR_FROM = "from";
147 const std::string ATTR_TO = "to";
148
149 const std::string ATTR_CONSTRAINT = "constraint";
150 const std::string CONSTRAINT_CONSISTENT = "consistent";
151 const std::string CONSTRAINT_CONSERVATIVE = "conservative";
152 const std::string CONSTRAINT_SCALED_CONSISTENT_SURFACE = "scaled-consistent-surface";
153 const std::string CONSTRAINT_SCALED_CONSISTENT_VOLUME = "scaled-consistent-volume";
154
155 // RBF specific options
156 const std::string ATTR_X_DEAD = "x-dead";
157 const std::string ATTR_Y_DEAD = "y-dead";
158 const std::string ATTR_Z_DEAD = "z-dead";
159
160 const std::string ATTR_POLYNOMIAL = "polynomial";
161 const std::string POLYNOMIAL_SEPARATE = "separate";
162 const std::string POLYNOMIAL_ON = "on";
163 const std::string POLYNOMIAL_OFF = "off";
164
165 // For iterative RBFs
166 const std::string ATTR_SOLVER_RTOL = "solver-rtol";
167
168 // For coarse graining
169 const std::string ATTR_CG_RADIUS = "radius";
170
171 // For the future
172 // const std::string ATTR_PARALLELISM = "parallelism";
173 // const std::string PARALLELISM_GATHER_SCATTER = "gather-scatter";
174 // const std::string PARALLELISM = "distributed";
175
176 // For PUM
177 const std::string ATTR_VERTICES_PER_CLUSTER = "vertices-per-cluster";
178 const std::string ATTR_RELATIVE_OVERLAP = "relative-overlap";
179 const std::string ATTR_PROJECT_TO_INPUT = "project-to-input";
180
181 // We declare the basis function as subtag
182 const std::string SUBTAG_BASIS_FUNCTION = "basis-function";
183 const std::string RBF_TPS = "thin-plate-splines";
184 const std::string RBF_MULTIQUADRICS = "multiquadrics";
185 const std::string RBF_INV_MULTIQUADRICS = "inverse-multiquadrics";
186 const std::string RBF_VOLUME_SPLINES = "volume-splines";
187 const std::string RBF_GAUSSIAN = "gaussian";
188 const std::string RBF_CTPS_C2 = "compact-tps-c2";
189 const std::string RBF_CPOLYNOMIAL_C0 = "compact-polynomial-c0";
190 const std::string RBF_CPOLYNOMIAL_C2 = "compact-polynomial-c2";
191 const std::string RBF_CPOLYNOMIAL_C4 = "compact-polynomial-c4";
192 const std::string RBF_CPOLYNOMIAL_C6 = "compact-polynomial-c6";
193 const std::string RBF_CPOLYNOMIAL_C8 = "compact-polynomial-c8";
194
195 // Attributes for the subtag
196 const std::string ATTR_SHAPE_PARAM = "shape-parameter";
197 const std::string ATTR_SUPPORT_RADIUS = "support-radius";
198
199 // Attributes for geometric multiscale
200 const std::string ATTR_GEOMETRIC_MULTISCALE_DIMENSION = "multiscale-dimension";
201 const std::string ATTR_GEOMETRIC_MULTISCALE_TYPE = "multiscale-type";
202 const std::string ATTR_GEOMETRIC_MULTISCALE_AXIS = "multiscale-axis";
203 const std::string ATTR_GEOMETRIC_MULTISCALE_RADIUS = "multiscale-radius";
204 const std::string ATTR_GEOMETRIC_MULTISCALE_CROSS_SECTION_PROFILE = "multiscale-cross-section-profile";
205 const std::string ATTR_GEOMETRIC_MULTISCALE_CROSS_SECTION = "multiscale-cross-section";
206 const std::string GEOMETRIC_MULTISCALE_DIMENSION_1D3D = "1d-3d";
207 const std::string GEOMETRIC_MULTISCALE_DIMENSION_1D2D = "1d-2d";
208 const std::string GEOMETRIC_MULTISCALE_DIMENSION_2D3D = "2d-3d";
209 const std::string GEOMETRIC_MULTISCALE_TYPE_SPREAD = "spread";
210 const std::string GEOMETRIC_MULTISCALE_TYPE_COLLECT = "collect";
211 const std::string GEOMETRIC_MULTISCALE_AXIS_X = "x";
212 const std::string GEOMETRIC_MULTISCALE_AXIS_Y = "y";
213 const std::string GEOMETRIC_MULTISCALE_AXIS_Z = "z";
216 const std::string GEOMETRIC_MULTISCALE_CROSS_SECTION_CIRCLE = "circle";
217 const std::string GEOMETRIC_MULTISCALE_CROSS_SECTION_SQUARE = "square";
218
219 // For iterative RBFs using Ginkgo
220 const std::string SUBTAG_EXECUTOR = "executor";
221 const std::string EXECUTOR_CPU = "cpu";
222 const std::string EXECUTOR_CUDA = "cuda";
223 const std::string EXECUTOR_HIP = "hip";
224 const std::string EXECUTOR_SYCL = "sycl";
225 const std::string EXECUTOR_OMP = "openmp";
226
227 const std::string ATTR_DEVICE_ID = "gpu-device-id";
228 const std::string ATTR_N_THREADS = "n-threads";
229 const std::string ATTR_EXECUTION_MODE = "execution-mode";
230
231 // const std::string ATTR_ENABLE_UNIFIED_MEMORY = "enable-unified-memory";
232 // const std::string ATTR_SOLVER = "solver";
233 // const std::string ATTR_USE_PRECONDITIONER = "use-preconditioner";
234 // const std::string ATTR_PRECONDITIONER = "preconditioner";
235 // const std::string ATTR_JACOBI_BLOCK_SIZE = "jacobi-block-size";
236 // const std::string ATTR_MAX_ITERATIONS = "max-iterations";
237
238 // mapping constraint
240
242
243 // main data structure storing the configurations
244 std::vector<ConfiguredMapping> _mappings;
245
246 // Relevant information in order to store the RBF related settings,
247 // as we can only instantiate the RBF classes when we know the RBF
248 // which is configured in the subtag
250
265
266 std::unique_ptr<ExecutorConfiguration> _executorConfig;
267
268 // Settings for the iterative solvers provided by Ginkgo
270
280 const std::string &direction,
281 const std::string &type,
282 const std::string &fromMeshName,
283 const std::string &toMeshName,
284 const double cgRange,
285 const std::string &geoMultiscaleDimension,
286 const std::string &geoMultiscaleType,
287 const std::string &geoMultiscaleAxis,
288 const double &multiscaleRadius,
289 const std::string &geoMultiscaleProfile,
290 const std::string &geoMultiscaleCrossSection) const;
291
298 RBFConfiguration configureRBFMapping(const std::string &type,
299 const std::string &polynomial,
300 bool xDead, bool yDead, bool zDead,
301 double solverRtol,
302 double verticesPerCluster,
303 double relativeOverlap,
304 bool projectToInput) const;
305
307
310
313 bool requiresBasisFunction(const std::string &mappingType) const;
314
316 BasisFunction parseBasisFunctions(const std::string &basisFctName) const;
317};
318} // namespace precice::mapping
This class provides a lightweight logger.
Definition Logger.hpp:17
RBFConfiguration configureRBFMapping(const std::string &type, const std::string &polynomial, bool xDead, bool yDead, bool zDead, double solverRtol, double verticesPerCluster, double relativeOverlap, bool projectToInput) const
void xmlTagCallback(const xml::ConfigurationContext &context, xml::XMLTag &callingTag) override
Callback function required for use of automatic configuration.
ConfiguredMapping createMapping(const std::string &direction, const std::string &type, const std::string &fromMeshName, const std::string &toMeshName, const double cgRange, const std::string &geoMultiscaleDimension, const std::string &geoMultiscaleType, const std::string &geoMultiscaleAxis, const double &multiscaleRadius, const std::string &geoMultiscaleProfile, const std::string &geoMultiscaleCrossSection) const
const std::vector< ConfiguredMapping > & mappings()
Returns all configured mappings.
std::unique_ptr< ExecutorConfiguration > _executorConfig
bool requiresBasisFunction(const std::string &mappingType) const
BasisFunction parseBasisFunctions(const std::string &basisFctName) const
Given a basis function name (as a string), transforms the string into an enum of the BasisFunction.
std::vector< ConfiguredMapping > _mappings
Direction
Constants defining the direction of a mapping.
const std::string GEOMETRIC_MULTISCALE_CROSS_SECTION_PROFILE_UNIFORM
void checkDuplicates(const ConfiguredMapping &mapping)
Check whether a mapping to and from the same mesh already exists.
void xmlEndTagCallback(const xml::ConfigurationContext &context, xml::XMLTag &callingTag) override
Callback function required for use of automatic configuration.
const std::string GEOMETRIC_MULTISCALE_CROSS_SECTION_PROFILE_PARABOLIC
const RBFConfiguration & rbfConfig() const
MappingConfiguration(xml::XMLTag &parent, mesh::PtrMeshConfiguration meshConfiguration)
Constraint
Specifies additional constraints for a mapping.
Definition Mapping.hpp:30
Represents an XML tag to be configured automatically.
Definition XMLTag.hpp:28
contains data mapping from points to meshes.
std::shared_ptr< Mapping > PtrMapping
Polynomial
How to handle the polynomial?
std::shared_ptr< Mesh > PtrMesh
std::shared_ptr< MeshConfiguration > PtrMeshConfiguration
Direction direction
Direction of mapping (important to set input and output mesh).
bool configuredWithAliasTag
used the automatic rbf alias tag in order to set the mapping
Tightly coupled to the parameters of Participant()
Definition XMLTag.hpp:21
Callback interface for configuration classes using XMLTag.
Definition XMLTag.hpp:46