Changeset 609


Ignore:
Timestamp:
06/05/15 16:42:18 (9 years ago)
Author:
rlacroix
Message:

Improve CF compliance: add a new axis attribute "bounds".

Fixes ticket #67.

Location:
XIOS
Files:
22 edited

Legend:

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

    r501 r609  
    1010DECLARE_ATTRIBUTE(int,       zoom_size) 
    1111DECLARE_ENUM2(positive, up, down) 
     12 
    1213DECLARE_ARRAY(double, 1, value) 
    13  
    14  
     14DECLARE_ARRAY(double, 2 , bounds) 
  • XIOS/branchs/xios-1.0/src/interface/c_attr/icaxis_attr.cpp

    r581 r609  
    1717  typedef xios::CAxis*  axis_Ptr; 
    1818   
     19  void cxios_set_axis_bounds(axis_Ptr axis_hdl, double* bounds, int extent1, int extent2) 
     20  { 
     21    CTimer::get("XIOS").resume(); 
     22    CArray<double,2> tmp(bounds,shape(extent1,extent2),neverDeleteData) ; 
     23    axis_hdl->bounds.reference(tmp.copy()); 
     24    axis_hdl->sendAttributToServer(axis_hdl->bounds); 
     25     CTimer::get("XIOS").suspend(); 
     26  } 
     27   
     28  void cxios_get_axis_bounds(axis_Ptr axis_hdl, double* bounds, int extent1, int extent2) 
     29  { 
     30    CTimer::get("XIOS").resume(); 
     31    CArray<double,2> tmp(bounds,shape(extent1,extent2),neverDeleteData) ; 
     32    tmp=axis_hdl->bounds.getInheritedValue() ; 
     33     CTimer::get("XIOS").suspend(); 
     34  } 
     35   
     36  bool cxios_is_defined_axis_bounds(axis_Ptr axis_hdl ) 
     37  { 
     38    CTimer::get("XIOS").resume(); 
     39    bool isDefined = axis_hdl->bounds.hasInheritedValue(); 
     40    CTimer::get("XIOS").suspend(); 
     41    return isDefined; 
     42  } 
     43   
     44   
     45   
    1946  void cxios_set_axis_long_name(axis_Ptr axis_hdl, const char * long_name, int long_name_size) 
    2047  { 
  • XIOS/branchs/xios-1.0/src/interface/c_attr/icaxisgroup_attr.cpp

    r581 r609  
    1717  typedef xios::CAxisGroup*  axisgroup_Ptr; 
    1818   
     19  void cxios_set_axisgroup_bounds(axisgroup_Ptr axisgroup_hdl, double* bounds, int extent1, int extent2) 
     20  { 
     21    CTimer::get("XIOS").resume(); 
     22    CArray<double,2> tmp(bounds,shape(extent1,extent2),neverDeleteData) ; 
     23    axisgroup_hdl->bounds.reference(tmp.copy()); 
     24    axisgroup_hdl->sendAttributToServer(axisgroup_hdl->bounds); 
     25     CTimer::get("XIOS").suspend(); 
     26  } 
     27   
     28  void cxios_get_axisgroup_bounds(axisgroup_Ptr axisgroup_hdl, double* bounds, int extent1, int extent2) 
     29  { 
     30    CTimer::get("XIOS").resume(); 
     31    CArray<double,2> tmp(bounds,shape(extent1,extent2),neverDeleteData) ; 
     32    tmp=axisgroup_hdl->bounds.getInheritedValue() ; 
     33     CTimer::get("XIOS").suspend(); 
     34  } 
     35   
     36  bool cxios_is_defined_axisgroup_bounds(axisgroup_Ptr axisgroup_hdl ) 
     37  { 
     38    CTimer::get("XIOS").resume(); 
     39    bool isDefined = axisgroup_hdl->bounds.hasInheritedValue(); 
     40    CTimer::get("XIOS").suspend(); 
     41    return isDefined; 
     42  } 
     43   
     44   
     45   
    1946  void cxios_set_axisgroup_group_ref(axisgroup_Ptr axisgroup_hdl, const char * group_ref, int group_ref_size) 
    2047  { 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/axis_interface_attr.f90

    r501 r609  
    99     
    1010     
     11    SUBROUTINE cxios_set_axis_bounds(axis_hdl, bounds, extent1, extent2) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE       :: axis_hdl 
     14      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     15      INTEGER (kind = C_INT), VALUE  :: extent1 
     16      INTEGER (kind = C_INT), VALUE  :: extent2 
     17    END SUBROUTINE cxios_set_axis_bounds 
     18     
     19    SUBROUTINE cxios_get_axis_bounds(axis_hdl, bounds, extent1, extent2) BIND(C) 
     20      USE ISO_C_BINDING 
     21      INTEGER (kind = C_INTPTR_T), VALUE       :: axis_hdl 
     22      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     23      INTEGER (kind = C_INT), VALUE  :: extent1 
     24      INTEGER (kind = C_INT), VALUE  :: extent2 
     25    END SUBROUTINE cxios_get_axis_bounds 
     26     
     27    FUNCTION cxios_is_defined_axis_bounds(axis_hdl ) BIND(C) 
     28      USE ISO_C_BINDING 
     29      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axis_bounds 
     30      INTEGER (kind = C_INTPTR_T), VALUE :: axis_hdl 
     31    END FUNCTION cxios_is_defined_axis_bounds 
     32     
     33     
    1134    SUBROUTINE cxios_set_axis_long_name(axis_hdl, long_name, long_name_size) BIND(C) 
    1235      USE ISO_C_BINDING 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/axisgroup_interface_attr.f90

    r501 r609  
    99     
    1010     
     11    SUBROUTINE cxios_set_axisgroup_bounds(axisgroup_hdl, bounds, extent1, extent2) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE       :: axisgroup_hdl 
     14      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     15      INTEGER (kind = C_INT), VALUE  :: extent1 
     16      INTEGER (kind = C_INT), VALUE  :: extent2 
     17    END SUBROUTINE cxios_set_axisgroup_bounds 
     18     
     19    SUBROUTINE cxios_get_axisgroup_bounds(axisgroup_hdl, bounds, extent1, extent2) BIND(C) 
     20      USE ISO_C_BINDING 
     21      INTEGER (kind = C_INTPTR_T), VALUE       :: axisgroup_hdl 
     22      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     23      INTEGER (kind = C_INT), VALUE  :: extent1 
     24      INTEGER (kind = C_INT), VALUE  :: extent2 
     25    END SUBROUTINE cxios_get_axisgroup_bounds 
     26     
     27    FUNCTION cxios_is_defined_axisgroup_bounds(axisgroup_hdl ) BIND(C) 
     28      USE ISO_C_BINDING 
     29      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axisgroup_bounds 
     30      INTEGER (kind = C_INTPTR_T), VALUE :: axisgroup_hdl 
     31    END FUNCTION cxios_is_defined_axisgroup_bounds 
     32     
     33     
    1134    SUBROUTINE cxios_set_axisgroup_group_ref(axisgroup_hdl, group_ref, group_ref_size) BIND(C) 
    1235      USE ISO_C_BINDING 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/iaxis_attr.F90

    r501 r609  
    1212   
    1313  SUBROUTINE xios(set_axis_attr)  & 
    14     ( axis_id, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
     14    ( axis_id, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    1515    , zoom_size ) 
    1616     
     
    1818      TYPE(txios(axis))  :: axis_hdl 
    1919      CHARACTER(LEN=*), INTENT(IN) ::axis_id 
     20      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    2021      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
    2122      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
     
    3132      CALL xios(get_axis_handle)(axis_id,axis_hdl) 
    3233      CALL xios(set_axis_attr_hdl_)   & 
    33       ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    34       , zoom_size ) 
     34      ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     35      , zoom_end, zoom_size ) 
    3536     
    3637  END SUBROUTINE xios(set_axis_attr) 
    3738   
    3839  SUBROUTINE xios(set_axis_attr_hdl)  & 
    39     ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    40     , zoom_size ) 
    41      
    42     IMPLICIT NONE 
    43       TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     40    ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     41    , zoom_end, zoom_size ) 
     42     
     43    IMPLICIT NONE 
     44      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     45      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    4446      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
    4547      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
     
    5456       
    5557      CALL xios(set_axis_attr_hdl_)  & 
    56       ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    57       , zoom_size ) 
     58      ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     59      , zoom_end, zoom_size ) 
    5860     
    5961  END SUBROUTINE xios(set_axis_attr_hdl) 
    6062   
    6163  SUBROUTINE xios(set_axis_attr_hdl_)   & 
    62     ( axis_hdl, long_name_, name_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
     64    ( axis_hdl, bounds_, long_name_, name_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
    6365    , zoom_end_, zoom_size_ ) 
    6466     
    6567    IMPLICIT NONE 
    6668      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     69      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_(:,:) 
    6770      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_ 
    6871      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ 
     
    7679      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_size_ 
    7780       
     81      IF (PRESENT(bounds_)) THEN 
     82        CALL cxios_set_axis_bounds(axis_hdl%daddr, bounds_,size(bounds_,1),size(bounds_,2)) 
     83      ENDIF 
     84       
    7885      IF (PRESENT(long_name_)) THEN 
    7986        CALL cxios_set_axis_long_name(axis_hdl%daddr, long_name_, len(long_name_)) 
     
    121128   
    122129  SUBROUTINE xios(get_axis_attr)  & 
    123     ( axis_id, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
     130    ( axis_id, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    124131    , zoom_size ) 
    125132     
     
    127134      TYPE(txios(axis))  :: axis_hdl 
    128135      CHARACTER(LEN=*), INTENT(IN) ::axis_id 
     136      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    129137      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
    130138      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
     
    140148      CALL xios(get_axis_handle)(axis_id,axis_hdl) 
    141149      CALL xios(get_axis_attr_hdl_)   & 
    142       ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    143       , zoom_size ) 
     150      ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     151      , zoom_end, zoom_size ) 
    144152     
    145153  END SUBROUTINE xios(get_axis_attr) 
    146154   
    147155  SUBROUTINE xios(get_axis_attr_hdl)  & 
    148     ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    149     , zoom_size ) 
    150      
    151     IMPLICIT NONE 
    152       TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     156    ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     157    , zoom_end, zoom_size ) 
     158     
     159    IMPLICIT NONE 
     160      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     161      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    153162      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
    154163      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
     
    163172       
    164173      CALL xios(get_axis_attr_hdl_)  & 
    165       ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    166       , zoom_size ) 
     174      ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     175      , zoom_end, zoom_size ) 
    167176     
    168177  END SUBROUTINE xios(get_axis_attr_hdl) 
    169178   
    170179  SUBROUTINE xios(get_axis_attr_hdl_)   & 
    171     ( axis_hdl, long_name_, name_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
     180    ( axis_hdl, bounds_, long_name_, name_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
    172181    , zoom_end_, zoom_size_ ) 
    173182     
    174183    IMPLICIT NONE 
    175184      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     185      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_(:,:) 
    176186      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_ 
    177187      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ 
     
    185195      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_size_ 
    186196       
     197      IF (PRESENT(bounds_)) THEN 
     198        CALL cxios_get_axis_bounds(axis_hdl%daddr, bounds_,size(bounds_,1),size(bounds_,2)) 
     199      ENDIF 
     200       
    187201      IF (PRESENT(long_name_)) THEN 
    188202        CALL cxios_get_axis_long_name(axis_hdl%daddr, long_name_, len(long_name_)) 
     
    230244   
    231245  SUBROUTINE xios(is_defined_axis_attr)  & 
    232     ( axis_id, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
     246    ( axis_id, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    233247    , zoom_size ) 
    234248     
     
    236250      TYPE(txios(axis))  :: axis_hdl 
    237251      CHARACTER(LEN=*), INTENT(IN) ::axis_id 
     252      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     253      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    238254      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name 
    239255      LOGICAL(KIND=C_BOOL) :: long_name_tmp 
     
    259275      CALL xios(get_axis_handle)(axis_id,axis_hdl) 
    260276      CALL xios(is_defined_axis_attr_hdl_)   & 
    261       ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    262       , zoom_size ) 
     277      ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     278      , zoom_end, zoom_size ) 
    263279     
    264280  END SUBROUTINE xios(is_defined_axis_attr) 
    265281   
    266282  SUBROUTINE xios(is_defined_axis_attr_hdl)  & 
    267     ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    268     , zoom_size ) 
    269      
    270     IMPLICIT NONE 
    271       TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     283    ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     284    , zoom_end, zoom_size ) 
     285     
     286    IMPLICIT NONE 
     287      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     288      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     289      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    272290      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name 
    273291      LOGICAL(KIND=C_BOOL) :: long_name_tmp 
     
    292310       
    293311      CALL xios(is_defined_axis_attr_hdl_)  & 
    294       ( axis_hdl, long_name, name, positive, size, standard_name, unit, value, zoom_begin, zoom_end  & 
    295       , zoom_size ) 
     312      ( axis_hdl, bounds, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
     313      , zoom_end, zoom_size ) 
    296314     
    297315  END SUBROUTINE xios(is_defined_axis_attr_hdl) 
    298316   
    299317  SUBROUTINE xios(is_defined_axis_attr_hdl_)   & 
    300     ( axis_hdl, long_name_, name_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
     318    ( axis_hdl, bounds_, long_name_, name_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
    301319    , zoom_end_, zoom_size_ ) 
    302320     
    303321    IMPLICIT NONE 
    304322      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
     323      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_ 
     324      LOGICAL(KIND=C_BOOL) :: bounds__tmp 
    305325      LOGICAL, OPTIONAL, INTENT(OUT) :: long_name_ 
    306326      LOGICAL(KIND=C_BOOL) :: long_name__tmp 
     
    324344      LOGICAL(KIND=C_BOOL) :: zoom_size__tmp 
    325345       
     346      IF (PRESENT(bounds_)) THEN 
     347        bounds__tmp=cxios_is_defined_axis_bounds(axis_hdl%daddr) 
     348        bounds_=bounds__tmp 
     349      ENDIF 
     350       
    326351      IF (PRESENT(long_name_)) THEN 
    327352        long_name__tmp=cxios_is_defined_axis_long_name(axis_hdl%daddr) 
  • XIOS/branchs/xios-1.0/src/interface/fortran_attr/iaxisgroup_attr.F90

    r501 r609  
    1212   
    1313  SUBROUTINE xios(set_axisgroup_attr)  & 
    14     ( axisgroup_id, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    15     , zoom_end, zoom_size ) 
     14    ( axisgroup_id, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     15    , zoom_begin, zoom_end, zoom_size ) 
    1616     
    1717    IMPLICIT NONE 
    1818      TYPE(txios(axisgroup))  :: axisgroup_hdl 
    1919      CHARACTER(LEN=*), INTENT(IN) ::axisgroup_id 
     20      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    2021      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
    2122      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
     
    3233      CALL xios(get_axisgroup_handle)(axisgroup_id,axisgroup_hdl) 
    3334      CALL xios(set_axisgroup_attr_hdl_)   & 
    34       ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    35       , zoom_end, zoom_size ) 
     35      ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     36      , zoom_begin, zoom_end, zoom_size ) 
    3637     
    3738  END SUBROUTINE xios(set_axisgroup_attr) 
    3839   
    3940  SUBROUTINE xios(set_axisgroup_attr_hdl)  & 
    40     ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    41     , zoom_end, zoom_size ) 
    42      
    43     IMPLICIT NONE 
    44       TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     41    ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     42    , zoom_begin, zoom_end, zoom_size ) 
     43     
     44    IMPLICIT NONE 
     45      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     46      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    4547      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
    4648      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
     
    5658       
    5759      CALL xios(set_axisgroup_attr_hdl_)  & 
    58       ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    59       , zoom_end, zoom_size ) 
     60      ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     61      , zoom_begin, zoom_end, zoom_size ) 
    6062     
    6163  END SUBROUTINE xios(set_axisgroup_attr_hdl) 
    6264   
    6365  SUBROUTINE xios(set_axisgroup_attr_hdl_)   & 
    64     ( axisgroup_hdl, group_ref_, long_name_, name_, positive_, size_, standard_name_, unit_, value_  & 
    65     , zoom_begin_, zoom_end_, zoom_size_ ) 
    66      
    67     IMPLICIT NONE 
    68       TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     66    ( axisgroup_hdl, bounds_, group_ref_, long_name_, name_, positive_, size_, standard_name_, unit_  & 
     67    , value_, zoom_begin_, zoom_end_, zoom_size_ ) 
     68     
     69    IMPLICIT NONE 
     70      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     71      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_(:,:) 
    6972      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref_ 
    7073      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_ 
     
    7982      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_size_ 
    8083       
     84      IF (PRESENT(bounds_)) THEN 
     85        CALL cxios_set_axisgroup_bounds(axisgroup_hdl%daddr, bounds_,size(bounds_,1),size(bounds_,2)) 
     86      ENDIF 
     87       
    8188      IF (PRESENT(group_ref_)) THEN 
    8289        CALL cxios_set_axisgroup_group_ref(axisgroup_hdl%daddr, group_ref_, len(group_ref_)) 
     
    128135   
    129136  SUBROUTINE xios(get_axisgroup_attr)  & 
    130     ( axisgroup_id, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    131     , zoom_end, zoom_size ) 
     137    ( axisgroup_id, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     138    , zoom_begin, zoom_end, zoom_size ) 
    132139     
    133140    IMPLICIT NONE 
    134141      TYPE(txios(axisgroup))  :: axisgroup_hdl 
    135142      CHARACTER(LEN=*), INTENT(IN) ::axisgroup_id 
     143      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    136144      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
    137145      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
     
    148156      CALL xios(get_axisgroup_handle)(axisgroup_id,axisgroup_hdl) 
    149157      CALL xios(get_axisgroup_attr_hdl_)   & 
    150       ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    151       , zoom_end, zoom_size ) 
     158      ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     159      , zoom_begin, zoom_end, zoom_size ) 
    152160     
    153161  END SUBROUTINE xios(get_axisgroup_attr) 
    154162   
    155163  SUBROUTINE xios(get_axisgroup_attr_hdl)  & 
    156     ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    157     , zoom_end, zoom_size ) 
    158      
    159     IMPLICIT NONE 
    160       TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     164    ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     165    , zoom_begin, zoom_end, zoom_size ) 
     166     
     167    IMPLICIT NONE 
     168      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     169      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    161170      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
    162171      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
     
    172181       
    173182      CALL xios(get_axisgroup_attr_hdl_)  & 
    174       ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    175       , zoom_end, zoom_size ) 
     183      ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     184      , zoom_begin, zoom_end, zoom_size ) 
    176185     
    177186  END SUBROUTINE xios(get_axisgroup_attr_hdl) 
    178187   
    179188  SUBROUTINE xios(get_axisgroup_attr_hdl_)   & 
    180     ( axisgroup_hdl, group_ref_, long_name_, name_, positive_, size_, standard_name_, unit_, value_  & 
    181     , zoom_begin_, zoom_end_, zoom_size_ ) 
    182      
    183     IMPLICIT NONE 
    184       TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     189    ( axisgroup_hdl, bounds_, group_ref_, long_name_, name_, positive_, size_, standard_name_, unit_  & 
     190    , value_, zoom_begin_, zoom_end_, zoom_size_ ) 
     191     
     192    IMPLICIT NONE 
     193      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     194      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_(:,:) 
    185195      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref_ 
    186196      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_ 
     
    195205      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_size_ 
    196206       
     207      IF (PRESENT(bounds_)) THEN 
     208        CALL cxios_get_axisgroup_bounds(axisgroup_hdl%daddr, bounds_,size(bounds_,1),size(bounds_,2)) 
     209      ENDIF 
     210       
    197211      IF (PRESENT(group_ref_)) THEN 
    198212        CALL cxios_get_axisgroup_group_ref(axisgroup_hdl%daddr, group_ref_, len(group_ref_)) 
     
    244258   
    245259  SUBROUTINE xios(is_defined_axisgroup_attr)  & 
    246     ( axisgroup_id, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    247     , zoom_end, zoom_size ) 
     260    ( axisgroup_id, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     261    , zoom_begin, zoom_end, zoom_size ) 
    248262     
    249263    IMPLICIT NONE 
    250264      TYPE(txios(axisgroup))  :: axisgroup_hdl 
    251265      CHARACTER(LEN=*), INTENT(IN) ::axisgroup_id 
     266      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     267      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    252268      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref 
    253269      LOGICAL(KIND=C_BOOL) :: group_ref_tmp 
     
    275291      CALL xios(get_axisgroup_handle)(axisgroup_id,axisgroup_hdl) 
    276292      CALL xios(is_defined_axisgroup_attr_hdl_)   & 
    277       ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    278       , zoom_end, zoom_size ) 
     293      ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     294      , zoom_begin, zoom_end, zoom_size ) 
    279295     
    280296  END SUBROUTINE xios(is_defined_axisgroup_attr) 
    281297   
    282298  SUBROUTINE xios(is_defined_axisgroup_attr_hdl)  & 
    283     ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    284     , zoom_end, zoom_size ) 
    285      
    286     IMPLICIT NONE 
    287       TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     299    ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     300    , zoom_begin, zoom_end, zoom_size ) 
     301     
     302    IMPLICIT NONE 
     303      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     304      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     305      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    288306      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref 
    289307      LOGICAL(KIND=C_BOOL) :: group_ref_tmp 
     
    310328       
    311329      CALL xios(is_defined_axisgroup_attr_hdl_)  & 
    312       ( axisgroup_hdl, group_ref, long_name, name, positive, size, standard_name, unit, value, zoom_begin  & 
    313       , zoom_end, zoom_size ) 
     330      ( axisgroup_hdl, bounds, group_ref, long_name, name, positive, size, standard_name, unit, value  & 
     331      , zoom_begin, zoom_end, zoom_size ) 
    314332     
    315333  END SUBROUTINE xios(is_defined_axisgroup_attr_hdl) 
    316334   
    317335  SUBROUTINE xios(is_defined_axisgroup_attr_hdl_)   & 
    318     ( axisgroup_hdl, group_ref_, long_name_, name_, positive_, size_, standard_name_, unit_, value_  & 
    319     , zoom_begin_, zoom_end_, zoom_size_ ) 
    320      
    321     IMPLICIT NONE 
    322       TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     336    ( axisgroup_hdl, bounds_, group_ref_, long_name_, name_, positive_, size_, standard_name_, unit_  & 
     337    , value_, zoom_begin_, zoom_end_, zoom_size_ ) 
     338     
     339    IMPLICIT NONE 
     340      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
     341      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_ 
     342      LOGICAL(KIND=C_BOOL) :: bounds__tmp 
    323343      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref_ 
    324344      LOGICAL(KIND=C_BOOL) :: group_ref__tmp 
     
    344364      LOGICAL(KIND=C_BOOL) :: zoom_size__tmp 
    345365       
     366      IF (PRESENT(bounds_)) THEN 
     367        bounds__tmp=cxios_is_defined_axisgroup_bounds(axisgroup_hdl%daddr) 
     368        bounds_=bounds__tmp 
     369      ENDIF 
     370       
    346371      IF (PRESENT(group_ref_)) THEN 
    347372        group_ref__tmp=cxios_is_defined_axisgroup_group_ref(axisgroup_hdl%daddr) 
  • XIOS/branchs/xios-1.0/src/node/axis.cpp

    r566 r609  
    8080               << "The array \'value\' of axis [ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] has a different size that the one defined by the \'size\' attribute"); 
    8181 
     82      if (!bounds.isEmpty()) 
     83      { 
     84        if (bounds.extent(0) != size || bounds.extent(1) != 2) 
     85            ERROR("CAxis::checkAttributes(void)", 
     86                  << "The bounds array of the axis [ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] must be of dimension axis size x 2" << endl 
     87                  << "Axis size is " << size << endl 
     88                  << "Bounds size is "<< bounds.extent(0) << " x " << bounds.extent(1)); 
     89      } 
     90 
    8291      this->isChecked = true; 
    8392   } 
  • XIOS/branchs/xios-1.0/src/node/file.cpp

    r589 r609  
    183183 
    184184      allDomainEmpty=true ; 
    185       set<CDomain*> setDomain ; 
     185      set<CAxis*> setAxis; 
     186      set<CDomain*> setDomains; 
    186187 
    187188      std::vector<CField*>::iterator it, end = this->enabledFields.end(); 
    188       for (it = this->enabledFields.begin() ;it != end; it++) 
     189      for (it = this->enabledFields.begin(); it != end; it++) 
    189190      { 
    190191         CField* field = *it; 
    191          allDomainEmpty&=field->grid->domain->isEmpty() ; 
    192          setDomain.insert(field->grid->domain) ; 
    193       } 
    194       nbDomain=setDomain.size() ; 
     192         allDomainEmpty&=field->grid->domain->isEmpty(); 
     193         setAxis.insert(field->grid->axis); 
     194         setDomains.insert(field->grid->domain); 
     195      } 
     196      nbAxis = setAxis.size(); 
     197      nbDomains = setDomains.size(); 
    195198 
    196199      // create sub communicator for file   
  • XIOS/branchs/xios-1.0/src/node/file.hpp

    r501 r609  
    130130         CDuration splitFreq ; 
    131131         CDuration outputFreq ; 
    132          int nbDomain ; 
     132         int nbAxis, nbDomains; 
    133133         bool isOpen ; 
    134134         MPI_Comm fileComm ; 
  • XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp

    r607 r609  
    482482         if (axis->IsWritten(this->filename)) return; 
    483483         axis->checkAttributes(); 
    484          StdSize zoom_size=axis->zoom_size.getValue() ; 
    485          StdSize zoom_begin=axis->zoom_begin.getValue()-1 ; 
     484         int zoom_size = axis->zoom_size.getValue(); 
     485         int zoom_begin = axis->zoom_begin.getValue() - 1; 
    486486 
    487487 
     
    516516                       ("units", axis->unit.getValue(), &axisid); 
    517517 
    518                 if (!axis->positive.isEmpty()) 
    519                   if (axis->positive==CAxis::positive_attr::up) SuperClassWriter::addAttribute("positive", string("up"), &axisid); 
    520                   else   SuperClassWriter::addAttribute("positive", string("down"), &axisid); 
     518                 if (!axis->positive.isEmpty()) 
     519                   if (axis->positive==CAxis::positive_attr::up) SuperClassWriter::addAttribute("positive", string("up"), &axisid); 
     520                   else SuperClassWriter::addAttribute("positive", string("down"), &axisid); 
     521 
     522                 StdString axisBoundsId = axisid + "_bounds"; 
     523                 if (!axis->bounds.isEmpty()) 
     524                 { 
     525                   dims.push_back("axis_nbounds"); 
     526                   SuperClassWriter::addVariable(axisBoundsId, NC_FLOAT, dims); 
     527                   SuperClassWriter::addAttribute("bounds", axisBoundsId, &axisid); 
     528                 } 
    521529 
    522530                 SuperClassWriter::definition_end(); 
    523531 
    524                  CArray<double,1> axis_value(zoom_size) ; 
    525                  for(StdSize i = 0 ; i < zoom_size ; i++) axis_value(i)=axis->value(i+zoom_begin) ; 
     532                 CArray<double,1> axis_value(zoom_size); 
     533                 for(int i = 0 ; i < zoom_size; i++) axis_value(i) = axis->value(i+zoom_begin); 
    526534                 SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
     535 
     536                 if (!axis->bounds.isEmpty()) 
     537                 { 
     538                   CArray<double,2> axisBounds(zoom_size, 2); 
     539                   for (int i = 0; i < zoom_size; i++) 
     540                   { 
     541                     axisBounds(i, 0) = axis->bounds(i + zoom_begin, 0); 
     542                     axisBounds(i, 1) = axis->bounds(i + zoom_begin, 1); 
     543                   } 
     544                   SuperClassWriter::writeData(axisBounds, axisBoundsId, isCollective, 0); 
     545                 } 
    527546 
    528547                 SuperClassWriter::definition_start(); 
     
    779798                               ? file->description.getValue() 
    780799                               : StdString("Created by xios"); 
     800 
     801         singleDomain = (file->nbDomains == 1); 
     802 
    781803         try 
    782804         { 
    783805           this->writeFileAttributes(filename, description, 
    784                                      StdString ("CF-1.1"), 
     806                                     StdString("CF-1.1"), 
    785807                                     StdString("An IPSL model"), 
    786808                                     this->getTimeStamp()); 
     809 
     810           if (file->nbAxis >= 1) 
     811             SuperClassWriter::addDimension("axis_nbounds", 2); 
    787812         } 
    788813         catch (CNetCdfException& e) 
     
    796821           ERROR("CNc4DataOutput::writeFile_ (CFile* file)", << msg); 
    797822         } 
    798          if (file->nbDomain==1) singleDomain=true ; 
    799          else singleDomain=false ; 
    800823      } 
    801824 
  • XIOS/trunk/src/config/axis_attribute.conf

    r551 r609  
    2525/* LOCAL */ 
    2626DECLARE_ARRAY(bool, 1 , mask) 
     27DECLARE_ARRAY(double, 2 , bounds) 
  • XIOS/trunk/src/interface/c_attr/icaxis_attr.cpp

    r591 r609  
    4444 
    4545 
     46  void cxios_set_axis_bounds(axis_Ptr axis_hdl, double* bounds, int extent1, int extent2) 
     47  { 
     48    CTimer::get("XIOS").resume(); 
     49    CArray<double,2> tmp(bounds, shape(extent1, extent2), neverDeleteData); 
     50    axis_hdl->bounds.reference(tmp.copy()); 
     51     CTimer::get("XIOS").suspend(); 
     52  } 
     53 
     54  void cxios_get_axis_bounds(axis_Ptr axis_hdl, double* bounds, int extent1, int extent2) 
     55  { 
     56    CTimer::get("XIOS").resume(); 
     57    CArray<double,2> tmp(bounds, shape(extent1, extent2), neverDeleteData); 
     58    tmp=axis_hdl->bounds.getInheritedValue(); 
     59     CTimer::get("XIOS").suspend(); 
     60  } 
     61 
     62  bool cxios_is_defined_axis_bounds(axis_Ptr axis_hdl) 
     63  { 
     64     CTimer::get("XIOS").resume(); 
     65     bool isDefined = axis_hdl->bounds.hasInheritedValue(); 
     66     CTimer::get("XIOS").suspend(); 
     67     return isDefined; 
     68  } 
     69 
     70 
    4671  void cxios_set_axis_data_begin(axis_Ptr axis_hdl, int data_begin) 
    4772  { 
  • XIOS/trunk/src/interface/c_attr/icaxisgroup_attr.cpp

    r591 r609  
    4444 
    4545 
     46  void cxios_set_axisgroup_bounds(axisgroup_Ptr axisgroup_hdl, double* bounds, int extent1, int extent2) 
     47  { 
     48    CTimer::get("XIOS").resume(); 
     49    CArray<double,2> tmp(bounds, shape(extent1, extent2), neverDeleteData); 
     50    axisgroup_hdl->bounds.reference(tmp.copy()); 
     51     CTimer::get("XIOS").suspend(); 
     52  } 
     53 
     54  void cxios_get_axisgroup_bounds(axisgroup_Ptr axisgroup_hdl, double* bounds, int extent1, int extent2) 
     55  { 
     56    CTimer::get("XIOS").resume(); 
     57    CArray<double,2> tmp(bounds, shape(extent1, extent2), neverDeleteData); 
     58    tmp=axisgroup_hdl->bounds.getInheritedValue(); 
     59     CTimer::get("XIOS").suspend(); 
     60  } 
     61 
     62  bool cxios_is_defined_axisgroup_bounds(axisgroup_Ptr axisgroup_hdl) 
     63  { 
     64     CTimer::get("XIOS").resume(); 
     65     bool isDefined = axisgroup_hdl->bounds.hasInheritedValue(); 
     66     CTimer::get("XIOS").suspend(); 
     67     return isDefined; 
     68  } 
     69 
     70 
    4671  void cxios_set_axisgroup_data_begin(axisgroup_Ptr axisgroup_hdl, int data_begin) 
    4772  { 
  • XIOS/trunk/src/interface/fortran_attr/axis_interface_attr.F90

    r581 r609  
    3131 
    3232 
     33    SUBROUTINE cxios_set_axis_bounds(axis_hdl, bounds, extent1, extent2) BIND(C) 
     34      USE ISO_C_BINDING 
     35      INTEGER (kind = C_INTPTR_T), VALUE       :: axis_hdl 
     36      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     37      INTEGER (kind = C_INT), VALUE  :: extent1 
     38      INTEGER (kind = C_INT), VALUE  :: extent2 
     39    END SUBROUTINE cxios_set_axis_bounds 
     40 
     41    SUBROUTINE cxios_get_axis_bounds(axis_hdl, bounds, extent1, extent2) BIND(C) 
     42      USE ISO_C_BINDING 
     43      INTEGER (kind = C_INTPTR_T), VALUE       :: axis_hdl 
     44      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     45      INTEGER (kind = C_INT), VALUE  :: extent1 
     46      INTEGER (kind = C_INT), VALUE  :: extent2 
     47    END SUBROUTINE cxios_get_axis_bounds 
     48 
     49    FUNCTION cxios_is_defined_axis_bounds(axis_hdl) BIND(C) 
     50      USE ISO_C_BINDING 
     51      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axis_bounds 
     52      INTEGER (kind = C_INTPTR_T), VALUE :: axis_hdl 
     53    END FUNCTION cxios_is_defined_axis_bounds 
     54 
     55 
    3356    SUBROUTINE cxios_set_axis_data_begin(axis_hdl, data_begin) BIND(C) 
    3457      USE ISO_C_BINDING 
  • XIOS/trunk/src/interface/fortran_attr/axisgroup_interface_attr.F90

    r581 r609  
    3131 
    3232 
     33    SUBROUTINE cxios_set_axisgroup_bounds(axisgroup_hdl, bounds, extent1, extent2) BIND(C) 
     34      USE ISO_C_BINDING 
     35      INTEGER (kind = C_INTPTR_T), VALUE       :: axisgroup_hdl 
     36      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     37      INTEGER (kind = C_INT), VALUE  :: extent1 
     38      INTEGER (kind = C_INT), VALUE  :: extent2 
     39    END SUBROUTINE cxios_set_axisgroup_bounds 
     40 
     41    SUBROUTINE cxios_get_axisgroup_bounds(axisgroup_hdl, bounds, extent1, extent2) BIND(C) 
     42      USE ISO_C_BINDING 
     43      INTEGER (kind = C_INTPTR_T), VALUE       :: axisgroup_hdl 
     44      REAL (KIND=C_DOUBLE)     , DIMENSION(*) :: bounds 
     45      INTEGER (kind = C_INT), VALUE  :: extent1 
     46      INTEGER (kind = C_INT), VALUE  :: extent2 
     47    END SUBROUTINE cxios_get_axisgroup_bounds 
     48 
     49    FUNCTION cxios_is_defined_axisgroup_bounds(axisgroup_hdl) BIND(C) 
     50      USE ISO_C_BINDING 
     51      LOGICAL(kind=C_BOOL) :: cxios_is_defined_axisgroup_bounds 
     52      INTEGER (kind = C_INTPTR_T), VALUE :: axisgroup_hdl 
     53    END FUNCTION cxios_is_defined_axisgroup_bounds 
     54 
     55 
    3356    SUBROUTINE cxios_set_axisgroup_data_begin(axisgroup_hdl, data_begin) BIND(C) 
    3457      USE ISO_C_BINDING 
  • XIOS/trunk/src/interface/fortran_attr/iaxis_attr.F90

    r581 r609  
    1212 
    1313  SUBROUTINE xios(set_axis_attr)  & 
    14     ( axis_id, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    15     , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     14    ( axis_id, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni  & 
     15    , positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    1616 
    1717    IMPLICIT NONE 
     
    1919      CHARACTER(LEN=*), INTENT(IN) ::axis_id 
    2020      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
     21      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    2122      INTEGER  , OPTIONAL, INTENT(IN) :: data_begin 
    2223      INTEGER  , OPTIONAL, INTENT(IN) :: data_index(:) 
     
    3940      CALL xios(get_axis_handle)(axis_id,axis_hdl) 
    4041      CALL xios(set_axis_attr_hdl_)   & 
    41       ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    42       , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     42      ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     43      , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    4344 
    4445  END SUBROUTINE xios(set_axis_attr) 
    4546 
    4647  SUBROUTINE xios(set_axis_attr_hdl)  & 
    47     ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    48     , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     48    ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     49    , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    4950 
    5051    IMPLICIT NONE 
    5152      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
    5253      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
     54      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    5355      INTEGER  , OPTIONAL, INTENT(IN) :: data_begin 
    5456      INTEGER  , OPTIONAL, INTENT(IN) :: data_index(:) 
     
    7072 
    7173      CALL xios(set_axis_attr_hdl_)  & 
    72       ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    73       , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     74      ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     75      , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    7476 
    7577  END SUBROUTINE xios(set_axis_attr_hdl) 
    7678 
    7779  SUBROUTINE xios(set_axis_attr_hdl_)   & 
    78     ( axis_hdl, axis_ref_, data_begin_, data_index_, data_n_, ibegin_, long_name_, mask_, name_  & 
    79     , ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_, zoom_size_ ) 
     80    ( axis_hdl, axis_ref_, bounds_, data_begin_, data_index_, data_n_, ibegin_, long_name_, mask_  & 
     81    , name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_, zoom_size_  & 
     82     ) 
    8083 
    8184    IMPLICIT NONE 
    8285      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
    8386      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref_ 
     87      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_(:,:) 
    8488      INTEGER  , OPTIONAL, INTENT(IN) :: data_begin_ 
    8589      INTEGER  , OPTIONAL, INTENT(IN) :: data_index_(:) 
     
    104108      ENDIF 
    105109 
     110      IF (PRESENT(bounds_)) THEN 
     111        CALL cxios_set_axis_bounds(axis_hdl%daddr, bounds_, size(bounds_,1), size(bounds_,2)) 
     112      ENDIF 
     113 
    106114      IF (PRESENT(data_begin_)) THEN 
    107115        CALL cxios_set_axis_data_begin(axis_hdl%daddr, data_begin_) 
     
    173181 
    174182  SUBROUTINE xios(get_axis_attr)  & 
    175     ( axis_id, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    176     , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     183    ( axis_id, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni  & 
     184    , positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    177185 
    178186    IMPLICIT NONE 
     
    180188      CHARACTER(LEN=*), INTENT(IN) ::axis_id 
    181189      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
     190      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    182191      INTEGER  , OPTIONAL, INTENT(OUT) :: data_begin 
    183192      INTEGER  , OPTIONAL, INTENT(OUT) :: data_index(:) 
     
    200209      CALL xios(get_axis_handle)(axis_id,axis_hdl) 
    201210      CALL xios(get_axis_attr_hdl_)   & 
    202       ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    203       , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     211      ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     212      , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    204213 
    205214  END SUBROUTINE xios(get_axis_attr) 
    206215 
    207216  SUBROUTINE xios(get_axis_attr_hdl)  & 
    208     ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    209     , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     217    ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     218    , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    210219 
    211220    IMPLICIT NONE 
    212221      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
    213222      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
     223      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    214224      INTEGER  , OPTIONAL, INTENT(OUT) :: data_begin 
    215225      INTEGER  , OPTIONAL, INTENT(OUT) :: data_index(:) 
     
    231241 
    232242      CALL xios(get_axis_attr_hdl_)  & 
    233       ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    234       , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     243      ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     244      , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    235245 
    236246  END SUBROUTINE xios(get_axis_attr_hdl) 
    237247 
    238248  SUBROUTINE xios(get_axis_attr_hdl_)   & 
    239     ( axis_hdl, axis_ref_, data_begin_, data_index_, data_n_, ibegin_, long_name_, mask_, name_  & 
    240     , ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_, zoom_size_ ) 
     249    ( axis_hdl, axis_ref_, bounds_, data_begin_, data_index_, data_n_, ibegin_, long_name_, mask_  & 
     250    , name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_, zoom_size_  & 
     251     ) 
    241252 
    242253    IMPLICIT NONE 
    243254      TYPE(txios(axis)) , INTENT(IN) :: axis_hdl 
    244255      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref_ 
     256      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_(:,:) 
    245257      INTEGER  , OPTIONAL, INTENT(OUT) :: data_begin_ 
    246258      INTEGER  , OPTIONAL, INTENT(OUT) :: data_index_(:) 
     
    265277      ENDIF 
    266278 
     279      IF (PRESENT(bounds_)) THEN 
     280        CALL cxios_get_axis_bounds(axis_hdl%daddr, bounds_, size(bounds_,1), size(bounds_,2)) 
     281      ENDIF 
     282 
    267283      IF (PRESENT(data_begin_)) THEN 
    268284        CALL cxios_get_axis_data_begin(axis_hdl%daddr, data_begin_) 
     
    334350 
    335351  SUBROUTINE xios(is_defined_axis_attr)  & 
    336     ( axis_id, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    337     , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     352    ( axis_id, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni  & 
     353    , positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    338354 
    339355    IMPLICIT NONE 
     
    342358      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    343359      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     360      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     361      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    344362      LOGICAL, OPTIONAL, INTENT(OUT) :: data_begin 
    345363      LOGICAL(KIND=C_BOOL) :: data_begin_tmp 
     
    377395      CALL xios(get_axis_handle)(axis_id,axis_hdl) 
    378396      CALL xios(is_defined_axis_attr_hdl_)   & 
    379       ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    380       , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     397      ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     398      , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    381399 
    382400  END SUBROUTINE xios(is_defined_axis_attr) 
    383401 
    384402  SUBROUTINE xios(is_defined_axis_attr_hdl)  & 
    385     ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    386     , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     403    ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     404    , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    387405 
    388406    IMPLICIT NONE 
     
    390408      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    391409      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     410      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     411      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    392412      LOGICAL, OPTIONAL, INTENT(OUT) :: data_begin 
    393413      LOGICAL(KIND=C_BOOL) :: data_begin_tmp 
     
    424444 
    425445      CALL xios(is_defined_axis_attr_hdl_)  & 
    426       ( axis_hdl, axis_ref, data_begin, data_index, data_n, ibegin, long_name, mask, name, ni, positive  & 
    427       , size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     446      ( axis_hdl, axis_ref, bounds, data_begin, data_index, data_n, ibegin, long_name, mask, name  & 
     447      , ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
    428448 
    429449  END SUBROUTINE xios(is_defined_axis_attr_hdl) 
    430450 
    431451  SUBROUTINE xios(is_defined_axis_attr_hdl_)   & 
    432     ( axis_hdl, axis_ref_, data_begin_, data_index_, data_n_, ibegin_, long_name_, mask_, name_  & 
    433     , ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_, zoom_size_ ) 
     452    ( axis_hdl, axis_ref_, bounds_, data_begin_, data_index_, data_n_, ibegin_, long_name_, mask_  & 
     453    , name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_, zoom_size_  & 
     454     ) 
    434455 
    435456    IMPLICIT NONE 
     
    437458      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref_ 
    438459      LOGICAL(KIND=C_BOOL) :: axis_ref__tmp 
     460      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_ 
     461      LOGICAL(KIND=C_BOOL) :: bounds__tmp 
    439462      LOGICAL, OPTIONAL, INTENT(OUT) :: data_begin_ 
    440463      LOGICAL(KIND=C_BOOL) :: data_begin__tmp 
     
    475498      ENDIF 
    476499 
     500      IF (PRESENT(bounds_)) THEN 
     501        bounds__tmp = cxios_is_defined_axis_bounds(axis_hdl%daddr) 
     502        bounds_ = bounds__tmp 
     503      ENDIF 
     504 
    477505      IF (PRESENT(data_begin_)) THEN 
    478506        data_begin__tmp = cxios_is_defined_axis_data_begin(axis_hdl%daddr) 
  • XIOS/trunk/src/interface/fortran_attr/iaxisgroup_attr.F90

    r581 r609  
    1212 
    1313  SUBROUTINE xios(set_axisgroup_attr)  & 
    14     ( axisgroup_id, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    15     , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     14    ( axisgroup_id, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     15    , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     16     ) 
    1617 
    1718    IMPLICIT NONE 
     
    1920      CHARACTER(LEN=*), INTENT(IN) ::axisgroup_id 
    2021      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
     22      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    2123      INTEGER  , OPTIONAL, INTENT(IN) :: data_begin 
    2224      INTEGER  , OPTIONAL, INTENT(IN) :: data_index(:) 
     
    4042      CALL xios(get_axisgroup_handle)(axisgroup_id,axisgroup_hdl) 
    4143      CALL xios(set_axisgroup_attr_hdl_)   & 
    42       ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    43       , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     44      ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     45      , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     46       ) 
    4447 
    4548  END SUBROUTINE xios(set_axisgroup_attr) 
    4649 
    4750  SUBROUTINE xios(set_axisgroup_attr_hdl)  & 
    48     ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    49     , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     51    ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     52    , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     53     ) 
    5054 
    5155    IMPLICIT NONE 
    5256      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
    5357      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
     58      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds(:,:) 
    5459      INTEGER  , OPTIONAL, INTENT(IN) :: data_begin 
    5560      INTEGER  , OPTIONAL, INTENT(IN) :: data_index(:) 
     
    7277 
    7378      CALL xios(set_axisgroup_attr_hdl_)  & 
    74       ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    75       , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     79      ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     80      , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     81       ) 
    7682 
    7783  END SUBROUTINE xios(set_axisgroup_attr_hdl) 
    7884 
    7985  SUBROUTINE xios(set_axisgroup_attr_hdl_)   & 
    80     ( axisgroup_hdl, axis_ref_, data_begin_, data_index_, data_n_, group_ref_, ibegin_, long_name_  & 
    81     , mask_, name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_  & 
    82     , zoom_size_ ) 
     86    ( axisgroup_hdl, axis_ref_, bounds_, data_begin_, data_index_, data_n_, group_ref_, ibegin_  & 
     87    , long_name_, mask_, name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
     88    , zoom_end_, zoom_size_ ) 
    8389 
    8490    IMPLICIT NONE 
    8591      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
    8692      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref_ 
     93      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: bounds_(:,:) 
    8794      INTEGER  , OPTIONAL, INTENT(IN) :: data_begin_ 
    8895      INTEGER  , OPTIONAL, INTENT(IN) :: data_index_(:) 
     
    108115      ENDIF 
    109116 
     117      IF (PRESENT(bounds_)) THEN 
     118        CALL cxios_set_axisgroup_bounds(axisgroup_hdl%daddr, bounds_, size(bounds_,1), size(bounds_,2)) 
     119      ENDIF 
     120 
    110121      IF (PRESENT(data_begin_)) THEN 
    111122        CALL cxios_set_axisgroup_data_begin(axisgroup_hdl%daddr, data_begin_) 
     
    181192 
    182193  SUBROUTINE xios(get_axisgroup_attr)  & 
    183     ( axisgroup_id, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    184     , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     194    ( axisgroup_id, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     195    , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     196     ) 
    185197 
    186198    IMPLICIT NONE 
     
    188200      CHARACTER(LEN=*), INTENT(IN) ::axisgroup_id 
    189201      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
     202      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    190203      INTEGER  , OPTIONAL, INTENT(OUT) :: data_begin 
    191204      INTEGER  , OPTIONAL, INTENT(OUT) :: data_index(:) 
     
    209222      CALL xios(get_axisgroup_handle)(axisgroup_id,axisgroup_hdl) 
    210223      CALL xios(get_axisgroup_attr_hdl_)   & 
    211       ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    212       , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     224      ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     225      , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     226       ) 
    213227 
    214228  END SUBROUTINE xios(get_axisgroup_attr) 
    215229 
    216230  SUBROUTINE xios(get_axisgroup_attr_hdl)  & 
    217     ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    218     , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     231    ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     232    , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     233     ) 
    219234 
    220235    IMPLICIT NONE 
    221236      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
    222237      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
     238      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds(:,:) 
    223239      INTEGER  , OPTIONAL, INTENT(OUT) :: data_begin 
    224240      INTEGER  , OPTIONAL, INTENT(OUT) :: data_index(:) 
     
    241257 
    242258      CALL xios(get_axisgroup_attr_hdl_)  & 
    243       ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    244       , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     259      ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     260      , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     261       ) 
    245262 
    246263  END SUBROUTINE xios(get_axisgroup_attr_hdl) 
    247264 
    248265  SUBROUTINE xios(get_axisgroup_attr_hdl_)   & 
    249     ( axisgroup_hdl, axis_ref_, data_begin_, data_index_, data_n_, group_ref_, ibegin_, long_name_  & 
    250     , mask_, name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_  & 
    251     , zoom_size_ ) 
     266    ( axisgroup_hdl, axis_ref_, bounds_, data_begin_, data_index_, data_n_, group_ref_, ibegin_  & 
     267    , long_name_, mask_, name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
     268    , zoom_end_, zoom_size_ ) 
    252269 
    253270    IMPLICIT NONE 
    254271      TYPE(txios(axisgroup)) , INTENT(IN) :: axisgroup_hdl 
    255272      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref_ 
     273      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: bounds_(:,:) 
    256274      INTEGER  , OPTIONAL, INTENT(OUT) :: data_begin_ 
    257275      INTEGER  , OPTIONAL, INTENT(OUT) :: data_index_(:) 
     
    277295      ENDIF 
    278296 
     297      IF (PRESENT(bounds_)) THEN 
     298        CALL cxios_get_axisgroup_bounds(axisgroup_hdl%daddr, bounds_, size(bounds_,1), size(bounds_,2)) 
     299      ENDIF 
     300 
    279301      IF (PRESENT(data_begin_)) THEN 
    280302        CALL cxios_get_axisgroup_data_begin(axisgroup_hdl%daddr, data_begin_) 
     
    350372 
    351373  SUBROUTINE xios(is_defined_axisgroup_attr)  & 
    352     ( axisgroup_id, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    353     , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     374    ( axisgroup_id, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     375    , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     376     ) 
    354377 
    355378    IMPLICIT NONE 
     
    358381      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    359382      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     383      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     384      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    360385      LOGICAL, OPTIONAL, INTENT(OUT) :: data_begin 
    361386      LOGICAL(KIND=C_BOOL) :: data_begin_tmp 
     
    395420      CALL xios(get_axisgroup_handle)(axisgroup_id,axisgroup_hdl) 
    396421      CALL xios(is_defined_axisgroup_attr_hdl_)   & 
    397       ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    398       , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     422      ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     423      , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     424       ) 
    399425 
    400426  END SUBROUTINE xios(is_defined_axisgroup_attr) 
    401427 
    402428  SUBROUTINE xios(is_defined_axisgroup_attr_hdl)  & 
    403     ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    404     , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     429    ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     430    , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     431     ) 
    405432 
    406433    IMPLICIT NONE 
     
    408435      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    409436      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     437      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds 
     438      LOGICAL(KIND=C_BOOL) :: bounds_tmp 
    410439      LOGICAL, OPTIONAL, INTENT(OUT) :: data_begin 
    411440      LOGICAL(KIND=C_BOOL) :: data_begin_tmp 
     
    444473 
    445474      CALL xios(is_defined_axisgroup_attr_hdl_)  & 
    446       ( axisgroup_hdl, axis_ref, data_begin, data_index, data_n, group_ref, ibegin, long_name, mask  & 
    447       , name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size ) 
     475      ( axisgroup_hdl, axis_ref, bounds, data_begin, data_index, data_n, group_ref, ibegin, long_name  & 
     476      , mask, name, ni, positive, size, standard_name, unit, value, zoom_begin, zoom_end, zoom_size  & 
     477       ) 
    448478 
    449479  END SUBROUTINE xios(is_defined_axisgroup_attr_hdl) 
    450480 
    451481  SUBROUTINE xios(is_defined_axisgroup_attr_hdl_)   & 
    452     ( axisgroup_hdl, axis_ref_, data_begin_, data_index_, data_n_, group_ref_, ibegin_, long_name_  & 
    453     , mask_, name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_, zoom_end_  & 
    454     , zoom_size_ ) 
     482    ( axisgroup_hdl, axis_ref_, bounds_, data_begin_, data_index_, data_n_, group_ref_, ibegin_  & 
     483    , long_name_, mask_, name_, ni_, positive_, size_, standard_name_, unit_, value_, zoom_begin_  & 
     484    , zoom_end_, zoom_size_ ) 
    455485 
    456486    IMPLICIT NONE 
     
    458488      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref_ 
    459489      LOGICAL(KIND=C_BOOL) :: axis_ref__tmp 
     490      LOGICAL, OPTIONAL, INTENT(OUT) :: bounds_ 
     491      LOGICAL(KIND=C_BOOL) :: bounds__tmp 
    460492      LOGICAL, OPTIONAL, INTENT(OUT) :: data_begin_ 
    461493      LOGICAL(KIND=C_BOOL) :: data_begin__tmp 
     
    498530      ENDIF 
    499531 
     532      IF (PRESENT(bounds_)) THEN 
     533        bounds__tmp = cxios_is_defined_axisgroup_bounds(axisgroup_hdl%daddr) 
     534        bounds_ = bounds__tmp 
     535      ENDIF 
     536 
    500537      IF (PRESENT(data_begin_)) THEN 
    501538        data_begin__tmp = cxios_is_defined_axisgroup_data_begin(axisgroup_hdl%daddr) 
  • XIOS/trunk/src/node/axis.cpp

    r595 r609  
    9494      this->checkMask(); 
    9595      this->checkZoom(); 
     96 
     97      if (!bounds.isEmpty()) 
     98      { 
     99        if (bounds.extent(0) != size || bounds.extent(1) != 2) 
     100            ERROR("CAxis::checkAttributes(void)", 
     101                  << "The bounds array of the axis [ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] must be of dimension axis size x 2" << endl 
     102                  << "Axis size is " << size << endl 
     103                  << "Bounds size is "<< bounds.extent(0) << " x " << bounds.extent(1)); 
     104      } 
    96105   } 
    97106 
  • XIOS/trunk/src/node/file.cpp

    r599 r609  
    224224      allDomainEmpty=true ; 
    225225 
    226       set<CDomain*> setDomain ; 
     226      set<CAxis*> setAxis; 
     227      set<CDomain*> setDomains; 
    227228 
    228229      std::vector<CField*>::iterator it, end = this->enabledFields.end(); 
    229       for (it = this->enabledFields.begin() ;it != end; it++) 
     230      for (it = this->enabledFields.begin(); it != end; it++) 
    230231      { 
    231232         CField* field = *it; 
    232 //         allDomainEmpty&=field->grid->domain->isEmpty() ; 
    233          allDomainEmpty&=(!field->grid->doGridHaveDataToWrite()); 
    234          std::vector<CDomain*> vecDomain = field->grid->getDomains(); 
    235          for (int i = 0; i < vecDomain.size(); ++i) 
    236             setDomain.insert(vecDomain[i]); 
    237 //            setDomain.insert(field->grid->domain) ; 
    238       } 
    239       nbDomain=setDomain.size() ; 
     233         allDomainEmpty &= !field->grid->doGridHaveDataToWrite(); 
     234         std::vector<CAxis*> vecAxis = field->grid->getAxis(); 
     235         for (size_t i = 0; i < vecAxis.size(); ++i) 
     236            setAxis.insert(vecAxis[i]); 
     237         std::vector<CDomain*> vecDomains = field->grid->getDomains(); 
     238         for (size_t i = 0; i < vecDomains.size(); ++i) 
     239            setDomains.insert(vecDomains[i]); 
     240      } 
     241      nbAxis = setAxis.size(); 
     242      nbDomains = setDomains.size(); 
    240243 
    241244      // create sub communicator for file 
  • XIOS/trunk/src/node/file.hpp

    r599 r609  
    155155         CDate* lastSync ; 
    156156         CDate* lastSplit ; 
    157          int nbDomain ; 
     157         int nbAxis, nbDomains; 
    158158         bool isOpen ; 
    159159         bool allDomainEmpty ; 
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r607 r609  
    482482      void CNc4DataOutput::writeAxis_(CAxis* axis) 
    483483      { 
    484          if (axis->IsWritten(this->filename)) return; 
    485          axis->checkAttributes(); 
    486          StdSize zoom_size_srv=axis->zoom_size_srv; 
    487          StdSize zoom_begin_srv=axis->zoom_begin_srv; 
    488          StdSize zoom_size  = (MULTI_FILE == SuperClass::type) ? zoom_size_srv 
    489                                                               : axis->zoom_size; 
    490          StdSize zoom_begin = (MULTI_FILE == SuperClass::type) ? zoom_begin_srv 
    491                                                               : axis->zoom_begin; 
    492  
    493  
    494          std::vector<StdString> dims; 
    495          StdString axisid = (!axis->name.isEmpty()) 
    496                              ? axis->name.getValue() : axis->getId(); 
    497          try 
    498          { 
    499            SuperClassWriter::addDimension(axisid, zoom_size); 
    500            dims.push_back(axisid); 
    501  
    502            switch (SuperClass::type) 
    503            { 
    504               case (MULTI_FILE ) : 
    505               {} 
    506               case (ONE_FILE) : 
     484        if (axis->IsWritten(this->filename)) return; 
     485        axis->checkAttributes(); 
     486        int zoom_size_srv  = axis->zoom_size_srv; 
     487        int zoom_begin_srv = axis->zoom_begin_srv; 
     488        int zoom_size  = (MULTI_FILE == SuperClass::type) ? zoom_size_srv : axis->zoom_size; 
     489        int zoom_begin = (MULTI_FILE == SuperClass::type) ? zoom_begin_srv : axis->zoom_begin; 
     490 
     491 
     492        std::vector<StdString> dims; 
     493        StdString axisid = !axis->name.isEmpty() ? axis->name.getValue() : axis->getId(); 
     494        try 
     495        { 
     496          SuperClassWriter::addDimension(axisid, zoom_size); 
     497          dims.push_back(axisid); 
     498 
     499          switch (SuperClass::type) 
     500          { 
     501            case MULTI_FILE: 
     502            case ONE_FILE: 
     503            { 
     504              SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 
     505 
     506              SuperClassWriter::addAttribute("axis", StdString("Z"), &axisid); 
     507 
     508              if (!axis->name.isEmpty()) 
     509                SuperClassWriter::addAttribute("name", axis->name.getValue(), &axisid); 
     510 
     511              if (!axis->standard_name.isEmpty()) 
     512                SuperClassWriter::addAttribute("standard_name", axis->standard_name.getValue(), &axisid); 
     513 
     514              if (!axis->long_name.isEmpty()) 
     515                SuperClassWriter::addAttribute("long_name", axis->long_name.getValue(), &axisid); 
     516 
     517              if (!axis->unit.isEmpty()) 
     518                SuperClassWriter::addAttribute("units", axis->unit.getValue(), &axisid); 
     519 
     520              if (!axis->positive.isEmpty()) 
     521                if (axis->positive == CAxis::positive_attr::up) SuperClassWriter::addAttribute("positive", string("up"), &axisid); 
     522                else SuperClassWriter::addAttribute("positive", string("down"), &axisid); 
     523 
     524              StdString axisBoundsId = axisid + "_bounds"; 
     525              if (!axis->bounds.isEmpty()) 
    507526              { 
    508                  SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 
    509  
    510                  SuperClassWriter::addAttribute("axis", StdString("Z"), &axisid); 
    511  
    512                  if (!axis->name.isEmpty()) 
    513                     SuperClassWriter::addAttribute 
    514                        ("name", axis->name.getValue(), &axisid); 
    515  
    516                  if (!axis->standard_name.isEmpty()) 
    517                     SuperClassWriter::addAttribute 
    518                        ("standard_name",  axis->standard_name.getValue(), &axisid); 
    519  
    520                  if (!axis->long_name.isEmpty()) 
    521                     SuperClassWriter::addAttribute 
    522                        ("long_name", axis->long_name.getValue(), &axisid); 
    523  
    524                  if (!axis->unit.isEmpty()) 
    525                     SuperClassWriter::addAttribute 
    526                        ("units", axis->unit.getValue(), &axisid); 
    527  
    528                 if (!axis->positive.isEmpty()) 
    529                   if (axis->positive==CAxis::positive_attr::up) SuperClassWriter::addAttribute("positive", string("up"), &axisid); 
    530                   else   SuperClassWriter::addAttribute("positive", string("down"), &axisid); 
    531  
    532                  SuperClassWriter::definition_end(); 
    533  
    534                  CArray<double,1> axis_value(zoom_size) ; 
    535                  for(StdSize i = 0 ; i < zoom_size_srv ; i++) axis_value(i)=axis->value(i+zoom_begin_srv) ; 
    536                  SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
    537  
    538                  SuperClassWriter::definition_start(); 
    539  
    540                  break; 
     527                dims.push_back("axis_nbounds"); 
     528                SuperClassWriter::addVariable(axisBoundsId, NC_FLOAT, dims); 
     529                SuperClassWriter::addAttribute("bounds", axisBoundsId, &axisid); 
    541530              } 
    542               default : 
    543                  ERROR("CNc4DataOutput::writeDomain(domain)", 
    544                        << "[ type = " << SuperClass::type << "]" 
    545                        << " not implemented yet !"); 
    546            } 
    547          } 
    548          catch (CNetCdfException& e) 
    549          { 
    550            StdString msg("On writing the axis : "); 
    551            msg.append(axisid); msg.append("\n"); 
    552            msg.append("In the context : "); 
    553            CContext* context = CContext::getCurrent() ; 
    554            msg.append(context->getId()); msg.append("\n"); 
    555            msg.append(e.what()); 
    556            ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", << msg); 
    557          } 
    558          axis->addRelFile(this->filename); 
     531 
     532              SuperClassWriter::definition_end(); 
     533 
     534              CArray<double,1> axis_value(zoom_size); 
     535              for (int i = 0; i < zoom_size_srv; i++) axis_value(i) = axis->value(i + zoom_begin_srv); 
     536              SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
     537 
     538              if (!axis->bounds.isEmpty()) 
     539              { 
     540                CArray<double,2> axisBounds(zoom_size, 2); 
     541                for (int i = 0; i < zoom_size_srv; i++) 
     542                { 
     543                  axisBounds(i, 0) = axis->bounds(i + zoom_begin_srv, 0); 
     544                  axisBounds(i, 1) = axis->bounds(i + zoom_begin_srv, 1); 
     545                } 
     546                SuperClassWriter::writeData(axisBounds, axisBoundsId, isCollective, 0); 
     547              } 
     548 
     549              SuperClassWriter::definition_start(); 
     550 
     551              break; 
     552            } 
     553            default : 
     554              ERROR("CNc4DataOutput::writeDomain(domain)", 
     555                    << "[ type = " << SuperClass::type << "]" 
     556                    << " not implemented yet !"); 
     557          } 
     558        } 
     559        catch (CNetCdfException& e) 
     560        { 
     561          StdString msg("On writing the axis : "); 
     562          msg.append(axisid); msg.append("\n"); 
     563          msg.append("In the context : "); 
     564          CContext* context = CContext::getCurrent() ; 
     565          msg.append(context->getId()); msg.append("\n"); 
     566          msg.append(e.what()); 
     567          ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", << msg); 
     568        } 
     569        axis->addRelFile(this->filename); 
    559570     } 
    560571 
     
    9991010                               ? file->description.getValue() 
    10001011                               : StdString("Created by xios"); 
     1012 
     1013         singleDomain = (file->nbDomains == 1); 
     1014 
    10011015         try 
    10021016         { 
    10031017           this->writeFileAttributes(filename, description, 
    1004                                      StdString ("CF-1.1"), 
     1018                                     StdString("CF-1.1"), 
    10051019                                     StdString("An IPSL model"), 
    10061020                                     this->getTimeStamp()); 
     1021 
     1022           if (file->nbAxis >= 1) 
     1023             SuperClassWriter::addDimension("axis_nbounds", 2); 
    10071024         } 
    10081025         catch (CNetCdfException& e) 
     
    10161033           ERROR("CNc4DataOutput::writeFile_ (CFile* file)", << msg); 
    10171034         } 
    1018          if (file->nbDomain==1) singleDomain=true ; 
    1019          else singleDomain=false ; 
    10201035      } 
    10211036 
Note: See TracChangeset for help on using the changeset viewer.