Changeset 734 for XIOS/trunk/src


Ignore:
Timestamp:
10/13/15 15:51:17 (9 years ago)
Author:
mhnguyen
Message:

Correcting a bug concerning the range of longitude and latitude of auto-generated domain

+) Modify range of auto-generated longitude and latitude
+) Update test_remap

Test
+) On Curie
+) auto-generating domain source and domain dest
+) result is correct

Location:
XIOS/trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/domain.cpp

    r731 r734  
    338338     double latRange = lat_end - lat_start; 
    339339 
    340      double lonStep = lonRange/double(ni_glo.getValue()); 
    341      double latStep = latRange/double(nj_glo.getValue()); 
     340     double lonStep = (1 == ni_glo.getValue()) ? lonRange : lonRange/double(ni_glo.getValue()-1); 
     341     double latStep = (1 == nj_glo.getValue()) ? latRange : latRange/double(nj_glo.getValue()-1); 
    342342 
    343343     // Assign lon value 
     
    423423         int nbClient; 
    424424         MPI_Comm_size(client->intraComm,&nbClient); 
     425         it->second->checkValid(this); 
    425426         this->redistribute(nbClient); 
    426427         break; 
  • XIOS/trunk/src/node/generate_rectilinear_domain.cpp

    r727 r734  
    7171               << "Define only one attribute: 'bounds_lat_start' or 'lat_start'."); 
    7272 
    73     if (!bounds_lon_start.isEmpty() && !lat_start.isEmpty()) 
    74          ERROR("CGenerateRectilinearDomain::checkValid(CDomain* domainDst)", 
    75                << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " 
    76                << "Only one latitude boundary attribute or latitude can be used but both 'bounds_lon_start' and 'lat_start' are defined." << std::endl 
    77                << "Define only one pair of attributes: ('bounds_lon_start' and 'bounds_lat_start') or ('lon_start' and 'lat_start')."); 
    78  
    79     if (!bounds_lat_start.isEmpty() && !lon_start.isEmpty()) 
    80          ERROR("CGenerateRectilinearDomain::checkValid(CDomain* domainDst)", 
    81                << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " 
    82                << "Only one latitude boundary attribute or latitude can be used but both 'bounds_lat_start' and 'lon_start' are defined." << std::endl 
    83                << "Define only one pair of attributes: ('bounds_lon_start' and 'bounds_lat_start') or ('lon_start' and 'lat_start')."); 
    84  
    85     if (bounds_lon_start.isEmpty() && bounds_lat_start.isEmpty() && 
    86         lon_start.isEmpty() && lat_start.isEmpty()) 
     73    if (bounds_lon_start.isEmpty() && lon_start.isEmpty()) 
    8774    { 
    8875      bounds_lon_start.setValue(defaultBndsLonStart); 
    8976      bounds_lon_end.setValue(defaultBndsLonEnd); 
     77    } 
     78 
     79    if (bounds_lat_start.isEmpty() && lat_start.isEmpty()) 
     80    { 
    9081      bounds_lat_start.setValue(defaultBndsLatStart); 
    9182      bounds_lat_end.setValue(defaultBndsLatEnd); 
     
    9788 
    9889      double boundsLonRange = bounds_lon_end - bounds_lon_start; 
    99       double boundsLonStep = boundsLonRange/double(niGlo); 
     90      double boundsLonStep = boundsLonRange/(double(niGlo)); 
    10091      domainDst->bounds_lon_start = bounds_lon_start; 
    10192      domainDst->bounds_lon_end   = bounds_lon_end; 
     
    109100 
    110101      double boundsLatRange = bounds_lat_end - bounds_lat_start; 
    111       double boundsLatStep = boundsLatRange/double(njGlo); 
     102      double boundsLatStep = boundsLatRange/(double(njGlo)); 
    112103      domainDst->bounds_lat_start = bounds_lat_start; 
    113104      domainDst->bounds_lat_end   = bounds_lat_end; 
     
    123114 
    124115      double lonRange = lon_end - lon_start; 
    125       double lonStep = lonRange/double(niGlo); 
     116      double lonStep = (1 == niGlo) ? lonRange : lonRange/(double(niGlo)-1); 
    126117      domainDst->lon_start = lon_start; 
    127118      domainDst->lon_end   = lon_end; 
     
    135126 
    136127      double latRange = lat_end - lat_start; 
    137       double latStep = latRange/double(njGlo); 
     128      double latStep = (1 == njGlo) ? latRange : latRange/(double(njGlo)-1); 
    138129      domainDst->lat_start = lat_start; 
    139130      domainDst->lat_end   = lat_end; 
  • XIOS/trunk/src/test/test_remap.f90

    r721 r734  
    129129 
    130130  DO ts=1,1 
    131 !    CALL xios_recv_field("src_field_regular", tmp_field) 
     131    CALL xios_recv_field("src_field_regular", tmp_field) 
    132132    CALL xios_update_calendar(ts) 
    133133    CALL xios_send_field("src_field",src_field) 
    134 !    CALL xios_send_field("tmp_field",tmp_field) 
     134    CALL xios_send_field("tmp_field",tmp_field) 
    135135    CALL wait_us(5000) ; 
    136136  ENDDO 
  • XIOS/trunk/src/transformation/grid_transformation.cpp

    r689 r734  
    5454    CDomain* domain = CDomain::createDomain(); 
    5555    domain->setAttributes(domainSrcTmp[idx]); 
     56    domain->solveInheritanceTransformation(); 
    5657    domain->checkAttributesOnClient(); 
    5758    domainSrc.push_back(domain); 
Note: See TracChangeset for help on using the changeset viewer.