Ignore:
Timestamp:
01/21/14 15:28:59 (10 years ago)
Author:
ymipsl
Message:

Enhancement : Add scale_factor and add_offset attribute to field output
Operation (field-add_offset)/scale_factor would be computed before output write.
If field attribute prec=2 the field would be rounded to nearest integer value and output as short int (2 bytes).

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/interface/fortran_attr/ifield_attr.F90

    r463 r464  
    1212   
    1313  SUBROUTINE xios(set_field_attr)  & 
    14     ( 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, valid_max, valid_min ) 
     14    ( field_id, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     15    , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     16    , valid_max, valid_min ) 
    1617     
    1718    IMPLICIT NONE 
    1819      TYPE(txios(field))  :: field_hdl 
    1920      CHARACTER(LEN=*), INTENT(IN) ::field_id 
     21      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: add_offset 
    2022      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
    2123      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: default_value 
     
    3234      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: operation 
    3335      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
     36      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: scale_factor 
    3437      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    3538      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    3942      CALL xios(get_field_handle)(field_id,field_hdl) 
    4043      CALL xios(set_field_attr_hdl_)   & 
    41       ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    42       , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     44      ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     45      , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     46      , valid_max, valid_min ) 
    4347     
    4448  END SUBROUTINE xios(set_field_attr) 
    4549   
    4650  SUBROUTINE xios(set_field_attr_hdl)  & 
    47     ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    48     , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     51    ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     52    , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     53    , valid_max, valid_min ) 
    4954     
    5055    IMPLICIT NONE 
    5156      TYPE(txios(field)) , INTENT(IN) :: field_hdl 
     57      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: add_offset 
    5258      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
    5359      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: default_value 
     
    6470      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: operation 
    6571      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
     72      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: scale_factor 
    6673      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    6774      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    7077       
    7178      CALL xios(set_field_attr_hdl_)  & 
    72       ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    73       , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     79      ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     80      , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     81      , valid_max, valid_min ) 
    7482     
    7583  END SUBROUTINE xios(set_field_attr_hdl) 
    7684   
    7785  SUBROUTINE xios(set_field_attr_hdl_)   & 
    78     ( field_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_  & 
    79     , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_, valid_max_  & 
    80     , valid_min_ ) 
     86    ( field_hdl, add_offset_, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
     87    , freq_op_, grid_ref_, level_, long_name_, name_, operation_, prec_, scale_factor_, standard_name_  & 
     88    , unit_, valid_max_, valid_min_ ) 
    8189     
    8290    IMPLICIT NONE 
    8391      TYPE(txios(field)) , INTENT(IN) :: field_hdl 
     92      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: add_offset_ 
    8493      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref_ 
    8594      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: default_value_ 
     
    96105      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: operation_ 
    97106      INTEGER  , OPTIONAL, INTENT(IN) :: prec_ 
     107      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: scale_factor_ 
    98108      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    99109      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit_ 
     
    101111      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min_ 
    102112       
     113      IF (PRESENT(add_offset_)) THEN 
     114        CALL cxios_set_field_add_offset(field_hdl%daddr, add_offset_) 
     115      ENDIF 
     116       
    103117      IF (PRESENT(axis_ref_)) THEN 
    104118        CALL cxios_set_field_axis_ref(field_hdl%daddr, axis_ref_, len(axis_ref_)) 
     
    154168      ENDIF 
    155169       
     170      IF (PRESENT(scale_factor_)) THEN 
     171        CALL cxios_set_field_scale_factor(field_hdl%daddr, scale_factor_) 
     172      ENDIF 
     173       
    156174      IF (PRESENT(standard_name_)) THEN 
    157175        CALL cxios_set_field_standard_name(field_hdl%daddr, standard_name_, len(standard_name_)) 
     
    175193   
    176194  SUBROUTINE xios(get_field_attr)  & 
    177     ( field_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    178     , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     195    ( field_id, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     196    , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     197    , valid_max, valid_min ) 
    179198     
    180199    IMPLICIT NONE 
    181200      TYPE(txios(field))  :: field_hdl 
    182201      CHARACTER(LEN=*), INTENT(IN) ::field_id 
     202      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: add_offset 
    183203      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
    184204      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: default_value 
     
    195215      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: operation 
    196216      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
     217      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: scale_factor 
    197218      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    198219      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    202223      CALL xios(get_field_handle)(field_id,field_hdl) 
    203224      CALL xios(get_field_attr_hdl_)   & 
    204       ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    205       , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     225      ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     226      , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     227      , valid_max, valid_min ) 
    206228     
    207229  END SUBROUTINE xios(get_field_attr) 
    208230   
    209231  SUBROUTINE xios(get_field_attr_hdl)  & 
    210     ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    211     , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     232    ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     233    , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     234    , valid_max, valid_min ) 
    212235     
    213236    IMPLICIT NONE 
    214237      TYPE(txios(field)) , INTENT(IN) :: field_hdl 
     238      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: add_offset 
    215239      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
    216240      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: default_value 
     
    227251      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: operation 
    228252      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
     253      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: scale_factor 
    229254      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    230255      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    233258       
    234259      CALL xios(get_field_attr_hdl_)  & 
    235       ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    236       , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     260      ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     261      , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     262      , valid_max, valid_min ) 
    237263     
    238264  END SUBROUTINE xios(get_field_attr_hdl) 
    239265   
    240266  SUBROUTINE xios(get_field_attr_hdl_)   & 
    241     ( field_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_  & 
    242     , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_, valid_max_  & 
    243     , valid_min_ ) 
     267    ( field_hdl, add_offset_, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
     268    , freq_op_, grid_ref_, level_, long_name_, name_, operation_, prec_, scale_factor_, standard_name_  & 
     269    , unit_, valid_max_, valid_min_ ) 
    244270     
    245271    IMPLICIT NONE 
    246272      TYPE(txios(field)) , INTENT(IN) :: field_hdl 
     273      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: add_offset_ 
    247274      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref_ 
    248275      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: default_value_ 
     
    259286      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: operation_ 
    260287      INTEGER  , OPTIONAL, INTENT(OUT) :: prec_ 
     288      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: scale_factor_ 
    261289      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    262290      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit_ 
     
    264292      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min_ 
    265293       
     294      IF (PRESENT(add_offset_)) THEN 
     295        CALL cxios_get_field_add_offset(field_hdl%daddr, add_offset_) 
     296      ENDIF 
     297       
    266298      IF (PRESENT(axis_ref_)) THEN 
    267299        CALL cxios_get_field_axis_ref(field_hdl%daddr, axis_ref_, len(axis_ref_)) 
     
    317349      ENDIF 
    318350       
     351      IF (PRESENT(scale_factor_)) THEN 
     352        CALL cxios_get_field_scale_factor(field_hdl%daddr, scale_factor_) 
     353      ENDIF 
     354       
    319355      IF (PRESENT(standard_name_)) THEN 
    320356        CALL cxios_get_field_standard_name(field_hdl%daddr, standard_name_, len(standard_name_)) 
     
    338374   
    339375  SUBROUTINE xios(is_defined_field_attr)  & 
    340     ( field_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    341     , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     376    ( field_id, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     377    , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     378    , valid_max, valid_min ) 
    342379     
    343380    IMPLICIT NONE 
    344381      TYPE(txios(field))  :: field_hdl 
    345382      CHARACTER(LEN=*), INTENT(IN) ::field_id 
     383      LOGICAL, OPTIONAL, INTENT(OUT) :: add_offset 
     384      LOGICAL(KIND=C_BOOL) :: add_offset_tmp 
    346385      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    347386      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     
    370409      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
    371410      LOGICAL(KIND=C_BOOL) :: prec_tmp 
     411      LOGICAL, OPTIONAL, INTENT(OUT) :: scale_factor 
     412      LOGICAL(KIND=C_BOOL) :: scale_factor_tmp 
    372413      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    373414      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    381422      CALL xios(get_field_handle)(field_id,field_hdl) 
    382423      CALL xios(is_defined_field_attr_hdl_)   & 
    383       ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    384       , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     424      ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     425      , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     426      , valid_max, valid_min ) 
    385427     
    386428  END SUBROUTINE xios(is_defined_field_attr) 
    387429   
    388430  SUBROUTINE xios(is_defined_field_attr_hdl)  & 
    389     ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    390     , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     431    ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     432    , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     433    , valid_max, valid_min ) 
    391434     
    392435    IMPLICIT NONE 
    393436      TYPE(txios(field)) , INTENT(IN) :: field_hdl 
     437      LOGICAL, OPTIONAL, INTENT(OUT) :: add_offset 
     438      LOGICAL(KIND=C_BOOL) :: add_offset_tmp 
    394439      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    395440      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     
    418463      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
    419464      LOGICAL(KIND=C_BOOL) :: prec_tmp 
     465      LOGICAL, OPTIONAL, INTENT(OUT) :: scale_factor 
     466      LOGICAL(KIND=C_BOOL) :: scale_factor_tmp 
    420467      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    421468      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    428475       
    429476      CALL xios(is_defined_field_attr_hdl_)  & 
    430       ( field_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref  & 
    431       , level, long_name, name, operation, prec, standard_name, unit, valid_max, valid_min ) 
     477      ( field_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     478      , freq_op, grid_ref, level, long_name, name, operation, prec, scale_factor, standard_name, unit  & 
     479      , valid_max, valid_min ) 
    432480     
    433481  END SUBROUTINE xios(is_defined_field_attr_hdl) 
    434482   
    435483  SUBROUTINE xios(is_defined_field_attr_hdl_)   & 
    436     ( field_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_  & 
    437     , grid_ref_, level_, long_name_, name_, operation_, prec_, standard_name_, unit_, valid_max_  & 
    438     , valid_min_ ) 
     484    ( field_hdl, add_offset_, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
     485    , freq_op_, grid_ref_, level_, long_name_, name_, operation_, prec_, scale_factor_, standard_name_  & 
     486    , unit_, valid_max_, valid_min_ ) 
    439487     
    440488    IMPLICIT NONE 
    441489      TYPE(txios(field)) , INTENT(IN) :: field_hdl 
     490      LOGICAL, OPTIONAL, INTENT(OUT) :: add_offset_ 
     491      LOGICAL(KIND=C_BOOL) :: add_offset__tmp 
    442492      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref_ 
    443493      LOGICAL(KIND=C_BOOL) :: axis_ref__tmp 
     
    466516      LOGICAL, OPTIONAL, INTENT(OUT) :: prec_ 
    467517      LOGICAL(KIND=C_BOOL) :: prec__tmp 
     518      LOGICAL, OPTIONAL, INTENT(OUT) :: scale_factor_ 
     519      LOGICAL(KIND=C_BOOL) :: scale_factor__tmp 
    468520      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ 
    469521      LOGICAL(KIND=C_BOOL) :: standard_name__tmp 
     
    475527      LOGICAL(KIND=C_BOOL) :: valid_min__tmp 
    476528       
     529      IF (PRESENT(add_offset_)) THEN 
     530        add_offset__tmp=cxios_is_defined_field_add_offset(field_hdl%daddr) 
     531        add_offset_=add_offset__tmp 
     532      ENDIF 
     533       
    477534      IF (PRESENT(axis_ref_)) THEN 
    478535        axis_ref__tmp=cxios_is_defined_field_axis_ref(field_hdl%daddr) 
     
    540597      ENDIF 
    541598       
     599      IF (PRESENT(scale_factor_)) THEN 
     600        scale_factor__tmp=cxios_is_defined_field_scale_factor(field_hdl%daddr) 
     601        scale_factor_=scale_factor__tmp 
     602      ENDIF 
     603       
    542604      IF (PRESENT(standard_name_)) THEN 
    543605        standard_name__tmp=cxios_is_defined_field_standard_name(field_hdl%daddr) 
Note: See TracChangeset for help on using the changeset viewer.