Changeset 2250 for XIOS/trunk/src/node


Ignore:
Timestamp:
10/25/21 14:34:40 (3 years ago)
Author:
ymipsl
Message:

Fix issue for Ugrid convention output.

YM

Location:
XIOS/trunk/src/node
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/file.cpp

    r2200 r2250  
    876876     std::vector<int> domainNvertices; 
    877877     std::vector<StdString> domainNames; 
    878      std::map<string, tuple<CDomain*,CDomain*,CDomain*>> registeredDomains ; 
     878     std::map<string, tuple<set<CDomain*>,set<CDomain*>,set<CDomain*>>> registeredDomains ; 
    879879 
    880880     for (int i = 0; i < size; ++i) 
     
    920920       } 
    921921 
    922        if (nvertex==1)  std::get<0>(registeredDomains[domainName])=domain[0] ; 
    923        else if (nvertex==2) std::get<1>(registeredDomains[domainName])=domain[0] ; 
    924        else  std::get<2>(registeredDomains[domainName])=domain[0] ; 
     922       if (nvertex==1)  std::get<0>(registeredDomains[domainName]).insert(domain[0]) ; 
     923       else if (nvertex==2) std::get<1>(registeredDomains[domainName]).insert(domain[0]) ; 
     924       else  std::get<2>(registeredDomains[domainName]).insert(domain[0]) ; 
    925925     } 
    926926 
     
    930930       string domainName=it.first ; 
    931931 
    932        if (std::get<0>(it.second)!=nullptr) domains.push_back(std::get<0>(it.second)) ; 
    933        if (std::get<1>(it.second)!=nullptr) domains.push_back(std::get<1>(it.second)) ;  
    934        if (std::get<2>(it.second)!=nullptr) domains.push_back(std::get<2>(it.second)) ;  
     932       for(auto& domain : std::get<0>(it.second) ) domains.push_back(domain) ; 
     933       for(auto& domain : std::get<1>(it.second) ) domains.push_back(domain) ; 
     934       for(auto& domain : std::get<2>(it.second) ) domains.push_back(domain) ; 
    935935        
    936936       // for each component of a given mesh (i.e. domains with same name but different number of vertices) 
  • XIOS/trunk/src/node/mesh.cpp

    r2200 r2250  
    427427    if (nvertex == 1) 
    428428    { 
     429      if (nodesAreWritten) return ; 
     430 
    429431      nbNodes_ = lonvalue.numElements(); 
    430432      node_lon.resize(nbNodes_); 
     
    449451      for (size_t nn = 0; nn < nbNodes_; ++nn) 
    450452      { 
     453        cout<<"MESH : "<<"node inserted : ("<< lonvalue(nn)<<","<< latvalue(nn)<<") index glo "<<nodeStart + nn<<" : hash =>   " ; 
    451454        hashValues = CMesh::createHashes(lonvalue(nn), latvalue(nn)); 
    452455        for (size_t nh = 0; nh < 4; ++nh) 
    453456        { 
    454           nodeHash2IdxGlo[hashValues[nh]].push_back(nodeStart + nn);  
    455         } 
     457          nodeHash2IdxGlo[hashValues[nh]].push_back(nodeStart + nn); 
     458          cout<<hashValues[nh]<<"    "; 
     459        } 
     460        cout<<endl ; 
    456461      } 
    457462      pNodeGlobalIndex = new CClientClientDHTSizet (nodeHash2IdxGlo, comm); 
     
    462467    else if (nvertex == 2) 
    463468    { 
     469      if (edgesAreWritten) return ; 
     470 
    464471      nbEdges_ = bounds_lon.shape()[1]; 
    465472      edge_lon.resize(nbEdges_); 
     
    508515        for (int ne = 0; ne < nbEdges_; ++ne) 
    509516        { 
     517          cout<<"MESH : "<<"insert edge " ; 
    510518          for (int nv = 0; nv < nvertex; ++nv) 
    511519          { 
     
    524532            else 
    525533              nodeIdxGlo2 = it->second[0]; 
     534            
     535            cout<<"("<<bounds_lon(nv, ne)<<","<<bounds_lat(nv, ne)<<")" ; 
    526536          } 
    527537          size_t edgeIdxGlo = nbEdgesAccum + ne; 
    528538          edgeHash2IdxGlo[ hashPairOrdered(nodeIdxGlo1, nodeIdxGlo2) ].push_back(edgeIdxGlo); 
     539          cout<<"  nodes Id : "<<nodeIdxGlo1<<"&"<<nodeIdxGlo2<<" ; edge Id : "<<edgeIdxGlo<<" with hash : "<<hashPairOrdered(nodeIdxGlo1, nodeIdxGlo2)<<endl ; 
    529540        } 
    530541      } // nodesAreWritten 
     
    689700    else // nvertex > 2 
    690701    { 
     702      if (facesAreWritten) return ; 
     703 
    691704      nbFaces_ = bounds_lon.shape()[1]; 
    692705      face_lon.resize(nbFaces_); 
     
    702715      MPI_Scan(&nbFacesOnProc, &nbFacesAccum, 1, MPI_UNSIGNED_LONG, MPI_SUM, comm); 
    703716      nbFacesAccum -= nbFaces_; 
     717      cout<<bounds_lon<<endl ; 
     718      cout<<bounds_lat<<endl ; 
    704719 
    705720      // Case (1): edges have been previously generated 
     
    722737        CClientClientDHTSizet::Index2VectorInfoTypeMap::iterator it1, it2; 
    723738        CArray<size_t,1> edgeHashList(nbFaces_*nvertex); 
     739 
    724740        size_t nEdge = 0; 
    725741        for (int nf = 0; nf < nbFaces_; ++nf) 
     
    784800              size_t faceIdxGlo = nbFacesAccum + nf; 
    785801              size_t edgeHash = hashPairOrdered(it1->second[0], it2->second[0]); 
     802              cout<<"MESH : "<<"find edge : ("<<bounds_lon(nv1,nf)<<","<<bounds_lat(nv1,nf)<<")&("<<bounds_lon(nv2,nf)<<","<<bounds_lat(nv2,nf) 
     803                  <<") ;  edgeHash "<<edgeHash<<" with node index : "<<it1->second[0]<<" & "<<it2->second[0]<<endl ; 
    786804              itEdgeHash = edgeHash2IdxGlo.find(edgeHash); 
    787805              size_t edgeIdxGlo = itEdgeHash->second[0]; 
     
    13081326        } 
    13091327 
    1310 //        CDHTAutoIndexing dhtNodeIdxGlo = CDHTAutoIndexing(nodeIdx2Idx, comm); 
     1328        //        CDHTAutoIndexing dhtNodeIdxGlo = CDHTAutoIndexing(nodeIdx2Idx, comm); 
    13111329        // CDHTAutoIndexing will not give consistent node numbering for varying number of procs. => 
    13121330        // Solution: global node indexing by hand. 
     
    13511369        // (3.3) Saving node data: node_lon, node_lat, and face_nodes 
    13521370        // Generating edgeHash2Info = <hash, <idx, rank>> and edgeHashList 
    1353 //        nbNodesGlo = dhtNodeIdxGlo.getNbIndexesGlobal(); 
    1354 //        node_count = dhtNodeIdxGlo.getIndexCount(); 
    1355 //        node_start = dhtNodeIdxGlo.getIndexStart(); 
     1371         
     1372        //        nbNodesGlo = dhtNodeIdxGlo.getNbIndexesGlobal(); 
     1373        //        node_count = dhtNodeIdxGlo.getIndexCount(); 
     1374        //        node_start = dhtNodeIdxGlo.getIndexStart(); 
    13561375        node_lon.resize(node_count); 
    13571376        node_lat.resize(node_count); 
     
    14821501        // (3.5) Saving variables: edge_lon, edge_lat, face_edges 
    14831502        // Creating map edgeIdxGlo2Face <idxGlo, face> 
    1484 //        nbEdgesGlo = dhtEdgeIdxGlo.getNbIndexesGlobal(); 
    1485 //        edge_count = dhtEdgeIdxGlo.getIndexCount(); 
    1486 //        edge_start = dhtEdgeIdxGlo.getIndexStart(); 
     1503        //        nbEdgesGlo = dhtEdgeIdxGlo.getNbIndexesGlobal(); 
     1504        //        edge_count = dhtEdgeIdxGlo.getIndexCount(); 
     1505        //        edge_start = dhtEdgeIdxGlo.getIndexStart(); 
    14871506 
    14881507        edge_lon.resize(edge_count); 
Note: See TracChangeset for help on using the changeset viewer.