Ignore:
Timestamp:
08/25/15 16:52:45 (9 years ago)
Author:
rlacroix
Message:

Add support for indexed output.

If the new field attribute "indexed_output" is set to true and a mask is defined (either at grid, domain or axis level), the indexed data will be outputed instead of the full data with missing values.

See http://cfconventions.org/Data/cf-conventions/cf-conventions-1.5/build/cf-conventions.html#compression-by-gathering for more information.

File:
1 edited

Legend:

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

    r608 r676  
    1313  SUBROUTINE xios(set_fieldgroup_attr)  & 
    1414    ( fieldgroup_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    15     , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    16     , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    17     ) 
     15    , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     16    , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     17    , valid_min ) 
    1818 
    1919    IMPLICIT NONE 
     
    3434      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref 
    3535      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
     36      LOGICAL  , OPTIONAL, INTENT(IN) :: indexed_output 
     37      LOGICAL (KIND=C_BOOL) :: indexed_output_tmp 
    3638      INTEGER  , OPTIONAL, INTENT(IN) :: level 
    3739      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
     
    5052      CALL xios(set_fieldgroup_attr_hdl_)   & 
    5153      ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    52       , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    53       , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    54       ) 
     54      , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     55      , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     56      , valid_min ) 
    5557 
    5658  END SUBROUTINE xios(set_fieldgroup_attr) 
     
    5860  SUBROUTINE xios(set_fieldgroup_attr_hdl)  & 
    5961    ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    60     , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    61     , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    62     ) 
     62    , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     63    , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     64    , valid_min ) 
    6365 
    6466    IMPLICIT NONE 
     
    7880      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref 
    7981      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
     82      LOGICAL  , OPTIONAL, INTENT(IN) :: indexed_output 
     83      LOGICAL (KIND=C_BOOL) :: indexed_output_tmp 
    8084      INTEGER  , OPTIONAL, INTENT(IN) :: level 
    8185      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name 
     
    9397      CALL xios(set_fieldgroup_attr_hdl_)  & 
    9498      ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    95       , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    96       , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    97       ) 
     99      , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     100      , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     101      , valid_min ) 
    98102 
    99103  END SUBROUTINE xios(set_fieldgroup_attr_hdl) 
     
    101105  SUBROUTINE xios(set_fieldgroup_attr_hdl_)   & 
    102106    ( fieldgroup_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_  & 
    103     , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ref_, group_ref_, level_, long_name_  & 
    104     , name_, operation_, prec_, read_access_, scale_factor_, standard_name_, unit_, valid_max_, valid_min_  & 
    105     ) 
     107    , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ref_, group_ref_, indexed_output_  & 
     108    , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_  & 
     109    , unit_, valid_max_, valid_min_ ) 
    106110 
    107111    IMPLICIT NONE 
     
    121125      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: grid_ref_ 
    122126      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref_ 
     127      LOGICAL  , OPTIONAL, INTENT(IN) :: indexed_output_ 
     128      LOGICAL (KIND=C_BOOL) :: indexed_output__tmp 
    123129      INTEGER  , OPTIONAL, INTENT(IN) :: level_ 
    124130      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_ 
     
    184190      ENDIF 
    185191 
     192      IF (PRESENT(indexed_output_)) THEN 
     193        indexed_output__tmp = indexed_output_ 
     194        CALL cxios_set_fieldgroup_indexed_output(fieldgroup_hdl%daddr, indexed_output__tmp) 
     195      ENDIF 
     196 
    186197      IF (PRESENT(level_)) THEN 
    187198        CALL cxios_set_fieldgroup_level(fieldgroup_hdl%daddr, level_) 
     
    233244  SUBROUTINE xios(get_fieldgroup_attr)  & 
    234245    ( fieldgroup_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    235     , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    236     , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    237     ) 
     246    , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     247    , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     248    , valid_min ) 
    238249 
    239250    IMPLICIT NONE 
     
    254265      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref 
    255266      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
     267      LOGICAL  , OPTIONAL, INTENT(OUT) :: indexed_output 
     268      LOGICAL (KIND=C_BOOL) :: indexed_output_tmp 
    256269      INTEGER  , OPTIONAL, INTENT(OUT) :: level 
    257270      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
     
    270283      CALL xios(get_fieldgroup_attr_hdl_)   & 
    271284      ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    272       , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    273       , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    274       ) 
     285      , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     286      , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     287      , valid_min ) 
    275288 
    276289  END SUBROUTINE xios(get_fieldgroup_attr) 
     
    278291  SUBROUTINE xios(get_fieldgroup_attr_hdl)  & 
    279292    ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    280     , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    281     , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    282     ) 
     293    , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     294    , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     295    , valid_min ) 
    283296 
    284297    IMPLICIT NONE 
     
    298311      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref 
    299312      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
     313      LOGICAL  , OPTIONAL, INTENT(OUT) :: indexed_output 
     314      LOGICAL (KIND=C_BOOL) :: indexed_output_tmp 
    300315      INTEGER  , OPTIONAL, INTENT(OUT) :: level 
    301316      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name 
     
    313328      CALL xios(get_fieldgroup_attr_hdl_)  & 
    314329      ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    315       , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    316       , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    317       ) 
     330      , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     331      , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     332      , valid_min ) 
    318333 
    319334  END SUBROUTINE xios(get_fieldgroup_attr_hdl) 
     
    321336  SUBROUTINE xios(get_fieldgroup_attr_hdl_)   & 
    322337    ( fieldgroup_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_  & 
    323     , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ref_, group_ref_, level_, long_name_  & 
    324     , name_, operation_, prec_, read_access_, scale_factor_, standard_name_, unit_, valid_max_, valid_min_  & 
    325     ) 
     338    , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ref_, group_ref_, indexed_output_  & 
     339    , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_  & 
     340    , unit_, valid_max_, valid_min_ ) 
    326341 
    327342    IMPLICIT NONE 
     
    341356      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: grid_ref_ 
    342357      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref_ 
     358      LOGICAL  , OPTIONAL, INTENT(OUT) :: indexed_output_ 
     359      LOGICAL (KIND=C_BOOL) :: indexed_output__tmp 
    343360      INTEGER  , OPTIONAL, INTENT(OUT) :: level_ 
    344361      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_ 
     
    404421      ENDIF 
    405422 
     423      IF (PRESENT(indexed_output_)) THEN 
     424        CALL cxios_get_fieldgroup_indexed_output(fieldgroup_hdl%daddr, indexed_output__tmp) 
     425        indexed_output_ = indexed_output__tmp 
     426      ENDIF 
     427 
    406428      IF (PRESENT(level_)) THEN 
    407429        CALL cxios_get_fieldgroup_level(fieldgroup_hdl%daddr, level_) 
     
    453475  SUBROUTINE xios(is_defined_fieldgroup_attr)  & 
    454476    ( fieldgroup_id, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    455     , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    456     , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    457     ) 
     477    , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     478    , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     479    , valid_min ) 
    458480 
    459481    IMPLICIT NONE 
     
    484506      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref 
    485507      LOGICAL(KIND=C_BOOL) :: group_ref_tmp 
     508      LOGICAL, OPTIONAL, INTENT(OUT) :: indexed_output 
     509      LOGICAL(KIND=C_BOOL) :: indexed_output_tmp 
    486510      LOGICAL, OPTIONAL, INTENT(OUT) :: level 
    487511      LOGICAL(KIND=C_BOOL) :: level_tmp 
     
    510534      CALL xios(is_defined_fieldgroup_attr_hdl_)   & 
    511535      ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    512       , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    513       , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    514       ) 
     536      , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     537      , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     538      , valid_min ) 
    515539 
    516540  END SUBROUTINE xios(is_defined_fieldgroup_attr) 
     
    518542  SUBROUTINE xios(is_defined_fieldgroup_attr_hdl)  & 
    519543    ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    520     , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    521     , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    522     ) 
     544    , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     545    , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     546    , valid_min ) 
    523547 
    524548    IMPLICIT NONE 
     
    548572      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref 
    549573      LOGICAL(KIND=C_BOOL) :: group_ref_tmp 
     574      LOGICAL, OPTIONAL, INTENT(OUT) :: indexed_output 
     575      LOGICAL(KIND=C_BOOL) :: indexed_output_tmp 
    550576      LOGICAL, OPTIONAL, INTENT(OUT) :: level 
    551577      LOGICAL(KIND=C_BOOL) :: level_tmp 
     
    573599      CALL xios(is_defined_fieldgroup_attr_hdl_)  & 
    574600      ( fieldgroup_hdl, add_offset, axis_ref, compression_level, default_value, detect_missing_value  & 
    575       , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, level, long_name  & 
    576       , name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max, valid_min  & 
    577       ) 
     601      , domain_ref, enabled, field_ref, freq_offset, freq_op, grid_ref, group_ref, indexed_output  & 
     602      , level, long_name, name, operation, prec, read_access, scale_factor, standard_name, unit, valid_max  & 
     603      , valid_min ) 
    578604 
    579605  END SUBROUTINE xios(is_defined_fieldgroup_attr_hdl) 
     
    581607  SUBROUTINE xios(is_defined_fieldgroup_attr_hdl_)   & 
    582608    ( fieldgroup_hdl, add_offset_, axis_ref_, compression_level_, default_value_, detect_missing_value_  & 
    583     , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ref_, group_ref_, level_, long_name_  & 
    584     , name_, operation_, prec_, read_access_, scale_factor_, standard_name_, unit_, valid_max_, valid_min_  & 
    585     ) 
     609    , domain_ref_, enabled_, field_ref_, freq_offset_, freq_op_, grid_ref_, group_ref_, indexed_output_  & 
     610    , level_, long_name_, name_, operation_, prec_, read_access_, scale_factor_, standard_name_  & 
     611    , unit_, valid_max_, valid_min_ ) 
    586612 
    587613    IMPLICIT NONE 
     
    611637      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref_ 
    612638      LOGICAL(KIND=C_BOOL) :: group_ref__tmp 
     639      LOGICAL, OPTIONAL, INTENT(OUT) :: indexed_output_ 
     640      LOGICAL(KIND=C_BOOL) :: indexed_output__tmp 
    613641      LOGICAL, OPTIONAL, INTENT(OUT) :: level_ 
    614642      LOGICAL(KIND=C_BOOL) :: level__tmp 
     
    694722      ENDIF 
    695723 
     724      IF (PRESENT(indexed_output_)) THEN 
     725        indexed_output__tmp = cxios_is_defined_fieldgroup_indexed_output(fieldgroup_hdl%daddr) 
     726        indexed_output_ = indexed_output__tmp 
     727      ENDIF 
     728 
    696729      IF (PRESENT(level_)) THEN 
    697730        level__tmp = cxios_is_defined_fieldgroup_level(fieldgroup_hdl%daddr) 
Note: See TracChangeset for help on using the changeset viewer.