5#include <unordered_set>
40void mapTemplatedConsistent(
const std::vector<Operation> &ops,
const Eigen::VectorXd &in, Eigen::VectorXd &out)
42 static_assert(n > 0 && n <= 3);
45 for (
const auto &op : ops) {
46 if constexpr (n == 1) {
48 out[op.out] += op.weight * in[op.in];
51 out.segment<n>(op.out * n).noalias() += op.weight * in.segment<n>(op.in * n);
57void mapTemplatedConservative(
const std::vector<Operation> &ops,
const Eigen::VectorXd &in, Eigen::VectorXd &out)
59 static_assert(n > 0 && n <= 3);
62 for (
const auto &op : ops) {
63 if constexpr (n == 1) {
65 out[op.in] += op.weight * in[op.out];
68 out.segment<n>(op.in * n).noalias() += op.weight * in.segment<n>(op.out * n);
81 const int dimensions = inData.
dataDims;
82 const Eigen::VectorXd &inValues = inData.
values;
83 Eigen::VectorXd &outValues = outData;
87 mapTemplatedConservative<1>(
_operations, inValues, outValues);
90 mapTemplatedConservative<2>(
_operations, inValues, outValues);
93 mapTemplatedConservative<3>(
_operations, inValues, outValues);
109 const int dimensions = inData.
dataDims;
110 const Eigen::VectorXd &inValues = inData.
values;
111 Eigen::VectorXd &outValues = outData;
113 switch (dimensions) {
115 mapTemplatedConsistent<1>(
_operations, inValues, outValues);
118 mapTemplatedConsistent<2>(
_operations, inValues, outValues);
121 mapTemplatedConsistent<3>(
_operations, inValues, outValues);
149 std::vector<bool> tagged(origins->
nVertices(),
false);
152 tagged[op.in] =
true;
157 for (
size_t i = 0; i < origins->
nVertices(); ++i) {
173 _operations.push_back({out, we.vertexID, we.weight});
184 if (lhs.in < rhs.in) {
187 if (rhs.in < lhs.in) {
191 return lhs.out < rhs.out;
#define PRECICE_DEBUG(...)
#define PRECICE_TRACE(...)
#define PRECICE_ASSERT(...)
#define PRECICE_UNREACHABLE(...)
std::size_t nVertices() const
Returns the number of vertices.
Vertex & vertex(VertexID id)
Mutable access to a vertex by VertexID.
void tagMeshFirstRound() final override
Method used by partition. Tags vertices that could be owned by this rank.
void postProcessOperations()
Post processed operations after the mapping has been computed.
void clear() final override
Removes a computed mapping.
void mapConsistent(const time::Sample &inData, Eigen::VectorXd &outData) override
Maps data using a consistent constraint.
void tagMeshSecondRound() final override
Method used by partition. Tags vertices that can be filtered out.
BarycentricBaseMapping(Constraint constraint, int dimensions)
void mapConservative(const time::Sample &inData, Eigen::VectorXd &outData) override
Maps data using a conservative constraint.
void addPolation(VertexID out, const Polation &p)
Takes a polation and registers each weighed input as one Operation.
std::vector< Operation > _operations
mesh::PtrMesh output() const
Returns pointer to output mesh.
Constraint
Specifies additional constraints for a mapping.
Mapping(Constraint constraint, int dimensions, bool requiresGradientData, InitialGuessRequirement initialGuessRequirement)
Constructor, takes mapping constraint.
mesh::PtrMesh input() const
Returns pointer to input mesh.
bool _hasComputedMapping
Flag to indicate whether computeMapping() has been called.
Constraint getConstraint() const
Returns the constraint (consistent/conservative) of the mapping.
virtual std::string getName() const =0
Returns the name of the mapping method for logging purpose.
virtual void computeMapping()=0
Computes the mapping coefficients from the in- and output mesh.
virtual bool hasConstraint(const Constraint &constraint) const
Checks whether the mapping has the given constraint or not.
InitialGuessRequirement
Specifies whether the mapping requires an initial guess.
Calculates the barycentric coordinates of a coordinate on the given vertex/edge/triangle and stores t...
const boost::container::static_vector< WeightedElement, 4 > & getWeightedElements() const
Get the weights and indices of the calculated interpolation.
contains data mapping from points to meshes.
constexpr bool equals(const Eigen::MatrixBase< DerivedA > &A, const Eigen::MatrixBase< DerivedB > &B, double tolerance=NUMERICAL_ZERO_DIFFERENCE)
Compares two Eigen::MatrixBase for equality up to tolerance.
std::shared_ptr< Mesh > PtrMesh
static constexpr SynchronizeTag Synchronize
Convenience instance of the SynchronizeTag.
int dataDims
The dimensionality of the data.