Changeset 464 for XIOS


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

Location:
XIOS/trunk/src
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/array_new.hpp

    r404 r464  
    77#include "buffer_out.hpp" 
    88#include "message.hpp" 
     9#include <cmath> 
    910 
    1011using namespace blitz ; 
     12BZ_DECLARE_FUNCTION(round) 
    1113namespace xios 
    1214{ 
    13  
    1415     
    1516template <typename T_numtype,int N_rank> 
  • XIOS/trunk/src/config/field_attribute.conf

    r463 r464  
    2121DECLARE_ATTRIBUTE(double,    valid_min) 
    2222DECLARE_ATTRIBUTE(double,    valid_max) 
     23DECLARE_ATTRIBUTE(double,    add_offset) 
     24DECLARE_ATTRIBUTE(double,    scale_factor) 
  • XIOS/trunk/src/interface/c_attr/icfield_attr.cpp

    r463 r464  
    1717  typedef xios::CField*  field_Ptr; 
    1818   
     19  void cxios_set_field_add_offset(field_Ptr field_hdl, double add_offset) 
     20  { 
     21     CTimer::get("XIOS").resume(); 
     22    field_hdl->add_offset.setValue(add_offset); 
     23    field_hdl->sendAttributToServer(field_hdl->add_offset); 
     24     CTimer::get("XIOS").suspend(); 
     25  } 
     26   
     27  void cxios_get_field_add_offset(field_Ptr field_hdl, double* add_offset) 
     28  { 
     29    *add_offset = field_hdl->add_offset.getInheritedValue(); 
     30  } 
     31   
     32  bool cxios_is_defined_field_add_offset(field_Ptr field_hdl ) 
     33  { 
     34     CTimer::get("XIOS").resume(); 
     35    return field_hdl->add_offset.hasInheritedValue(); 
     36     CTimer::get("XIOS").suspend(); 
     37  } 
     38   
     39   
     40   
    1941  void cxios_set_field_axis_ref(field_Ptr field_hdl, const char * axis_ref, int axis_ref_size) 
    2042  { 
     
    348370   
    349371   
     372  void cxios_set_field_scale_factor(field_Ptr field_hdl, double scale_factor) 
     373  { 
     374     CTimer::get("XIOS").resume(); 
     375    field_hdl->scale_factor.setValue(scale_factor); 
     376    field_hdl->sendAttributToServer(field_hdl->scale_factor); 
     377     CTimer::get("XIOS").suspend(); 
     378  } 
     379   
     380  void cxios_get_field_scale_factor(field_Ptr field_hdl, double* scale_factor) 
     381  { 
     382    *scale_factor = field_hdl->scale_factor.getInheritedValue(); 
     383  } 
     384   
     385  bool cxios_is_defined_field_scale_factor(field_Ptr field_hdl ) 
     386  { 
     387     CTimer::get("XIOS").resume(); 
     388    return field_hdl->scale_factor.hasInheritedValue(); 
     389     CTimer::get("XIOS").suspend(); 
     390  } 
     391   
     392   
     393   
    350394  void cxios_set_field_standard_name(field_Ptr field_hdl, const char * standard_name, int standard_name_size) 
    351395  { 
  • XIOS/trunk/src/interface/c_attr/icfieldgroup_attr.cpp

    r463 r464  
    1717  typedef xios::CFieldGroup*  fieldgroup_Ptr; 
    1818   
     19  void cxios_set_fieldgroup_add_offset(fieldgroup_Ptr fieldgroup_hdl, double add_offset) 
     20  { 
     21     CTimer::get("XIOS").resume(); 
     22    fieldgroup_hdl->add_offset.setValue(add_offset); 
     23    fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->add_offset); 
     24     CTimer::get("XIOS").suspend(); 
     25  } 
     26   
     27  void cxios_get_fieldgroup_add_offset(fieldgroup_Ptr fieldgroup_hdl, double* add_offset) 
     28  { 
     29    *add_offset = fieldgroup_hdl->add_offset.getInheritedValue(); 
     30  } 
     31   
     32  bool cxios_is_defined_fieldgroup_add_offset(fieldgroup_Ptr fieldgroup_hdl ) 
     33  { 
     34     CTimer::get("XIOS").resume(); 
     35    return fieldgroup_hdl->add_offset.hasInheritedValue(); 
     36     CTimer::get("XIOS").suspend(); 
     37  } 
     38   
     39   
     40   
    1941  void cxios_set_fieldgroup_axis_ref(fieldgroup_Ptr fieldgroup_hdl, const char * axis_ref, int axis_ref_size) 
    2042  { 
     
    375397   
    376398   
     399  void cxios_set_fieldgroup_scale_factor(fieldgroup_Ptr fieldgroup_hdl, double scale_factor) 
     400  { 
     401     CTimer::get("XIOS").resume(); 
     402    fieldgroup_hdl->scale_factor.setValue(scale_factor); 
     403    fieldgroup_hdl->sendAttributToServer(fieldgroup_hdl->scale_factor); 
     404     CTimer::get("XIOS").suspend(); 
     405  } 
     406   
     407  void cxios_get_fieldgroup_scale_factor(fieldgroup_Ptr fieldgroup_hdl, double* scale_factor) 
     408  { 
     409    *scale_factor = fieldgroup_hdl->scale_factor.getInheritedValue(); 
     410  } 
     411   
     412  bool cxios_is_defined_fieldgroup_scale_factor(fieldgroup_Ptr fieldgroup_hdl ) 
     413  { 
     414     CTimer::get("XIOS").resume(); 
     415    return fieldgroup_hdl->scale_factor.hasInheritedValue(); 
     416     CTimer::get("XIOS").suspend(); 
     417  } 
     418   
     419   
     420   
    377421  void cxios_set_fieldgroup_standard_name(fieldgroup_Ptr fieldgroup_hdl, const char * standard_name, int standard_name_size) 
    378422  { 
  • XIOS/trunk/src/interface/fortran_attr/field_interface_attr.f90

    r463 r464  
    99     
    1010     
     11    SUBROUTINE cxios_set_field_add_offset(field_hdl, add_offset) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     14      REAL (KIND=C_DOUBLE)      , VALUE :: add_offset 
     15    END SUBROUTINE cxios_set_field_add_offset 
     16     
     17    SUBROUTINE cxios_get_field_add_offset(field_hdl, add_offset) BIND(C) 
     18      USE ISO_C_BINDING 
     19      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     20      REAL (KIND=C_DOUBLE)             :: add_offset 
     21    END SUBROUTINE cxios_get_field_add_offset 
     22     
     23    FUNCTION cxios_is_defined_field_add_offset(field_hdl ) BIND(C) 
     24      USE ISO_C_BINDING 
     25      LOGICAL(kind=C_BOOL) :: cxios_is_defined_field_add_offset 
     26      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     27    END FUNCTION cxios_is_defined_field_add_offset 
     28     
     29     
    1130    SUBROUTINE cxios_set_field_axis_ref(field_hdl, axis_ref, axis_ref_size) BIND(C) 
    1231      USE ISO_C_BINDING 
     
    274293     
    275294     
     295    SUBROUTINE cxios_set_field_scale_factor(field_hdl, scale_factor) BIND(C) 
     296      USE ISO_C_BINDING 
     297      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     298      REAL (KIND=C_DOUBLE)      , VALUE :: scale_factor 
     299    END SUBROUTINE cxios_set_field_scale_factor 
     300     
     301    SUBROUTINE cxios_get_field_scale_factor(field_hdl, scale_factor) BIND(C) 
     302      USE ISO_C_BINDING 
     303      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     304      REAL (KIND=C_DOUBLE)             :: scale_factor 
     305    END SUBROUTINE cxios_get_field_scale_factor 
     306     
     307    FUNCTION cxios_is_defined_field_scale_factor(field_hdl ) BIND(C) 
     308      USE ISO_C_BINDING 
     309      LOGICAL(kind=C_BOOL) :: cxios_is_defined_field_scale_factor 
     310      INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl 
     311    END FUNCTION cxios_is_defined_field_scale_factor 
     312     
     313     
    276314    SUBROUTINE cxios_set_field_standard_name(field_hdl, standard_name, standard_name_size) BIND(C) 
    277315      USE ISO_C_BINDING 
  • XIOS/trunk/src/interface/fortran_attr/fieldgroup_interface_attr.f90

    r463 r464  
    99     
    1010     
     11    SUBROUTINE cxios_set_fieldgroup_add_offset(fieldgroup_hdl, add_offset) BIND(C) 
     12      USE ISO_C_BINDING 
     13      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     14      REAL (KIND=C_DOUBLE)      , VALUE :: add_offset 
     15    END SUBROUTINE cxios_set_fieldgroup_add_offset 
     16     
     17    SUBROUTINE cxios_get_fieldgroup_add_offset(fieldgroup_hdl, add_offset) BIND(C) 
     18      USE ISO_C_BINDING 
     19      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     20      REAL (KIND=C_DOUBLE)             :: add_offset 
     21    END SUBROUTINE cxios_get_fieldgroup_add_offset 
     22     
     23    FUNCTION cxios_is_defined_fieldgroup_add_offset(fieldgroup_hdl ) BIND(C) 
     24      USE ISO_C_BINDING 
     25      LOGICAL(kind=C_BOOL) :: cxios_is_defined_fieldgroup_add_offset 
     26      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     27    END FUNCTION cxios_is_defined_fieldgroup_add_offset 
     28     
     29     
    1130    SUBROUTINE cxios_set_fieldgroup_axis_ref(fieldgroup_hdl, axis_ref, axis_ref_size) BIND(C) 
    1231      USE ISO_C_BINDING 
     
    295314     
    296315     
     316    SUBROUTINE cxios_set_fieldgroup_scale_factor(fieldgroup_hdl, scale_factor) BIND(C) 
     317      USE ISO_C_BINDING 
     318      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     319      REAL (KIND=C_DOUBLE)      , VALUE :: scale_factor 
     320    END SUBROUTINE cxios_set_fieldgroup_scale_factor 
     321     
     322    SUBROUTINE cxios_get_fieldgroup_scale_factor(fieldgroup_hdl, scale_factor) BIND(C) 
     323      USE ISO_C_BINDING 
     324      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     325      REAL (KIND=C_DOUBLE)             :: scale_factor 
     326    END SUBROUTINE cxios_get_fieldgroup_scale_factor 
     327     
     328    FUNCTION cxios_is_defined_fieldgroup_scale_factor(fieldgroup_hdl ) BIND(C) 
     329      USE ISO_C_BINDING 
     330      LOGICAL(kind=C_BOOL) :: cxios_is_defined_fieldgroup_scale_factor 
     331      INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl 
     332    END FUNCTION cxios_is_defined_fieldgroup_scale_factor 
     333     
     334     
    297335    SUBROUTINE cxios_set_fieldgroup_standard_name(fieldgroup_hdl, standard_name, standard_name_size) BIND(C) 
    298336      USE ISO_C_BINDING 
  • 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) 
  • 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) 
  • XIOS/trunk/src/node/field.cpp

    r460 r464  
    621621   } 
    622622    
     623   void CField::scaleFactorAddOffset(double scaleFactor, double addOffset) 
     624   { 
     625     map<int, CArray<double,1>* >::iterator it; 
     626     for(it=data_srv.begin();it!=data_srv.end();it++) *it->second = (*it->second -addOffset) * 1./scaleFactor  ; 
     627   } 
     628    
    623629   void CField::outputField(CArray<double,3>& fieldOut) 
    624630   { 
  • XIOS/trunk/src/node/field.hpp

    r460 r464  
    135135        void outputField(CArray<double,3>& fieldOut) ; 
    136136        void outputField(CArray<double,2>& fieldOut) ; 
     137        void scaleFactorAddOffset(double scaleFactor, double addOffset) ; 
    137138        void parse(xml::CXMLNode & node) ; 
    138139        CArray<double,1>* getInstantData(void)  ; 
  • XIOS/trunk/src/output/nc4_data_output.cpp

    r463 r464  
    566566//          bool isCurvilinear = domain->isCurvilinear ;  
    567567           
    568          nc_type type = (!field->prec.isEmpty() && 
    569                         ( field->prec.getValue() == 4)) 
    570                         ? NC_FLOAT : NC_DOUBLE; 
     568         nc_type type ; 
     569         if (field->prec.isEmpty()) type =  NC_FLOAT ; 
     570         else 
     571         { 
     572           if (field->prec==2) type = NC_SHORT ; 
     573           else if (field->prec==4)  type =  NC_FLOAT ; 
     574           else if (field->prec==8)   type =  NC_DOUBLE ;  
     575         } 
     576                      
    571577         bool wtime   = !(!field->operation.isEmpty() && field->foperation->timeType() == func::CFunctor::once); 
    572578                          
     
    628634            SuperClassWriter::addAttribute 
    629635               ("valid_max", field->valid_max.getValue(), &fieldid); 
     636 
     637          if (!field->scale_factor.isEmpty()) 
     638            SuperClassWriter::addAttribute 
     639               ("scale_factor", field->scale_factor.getValue(), &fieldid); 
     640 
     641           if (!field->add_offset.isEmpty()) 
     642            SuperClassWriter::addAttribute 
     643               ("add_offset", field->add_offset.getValue(), &fieldid); 
    630644                                             
    631645         SuperClassWriter::addAttribute 
     
    765779         if (server->intraCommRank==0) isRoot=true ; 
    766780         else isRoot=false ; 
    767             
     781           
     782         if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) 
     783         { 
     784           double scaleFactor=1. ; 
     785           double addOffset=0. ; 
     786           if (!field->scale_factor.isEmpty()) scaleFactor=field->scale_factor ; 
     787           if (!field->add_offset.isEmpty()) addOffset=field->add_offset ; 
     788           field->scaleFactorAddOffset(scaleFactor,addOffset) ; 
     789         } 
     790             
    768791         if (grid->hasAxis()) // 3D 
    769792         { 
     
    771794            CArray<double,3> field_data3D(domain->zoom_ni_srv,domain->zoom_nj_srv,axis->zoom_size) ; 
    772795            if (!field->default_value.isEmpty()) field_data3D = field->default_value ; 
     796 
    773797            field->outputField(field_data3D); 
     798 
     799            if (field->prec==2) field_data3D=round(field_data3D) ; 
     800 
    774801            switch (SuperClass::type) 
    775802           { 
     
    815842            if (!field->default_value.isEmpty()) field_data2D = field->default_value ; 
    816843            field->outputField(field_data2D); 
     844            if (field->prec==2) field_data2D=round(field_data2D) ; 
    817845            switch (SuperClass::type) 
    818846            { 
Note: See TracChangeset for help on using the changeset viewer.