Ignore:
Timestamp:
06/10/15 10:39:11 (9 years ago)
Author:
rlacroix
Message:

Improve CF compliance: Add a new domain attribute "area".

Fixes ticket #68.

File:
1 edited

Legend:

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

    r609 r611  
    9898 
    9999         string lonid,latid,bounds_lonid,bounds_latid ; 
     100         string areaId = "area" + appendDomid; 
    100101/* 
    101102         StdString lonid_loc = (server->intraCommSize > 1) 
     
    209210                 //SuperClassWriter::setDefaultValue(maskid, &dvm); 
    210211 
     212                 if (domain->hasArea) 
     213                 { 
     214                   SuperClassWriter::addVariable(areaId, NC_FLOAT, dim0); 
     215                   SuperClassWriter::addAttribute("units", StdString("m2"), &areaId); 
     216                 } 
     217 
    211218                 SuperClassWriter::definition_end(); 
    212219 
     
    224231                     break; 
    225232                 } 
     233 
     234                 if (domain->hasArea) 
     235                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0); 
     236 
    226237                 SuperClassWriter::definition_start(); 
    227238 
     
    232243                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni.getValue()); 
    233244                 SuperClassWriter::addDimension(dimYid, domain->zoom_nj.getValue()); 
    234  
    235245 
    236246                 switch (domain->type) 
     
    253263                     break; 
    254264                 } 
     265 
     266                 if (domain->hasArea) 
     267                 { 
     268                   dim0.clear(); 
     269                   dim0.push_back(dimYid); dim0.push_back(dimXid); 
     270                   SuperClassWriter::addVariable(areaId, NC_FLOAT, dim0); 
     271                   SuperClassWriter::addAttribute("units", StdString("m2"), &areaId); 
     272                   dim0.clear(); 
     273                 } 
     274 
    255275                 this->writeAxisAttributes 
    256276                    (lonid, "X", "longitude", "Longitude", "degrees_east", domid); 
     
    258278                    (latid, "Y", "latitude", "Latitude", "degrees_north", domid); 
    259279 
    260  
    261280                 SuperClassWriter::definition_end(); 
     281 
    262282                 switch (domain->type) 
    263283                 { 
     
    268288                     if (domain->isEmpty()) 
    269289                     { 
    270                        start[0]=0 ; start [1]=0 ; 
     290                       start[0]=0 ; start[1]=0 ; 
    271291                       count[0]=0 ; count[1]=0 ; 
    272292                     } 
     
    306326                   } 
    307327                 } 
     328 
     329                 if (domain->hasArea) 
     330                 { 
     331                   std::vector<StdSize> start(2); 
     332                   std::vector<StdSize> count(2); 
     333 
     334                   if (domain->isEmpty()) 
     335                   { 
     336                     start[0] = 0; start[1] = 0; 
     337                     count[0] = 0; count[1] = 0; 
     338                   } 
     339                   else 
     340                   { 
     341                     start[1] = domain->zoom_ibegin_srv - domain->zoom_ibegin.getValue(); 
     342                     start[0] = domain->zoom_jbegin_srv - domain->zoom_jbegin.getValue(); 
     343                     count[1] = domain->zoom_ni_srv; 
     344                     count[0] = domain->zoom_nj_srv; 
     345                   } 
     346 
     347                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0, &start, &count); 
     348                 } 
     349 
    308350                 SuperClassWriter::definition_start(); 
     351 
    309352                 break; 
    310353              } 
     
    349392 
    350393         string lonid,latid,bounds_lonid,bounds_latid ; 
     394         string areaId = "area" + appendDomid; 
    351395 
    352396         try 
     
    385429                 dim0.push_back(dimXid); 
    386430 
     431                 if (domain->hasArea) 
     432                 { 
     433                   SuperClassWriter::addVariable(areaId, NC_FLOAT, dim0); 
     434                   SuperClassWriter::addAttribute("units", StdString("m2"), &areaId); 
     435                 } 
     436 
    387437                 SuperClassWriter::definition_end(); 
    388438 
     
    395445                   SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0); 
    396446                 } 
     447 
     448                 if (domain->hasArea) 
     449                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0); 
     450 
    397451                 SuperClassWriter::definition_start(); 
    398452                 break ; 
     
    424478                 } 
    425479 
     480                 if (domain->hasArea) 
     481                 { 
     482                   dim0.clear(); 
     483                   dim0.push_back(dimXid); 
     484                   SuperClassWriter::addVariable(areaId, NC_FLOAT, dim0); 
     485                   SuperClassWriter::addAttribute("units", StdString("m2"), &areaId); 
     486                 } 
     487 
    426488                 SuperClassWriter::definition_end(); 
    427489 
     
    454516                 } 
    455517 
     518                 if (domain->hasArea) 
     519                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0, &start, &count); 
    456520 
    457521                 SuperClassWriter::definition_start(); 
     
    740804              SuperClassWriter::addAttribute("interval_write", duration.toString(), &fieldid); 
    741805           } 
     806 
     807           if (domain->hasArea) 
     808             SuperClassWriter::addAttribute("cell_measures", "area: area" + appendDomid, &fieldid); 
    742809 
    743810           if (!field->default_value.isEmpty()) 
Note: See TracChangeset for help on using the changeset viewer.