diff --git a/src/Infrastructure/Mesh/src/ESMCI_Mesh.C b/src/Infrastructure/Mesh/src/ESMCI_Mesh.C index b45286c928..753aca2a32 100644 --- a/src/Infrastructure/Mesh/src/ESMCI_Mesh.C +++ b/src/Infrastructure/Mesh/src/ESMCI_Mesh.C @@ -1892,21 +1892,33 @@ void Mesh::resolve_cspec_delete_owners(UInt obj_type) { #undef ESMC_METHOD #define ESMC_METHOD "ESMCI::Mesh::MeshToPointList()" + // Add original coords + bool add_orig_coords=true; + ESMCI::PointList *plp = NULL; int localrc; - MEField<> *cfield; + MEField<> *cfield=NULL; + MEField<> *orig_cfield=NULL; MEField<> *src_mask_val; Mesh::MeshObjIDMap::const_iterator mb,mi,me; bool check_id=false; int max_ok_id=std::numeric_limits::max(); - + int orig_coord_dim=0; // 0 indicates not to add orig. coordinates + ESMC_CoordSys_Flag orig_coord_sys=ESMC_COORDSYS_UNINIT; + // Initialize the parallel environment for mesh (if not already done) ESMCI::Par::Init("MESHLOG", false /* use log */,VM::getCurrent(&localrc)->getMpi_c()); if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,rc)) throw localrc; // bail out with exception + // If original coords requested, add information from Mesh + if (add_orig_coords) { + orig_coord_dim=orig_spatial_dim; + orig_coord_sys=coordsys; + } + // Set up based on whether nodes or elem if (meshLoc == ESMC_MESHLOC_NODE) { // Get coord field @@ -1918,6 +1930,17 @@ void Mesh::resolve_cspec_delete_owners(UInt obj_type) { ESMC_CONTEXT, &localrc)) throw localrc; } + // If requested, get orig coord field + if (add_orig_coords) { + orig_cfield = GetField("orig_coordinates"); + if (orig_cfield == NULL) { + int localrc; + if(ESMC_LogDefault.MsgFoundError(ESMC_RC_ARG_VALUE, + "mesh node original coordinates unavailable", + ESMC_CONTEXT, &localrc)) throw localrc; + } + } + // Get Iterators mb = map_begin(MeshObj::NODE); me = map_end(MeshObj::NODE); @@ -1938,6 +1961,17 @@ void Mesh::resolve_cspec_delete_owners(UInt obj_type) { ESMC_CONTEXT, &localrc)) throw localrc; } + // If requested, get orig coord field + if (add_orig_coords) { + orig_cfield = GetField("elem_orig_coordinates"); + if (orig_cfield == NULL) { + int localrc; + if(ESMC_LogDefault.MsgFoundError(ESMC_RC_ARG_VALUE, + "mesh elem original coordinates unavailable", + ESMC_CONTEXT, &localrc)) throw localrc; + } + } + // Get Iterators mb = map_begin(MeshObj::ELEMENT); me = map_end(MeshObj::ELEMENT); @@ -1977,7 +2011,7 @@ void Mesh::resolve_cspec_delete_owners(UInt obj_type) { } // Create PointList - plp = new PointList(num_local_pts,spatial_dim()); + plp = new PointList(num_local_pts,spatial_dim(),orig_coord_dim,orig_coord_sys); // Loop through adding local nodes for (mi=mb; mi != me; ++mi) { @@ -2033,7 +2067,7 @@ void Mesh::resolve_cspec_delete_owners(UInt obj_type) { } // Create PointList - plp = new PointList(num_local_pts,spatial_dim()); + plp = new PointList(num_local_pts,spatial_dim(),orig_coord_dim,orig_coord_sys); // Loop through adding unmasked points for (mi=mb; mi != me; ++mi) {