Ignore:
Timestamp:
01/10/18 11:37:16 (6 years ago)
Author:
ymipsl
Message:

Add lon_name and lat_name domain attribute to set a specific name to the longitude and latitude coordinate axis in the netcdf file

YM

Location:
XIOS/dev/XIOS_DEV_CMIP6/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/config/domain_attribute.conf

    r1249 r1391  
    33DECLARE_ATTRIBUTE(StdString       , standard_name) 
    44DECLARE_ATTRIBUTE(StdString       , long_name) 
     5DECLARE_ATTRIBUTE(StdString       , lon_name) 
     6DECLARE_ATTRIBUTE(StdString       , lat_name) 
    57 
    68/* GLOBAL */ 
  • XIOS/dev/XIOS_DEV_CMIP6/src/io/nc4_data_output.cpp

    r1390 r1391  
    5353      void CNc4DataOutput::writeDomain_(CDomain* domain) 
    5454      { 
     55        StdString lonName,latName ; 
     56          
    5557        domain->computeWrittenIndex(); 
    5658        domain->computeWrittenCompressedIndex(comm_file); 
     
    9496         { 
    9597           case CDomain::type_attr::curvilinear : 
     98 
     99             if (domain->lon_name.isEmpty()) lonName = "nav_lon"; 
     100             else lonName = domain->lon_name; 
     101 
     102             if (domain->lat_name.isEmpty()) latName = "nav_lat"; 
     103             else latName = domain->lat_name; 
     104 
    96105             dimXid     = StdString("x").append(appendDomid); 
    97106             dimYid     = StdString("y").append(appendDomid); 
    98107             break ; 
     108 
    99109           case CDomain::type_attr::rectilinear : 
    100              dimXid     = StdString("lon").append(appendDomid); 
    101              dimYid     = StdString("lat").append(appendDomid); 
     110 
     111             if (domain->lon_name.isEmpty()) lonName = "lon"; 
     112             else lonName = domain->lon_name; 
     113 
     114             if (domain->lat_name.isEmpty()) latName = "lat"; 
     115             else latName = domain->lat_name; 
     116              
     117             dimXid     = lonName.append(appendDomid); 
     118             dimYid     = latName.append(appendDomid); 
    102119             break; 
    103120         } 
     
    195212                   case CDomain::type_attr::curvilinear : 
    196213                     dim0.push_back(dimYid); dim0.push_back(dimXid); 
    197                      lonid = StdString("nav_lon").append(appendDomid); 
    198                      latid = StdString("nav_lat").append(appendDomid); 
     214                     lonid = lonName.append(appendDomid); 
     215                     latid = latName.append(appendDomid); 
    199216                     break ; 
    200217                   case CDomain::type_attr::rectilinear : 
    201                      lonid = StdString("lon").append(appendDomid); 
    202                      latid = StdString("lat").append(appendDomid); 
     218                     lonid = lonName.append(appendDomid); 
     219                     latid = latName.append(appendDomid); 
    203220                     dim0.push_back(dimYid); 
    204221                     dim1.push_back(dimXid); 
     
    206223                 } 
    207224 
    208                  bounds_lonid = StdString("bounds_lon").append(appendDomid); 
    209                  bounds_latid = StdString("bounds_lat").append(appendDomid); 
     225                 bounds_lonid = "bounds_"+lonName+appendDomid; 
     226                 bounds_latid = "bounds_"+latName+appendDomid; 
    210227 
    211228                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni); 
     
    338355                     case CDomain::type_attr::curvilinear : 
    339356                       dim0.push_back(dimYid); dim0.push_back(dimXid); 
    340                        lonid = StdString("nav_lon").append(appendDomid); 
    341                        latid = StdString("nav_lat").append(appendDomid); 
     357                       lonid = lonName.append(appendDomid); 
     358                       latid = latName.append(appendDomid); 
    342359                       SuperClassWriter::addVariable(latid, typePrec, dim0); 
    343360                       SuperClassWriter::addVariable(lonid, typePrec, dim0); 
     
    347364                       dim0.push_back(dimYid); 
    348365                       dim1.push_back(dimXid); 
    349                        lonid = StdString("lon").append(appendDomid); 
    350                        latid = StdString("lat").append(appendDomid); 
     366                       lonid = lonName.append(appendDomid); 
     367                       latid = latName.append(appendDomid); 
    351368                       SuperClassWriter::addVariable(latid, typePrec, dim0); 
    352369                       SuperClassWriter::addVariable(lonid, typePrec, dim1); 
     
    354371                   } 
    355372 
    356                    bounds_lonid = StdString("bounds_lon").append(appendDomid); 
    357                    bounds_latid = StdString("bounds_lat").append(appendDomid); 
     373                   bounds_lonid = "bounds_"+lonName+appendDomid; 
     374                   bounds_latid = "bounds_"+latName+appendDomid; 
    358375 
    359376                   this->writeAxisAttributes 
     
    934951         StdString appendDomid  = (singleDomain) ? "" : "_"+domid ; 
    935952 
     953         StdString lonName,latName ; 
     954         if (domain->lon_name.isEmpty()) lonName = "lon"; 
     955         else lonName = domain->lon_name; 
     956 
     957         if (domain->lat_name.isEmpty()) latName = "lat"; 
     958         else latName = domain->lat_name; 
     959 
    936960         StdString dimXid = StdString("cell").append(appendDomid); 
    937961         StdString dimVertId = StdString("nvertex").append(appendDomid); 
     
    10181042                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni); 
    10191043 
    1020                  lonid = StdString("lon").append(appendDomid); 
    1021                  latid = StdString("lat").append(appendDomid); 
    1022                  bounds_lonid = StdString("bounds_lon").append(appendDomid); 
    1023                  bounds_latid = StdString("bounds_lat").append(appendDomid); 
     1044                 lonid = lonName.append(appendDomid); 
     1045                 latid = latName.append(appendDomid); 
     1046                 bounds_lonid = "bounds_"+lonName+appendDomid; 
     1047                 bounds_latid = "bounds_"+latName+appendDomid; 
    10241048                 if (domain->hasLonLat) 
    10251049                 { 
     
    10721096              case (ONE_FILE) : 
    10731097              { 
    1074                  lonid = StdString("lon").append(appendDomid); 
    1075                  latid = StdString("lat").append(appendDomid); 
    1076                  bounds_lonid = StdString("bounds_lon").append(appendDomid); 
    1077                  bounds_latid = StdString("bounds_lat").append(appendDomid); 
     1098                 lonid = lonName.append(appendDomid); 
     1099                 latid = latName.append(appendDomid); 
     1100                 bounds_lonid = "bounds_"+lonName+appendDomid; 
     1101                 bounds_latid = "bounds_"+latName+appendDomid; 
     1102 
    10781103                 dim0.push_back(dimXid); 
    10791104                 SuperClassWriter::addDimension(dimXid, domain->ni_glo); 
     
    17031728            StdString domId = domain->getDomainOutputName(); 
    17041729            StdString appendDomId  = singleDomain ? "" : "_" + domId ; 
    1705  
     1730            StdString lonName,latName ; 
     1731 
     1732            if (domain->lon_name.isEmpty()) lonName = "lon"; 
     1733            else lonName = domain->lon_name; 
     1734 
     1735            if (domain->lat_name.isEmpty()) latName = "lat"; 
     1736            else latName = domain->lat_name; 
     1737         
    17061738            if (compressedOutput && domain->isCompressible() && domain->type != CDomain::type_attr::unstructured) 
    17071739            { 
     
    17201752                  dimIdList.push_back(dimYid); 
    17211753                } 
    1722                 dimCoordList.push_back(StdString("nav_lon").append(appendDomId)); 
    1723                 dimCoordList.push_back(StdString("nav_lat").append(appendDomId)); 
     1754                dimCoordList.push_back(lonName.append(appendDomId)); 
     1755                dimCoordList.push_back(latName.append(appendDomId)); 
    17241756              break ; 
    17251757              case CDomain::type_attr::rectilinear: 
    17261758                if (!compressedOutput || !domain->isCompressible()) 
    17271759                { 
    1728                   dimXid     = StdString("lon").append(appendDomId); 
     1760                  dimXid     = lonName.append(appendDomId); 
    17291761                  dimIdList.push_back(dimXid); 
    1730                   dimYid     = StdString("lat").append(appendDomId); 
     1762                  dimYid     = latName.append(appendDomId); 
    17311763                  dimIdList.push_back(dimYid); 
    17321764                } 
     
    17381770                  dimXid     = StdString("cell").append(appendDomId); 
    17391771                  dimIdList.push_back(dimXid); 
    1740                   dimCoordList.push_back(StdString("lon").append(appendDomId)); 
    1741                   dimCoordList.push_back(StdString("lat").append(appendDomId)); 
     1772                  dimCoordList.push_back(lonName.append(appendDomId)); 
     1773                  dimCoordList.push_back(latName.append(appendDomId)); 
    17421774                } 
    17431775                else 
Note: See TracChangeset for help on using the changeset viewer.