Ignore:
Timestamp:
09/02/16 09:41:27 (8 years ago)
Author:
oabramkina
Message:

Parallel version of UGRID norms.

The following connectivity parameters have been implemented:

edge_nodes
face_nodes
face_edges
edge_faces
face_faces.

Test with a regular(structured) quadrilateral mesh (test_regular) has been added.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/io/nc4_data_output.cpp

    r902 r924  
    2626      CNc4DataOutput::CNc4DataOutput 
    2727         (const StdString & filename, bool exist, bool useClassicFormat, bool useCFConvention, 
    28           MPI_Comm comm_file,bool multifile, bool isCollective, const StdString& timeCounterName) 
     28          MPI_Comm comm_file, bool multifile, bool isCollective, const StdString& timeCounterName) 
    2929            : SuperClass() 
    3030            , SuperClassWriter(filename, exist, useClassicFormat, useCFConvention, &comm_file, multifile, timeCounterName) 
     
    449449      StdString domid = domain->getDomainOutputName(); 
    450450      StdString domainName = domain->name; 
    451       domain->assignMesh(domainName); 
    452       domain->mesh->createMesh(domain->lonvalue_srv, domain->latvalue_srv, domain->bounds_lon_srv, domain->bounds_lat_srv); 
    453       //domain->mesh->createMeshEpsilon(server->intraComm, domain->lonvalue_srv, domain->latvalue_srv, domain->bounds_lon_srv, domain->bounds_lat_srv); 
     451      domain->assignMesh(domainName, domain->nvertex); 
     452      //domain->mesh->createMesh(domain->lonvalue_srv, domain->latvalue_srv, domain->bounds_lon_srv, domain->bounds_lat_srv); 
     453      domain->mesh->createMeshEpsilon(server->intraComm, domain->lonvalue_srv, domain->latvalue_srv, domain->bounds_lon_srv, domain->bounds_lat_srv); 
    454454 
    455455      StdString node_x = domainName + "_node_x"; 
     
    479479        SuperClassWriter::addVariable(domainName, NC_INT, dim0); 
    480480        SuperClassWriter::addAttribute("cf_role", StdString("mesh_topology"), &domainName); 
     481        SuperClassWriter::addAttribute("long_name", StdString("Topology data of 2D unstructured mesh"), &domainName); 
     482        SuperClassWriter::addAttribute("topology_dimension", 2, &domainName); 
    481483        SuperClassWriter::addAttribute("node_coordinates", node_x + " " + node_y, &domainName); 
    482484      } 
     
    498500                SuperClassWriter::addVariable(node_x, NC_FLOAT, dim0); 
    499501                SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &node_x); 
    500                 SuperClassWriter::addAttribute("longname_name", StdString("Longitude of mesh nodes."), &node_x); 
     502                SuperClassWriter::addAttribute("long_name", StdString("Longitude of mesh nodes."), &node_x); 
    501503                SuperClassWriter::addAttribute("units", StdString("degrees_east"), &node_x); 
    502504                SuperClassWriter::addVariable(node_y, NC_FLOAT, dim0); 
    503505                SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &node_y); 
    504                 SuperClassWriter::addAttribute("longname_name", StdString("Latitude of mesh nodes."), &node_y); 
     506                SuperClassWriter::addAttribute("long_name", StdString("Latitude of mesh nodes."), &node_y); 
    505507                SuperClassWriter::addAttribute("units", StdString("degrees_north"), &node_y); 
    506508              } 
     
    512514              if (!SuperClassWriter::varExist(node_x) || !SuperClassWriter::varExist(node_y)) 
    513515              { 
    514                 SuperClassWriter::addDimension(dimNode, domain->mesh->nbNodes); 
     516                SuperClassWriter::addDimension(dimNode, domain->mesh->nbNodesGlo); 
    515517                dim0.clear(); 
    516518                dim0.push_back(dimNode); 
    517519                SuperClassWriter::addVariable(node_x, NC_FLOAT, dim0); 
    518520                SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &node_x); 
    519                 SuperClassWriter::addAttribute("longname_name", StdString("Longitude of mesh nodes."), &node_x); 
     521                SuperClassWriter::addAttribute("long_name", StdString("Longitude of mesh nodes."), &node_x); 
    520522                SuperClassWriter::addAttribute("units", StdString("degrees_east"), &node_x); 
    521523                SuperClassWriter::addVariable(node_y, NC_FLOAT, dim0); 
    522524                SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &node_y); 
    523                 SuperClassWriter::addAttribute("longname_name", StdString("Latitude of mesh nodes."), &node_y); 
     525                SuperClassWriter::addAttribute("long_name", StdString("Latitude of mesh nodes."), &node_y); 
     526                SuperClassWriter::addAttribute("units", StdString("degrees_north"), &node_y); 
     527              } 
     528              SuperClassWriter::addAttribute("edge_node_connectivity", edge_nodes, &domainName); 
     529              SuperClassWriter::addAttribute("edge_coordinates", edge_x + " " + edge_y, &domainName); 
     530              SuperClassWriter::addDimension(dimEdge, domain->ni_glo); 
     531              dim0.clear(); 
     532              dim0.push_back(dimEdge); 
     533              SuperClassWriter::addVariable(edge_x, NC_FLOAT, dim0); 
     534              SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &edge_x); 
     535              SuperClassWriter::addAttribute("long_name", StdString("Characteristic longitude of mesh edges."), &edge_x); 
     536              SuperClassWriter::addAttribute("units", StdString("degrees_east"), &edge_x); 
     537              SuperClassWriter::addVariable(edge_y, NC_FLOAT, dim0); 
     538              SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &edge_y); 
     539              SuperClassWriter::addAttribute("long_name", StdString("Characteristic latitude of mesh edges."), &edge_y); 
     540              SuperClassWriter::addAttribute("units", StdString("degrees_north"), &edge_y); 
     541              dim0.clear(); 
     542              dim0.push_back(dimEdge); 
     543              dim0.push_back(dimTwo); 
     544              SuperClassWriter::addVariable(edge_nodes, NC_INT, dim0); 
     545              SuperClassWriter::addAttribute("cf_role", StdString("edge_node_connectivity"), &edge_nodes); 
     546              SuperClassWriter::addAttribute("long_name", StdString("Maps every edge/link to two nodes that it connects."), &edge_nodes); 
     547              SuperClassWriter::addAttribute("start_index", 0, &edge_nodes); 
     548            } // domain->nvertex == 2 
     549 
     550            // Adding faces, edges, and nodes, if edges and nodes have not been defined previously 
     551            if (domain->nvertex > 2) 
     552            { 
     553              // Nodes 
     554              if (!SuperClassWriter::varExist(node_x) || !SuperClassWriter::varExist(node_y)) 
     555              { 
     556                SuperClassWriter::addDimension(dimNode, domain->mesh->nbNodesGlo); 
     557                dim0.clear(); 
     558                dim0.push_back(dimNode); 
     559                SuperClassWriter::addVariable(node_x, NC_FLOAT, dim0); 
     560                SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &node_x); 
     561                SuperClassWriter::addAttribute("long_name", StdString("Longitude of mesh nodes."), &node_x); 
     562                SuperClassWriter::addAttribute("units", StdString("degrees_east"), &node_x); 
     563                SuperClassWriter::addVariable(node_y, NC_FLOAT, dim0); 
     564                SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &node_y); 
     565                SuperClassWriter::addAttribute("long_name", StdString("Latitude of mesh nodes."), &node_y); 
    524566                SuperClassWriter::addAttribute("units", StdString("degrees_north"), &node_y); 
    525567              } 
    526568              if (!SuperClassWriter::varExist(edge_x) || !SuperClassWriter::varExist(edge_y)) 
    527569              { 
     570                SuperClassWriter::addAttribute("edge_coordinates", edge_x + " " + edge_y, &domainName); 
    528571                SuperClassWriter::addAttribute("edge_node_connectivity", edge_nodes, &domainName); 
    529                 SuperClassWriter::addAttribute("edge_coordinates", edge_x + " " + edge_y, &domainName); 
    530                 SuperClassWriter::addDimension(dimEdge, domain->mesh->nbEdges); 
     572                SuperClassWriter::addDimension(dimEdge, domain->mesh->nbEdgesGlo); 
    531573                dim0.clear(); 
    532574                dim0.push_back(dimEdge); 
    533575                SuperClassWriter::addVariable(edge_x, NC_FLOAT, dim0); 
    534576                SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &edge_x); 
    535                 SuperClassWriter::addAttribute("longname_name", StdString("Characteristic longitude of mesh edges."), &edge_x); 
     577                SuperClassWriter::addAttribute("long_name", StdString("Characteristic longitude of mesh edges."), &edge_x); 
    536578                SuperClassWriter::addAttribute("units", StdString("degrees_east"), &edge_x); 
    537579                SuperClassWriter::addVariable(edge_y, NC_FLOAT, dim0); 
    538580                SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &edge_y); 
    539                 SuperClassWriter::addAttribute("longname_name", StdString("Characteristic latitude of mesh edges."), &edge_y); 
     581                SuperClassWriter::addAttribute("long_name", StdString("Characteristic latitude of mesh edges."), &edge_y); 
    540582                SuperClassWriter::addAttribute("units", StdString("degrees_north"), &edge_y); 
    541583                dim0.clear(); 
     
    547589                SuperClassWriter::addAttribute("start_index", 0, &edge_nodes); 
    548590              } 
    549             } // domain->nvertex == 2 
    550  
    551             // Adding faces, edges, and nodes, if edges and nodes have not been defined previously 
    552             if (domain->nvertex > 2) 
    553             { 
    554               // Nodes 
    555               if (!SuperClassWriter::varExist(node_x) || !SuperClassWriter::varExist(node_y)) 
    556               { 
    557                 SuperClassWriter::addDimension(dimNode, domain->mesh->nbNodes); 
    558                 dim0.clear(); 
    559                 dim0.push_back(dimNode); 
    560                 SuperClassWriter::addVariable(node_x, NC_FLOAT, dim0); 
    561                 SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &node_x); 
    562                 SuperClassWriter::addAttribute("longname_name", StdString("Longitude of mesh nodes."), &node_x); 
    563                 SuperClassWriter::addAttribute("units", StdString("degrees_east"), &node_x); 
    564                 SuperClassWriter::addVariable(node_y, NC_FLOAT, dim0); 
    565                 SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &node_y); 
    566                 SuperClassWriter::addAttribute("longname_name", StdString("Latitude of mesh nodes."), &node_y); 
    567                 SuperClassWriter::addAttribute("units", StdString("degrees_north"), &node_y); 
    568               } 
    569               if (!SuperClassWriter::varExist(edge_x) || !SuperClassWriter::varExist(edge_y)) 
    570               { 
    571                 SuperClassWriter::addAttribute("edge_coordinates", edge_x + " " + edge_y, &domainName); 
    572                 SuperClassWriter::addAttribute("edge_node_connectivity", edge_nodes, &domainName); 
    573                 SuperClassWriter::addDimension(dimEdge, domain->mesh->nbEdges); 
    574                 dim0.clear(); 
    575                 dim0.push_back(dimEdge); 
    576                 SuperClassWriter::addVariable(edge_x, NC_FLOAT, dim0); 
    577                 SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &edge_x); 
    578                 SuperClassWriter::addAttribute("longname_name", StdString("Characteristic longitude of mesh edges."), &edge_x); 
    579                 SuperClassWriter::addAttribute("units", StdString("degrees_east"), &edge_x); 
    580                 SuperClassWriter::addVariable(edge_y, NC_FLOAT, dim0); 
    581                 SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &edge_y); 
    582                 SuperClassWriter::addAttribute("longname_name", StdString("Characteristic latitude of mesh edges."), &edge_y); 
    583                 SuperClassWriter::addAttribute("units", StdString("degrees_north"), &edge_y); 
    584                 dim0.clear(); 
    585                 dim0.push_back(dimEdge); 
    586                 dim0.push_back(dimTwo); 
    587                 SuperClassWriter::addVariable(edge_nodes, NC_INT, dim0); 
    588                 SuperClassWriter::addAttribute("cf_role", StdString("edge_node_connectivity"), &edge_nodes); 
    589                 SuperClassWriter::addAttribute("long_name", StdString("Maps every edge/link to two nodes that it connects."), &edge_nodes); 
    590                 SuperClassWriter::addAttribute("start_index", 0, &edge_nodes); 
    591               } 
    592                 SuperClassWriter::addAttribute("face_coordinates", face_x + " " + face_y, &domainName); 
    593                 SuperClassWriter::addAttribute("face_node_connectivity", face_nodes, &domainName); 
    594                 SuperClassWriter::addDimension(dimFace, domain->mesh->nbFaces); 
    595                 SuperClassWriter::addDimension(dimVertex, domain->mesh->nvertex); 
    596                 dim0.clear(); 
    597                 dim0.push_back(dimFace); 
    598                 SuperClassWriter::addVariable(face_x, NC_FLOAT, dim0); 
    599                 SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &face_x); 
    600                 SuperClassWriter::addAttribute("longname_name", StdString("Characteristic longitude of mesh faces."), &face_x); 
    601                 SuperClassWriter::addAttribute("units", StdString("degrees_east"), &face_x); 
    602                 SuperClassWriter::addVariable(face_y, NC_FLOAT, dim0); 
    603                 SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &face_y); 
    604                 SuperClassWriter::addAttribute("longname_name", StdString("Characteristic latitude of mesh faces."), &face_y); 
    605                 SuperClassWriter::addAttribute("units", StdString("degrees_north"), &face_y); 
    606                 dim0.clear(); 
    607                 dim0.push_back(dimFace); 
    608                 dim0.push_back(dimVertex); 
    609                 SuperClassWriter::addVariable(face_nodes, NC_INT, dim0); 
    610                 SuperClassWriter::addAttribute("cf_role", StdString("face_node_connectivity"), &face_nodes); 
    611                 SuperClassWriter::addAttribute("long_name", StdString("Maps every face to its corner nodes."), &face_nodes); 
    612                 SuperClassWriter::addAttribute("start_index", 0, &face_nodes); 
    613                 dim0.clear(); 
    614                 dim0.push_back(dimFace); 
    615                 dim0.push_back(dimVertex); 
    616                 SuperClassWriter::addVariable(face_edges, NC_INT, dim0); 
    617                 SuperClassWriter::addAttribute("cf_role", StdString("face_edge_connectivity"), &face_edges); 
    618                 SuperClassWriter::addAttribute("long_name", StdString("Maps every face to its edges."), &face_edges); 
    619                 SuperClassWriter::addAttribute("start_index", 0, &face_edges); 
    620                 dim0.clear(); 
    621                 dim0.push_back(dimEdge); 
    622                 dim0.push_back(dimTwo); 
    623                 SuperClassWriter::addVariable(edge_faces, NC_INT, dim0); 
    624                 SuperClassWriter::addAttribute("cf_role", StdString("edge_face connectivity"), &edge_faces); 
    625                 SuperClassWriter::addAttribute("long_name", StdString("neighbor faces for edges"), &edge_faces); 
    626                 SuperClassWriter::addAttribute("start_index", 0, &edge_faces); 
    627                 SuperClassWriter::addAttribute("_FillValue", -999, &edge_faces); 
    628                 SuperClassWriter::addAttribute("comment", StdString("missing neighbor faces are indicated using _FillValue"), &edge_faces); 
    629                 dim0.clear(); 
    630                 dim0.push_back(dimFace); 
    631                 dim0.push_back(dimVertex); 
    632                 SuperClassWriter::addVariable(face_faces, NC_INT, dim0); 
    633                 SuperClassWriter::addAttribute("cf_role", StdString("face_face connectivity"), &face_faces); 
    634                 SuperClassWriter::addAttribute("long_name", StdString("Indicates which other faces neighbor each face"), &face_faces); 
    635                 SuperClassWriter::addAttribute("start_index", 0, &face_faces); 
    636                 SuperClassWriter::addAttribute("flag_values", -1, &face_faces); 
    637                 SuperClassWriter::addAttribute("flag_meanings", StdString("out_of_mesh"), &face_faces); 
     591              SuperClassWriter::addAttribute("face_coordinates", face_x + " " + face_y, &domainName); 
     592              SuperClassWriter::addAttribute("face_node_connectivity", face_nodes, &domainName); 
     593              SuperClassWriter::addDimension(dimFace, domain->ni_glo); 
     594              SuperClassWriter::addDimension(dimVertex, domain->nvertex); 
     595              dim0.clear(); 
     596              dim0.push_back(dimFace); 
     597              SuperClassWriter::addVariable(face_x, NC_FLOAT, dim0); 
     598              SuperClassWriter::addAttribute("standard_name", StdString("longitude"), &face_x); 
     599              SuperClassWriter::addAttribute("long_name", StdString("Characteristic longitude of mesh faces."), &face_x); 
     600              SuperClassWriter::addAttribute("units", StdString("degrees_east"), &face_x); 
     601              SuperClassWriter::addVariable(face_y, NC_FLOAT, dim0); 
     602              SuperClassWriter::addAttribute("standard_name", StdString("latitude"), &face_y); 
     603              SuperClassWriter::addAttribute("long_name", StdString("Characteristic latitude of mesh faces."), &face_y); 
     604              SuperClassWriter::addAttribute("units", StdString("degrees_north"), &face_y); 
     605              dim0.clear(); 
     606              dim0.push_back(dimFace); 
     607              dim0.push_back(dimVertex); 
     608              SuperClassWriter::addVariable(face_nodes, NC_INT, dim0); 
     609              SuperClassWriter::addAttribute("cf_role", StdString("face_node_connectivity"), &face_nodes); 
     610              SuperClassWriter::addAttribute("long_name", StdString("Maps every face to its corner nodes."), &face_nodes); 
     611              SuperClassWriter::addAttribute("start_index", 0, &face_nodes); 
     612              dim0.clear(); 
     613              dim0.push_back(dimFace); 
     614              dim0.push_back(dimVertex); 
     615              SuperClassWriter::addVariable(face_edges, NC_INT, dim0); 
     616              SuperClassWriter::addAttribute("cf_role", StdString("face_edge_connectivity"), &face_edges); 
     617              SuperClassWriter::addAttribute("long_name", StdString("Maps every face to its edges."), &face_edges); 
     618              SuperClassWriter::addAttribute("start_index", 0, &face_edges); 
     619              dim0.clear(); 
     620              dim0.push_back(dimEdge); 
     621              dim0.push_back(dimTwo); 
     622              SuperClassWriter::addVariable(edge_faces, NC_INT, dim0); 
     623              SuperClassWriter::addAttribute("cf_role", StdString("edge_face connectivity"), &edge_faces); 
     624              SuperClassWriter::addAttribute("long_name", StdString("neighbor faces for edges"), &edge_faces); 
     625              SuperClassWriter::addAttribute("start_index", 0, &edge_faces); 
     626              SuperClassWriter::addAttribute("_FillValue", -999, &edge_faces); 
     627              SuperClassWriter::addAttribute("comment", StdString("missing neighbor faces are indicated using _FillValue"), &edge_faces); 
     628              dim0.clear(); 
     629              dim0.push_back(dimFace); 
     630              dim0.push_back(dimVertex); 
     631              SuperClassWriter::addVariable(face_faces, NC_INT, dim0); 
     632              SuperClassWriter::addAttribute("cf_role", StdString("face_face connectivity"), &face_faces); 
     633              SuperClassWriter::addAttribute("long_name", StdString("Indicates which other faces neighbor each face"), &face_faces); 
     634              SuperClassWriter::addAttribute("start_index", 0, &face_faces); 
     635              SuperClassWriter::addAttribute("flag_values", -1, &face_faces); 
     636              SuperClassWriter::addAttribute("flag_meanings", StdString("out_of_mesh"), &face_faces); 
    638637            } // domain->nvertex > 2 
    639638 
    640639            SuperClassWriter::definition_end(); 
    641640 
    642             std::vector<StdSize> start(1) ; 
    643             std::vector<StdSize> count(1) ; 
    644             if (domain->isEmpty()) 
    645              { 
    646                start[0]=0 ; 
    647                count[0]=0 ; 
    648              } 
    649              else 
    650              { 
    651                start[0]=domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
    652                count[0]=domain->zoom_ni_srv ; 
    653              } 
     641            std::vector<StdSize> startEdges(1) ; 
     642            std::vector<StdSize> countEdges(1) ; 
     643            std::vector<StdSize> startNodes(1) ; 
     644            std::vector<StdSize> countNodes(1) ; 
     645            std::vector<StdSize> startFaces(1) ; 
     646            std::vector<StdSize> countFaces(1) ; 
     647            std::vector<StdSize> startEdgeNodes(2) ; 
     648            std::vector<StdSize> countEdgeNodes(2) ; 
     649            std::vector<StdSize> startEdgeFaces(2) ; 
     650            std::vector<StdSize> countEdgeFaces(2) ; 
     651            std::vector<StdSize> startFaceConctv(2) ; 
     652            std::vector<StdSize> countFaceConctv(2) ; 
    654653 
    655654            if (!isWrittenDomain(domid)) 
     
    657656              if (domain->nvertex == 1) 
    658657              { 
    659                 SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0, &start, &count); 
    660                 SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0, &start, &count); 
     658                if (domain->isEmpty()) 
     659                 { 
     660                   startNodes[0]=0 ; 
     661                   countNodes[0]=0 ; 
     662                 } 
     663                 else 
     664                 { 
     665                   startNodes[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     666                   countNodes[0] = domain->zoom_ni_srv ; 
     667                 } 
     668 
     669                SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0, &startNodes, &countNodes); 
     670                SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0, &startNodes, &countNodes); 
    661671              } 
    662672              else if (domain->nvertex == 2) 
    663                             { 
    664                 SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0); 
    665                 SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0); 
    666                 SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0); 
    667                 SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0); 
    668                 SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes); 
    669                             } 
     673              { 
     674                if (domain->isEmpty()) 
     675                 { 
     676                  startEdges[0]=0 ; 
     677                  countEdges[0]=0 ; 
     678                  startNodes[0]=0 ; 
     679                  countNodes[0]=0 ; 
     680                  startEdgeNodes[0]=0; 
     681                  startEdgeNodes[1]=0; 
     682                  countEdgeNodes[0]=0; 
     683                  countEdgeNodes[1]=0; 
     684 
     685                 } 
     686                 else 
     687                 { 
     688                   startEdges[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     689                   countEdges[0] = domain->zoom_ni_srv ; 
     690                   startNodes[0] = domain->mesh->node_start; 
     691                   countNodes[0] = domain->mesh->node_count; 
     692                   startEdgeNodes[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     693                   startEdgeNodes[1] = 0; 
     694                   countEdgeNodes[0] = domain->zoom_ni_srv; 
     695                   countEdgeNodes[1]= 2; 
     696                 } 
     697                SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0, &startNodes, &countNodes); 
     698                SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0, &startNodes, &countNodes); 
     699                SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0, &startEdges, &countEdges); 
     700                SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0, &startEdges, &countEdges); 
     701                SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes, isCollective, 0, &startEdgeNodes, &countEdgeNodes); 
     702              } 
    670703              else 
    671704              { 
    672                 SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0); 
    673                 SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0); 
    674                 SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0); 
    675                 SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0); 
    676                 SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes); 
    677                 SuperClassWriter::writeData(domain->mesh->face_lat, face_y, isCollective, 0); 
    678                 SuperClassWriter::writeData(domain->mesh->face_lon, face_x, isCollective, 0); 
    679                 SuperClassWriter::writeData(domain->mesh->face_nodes, face_nodes); 
    680                 SuperClassWriter::writeData(domain->mesh->face_edges, face_edges); 
    681                 SuperClassWriter::writeData(domain->mesh->edge_faces, edge_faces); 
    682                 SuperClassWriter::writeData(domain->mesh->face_faces, face_faces); 
     705                if (domain->isEmpty()) 
     706                 { 
     707                   startFaces[0] = 0 ; 
     708                   countFaces[0] = 0 ; 
     709                   startNodes[0] = 0; 
     710                   countNodes[0] = 0; 
     711                   startEdges[0] = 0; 
     712                   countEdges[0] = 0; 
     713                   startEdgeFaces[0] = 0; 
     714                   startEdgeFaces[1] = 0; 
     715                   countEdgeFaces[0] = 0; 
     716                   countEdgeFaces[1] = 0; 
     717                   startFaceConctv[0] = 0; 
     718                   startFaceConctv[1] = 0; 
     719                   countFaceConctv[0] = 0; 
     720                   countFaceConctv[1] = 0; 
     721                 } 
     722                 else 
     723                 { 
     724                   startFaces[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     725                   countFaces[0] = domain->zoom_ni_srv ; 
     726                   startNodes[0] = domain->mesh->node_start; 
     727                   countNodes[0] = domain->mesh->node_count; 
     728                   startEdges[0] = domain->mesh->edge_start; 
     729                   countEdges[0] = domain->mesh->edge_count; 
     730                   startEdgeNodes[0] = domain->mesh->edge_start; 
     731                   startEdgeNodes[1] = 0; 
     732                   countEdgeNodes[0] = domain->mesh->edge_count; 
     733                   countEdgeNodes[1]= 2; 
     734                   startEdgeFaces[0] = domain->mesh->edge_start; 
     735                   startEdgeFaces[1]= 0; 
     736                   countEdgeFaces[0] = domain->mesh->edge_count; 
     737                   countEdgeFaces[1]= 2; 
     738                   startFaceConctv[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     739                   startFaceConctv[1] = 0; 
     740                   countFaceConctv[0] = domain->zoom_ni_srv; 
     741                   countFaceConctv[1] = domain->nvertex; 
     742                 } 
     743                SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0, &startNodes, &countNodes); 
     744                SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0, &startNodes, &countNodes); 
     745                SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0, &startEdges, &countEdges); 
     746                SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0, &startEdges, &countEdges); 
     747                SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes, isCollective, 0, &startEdgeNodes, &countEdgeNodes); 
     748                SuperClassWriter::writeData(domain->mesh->face_lat, face_y, isCollective, 0, &startFaces, &countFaces); 
     749                SuperClassWriter::writeData(domain->mesh->face_lon, face_x, isCollective, 0, &startFaces, &countFaces); 
     750                SuperClassWriter::writeData(domain->mesh->face_nodes, face_nodes, isCollective, 0, &startFaceConctv, &countFaceConctv); 
     751                SuperClassWriter::writeData(domain->mesh->face_edges, face_edges, isCollective, 0, &startFaceConctv, &countFaceConctv); 
     752                SuperClassWriter::writeData(domain->mesh->edge_faces, edge_faces, isCollective, 0, &startEdgeFaces, &countEdgeFaces); 
     753                SuperClassWriter::writeData(domain->mesh->face_faces, face_faces, isCollective, 0, &startFaceConctv, &countFaceConctv); 
    683754              } 
    684755              setWrittenDomain(domid); 
     
    686757            else 
    687758            { 
    688               if (domain->nvertex == 1) 
    689               { 
    690                 if ( (!domain->mesh->edgesAreWritten) && (!domain->mesh->facesAreWritten) ) 
    691                 { 
    692                   SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0); 
    693                   SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0); 
    694                 } 
    695               } 
    696759              if (domain->nvertex == 2) 
    697760              { 
    698                 if (!domain->mesh->facesAreWritten) 
    699                 { 
    700                   if (!domain->mesh->nodesAreWritten) 
    701                   { 
    702                     SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0); 
    703                     SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0); 
    704                   } 
    705                   SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0); 
    706                   SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0); 
    707                   SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes); 
    708                 } 
     761                startEdges[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     762                countEdges[0] = domain->zoom_ni_srv ; 
     763                startEdgeNodes[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     764                startEdgeNodes[1] = 0; 
     765                countEdgeNodes[0] = domain->zoom_ni_srv; 
     766                countEdgeNodes[1]= 2; 
     767                SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0, &startEdges, &countEdges); 
     768                SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0, &startEdges, &countEdges); 
     769                SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes, isCollective, 0, &startEdgeNodes, &countEdgeNodes); 
    709770              }   
    710771              if (domain->nvertex > 2) 
    711772              { 
     773 
    712774                if (!domain->mesh->edgesAreWritten) 
    713775                { 
    714                   if (!domain->mesh->nodesAreWritten) 
    715                   { 
    716                     SuperClassWriter::writeData(domain->mesh->node_lat, node_y, isCollective, 0); 
    717                     SuperClassWriter::writeData(domain->mesh->node_lon, node_x, isCollective, 0); 
    718                   } 
    719                   SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0); 
    720                   SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0); 
    721                   SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes); 
     776                  startEdges[0] = domain->mesh->edge_start; 
     777                  countEdges[0] = domain->mesh->edge_count; 
     778                  startEdgeNodes[0] = domain->mesh->edge_start; 
     779                  startEdgeNodes[1] = 0; 
     780                  countEdgeNodes[0] = domain->mesh->edge_count; 
     781                  countEdgeNodes[1]= 2; 
     782                  SuperClassWriter::writeData(domain->mesh->edge_lat, edge_y, isCollective, 0, &startEdges, &countEdges); 
     783                  SuperClassWriter::writeData(domain->mesh->edge_lon, edge_x, isCollective, 0, &startEdges, &countEdges); 
     784                  SuperClassWriter::writeData(domain->mesh->edge_nodes, edge_nodes, isCollective, 0, &startEdgeNodes, &countEdgeNodes); 
    722785                } 
    723                 SuperClassWriter::writeData(domain->mesh->face_lat, face_y, isCollective, 0); 
    724                 SuperClassWriter::writeData(domain->mesh->face_lon, face_x, isCollective, 0); 
    725                 SuperClassWriter::writeData(domain->mesh->face_nodes, face_nodes); 
    726                 SuperClassWriter::writeData(domain->mesh->face_edges, face_edges); 
    727                 SuperClassWriter::writeData(domain->mesh->edge_faces, edge_faces); 
    728                 SuperClassWriter::writeData(domain->mesh->face_faces, face_faces); 
     786                startFaces[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     787                countFaces[0] = domain->zoom_ni_srv; 
     788                startEdgeFaces[0] = domain->mesh->edge_start; 
     789                startEdgeFaces[1]= 0; 
     790                countEdgeFaces[0] = domain->mesh->edge_count; 
     791                countEdgeFaces[1]= 2; 
     792                startFaceConctv[0] = domain->zoom_ibegin_srv-domain->global_zoom_ibegin; 
     793                startFaceConctv[1] = 0; 
     794                countFaceConctv[0] = domain->zoom_ni_srv; 
     795                countFaceConctv[1]= domain->nvertex; 
     796                SuperClassWriter::writeData(domain->mesh->face_lat, face_y, isCollective, 0, &startFaces, &countFaces); 
     797                SuperClassWriter::writeData(domain->mesh->face_lon, face_x, isCollective, 0, &startFaces, &countFaces); 
     798                SuperClassWriter::writeData(domain->mesh->face_nodes, face_nodes, isCollective, 0, &startFaceConctv, &countFaceConctv); 
     799                SuperClassWriter::writeData(domain->mesh->face_edges, face_edges, isCollective, 0, &startFaceConctv, &countFaceConctv); 
     800                SuperClassWriter::writeData(domain->mesh->edge_faces, edge_faces, isCollective, 0, &startEdgeFaces, &countEdgeFaces); 
     801                SuperClassWriter::writeData(domain->mesh->face_faces, face_faces, isCollective, 0, &startFaceConctv, &countFaceConctv); 
    729802              } 
    730803            }// isWrittenDomain 
     
    754827          msg.append(context->getId()); msg.append("\n"); 
    755828          msg.append(e.what()); 
    756           ERROR("CNc4DataOutput::writeUnstructuredDomain(CDomain* domain)", << msg); 
     829          ERROR("CNc4DataOutput::writeUnstructuredDomainUgrid(CDomain* domain)", << msg); 
    757830        } 
    758831 
Note: See TracChangeset for help on using the changeset viewer.