preCICE v3.1.2
|
#include <PartitionOfUnityMapping.hpp>
Public Member Functions | |
PartitionOfUnityMapping (Mapping::Constraint constraint, int dimension, RADIAL_BASIS_FUNCTION_T function, Polynomial polynomial, unsigned int verticesPerCluster, double relativeOverlap, bool projectToInput) | |
void | computeMapping () final override |
void | clear () final override |
Clears a computed mapping by deleting the content of the _clusters vector. | |
void | tagMeshFirstRound () final override |
tag the vertices required for the mapping | |
void | tagMeshSecondRound () final override |
nothing to do here | |
std::string | getName () const final override |
name of the pum mapping | |
Public Member Functions inherited from precice::mapping::Mapping | |
Mapping (Constraint constraint, int dimensions, bool requiresGradientData, InitialGuessRequirement initialGuessRequirement) | |
Constructor, takes mapping constraint. | |
Mapping & | operator= (Mapping &&)=delete |
virtual | ~Mapping ()=default |
Destructor, empty. | |
void | setMeshes (const mesh::PtrMesh &input, const mesh::PtrMesh &output) |
Sets input and output meshes carrying data to be mapped. | |
const mesh::PtrMesh & | getInputMesh () const |
const mesh::PtrMesh & | getOutputMesh () const |
Constraint | getConstraint () const |
Returns the constraint (consistent/conservative) of the mapping. | |
MeshRequirement | getInputRequirement () const |
Returns the requirement on the input mesh. | |
MeshRequirement | getOutputRequirement () const |
Returns the requirement on the output mesh. | |
bool | hasComputedMapping () const |
Returns true, if the mapping has been computed. | |
virtual bool | hasConstraint (const Constraint &constraint) const |
Checks whether the mapping has the given constraint or not. | |
bool | isScaledConsistent () const |
Returns true if mapping is a form of scaled consistent mapping. | |
bool | requiresInitialGuess () const |
Return true if the mapping requires an initial guess. | |
const Eigen::VectorXd & | initialGuess () const |
Return the provided initial guess of a mapping using an initialGuess. | |
Eigen::VectorXd & | initialGuess () |
bool | hasInitialGuess () const |
True if initialGuess().size() == 0. | |
void | map (int inputDataID, int outputDataID) |
void | map (int inputDataID, int outputDataID, Eigen::VectorXd &initialGuess) |
void | map (const time::Sample &input, Eigen::VectorXd &output) |
Maps an input Sample to output data from input mesh to output mesh. | |
void | map (const time::Sample &input, Eigen::VectorXd &output, Eigen::VectorXd &initialGuess) |
Maps an input Sample to output data from input mesh to output mesh, given an initialGuess. | |
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 and output mesh are equal. | |
bool | requiresGradientData () const |
Returns whether the mapping requires gradient data. | |
Private Member Functions | |
virtual void | mapConservative (const time::Sample &inData, Eigen::VectorXd &outData) override |
Maps data using a conservative constraint. | |
virtual void | mapConsistent (const time::Sample &inData, Eigen::VectorXd &outData) override |
Maps data using a consistent constraint. | |
void | exportClusterCentersAsVTU (mesh::Mesh ¢ers) |
Private Attributes | |
precice::logging::Logger | _log {"mapping::PartitionOfUnityMapping"} |
logger, as usual | |
std::vector< SphericalVertexCluster< RADIAL_BASIS_FUNCTION_T > > | _clusters |
main data container storing all the clusters, which need to be solved individually | |
RADIAL_BASIS_FUNCTION_T | _basisFunction |
Radial basis function type used in interpolation. | |
const unsigned int | _verticesPerCluster |
Input parameters provided by the user for the clustering algorithm: | |
const double | _relativeOverlap |
overlap of vertex clusters | |
const bool | _projectToInput |
toggles whether we project the cluster centers to the input mesh | |
double | _clusterRadius = 0 |
derived parameter based on the input above: the radius of each cluster | |
Polynomial | _polynomial |
polynomial treatment of the RBF system | |
Additional Inherited Members | |
Public Types inherited from precice::mapping::Mapping | |
enum | Constraint { CONSISTENT , CONSERVATIVE , SCALED_CONSISTENT_SURFACE , SCALED_CONSISTENT_VOLUME } |
Specifies additional constraints for a mapping. More... | |
enum class | MeshRequirement { UNDEFINED = 0 , VERTEX = 1 , FULL = 2 } |
Specifies requirements for the input and output meshes of a mapping. More... | |
enum class | InitialGuessRequirement : bool { Required = true , None = false } |
Specifies whether the mapping requires an initial guess. More... | |
Protected Member Functions inherited from precice::mapping::Mapping | |
mesh::PtrMesh | input () const |
Returns pointer to input mesh. | |
mesh::PtrMesh | output () const |
Returns pointer to output mesh. | |
void | setInputRequirement (MeshRequirement requirement) |
Sets the mesh requirement for the input mesh. | |
void | setOutputRequirement (MeshRequirement requirement) |
Sets the mesh requirement for the output mesh. | |
int | getDimensions () const |
Protected Attributes inherited from precice::mapping::Mapping | |
bool | _hasComputedMapping = false |
Flag to indicate whether computeMapping() has been called. | |
bool | _requiresGradientData |
Flag if gradient data is required for the mapping. | |
Mapping using partition of unity decomposition strategies: The class here inherits from the Mapping class and orchestrates the partitions (called vertex clusters) in order to represent a partition of unity. This means in particular that the class computes the weights for the evaluation vertices and the necessary association between evaluation vertices and the clusters during initialization and traverses through all vertex clusters when evaluating the mapping.
Definition at line 29 of file PartitionOfUnityMapping.hpp.
precice::mapping::PartitionOfUnityMapping< RADIAL_BASIS_FUNCTION_T >::PartitionOfUnityMapping | ( | Mapping::Constraint | constraint, |
int | dimension, | ||
RADIAL_BASIS_FUNCTION_T | function, | ||
Polynomial | polynomial, | ||
unsigned int | verticesPerCluster, | ||
double | relativeOverlap, | ||
bool | projectToInput ) |
Constructor, which mostly sets the mesh connectivity requirements and initializes member variables.
[in] | constraint | Specifies mapping to be consistent or conservative. |
[in] | dimension | Dimensionality of the meshes |
[in] | function | Radial basis function type used in interpolation |
[in] | polynomial | The handling of the polynomial in the RBF system. Valid choices are 'off' and 'separate' |
[in] | verticesPerCluster | Target number of vertices to be clustered together |
[in] | relativeOverlap | Overlap between clusters: The parameter here determines the distance between two cluster centers, given the cluster radius (already determined through verticesPerCluster ). A value of 1 would correspond to no distance between cluster centers (i.e. completely overlapping clusters), 0 to distance of 2 x radius between clusters centers. |
[in] | projectToInput | if enabled, places the cluster centers at the closest vertex of the input mesh. See also mapping::impl::createClustering() |
Definition at line 117 of file PartitionOfUnityMapping.hpp.
|
finaloverridevirtual |
Clears a computed mapping by deleting the content of the _clusters
vector.
Implements precice::mapping::Mapping.
Definition at line 415 of file PartitionOfUnityMapping.hpp.
|
finaloverridevirtual |
Computes the clustering for the partition of unity method and fills the _clusters
vector, which allows to travers through all vertex cluster computed. Each vertex cluster in the vector directly computes local mapping matrices and matrix decompositions. In addition, the method computes the normalized weights (Shepard's method) for the partition of unity method and stores them directly in each relevant vertex cluster. In debug mode, the function also exports the partition centers as a separate mesh for visualization purpose.
Implements precice::mapping::Mapping.
Definition at line 143 of file PartitionOfUnityMapping.hpp.
|
private |
export the center vertices of all clusters as a mesh with some additional data on it such as vertex count only enabled in debug builds and mainly for debugging purpose
Definition at line 366 of file PartitionOfUnityMapping.hpp.
|
finaloverridevirtual |
name of the pum mapping
Implements precice::mapping::Mapping.
Definition at line 425 of file PartitionOfUnityMapping.hpp.
|
overrideprivatevirtual |
Maps data using a conservative constraint.
[in] | input | Sample to map data from |
[in] | output | Values to map to |
If requiresInitialGuess(), then the initial guess is available via initialGuess(). Provide a new initial guess by overwriting it. The mapping has full control over its size.
Implements precice::mapping::Mapping.
Definition at line 264 of file PartitionOfUnityMapping.hpp.
|
overrideprivatevirtual |
Maps data using a consistent constraint.
[in] | input | Sample to map data from |
[in] | output | Values to map to |
If requiresInitialGuess(), then the initial guess is available via initialGuess(). Provide a new initial guess by overwriting it. The mapping has full control over its size.
Implements precice::mapping::Mapping.
Definition at line 279 of file PartitionOfUnityMapping.hpp.
|
finaloverridevirtual |
tag the vertices required for the mapping
Implements precice::mapping::Mapping.
Definition at line 294 of file PartitionOfUnityMapping.hpp.
|
finaloverridevirtual |
nothing to do here
Implements precice::mapping::Mapping.
Definition at line 360 of file PartitionOfUnityMapping.hpp.
|
private |
Radial basis function type used in interpolation.
Definition at line 86 of file PartitionOfUnityMapping.hpp.
|
private |
derived parameter based on the input above: the radius of each cluster
Definition at line 100 of file PartitionOfUnityMapping.hpp.
|
private |
main data container storing all the clusters, which need to be solved individually
Definition at line 83 of file PartitionOfUnityMapping.hpp.
|
private |
logger, as usual
Definition at line 80 of file PartitionOfUnityMapping.hpp.
|
private |
polynomial treatment of the RBF system
Definition at line 103 of file PartitionOfUnityMapping.hpp.
|
private |
toggles whether we project the cluster centers to the input mesh
Definition at line 97 of file PartitionOfUnityMapping.hpp.
|
private |
overlap of vertex clusters
Definition at line 94 of file PartitionOfUnityMapping.hpp.
|
private |
Input parameters provided by the user for the clustering algorithm:
target number of input vertices for each cluster
Definition at line 91 of file PartitionOfUnityMapping.hpp.