An offline map between two Meshes. More...
#include <TempestOnlineMap.hpp>
Public Types | |
enum | DiscretizationType { DiscretizationType_FV = 0 , DiscretizationType_CGLL = 1 , DiscretizationType_DGLL = 2 , DiscretizationType_PCLOUD = 3 } |
enum | CAASType { CAAS_NONE = 0 , CAAS_GLOBAL = 1 , CAAS_LOCAL = 2 , CAAS_LOCAL_ADJACENT = 3 , CAAS_QLT = 4 } |
typedef double(* | sample_function) (double, double) |
Public Member Functions | |||||
TempestOnlineMap (moab::TempestRemapper *remapper) | |||||
Generate the metadata associated with the offline map. More... | |||||
virtual | ~TempestOnlineMap () | ||||
Define a virtual destructor. More... | |||||
moab::ErrorCode | GenerateRemappingWeights (std::string strInputType, std::string strOutputType, const GenerateOfflineMapAlgorithmOptions &mapOptions, const std::string &srcDofTagName="GLOBAL_ID", const std::string &tgtDofTagName="GLOBAL_ID") | ||||
Generate the offline map, given the source and target mesh and discretization details. This method generates the mapping between the two meshes based on the overlap and stores the result in the SparseMatrix. More... | |||||
moab::ErrorCode | ReadParallelMap (const char *strSource, const std::vector< int > &owned_dof_ids, bool row_major_ownership=true) | ||||
Generate the metadata associated with the offline map. More... | |||||
moab::ErrorCode | WriteParallelMap (const std::string &strTarget, const std::map< std::string, std::string > &attrMap) | ||||
Write the TempestOnlineMap to a parallel NetCDF file. More... | |||||
virtual int | IsConsistent (double dTolerance) | ||||
Determine if the map is first-order accurate. More... | |||||
virtual int | IsConservative (double dTolerance) | ||||
Determine if the map is conservative. More... | |||||
virtual int | IsMonotone (double dTolerance) | ||||
Determine if the map is monotone. More... | |||||
const DataArray1D< double > & | GetGlobalSourceAreas () const | ||||
If we computed the reduction, get the vector representing the source areas for all entities in the mesh More... | |||||
const DataArray1D< double > & | GetGlobalTargetAreas () const | ||||
If we computed the reduction, get the vector representing the target areas for all entities in the mesh More... | |||||
void | PrintMapStatistics () | ||||
moab::ErrorCode | SetDOFmapTags (const std::string srcDofTagName, const std::string tgtDofTagName) | ||||
Store the tag names associated with global DoF ids for source and target meshes to be used for mapping.
| |||||
moab::ErrorCode | SetDOFmapAssociation (DiscretizationType srcType, int srcOrder, bool isSrcContinuous, DataArray3D< int > *srcdataGLLNodes, DataArray3D< int > *srcdataGLLNodesSrc, DiscretizationType destType, int destOrder, bool isTgtContinuous, DataArray3D< int > *tgtdataGLLNodes) | ||||
std::pair< double, double > | ApplyBoundsLimiting (std::vector< double > &dataInDouble, std::vector< double > &dataOutDouble, CAASType caasType=CAAS_GLOBAL, int caasIteration=0, double mismatch=0.0) | ||||
void | ComputeAdjacencyRelations (std::vector< std::unordered_set< int > > &vecAdjFaces, int nrings, const Range &entities, bool useMOABAdjacencies=true, Mesh *trMesh=nullptr) | ||||
int | GetSourceGlobalNDofs () | ||||
Get the number of total Degrees-Of-Freedom defined on the source mesh. More... | |||||
int | GetDestinationGlobalNDofs () | ||||
Get the number of total Degrees-Of-Freedom defined on the destination mesh. More... | |||||
int | GetSourceLocalNDofs () | ||||
Get the number of local Degrees-Of-Freedom defined on the source mesh. More... | |||||
int | GetDestinationLocalNDofs () | ||||
Get the number of local Degrees-Of-Freedom defined on the destination mesh. More... | |||||
int | GetSourceNDofsPerElement () | ||||
Get the number of Degrees-Of-Freedom per element on the source mesh. More... | |||||
int | GetDestinationNDofsPerElement () | ||||
Get the number of Degrees-Of-Freedom per element on the destination mesh. More... | |||||
void | SetSourceNDofsPerElement (int ns) | ||||
Set the number of Degrees-Of-Freedom per element on the source mesh. More... | |||||
void | SetDestinationNDofsPerElement (int nt) | ||||
Get the number of Degrees-Of-Freedom per element on the destination mesh. More... | |||||
int | GetRowGlobalDoF (int localID) const | ||||
Get the global Degrees-Of-Freedom ID on the destination mesh. More... | |||||
int | GetIndexOfRowGlobalDoF (int globalRowDoF) const | ||||
Get the index of globaRowDoF. More... | |||||
int | GetColGlobalDoF (int localID) const | ||||
Get the global Degrees-Of-Freedom ID on the source mesh. More... | |||||
int | GetIndexOfColGlobalDoF (int globalColDoF) const | ||||
Get the index of globaColDoF. More... | |||||
moab::ErrorCode | ApplyWeights (moab::Tag srcSolutionTag, moab::Tag tgtSolutionTag, bool transpose=false, CAASType caasType=CAAS_NONE, double default_projection=0.0) | ||||
Apply the weight matrix onto the source vector (tag) provided as input, and return the column vector (solution projection) in a tag, after the map application Compute: tgtVals = A(S->T) * \srcVals, or if (transpose) tgtVals = [A(T->S)]^T * \srcVals More... | |||||
moab::ErrorCode | DefineAnalyticalSolution (moab::Tag &exactSolnTag, const std::string &solnName, Remapper::IntersectionContext ctx, sample_function testFunction, moab::Tag *clonedSolnTag=NULL, std::string cloneSolnName="") | ||||
Define an analytical solution over the given (source or target) mesh, as specificed in the context. This routine will define a tag that is compatible with the specified discretization method type and order and sample the solution exactly using the analytical function provided by the user. More... | |||||
moab::ErrorCode | ComputeMetrics (Remapper::IntersectionContext ctx, moab::Tag &exactTag, moab::Tag &approxTag, std::map< std::string, double > &metrics, bool verbose=true) | ||||
Compute the error between a sampled (exact) solution and a projected solution in various error norms. More... | |||||
moab::ErrorCode | fill_row_ids (std::vector< int > &ids_of_interest) | ||||
moab::ErrorCode | fill_col_ids (std::vector< int > &ids_of_interest) | ||||
moab::ErrorCode | set_col_dc_dofs (std::vector< int > &values_entities) | ||||
moab::ErrorCode | set_row_dc_dofs (std::vector< int > &values_entities) | ||||
void | SetMeshInput (Mesh *imesh) | ||||
Private Member Functions | |
moab::ErrorCode | LinearRemapNN_MOAB (bool use_GID_matching=false, bool strict_check=false) |
Compute the remapping weights as a permutation matrix that relates DoFs on the source mesh to DoFs on the target mesh. More... | |
void | LinearRemapFVtoFV_Tempest_MOAB (int nOrder) |
Compute the remapping weights for a FV field defined on the source to a FV field defined on the target mesh. More... | |
void | LinearRemapSE0_Tempest_MOAB (const DataArray3D< int > &dataGLLNodes, const DataArray3D< double > &dataGLLJacobian) |
Generate the OfflineMap for linear conserative element-average spectral element to element average remapping. More... | |
void | LinearRemapSE4_Tempest_MOAB (const DataArray3D< int > &dataGLLNodes, const DataArray3D< double > &dataGLLJacobian, int nMonotoneType, bool fContinuousIn, bool fNoConservation) |
Generate the OfflineMap for cubic conserative element-average spectral element to element average remapping. More... | |
void | LinearRemapFVtoGLL_MOAB (const DataArray3D< int > &dataGLLNodes, const DataArray3D< double > &dataGLLJacobian, const DataArray1D< double > &dataGLLNodalArea, int nOrder, int nMonotoneType, bool fContinuous, bool fNoConservation) |
Generate the OfflineMap for remapping from finite volumes to finite elements. More... | |
void | LinearRemapGLLtoGLL2_MOAB (const DataArray3D< int > &dataGLLNodesIn, const DataArray3D< double > &dataGLLJacobianIn, const DataArray3D< int > &dataGLLNodesOut, const DataArray3D< double > &dataGLLJacobianOut, const DataArray1D< double > &dataNodalAreaOut, int nPin, int nPout, int nMonotoneType, bool fContinuousIn, bool fContinuousOut, bool fNoConservation) |
Generate the OfflineMap for remapping from finite elements to finite elements. More... | |
void | LinearRemapGLLtoGLL2_Pointwise_MOAB (const DataArray3D< int > &dataGLLNodesIn, const DataArray3D< double > &dataGLLJacobianIn, const DataArray3D< int > &dataGLLNodesOut, const DataArray3D< double > &dataGLLJacobianOut, const DataArray1D< double > &dataNodalAreaOut, int nPin, int nPout, int nMonotoneType, bool fContinuousIn, bool fContinuousOut) |
Generate the OfflineMap for remapping from finite elements to finite elements (pointwise interpolation). More... | |
moab::ErrorCode | WriteSCRIPMapFile (const std::string &strOutputFile, const std::map< std::string, std::string > &attrMap) |
Copy the local matrix from Tempest SparseMatrix representation (ELL) to the parallel CSR Eigen Matrix for scalable application of matvec needed for projections. More... | |
moab::ErrorCode | WriteHDF5MapFile (const std::string &filename) |
Parallel I/O with NetCDF to write out the SCRIP file from multiple processors. More... | |
void | setup_sizes_dimensions () |
void | CAASLimiter (std::vector< double > &dataCorrectedField, std::vector< double > &dataLowerBound, std::vector< double > &dataUpperBound, double &dMass) |
double | QLTLimiter (int caasIteration, std::vector< double > &dataCorrectedField, std::vector< double > &dataLowerBound, std::vector< double > &dataUpperBound, std::vector< double > &dMassDefect) |
moab::ErrorCode | ApplyWeights (std::vector< double > &srcVals, std::vector< double > &tgtVals, bool transpose=false) |
Apply the weight matrix onto the source vector provided as input, and return the column vector (solution projection) after the map application Compute: tgtVals = A(S->T) * \srcVals, or if (transpose) tgtVals = [A(T->S)]^T * \srcVals More... | |
An offline map between two Meshes.
Definition at line 52 of file TempestOnlineMap.hpp.
typedef double( * moab::TempestOnlineMap::sample_function) (double, double) |
Definition at line 399 of file TempestOnlineMap.hpp.
Enumerator | |
---|---|
CAAS_NONE | |
CAAS_GLOBAL | |
CAAS_LOCAL | |
CAAS_LOCAL_ADJACENT | |
CAAS_QLT |
Definition at line 77 of file TempestOnlineMap.hpp.
Enumerator | |
---|---|
DiscretizationType_FV | |
DiscretizationType_CGLL | |
DiscretizationType_DGLL | |
DiscretizationType_PCLOUD |
Definition at line 68 of file TempestOnlineMap.hpp.
moab::TempestOnlineMap::TempestOnlineMap | ( | moab::TempestRemapper * | remapper | ) |
Generate the metadata associated with the offline map.
Definition at line 64 of file TempestOnlineMap.cpp.
References moab::Remapper::get_interface(), moab::TempestRemapper::GetCoveringMesh(), moab::TempestRemapper::GetMesh(), is_parallel, moab::TempestRemapper::is_parallel, is_root, moab::TempestRemapper::is_root, m_input_order, m_interface, m_meshInput, m_meshInputCov, m_meshOutput, m_meshOverlap, m_output_order, m_remapper, moab::Remapper::OverlapMesh, rank, moab::TempestRemapper::rank, setup_sizes_dimensions(), size, moab::TempestRemapper::size, moab::Remapper::SourceMesh, and moab::Remapper::TargetMesh.
|
virtual |
std::pair< double, double > moab::TempestOnlineMap::ApplyBoundsLimiting | ( | std::vector< double > & | dataInDouble, |
std::vector< double > & | dataOutDouble, | ||
CAASType | caasType = CAAS_GLOBAL , |
||
int | caasIteration = 0 , |
||
double | mismatch = 0.0 |
||
) |
ApplyBoundsLimiting - Apply bounds limiting to the data field
dataInDouble | - input data field |
dataOutDouble | - output data field |
caasType | - type of limiter |
caasIteration | - iteration number of limiter |
moab::ErrorCode moab::TempestOnlineMap::ApplyWeights | ( | moab::Tag | srcSolutionTag, |
moab::Tag | tgtSolutionTag, | ||
bool | transpose = false , |
||
CAASType | caasType = CAAS_NONE , |
||
double | default_projection = 0.0 |
||
) |
Apply the weight matrix onto the source vector (tag) provided as input, and return the column vector (solution projection) in a tag, after the map application Compute: tgtVals
= A(S->T) * \srcVals, or if (transpose) tgtVals
= [A(T->S)]^T * \srcVals
Definition at line 1762 of file TempestOnlineMap.cpp.
References moab::Remapper::CoveringMesh, ErrorCode, MB_CHK_SET_ERR, MB_SUCCESS, moab::Range::size(), and moab::Remapper::TargetMesh.
Referenced by main().
|
private |
Apply the weight matrix onto the source vector provided as input, and return the column vector (solution projection) after the map application Compute: tgtVals
= A(S->T) * \srcVals, or if (transpose) tgtVals
= [A(T->S)]^T * \srcVals
|
private |
void moab::TempestOnlineMap::ComputeAdjacencyRelations | ( | std::vector< std::unordered_set< int > > & | vecAdjFaces, |
int | nrings, | ||
const Range & | entities, | ||
bool | useMOABAdjacencies = true , |
||
Mesh * | trMesh = nullptr |
||
) |
vecAdjFaces | |
nrings | |
entities | |
useMOABAdjacencies | |
trMesh |
Vector storing adjacent Faces.
Definition at line 1713 of file TempestOnlineMap.cpp.
References moab::Range::begin(), moab::Range::end(), entities, ErrorCode, moab::MeshTopoUtil::get_bridge_adjacencies(), moab::Range::insert(), and MB_CHK_SET_ERR_CONT.
moab::ErrorCode moab::TempestOnlineMap::ComputeMetrics | ( | Remapper::IntersectionContext | ctx, |
moab::Tag & | exactTag, | ||
moab::Tag & | approxTag, | ||
std::map< std::string, double > & | metrics, | ||
bool | verbose = true |
||
) |
Compute the error between a sampled (exact) solution and a projected solution in various error norms.
Definition at line 2229 of file TempestOnlineMap.cpp.
References entities, moab::error(), ErrorCode, MB_CHK_ERR, MB_SUCCESS, moab::Remapper::SourceMesh, moab::Remapper::TargetMesh, and verbose.
Referenced by main().
moab::ErrorCode moab::TempestOnlineMap::DefineAnalyticalSolution | ( | moab::Tag & | exactSolnTag, |
const std::string & | solnName, | ||
Remapper::IntersectionContext | ctx, | ||
sample_function | testFunction, | ||
moab::Tag * | clonedSolnTag = NULL , |
||
std::string | cloneSolnName = "" |
||
) |
Define an analytical solution over the given (source or target) mesh, as specificed in the context. This routine will define a tag that is compatible with the specified discretization method type and order and sample the solution exactly using the analytical function provided by the user.
Definition at line 1867 of file TempestOnlineMap.cpp.
References entities, ErrorCode, MB_CHK_ERR, MB_SUCCESS, MB_TAG_CREAT, MB_TAG_DENSE, MB_TYPE_DOUBLE, moab::Remapper::SourceMesh, and moab::Remapper::TargetMesh.
Referenced by main().
|
inline |
|
inline |
moab::ErrorCode moab::TempestOnlineMap::GenerateRemappingWeights | ( | std::string | strInputType, |
std::string | strOutputType, | ||
const GenerateOfflineMapAlgorithmOptions & | mapOptions, | ||
const std::string & | srcDofTagName = "GLOBAL_ID" , |
||
const std::string & | tgtDofTagName = "GLOBAL_ID" |
||
) |
Generate the offline map, given the source and target mesh and discretization details. This method generates the mapping between the two meshes based on the overlap and stores the result in the SparseMatrix.
the tag should be created already in the e3sm workflow; if not, create it here
Definition at line 683 of file TempestOnlineMap.cpp.
References dbgprint, moab::error(), ErrorCode, MB_ALREADY_ALLOCATED, MB_CHK_ERR, MB_CHK_SET_ERR, MB_SUCCESS, MB_TAG_CREAT, MB_TAG_DENSE, MB_TAG_EXCL, MB_TYPE_DOUBLE, moab::Remapper::OverlapMesh, and size.
Referenced by main().
|
inline |
Get the global Degrees-Of-Freedom ID on the source mesh.
Definition at line 558 of file TempestOnlineMap.hpp.
int moab::TempestOnlineMap::GetDestinationGlobalNDofs | ( | ) |
Get the number of total Degrees-Of-Freedom defined on the destination mesh.
int moab::TempestOnlineMap::GetDestinationLocalNDofs | ( | ) |
Get the number of local Degrees-Of-Freedom defined on the destination mesh.
|
inline |
Get the number of Degrees-Of-Freedom per element on the destination mesh.
Definition at line 576 of file TempestOnlineMap.hpp.
const DataArray1D< double >& moab::TempestOnlineMap::GetGlobalSourceAreas | ( | ) | const |
If we computed the reduction, get the vector representing the source areas for all entities in the mesh
const DataArray1D< double >& moab::TempestOnlineMap::GetGlobalTargetAreas | ( | ) | const |
If we computed the reduction, get the vector representing the target areas for all entities in the mesh
|
inline |
Get the index of globaColDoF.
Definition at line 563 of file TempestOnlineMap.hpp.
|
inline |
Get the index of globaRowDoF.
Definition at line 552 of file TempestOnlineMap.hpp.
|
inline |
Get the global Degrees-Of-Freedom ID on the destination mesh.
Definition at line 547 of file TempestOnlineMap.hpp.
int moab::TempestOnlineMap::GetSourceGlobalNDofs | ( | ) |
Get the number of total Degrees-Of-Freedom defined on the source mesh.
int moab::TempestOnlineMap::GetSourceLocalNDofs | ( | ) |
Get the number of local Degrees-Of-Freedom defined on the source mesh.
|
inline |
Get the number of Degrees-Of-Freedom per element on the source mesh.
Definition at line 569 of file TempestOnlineMap.hpp.
|
virtual |
Determine if the map is conservative.
Definition at line 1532 of file TempestOnlineMap.cpp.
References size.
|
virtual |
Determine if the map is first-order accurate.
Definition at line 1486 of file TempestOnlineMap.cpp.
|
virtual |
|
private |
Compute the remapping weights for a FV field defined on the source to a FV field defined on the target mesh.
Definition at line 121 of file TempestLinearRemap.cpp.
References dbgprint.
|
private |
Generate the OfflineMap for remapping from finite volumes to finite elements.
|
private |
Generate the OfflineMap for remapping from finite elements to finite elements.
Definition at line 1402 of file TempestLinearRemap.cpp.
References center(), dbgprint, and ForceIntArrayConsistencyConservation().
|
private |
Generate the OfflineMap for remapping from finite elements to finite elements (pointwise interpolation).
Definition at line 1953 of file TempestLinearRemap.cpp.
References dbgprint.
|
private |
Compute the remapping weights as a permutation matrix that relates DoFs on the source mesh to DoFs on the target mesh.
Definition at line 58 of file TempestLinearRemap.cpp.
References col_gdofmap, m_nTotDofs_Dest, m_nTotDofs_SrcCov, MB_SUCCESS, and row_gdofmap.
|
private |
Generate the OfflineMap for linear conserative element-average spectral element to element average remapping.
|
private |
Generate the OfflineMap for cubic conserative element-average spectral element to element average remapping.
Definition at line 978 of file TempestLinearRemap.cpp.
References center(), dbgprint, and ForceConsistencyConservation3().
void moab::TempestOnlineMap::PrintMapStatistics | ( | ) |
Definition at line 284 of file TempestLinearRemap.cpp.
Referenced by main().
|
private |
moab::ErrorCode moab::TempestOnlineMap::ReadParallelMap | ( | const char * | strSource, |
const std::vector< int > & | owned_dof_ids, | ||
bool | row_major_ownership = true |
||
) |
Generate the metadata associated with the offline map.
Read the OfflineMap from a NetCDF file.
Definition at line 1165 of file TempestOnlineMapIO.cpp.
References CHECK_EXCEPTION, moab::TupleList::enableWriteAccess(), moab::error(), moab::TupleList::get_n(), moab::TupleList::inc_n(), moab::TupleList::initialize(), MB_SUCCESS, moab::TupleList::reset(), size, moab::TupleList::sort(), moab::TupleList::vi_rd, moab::TupleList::vi_wr, moab::TupleList::vr_rd, and moab::TupleList::vr_wr.
moab::ErrorCode moab::TempestOnlineMap::set_col_dc_dofs | ( | std::vector< int > & | values_entities | ) |
Definition at line 639 of file TempestOnlineMap.cpp.
References MB_SUCCESS.
moab::ErrorCode moab::TempestOnlineMap::set_row_dc_dofs | ( | std::vector< int > & | values_entities | ) |
Definition at line 662 of file TempestOnlineMap.cpp.
References MB_SUCCESS.
|
inline |
Get the number of Degrees-Of-Freedom per element on the destination mesh.
Definition at line 587 of file TempestOnlineMap.hpp.
moab::ErrorCode moab::TempestOnlineMap::SetDOFmapAssociation | ( | DiscretizationType | srcType, |
int | srcOrder, | ||
bool | isSrcContinuous, | ||
DataArray3D< int > * | srcdataGLLNodes, | ||
DataArray3D< int > * | srcdataGLLNodesSrc, | ||
DiscretizationType | destType, | ||
int | destOrder, | ||
bool | isTgtContinuous, | ||
DataArray3D< int > * | tgtdataGLLNodes | ||
) |
Compute the association between the solution tag global DoF numbering and the local matrix numbering so that matvec operations can be performed consistently.
srcType | The discretization type of the source mesh |
srcOrder | The order of the discretization on the source mesh |
isSrcContinuous | The continuity of the discretization on the source mesh |
srcdataGLLNodes | The GLL nodes on the source mesh |
srcdataGLLNodesSrc | The GLL nodes on the source mesh |
destType | The discretization type of the destination mesh |
destOrder | The order of the discretization on the destination mesh |
isTgtContinuous | The continuity of the discretization on the destination mesh |
tgtdataGLLNodes | The GLL nodes on the destination mesh |
Definition at line 160 of file TempestOnlineMap.cpp.
References ErrorCode, MB_CHK_ERR, and MB_SUCCESS.
moab::ErrorCode moab::TempestOnlineMap::SetDOFmapTags | ( | const std::string | srcDofTagName, |
const std::string | tgtDofTagName | ||
) |
Store the tag names associated with global DoF ids for source and target meshes to be used for mapping.
srcDofTagName | The tag name associated with global DoF ids for the source mesh |
tgtDofTagName | The tag name associated with global DoF ids for the target mesh |
Definition at line 128 of file TempestOnlineMap.cpp.
References ErrorCode, MB_CHK_ERR, MB_CHK_SET_ERR, MB_SUCCESS, MB_TAG_ANY, MB_TAG_NOT_FOUND, and MB_TYPE_INTEGER.
|
inline |
Definition at line 448 of file TempestOnlineMap.hpp.
References m_meshInput.
|
inline |
Set the number of Degrees-Of-Freedom per element on the source mesh.
Definition at line 582 of file TempestOnlineMap.hpp.
|
private |
|
private |
Parallel I/O with NetCDF to write out the SCRIP file from multiple processors.
Need to get the global maximum of number of vertices per element Key issue is that when calling InitializeCoordinatesFromMeshFV, the allocation for dVertexLon/dVertexLat are made based on the maximum vertices in the current process. However, when writing this out, other processes may have a different size for the same array. This is hence a mess to consolidate in h5mtoscrip eventually.
Definition at line 790 of file TempestOnlineMapIO.cpp.
References ErrorCode, MB_CHK_ERR, MB_CHK_SET_ERR, MB_SUCCESS, MB_TAG_CREAT, MB_TAG_SPARSE, MB_TAG_VARLEN, MB_TYPE_DOUBLE, MB_TYPE_INTEGER, moab::TempestRemapper::RLL, and size.
moab::ErrorCode moab::TempestOnlineMap::WriteParallelMap | ( | const std::string & | strTarget, |
const std::map< std::string, std::string > & | attrMap | ||
) |
Write the TempestOnlineMap to a parallel NetCDF file.
Definition at line 156 of file TempestOnlineMapIO.cpp.
References ErrorCode, and MB_CHK_ERR.
Referenced by main().
|
private |
Copy the local matrix from Tempest SparseMatrix representation (ELL) to the parallel CSR Eigen Matrix for scalable application of matvec needed for projections.
Parallel I/O with HDF5 to write out the remapping weights from multiple processors.
Need to get the global maximum of number of vertices per element Key issue is that when calling InitializeCoordinatesFromMeshFV, the allocation for dVertexLon/dVertexLat are made based on the maximum vertices in the current process. However, when writing this out, other processes may have a different size for the same array. This is hence a mess to consolidate in h5mtoscrip eventually.
Definition at line 181 of file TempestOnlineMapIO.cpp.