Changeset 611 for XIOS/branchs


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

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

Fixes ticket #68.

Location:
XIOS/branchs/xios-1.0/src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • XIOS/branchs/xios-1.0/src/config/domain_attribute.conf

    r501 r611  
    6060DECLARE_ARRAY(double, 2, bounds_lon) 
    6161DECLARE_ARRAY(double, 2, bounds_lat) 
     62DECLARE_ARRAY(double, 2, area) 
    6263 
    6364DECLARE_ENUM3(type,regular,curvilinear,unstructured) 
  • XIOS/branchs/xios-1.0/src/interface/c_attr/icdomain_attr.cpp

    r581 r611  
    1717  typedef xios::CDomain*  domain_Ptr; 
    1818   
     19  void cxios_set_domain_area(domain_Ptr domain_hdl, double* area, int extent1, int extent2) 
     20  { 
     21    CTimer::get("XIOS").resume(); 
     22    CArray<double,2> tmp(area,shape(extent1,extent2),neverDeleteData) ; 
     23    domain_hdl->area.reference(tmp.copy()); 
     24    domain_hdl->sendAttributToServer(domain_hdl->area); 
     25     CTimer::get("XIOS").suspend(); 
     26  } 
     27   
     28  void cxios_get_domain_area(domain_Ptr domain_hdl, double* area, int extent1, int extent2) 
     29  { 
     30    CTimer::get("XIOS").resume(); 
     31    CArray<double,2> tmp(area,shape(extent1,extent2),neverDeleteData) ; 
     32    tmp=domain_hdl->area.getInheritedValue() ; 
     33     CTimer::get("XIOS").suspend(); 
     34  } 
     35   
     36  bool cxios_is_defined_domain_area(domain_Ptr domain_hdl ) 
     37  { 
     38    CTimer::get("XIOS").resume(); 
     39    bool isDefined = domain_hdl->area.hasInheritedValue(); 
     40    CTimer::get("XIOS").suspend(); 
     41    return isDefined; 
     42  } 
     43   
     44   
     45   
    1946  void cxios_set_domain_bounds_lat(domain_Ptr domain_hdl, double* bounds_lat, int extent1, int extent2) 
    2047  { 
  • XIOS/branchs/xios-1.0/src/interface/c_attr/icdomaingroup_attr.cpp

    r581 r611  
    1717  typedef xios::CDomainGroup*  domaingroup_Ptr; 
    1818   
     19  void cxios_set_domaingroup_area(domaingroup_Ptr domaingroup_hdl, double* area, int extent1, int extent2) 
     20  { 
     21    CTimer::get("XIOS").resume(); 
     22    CArray<double,2> tmp(area,shape(extent1,extent2),neverDeleteData) ; 
     23    domaingroup_hdl->area.reference(tmp.copy()); 
     24    domaingroup_hdl->sendAttributToServer(domaingroup_hdl->area); 
     25     CTimer::get("XIOS").suspend(); 
     26  } 
     27   
     28  void cxios_get_domaingroup_area(domaingroup_Ptr domaingroup_hdl, double* area, int extent1, int extent2) 
     29  { 
     30    CTimer::get("XIOS").resume(); 
     31    CArray<double,2> tmp(area,shape(extent1,extent2),neverDeleteData) ; 
     32    tmp=domaingroup_hdl->area.getInheritedValue() ; 
     33     CTimer::get("XIOS").suspend(); 
     34  } 
     35   
     36  bool cxios_is_defined_domaingroup_area(domaingroup_Ptr domaingroup_hdl ) 
     37  { 
     38    CTimer::get("XIOS").resume(); 
     39    bool isDefined = domaingroup_hdl->area.hasInheritedValue(); 
     40    CTimer::get("XIOS").suspend(); 
     41    return isDefined; 
     42  } 
     43   
     44   
     45   
    1946  void cxios_set_domaingroup_bounds_lat(domaingroup_Ptr domaingroup_hdl, double* bounds_lat, int extent1, int extent2) 
    2047  { 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/domain_interface_attr.f90

    r501 r611  
    99     
    1010     
     11    SUBROUTINE cxios_set_domain_area(domain_hdl, area, extent1, extent2) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     14      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     15      INTEGER (kind = C_INT), VALUE  :: extent1 
     16      INTEGER (kind = C_INT), VALUE  :: extent2 
     17    END SUBROUTINE cxios_set_domain_area 
     18     
     19    SUBROUTINE cxios_get_domain_area(domain_hdl, area, extent1, extent2) BIND(C) 
     20      USE ISO_C_BINDING 
     21      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     22      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     23      INTEGER (kind = C_INT), VALUE  :: extent1 
     24      INTEGER (kind = C_INT), VALUE  :: extent2 
     25    END SUBROUTINE cxios_get_domain_area 
     26     
     27    FUNCTION cxios_is_defined_domain_area(domain_hdl ) BIND(C) 
     28      USE ISO_C_BINDING 
     29      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_area 
     30      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     31    END FUNCTION cxios_is_defined_domain_area 
     32     
     33     
    1134    SUBROUTINE cxios_set_domain_bounds_lat(domain_hdl, bounds_lat, extent1, extent2) BIND(C) 
    1235      USE ISO_C_BINDING 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/domaingroup_interface_attr.f90

    r501 r611  
    99     
    1010     
     11    SUBROUTINE cxios_set_domaingroup_area(domaingroup_hdl, area, extent1, extent2) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     14      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     15      INTEGER (kind = C_INT), VALUE  :: extent1 
     16      INTEGER (kind = C_INT), VALUE  :: extent2 
     17    END SUBROUTINE cxios_set_domaingroup_area 
     18     
     19    SUBROUTINE cxios_get_domaingroup_area(domaingroup_hdl, area, extent1, extent2) BIND(C) 
     20      USE ISO_C_BINDING 
     21      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     22      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     23      INTEGER (kind = C_INT), VALUE  :: extent1 
     24      INTEGER (kind = C_INT), VALUE  :: extent2 
     25    END SUBROUTINE cxios_get_domaingroup_area 
     26     
     27    FUNCTION cxios_is_defined_domaingroup_area(domaingroup_hdl ) BIND(C) 
     28      USE ISO_C_BINDING 
     29      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_area 
     30      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     31    END FUNCTION cxios_is_defined_domaingroup_area 
     32     
     33     
    1134    SUBROUTINE cxios_set_domaingroup_bounds_lat(domaingroup_hdl, bounds_lat, extent1, extent2) BIND(C) 
    1235      USE ISO_C_BINDING 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/idomain_attr.F90

    r501 r611  
    1212   
    1313  SUBROUTINE xios(set_domain_attr)  & 
    14     ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    15     , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    16     , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     14    ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     15    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     16    , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    1717    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    1818    , zoom_nj_loc ) 
     
    2121      TYPE(txios(domain))  :: domain_hdl 
    2222      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     23      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area(:,:) 
    2324      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
    2425      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
     
    6263      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    6364      CALL xios(set_domain_attr_hdl_)   & 
    64       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    65       , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    66       , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     65      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     66      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     67      , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    6768      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    6869      , zoom_nj_loc ) 
     
    7172   
    7273  SUBROUTINE xios(set_domain_attr_hdl)  & 
    73     ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    74     , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    75     , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     74    ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     75    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     76    , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    7677    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    7778    , zoom_nj_loc ) 
     
    7980    IMPLICIT NONE 
    8081      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     82      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area(:,:) 
    8183      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
    8284      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
     
    119121       
    120122      CALL xios(set_domain_attr_hdl_)  & 
    121       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    122       , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    123       , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     123      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     124      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     125      , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    124126      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    125127      , zoom_nj_loc ) 
     
    128130   
    129131  SUBROUTINE xios(set_domain_attr_hdl_)   & 
    130     ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     132    ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    131133    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, i_index_, ibegin_, iend_  & 
    132134    , j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_  & 
     
    136138    IMPLICIT NONE 
    137139      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     140      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area_(:,:) 
    138141      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat_(:,:) 
    139142      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon_(:,:) 
     
    175178      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc_ 
    176179       
     180      IF (PRESENT(area_)) THEN 
     181        CALL cxios_set_domain_area(domain_hdl%daddr, area_,size(area_,1),size(area_,2)) 
     182      ENDIF 
     183       
    177184      IF (PRESENT(bounds_lat_)) THEN 
    178185        CALL cxios_set_domain_bounds_lat(domain_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     
    330337   
    331338  SUBROUTINE xios(get_domain_attr)  & 
    332     ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    333     , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    334     , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     339    ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     340    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     341    , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    335342    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    336343    , zoom_nj_loc ) 
     
    339346      TYPE(txios(domain))  :: domain_hdl 
    340347      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     348      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    341349      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    342350      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    380388      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    381389      CALL xios(get_domain_attr_hdl_)   & 
    382       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    383       , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    384       , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     390      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     391      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     392      , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    385393      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    386394      , zoom_nj_loc ) 
     
    389397   
    390398  SUBROUTINE xios(get_domain_attr_hdl)  & 
    391     ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    392     , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    393     , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     399    ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     400    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     401    , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    394402    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    395403    , zoom_nj_loc ) 
     
    397405    IMPLICIT NONE 
    398406      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     407      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    399408      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    400409      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    437446       
    438447      CALL xios(get_domain_attr_hdl_)  & 
    439       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    440       , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    441       , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     448      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     449      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     450      , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    442451      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    443452      , zoom_nj_loc ) 
     
    446455   
    447456  SUBROUTINE xios(get_domain_attr_hdl_)   & 
    448     ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     457    ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    449458    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, i_index_, ibegin_, iend_  & 
    450459    , j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_  & 
     
    454463    IMPLICIT NONE 
    455464      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     465      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area_(:,:) 
    456466      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat_(:,:) 
    457467      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon_(:,:) 
     
    493503      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_ 
    494504       
     505      IF (PRESENT(area_)) THEN 
     506        CALL cxios_get_domain_area(domain_hdl%daddr, area_,size(area_,1),size(area_,2)) 
     507      ENDIF 
     508       
    495509      IF (PRESENT(bounds_lat_)) THEN 
    496510        CALL cxios_get_domain_bounds_lat(domain_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     
    648662   
    649663  SUBROUTINE xios(is_defined_domain_attr)  & 
    650     ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    651     , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    652     , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     664    ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     665    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     666    , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    653667    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    654668    , zoom_nj_loc ) 
     
    657671      TYPE(txios(domain))  :: domain_hdl 
    658672      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     673      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     674      LOGICAL(KIND=C_BOOL) :: area_tmp 
    659675      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    660676      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    734750      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    735751      CALL xios(is_defined_domain_attr_hdl_)   & 
    736       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    737       , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    738       , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     752      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     753      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     754      , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    739755      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    740756      , zoom_nj_loc ) 
     
    743759   
    744760  SUBROUTINE xios(is_defined_domain_attr_hdl)  & 
    745     ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    746     , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    747     , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     761    ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     762    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     763    , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    748764    , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    749765    , zoom_nj_loc ) 
     
    751767    IMPLICIT NONE 
    752768      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     769      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     770      LOGICAL(KIND=C_BOOL) :: area_tmp 
    753771      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    754772      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    827845       
    828846      CALL xios(is_defined_domain_attr_hdl_)  & 
    829       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    830       , data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index, jbegin, jend  & 
    831       , latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
     847      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     848      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, i_index, ibegin, iend, j_index  & 
     849      , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    832850      , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    833851      , zoom_nj_loc ) 
     
    836854   
    837855  SUBROUTINE xios(is_defined_domain_attr_hdl_)   & 
    838     ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     856    ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    839857    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, i_index_, ibegin_, iend_  & 
    840858    , j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_  & 
     
    844862    IMPLICIT NONE 
    845863      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     864      LOGICAL, OPTIONAL, INTENT(OUT) :: area_ 
     865      LOGICAL(KIND=C_BOOL) :: area__tmp 
    846866      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat_ 
    847867      LOGICAL(KIND=C_BOOL) :: bounds_lat__tmp 
     
    919939      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp 
    920940       
     941      IF (PRESENT(area_)) THEN 
     942        area__tmp=cxios_is_defined_domain_area(domain_hdl%daddr) 
     943        area_=area__tmp 
     944      ENDIF 
     945       
    921946      IF (PRESENT(bounds_lat_)) THEN 
    922947        bounds_lat__tmp=cxios_is_defined_domain_bounds_lat(domain_hdl%daddr) 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/idomaingroup_attr.F90

    r501 r611  
    1212   
    1313  SUBROUTINE xios(set_domaingroup_attr)  & 
    14     ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     14    ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    1515    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    1616    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    2121      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    2222      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     23      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area(:,:) 
    2324      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
    2425      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
     
    6364      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    6465      CALL xios(set_domaingroup_attr_hdl_)   & 
    65       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     66      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    6667      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    6768      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    7273   
    7374  SUBROUTINE xios(set_domaingroup_attr_hdl)  & 
    74     ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     75    ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    7576    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    7677    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    8081    IMPLICIT NONE 
    8182      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     83      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area(:,:) 
    8284      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
    8385      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
     
    121123       
    122124      CALL xios(set_domaingroup_attr_hdl_)  & 
    123       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     125      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    124126      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    125127      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    130132   
    131133  SUBROUTINE xios(set_domaingroup_attr_hdl_)   & 
    132     ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     134    ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    133135    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, group_ref_, i_index_, ibegin_  & 
    134136    , iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_  & 
     
    138140    IMPLICIT NONE 
    139141      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     142      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area_(:,:) 
    140143      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat_(:,:) 
    141144      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon_(:,:) 
     
    178181      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc_ 
    179182       
     183      IF (PRESENT(area_)) THEN 
     184        CALL cxios_set_domaingroup_area(domaingroup_hdl%daddr, area_,size(area_,1),size(area_,2)) 
     185      ENDIF 
     186       
    180187      IF (PRESENT(bounds_lat_)) THEN 
    181188        CALL cxios_set_domaingroup_bounds_lat(domaingroup_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     
    337344   
    338345  SUBROUTINE xios(get_domaingroup_attr)  & 
    339     ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     346    ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    340347    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    341348    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    346353      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    347354      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     355      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    348356      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    349357      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    388396      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    389397      CALL xios(get_domaingroup_attr_hdl_)   & 
    390       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     398      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    391399      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    392400      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    397405   
    398406  SUBROUTINE xios(get_domaingroup_attr_hdl)  & 
    399     ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     407    ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    400408    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    401409    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    405413    IMPLICIT NONE 
    406414      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     415      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    407416      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    408417      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    446455       
    447456      CALL xios(get_domaingroup_attr_hdl_)  & 
    448       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     457      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    449458      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    450459      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    455464   
    456465  SUBROUTINE xios(get_domaingroup_attr_hdl_)   & 
    457     ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     466    ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    458467    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, group_ref_, i_index_, ibegin_  & 
    459468    , iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_  & 
     
    463472    IMPLICIT NONE 
    464473      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     474      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area_(:,:) 
    465475      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat_(:,:) 
    466476      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon_(:,:) 
     
    503513      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_ 
    504514       
     515      IF (PRESENT(area_)) THEN 
     516        CALL cxios_get_domaingroup_area(domaingroup_hdl%daddr, area_,size(area_,1),size(area_,2)) 
     517      ENDIF 
     518       
    505519      IF (PRESENT(bounds_lat_)) THEN 
    506520        CALL cxios_get_domaingroup_bounds_lat(domaingroup_hdl%daddr, bounds_lat_,size(bounds_lat_,1),size(bounds_lat_,2)) 
     
    662676   
    663677  SUBROUTINE xios(is_defined_domaingroup_attr)  & 
    664     ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     678    ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    665679    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    666680    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    671685      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    672686      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     687      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     688      LOGICAL(KIND=C_BOOL) :: area_tmp 
    673689      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    674690      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    750766      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    751767      CALL xios(is_defined_domaingroup_attr_hdl_)   & 
    752       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     768      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    753769      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    754770      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    759775   
    760776  SUBROUTINE xios(is_defined_domaingroup_attr_hdl)  & 
    761     ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     777    ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    762778    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    763779    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    767783    IMPLICIT NONE 
    768784      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     785      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     786      LOGICAL(KIND=C_BOOL) :: area_tmp 
    769787      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    770788      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    845863       
    846864      CALL xios(is_defined_domaingroup_attr_hdl_)  & 
    847       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     865      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    848866      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, group_ref, i_index, ibegin  & 
    849867      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     
    854872   
    855873  SUBROUTINE xios(is_defined_domaingroup_attr_hdl_)   & 
    856     ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     874    ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    857875    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, group_ref_, i_index_, ibegin_  & 
    858876    , iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_  & 
     
    862880    IMPLICIT NONE 
    863881      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     882      LOGICAL, OPTIONAL, INTENT(OUT) :: area_ 
     883      LOGICAL(KIND=C_BOOL) :: area__tmp 
    864884      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat_ 
    865885      LOGICAL(KIND=C_BOOL) :: bounds_lat__tmp 
     
    939959      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp 
    940960       
     961      IF (PRESENT(area_)) THEN 
     962        area__tmp=cxios_is_defined_domaingroup_area(domaingroup_hdl%daddr) 
     963        area_=area__tmp 
     964      ENDIF 
     965       
    941966      IF (PRESENT(bounds_lat_)) THEN 
    942967        bounds_lat__tmp=cxios_is_defined_domaingroup_bounds_lat(domaingroup_hdl%daddr) 
  • XIOS/branchs/xios-1.0/src/node/domain.cpp

    r610 r611  
    2121   CDomain::CDomain(void) 
    2222      : CObjectTemplate<CDomain>(), CDomainAttributes() 
    23       , isChecked(false), relFiles() 
     23      , isChecked(false), hasBounds(false), hasArea(false), relFiles() 
    2424   { /* Ne rien faire de plus */ } 
    2525 
    2626   CDomain::CDomain(const StdString & id) 
    2727      : CObjectTemplate<CDomain>(id), CDomainAttributes() 
    28       , isChecked(false), relFiles() 
     28      , isChecked(false), hasBounds(false), hasArea(false), relFiles() 
    2929         { /* Ne rien faire de plus */ } 
    3030 
     
    108108          for(int j=0;j<nj;j++) mask(0,j)=mask_tmp(j,0) ; 
    109109         } 
     110 
     111         if (!area.isEmpty()) 
     112           area.transposeSelf(1, 0); 
     113 
    110114         ni=1 ; 
    111115         ibegin=1 ; 
     
    533537   } 
    534538 
     539   void CDomain::checkArea(void) 
     540   { 
     541     hasArea = !area.isEmpty(); 
     542     if (hasArea) 
     543     { 
     544       if (area.extent(0) != ni || area.extent(1) != nj) 
     545       { 
     546         ERROR("void CDomain::checkArea(void)", 
     547               "The area attribute must be of size ni x nj."); 
     548       } 
     549     } 
     550   } 
     551 
    535552   //---------------------------------------------------------------- 
    536553 
     
    543560      this->checkZoom(); 
    544561      this->checkBounds(); 
     562      this->checkArea(); 
    545563 
    546564      if (context->hasClient) 
     
    561579        computeConnectedServer() ; 
    562580        sendServerAttribut() ; 
    563         sendLonLat() ; 
     581        sendLonLatArea(); 
    564582      } 
    565583 
     
    701719 
    702720 
    703   void CDomain::sendLonLat(void) 
     721  void CDomain::sendLonLatArea(void) 
    704722  { 
    705723    int ns,n,i,j,ind,nv; 
     
    709727    // send lon lat for each connected server 
    710728    CEventClient event(getType(), EVENT_ID_LON_LAT); 
     729    CEventClient eventArea(getType(), EVENT_ID_AREA); 
    711730 
    712731    list<CMessage> list_msg; 
     732    list<CMessage> list_msgArea; 
    713733    list<CArray<int,1> > list_indi,list_indj; 
    714734    list<CArray<double,1> >list_lon,list_lat; 
    715735    list<CArray<double,2> >list_boundslon,list_boundslat; 
     736    list<CArray<double,1> > list_area; 
    716737 
    717738    for (int ns = 0; ns < connectedServer.size(); ns++) 
     
    729750        list_boundslat.push_back(CArray<double,2>(nvertex, nbData)); 
    730751      } 
     752      if (hasArea) 
     753        list_area.push_back(CArray<double,1>(nbData)); 
    731754 
    732755      CArray<int,1>& indi = list_indi.back(); 
     
    758781        indi(n) = ibegin + i_index(i - ibegin + 1, j - jbegin + 1) - 1; 
    759782        indj(n) = jbegin + j_index(i - ibegin + 1, j - jbegin + 1) - 1; 
     783 
     784        if (hasArea) 
     785          list_area.back()(n) = area(i - ibegin + 1, j - jbegin + 1); 
    760786      } 
    761787 
     
    768794         
    769795      event.push(connectedServer[ns], nbSenders[ns], list_msg.back()); 
     796 
     797      if (hasArea) 
     798      { 
     799        list_msgArea.push_back(CMessage()); 
     800        list_msgArea.back() << this->getId() << list_area.back(); 
     801        eventArea.push(connectedServer[ns], nbSenders[ns], list_msgArea.back()); 
     802      } 
    770803    } 
    771804 
    772805    client->sendEvent(event); 
     806    if (hasArea) 
     807      client->sendEvent(eventArea); 
    773808  } 
    774809 
     
    787822        case EVENT_ID_LON_LAT: 
    788823          recvLonLat(event); 
     824          return true; 
     825          break; 
     826        case EVENT_ID_AREA: 
     827          recvArea(event); 
    789828          return true; 
    790829          break; 
     
    837876      bounds_lat_srv = 0. ; 
    838877    } 
     878 
     879    if (hasArea) 
     880      area_srv.resize(zoom_ni_srv * zoom_nj_srv); 
    839881  } 
    840882 
     
    882924    } 
    883925  } 
    884    //---------------------------------------------------------------- 
    885  
    886  
    887  
    888    ///--------------------------------------------------------------- 
    889  
     926 
     927  void CDomain::recvArea(CEventServer& event) 
     928  { 
     929    list<CEventServer::SSubEvent>::iterator it; 
     930    for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) 
     931    { 
     932      CBufferIn* buffer = it->buffer; 
     933      string domainId; 
     934      *buffer >> domainId; 
     935      get(domainId)->recvArea(it->rank, *buffer); 
     936    } 
     937  } 
     938 
     939  void CDomain::recvArea(int rank, CBufferIn& buffer) 
     940  { 
     941    CArray<int,1> &indi = indiSrv[rank], &indj = indjSrv[rank]; 
     942    CArray<double,1> clientArea; 
     943 
     944    buffer >> clientArea; 
     945 
     946    int i, j, ind_srv; 
     947    for (int ind = 0; ind < indi.numElements(); ind++) 
     948    { 
     949      i = indi(ind); j = indj(ind); 
     950      ind_srv = (i - (zoom_ibegin_srv - 1)) + (j - (zoom_jbegin_srv - 1)) * zoom_ni_srv; 
     951      area_srv(ind_srv) = clientArea(ind); 
     952    } 
     953  } 
    890954} // namespace xios 
  • XIOS/branchs/xios-1.0/src/node/domain.hpp

    r610 r611  
    3737         enum EEventId 
    3838         { 
    39            EVENT_ID_SERVER_ATTRIBUT, EVENT_ID_LON_LAT 
     39           EVENT_ID_SERVER_ATTRIBUT, EVENT_ID_LON_LAT, EVENT_ID_AREA 
    4040         } ; 
    4141 
     
    7171         void checkZoom(void); 
    7272         void checkBounds(void); 
     73         void checkArea(void); 
    7374 
    7475 
     
    100101         CArray<double, 1> lonvalue_srv, latvalue_srv ; 
    101102         CArray<double, 2> bounds_lon_srv, bounds_lat_srv ; 
     103         CArray<double, 1> area_srv; 
    102104 
    103105 
     
    119121         void completeLonLatClient(void); 
    120122         void sendServerAttribut(void); 
    121          void sendLonLat(void); 
     123         void sendLonLatArea(void); 
    122124         void computeConnectedServer(void); 
     125 
    123126         static bool dispatchEvent(CEventServer& event); 
    124127         static void recvServerAttribut(CEventServer& event); 
    125128         static void recvLonLat(CEventServer& event); 
     129         static void recvArea(CEventServer& event); 
    126130         void recvServerAttribut(CBufferIn& buffer); 
    127131         void recvLonLat(int rank, CBufferIn& buffer); 
     132         void recvArea(int rank, CBufferIn& buffer); 
    128133 
    129134         /// Destructeur /// 
     
    139144         bool isCurvilinear ; 
    140145         bool hasBounds ; 
     146         bool hasArea; 
     147 
    141148       private : 
    142  
    143149         /// Proriétés protégées /// 
    144150         bool isChecked; 
  • 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.