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/ifieldgroup_attr.F90

    r463 r464  
    1212   
    1313  SUBROUTINE xios(set_fieldgroup_attr)  & 
    14     ( 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, valid_max  & 
    16     , valid_min ) 
     14    ( fieldgroup_id, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     15    , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     16    , unit, valid_max, valid_min ) 
    1717     
    1818    IMPLICIT NONE 
    1919      TYPE(txios(fieldgroup))  :: fieldgroup_hdl 
    2020      CHARACTER(LEN=*), INTENT(IN) ::fieldgroup_id 
     21      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: add_offset 
    2122      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
    2223      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: default_value 
     
    3435      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: operation 
    3536      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
     37      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: scale_factor 
    3638      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    3739      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    4143      CALL xios(get_fieldgroup_handle)(fieldgroup_id,fieldgroup_hdl) 
    4244      CALL xios(set_fieldgroup_attr_hdl_)   & 
    43       ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    44       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    45       , valid_min ) 
     45      ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     46      , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     47      , unit, valid_max, valid_min ) 
    4648     
    4749  END SUBROUTINE xios(set_fieldgroup_attr) 
    4850   
    4951  SUBROUTINE xios(set_fieldgroup_attr_hdl)  & 
    50     ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    51     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    52     , valid_min ) 
     52    ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     53    , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     54    , unit, valid_max, valid_min ) 
    5355     
    5456    IMPLICIT NONE 
    5557      TYPE(txios(fieldgroup)) , INTENT(IN) :: fieldgroup_hdl 
     58      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: add_offset 
    5659      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref 
    5760      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: default_value 
     
    6972      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: operation 
    7073      INTEGER  , OPTIONAL, INTENT(IN) :: prec 
     74      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: scale_factor 
    7175      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name 
    7276      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit 
     
    7579       
    7680      CALL xios(set_fieldgroup_attr_hdl_)  & 
    77       ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    78       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    79       , valid_min ) 
     81      ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     82      , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     83      , unit, valid_max, valid_min ) 
    8084     
    8185  END SUBROUTINE xios(set_fieldgroup_attr_hdl) 
    8286   
    8387  SUBROUTINE xios(set_fieldgroup_attr_hdl_)   & 
    84     ( fieldgroup_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
    85     , freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_, standard_name_  & 
    86     , unit_, valid_max_, valid_min_ ) 
     88    ( fieldgroup_hdl, add_offset_, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_  & 
     89    , freq_offset_, freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_  & 
     90    , scale_factor_, standard_name_, unit_, valid_max_, valid_min_ ) 
    8791     
    8892    IMPLICIT NONE 
    8993      TYPE(txios(fieldgroup)) , INTENT(IN) :: fieldgroup_hdl 
     94      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: add_offset_ 
    9095      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: axis_ref_ 
    9196      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: default_value_ 
     
    103108      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: operation_ 
    104109      INTEGER  , OPTIONAL, INTENT(IN) :: prec_ 
     110      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: scale_factor_ 
    105111      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_ 
    106112      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: unit_ 
     
    108114      REAL (KIND=8) , OPTIONAL, INTENT(IN) :: valid_min_ 
    109115       
     116      IF (PRESENT(add_offset_)) THEN 
     117        CALL cxios_set_fieldgroup_add_offset(fieldgroup_hdl%daddr, add_offset_) 
     118      ENDIF 
     119       
    110120      IF (PRESENT(axis_ref_)) THEN 
    111121        CALL cxios_set_fieldgroup_axis_ref(fieldgroup_hdl%daddr, axis_ref_, len(axis_ref_)) 
     
    165175      ENDIF 
    166176       
     177      IF (PRESENT(scale_factor_)) THEN 
     178        CALL cxios_set_fieldgroup_scale_factor(fieldgroup_hdl%daddr, scale_factor_) 
     179      ENDIF 
     180       
    167181      IF (PRESENT(standard_name_)) THEN 
    168182        CALL cxios_set_fieldgroup_standard_name(fieldgroup_hdl%daddr, standard_name_, len(standard_name_)) 
     
    186200   
    187201  SUBROUTINE xios(get_fieldgroup_attr)  & 
    188     ( fieldgroup_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    189     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    190     , valid_min ) 
     202    ( fieldgroup_id, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     203    , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     204    , unit, valid_max, valid_min ) 
    191205     
    192206    IMPLICIT NONE 
    193207      TYPE(txios(fieldgroup))  :: fieldgroup_hdl 
    194208      CHARACTER(LEN=*), INTENT(IN) ::fieldgroup_id 
     209      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: add_offset 
    195210      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
    196211      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: default_value 
     
    208223      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: operation 
    209224      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
     225      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: scale_factor 
    210226      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    211227      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    215231      CALL xios(get_fieldgroup_handle)(fieldgroup_id,fieldgroup_hdl) 
    216232      CALL xios(get_fieldgroup_attr_hdl_)   & 
    217       ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    218       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    219       , valid_min ) 
     233      ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     234      , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     235      , unit, valid_max, valid_min ) 
    220236     
    221237  END SUBROUTINE xios(get_fieldgroup_attr) 
    222238   
    223239  SUBROUTINE xios(get_fieldgroup_attr_hdl)  & 
    224     ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    225     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    226     , valid_min ) 
     240    ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     241    , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     242    , unit, valid_max, valid_min ) 
    227243     
    228244    IMPLICIT NONE 
    229245      TYPE(txios(fieldgroup)) , INTENT(IN) :: fieldgroup_hdl 
     246      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: add_offset 
    230247      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref 
    231248      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: default_value 
     
    243260      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: operation 
    244261      INTEGER  , OPTIONAL, INTENT(OUT) :: prec 
     262      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: scale_factor 
    245263      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name 
    246264      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit 
     
    249267       
    250268      CALL xios(get_fieldgroup_attr_hdl_)  & 
    251       ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    252       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    253       , valid_min ) 
     269      ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     270      , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     271      , unit, valid_max, valid_min ) 
    254272     
    255273  END SUBROUTINE xios(get_fieldgroup_attr_hdl) 
    256274   
    257275  SUBROUTINE xios(get_fieldgroup_attr_hdl_)   & 
    258     ( fieldgroup_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
    259     , freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_, standard_name_  & 
    260     , unit_, valid_max_, valid_min_ ) 
     276    ( fieldgroup_hdl, add_offset_, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_  & 
     277    , freq_offset_, freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_  & 
     278    , scale_factor_, standard_name_, unit_, valid_max_, valid_min_ ) 
    261279     
    262280    IMPLICIT NONE 
    263281      TYPE(txios(fieldgroup)) , INTENT(IN) :: fieldgroup_hdl 
     282      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: add_offset_ 
    264283      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: axis_ref_ 
    265284      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: default_value_ 
     
    277296      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: operation_ 
    278297      INTEGER  , OPTIONAL, INTENT(OUT) :: prec_ 
     298      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: scale_factor_ 
    279299      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_ 
    280300      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: unit_ 
     
    282302      REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: valid_min_ 
    283303       
     304      IF (PRESENT(add_offset_)) THEN 
     305        CALL cxios_get_fieldgroup_add_offset(fieldgroup_hdl%daddr, add_offset_) 
     306      ENDIF 
     307       
    284308      IF (PRESENT(axis_ref_)) THEN 
    285309        CALL cxios_get_fieldgroup_axis_ref(fieldgroup_hdl%daddr, axis_ref_, len(axis_ref_)) 
     
    339363      ENDIF 
    340364       
     365      IF (PRESENT(scale_factor_)) THEN 
     366        CALL cxios_get_fieldgroup_scale_factor(fieldgroup_hdl%daddr, scale_factor_) 
     367      ENDIF 
     368       
    341369      IF (PRESENT(standard_name_)) THEN 
    342370        CALL cxios_get_fieldgroup_standard_name(fieldgroup_hdl%daddr, standard_name_, len(standard_name_)) 
     
    360388   
    361389  SUBROUTINE xios(is_defined_fieldgroup_attr)  & 
    362     ( fieldgroup_id, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    363     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    364     , valid_min ) 
     390    ( fieldgroup_id, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     391    , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     392    , unit, valid_max, valid_min ) 
    365393     
    366394    IMPLICIT NONE 
    367395      TYPE(txios(fieldgroup))  :: fieldgroup_hdl 
    368396      CHARACTER(LEN=*), INTENT(IN) ::fieldgroup_id 
     397      LOGICAL, OPTIONAL, INTENT(OUT) :: add_offset 
     398      LOGICAL(KIND=C_BOOL) :: add_offset_tmp 
    369399      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    370400      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     
    395425      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
    396426      LOGICAL(KIND=C_BOOL) :: prec_tmp 
     427      LOGICAL, OPTIONAL, INTENT(OUT) :: scale_factor 
     428      LOGICAL(KIND=C_BOOL) :: scale_factor_tmp 
    397429      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    398430      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    406438      CALL xios(get_fieldgroup_handle)(fieldgroup_id,fieldgroup_hdl) 
    407439      CALL xios(is_defined_fieldgroup_attr_hdl_)   & 
    408       ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    409       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    410       , valid_min ) 
     440      ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     441      , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     442      , unit, valid_max, valid_min ) 
    411443     
    412444  END SUBROUTINE xios(is_defined_fieldgroup_attr) 
    413445   
    414446  SUBROUTINE xios(is_defined_fieldgroup_attr_hdl)  & 
    415     ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    416     , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    417     , valid_min ) 
     447    ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     448    , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     449    , unit, valid_max, valid_min ) 
    418450     
    419451    IMPLICIT NONE 
    420452      TYPE(txios(fieldgroup)) , INTENT(IN) :: fieldgroup_hdl 
     453      LOGICAL, OPTIONAL, INTENT(OUT) :: add_offset 
     454      LOGICAL(KIND=C_BOOL) :: add_offset_tmp 
    421455      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref 
    422456      LOGICAL(KIND=C_BOOL) :: axis_ref_tmp 
     
    447481      LOGICAL, OPTIONAL, INTENT(OUT) :: prec 
    448482      LOGICAL(KIND=C_BOOL) :: prec_tmp 
     483      LOGICAL, OPTIONAL, INTENT(OUT) :: scale_factor 
     484      LOGICAL(KIND=C_BOOL) :: scale_factor_tmp 
    449485      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name 
    450486      LOGICAL(KIND=C_BOOL) :: standard_name_tmp 
     
    457493       
    458494      CALL xios(is_defined_fieldgroup_attr_hdl_)  & 
    459       ( fieldgroup_hdl, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset, freq_op  & 
    460       , grid_ref, group_ref, level, long_name, name, operation, prec, standard_name, unit, valid_max  & 
    461       , valid_min ) 
     495      ( fieldgroup_hdl, add_offset, axis_ref, default_value, domain_ref, enabled, field_ref, freq_offset  & 
     496      , freq_op, grid_ref, group_ref, level, long_name, name, operation, prec, scale_factor, standard_name  & 
     497      , unit, valid_max, valid_min ) 
    462498     
    463499  END SUBROUTINE xios(is_defined_fieldgroup_attr_hdl) 
    464500   
    465501  SUBROUTINE xios(is_defined_fieldgroup_attr_hdl_)   & 
    466     ( fieldgroup_hdl, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_, freq_offset_  & 
    467     , freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_, standard_name_  & 
    468     , unit_, valid_max_, valid_min_ ) 
     502    ( fieldgroup_hdl, add_offset_, axis_ref_, default_value_, domain_ref_, enabled_, field_ref_  & 
     503    , freq_offset_, freq_op_, grid_ref_, group_ref_, level_, long_name_, name_, operation_, prec_  & 
     504    , scale_factor_, standard_name_, unit_, valid_max_, valid_min_ ) 
    469505     
    470506    IMPLICIT NONE 
    471507      TYPE(txios(fieldgroup)) , INTENT(IN) :: fieldgroup_hdl 
     508      LOGICAL, OPTIONAL, INTENT(OUT) :: add_offset_ 
     509      LOGICAL(KIND=C_BOOL) :: add_offset__tmp 
    472510      LOGICAL, OPTIONAL, INTENT(OUT) :: axis_ref_ 
    473511      LOGICAL(KIND=C_BOOL) :: axis_ref__tmp 
     
    498536      LOGICAL, OPTIONAL, INTENT(OUT) :: prec_ 
    499537      LOGICAL(KIND=C_BOOL) :: prec__tmp 
     538      LOGICAL, OPTIONAL, INTENT(OUT) :: scale_factor_ 
     539      LOGICAL(KIND=C_BOOL) :: scale_factor__tmp 
    500540      LOGICAL, OPTIONAL, INTENT(OUT) :: standard_name_ 
    501541      LOGICAL(KIND=C_BOOL) :: standard_name__tmp 
     
    507547      LOGICAL(KIND=C_BOOL) :: valid_min__tmp 
    508548       
     549      IF (PRESENT(add_offset_)) THEN 
     550        add_offset__tmp=cxios_is_defined_fieldgroup_add_offset(fieldgroup_hdl%daddr) 
     551        add_offset_=add_offset__tmp 
     552      ENDIF 
     553       
    509554      IF (PRESENT(axis_ref_)) THEN 
    510555        axis_ref__tmp=cxios_is_defined_fieldgroup_axis_ref(fieldgroup_hdl%daddr) 
     
    577622      ENDIF 
    578623       
     624      IF (PRESENT(scale_factor_)) THEN 
     625        scale_factor__tmp=cxios_is_defined_fieldgroup_scale_factor(fieldgroup_hdl%daddr) 
     626        scale_factor_=scale_factor__tmp 
     627      ENDIF 
     628       
    579629      IF (PRESENT(standard_name_)) THEN 
    580630        standard_name__tmp=cxios_is_defined_fieldgroup_standard_name(fieldgroup_hdl%daddr) 
Note: See TracChangeset for help on using the changeset viewer.