Ignore:
Timestamp:
11/26/14 12:06:21 (10 years ago)
Author:
rlacroix
Message:

Add a new attribute to the file definition so that the output format can be controlled.

Currently the supported formats are "netcdf4" and "netcdf4_classic". The "format" attribute is optional. The "netcdf4" format will be used when no format is explicitly defined. Since "netcdf4" is the format which was previously used by XIOS, existing configuration files will not be affected by this change.

If "netcdf4_classic" is used, the output file(s) will be created using the classic NetCDF format. This format can be used with the attribute "type" set to "one_file" if the NetCDF4 library was compiled with Parallel NetCDF support (--enable-pnetcdf).

File:
1 edited

Legend:

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

    r501 r517  
    1212   
    1313  SUBROUTINE xios(set_file_attr)  & 
    14     ( file_id, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    15     , split_freq, split_freq_format, sync_freq, type ) 
     14    ( file_id, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     15    , par_access, split_freq, split_freq_format, sync_freq, type ) 
    1616     
    1717    IMPLICIT NONE 
     
    2121      LOGICAL  , OPTIONAL, INTENT(IN) :: enabled 
    2222      LOGICAL (KIND=C_BOOL) :: enabled_tmp 
     23      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: format 
    2324      INTEGER  , OPTIONAL, INTENT(IN) :: min_digits 
    2425      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
     
    3435      CALL xios(get_file_handle)(file_id,file_hdl) 
    3536      CALL xios(set_file_attr_hdl_)   & 
    36       ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    37       , split_freq, split_freq_format, sync_freq, type ) 
     37      ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     38      , par_access, split_freq, split_freq_format, sync_freq, type ) 
    3839     
    3940  END SUBROUTINE xios(set_file_attr) 
    4041   
    4142  SUBROUTINE xios(set_file_attr_hdl)  & 
    42     ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    43     , split_freq, split_freq_format, sync_freq, type ) 
     43    ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     44    , par_access, split_freq, split_freq_format, sync_freq, type ) 
    4445     
    4546    IMPLICIT NONE 
     
    4849      LOGICAL  , OPTIONAL, INTENT(IN) :: enabled 
    4950      LOGICAL (KIND=C_BOOL) :: enabled_tmp 
     51      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: format 
    5052      INTEGER  , OPTIONAL, INTENT(IN) :: min_digits 
    5153      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
     
    6062       
    6163      CALL xios(set_file_attr_hdl_)  & 
    62       ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    63       , split_freq, split_freq_format, sync_freq, type ) 
     64      ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     65      , par_access, split_freq, split_freq_format, sync_freq, type ) 
    6466     
    6567  END SUBROUTINE xios(set_file_attr_hdl) 
    6668   
    6769  SUBROUTINE xios(set_file_attr_hdl_)   & 
    68     ( file_hdl, description_, enabled_, min_digits_, name_, name_suffix_, output_freq_, output_level_  & 
    69     , par_access_, split_freq_, split_freq_format_, sync_freq_, type_ ) 
     70    ( file_hdl, description_, enabled_, format_, min_digits_, name_, name_suffix_, output_freq_  & 
     71    , output_level_, par_access_, split_freq_, split_freq_format_, sync_freq_, type_ ) 
    7072     
    7173    IMPLICIT NONE 
     
    7476      LOGICAL  , OPTIONAL, INTENT(IN) :: enabled_ 
    7577      LOGICAL (KIND=C_BOOL) :: enabled__tmp 
     78      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: format_ 
    7679      INTEGER  , OPTIONAL, INTENT(IN) :: min_digits_ 
    7780      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ 
     
    9497      ENDIF 
    9598       
     99      IF (PRESENT(format_)) THEN 
     100        CALL cxios_set_file_format(file_hdl%daddr, format_, len(format_)) 
     101      ENDIF 
     102       
    96103      IF (PRESENT(min_digits_)) THEN 
    97104        CALL cxios_set_file_min_digits(file_hdl%daddr, min_digits_) 
     
    139146   
    140147  SUBROUTINE xios(get_file_attr)  & 
    141     ( file_id, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    142     , split_freq, split_freq_format, sync_freq, type ) 
     148    ( file_id, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     149    , par_access, split_freq, split_freq_format, sync_freq, type ) 
    143150     
    144151    IMPLICIT NONE 
     
    148155      LOGICAL  , OPTIONAL, INTENT(OUT) :: enabled 
    149156      LOGICAL (KIND=C_BOOL) :: enabled_tmp 
     157      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: format 
    150158      INTEGER  , OPTIONAL, INTENT(OUT) :: min_digits 
    151159      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
     
    161169      CALL xios(get_file_handle)(file_id,file_hdl) 
    162170      CALL xios(get_file_attr_hdl_)   & 
    163       ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    164       , split_freq, split_freq_format, sync_freq, type ) 
     171      ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     172      , par_access, split_freq, split_freq_format, sync_freq, type ) 
    165173     
    166174  END SUBROUTINE xios(get_file_attr) 
    167175   
    168176  SUBROUTINE xios(get_file_attr_hdl)  & 
    169     ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    170     , split_freq, split_freq_format, sync_freq, type ) 
     177    ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     178    , par_access, split_freq, split_freq_format, sync_freq, type ) 
    171179     
    172180    IMPLICIT NONE 
     
    175183      LOGICAL  , OPTIONAL, INTENT(OUT) :: enabled 
    176184      LOGICAL (KIND=C_BOOL) :: enabled_tmp 
     185      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: format 
    177186      INTEGER  , OPTIONAL, INTENT(OUT) :: min_digits 
    178187      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
     
    187196       
    188197      CALL xios(get_file_attr_hdl_)  & 
    189       ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    190       , split_freq, split_freq_format, sync_freq, type ) 
     198      ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     199      , par_access, split_freq, split_freq_format, sync_freq, type ) 
    191200     
    192201  END SUBROUTINE xios(get_file_attr_hdl) 
    193202   
    194203  SUBROUTINE xios(get_file_attr_hdl_)   & 
    195     ( file_hdl, description_, enabled_, min_digits_, name_, name_suffix_, output_freq_, output_level_  & 
    196     , par_access_, split_freq_, split_freq_format_, sync_freq_, type_ ) 
     204    ( file_hdl, description_, enabled_, format_, min_digits_, name_, name_suffix_, output_freq_  & 
     205    , output_level_, par_access_, split_freq_, split_freq_format_, sync_freq_, type_ ) 
    197206     
    198207    IMPLICIT NONE 
     
    201210      LOGICAL  , OPTIONAL, INTENT(OUT) :: enabled_ 
    202211      LOGICAL (KIND=C_BOOL) :: enabled__tmp 
     212      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: format_ 
    203213      INTEGER  , OPTIONAL, INTENT(OUT) :: min_digits_ 
    204214      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ 
     
    221231      ENDIF 
    222232       
     233      IF (PRESENT(format_)) THEN 
     234        CALL cxios_get_file_format(file_hdl%daddr, format_, len(format_)) 
     235      ENDIF 
     236       
    223237      IF (PRESENT(min_digits_)) THEN 
    224238        CALL cxios_get_file_min_digits(file_hdl%daddr, min_digits_) 
     
    266280   
    267281  SUBROUTINE xios(is_defined_file_attr)  & 
    268     ( file_id, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    269     , split_freq, split_freq_format, sync_freq, type ) 
     282    ( file_id, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     283    , par_access, split_freq, split_freq_format, sync_freq, type ) 
    270284     
    271285    IMPLICIT NONE 
     
    276290      LOGICAL, OPTIONAL, INTENT(OUT) :: enabled 
    277291      LOGICAL(KIND=C_BOOL) :: enabled_tmp 
     292      LOGICAL, OPTIONAL, INTENT(OUT) :: format 
     293      LOGICAL(KIND=C_BOOL) :: format_tmp 
    278294      LOGICAL, OPTIONAL, INTENT(OUT) :: min_digits 
    279295      LOGICAL(KIND=C_BOOL) :: min_digits_tmp 
     
    299315      CALL xios(get_file_handle)(file_id,file_hdl) 
    300316      CALL xios(is_defined_file_attr_hdl_)   & 
    301       ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    302       , split_freq, split_freq_format, sync_freq, type ) 
     317      ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     318      , par_access, split_freq, split_freq_format, sync_freq, type ) 
    303319     
    304320  END SUBROUTINE xios(is_defined_file_attr) 
    305321   
    306322  SUBROUTINE xios(is_defined_file_attr_hdl)  & 
    307     ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    308     , split_freq, split_freq_format, sync_freq, type ) 
     323    ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     324    , par_access, split_freq, split_freq_format, sync_freq, type ) 
    309325     
    310326    IMPLICIT NONE 
     
    314330      LOGICAL, OPTIONAL, INTENT(OUT) :: enabled 
    315331      LOGICAL(KIND=C_BOOL) :: enabled_tmp 
     332      LOGICAL, OPTIONAL, INTENT(OUT) :: format 
     333      LOGICAL(KIND=C_BOOL) :: format_tmp 
    316334      LOGICAL, OPTIONAL, INTENT(OUT) :: min_digits 
    317335      LOGICAL(KIND=C_BOOL) :: min_digits_tmp 
     
    336354       
    337355      CALL xios(is_defined_file_attr_hdl_)  & 
    338       ( file_hdl, description, enabled, min_digits, name, name_suffix, output_freq, output_level, par_access  & 
    339       , split_freq, split_freq_format, sync_freq, type ) 
     356      ( file_hdl, description, enabled, format, min_digits, name, name_suffix, output_freq, output_level  & 
     357      , par_access, split_freq, split_freq_format, sync_freq, type ) 
    340358     
    341359  END SUBROUTINE xios(is_defined_file_attr_hdl) 
    342360   
    343361  SUBROUTINE xios(is_defined_file_attr_hdl_)   & 
    344     ( file_hdl, description_, enabled_, min_digits_, name_, name_suffix_, output_freq_, output_level_  & 
    345     , par_access_, split_freq_, split_freq_format_, sync_freq_, type_ ) 
     362    ( file_hdl, description_, enabled_, format_, min_digits_, name_, name_suffix_, output_freq_  & 
     363    , output_level_, par_access_, split_freq_, split_freq_format_, sync_freq_, type_ ) 
    346364     
    347365    IMPLICIT NONE 
     
    351369      LOGICAL, OPTIONAL, INTENT(OUT) :: enabled_ 
    352370      LOGICAL(KIND=C_BOOL) :: enabled__tmp 
     371      LOGICAL, OPTIONAL, INTENT(OUT) :: format_ 
     372      LOGICAL(KIND=C_BOOL) :: format__tmp 
    353373      LOGICAL, OPTIONAL, INTENT(OUT) :: min_digits_ 
    354374      LOGICAL(KIND=C_BOOL) :: min_digits__tmp 
     
    382402      ENDIF 
    383403       
     404      IF (PRESENT(format_)) THEN 
     405        format__tmp=cxios_is_defined_file_format(file_hdl%daddr) 
     406        format_=format__tmp 
     407      ENDIF 
     408       
    384409      IF (PRESENT(min_digits_)) THEN 
    385410        min_digits__tmp=cxios_is_defined_file_min_digits(file_hdl%daddr) 
Note: See TracChangeset for help on using the changeset viewer.