Changeset 611


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.

Location:
XIOS
Files:
20 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()) 
  • XIOS/trunk/src/config/domain_attribute.conf

    r540 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/trunk/src/interface/c_attr/icdomain_attr.cpp

    r591 r611  
    1818  typedef xios::CDomain* domain_Ptr; 
    1919 
     20  void cxios_set_domain_area(domain_Ptr domain_hdl, double* area, int extent1, int extent2) 
     21  { 
     22    CTimer::get("XIOS").resume(); 
     23    CArray<double,2> tmp(area, shape(extent1, extent2), neverDeleteData); 
     24    domain_hdl->area.reference(tmp.copy()); 
     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 
    2045  void cxios_set_domain_bounds_lat(domain_Ptr domain_hdl, double* bounds_lat, int extent1, int extent2) 
    2146  { 
  • XIOS/trunk/src/interface/c_attr/icdomaingroup_attr.cpp

    r591 r611  
    1818  typedef xios::CDomainGroup* domaingroup_Ptr; 
    1919 
     20  void cxios_set_domaingroup_area(domaingroup_Ptr domaingroup_hdl, double* area, int extent1, int extent2) 
     21  { 
     22    CTimer::get("XIOS").resume(); 
     23    CArray<double,2> tmp(area, shape(extent1, extent2), neverDeleteData); 
     24    domaingroup_hdl->area.reference(tmp.copy()); 
     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 
    2045  void cxios_set_domaingroup_bounds_lat(domaingroup_Ptr domaingroup_hdl, double* bounds_lat, int extent1, int extent2) 
    2146  { 
  • XIOS/trunk/src/interface/fortran_attr/domain_interface_attr.F90

    r581 r611  
    1010    ! Do not call directly / interface FORTRAN 2003 <-> C99 
    1111 
     12    SUBROUTINE cxios_set_domain_area(domain_hdl, area, extent1, extent2) BIND(C) 
     13      USE ISO_C_BINDING 
     14      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     15      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     16      INTEGER (kind = C_INT), VALUE  :: extent1 
     17      INTEGER (kind = C_INT), VALUE  :: extent2 
     18    END SUBROUTINE cxios_set_domain_area 
     19 
     20    SUBROUTINE cxios_get_domain_area(domain_hdl, area, extent1, extent2) BIND(C) 
     21      USE ISO_C_BINDING 
     22      INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl 
     23      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     24      INTEGER (kind = C_INT), VALUE  :: extent1 
     25      INTEGER (kind = C_INT), VALUE  :: extent2 
     26    END SUBROUTINE cxios_get_domain_area 
     27 
     28    FUNCTION cxios_is_defined_domain_area(domain_hdl) BIND(C) 
     29      USE ISO_C_BINDING 
     30      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_area 
     31      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl 
     32    END FUNCTION cxios_is_defined_domain_area 
     33 
     34 
    1235    SUBROUTINE cxios_set_domain_bounds_lat(domain_hdl, bounds_lat, extent1, extent2) BIND(C) 
    1336      USE ISO_C_BINDING 
  • XIOS/trunk/src/interface/fortran_attr/domaingroup_interface_attr.F90

    r581 r611  
    1010    ! Do not call directly / interface FORTRAN 2003 <-> C99 
    1111 
     12    SUBROUTINE cxios_set_domaingroup_area(domaingroup_hdl, area, extent1, extent2) BIND(C) 
     13      USE ISO_C_BINDING 
     14      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     15      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     16      INTEGER (kind = C_INT), VALUE  :: extent1 
     17      INTEGER (kind = C_INT), VALUE  :: extent2 
     18    END SUBROUTINE cxios_set_domaingroup_area 
     19 
     20    SUBROUTINE cxios_get_domaingroup_area(domaingroup_hdl, area, extent1, extent2) BIND(C) 
     21      USE ISO_C_BINDING 
     22      INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl 
     23      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: area 
     24      INTEGER (kind = C_INT), VALUE  :: extent1 
     25      INTEGER (kind = C_INT), VALUE  :: extent2 
     26    END SUBROUTINE cxios_get_domaingroup_area 
     27 
     28    FUNCTION cxios_is_defined_domaingroup_area(domaingroup_hdl) BIND(C) 
     29      USE ISO_C_BINDING 
     30      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_area 
     31      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl 
     32    END FUNCTION cxios_is_defined_domaingroup_area 
     33 
     34 
    1235    SUBROUTINE cxios_set_domaingroup_bounds_lat(domaingroup_hdl, bounds_lat, extent1, extent2) BIND(C) 
    1336      USE ISO_C_BINDING 
  • XIOS/trunk/src/interface/fortran_attr/idomain_attr.F90

    r581 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, domain_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  & 
    17     , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    18     , zoom_nj_loc ) 
     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, domain_ref, i_index, ibegin  & 
     16    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     17    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     18    , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    1919 
    2020    IMPLICIT NONE 
    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(:,:) 
     
    6364      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    6465      CALL xios(set_domain_attr_hdl_)   & 
    65       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    66       , data_n_index, data_ni, data_nj, domain_group_ref, domain_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  & 
    68       , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    69       , zoom_nj_loc ) 
     66      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     67      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     68      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     69      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     70      , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    7071 
    7172  END SUBROUTINE xios(set_domain_attr) 
    7273 
    7374  SUBROUTINE xios(set_domain_attr_hdl)  & 
    74     ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    75     , data_n_index, data_ni, data_nj, domain_group_ref, domain_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  & 
    77     , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    78     , zoom_nj_loc ) 
     75    ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     76    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     77    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     78    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     79    , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    7980 
    8081    IMPLICIT NONE 
    8182      TYPE(txios(domain)) , INTENT(IN) :: domain_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_domain_attr_hdl_)  & 
    123       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    124       , data_n_index, data_ni, data_nj, domain_group_ref, domain_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  & 
    126       , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    127       , zoom_nj_loc ) 
     125      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     126      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     127      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     128      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     129      , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    128130 
    129131  END SUBROUTINE xios(set_domain_attr_hdl) 
    130132 
    131133  SUBROUTINE xios(set_domain_attr_hdl_)   & 
    132     ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     134    ( domain_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_, domain_ref_, i_index_  & 
    134136    , ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  & 
     
    138140    IMPLICIT NONE 
    139141      TYPE(txios(domain)) , INTENT(IN) :: domain_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_domain_area(domain_hdl%daddr, area_, size(area_,1), size(area_,2)) 
     185      ENDIF 
     186 
    180187      IF (PRESENT(bounds_lat_)) THEN 
    181188        CALL cxios_set_domain_bounds_lat(domain_hdl%daddr, bounds_lat_, size(bounds_lat_,1), size(bounds_lat_,2)) 
     
    335342 
    336343  SUBROUTINE xios(get_domain_attr)  & 
    337     ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    338     , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    339     , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    340     , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    341     , zoom_nj_loc ) 
     344    ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     345    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     346    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     347    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     348    , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    342349 
    343350    IMPLICIT NONE 
    344351      TYPE(txios(domain))  :: domain_hdl 
    345352      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     353      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    346354      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    347355      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    386394      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    387395      CALL xios(get_domain_attr_hdl_)   & 
    388       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    389       , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    390       , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    391       , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    392       , zoom_nj_loc ) 
     396      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     397      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     398      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     399      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     400      , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    393401 
    394402  END SUBROUTINE xios(get_domain_attr) 
    395403 
    396404  SUBROUTINE xios(get_domain_attr_hdl)  & 
    397     ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    398     , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    399     , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    400     , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    401     , zoom_nj_loc ) 
     405    ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     406    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     407    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     408    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     409    , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    402410 
    403411    IMPLICIT NONE 
    404412      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     413      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    405414      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    406415      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    444453 
    445454      CALL xios(get_domain_attr_hdl_)  & 
    446       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    447       , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    448       , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    449       , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    450       , zoom_nj_loc ) 
     455      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     456      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     457      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     458      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     459      , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    451460 
    452461  END SUBROUTINE xios(get_domain_attr_hdl) 
    453462 
    454463  SUBROUTINE xios(get_domain_attr_hdl_)   & 
    455     ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     464    ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    456465    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, i_index_  & 
    457466    , ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  & 
     
    461470    IMPLICIT NONE 
    462471      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     472      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area_(:,:) 
    463473      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat_(:,:) 
    464474      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon_(:,:) 
     
    501511      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_ 
    502512 
     513      IF (PRESENT(area_)) THEN 
     514        CALL cxios_get_domain_area(domain_hdl%daddr, area_, size(area_,1), size(area_,2)) 
     515      ENDIF 
     516 
    503517      IF (PRESENT(bounds_lat_)) THEN 
    504518        CALL cxios_get_domain_bounds_lat(domain_hdl%daddr, bounds_lat_, size(bounds_lat_,1), size(bounds_lat_,2)) 
     
    658672 
    659673  SUBROUTINE xios(is_defined_domain_attr)  & 
    660     ( domain_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    661     , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    662     , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    663     , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    664     , zoom_nj_loc ) 
     674    ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     675    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     676    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     677    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     678    , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    665679 
    666680    IMPLICIT NONE 
    667681      TYPE(txios(domain))  :: domain_hdl 
    668682      CHARACTER(LEN=*), INTENT(IN) ::domain_id 
     683      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     684      LOGICAL(KIND=C_BOOL) :: area_tmp 
    669685      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    670686      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    746762      CALL xios(get_domain_handle)(domain_id,domain_hdl) 
    747763      CALL xios(is_defined_domain_attr_hdl_)   & 
    748       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    749       , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    750       , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    751       , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    752       , zoom_nj_loc ) 
     764      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     765      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     766      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     767      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     768      , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    753769 
    754770  END SUBROUTINE xios(is_defined_domain_attr) 
    755771 
    756772  SUBROUTINE xios(is_defined_domain_attr_hdl)  & 
    757     ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    758     , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    759     , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    760     , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    761     , zoom_nj_loc ) 
     773    ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     774    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     775    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     776    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     777    , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    762778 
    763779    IMPLICIT NONE 
    764780      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     781      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     782      LOGICAL(KIND=C_BOOL) :: area_tmp 
    765783      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    766784      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    841859 
    842860      CALL xios(is_defined_domain_attr_hdl_)  & 
    843       ( domain_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index, data_jbegin  & 
    844       , data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin, iend, j_index  & 
    845       , jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex, standard_name  & 
    846       , type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni, zoom_ni_loc, zoom_nj  & 
    847       , zoom_nj_loc ) 
     861      ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     862      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  & 
     863      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  & 
     864      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  & 
     865      , zoom_ni_loc, zoom_nj, zoom_nj_loc ) 
    848866 
    849867  END SUBROUTINE xios(is_defined_domain_attr_hdl) 
    850868 
    851869  SUBROUTINE xios(is_defined_domain_attr_hdl_)   & 
    852     ( domain_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     870    ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    853871    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, i_index_  & 
    854872    , ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  & 
     
    858876    IMPLICIT NONE 
    859877      TYPE(txios(domain)) , INTENT(IN) :: domain_hdl 
     878      LOGICAL, OPTIONAL, INTENT(OUT) :: area_ 
     879      LOGICAL(KIND=C_BOOL) :: area__tmp 
    860880      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat_ 
    861881      LOGICAL(KIND=C_BOOL) :: bounds_lat__tmp 
     
    935955      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp 
    936956 
     957      IF (PRESENT(area_)) THEN 
     958        area__tmp = cxios_is_defined_domain_area(domain_hdl%daddr) 
     959        area_ = area__tmp 
     960      ENDIF 
     961 
    937962      IF (PRESENT(bounds_lat_)) THEN 
    938963        bounds_lat__tmp = cxios_is_defined_domain_bounds_lat(domain_hdl%daddr) 
  • XIOS/trunk/src/interface/fortran_attr/idomaingroup_attr.F90

    r581 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, domain_ref, group_ref, i_index  & 
    1616    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_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(:,:) 
     
    6465      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    6566      CALL xios(set_domaingroup_attr_hdl_)   & 
    66       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     67      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    6768      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    6869      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    7374 
    7475  SUBROUTINE xios(set_domaingroup_attr_hdl)  & 
    75     ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     76    ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    7677    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    7778    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    8182    IMPLICIT NONE 
    8283      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     84      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area(:,:) 
    8385      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat(:,:) 
    8486      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon(:,:) 
     
    123125 
    124126      CALL xios(set_domaingroup_attr_hdl_)  & 
    125       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     127      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    126128      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    127129      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    132134 
    133135  SUBROUTINE xios(set_domaingroup_attr_hdl_)   & 
    134     ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     136    ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    135137    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, group_ref_  & 
    136138    , i_index_, ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_  & 
     
    140142    IMPLICIT NONE 
    141143      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     144      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: area_(:,:) 
    142145      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lat_(:,:) 
    143146      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_lon_(:,:) 
     
    181184      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc_ 
    182185 
     186      IF (PRESENT(area_)) THEN 
     187        CALL cxios_set_domaingroup_area(domaingroup_hdl%daddr, area_, size(area_,1), size(area_,2)) 
     188      ENDIF 
     189 
    183190      IF (PRESENT(bounds_lat_)) THEN 
    184191        CALL cxios_set_domaingroup_bounds_lat(domaingroup_hdl%daddr, bounds_lat_, size(bounds_lat_,1), size(bounds_lat_,2)) 
     
    342349 
    343350  SUBROUTINE xios(get_domaingroup_attr)  & 
    344     ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     351    ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    345352    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    346353    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    351358      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    352359      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     360      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    353361      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    354362      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    394402      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    395403      CALL xios(get_domaingroup_attr_hdl_)   & 
    396       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     404      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    397405      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    398406      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    403411 
    404412  SUBROUTINE xios(get_domaingroup_attr_hdl)  & 
    405     ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     413    ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    406414    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    407415    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    411419    IMPLICIT NONE 
    412420      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     421      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area(:,:) 
    413422      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat(:,:) 
    414423      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon(:,:) 
     
    453462 
    454463      CALL xios(get_domaingroup_attr_hdl_)  & 
    455       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     464      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    456465      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    457466      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    462471 
    463472  SUBROUTINE xios(get_domaingroup_attr_hdl_)   & 
    464     ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     473    ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    465474    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, group_ref_  & 
    466475    , i_index_, ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_  & 
     
    470479    IMPLICIT NONE 
    471480      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     481      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: area_(:,:) 
    472482      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lat_(:,:) 
    473483      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_lon_(:,:) 
     
    511521      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_ 
    512522 
     523      IF (PRESENT(area_)) THEN 
     524        CALL cxios_get_domaingroup_area(domaingroup_hdl%daddr, area_, size(area_,1), size(area_,2)) 
     525      ENDIF 
     526 
    513527      IF (PRESENT(bounds_lat_)) THEN 
    514528        CALL cxios_get_domaingroup_bounds_lat(domaingroup_hdl%daddr, bounds_lat_, size(bounds_lat_,1), size(bounds_lat_,2)) 
     
    672686 
    673687  SUBROUTINE xios(is_defined_domaingroup_attr)  & 
    674     ( domaingroup_id, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     688    ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    675689    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    676690    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    681695      TYPE(txios(domaingroup))  :: domaingroup_hdl 
    682696      CHARACTER(LEN=*), INTENT(IN) ::domaingroup_id 
     697      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     698      LOGICAL(KIND=C_BOOL) :: area_tmp 
    683699      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    684700      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    762778      CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl) 
    763779      CALL xios(is_defined_domaingroup_attr_hdl_)   & 
    764       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     780      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    765781      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    766782      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    771787 
    772788  SUBROUTINE xios(is_defined_domaingroup_attr_hdl)  & 
    773     ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     789    ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    774790    , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    775791    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    779795    IMPLICIT NONE 
    780796      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     797      LOGICAL, OPTIONAL, INTENT(OUT) :: area 
     798      LOGICAL(KIND=C_BOOL) :: area_tmp 
    781799      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat 
    782800      LOGICAL(KIND=C_BOOL) :: bounds_lat_tmp 
     
    859877 
    860878      CALL xios(is_defined_domaingroup_attr_hdl_)  & 
    861       ( domaingroup_hdl, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
     879      ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  & 
    862880      , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  & 
    863881      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  & 
     
    868886 
    869887  SUBROUTINE xios(is_defined_domaingroup_attr_hdl_)   & 
    870     ( domaingroup_hdl, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
     888    ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  & 
    871889    , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, group_ref_  & 
    872890    , i_index_, ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_  & 
     
    876894    IMPLICIT NONE 
    877895      TYPE(txios(domaingroup)) , INTENT(IN) :: domaingroup_hdl 
     896      LOGICAL, OPTIONAL, INTENT(OUT) :: area_ 
     897      LOGICAL(KIND=C_BOOL) :: area__tmp 
    878898      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_lat_ 
    879899      LOGICAL(KIND=C_BOOL) :: bounds_lat__tmp 
     
    955975      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp 
    956976 
     977      IF (PRESENT(area_)) THEN 
     978        area__tmp = cxios_is_defined_domaingroup_area(domaingroup_hdl%daddr) 
     979        area_ = area__tmp 
     980      ENDIF 
     981 
    957982      IF (PRESENT(bounds_lat_)) THEN 
    958983        bounds_lat__tmp = cxios_is_defined_domaingroup_bounds_lat(domaingroup_hdl%daddr) 
  • XIOS/trunk/src/node/domain.cpp

    r610 r611  
    2424      : CObjectTemplate<CDomain>(), CDomainAttributes() 
    2525      , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_() 
    26       , isDistributed_(false) 
     26      , hasBounds(false), hasArea(false), isDistributed_(false) 
    2727   { /* Ne rien faire de plus */ } 
    2828 
     
    3030      : CObjectTemplate<CDomain>(id), CDomainAttributes() 
    3131      , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_() 
    32       , isDistributed_(false) 
     32      , hasBounds(false), hasArea(false), isDistributed_(false) 
    3333         { /* Ne rien faire de plus */ } 
    3434 
     
    119119          for(int j=0;j<nj;j++) mask(0,j)=mask_tmp(j,0) ; 
    120120         } 
     121 
     122         if (!area.isEmpty()) 
     123           area.transposeSelf(1, 0); 
     124 
    121125         ni=1 ; 
    122126         ibegin=0 ; 
     
    553557     { 
    554558       hasBounds=true ; 
    555  
    556559     } 
    557560     else 
     
    562565   } 
    563566 
     567   void CDomain::checkArea(void) 
     568   { 
     569     hasArea = !area.isEmpty(); 
     570     if (hasArea) 
     571     { 
     572       if (area.extent(0) != ni || area.extent(1) != nj) 
     573       { 
     574         ERROR("void CDomain::checkArea(void)", 
     575               "The area attribute must be of size ni x nj."); 
     576       } 
     577     } 
     578   } 
     579 
    564580   //---------------------------------------------------------------- 
    565581   // Divide function checkAttributes into 2 seperate ones 
     
    573589      this->checkZoom(); 
    574590      this->checkBounds(); 
     591      this->checkArea(); 
    575592 
    576593      if (context->hasClient) 
     
    601618     { 
    602619       sendServerAttribut() ; 
    603        sendLonLat() ; 
     620       sendLonLatArea() ; 
    604621     } 
    605622 
     
    615632      this->checkZoom(); 
    616633      this->checkBounds(); 
     634      this->checkArea(); 
    617635 
    618636      if (context->hasClient) 
     
    633651        computeConnectedServer() ; 
    634652        sendServerAttribut() ; 
    635         sendLonLat() ; 
     653        sendLonLatArea() ; 
    636654      } 
    637655 
     
    790808  } 
    791809 
    792   void CDomain::sendLonLat(void) 
     810  void CDomain::sendLonLatArea(void) 
    793811  { 
    794812    int ns, n, i, j, ind, nv, idx; 
     
    800818    CEventClient eventLon(getType(), EVENT_ID_LON); 
    801819    CEventClient eventLat(getType(), EVENT_ID_LAT); 
    802  
    803     list<CMessage> list_msgsIndex, list_msgsLon, list_msgsLat; 
     820    CEventClient eventArea(getType(), EVENT_ID_AREA); 
     821 
     822    list<CMessage> list_msgsIndex, list_msgsLon, list_msgsLat, list_msgsArea; 
    804823    list<CArray<int,1> > list_indi, list_indj; 
    805824    list<CArray<double,1> > list_lon, list_lat; 
    806825    list<CArray<double,2> > list_boundslon, list_boundslat; 
     826    list<CArray<double,1> > list_area; 
    807827 
    808828    std::map<int, std::vector<size_t> >::const_iterator it, iteMap; 
     
    826846        list_boundslat.push_back(CArray<double,2>(nvertex, nbData)); 
    827847      } 
     848      if (hasArea) 
     849        list_area.push_back(CArray<double,1>(nbData)); 
    828850 
    829851      CArray<int,1>& indi = list_indi.back(); 
     
    856878        indi(n) = ibegin + i_index(i - ibegin, j - jbegin); 
    857879        indj(n) = jbegin + j_index(i - ibegin, j - jbegin); 
     880 
     881        if (hasArea) 
     882          list_area.back()(n) = area(i - ibegin, j - jbegin); 
    858883      } 
    859884 
     
    879904      eventLon.push(rank, nbConnectedClients_[rank], list_msgsLon.back()); 
    880905      eventLat.push(rank, nbConnectedClients_[rank], list_msgsLat.back()); 
     906 
     907      if (hasArea) 
     908      { 
     909        list_msgsArea.push_back(CMessage()); 
     910        list_msgsArea.back() << this->getId() << list_area.back(); 
     911        eventArea.push(rank, nbConnectedClients_[rank], list_msgsArea.back()); 
     912      } 
    881913    } 
    882914 
     
    884916    client->sendEvent(eventLon); 
    885917    client->sendEvent(eventLat); 
     918    if (hasArea) 
     919      client->sendEvent(eventArea); 
    886920  } 
    887921 
     
    909943          return true; 
    910944          break; 
     945        case EVENT_ID_AREA: 
     946          recvArea(event); 
     947          return true; 
     948          break; 
    911949        default: 
    912950          ERROR("bool CContext::dispatchEvent(CEventServer& event)", 
     
    956994      bounds_lat_srv = 0. ; 
    957995    } 
     996 
     997    if (hasArea) 
     998      area_srv.resize(zoom_ni_srv * zoom_nj_srv); 
    958999  } 
    9591000 
     
    10471088  } 
    10481089 
     1090  void CDomain::recvArea(CEventServer& event) 
     1091  { 
     1092    list<CEventServer::SSubEvent>::iterator it; 
     1093    for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it) 
     1094    { 
     1095      CBufferIn* buffer = it->buffer; 
     1096      string domainId; 
     1097      *buffer >> domainId; 
     1098      get(domainId)->recvArea(it->rank, *buffer); 
     1099    } 
     1100  } 
     1101 
     1102  void CDomain::recvArea(int rank, CBufferIn& buffer) 
     1103  { 
     1104    CArray<int,1> &indi = indiSrv[rank], &indj = indjSrv[rank]; 
     1105    CArray<double,1> clientArea; 
     1106 
     1107    buffer >> clientArea; 
     1108 
     1109    int i, j, ind_srv; 
     1110    for (int ind = 0; ind < indi.numElements(); ind++) 
     1111    { 
     1112      i = indi(ind); j = indj(ind); 
     1113      ind_srv = (i - zoom_ibegin_srv) + (j - zoom_jbegin_srv) * zoom_ni_srv; 
     1114      area_srv(ind_srv) = clientArea(ind); 
     1115    } 
     1116  } 
     1117 
    10491118   //---------------------------------------------------------------- 
    10501119 
  • XIOS/trunk/src/node/domain.hpp

    r610 r611  
    3838         enum EEventId 
    3939         { 
    40            EVENT_ID_SERVER_ATTRIBUT, EVENT_ID_INDEX, EVENT_ID_LON, EVENT_ID_LAT 
     40           EVENT_ID_SERVER_ATTRIBUT, EVENT_ID_INDEX, EVENT_ID_LON, EVENT_ID_LAT, EVENT_ID_AREA 
    4141         } ; 
    4242 
     
    7676         void checkZoom(void); 
    7777         void checkBounds(void); 
     78         void checkArea(void); 
    7879 
    7980 
     
    106107         CArray<double, 1> lonvalue_srv, latvalue_srv ; 
    107108         CArray<double, 2> bounds_lon_srv, bounds_lat_srv ; 
     109         CArray<double, 1> area_srv; 
    108110 
    109111 
     
    127129         void completeLonLatClient(void); 
    128130         void sendServerAttribut(void) ; 
    129          void sendLonLat(void) ; 
     131         void sendLonLatArea(void); 
    130132         void computeConnectedServer(void) ; 
     133 
    131134         static bool dispatchEvent(CEventServer& event); 
    132135         static void recvServerAttribut(CEventServer& event); 
     
    134137         static void recvLon(CEventServer& event); 
    135138         static void recvLat(CEventServer& event); 
     139         static void recvArea(CEventServer& event); 
    136140         void recvServerAttribut(CBufferIn& buffer); 
    137141         void recvIndex(int rank, CBufferIn& buffer); 
    138142         void recvLon(int rank, CBufferIn& buffer); 
    139143         void recvLat(int rank, CBufferIn& buffer); 
     144         void recvArea(int rank, CBufferIn& buffer); 
    140145 
    141146         /// Destructeur /// 
     
    151156         bool isCurvilinear ; 
    152157         bool hasBounds ; 
     158         bool hasArea; 
    153159       private : 
    154160 
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r609 r611  
    9999 
    100100         string lonid,latid,bounds_lonid,bounds_latid ; 
     101         string areaId = "area" + appendDomid; 
    101102/* 
    102103         StdString lonid_loc = (server->intraCommSize > 1) 
     
    118119                 if (server->intraCommSize > 1) 
    119120                 { 
    120  
    121121  //                 SuperClassWriter::addDimension(lonid, domain->zoom_ni.getValue()); 
    122122  //                 SuperClassWriter::addDimension(latid, domain->zoom_nj.getValue()); 
     
    211211                 //SuperClassWriter::setDefaultValue(maskid, &dvm); 
    212212 
     213                 if (domain->hasArea) 
     214                 { 
     215                   SuperClassWriter::addVariable(areaId, NC_FLOAT, dim0); 
     216                   SuperClassWriter::addAttribute("units", StdString("m2"), &areaId); 
     217                 } 
     218 
    213219                 SuperClassWriter::definition_end(); 
    214220 
     
    226232                     break; 
    227233                 } 
     234 
     235                 if (domain->hasArea) 
     236                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0); 
     237 
    228238                 SuperClassWriter::definition_start(); 
    229239 
     
    234244                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni.getValue()); 
    235245                 SuperClassWriter::addDimension(dimYid, domain->zoom_nj.getValue()); 
    236  
    237246 
    238247                 switch (domain->type) 
     
    255264                     break; 
    256265                 } 
     266 
     267                 if (domain->hasArea) 
     268                 { 
     269                   dim0.clear(); 
     270                   dim0.push_back(dimYid); dim0.push_back(dimXid); 
     271                   SuperClassWriter::addVariable(areaId, NC_FLOAT, dim0); 
     272                   SuperClassWriter::addAttribute("units", StdString("m2"), &areaId); 
     273                   dim0.clear(); 
     274                 } 
     275 
    257276                 this->writeAxisAttributes 
    258277                    (lonid, "X", "longitude", "Longitude", "degrees_east", domid); 
     
    260279                    (latid, "Y", "latitude", "Latitude", "degrees_north", domid); 
    261280 
    262  
    263281                 SuperClassWriter::definition_end(); 
     282 
    264283                 switch (domain->type) 
    265284                 { 
     
    270289                     if (domain->isEmpty()) 
    271290                     { 
    272                        start[0]=0 ; start [1]=0 ; 
     291                       start[0]=0 ; start[1]=0 ; 
    273292                       count[0]=0 ; count[1]=0 ; 
    274293                     } 
     
    308327                   } 
    309328                 } 
     329 
     330                 if (domain->hasArea) 
     331                 { 
     332                   std::vector<StdSize> start(2); 
     333                   std::vector<StdSize> count(2); 
     334 
     335                   if (domain->isEmpty()) 
     336                   { 
     337                     start[0] = 0; start[1] = 0; 
     338                     count[0] = 0; count[1] = 0; 
     339                   } 
     340                   else 
     341                   { 
     342                     start[1] = domain->zoom_ibegin_srv - domain->zoom_ibegin.getValue(); 
     343                     start[0] = domain->zoom_jbegin_srv - domain->zoom_jbegin.getValue(); 
     344                     count[1] = domain->zoom_ni_srv; 
     345                     count[0] = domain->zoom_nj_srv; 
     346                   } 
     347 
     348                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0, &start, &count); 
     349                 } 
     350 
    310351                 SuperClassWriter::definition_start(); 
    311352                 break; 
     
    351392 
    352393         string lonid,latid,bounds_lonid,bounds_latid ; 
     394         string areaId = "area" + appendDomid; 
    353395 
    354396         try 
     
    387429                 dim0.push_back(dimXid); 
    388430 
     431                 if (domain->hasArea) 
     432                 { 
     433                   SuperClassWriter::addVariable(areaId, NC_FLOAT, dim0); 
     434                   SuperClassWriter::addAttribute("units", StdString("m2"), &areaId); 
     435                 } 
     436 
    389437                 SuperClassWriter::definition_end(); 
    390438 
     
    397445                   SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0); 
    398446                 } 
     447 
     448                 if (domain->hasArea) 
     449                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0); 
     450 
    399451                 SuperClassWriter::definition_start(); 
    400452                 break ; 
     
    426478                 } 
    427479 
     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 
    428488                 SuperClassWriter::definition_end(); 
    429489 
     
    456516                 } 
    457517 
     518                 if (domain->hasArea) 
     519                   SuperClassWriter::writeData(domain->area_srv, areaId, isCollective, 0, &start, &count); 
    458520 
    459521                 SuperClassWriter::definition_start(); 
     
    607669         StdString dimXid,dimYid; 
    608670         std::deque<StdString> dimIdList, dimCoordList; 
     671         bool hasArea = false; 
     672         StdString cellMeasures = "area:"; 
    609673 
    610674         for (int i = 0; i < numElement; ++i) 
     
    639703                 break ; 
    640704            } 
     705            if (domain->hasArea) 
     706            { 
     707              hasArea = true; 
     708              cellMeasures += " area" + appendDomid; 
     709            } 
    641710            ++idxDomain; 
    642711           } 
     
    754823              SuperClassWriter::addAttribute("interval_write", duration.toString(), &fieldid); 
    755824           } 
     825 
     826           if (hasArea) 
     827             SuperClassWriter::addAttribute("cell_measures", cellMeasures, &fieldid); 
    756828 
    757829           if (!field->default_value.isEmpty()) 
Note: See TracChangeset for help on using the changeset viewer.