Ignore:
Timestamp:
10/06/22 12:50:04 (21 months ago)
Author:
jderouillat
Message:

Backport commits [1977, 2181, 2200-2202, 2250, 2252] related to UGRID in XIOS3 beta

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/branches/xios-3.0-beta/src/node/file.cpp

    r2400 r2417  
    863863     std::vector<int> domainNvertices; 
    864864     std::vector<StdString> domainNames; 
     865     std::map<string, tuple<set<CDomain*>,set<CDomain*>,set<CDomain*>>> registeredDomains ; 
    865866 
    866867     for (int i = 0; i < size; ++i) 
     
    905906         domainNvertices.push_back(nvertex); 
    906907       } 
     908 
     909       if (nvertex==1)  std::get<0>(registeredDomains[domainName]).insert(domain[0]) ; 
     910       else if (nvertex==2) std::get<1>(registeredDomains[domainName]).insert(domain[0]) ; 
     911       else  std::get<2>(registeredDomains[domainName]).insert(domain[0]) ; 
     912     } 
     913 
     914     for(auto& it:registeredDomains) 
     915     { 
     916       list<CDomain*> domains ; 
     917       string domainName=it.first ; 
     918 
     919       for(auto& domain : std::get<0>(it.second) ) domains.push_back(domain) ; 
     920       for(auto& domain : std::get<1>(it.second) ) domains.push_back(domain) ; 
     921       for(auto& domain : std::get<2>(it.second) ) domains.push_back(domain) ; 
     922        
     923       // for each component of a given mesh (i.e. domains with same name but different number of vertices) 
     924       // associate the UGRID mesh in increasing order 
     925       for(auto& domain : domains ) 
     926       { 
     927         //domain-> computeWrittenIndex(); 
     928         //CArray<int, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
     929         CArray<int, 1> indexToWrite = domain->getLocalView(CElementView::WORKFLOW)->getIndex(); 
     930         int nbWritten = indexToWrite.numElements(); 
     931 
     932         CArray<double,1> writtenLat, writtenLon; 
     933         CArray<double,2> writtenBndsLat, writtenBndsLon; 
     934 
     935         writtenLat.resize(nbWritten); 
     936         writtenLon.resize(nbWritten); 
     937         for (int idx = 0; idx < nbWritten; ++idx) 
     938         { 
     939           writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
     940           writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     941         } 
     942     
     943         int nvertex = domain->nvertex, idx; 
     944        if (nvertex>1) 
     945         { 
     946           writtenBndsLat.resize(nvertex, nbWritten); 
     947           writtenBndsLon.resize(nvertex, nbWritten); 
     948           CArray<double,2>& boundslat = domain->bounds_latvalue; 
     949           CArray<double,2>& boundslon = domain->bounds_lonvalue; 
     950           for (idx = 0; idx < nbWritten; ++idx) 
     951             for (int nv = 0; nv < nvertex; ++nv) 
     952             { 
     953                writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); 
     954                writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); 
     955             } 
     956         } 
     957         domain->assignMesh(domainName, domain->nvertex); 
     958         //CContextServer* server=CContext::getCurrent()->server ; 
     959         //domain->mesh->createMeshEpsilon(server->intraComm, writtenLon, writtenLat, writtenBndsLon, writtenBndsLat); 
     960         MPI_Comm intraComm =CContext::getCurrent()->getIntraComm() ; 
     961         domain->mesh->createMeshEpsilon(intraComm, writtenLon, writtenLat, writtenBndsLon, writtenBndsLat); 
     962       } 
     963 
    907964     } 
    908965   } 
Note: See TracChangeset for help on using the changeset viewer.