Changeset 463


Ignore:
Timestamp:
01/21/14 10:25:14 (10 years ago)
Author:
ymipsl
Message:

Enhancement :
Add valid_min and valid_max attribute for field, wrote as field metadata in the ouput netcdf file, following the CF convention

YM

Location:
XIOS/trunk/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/config/field_attribute.conf

    r369 r463  
    1919 
    2020DECLARE_ATTRIBUTE(double,    default_value) 
     21DECLARE_ATTRIBUTE(double,    valid_min) 
     22DECLARE_ATTRIBUTE(double,    valid_max) 
  • XIOS/trunk/src/interface/c_attr/icfield_attr.cpp

    r445 r463  
    402402   
    403403   
     404  void cxios_set_field_valid_max(field_Ptr field_hdl, double valid_max) 
     405  { 
     406     CTimer::get("XIOS").resume(); 
     407    field_hdl->valid_max.setValue(valid_max); 
     408    field_hdl->sendAttributToServer(field_hdl->valid_max); 
     409     CTimer::get("XIOS").suspend(); 
     410  } 
     411   
     412  void cxios_get_field_valid_max(field_Ptr field_hdl, double* valid_max) 
     413  { 
     414    *valid_max = field_hdl->valid_max.getInheritedValue(); 
     415  } 
     416   
     417  bool cxios_is_defined_field_valid_max(field_Ptr field_hdl ) 
     418  { 
     419     CTimer::get("XIOS").resume(); 
     420    return field_hdl->valid_max.hasInheritedValue(); 
     421     CTimer::get("XIOS").suspend(); 
     422  } 
     423   
     424   
     425   
     426  void cxios_set_field_valid_min(field_Ptr field_hdl, double valid_min) 
     427  { 
     428     CTimer::get("XIOS").resume(); 
     429    field_hdl->valid_min.setValue(valid_min); 
     430    field_hdl->sendAttributToServer(field_hdl->valid_min); 
     431     CTimer::get("XIOS").suspend(); 
     432  } 
     433   
     434  void cxios_get_field_valid_min(field_Ptr field_hdl, double* valid_min) 
     435  { 
     436    *valid_min = field_hdl->valid_min.getInheritedValue(); 
     437  } 
     438   
     439  bool cxios_is_defined_field_valid_min(field_Ptr field_hdl ) 
     440  { 
     441     CTimer::get("XIOS").resume(); 
     442    return field_hdl->valid_min.hasInheritedValue(); 
     443     CTimer::get("XIOS").suspend(); 
     444  } 
     445   
     446   
     447   
    404448   
    405449} 
  • XIOS/trunk/src/interface/c_attr/icfieldgroup_attr.cpp

    r445 r463  
    429429   
    430430   
     431  void cxios_set_fieldgroup_valid_max(fieldgroup_Ptr fieldgroup_hdl, double valid_max) 
     432  { 
     433     CTimer::get("XIOS").resume(); 
     434    fieldgroup_hdl->valid_max.setValue(valid_max); 
     435    fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->valid_max); 
     436     CTimer::get("XIOS").suspend(); 
     437  } 
     438   
     439  void cxios_get_fieldgroup_valid_max(fieldgroup_Ptr fieldgroup_hdl, double* valid_max) 
     440  { 
     441    *valid_max = fieldgroup_hdl->valid_max.getInheritedValue(); 
     442  } 
     443   
     444  bool cxios_is_defined_fieldgroup_valid_max(fieldgroup_Ptr fieldgroup_hdl ) 
     445  { 
     446     CTimer::get("XIOS").resume(); 
     447    return fieldgroup_hdl->valid_max.hasInheritedValue(); 
     448     CTimer::get("XIOS").suspend(); 
     449  } 
     450   
     451   
     452   
     453  void cxios_set_fieldgroup_valid_min(fieldgroup_Ptr fieldgroup_hdl, double valid_min) 
     454  { 
     455     CTimer::get("XIOS").resume(); 
     456    fieldgroup_hdl->valid_min.setValue(valid_min); 
     457    fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->valid_min); 
     458     CTimer::get("XIOS").suspend(); 
     459  } 
     460   
     461  void cxios_get_fieldgroup_valid_min(fieldgroup_Ptr fieldgroup_hdl, double* valid_min) 
     462  { 
     463    *valid_min = fieldgroup_hdl->valid_min.getInheritedValue(); 
     464  } 
     465   
     466  bool cxios_is_defined_fieldgroup_valid_min(fieldgroup_Ptr fieldgroup_hdl ) 
     467  { 
     468     CTimer::get("XIOS").resume(); 
     469    return fieldgroup_hdl->valid_min.hasInheritedValue(); 
     470     CTimer::get("XIOS").suspend(); 
     471  } 
     472   
     473   
     474   
    431475   
    432476} 
  • XIOS/trunk/src/interface/fortran_attr/field_interface_attr.f90

    r432 r463  
    316316     
    317317     
     318    SUBROUTINE cxios_set_field_valid_max(field_hdl, valid_max) BIND(C) 
     319      USE ISO_C_BINDING 
     320      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     321      REAL (KIND=C_DOUBLE)      , VALUE :: valid_max 
     322    END SUBROUTINE cxios_set_field_valid_max 
     323     
     324    SUBROUTINE cxios_get_field_valid_max(field_hdl, valid_max) BIND(C) 
     325      USE ISO_C_BINDING 
     326      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     327      REAL (KIND=C_DOUBLE)             :: valid_max 
     328    END SUBROUTINE cxios_get_field_valid_max 
     329     
     330    FUNCTION cxios_is_defined_field_valid_max(field_hdl ) BIND(C) 
     331      USE ISO_C_BINDING 
     332      LOGICAL(kind=C_BOOL) :: cxios_is_defined_field_valid_max 
     333      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     334    END FUNCTION cxios_is_defined_field_valid_max 
     335     
     336     
     337    SUBROUTINE cxios_set_field_valid_min(field_hdl, valid_min) BIND(C) 
     338      USE ISO_C_BINDING 
     339      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     340      REAL (KIND=C_DOUBLE)      , VALUE :: valid_min 
     341    END SUBROUTINE cxios_set_field_valid_min 
     342     
     343    SUBROUTINE cxios_get_field_valid_min(field_hdl, valid_min) BIND(C) 
     344      USE ISO_C_BINDING 
     345      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     346      REAL (KIND=C_DOUBLE)             :: valid_min 
     347    END SUBROUTINE cxios_get_field_valid_min 
     348     
     349    FUNCTION cxios_is_defined_field_valid_min(field_hdl ) BIND(C) 
     350      USE ISO_C_BINDING 
     351      LOGICAL(kind=C_BOOL) :: cxios_is_defined_field_valid_min 
     352      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     353    END FUNCTION cxios_is_defined_field_valid_min 
     354     
     355     
    318356    END INTERFACE 
    319357   
  • XIOS/trunk/src/interface/fortran_attr/fieldgroup_interface_attr.f90

    r432 r463  
    337337     
    338338     
     339    SUBROUTINE cxios_set_fieldgroup_valid_max(fieldgroup_hdl, valid_max) BIND(C) 
     340      USE ISO_C_BINDING 
     341      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     342      REAL (KIND=C_DOUBLE)      , VALUE :: valid_max 
     343    END SUBROUTINE cxios_set_fieldgroup_valid_max 
     344     
     345    SUBROUTINE cxios_get_fieldgroup_valid_max(fieldgroup_hdl, valid_max) BIND(C) 
     346      USE ISO_C_BINDING 
     347      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     348      REAL (KIND=C_DOUBLE)             :: valid_max 
     349    END SUBROUTINE cxios_get_fieldgroup_valid_max 
     350     
     351    FUNCTION cxios_is_defined_fieldgroup_valid_max(fieldgroup_hdl ) BIND(C) 
     352      USE ISO_C_BINDING 
     353      LOGICAL(kind=C_BOOL) :: cxios_is_defined_fieldgroup_valid_max 
     354      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     355    END FUNCTION cxios_is_defined_fieldgroup_valid_max 
     356     
     357     
     358    SUBROUTINE cxios_set_fieldgroup_valid_min(fieldgroup_hdl, valid_min) BIND(C) 
     359      USE ISO_C_BINDING 
     360      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     361      REAL (KIND=C_DOUBLE)      , VALUE :: valid_min 
     362    END SUBROUTINE cxios_set_fieldgroup_valid_min 
     363     
     364    SUBROUTINE cxios_get_fieldgroup_valid_min(fieldgroup_hdl, valid_min) BIND(C) 
     365      USE ISO_C_BINDING 
     366      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     367      REAL (KIND=C_DOUBLE)             :: valid_min 
     368    END SUBROUTINE cxios_get_fieldgroup_valid_min 
     369     
     370    FUNCTION cxios_is_defined_fieldgroup_valid_min(fieldgroup_hdl ) BIND(C) 
     371      USE ISO_C_BINDING 
     372      LOGICAL(kind=C_BOOL) :: cxios_is_defined_fieldgroup_valid_min 
     373      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     374    END FUNCTION cxios_is_defined_fieldgroup_valid_min 
     375     
     376     
    339377    END INTERFACE 
    340378   
  • XIOS/trunk/src/interface/fortran_attr/ifield_attr.F90

    r432 r463  
    1313  SUBROUTINE xios(set_field_attr)  & 
    1414    ( field_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    15     , level, long_name, name, operation, prec, standard_name, unit ) 
     15    , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    1616     
    1717    IMPLICIT NONE 
     
    3434      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    3535      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     36      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_max 
     37      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min 
    3638       
    3739      CALL xios(get_field_handle)(field_id,field_hdl) 
    3840      CALL xios(set_field_attr_hdl_)   & 
    3941      ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    40       , level, long_name, name, operation, prec, standard_name, unit ) 
     42      , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    4143     
    4244  END SUBROUTINE xios(set_field_attr) 
     
    4446  SUBROUTINE xios(set_field_attr_hdl)  & 
    4547    ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    46     , level, long_name, name, operation, prec, standard_name, unit ) 
     48    , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    4749     
    4850    IMPLICIT NONE 
     
    6466      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    6567      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     68      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_max 
     69      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min 
    6670       
    6771      CALL xios(set_field_attr_hdl_)  & 
    6872      ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    69       , level, long_name, name, operation, prec, standard_name, unit ) 
     73      , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    7074     
    7175  END SUBROUTINE xios(set_field_attr_hdl) 
     
    7377  SUBROUTINE xios(set_field_attr_hdl_)   & 
    7478    ( field_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_  & 
    75     , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_ ) 
     79    , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_, valid_max_  & 
     80    , valid_min_ ) 
    7681     
    7782    IMPLICIT NONE 
     
    9398      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    9499      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit_ 
     100      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_max_ 
     101      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min_ 
    95102       
    96103      IF (PRESENT(axis_ref_)) THEN 
     
    155162      ENDIF 
    156163       
     164      IF (PRESENT(valid_max_)) THEN 
     165        CALL cxios_set_field_valid_max(field_hdl%daddr, valid_max_) 
     166      ENDIF 
     167       
     168      IF (PRESENT(valid_min_)) THEN 
     169        CALL cxios_set_field_valid_min(field_hdl%daddr, valid_min_) 
     170      ENDIF 
     171       
    157172       
    158173     
     
    161176  SUBROUTINE xios(get_field_attr)  & 
    162177    ( field_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    163     , level, long_name, name, operation, prec, standard_name, unit ) 
     178    , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    164179     
    165180    IMPLICIT NONE 
     
    182197      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    183198      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     199      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_max 
     200      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min 
    184201       
    185202      CALL xios(get_field_handle)(field_id,field_hdl) 
    186203      CALL xios(get_field_attr_hdl_)   & 
    187204      ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    188       , level, long_name, name, operation, prec, standard_name, unit ) 
     205      , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    189206     
    190207  END SUBROUTINE xios(get_field_attr) 
     
    192209  SUBROUTINE xios(get_field_attr_hdl)  & 
    193210    ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    194     , level, long_name, name, operation, prec, standard_name, unit ) 
     211    , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    195212     
    196213    IMPLICIT NONE 
     
    212229      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    213230      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     231      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_max 
     232      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min 
    214233       
    215234      CALL xios(get_field_attr_hdl_)  & 
    216235      ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    217       , level, long_name, name, operation, prec, standard_name, unit ) 
     236      , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    218237     
    219238  END SUBROUTINE xios(get_field_attr_hdl) 
     
    221240  SUBROUTINE xios(get_field_attr_hdl_)   & 
    222241    ( field_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_  & 
    223     , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_ ) 
     242    , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_, valid_max_  & 
     243    , valid_min_ ) 
    224244     
    225245    IMPLICIT NONE 
     
    241261      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    242262      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit_ 
     263      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_max_ 
     264      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min_ 
    243265       
    244266      IF (PRESENT(axis_ref_)) THEN 
     
    303325      ENDIF 
    304326       
     327      IF (PRESENT(valid_max_)) THEN 
     328        CALL cxios_get_field_valid_max(field_hdl%daddr, valid_max_) 
     329      ENDIF 
     330       
     331      IF (PRESENT(valid_min_)) THEN 
     332        CALL cxios_get_field_valid_min(field_hdl%daddr, valid_min_) 
     333      ENDIF 
     334       
    305335       
    306336     
     
    309339  SUBROUTINE xios(is_defined_field_attr)  & 
    310340    ( field_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    311     , level, long_name, name, operation, prec, standard_name, unit ) 
     341    , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    312342     
    313343    IMPLICIT NONE 
     
    344374      LOGICAL, OPTIONAL, INTENT(OUT) :: unit 
    345375      LOGICAL(KIND=C_BOOL) :: unit_tmp 
     376      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_max 
     377      LOGICAL(KIND=C_BOOL) :: valid_max_tmp 
     378      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_min 
     379      LOGICAL(KIND=C_BOOL) :: valid_min_tmp 
    346380       
    347381      CALL xios(get_field_handle)(field_id,field_hdl) 
    348382      CALL xios(is_defined_field_attr_hdl_)   & 
    349383      ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    350       , level, long_name, name, operation, prec, standard_name, unit ) 
     384      , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    351385     
    352386  END SUBROUTINE xios(is_defined_field_attr) 
     
    354388  SUBROUTINE xios(is_defined_field_attr_hdl)  & 
    355389    ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    356     , level, long_name, name, operation, prec, standard_name, unit ) 
     390    , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    357391     
    358392    IMPLICIT NONE 
     
    388422      LOGICAL, OPTIONAL, INTENT(OUT) :: unit 
    389423      LOGICAL(KIND=C_BOOL) :: unit_tmp 
     424      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_max 
     425      LOGICAL(KIND=C_BOOL) :: valid_max_tmp 
     426      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_min 
     427      LOGICAL(KIND=C_BOOL) :: valid_min_tmp 
    390428       
    391429      CALL xios(is_defined_field_attr_hdl_)  & 
    392430      ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    393       , level, long_name, name, operation, prec, standard_name, unit ) 
     431      , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
    394432     
    395433  END SUBROUTINE xios(is_defined_field_attr_hdl) 
     
    397435  SUBROUTINE xios(is_defined_field_attr_hdl_)   & 
    398436    ( field_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_  & 
    399     , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_ ) 
     437    , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_, valid_max_  & 
     438    , valid_min_ ) 
    400439     
    401440    IMPLICIT NONE 
     
    431470      LOGICAL, OPTIONAL, INTENT(OUT) :: unit_ 
    432471      LOGICAL(KIND=C_BOOL) :: unit__tmp 
     472      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_max_ 
     473      LOGICAL(KIND=C_BOOL) :: valid_max__tmp 
     474      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_min_ 
     475      LOGICAL(KIND=C_BOOL) :: valid_min__tmp 
    433476       
    434477      IF (PRESENT(axis_ref_)) THEN 
     
    507550      ENDIF 
    508551       
     552      IF (PRESENT(valid_max_)) THEN 
     553        valid_max__tmp=cxios_is_defined_field_valid_max(field_hdl%daddr) 
     554        valid_max_=valid_max__tmp 
     555      ENDIF 
     556       
     557      IF (PRESENT(valid_min_)) THEN 
     558        valid_min__tmp=cxios_is_defined_field_valid_min(field_hdl%daddr) 
     559        valid_min_=valid_min__tmp 
     560      ENDIF 
     561       
    509562       
    510563     
  • XIOS/trunk/src/interface/fortran_attr/ifieldgroup_attr.F90

    r432 r463  
    1313  SUBROUTINE xios(set_fieldgroup_attr)  & 
    1414    ( fieldgroup_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    15     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     15    , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     16    , valid_min ) 
    1617     
    1718    IMPLICIT NONE 
     
    3536      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    3637      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     38      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_max 
     39      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min 
    3740       
    3841      CALL xios(get_fieldgroup_handle)(fieldgroup_id,fieldgroup_hdl) 
    3942      CALL xios(set_fieldgroup_attr_hdl_)   & 
    4043      ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    41       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     44      , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     45      , valid_min ) 
    4246     
    4347  END SUBROUTINE xios(set_fieldgroup_attr) 
     
    4549  SUBROUTINE xios(set_fieldgroup_attr_hdl)  & 
    4650    ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    47     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     51    , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     52    , valid_min ) 
    4853     
    4954    IMPLICIT NONE 
     
    6671      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    6772      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     73      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_max 
     74      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min 
    6875       
    6976      CALL xios(set_fieldgroup_attr_hdl_)  & 
    7077      ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    71       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     78      , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     79      , valid_min ) 
    7280     
    7381  END SUBROUTINE xios(set_fieldgroup_attr_hdl) 
     
    7684    ( fieldgroup_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
    7785    , freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_, standard_name_  & 
    78     , unit_ ) 
     86    , unit_, valid_max_, valid_min_ ) 
    7987     
    8088    IMPLICIT NONE 
     
    97105      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    98106      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit_ 
     107      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_max_ 
     108      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min_ 
    99109       
    100110      IF (PRESENT(axis_ref_)) THEN 
     
    163173      ENDIF 
    164174       
     175      IF (PRESENT(valid_max_)) THEN 
     176        CALL cxios_set_fieldgroup_valid_max(fieldgroup_hdl%daddr, valid_max_) 
     177      ENDIF 
     178       
     179      IF (PRESENT(valid_min_)) THEN 
     180        CALL cxios_set_fieldgroup_valid_min(fieldgroup_hdl%daddr, valid_min_) 
     181      ENDIF 
     182       
    165183       
    166184     
     
    169187  SUBROUTINE xios(get_fieldgroup_attr)  & 
    170188    ( fieldgroup_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    171     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     189    , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     190    , valid_min ) 
    172191     
    173192    IMPLICIT NONE 
     
    191210      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    192211      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     212      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_max 
     213      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min 
    193214       
    194215      CALL xios(get_fieldgroup_handle)(fieldgroup_id,fieldgroup_hdl) 
    195216      CALL xios(get_fieldgroup_attr_hdl_)   & 
    196217      ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    197       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     218      , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     219      , valid_min ) 
    198220     
    199221  END SUBROUTINE xios(get_fieldgroup_attr) 
     
    201223  SUBROUTINE xios(get_fieldgroup_attr_hdl)  & 
    202224    ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    203     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     225    , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     226    , valid_min ) 
    204227     
    205228    IMPLICIT NONE 
     
    222245      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    223246      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     247      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_max 
     248      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min 
    224249       
    225250      CALL xios(get_fieldgroup_attr_hdl_)  & 
    226251      ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    227       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     252      , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     253      , valid_min ) 
    228254     
    229255  END SUBROUTINE xios(get_fieldgroup_attr_hdl) 
     
    232258    ( fieldgroup_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
    233259    , freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_, standard_name_  & 
    234     , unit_ ) 
     260    , unit_, valid_max_, valid_min_ ) 
    235261     
    236262    IMPLICIT NONE 
     
    253279      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    254280      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit_ 
     281      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_max_ 
     282      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min_ 
    255283       
    256284      IF (PRESENT(axis_ref_)) THEN 
     
    319347      ENDIF 
    320348       
     349      IF (PRESENT(valid_max_)) THEN 
     350        CALL cxios_get_fieldgroup_valid_max(fieldgroup_hdl%daddr, valid_max_) 
     351      ENDIF 
     352       
     353      IF (PRESENT(valid_min_)) THEN 
     354        CALL cxios_get_fieldgroup_valid_min(fieldgroup_hdl%daddr, valid_min_) 
     355      ENDIF 
     356       
    321357       
    322358     
     
    325361  SUBROUTINE xios(is_defined_fieldgroup_attr)  & 
    326362    ( fieldgroup_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    327     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     363    , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     364    , valid_min ) 
    328365     
    329366    IMPLICIT NONE 
     
    362399      LOGICAL, OPTIONAL, INTENT(OUT) :: unit 
    363400      LOGICAL(KIND=C_BOOL) :: unit_tmp 
     401      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_max 
     402      LOGICAL(KIND=C_BOOL) :: valid_max_tmp 
     403      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_min 
     404      LOGICAL(KIND=C_BOOL) :: valid_min_tmp 
    364405       
    365406      CALL xios(get_fieldgroup_handle)(fieldgroup_id,fieldgroup_hdl) 
    366407      CALL xios(is_defined_fieldgroup_attr_hdl_)   & 
    367408      ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    368       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     409      , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     410      , valid_min ) 
    369411     
    370412  END SUBROUTINE xios(is_defined_fieldgroup_attr) 
     
    372414  SUBROUTINE xios(is_defined_fieldgroup_attr_hdl)  & 
    373415    ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    374     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     416    , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     417    , valid_min ) 
    375418     
    376419    IMPLICIT NONE 
     
    408451      LOGICAL, OPTIONAL, INTENT(OUT) :: unit 
    409452      LOGICAL(KIND=C_BOOL) :: unit_tmp 
     453      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_max 
     454      LOGICAL(KIND=C_BOOL) :: valid_max_tmp 
     455      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_min 
     456      LOGICAL(KIND=C_BOOL) :: valid_min_tmp 
    410457       
    411458      CALL xios(is_defined_fieldgroup_attr_hdl_)  & 
    412459      ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    413       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit ) 
     460      , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
     461      , valid_min ) 
    414462     
    415463  END SUBROUTINE xios(is_defined_fieldgroup_attr_hdl) 
     
    418466    ( fieldgroup_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
    419467    , freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_, standard_name_  & 
    420     , unit_ ) 
     468    , unit_, valid_max_, valid_min_ ) 
    421469     
    422470    IMPLICIT NONE 
     
    454502      LOGICAL, OPTIONAL, INTENT(OUT) :: unit_ 
    455503      LOGICAL(KIND=C_BOOL) :: unit__tmp 
     504      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_max_ 
     505      LOGICAL(KIND=C_BOOL) :: valid_max__tmp 
     506      LOGICAL, OPTIONAL, INTENT(OUT) :: valid_min_ 
     507      LOGICAL(KIND=C_BOOL) :: valid_min__tmp 
    456508       
    457509      IF (PRESENT(axis_ref_)) THEN 
     
    535587      ENDIF 
    536588       
     589      IF (PRESENT(valid_max_)) THEN 
     590        valid_max__tmp=cxios_is_defined_fieldgroup_valid_max(fieldgroup_hdl%daddr) 
     591        valid_max_=valid_max__tmp 
     592      ENDIF 
     593       
     594      IF (PRESENT(valid_min_)) THEN 
     595        valid_min__tmp=cxios_is_defined_fieldgroup_valid_min(fieldgroup_hdl%daddr) 
     596        valid_min_=valid_min__tmp 
     597      ENDIF 
     598       
    537599       
    538600     
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r454 r463  
    620620            SuperClassWriter::addAttribute 
    621621               ("units", field->unit.getValue(), &fieldid); 
    622                 
     622 
     623          if (!field->valid_min.isEmpty()) 
     624            SuperClassWriter::addAttribute 
     625               ("valid_min", field->valid_min.getValue(), &fieldid); 
     626 
     627         if (!field->valid_max.isEmpty()) 
     628            SuperClassWriter::addAttribute 
     629               ("valid_max", field->valid_max.getValue(), &fieldid); 
     630                                             
    623631         SuperClassWriter::addAttribute 
    624632               ("online_operation", field->operation.getValue(), &fieldid); 
Note: See TracChangeset for help on using the changeset viewer.