preCICE v3.2.0
Loading...
Searching...
No Matches
Mapping.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <Eigen/Core>
4#include <iosfwd>
5
7#include "mesh/Mesh.hpp"
9#include "precice/span.hpp"
10
11namespace precice::mapping {
12
16class Mapping {
17public:
36
46 enum class MeshRequirement {
49 VERTEX = 1,
51 FULL = 2
52 };
53
64 enum class InitialGuessRequirement : bool {
65 Required = true,
66 None = false
67 };
68
70 Mapping(Constraint constraint, int dimensions, bool requiresGradientData, InitialGuessRequirement initialGuessRequirement);
71
72 Mapping &operator=(Mapping &&) = delete;
73
75 virtual ~Mapping() = default;
76
83 void setMeshes(
84 const mesh::PtrMesh &input,
85 const mesh::PtrMesh &output);
86
87 const mesh::PtrMesh &getInputMesh() const;
88
89 const mesh::PtrMesh &getOutputMesh() const;
90
93
96
99
101 virtual void computeMapping() = 0;
102
108 bool hasComputedMapping() const;
109
111 virtual bool hasConstraint(const Constraint &constraint) const;
112
114 bool isScaledConsistent() const;
115
117 bool requiresInitialGuess() const;
118
123 bool isJustInTimeMapping() const;
124
126 const Eigen::VectorXd &initialGuess() const;
127
128 Eigen::VectorXd &initialGuess();
129
131 bool hasInitialGuess() const;
132
134 virtual void clear() = 0;
135
137 void map(int inputDataID, int outputDataID);
139 void map(int inputDataID, int outputDataID, Eigen::VectorXd &initialGuess);
140
154 void map(const time::Sample &input, Eigen::VectorXd &output);
155
176 void map(const time::Sample &input, Eigen::VectorXd &output, Eigen::VectorXd &initialGuess);
177
179 virtual void tagMeshFirstRound() = 0;
180
182 virtual void tagMeshSecondRound() = 0;
183
191 virtual void scaleConsistentMapping(const Eigen::VectorXd &input, Eigen::VectorXd &output, Constraint type) const;
192
194 bool requiresGradientData() const;
195
197 virtual std::string getName() const = 0;
198
215 virtual void mapConservativeAt(const Eigen::Ref<const Eigen::MatrixXd> &coordinates, const Eigen::Ref<const Eigen::MatrixXd> &source, impl::MappingDataCache &cache, Eigen::Ref<Eigen::MatrixXd> target);
216
227 virtual void mapConsistentAt(const Eigen::Ref<const Eigen::MatrixXd> &coordinates, const impl::MappingDataCache &cache, Eigen::Ref<Eigen::MatrixXd> values);
228
252 virtual void updateMappingDataCache(impl::MappingDataCache &cache, const Eigen::Ref<const Eigen::VectorXd> &in);
253
267
289 virtual void completeJustInTimeMapping(impl::MappingDataCache &cache, Eigen::Ref<Eigen::MatrixXd> result);
290
291protected:
293 mesh::PtrMesh input() const;
294
296 mesh::PtrMesh output() const;
297
299 void setInputRequirement(MeshRequirement requirement);
300
302 void setOutputRequirement(MeshRequirement requirement);
303
304 int getDimensions() const;
305
308
311
324 virtual void mapConservative(const time::Sample &input, Eigen::VectorXd &output) = 0;
337 virtual void mapConsistent(const time::Sample &input, Eigen::VectorXd &output) = 0;
338
339private:
342
345
348
351
354
356
359
361 Eigen::VectorXd *_initialGuess = nullptr;
362};
363
369
375
376} // namespace precice::mapping
bool requiresInitialGuess() const
Return true if the mapping requires an initial guess.
Definition Mapping.cpp:51
mesh::PtrMesh output() const
Returns pointer to output mesh.
Definition Mapping.cpp:92
virtual void tagMeshSecondRound()=0
Method used by partition. Tags vertices that can be filtered out.
virtual void initializeMappingDataCache(impl::MappingDataCache &cache)
Allocates memory and sets up the data structures inside the MappingDataCache.
Definition Mapping.cpp:281
Mapping & operator=(Mapping &&)=delete
Constraint _constraint
Determines whether mapping is consistent or conservative.
Definition Mapping.hpp:341
mesh::PtrMesh _input
Pointer to input mesh.
Definition Mapping.hpp:350
virtual void mapConsistent(const time::Sample &input, Eigen::VectorXd &output)=0
Maps data using a consistent constraint.
MeshRequirement
Specifies requirements for the input and output meshes of a mapping.
Definition Mapping.hpp:46
Constraint
Specifies additional constraints for a mapping.
Definition Mapping.hpp:30
Eigen::VectorXd * _initialGuess
Pointer to the initialGuess set and unset by map.
Definition Mapping.hpp:361
virtual void completeJustInTimeMapping(impl::MappingDataCache &cache, Eigen::Ref< Eigen::MatrixXd > result)
Completes a just-in-time mapping for conservative constraints.
Definition Mapping.cpp:301
InitialGuessRequirement _initialGuessRequirement
The InitialGuessRequirement of the Mapping.
Definition Mapping.hpp:358
virtual void mapConsistentAt(const Eigen::Ref< const Eigen::MatrixXd > &coordinates, const impl::MappingDataCache &cache, Eigen::Ref< Eigen::MatrixXd > values)
Just-in-time mapping variant of mapConsistent.
Definition Mapping.cpp:312
virtual void clear()=0
Removes a computed mapping.
virtual void updateMappingDataCache(impl::MappingDataCache &cache, const Eigen::Ref< const Eigen::VectorXd > &in)
Allows updating a so-called MappingDataCache for more efficient just-in-time mappings.
Definition Mapping.cpp:270
void setMeshes(const mesh::PtrMesh &input, const mesh::PtrMesh &output)
Sets input and output meshes carrying data to be mapped.
Definition Mapping.cpp:28
Mapping(Constraint constraint, int dimensions, bool requiresGradientData, InitialGuessRequirement initialGuessRequirement)
Constructor, takes mapping constraint.
Definition Mapping.cpp:12
mesh::PtrMesh input() const
Returns pointer to input mesh.
Definition Mapping.cpp:87
bool _hasComputedMapping
Flag to indicate whether computeMapping() has been called.
Definition Mapping.hpp:307
bool isJustInTimeMapping() const
Definition Mapping.cpp:263
Constraint getConstraint() const
Returns the constraint (consistent/conservative) of the mapping.
Definition Mapping.cpp:46
bool isScaledConsistent() const
Returns true if mapping is a form of scaled consistent mapping.
Definition Mapping.cpp:258
virtual void scaleConsistentMapping(const Eigen::VectorXd &input, Eigen::VectorXd &output, Constraint type) const
Scales the consistently mapped output data such that the surface integral of the values on input mesh...
Definition Mapping.cpp:175
void setInputRequirement(MeshRequirement requirement)
Sets the mesh requirement for the input mesh.
Definition Mapping.cpp:97
bool hasInitialGuess() const
True if initialGuess().size() == 0.
Definition Mapping.cpp:56
mesh::PtrMesh _output
Pointer to output mesh.
Definition Mapping.hpp:353
bool requiresGradientData() const
Returns whether the mapping requires gradient data.
Definition Mapping.cpp:114
virtual void mapConservativeAt(const Eigen::Ref< const Eigen::MatrixXd > &coordinates, const Eigen::Ref< const Eigen::MatrixXd > &source, impl::MappingDataCache &cache, Eigen::Ref< Eigen::MatrixXd > target)
Just-in-time mapping variant of mapConservative.
Definition Mapping.cpp:292
virtual void tagMeshFirstRound()=0
Method used by partition. Tags vertices that could be owned by this rank.
MeshRequirement _inputRequirement
Requirement on input mesh.
Definition Mapping.hpp:344
virtual std::string getName() const =0
Returns the name of the mapping method for logging purpose.
virtual void mapConservative(const time::Sample &input, Eigen::VectorXd &output)=0
Maps data using a conservative constraint.
virtual void computeMapping()=0
Computes the mapping coefficients from the in- and output mesh.
MeshRequirement _outputRequirement
Requirement on output mesh.
Definition Mapping.hpp:347
const mesh::PtrMesh & getOutputMesh() const
Definition Mapping.cpp:41
void setOutputRequirement(MeshRequirement requirement)
Sets the mesh requirement for the output mesh.
Definition Mapping.cpp:103
const Eigen::VectorXd & initialGuess() const
Return the provided initial guess of a mapping using an initialGuess.
Definition Mapping.cpp:63
bool hasComputedMapping() const
Returns true, if the mapping has been computed.
Definition Mapping.cpp:253
void map(int inputDataID, int outputDataID)
Definition Mapping.cpp:127
MeshRequirement getInputRequirement() const
Returns the requirement on the input mesh.
Definition Mapping.cpp:77
virtual ~Mapping()=default
Destructor, empty.
const mesh::PtrMesh & getInputMesh() const
Definition Mapping.cpp:36
MeshRequirement getOutputRequirement() const
Returns the requirement on the output mesh.
Definition Mapping.cpp:82
virtual bool hasConstraint(const Constraint &constraint) const
Checks whether the mapping has the given constraint or not.
Definition Mapping.cpp:248
InitialGuessRequirement
Specifies whether the mapping requires an initial guess.
Definition Mapping.hpp:64
bool _requiresGradientData
Flag if gradient data is required for the mapping.
Definition Mapping.hpp:310
contains data mapping from points to meshes.
bool operator<(Mapping::MeshRequirement lhs, Mapping::MeshRequirement rhs)
Definition Mapping.cpp:321
std::ostream & operator<<(std::ostream &out, Mapping::MeshRequirement val)
Definition Mapping.cpp:334
std::shared_ptr< Mesh > PtrMesh