Changeset 617 for XIOS


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

Output bounds for regular and curvilinear domains.

It was done only for unstructured domains.

Location:
XIOS
Files:
2 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 
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r616 r617  
    9696         } 
    9797 
     98         StdString dimVertId = StdString("nvertex").append(appendDomid); 
     99 
    98100         string lonid,latid,bounds_lonid,bounds_latid ; 
    99101         string areaId = "area" + appendDomid; 
     
    136138                 } 
    137139 
     140                 bounds_lonid = StdString("bounds_lon").append(appendDomid); 
     141                 bounds_latid = StdString("bounds_lat").append(appendDomid); 
     142 
    138143                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni_srv); 
    139144                 SuperClassWriter::addDimension(dimYid, domain->zoom_nj_srv); 
     145 
     146                 if (domain->hasBounds) 
     147                   SuperClassWriter::addDimension(dimVertId, domain->nvertex); 
    140148 
    141149                 if (server->intraCommSize > 1) 
     
    169177                 this->writeAxisAttributes(lonid, isRegularDomain ? "X" : "", "longitude", "Longitude", "degrees_east", domid); 
    170178                 this->writeAxisAttributes(latid, isRegularDomain ? "Y" : "", "latitude", "Latitude", "degrees_north", domid); 
     179 
     180                 if (domain->hasBounds) 
     181                 { 
     182                   SuperClassWriter::addAttribute("bounds", bounds_lonid, &lonid); 
     183                   SuperClassWriter::addAttribute("bounds", bounds_latid, &latid); 
     184 
     185                   dim0.clear(); 
     186                   dim0.push_back(dimYid); 
     187                   dim0.push_back(dimXid); 
     188                   dim0.push_back(dimVertId); 
     189                   SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 
     190                   SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 
     191                 } 
    171192 
    172193                 dim0.clear(); 
     
    212233                 } 
    213234 
     235                 if (domain->hasBounds) 
     236                 { 
     237                   SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0); 
     238                   SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0); 
     239                 } 
     240 
    214241                 if (domain->hasArea) 
    215242                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0); 
     
    223250                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni.getValue()); 
    224251                 SuperClassWriter::addDimension(dimYid, domain->zoom_nj.getValue()); 
     252 
     253                 if (domain->hasBounds) 
     254                   SuperClassWriter::addDimension(dimVertId, domain->nvertex); 
    225255 
    226256                 switch (domain->type) 
     
    244274                 } 
    245275 
     276                 bounds_lonid = StdString("bounds_lon").append(appendDomid); 
     277                 bounds_latid = StdString("bounds_lat").append(appendDomid); 
     278 
    246279                 if (domain->hasArea) 
    247280                 { 
     
    258291                 this->writeAxisAttributes 
    259292                    (latid, isRegularDomain ? "Y" : "", "latitude", "Latitude", "degrees_north", domid); 
     293 
     294                 if (domain->hasBounds) 
     295                 { 
     296                   SuperClassWriter::addAttribute("bounds", bounds_lonid, &lonid); 
     297                   SuperClassWriter::addAttribute("bounds", bounds_latid, &latid); 
     298 
     299                   dim0.clear(); 
     300                   dim0.push_back(dimYid); 
     301                   dim0.push_back(dimXid); 
     302                   dim0.push_back(dimVertId); 
     303                   SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 
     304                   SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 
     305                 } 
    260306 
    261307                 SuperClassWriter::definition_end(); 
     
    306352                     break; 
    307353                   } 
     354                 } 
     355 
     356                 if (domain->hasBounds) 
     357                 { 
     358                   std::vector<StdSize> start(3); 
     359                   std::vector<StdSize> count(3); 
     360                   if (domain->isEmpty()) 
     361                   { 
     362                     start[2] = start[1] = start[0] = 0; 
     363                     count[2] = count[1] = count[0] = 0; 
     364                   } 
     365                   else 
     366                   { 
     367                     start[2] = 0; 
     368                     start[1] = domain->zoom_ibegin_srv - domain->zoom_ibegin.getValue(); 
     369                     start[0] = domain->zoom_jbegin_srv - domain->zoom_jbegin.getValue(); 
     370                     count[2] = domain->nvertex; 
     371                     count[1] = domain->zoom_ni_srv; 
     372                     count[0] = domain->zoom_nj_srv; 
     373                   } 
     374                    
     375                   SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0, &start, &count); 
     376                   SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0, &start, &count); 
    308377                 } 
    309378 
Note: See TracChangeset for help on using the changeset viewer.