Changeset 617 for XIOS/branchs/xios-1.0


Ignore:
Timestamp:
06/11/15 15:25:47 (9 years ago)
Author:
rlacroix
Message:

Output bounds for regular and curvilinear domains.

It was done only for unstructured domains.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp

    r616 r617  
    9494             break; 
    9595         } 
     96 
     97         StdString dimVertId = StdString("nvertex").append(appendDomid); 
    9698 
    9799         string lonid,latid,bounds_lonid,bounds_latid ; 
     
    135137                 } 
    136138 
     139                 bounds_lonid = StdString("bounds_lon").append(appendDomid); 
     140                 bounds_latid = StdString("bounds_lat").append(appendDomid); 
     141 
    137142                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni_srv); 
    138143                 SuperClassWriter::addDimension(dimYid, domain->zoom_nj_srv); 
     144 
     145                 if (domain->hasBounds) 
     146                   SuperClassWriter::addDimension(dimVertId, domain->nvertex); 
    139147 
    140148                 if (server->intraCommSize > 1) 
     
    168176                 this->writeAxisAttributes(lonid, isRegularDomain ? "X" : "", "longitude", "Longitude", "degrees_east", domid); 
    169177                 this->writeAxisAttributes(latid, isRegularDomain ? "Y" : "", "latitude", "Latitude", "degrees_north", domid); 
     178 
     179                 if (domain->hasBounds) 
     180                 { 
     181                   SuperClassWriter::addAttribute("bounds", bounds_lonid, &lonid); 
     182                   SuperClassWriter::addAttribute("bounds", bounds_latid, &latid); 
     183 
     184                   dim0.clear(); 
     185                   dim0.push_back(dimYid); 
     186                   dim0.push_back(dimXid); 
     187                   dim0.push_back(dimVertId); 
     188                   SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 
     189                   SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 
     190                 } 
    170191 
    171192                 dim0.clear(); 
     
    211232                 } 
    212233 
     234                 if (domain->hasBounds) 
     235                 { 
     236                   SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0); 
     237                   SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0); 
     238                 } 
     239 
    213240                 if (domain->hasArea) 
    214241                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0); 
     
    222249                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni.getValue()); 
    223250                 SuperClassWriter::addDimension(dimYid, domain->zoom_nj.getValue()); 
     251 
     252                 if (domain->hasBounds) 
     253                   SuperClassWriter::addDimension(dimVertId, domain->nvertex); 
    224254 
    225255                 switch (domain->type) 
     
    243273                 } 
    244274 
     275                 bounds_lonid = StdString("bounds_lon").append(appendDomid); 
     276                 bounds_latid = StdString("bounds_lat").append(appendDomid); 
     277 
    245278                 if (domain->hasArea) 
    246279                 { 
     
    257290                 this->writeAxisAttributes 
    258291                    (latid, isRegularDomain ? "Y" : "", "latitude", "Latitude", "degrees_north", domid); 
     292 
     293                 if (domain->hasBounds) 
     294                 { 
     295                   SuperClassWriter::addAttribute("bounds", bounds_lonid, &lonid); 
     296                   SuperClassWriter::addAttribute("bounds", bounds_latid, &latid); 
     297 
     298                   dim0.clear(); 
     299                   dim0.push_back(dimYid); 
     300                   dim0.push_back(dimXid); 
     301                   dim0.push_back(dimVertId); 
     302                   SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 
     303                   SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 
     304                 } 
    259305 
    260306                 SuperClassWriter::definition_end(); 
     
    305351                     break; 
    306352                   } 
     353                 } 
     354 
     355                 if (domain->hasBounds) 
     356                 { 
     357                   std::vector<StdSize> start(3); 
     358                   std::vector<StdSize> count(3); 
     359                   if (domain->isEmpty()) 
     360                   { 
     361                     start[2] = start[1] = start[0] = 0; 
     362                     count[2] = count[1] = count[0] = 0; 
     363                   } 
     364                   else 
     365                   { 
     366                     start[2] = 0; 
     367                     start[1] = domain->zoom_ibegin_srv - domain->zoom_ibegin.getValue(); 
     368                     start[0] = domain->zoom_jbegin_srv - domain->zoom_jbegin.getValue(); 
     369                     count[2] = domain->nvertex; 
     370                     count[1] = domain->zoom_ni_srv; 
     371                     count[0] = domain->zoom_nj_srv; 
     372                   } 
     373 
     374                   SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0, &start, &count); 
     375                   SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0, &start, &count); 
    307376                 } 
    308377 
Note: See TracChangeset for help on using the changeset viewer.