New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 7261 for branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/variable.f90 – NEMO

Ignore:
Timestamp:
2016-11-18T09:34:22+01:00 (7 years ago)
Author:
cbricaud
Message:

phaze the rest of NEMOGCM directory ( all except NEMO directory) of the CRS branch with nemo_v3_6_STABLE branch at rev 7213 (09-09-2016) (merge -r 5519:7213 )

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/variable.f90

    r5602 r7261  
    281281!> @date November, 2014  
    282282!> - Fix memory leaks bug 
     283!> @date June, 2015 
     284!> - change way to get variable information in namelist 
     285!> @date July, 2015  
     286!> - add subroutine var_chg_unit to change unit of output variable 
     287!> @date Spetember, 2015 
     288!> - manage useless (dummy) variable 
    283289! 
    284290!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    293299   USE att                             ! attribute manager 
    294300   USE dim                             ! dimension manager 
     301   USE math                            ! mathematical function 
    295302   IMPLICIT NONE 
    296303   ! NOTE_avoid_public_variables_if_possible 
     
    300307 
    301308   PUBLIC :: tg_varextra !< array of variable structure with extra information. 
     309 
     310   PRIVATE :: cm_dumvar  !< dummy variable array 
    302311 
    303312   ! function and subroutine 
     
    318327   PUBLIC :: var_concat        !< concatenate two variables 
    319328   PUBLIC :: var_limit_value   !< forced min and max value 
     329   PUBLIC :: var_chg_unit      !< change variable unit and value 
    320330   PUBLIC :: var_max_dim       !< get array of maximum dimension use 
    321331   PUBLIC :: var_reorder       !< reorder table of value in variable structure 
     
    328338   PUBLIC :: var_chg_extra     !< read variable namelist information, and modify extra information. 
    329339   PUBLIC :: var_check_dim     !< check variable dimension expected 
     340   PUBLIC :: var_get_dummy     !< fill dummy variable array 
     341   PUBLIC :: var_is_dummy      !< check if variable is defined as dummy variable 
    330342 
    331343   PRIVATE :: var__init          ! initialize variable structure without array of value 
     
    382394   PRIVATE :: var__get_max       ! get maximum value from namelist  
    383395   PRIVATE :: var__get_min       ! get minimum value from namelist 
     396   PRIVATE :: var__get_unf       ! get scale factor value from namelist 
     397   PRIVATE :: var__get_unt       ! get unit from namelist 
    384398   PRIVATE :: var__get_interp    ! get interpolation method from namelist 
    385399   PRIVATE :: var__get_extrap    ! get extrapolation method from namelist 
     
    401415      TYPE(TATT), DIMENSION(:), POINTER :: t_att => NULL() !< variable attributes 
    402416      TYPE(TDIM), DIMENSION(ip_maxdim)  :: t_dim           !< variable dimension 
    403        
     417  
    404418      LOGICAL           :: l_file = .FALSE.  !< variable read in a file 
    405419 
     
    414428      REAL(dp)          :: d_min = dp_fill      !< minimum value  
    415429      REAL(dp)          :: d_max = dp_fill      !< maximum value  
    416        
     430  
     431      CHARACTER(LEN=lc) :: c_unt = ''           !< new variables units (linked to units factor) 
     432      REAL(dp)          :: d_unf = 1._dp        !< units factor 
     433 
    417434      !!! netcdf4 
    418435      LOGICAL           :: l_contiguous = .FALSE. !< use contiguous storage or not 
     
    433450   TYPE(TVAR), DIMENSION(:), ALLOCATABLE :: tg_varextra !< array of variable structure with extra information. 
    434451                                                        !< fill when running var_def_extra()  
     452 
     453   CHARACTER(LEN=lc), DIMENSION(ip_maxdum), SAVE :: cm_dumvar !< dummy variable 
    435454 
    436455   INTERFACE var_init 
     
    518537   !> 
    519538   !> @author J.Paul 
    520    !> - November, 2013- Initial Version 
     539   !> @date November, 2013 - Initial Version 
    521540   !> @date November, 2014 
    522541   !> - use function instead of overload assignment operator (to avoid memory leak) 
     
    548567      var__copy_unit%d_min      = td_var%d_min 
    549568      var__copy_unit%d_max      = td_var%d_max 
     569 
     570      var__copy_unit%c_unt      = TRIM(td_var%c_unt) 
     571      var__copy_unit%d_unf      = td_var%d_unf 
    550572 
    551573      var__copy_unit%i_type     = td_var%i_type 
     
    577599      var__copy_unit%c_units    = TRIM(td_var%c_units) 
    578600      var__copy_unit%c_axis     = TRIM(td_var%c_axis) 
     601      var__copy_unit%d_unf      = td_var%d_unf 
    579602      var__copy_unit%d_scf      = td_var%d_scf 
    580603      var__copy_unit%d_ofs      = td_var%d_ofs 
     
    627650   !> 
    628651   !> @author J.Paul 
    629    !> - November, 2013- Initial Version 
     652   !> @date November, 2013 - Initial Version 
    630653   !> @date November, 2014 
    631654   !> - use function instead of overload assignment operator  
     
    656679   !> 
    657680   !> @author J.Paul 
    658    !> - November, 2013- Initial Version 
     681   !> @date November, 2013 - Initial Version 
    659682   !> 
    660683   !> @param[inout] td_var variable strucutre 
     
    695718   ! 
    696719   !> @author J.Paul 
    697    !> - September, 2014- Initial Version 
     720   !> @date September, 2014 - Initial Version 
    698721   ! 
    699722   !> @param[inout] td_var array of variable strucutre 
     
    718741   ! 
    719742   !> @author J.Paul 
    720    !> - September, 2014- Initial Version 
     743   !> @date September, 2014 - Initial Version 
    721744   ! 
    722745   !> @param[inout] td_var array of variable strucutre 
     
    744767   ! 
    745768   !> @author J.Paul 
    746    !> - September, 2014- Initial Version 
     769   !> @date September, 2014 - Initial Version 
    747770   ! 
    748771   !> @param[inout] td_var array of variable strucutre 
     
    788811   !>   - id_id : variable id (read from a file). 
    789812   !>   - id_ew : number of point composing east west wrap band. 
     813   !>   - dd_unf : real(8) value for units factor attribute. 
    790814   !>   - dd_scf : real(8) value for scale factor attribute. 
    791815   !>   - dd_ofs : real(8) value for add offset attribute. 
     
    801825   !>   - cd_extrap  : a array of character defining extrapolation method. 
    802826   !>   - cd_filter  : a array of character defining filtering method. 
     827   !>   - cd_unt : a string character to define output unit 
     828   !>   - dd_unf : real(8) factor applied to change unit 
    803829   !> 
    804830   !>  @note most of these optionals arguments will be inform automatically, 
     
    806832   !> 
    807833   !> @author J.Paul 
    808    !> - November, 2013- Initial Version 
     834   !> @date November, 2013 - Initial Version 
     835   !> @date February, 2015  
     836   !> - Bug fix: conversion of the FillValue type (float case) 
     837   !> @date June, 2015  
     838   !> - add unit factor (to change unit) 
    809839   !> 
    810840   !> @param[in] cd_name         variable name 
     
    833863   !> @param[in] cd_extrap       extrapolation method 
    834864   !> @param[in] cd_filter       filter method 
     865   !> @param[in] cd_unt          new units (linked to units factor) 
     866   !> @param[in] dd_unf          units factor 
    835867   !> @return variable structure 
    836868   !------------------------------------------------------------------- 
     
    843875   &                              ld_contiguous, ld_shuffle,& 
    844876   &                              ld_fletcher32, id_deflvl, id_chunksz, & 
    845    &                              cd_interp, cd_extrap, cd_filter ) 
     877   &                              cd_interp, cd_extrap, cd_filter, & 
     878   &                              cd_unt, dd_unf ) 
    846879      IMPLICIT NONE 
    847880      ! Argument 
     
    871904      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
    872905      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     906      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     907      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    873908 
    874909 
     
    933968               tl_att=att_init('_FillValue', INT(dd_fill,i4) ) 
    934969            CASE(NF90_FLOAT) 
    935                tl_att=att_init('_FillValue', INT(dd_fill,sp) ) 
     970               tl_att=att_init('_FillValue', REAL(dd_fill,sp) ) 
    936971            CASE DEFAULT ! NF90_DOUBLE 
    937                      tl_att=att_init('_FillValue', dd_fill ) 
     972               tl_att=att_init('_FillValue', dd_fill ) 
    938973         END SELECT 
    939974         CALL var_move_att(var__init, tl_att) 
     
    10381073      ENDIF 
    10391074 
     1075      ! units factor 
     1076      IF( PRESENT(dd_unf) )THEN 
     1077         tl_att=att_init('units_factor',dd_unf) 
     1078         CALL var_move_att(var__init, tl_att) 
     1079      ENDIF 
     1080 
     1081      ! new units (linked to units factor) 
     1082      IF( PRESENT(cd_unt) )THEN 
     1083         tl_att=att_init('new_units',cd_units) 
     1084         CALL var_move_att(var__init, tl_att) 
     1085      ENDIF 
     1086 
    10401087      ! add extra information 
    10411088      CALL var__get_extra(var__init) 
     
    10471094      CALL var_del_att(var__init, 'filter') 
    10481095      CALL var_del_att(var__init, 'src_file') 
     1096      CALL var_del_att(var__init, 'src_i_indices') 
     1097      CALL var_del_att(var__init, 'src_j_indices') 
    10491098      CALL var_del_att(var__init, 'valid_min') 
    10501099      CALL var_del_att(var__init, 'valid_max') 
     
    10721121   ! 
    10731122   !> @author J.Paul 
    1074    !> - November, 2013- Initial Version 
    1075    ! 
     1123   !> @date November, 2013 - Initial Version 
     1124   !> @date June, 2015 
     1125   !> - add interp, extrap, and filter argument 
     1126   !> @date July, 2015 
     1127   !> - add unit factor (to change unit) 
     1128   !> 
    10761129   !> @param[in] cd_name         variable name 
    10771130   !> @param[in] dd_value        1D array of real(8) value 
     
    11001153   !> @param[in] id_deflvl       deflate level from 0 to 9, 0 indicates no deflation is in use 
    11011154   !> @param[in] id_chunksz      chunk size 
     1155   !> @param[in] cd_interp       interpolation method 
     1156   !> @param[in] cd_extrap       extrapolation method 
     1157   !> @param[in] cd_filter       filter method 
     1158   !> @param[in] cd_unt          new units (linked to units factor) 
     1159   !> @param[in] dd_unf          units factor 
    11021160   !> @return variable structure 
    11031161   !------------------------------------------------------------------- 
     
    11101168   &                                    dd_min, dd_max,           & 
    11111169   &                                    ld_contiguous, ld_shuffle,& 
    1112    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     1170   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     1171   &                                    cd_interp, cd_extrap, cd_filter, & 
     1172   &                                    cd_unt, dd_unf) 
    11131173      IMPLICIT NONE 
    11141174      ! Argument 
     
    11381198      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    11391199      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     1200      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     1201      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     1202      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     1203      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     1204      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    11401205 
    11411206      ! local variable 
     
    11931258      &                          ld_fletcher32=ld_fletcher32,        & 
    11941259      &                          id_deflvl=id_deflvl,                & 
    1195       &                          id_chunksz=id_chunksz(:)) 
     1260      &                          id_chunksz=id_chunksz(:),           & 
     1261      &                          cd_interp=cd_interp(:),             & 
     1262      &                          cd_extrap=cd_extrap(:),             & 
     1263      &                          cd_filter=cd_filter(:),             & 
     1264      &                          cd_unt=cd_unt, dd_unf=dd_unf ) 
    11961265    
    11971266      ! add value 
     
    12391308   ! 
    12401309   !> @author J.Paul 
    1241    !> - November, 2013- Initial Version 
     1310   !> @date November, 2013 - Initial Version 
     1311   !> @date February, 2015  
     1312   !> - bug fix: array initialise with dimension 
     1313   !> array not only one value 
     1314   !> @date June, 2015 
     1315   !> - add interp, extrap, and filter argument 
     1316   !> - Bux fix: dimension array initialise not only one value 
     1317   !> @date July, 2015 
     1318   !> - add unit factor (to change unit) 
    12421319   ! 
    12431320   !> @param[in] cd_name         variable name 
     
    12691346   !> no deflation is in use 
    12701347   !> @param[in] id_chunksz      chunk size 
     1348   !> @param[in] cd_interp       interpolation method 
     1349   !> @param[in] cd_extrap       extrapolation method 
     1350   !> @param[in] cd_filter       filter method 
     1351   !> @param[in] cd_unt          new units (linked to units factor) 
     1352   !> @param[in] dd_unf          units factor 
    12711353   !> @return variable structure 
    12721354   !------------------------------------------------------------------- 
     
    12791361   &                                    dd_min, dd_max,           & 
    12801362   &                                    ld_contiguous, ld_shuffle,& 
    1281    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     1363   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     1364   &                                    cd_interp, cd_extrap, cd_filter, & 
     1365   &                                    cd_unt, dd_unf) 
    12821366      IMPLICIT NONE 
    12831367      ! Argument 
     
    13071391      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    13081392      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     1393      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     1394      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     1395      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     1396      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     1397      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    13091398 
    13101399      ! local variable 
     
    13501439      ENDIF 
    13511440 
    1352       il_count(:)=tl_dim(1)%i_len 
     1441      il_count(:)=tl_dim(:)%i_len 
    13531442      IF( PRESENT(id_count) )THEN 
    13541443         IF( SIZE(id_count(:)) /= 2 )THEN 
     
    13811470      &                          ld_fletcher32=ld_fletcher32,        & 
    13821471      &                          id_deflvl=id_deflvl,                & 
    1383       &                          id_chunksz=id_chunksz(:)) 
     1472      &                          id_chunksz=id_chunksz(:),           & 
     1473      &                          cd_interp=cd_interp(:),             & 
     1474      &                          cd_extrap=cd_extrap(:),             & 
     1475      &                          cd_filter=cd_filter(:),             & 
     1476      &                          cd_unt=cd_unt, dd_unf=dd_unf ) 
    13841477    
    13851478      ! add value 
     
    14311524   ! 
    14321525   !> @author J.Paul 
    1433    !> - November, 2013- Initial Version 
    1434    ! 
     1526   !> @date November, 2013 - Initial Version 
     1527   !> @date June, 2015 
     1528   !> - add interp, extrap, and filter argument 
     1529   !> @date July, 2015 
     1530   !> - add unit factor (to change unit) 
     1531   !> 
    14351532   !> @param[in] cd_name         variable name 
    14361533   !> @param[in] dd_value        1D array of real(8) value 
     
    14611558   !> deflation is in use 
    14621559   !> @param[in] id_chunksz      chunk size 
     1560   !> @param[in] cd_interp       interpolation method 
     1561   !> @param[in] cd_extrap       extrapolation method 
     1562   !> @param[in] cd_filter       filter method 
     1563   !> @param[in] cd_unt          new units (linked to units factor) 
     1564   !> @param[in] dd_unf          units factor 
    14631565   !> @return variable structure 
    14641566   !------------------------------------------------------------------- 
     
    14711573   &                                    dd_min, dd_max,           & 
    14721574   &                                    ld_contiguous, ld_shuffle,& 
    1473    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     1575   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     1576   &                                    cd_interp, cd_extrap, cd_filter, & 
     1577   &                                    cd_unt, dd_unf) 
    14741578      IMPLICIT NONE 
    14751579      ! Argument 
     
    14991603      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    15001604      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     1605      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     1606      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     1607      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     1608      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     1609      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    15011610 
    15021611      ! local variable 
     
    15771686      &                          ld_fletcher32=ld_fletcher32,        & 
    15781687      &                          id_deflvl=id_deflvl,                & 
    1579       &                          id_chunksz=id_chunksz(:)) 
     1688      &                          id_chunksz=id_chunksz(:),           & 
     1689      &                          cd_interp=cd_interp(:),             & 
     1690      &                          cd_extrap=cd_extrap(:),             & 
     1691      &                          cd_filter=cd_filter(:),             & 
     1692      &                          cd_unt=cd_unt, dd_unf=dd_unf ) 
    15801693    
    15811694      ! add value 
     
    16231736   ! 
    16241737   !> @author J.Paul 
    1625    !> - November, 2013- Initial Version 
    1626    ! 
     1738   !> @date November, 2013 - Initial Version 
     1739   !> @date June, 2015 
     1740   !> - add interp, extrap, and filter argument 
     1741   !> @date July, 2015 
     1742   !> - add unit factor (to change unit) 
     1743   !> 
    16271744   !> @param[in] cd_name         variable name 
    16281745   !> @param[in] dd_value        4D array of real(8) value 
     
    16531770   !> deflation is in use 
    16541771   !> @param[in] id_chunksz      chunk size 
     1772   !> @param[in] cd_interp       interpolation method 
     1773   !> @param[in] cd_extrap       extrapolation method 
     1774   !> @param[in] cd_filter       filter method 
     1775   !> @param[in] cd_unt          new units (linked to units factor) 
     1776   !> @param[in] dd_unf          units factor 
    16551777   !> @return variable structure 
    16561778   !------------------------------------------------------------------- 
     
    16631785   &                                 dd_min, dd_max,           & 
    16641786   &                                 ld_contiguous, ld_shuffle,& 
    1665    &                                 ld_fletcher32, id_deflvl, id_chunksz) 
     1787   &                                 ld_fletcher32, id_deflvl, id_chunksz, & 
     1788   &                                 cd_interp, cd_extrap, cd_filter, & 
     1789   &                                 cd_unt, dd_unf ) 
    16661790      IMPLICIT NONE 
    16671791      ! Argument 
     
    16911815      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    16921816      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     1817      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     1818      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     1819      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     1820      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     1821      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    16931822 
    16941823      ! local variable 
     
    17231852      &                       ld_fletcher32=ld_fletcher32,        & 
    17241853      &                       id_deflvl=id_deflvl,                & 
    1725       &                       id_chunksz=id_chunksz(:)) 
     1854      &                       id_chunksz=id_chunksz(:),           & 
     1855      &                       cd_interp=cd_interp(:),             & 
     1856      &                       cd_extrap=cd_extrap(:),             & 
     1857      &                       cd_filter=cd_filter(:),             & 
     1858      &                       cd_unt=cd_unt, dd_unf=dd_unf ) 
    17261859  
    17271860      ! add value 
     
    17581891   ! 
    17591892   !> @author J.Paul 
    1760    !> - November, 2013- Initial Version 
     1893   !> @date November, 2013 - Initial Version 
     1894   !> @date June, 2015 
     1895   !> - add interp, extrap, and filter argument 
     1896   !> @date July, 2015 
     1897   !> - add unit factor (to change unit) 
    17611898   ! 
    17621899   !> @param[in] cd_name         variable name 
     
    17881925   !> deflation is in use 
    17891926   !> @param[in] id_chunksz      chunk size 
     1927   !> @param[in] cd_interp       interpolation method 
     1928   !> @param[in] cd_extrap       extrapolation method 
     1929   !> @param[in] cd_filter       filter method 
     1930   !> @param[in] cd_unt          new units (linked to units factor) 
     1931   !> @param[in] dd_unf          units factor 
    17901932   !> @return variable structure 
    17911933   !------------------------------------------------------------------- 
     
    17981940   &                                    dd_min, dd_max,           & 
    17991941   &                                    ld_contiguous, ld_shuffle,& 
    1800    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     1942   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     1943   &                                    cd_interp, cd_extrap, cd_filter, & 
     1944   &                                    cd_unt, dd_unf) 
    18011945 
    18021946      IMPLICIT NONE 
     
    18271971      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    18281972      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     1973      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     1974      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     1975      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     1976      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     1977      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
     1978 
    18291979 
    18301980      ! local variable 
     
    18702020      &                         ld_fletcher32=ld_fletcher32,        & 
    18712021      &                         id_deflvl=id_deflvl,                & 
    1872       &                         id_chunksz=id_chunksz(:)) 
     2022      &                         id_chunksz=id_chunksz(:),           & 
     2023      &                         cd_interp=cd_interp(:),             & 
     2024      &                         cd_extrap=cd_extrap(:),             & 
     2025      &                         cd_filter=cd_filter(:),             & 
     2026      &                         cd_unt=cd_unt, dd_unf=dd_unf ) 
    18732027  
    18742028      DEALLOCATE( dl_value ) 
     
    18922046   ! 
    18932047   !> @author J.Paul 
    1894    !> - November, 2013- Initial Version 
     2048   !> @date November, 2013 - Initial Version 
     2049   !> @date June, 2015 
     2050   !> - add interp, extrap, and filter argument 
     2051   !> @date July, 2015 
     2052   !> - add unit factor (to change unit) 
    18952053   ! 
    18962054   !> @param[in] cd_name         : variable name 
     
    19222080   !> deflation is in use 
    19232081   !> @param[in] id_chunksz      : chunk size 
     2082   !> @param[in] cd_interp       interpolation method 
     2083   !> @param[in] cd_extrap       extrapolation method 
     2084   !> @param[in] cd_filter       filter method 
     2085   !> @param[in] cd_unt          new units (linked to units factor) 
     2086   !> @param[in] dd_unf          units factor 
    19242087   !> @return variable structure 
    19252088   !------------------------------------------------------------------- 
     
    19322095   &                                    dd_min, dd_max,           & 
    19332096   &                                    ld_contiguous, ld_shuffle,& 
    1934    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     2097   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     2098   &                                    cd_interp, cd_extrap, cd_filter, & 
     2099   &                                    cd_unt, dd_unf) 
    19352100 
    19362101      IMPLICIT NONE 
     
    19612126      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    19622127      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     2128      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     2129      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     2130      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     2131      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     2132      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    19632133 
    19642134      ! local variable 
     
    20062176      &                         ld_fletcher32=ld_fletcher32,        & 
    20072177      &                         id_deflvl=id_deflvl,                & 
    2008       &                         id_chunksz=id_chunksz(:)) 
     2178      &                         id_chunksz=id_chunksz(:),           & 
     2179      &                         cd_interp=cd_interp(:),             & 
     2180      &                         cd_extrap=cd_extrap(:),             & 
     2181      &                         cd_filter=cd_filter(:),             & 
     2182      &                         cd_unt=cd_unt, dd_unf=dd_unf ) 
    20092183       
    20102184      DEALLOCATE( dl_value ) 
     
    20282202   ! 
    20292203   !> @author J.Paul 
    2030    !> - November, 2013- Initial Version 
     2204   !> @date November, 2013 - Initial Version 
     2205   !> @date June, 2015 
     2206   !> - add interp, extrap, and filter argument 
     2207   !> @date July, 2015 
     2208   !> - add unit factor (to change unit) 
    20312209   ! 
    20322210   !> @param[in] cd_name         : variable name 
     
    20582236   !> deflation is in use 
    20592237   !> @param[in] id_chunksz      : chunk size 
     2238   !> @param[in] cd_interp       interpolation method 
     2239   !> @param[in] cd_extrap       extrapolation method 
     2240   !> @param[in] cd_filter       filter method 
     2241   !> @param[in] cd_unt          new units (linked to units factor) 
     2242   !> @param[in] dd_unf          units factor 
    20602243   !> @return variable structure 
    20612244   !------------------------------------------------------------------- 
     
    20682251   &                                    dd_min, dd_max,           & 
    20692252   &                                    ld_contiguous, ld_shuffle,& 
    2070    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     2253   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     2254   &                                    cd_interp, cd_extrap, cd_filter, & 
     2255   &                                    cd_unt, dd_unf) 
    20712256 
    20722257      IMPLICIT NONE 
     
    20972282      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    20982283      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     2284      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     2285      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     2286      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     2287      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     2288      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    20992289 
    21002290      ! local variable 
     
    21432333      &                         ld_fletcher32=ld_fletcher32,        & 
    21442334      &                         id_deflvl=id_deflvl,                & 
    2145       &                         id_chunksz=id_chunksz(:)) 
     2335      &                         id_chunksz=id_chunksz(:),           & 
     2336      &                         cd_interp=cd_interp(:),             & 
     2337      &                         cd_extrap=cd_extrap(:),             & 
     2338      &                         cd_filter=cd_filter(:),             & 
     2339      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    21462340       
    21472341      DEALLOCATE( dl_value ) 
     
    21652359   ! 
    21662360   !> @author J.Paul 
    2167    !> - November, 2013- Initial Version 
     2361   !> @date November, 2013 - Initial Version 
     2362   !> @date June, 2015 
     2363   !> - add interp, extrap, and filter argument 
     2364   !> @date July, 2015 
     2365   !> - add unit factor (to change unit) 
    21682366   ! 
    21692367   !> @param[in] cd_name         variable name 
     
    21952393   !> deflation is in use 
    21962394   !> @param[in] id_chunksz      chunk size 
     2395   !> @param[in] cd_interp       interpolation method 
     2396   !> @param[in] cd_extrap       extrapolation method 
     2397   !> @param[in] cd_filter       filter method 
     2398   !> @param[in] cd_unt          new units (linked to units factor) 
     2399   !> @param[in] dd_unf          units factor 
    21972400   !> @return variable structure 
    21982401   !------------------------------------------------------------------- 
     
    22052408   &                                 dd_min, dd_max,           & 
    22062409   &                                 ld_contiguous, ld_shuffle,& 
    2207    &                                 ld_fletcher32, id_deflvl, id_chunksz) 
     2410   &                                 ld_fletcher32, id_deflvl, id_chunksz, & 
     2411   &                                 cd_interp, cd_extrap, cd_filter, & 
     2412   &                                 cd_unt, dd_unf) 
    22082413 
    22092414      IMPLICIT NONE 
     
    22342439      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    22352440      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     2441      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     2442      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     2443      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     2444      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     2445      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    22362446 
    22372447      ! local variable 
     
    22812491      &                      ld_fletcher32=ld_fletcher32,        & 
    22822492      &                      id_deflvl=id_deflvl,                & 
    2283       &                      id_chunksz=id_chunksz(:)) 
     2493      &                      id_chunksz=id_chunksz(:),           & 
     2494      &                      cd_interp=cd_interp(:),             & 
     2495      &                      cd_extrap=cd_extrap(:),             & 
     2496      &                      cd_filter=cd_filter(:),             & 
     2497      &                      cd_unt=cd_unt, dd_unf=dd_unf) 
    22842498       
    22852499      DEALLOCATE( dl_value ) 
     
    23032517   ! 
    23042518   !> @author J.Paul 
    2305    !> - November, 2013- Initial Version 
     2519   !> @date November, 2013 - Initial Version 
     2520   !> @date June, 2015 
     2521   !> - add interp, extrap, and filter argument 
     2522   !> @date July, 2015 
     2523   !> - add unit factor (to change unit) 
    23062524   ! 
    23072525   !> @param[in] cd_name         : variable name 
     
    23332551   !> deflation is in use 
    23342552   !> @param[in] id_chunksz      : chunk size 
     2553   !> @param[in] cd_interp       interpolation method 
     2554   !> @param[in] cd_extrap       extrapolation method 
     2555   !> @param[in] cd_filter       filter method 
     2556   !> @param[in] cd_unt          new units (linked to units factor) 
     2557   !> @param[in] dd_unf          units factor 
    23352558   !> @return variable structure 
    23362559   !------------------------------------------------------------------- 
     
    23432566   &                                    dd_min, dd_max,           & 
    23442567   &                                    ld_contiguous, ld_shuffle,& 
    2345    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     2568   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     2569   &                                    cd_interp, cd_extrap, cd_filter, & 
     2570   &                                    cd_unt, dd_unf) 
    23462571 
    23472572      IMPLICIT NONE 
     
    23722597      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    23732598      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     2599      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     2600      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     2601      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     2602      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     2603      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    23742604 
    23752605      ! local variable 
     
    24152645      &                         ld_fletcher32=ld_fletcher32,        & 
    24162646      &                         id_deflvl=id_deflvl,                & 
    2417       &                         id_chunksz=id_chunksz(:)) 
     2647      &                         id_chunksz=id_chunksz(:),           & 
     2648      &                         cd_interp=cd_interp(:),             & 
     2649      &                         cd_extrap=cd_extrap(:),             & 
     2650      &                         cd_filter=cd_filter(:),             & 
     2651      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    24182652  
    24192653      DEALLOCATE( dl_value ) 
     
    24372671   ! 
    24382672   !> @author J.Paul 
    2439    !> - November, 2013- Initial Version 
     2673   !> @date November, 2013 - Initial Version 
     2674   !> @date June, 2015 
     2675   !> - add interp, extrap, and filter argument 
     2676   !> @date July, 2015 
     2677   !> - add unit factor (to change unit) 
    24402678   ! 
    24412679   !> @param[in] cd_name         variable name 
     
    24652703   !> @param[in] id_deflvl       deflate level from 0 to 9, 0 indicates no deflation is in use 
    24662704   !> @param[in] id_chunksz      chunk size 
     2705   !> @param[in] cd_interp       interpolation method 
     2706   !> @param[in] cd_extrap       extrapolation method 
     2707   !> @param[in] cd_filter       filter method 
     2708   !> @param[in] cd_unt          new units (linked to units factor) 
     2709   !> @param[in] dd_unf          units factor 
    24672710   !> @return variable structure 
    24682711   !------------------------------------------------------------------- 
     
    24752718   &                                    dd_min, dd_max,           & 
    24762719   &                                    ld_contiguous, ld_shuffle,& 
    2477    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     2720   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     2721   &                                    cd_interp, cd_extrap, cd_filter, & 
     2722   &                                    cd_unt, dd_unf) 
    24782723 
    24792724      IMPLICIT NONE 
     
    25042749      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    25052750      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     2751      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     2752      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     2753      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     2754      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     2755      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    25062756 
    25072757      ! local variable 
     
    25492799      &                         ld_fletcher32=ld_fletcher32,        & 
    25502800      &                         id_deflvl=id_deflvl,                & 
    2551       &                         id_chunksz=id_chunksz(:)) 
     2801      &                         id_chunksz=id_chunksz(:),           & 
     2802      &                         cd_interp=cd_interp(:),             & 
     2803      &                         cd_extrap=cd_extrap(:),             & 
     2804      &                         cd_filter=cd_filter(:),             & 
     2805      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    25522806       
    25532807      DEALLOCATE( dl_value ) 
     
    25712825   ! 
    25722826   !> @author J.Paul 
    2573    !> - November, 2013- Initial Version 
     2827   !> @date November, 2013 - Initial Version 
     2828   !> @date June, 2015 
     2829   !> - add interp, extrap, and filter argument 
     2830   !> @date July, 2015 
     2831   !> - add unit factor (to change unit) 
    25742832   ! 
    25752833   !> @param[in] cd_name         variable name 
     
    26012859   !> deflation is in use 
    26022860   !> @param[in] id_chunksz      chunk size 
     2861   !> @param[in] cd_interp       interpolation method 
     2862   !> @param[in] cd_extrap       extrapolation method 
     2863   !> @param[in] cd_filter       filter method 
     2864   !> @param[in] cd_unt          new units (linked to units factor) 
     2865   !> @param[in] dd_unf          units factor 
    26032866   !> @return variable structure 
    26042867   !------------------------------------------------------------------- 
     
    26112874   &                                    dd_min, dd_max,           & 
    26122875   &                                    ld_contiguous, ld_shuffle,& 
    2613    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     2876   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     2877   &                                    cd_interp, cd_extrap, cd_filter, & 
     2878   &                                    cd_unt, dd_unf) 
    26142879 
    26152880      IMPLICIT NONE 
     
    26402905      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    26412906      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     2907      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     2908      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     2909      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     2910      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     2911      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    26422912 
    26432913      ! local variable 
     
    26862956      &                         ld_fletcher32=ld_fletcher32,        & 
    26872957      &                         id_deflvl=id_deflvl,                & 
    2688       &                         id_chunksz=id_chunksz(:)) 
     2958      &                         id_chunksz=id_chunksz(:),           & 
     2959      &                         cd_interp=cd_interp(:),             & 
     2960      &                         cd_extrap=cd_extrap(:),             & 
     2961      &                         cd_filter=cd_filter(:),             & 
     2962      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    26892963       
    26902964      DEALLOCATE( dl_value ) 
     
    27082982   ! 
    27092983   !> @author J.Paul 
    2710    !> - November, 2013- Initial Version 
     2984   !> @date November, 2013 - Initial Version 
     2985   !> @date June, 2015 
     2986   !> - add interp, extrap, and filter argument 
     2987   !> @date July, 2015 
     2988   !> - add unit factor (to change unit) 
    27112989   ! 
    27122990   !> @param[in] cd_name         variable name 
     
    27383016   !> deflation is in use 
    27393017   !> @param[in] id_chunksz      chunk size 
     3018   !> @param[in] cd_interp       interpolation method 
     3019   !> @param[in] cd_extrap       extrapolation method 
     3020   !> @param[in] cd_filter       filter method 
     3021   !> @param[in] cd_unt          new units (linked to units factor) 
     3022   !> @param[in] dd_unf          units factor 
    27403023   !> @return variable structure 
    27413024   !------------------------------------------------------------------- 
     
    27483031   &                                 dd_min, dd_max,           & 
    27493032   &                                 ld_contiguous, ld_shuffle,& 
    2750    &                                 ld_fletcher32, id_deflvl, id_chunksz) 
     3033   &                                 ld_fletcher32, id_deflvl, id_chunksz, & 
     3034   &                                 cd_interp, cd_extrap, cd_filter, & 
     3035   &                                 cd_unt, dd_unf) 
    27513036 
    27523037      IMPLICIT NONE 
     
    27773062      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    27783063      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     3064      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     3065      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     3066      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     3067      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     3068      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
     3069 
    27793070 
    27803071      ! local variable 
     
    28243115      &                      ld_fletcher32=ld_fletcher32,        & 
    28253116      &                      id_deflvl=id_deflvl,                & 
    2826       &                      id_chunksz=id_chunksz(:)) 
     3117      &                      id_chunksz=id_chunksz(:),           & 
     3118      &                      cd_interp=cd_interp(:),             & 
     3119      &                      cd_extrap=cd_extrap(:),             & 
     3120      &                      cd_filter=cd_filter(:),             & 
     3121      &                      cd_unt=cd_unt, dd_unf=dd_unf) 
    28273122       
    28283123      DEALLOCATE( dl_value ) 
     
    28463141   ! 
    28473142   !> @author J.Paul 
    2848    !> - November, 2013- Initial Version 
     3143   !> @date November, 2013 - Initial Version 
     3144   !> @date June, 2015 
     3145   !> - add interp, extrap, and filter argument 
     3146   !> @date July, 2015 
     3147   !> - add unit factor (to change unit) 
    28493148   ! 
    28503149   !> @param[in] cd_name         variable name 
     
    28763175   !> deflation is in use 
    28773176   !> @param[in] id_chunksz      chunk size 
     3177   !> @param[in] cd_interp       interpolation method 
     3178   !> @param[in] cd_extrap       extrapolation method 
     3179   !> @param[in] cd_filter       filter method 
     3180   !> @param[in] cd_unt          new units (linked to units factor) 
     3181   !> @param[in] dd_unf          units factor 
    28783182   !> @return variable structure 
    28793183   !------------------------------------------------------------------- 
     
    28863190   &                                    dd_min, dd_max,           & 
    28873191   &                                    ld_contiguous, ld_shuffle,& 
    2888    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     3192   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     3193   &                                    cd_interp, cd_extrap, cd_filter, & 
     3194   &                                    cd_unt, dd_unf) 
    28893195 
    28903196      IMPLICIT NONE 
     
    29153221      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    29163222      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     3223      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     3224      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     3225      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     3226      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     3227      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    29173228 
    29183229      ! local variable 
     
    29583269      &                         ld_fletcher32=ld_fletcher32,        & 
    29593270      &                         id_deflvl=id_deflvl,                & 
    2960       &                         id_chunksz=id_chunksz(:)) 
     3271      &                         id_chunksz=id_chunksz(:),           & 
     3272      &                         cd_interp=cd_interp(:),             & 
     3273      &                         cd_extrap=cd_extrap(:),             & 
     3274      &                         cd_filter=cd_filter(:),             & 
     3275      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    29613276  
    29623277      DEALLOCATE( dl_value ) 
     
    29803295   ! 
    29813296   !> @author J.Paul 
    2982    !> - November, 2013- Initial Version 
     3297   !> @date November, 2013 - Initial Version 
     3298   !> @date June, 2015 
     3299   !> - add interp, extrap, and filter argument 
     3300   !> @date July, 2015 
     3301   !> - add unit factor (to change unit) 
    29833302   ! 
    29843303   !> @param[in] cd_name         variable name 
     
    30103329   !> deflation is in use 
    30113330   !> @param[in] id_chunksz      chunk size 
     3331   !> @param[in] cd_interp       interpolation method 
     3332   !> @param[in] cd_extrap       extrapolation method 
     3333   !> @param[in] cd_filter       filter method 
     3334   !> @param[in] cd_unt          new units (linked to units factor) 
     3335   !> @param[in] dd_unf          units factor 
    30123336   !> @return variable structure 
    30133337   !------------------------------------------------------------------- 
     
    30203344   &                                    dd_min, dd_max,           & 
    30213345   &                                    ld_contiguous, ld_shuffle,& 
    3022    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     3346   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     3347   &                                    cd_interp, cd_extrap, cd_filter, & 
     3348   &                                    cd_unt, dd_unf) 
    30233349 
    30243350      IMPLICIT NONE 
     
    30493375      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    30503376      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     3377      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     3378      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     3379      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     3380      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     3381      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    30513382 
    30523383      ! local variable 
     
    30943425      &                         ld_fletcher32=ld_fletcher32,        & 
    30953426      &                         id_deflvl=id_deflvl,                & 
    3096       &                         id_chunksz=id_chunksz(:)) 
     3427      &                         id_chunksz=id_chunksz(:),           & 
     3428      &                         cd_interp=cd_interp(:),             & 
     3429      &                         cd_extrap=cd_extrap(:),             & 
     3430      &                         cd_filter=cd_filter(:),             & 
     3431      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    30973432       
    30983433      DEALLOCATE( dl_value ) 
     
    31163451   ! 
    31173452   !> @author J.Paul 
    3118    !> - November, 2013- Initial Version 
     3453   !> @date November, 2013 - Initial Version 
     3454   !> @date June, 2015 
     3455   !> - add interp, extrap, and filter argument 
     3456   !> @date July, 2015 
     3457   !> - add unit factor (to change unit) 
    31193458   ! 
    31203459   !> @param[in] cd_name         variable name 
     
    31463485   !> deflation is in use 
    31473486   !> @param[in] id_chunksz      chunk size 
     3487   !> @param[in] cd_interp       interpolation method 
     3488   !> @param[in] cd_extrap       extrapolation method 
     3489   !> @param[in] cd_filter       filter method 
     3490   !> @param[in] cd_unt          new units (linked to units factor) 
     3491   !> @param[in] dd_unf          units factor 
    31483492   !> @return variable structure 
    31493493   !------------------------------------------------------------------- 
     
    31563500   &                                    dd_min, dd_max,           & 
    31573501   &                                    ld_contiguous, ld_shuffle,& 
    3158    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     3502   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     3503   &                                    cd_interp, cd_extrap, cd_filter, & 
     3504   &                                    cd_unt, dd_unf) 
    31593505 
    31603506      IMPLICIT NONE 
     
    31853531      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    31863532      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     3533      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     3534      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     3535      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     3536      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     3537      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    31873538 
    31883539      ! local variable 
     
    32313582      &                         ld_fletcher32=ld_fletcher32,        & 
    32323583      &                         id_deflvl=id_deflvl,                & 
    3233       &                         id_chunksz=id_chunksz(:)) 
     3584      &                         id_chunksz=id_chunksz(:),           & 
     3585      &                         cd_interp=cd_interp(:),             & 
     3586      &                         cd_extrap=cd_extrap(:),             & 
     3587      &                         cd_filter=cd_filter(:),             & 
     3588      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    32343589       
    32353590      DEALLOCATE( dl_value ) 
     
    32533608   ! 
    32543609   !> @author J.Paul 
    3255    !> - November, 2013- Initial Version 
     3610   !> @date November, 2013 - Initial Version 
     3611   !> @date June, 2015 
     3612   !> - add interp, extrap, and filter argument 
     3613   !> @date July, 2015 
     3614   !> - add unit factor (to change unit) 
    32563615   ! 
    32573616   !> @param[in] cd_name         variable name 
     
    32833642   !> deflation is in use 
    32843643   !> @param[in] id_chunksz      chunk size 
     3644   !> @param[in] cd_interp       interpolation method 
     3645   !> @param[in] cd_extrap       extrapolation method 
     3646   !> @param[in] cd_filter       filter method 
     3647   !> @param[in] cd_unt          new units (linked to units factor) 
     3648   !> @param[in] dd_unf          units factor 
     3649 
    32853650   !> @return variable structure 
    32863651   !------------------------------------------------------------------- 
     
    32933658   &                                 dd_min, dd_max,           & 
    32943659   &                                 ld_contiguous, ld_shuffle,& 
    3295    &                                 ld_fletcher32, id_deflvl, id_chunksz) 
     3660   &                                 ld_fletcher32, id_deflvl, id_chunksz, & 
     3661   &                                 cd_interp, cd_extrap, cd_filter, & 
     3662   &                                 cd_unt, dd_unf) 
    32963663 
    32973664      IMPLICIT NONE 
     
    33223689      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    33233690      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     3691      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     3692      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     3693      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     3694      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     3695      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    33243696 
    33253697      ! local variable 
     
    33693741      &                      ld_fletcher32=ld_fletcher32,        & 
    33703742      &                      id_deflvl=id_deflvl,                & 
    3371       &                      id_chunksz=id_chunksz(:)) 
     3743      &                      id_chunksz=id_chunksz(:),           & 
     3744      &                      cd_interp=cd_interp(:),             & 
     3745      &                      cd_extrap=cd_extrap(:),             & 
     3746      &                      cd_filter=cd_filter(:),             & 
     3747      &                      cd_unt=cd_unt, dd_unf=dd_unf) 
    33723748       
    33733749      DEALLOCATE( dl_value ) 
     
    33913767   ! 
    33923768   !> @author J.Paul 
    3393    !> - November, 2013- Initial Version 
     3769   !> @date November, 2013 - Initial Version 
     3770   !> @date June, 2015 
     3771   !> - add interp, extrap, and filter argument 
     3772   !> @date July, 2015 
     3773   !> - add unit factor (to change unit) 
    33943774   ! 
    33953775   !> @param[in] cd_name         variable name 
     
    34213801   !> deflation is in use 
    34223802   !> @param[in] id_chunksz      chunk size 
     3803   !> @param[in] cd_interp       interpolation method 
     3804   !> @param[in] cd_extrap       extrapolation method 
     3805   !> @param[in] cd_filter       filter method 
     3806   !> @param[in] cd_unt          new units (linked to units factor) 
     3807   !> @param[in] dd_unf          units factor 
    34233808   !> @return variable structure 
    34243809   !------------------------------------------------------------------- 
     
    34313816   &                                    dd_min, dd_max,           & 
    34323817   &                                    ld_contiguous, ld_shuffle,& 
    3433    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     3818   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     3819   &                                    cd_interp, cd_extrap, cd_filter, & 
     3820   &                                    cd_unt, dd_unf) 
    34343821 
    34353822      IMPLICIT NONE 
     
    34603847      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    34613848      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     3849      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     3850      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     3851      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     3852      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     3853      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
     3854 
    34623855 
    34633856      ! local variable 
     
    35033896      &                         ld_fletcher32=ld_fletcher32,        & 
    35043897      &                         id_deflvl=id_deflvl,                & 
    3505       &                         id_chunksz=id_chunksz(:)) 
     3898      &                         id_chunksz=id_chunksz(:),           & 
     3899      &                         cd_interp=cd_interp(:),             & 
     3900      &                         cd_extrap=cd_extrap(:),             & 
     3901      &                         cd_filter=cd_filter(:),             & 
     3902      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    35063903  
    35073904      DEALLOCATE( dl_value ) 
     
    35253922   ! 
    35263923   !> @author J.Paul 
    3527    !> - November, 2013- Initial Version 
     3924   !> @date November, 2013 - Initial Version 
     3925   !> @date June, 2015 
     3926   !> - add interp, extrap, and filter argument 
     3927   !> @date July, 2015 
     3928   !> - add unit factor (to change unit) 
    35283929   ! 
    35293930   !> @param[in] cd_name         variable name 
     
    35553956   !> deflation is in use 
    35563957   !> @param[in] id_chunksz      chunk size 
     3958   !> @param[in] cd_interp       interpolation method 
     3959   !> @param[in] cd_extrap       extrapolation method 
     3960   !> @param[in] cd_filter       filter method 
     3961   !> @param[in] cd_unt          new units (linked to units factor) 
     3962   !> @param[in] dd_unf          units factor 
    35573963   !> @return variable structure 
    35583964   !------------------------------------------------------------------- 
     
    35653971   &                                    dd_min, dd_max,           & 
    35663972   &                                    ld_contiguous, ld_shuffle,& 
    3567    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     3973   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     3974   &                                    cd_interp, cd_extrap, cd_filter, & 
     3975   &                                    cd_unt, dd_unf) 
    35683976 
    35693977      IMPLICIT NONE 
     
    35944002      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    35954003      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     4004      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     4005      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     4006      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     4007      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     4008      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
     4009 
    35964010 
    35974011      ! local variable 
     
    36394053      &                         ld_fletcher32=ld_fletcher32,        & 
    36404054      &                         id_deflvl=id_deflvl,                & 
    3641       &                         id_chunksz=id_chunksz(:)) 
     4055      &                         id_chunksz=id_chunksz(:),           & 
     4056      &                         cd_interp=cd_interp(:),             & 
     4057      &                         cd_extrap=cd_extrap(:),             & 
     4058      &                         cd_filter=cd_filter(:),             & 
     4059      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    36424060       
    36434061      DEALLOCATE( dl_value ) 
     
    36614079   ! 
    36624080   !> @author J.Paul 
    3663    !> - November, 2013- Initial Version 
     4081   !> @date November, 2013 - Initial Version 
     4082   !> @date June, 2015 
     4083   !> - add interp, extrap, and filter argument 
     4084   !> @date July, 2015 
     4085   !> - add unit factor (to change unit) 
    36644086   ! 
    36654087   !> @param[in] cd_name         variable name 
     
    36914113   !> deflation is in use 
    36924114   !> @param[in] id_chunksz      chunk size 
     4115   !> @param[in] cd_interp       interpolation method 
     4116   !> @param[in] cd_extrap       extrapolation method 
     4117   !> @param[in] cd_filter       filter method 
     4118   !> @param[in] cd_unt          new units (linked to units factor) 
     4119   !> @param[in] dd_unf          units factor 
    36934120   !> @return variable structure 
    36944121   !------------------------------------------------------------------- 
     
    37014128   &                                    dd_min, dd_max,           & 
    37024129   &                                    ld_contiguous, ld_shuffle,& 
    3703    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     4130   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     4131   &                                    cd_interp, cd_extrap, cd_filter, & 
     4132   &                                    cd_unt, dd_unf) 
    37044133 
    37054134      IMPLICIT NONE 
     
    37304159      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    37314160      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     4161      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     4162      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     4163      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     4164      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     4165      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    37324166 
    37334167      ! local variable 
     
    37764210      &                         ld_fletcher32=ld_fletcher32,        & 
    37774211      &                         id_deflvl=id_deflvl,                & 
    3778       &                         id_chunksz=id_chunksz(:)) 
     4212      &                         id_chunksz=id_chunksz(:),           & 
     4213      &                         cd_interp=cd_interp(:),             & 
     4214      &                         cd_extrap=cd_extrap(:),             & 
     4215      &                         cd_filter=cd_filter(:),             & 
     4216      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    37794217       
    37804218      DEALLOCATE( dl_value ) 
     
    37984236   ! 
    37994237   !> @author J.Paul 
    3800    !> - November, 2013- Initial Version 
     4238   !> @date November, 2013 - Initial Version 
     4239   !> @date June, 2015 
     4240   !> - add interp, extrap, and filter argument 
     4241   !> @date July, 2015 
     4242   !> - add unit factor (to change unit) 
    38014243   ! 
    38024244   !> @param[in] cd_name         variable name 
     
    38284270   !> deflation is in use 
    38294271   !> @param[in] id_chunksz      chunk size 
     4272   !> @param[in] cd_interp       interpolation method 
     4273   !> @param[in] cd_extrap       extrapolation method 
     4274   !> @param[in] cd_filter       filter method 
     4275   !> @param[in] cd_unt          new units (linked to units factor) 
     4276   !> @param[in] dd_unf          units factor 
    38304277   !> @return variable structure 
    38314278   !------------------------------------------------------------------- 
     
    38384285   &                                 dd_min, dd_max,           & 
    38394286   &                                 ld_contiguous, ld_shuffle,& 
    3840    &                                 ld_fletcher32, id_deflvl, id_chunksz) 
     4287   &                                 ld_fletcher32, id_deflvl, id_chunksz, & 
     4288   &                                 cd_interp, cd_extrap, cd_filter, & 
     4289   &                                 cd_unt, dd_unf) 
    38414290 
    38424291      IMPLICIT NONE 
     
    38674316      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    38684317      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     4318      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     4319      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     4320      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     4321      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     4322      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    38694323 
    38704324      ! local variable 
     
    39144368      &                      ld_fletcher32=ld_fletcher32,        & 
    39154369      &                      id_deflvl=id_deflvl,                & 
    3916       &                      id_chunksz=id_chunksz(:)) 
     4370      &                      id_chunksz=id_chunksz(:),           & 
     4371      &                      cd_interp=cd_interp(:),             & 
     4372      &                      cd_extrap=cd_extrap(:),             & 
     4373      &                      cd_filter=cd_filter(:),             & 
     4374      &                      cd_unt=cd_unt, dd_unf=dd_unf) 
    39174375       
    39184376      DEALLOCATE( dl_value ) 
     
    39364394   ! 
    39374395   !> @author J.Paul 
    3938    !> - November, 2013- Initial Version 
     4396   !> @date November, 2013 - Initial Version 
     4397   !> @date June, 2015 
     4398   !> - add interp, extrap, and filter argument 
     4399   !> @date July, 2015 
     4400   !> - add unit factor (to change unit) 
    39394401   ! 
    39404402   !> @param[in] cd_name         variable name 
     
    39664428   !> deflation is in use 
    39674429   !> @param[in] id_chunksz      chunk size 
     4430   !> @param[in] cd_interp       interpolation method 
     4431   !> @param[in] cd_extrap       extrapolation method 
     4432   !> @param[in] cd_filter       filter method 
     4433   !> @param[in] cd_unt          new units (linked to units factor) 
     4434   !> @param[in] dd_unf          units factor 
    39684435   !> @return variable structure 
    39694436   !------------------------------------------------------------------- 
     
    39764443   &                                    dd_min, dd_max,           & 
    39774444   &                                    ld_contiguous, ld_shuffle,& 
    3978    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     4445   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     4446   &                                    cd_interp, cd_extrap, cd_filter, & 
     4447   &                                    cd_unt, dd_unf) 
    39794448 
    39804449      IMPLICIT NONE 
     
    40054474      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    40064475      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     4476      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     4477      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     4478      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     4479      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     4480      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    40074481 
    40084482      ! local variable 
     
    40484522      &                         ld_fletcher32=ld_fletcher32,        & 
    40494523      &                         id_deflvl=id_deflvl,                & 
    4050       &                         id_chunksz=id_chunksz(:)) 
     4524      &                         id_chunksz=id_chunksz(:),           & 
     4525      &                         cd_interp=cd_interp(:),             & 
     4526      &                         cd_extrap=cd_extrap(:),             & 
     4527      &                         cd_filter=cd_filter(:),             & 
     4528      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    40514529  
    40524530      DEALLOCATE( dl_value ) 
     
    40704548   ! 
    40714549   !> @author J.Paul 
    4072    !> - November, 2013- Initial Version 
     4550   !> @date November, 2013 - Initial Version 
     4551   !> @date June, 2015 
     4552   !> - add interp, extrap, and filter argument 
     4553   !> @date July, 2015 
     4554   !> - add unit factor (to change unit) 
    40734555   ! 
    40744556   !> @param[in] cd_name         variable name 
     
    41004582   !> deflation is in use 
    41014583   !> @param[in] id_chunksz      chunk size 
     4584   !> @param[in] cd_interp       interpolation method 
     4585   !> @param[in] cd_extrap       extrapolation method 
     4586   !> @param[in] cd_filter       filter method 
     4587   !> @param[in] cd_unt          new units (linked to units factor) 
     4588   !> @param[in] dd_unf          units factor 
    41024589   !> @return variable structure 
    41034590   !------------------------------------------------------------------- 
     
    41104597   &                                    dd_min, dd_max,           & 
    41114598   &                                    ld_contiguous, ld_shuffle,& 
    4112    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     4599   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     4600   &                                    cd_interp, cd_extrap, cd_filter, & 
     4601   &                                    cd_unt, dd_unf) 
    41134602 
    41144603      IMPLICIT NONE 
     
    41394628      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    41404629      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     4630      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     4631      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     4632      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     4633      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     4634      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    41414635 
    41424636      ! local variable 
     
    41844678      &                         ld_fletcher32=ld_fletcher32,        & 
    41854679      &                         id_deflvl=id_deflvl,                & 
    4186       &                         id_chunksz=id_chunksz(:)) 
     4680      &                         id_chunksz=id_chunksz(:),           & 
     4681      &                         cd_interp=cd_interp(:),             & 
     4682      &                         cd_extrap=cd_extrap(:),             & 
     4683      &                         cd_filter=cd_filter(:),             & 
     4684      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    41874685       
    41884686      DEALLOCATE( dl_value ) 
     
    42064704   ! 
    42074705   !> @author J.Paul 
    4208    !> - November, 2013- Initial Version 
     4706   !> @date November, 2013 - Initial Version 
     4707   !> @date June, 2015 
     4708   !> - add interp, extrap, and filter argument 
     4709   !> @date July, 2015 
     4710   !> - add unit factor (to change unit) 
    42094711   ! 
    42104712   !> @param[in] cd_name         variable name 
     
    42364738   !> deflation is in use 
    42374739   !> @param[in] id_chunksz      chunk size 
     4740   !> @param[in] cd_interp       interpolation method 
     4741   !> @param[in] cd_extrap       extrapolation method 
     4742   !> @param[in] cd_filter       filter method 
     4743   !> @param[in] cd_unt          new units (linked to units factor) 
     4744   !> @param[in] dd_unf          units factor 
    42384745   !> @return variable structure 
    42394746   !------------------------------------------------------------------- 
     
    42464753   &                                    dd_min, dd_max,           & 
    42474754   &                                    ld_contiguous, ld_shuffle,& 
    4248    &                                    ld_fletcher32, id_deflvl, id_chunksz) 
     4755   &                                    ld_fletcher32, id_deflvl, id_chunksz, & 
     4756   &                                    cd_interp, cd_extrap, cd_filter, & 
     4757   &                                    cd_unt, dd_unf) 
    42494758 
    42504759      IMPLICIT NONE 
     
    42754784      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    42764785      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     4786      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     4787      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     4788      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     4789      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     4790      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    42774791 
    42784792      ! local variable 
     
    43214835      &                         ld_fletcher32=ld_fletcher32,        & 
    43224836      &                         id_deflvl=id_deflvl,                & 
    4323       &                         id_chunksz=id_chunksz(:)) 
     4837      &                         id_chunksz=id_chunksz(:),           & 
     4838      &                         cd_interp=cd_interp(:),             & 
     4839      &                         cd_extrap=cd_extrap(:),             & 
     4840      &                         cd_filter=cd_filter(:),             & 
     4841      &                         cd_unt=cd_unt, dd_unf=dd_unf) 
    43244842       
    43254843      DEALLOCATE( dl_value ) 
     
    43434861   ! 
    43444862   !> @author J.Paul 
    4345    !> - November, 2013- Initial Version 
     4863   !> @date November, 2013 - Initial Version 
     4864   !> @date June, 2015 
     4865   !> - add interp, extrap, and filter argument 
     4866   !> @date July, 2015 
     4867   !> - add unit factor (to change unit) 
    43464868   ! 
    43474869   !> @param[in] cd_name         variable name 
     
    43734895   !> deflation is in use 
    43744896   !> @param[in] id_chunksz      chunk size 
     4897   !> @param[in] cd_interp       interpolation method 
     4898   !> @param[in] cd_extrap       extrapolation method 
     4899   !> @param[in] cd_filter       filter method 
     4900   !> @param[in] cd_unt          new units (linked to units factor) 
     4901   !> @param[in] dd_unf          units factor 
    43754902   !> @return variable structure 
    43764903   !------------------------------------------------------------------- 
     
    43834910   &                                 dd_min, dd_max,           & 
    43844911   &                                 ld_contiguous, ld_shuffle,& 
    4385    &                                 ld_fletcher32, id_deflvl, id_chunksz) 
     4912   &                                 ld_fletcher32, id_deflvl, id_chunksz, & 
     4913   &                                 cd_interp, cd_extrap, cd_filter, & 
     4914   &                                 cd_unt, dd_unf) 
    43864915 
    43874916      IMPLICIT NONE 
     
    44124941      INTEGER(i4)     ,                       INTENT(IN), OPTIONAL :: id_deflvl 
    44134942      INTEGER(i4)     , DIMENSION(ip_maxdim), INTENT(IN), OPTIONAL :: id_chunksz 
     4943      CHARACTER(LEN=*), DIMENSION(2)        , INTENT(IN), OPTIONAL :: cd_interp 
     4944      CHARACTER(LEN=*), DIMENSION(1)        , INTENT(IN), OPTIONAL :: cd_extrap 
     4945      CHARACTER(LEN=*), DIMENSION(5)        , INTENT(IN), OPTIONAL :: cd_filter 
     4946      CHARACTER(LEN=*),                       INTENT(IN), OPTIONAL :: cd_unt 
     4947      REAL(dp)        ,                       INTENT(IN), OPTIONAL :: dd_unf 
    44144948 
    44154949      ! local variable 
     
    44594993      &                      ld_fletcher32=ld_fletcher32,        & 
    44604994      &                      id_deflvl=id_deflvl,                & 
    4461       &                      id_chunksz=id_chunksz(:)) 
     4995      &                      id_chunksz=id_chunksz(:),           & 
     4996      &                      cd_interp=cd_interp(:),             & 
     4997      &                      cd_extrap=cd_extrap(:),             & 
     4998      &                      cd_filter=cd_filter(:),             & 
     4999      &                      cd_unt=cd_unt, dd_unf=dd_unf) 
    44625000       
    44635001      DEALLOCATE( dl_value ) 
     
    44735011   !> 
    44745012   !> @author J.Paul 
    4475    !> - November, 2013- Initial Version 
     5013   !> @date November, 2013 - Initial Version 
    44765014   ! 
    44775015   !> @param[in] td_var1   variable structure 
     
    45235061   !>  
    45245062   !> @author J.Paul 
    4525    !> - November, 2013- Initial Version 
     5063   !> @date November, 2013 - Initial Version 
    45265064   ! 
    45275065   !> @param[in] td_var1   variable structure 
     
    45955133   !>  
    45965134   !> @author J.Paul 
    4597    !> - November, 2013- Initial Version 
     5135   !> @date November, 2013 - Initial Version 
    45985136   ! 
    45995137   !> @param[in] td_var1   variable structure 
     
    46705208   !>  
    46715209   !> @author J.Paul 
    4672    !> - November, 2013- Initial Version 
     5210   !> @date November, 2013 - Initial Version 
    46735211   ! 
    46745212   !> @param[in] td_var1   variable structure 
     
    47455283   !>  
    47465284   !> @author J.Paul 
    4747    !> - November, 2013- Initial Version 
     5285   !> @date November, 2013 - Initial Version 
    47485286   ! 
    47495287   !> @param[in] td_var1   variable structure 
     
    48205358   !> 
    48215359   !> @author J.Paul 
    4822    !> - November, 2013- Initial Version 
     5360   !> @date November, 2013 - Initial Version 
     5361   !> @date June, 2015  
     5362   !> - add all element of the array in the same time 
    48235363   !> 
    48245364   !> @param[inout] td_var variable structure 
     
    48335373      ! local variable 
    48345374      INTEGER(i4) :: il_natt 
     5375      INTEGER(i4) :: il_status 
     5376      INTEGER(i4) :: il_ind 
     5377      TYPE(TATT), DIMENSION(:), ALLOCATABLE :: tl_att 
    48355378 
    48365379      ! loop indices 
     
    48405383      il_natt=SIZE(td_att(:)) 
    48415384 
     5385      IF( td_var%i_natt > 0 )THEN 
     5386      ! already other attribute in variable structure 
     5387         ALLOCATE( tl_att(td_var%i_natt), stat=il_status ) 
     5388         IF(il_status /= 0 )THEN 
     5389 
     5390            CALL logger_error( & 
     5391            &  " VAR ADD ATT: not enough space to put attributes from "//& 
     5392            &  TRIM(td_var%c_name)//" in temporary attribute structure") 
     5393 
     5394         ELSE 
     5395 
     5396            ! save temporary global attribute's variable structure 
     5397            tl_att(:)=att_copy(td_var%t_att(:)) 
     5398 
     5399            CALL att_clean(td_var%t_att(:)) 
     5400            DEALLOCATE( td_var%t_att ) 
     5401            ALLOCATE( td_var%t_att(td_var%i_natt+il_natt), stat=il_status ) 
     5402            IF(il_status /= 0 )THEN 
     5403 
     5404               CALL logger_error( & 
     5405               &  " VAR ADD ATT: not enough space to put attributes "//& 
     5406               &  "in variable structure "//TRIM(td_var%c_name) ) 
     5407 
     5408            ENDIF 
     5409 
     5410            ! copy attribute in variable before 
     5411            td_var%t_att(1:td_var%i_natt)=att_copy(tl_att(:)) 
     5412 
     5413            ! clean 
     5414            CALL att_clean(tl_att(:)) 
     5415            DEALLOCATE(tl_att) 
     5416             
     5417         ENDIF 
     5418      ELSE 
     5419      ! no attribute in variable structure 
     5420         IF( ASSOCIATED(td_var%t_att) )THEN 
     5421            CALL att_clean(td_var%t_att(:)) 
     5422            DEALLOCATE(td_var%t_att) 
     5423         ENDIF 
     5424         ALLOCATE( td_var%t_att(td_var%i_natt+il_natt), stat=il_status ) 
     5425         IF(il_status /= 0 )THEN 
     5426 
     5427            CALL logger_error( & 
     5428            &  " VAR ADD ATT: not enough space to put attributes "//& 
     5429            &  "in variable structure "//TRIM(td_var%c_name) ) 
     5430 
     5431         ENDIF 
     5432      ENDIF 
     5433 
     5434      ALLOCATE( tl_att(il_natt) ) 
     5435      tl_att(:)=att_copy(td_att(:)) 
     5436 
     5437      ! check if attribute already in variable structure 
    48425438      DO ji=1,il_natt 
    4843          CALL var_add_att(td_var, td_att(ji)) 
     5439         il_ind=0 
     5440         il_ind=att_get_index( td_var%t_att(:), tl_att(ji)%c_name ) 
     5441         IF( il_ind /= 0 )THEN 
     5442            CALL logger_error( & 
     5443            &  " VAR ADD ATT: attribute "//TRIM(tl_att(ji)%c_name)//& 
     5444            &  ", already in variable "//TRIM(td_var%c_name) ) 
     5445            CALL att_clean(tl_att(ji)) 
     5446         ENDIF 
    48445447      ENDDO 
     5448 
     5449      ! add new attributes 
     5450      td_var%t_att(td_var%i_natt+1:td_var%i_natt+il_natt)=att_copy(tl_att(:)) 
     5451 
     5452      DEALLOCATE(tl_att) 
     5453 
     5454      DO ji=1,il_natt 
     5455         ! highlight some attribute 
     5456         IF( ASSOCIATED(td_var%t_att(td_var%i_natt+ji)%d_value) .OR. & 
     5457           & td_var%t_att(td_var%i_natt+ji)%c_value /= 'none' )THEN 
     5458            SELECT CASE(TRIM(td_var%t_att(td_var%i_natt+ji)%c_name)) 
     5459 
     5460               CASE("add_offset") 
     5461                  td_var%d_ofs = td_var%t_att(td_var%i_natt+ji)%d_value(1) 
     5462               CASE("scale_factor") 
     5463                  td_var%d_scf = td_var%t_att(td_var%i_natt+ji)%d_value(1) 
     5464               CASE("_FillValue") 
     5465                  td_var%d_fill = td_var%t_att(td_var%i_natt+ji)%d_value(1) 
     5466               CASE("ew_overlap") 
     5467                  td_var%i_ew = INT(td_var%t_att(td_var%i_natt+ji)%d_value(1),i4)  
     5468               CASE("standard_name") 
     5469                  td_var%c_stdname = TRIM(td_var%t_att(td_var%i_natt+ji)%c_value) 
     5470               CASE("long_name") 
     5471                  td_var%c_longname = TRIM(td_var%t_att(td_var%i_natt+ji)%c_value) 
     5472               CASE("units") 
     5473                  td_var%c_units = TRIM(td_var%t_att(td_var%i_natt+ji)%c_value) 
     5474               CASE("grid_point") 
     5475                  td_var%c_point = TRIM(td_var%t_att(td_var%i_natt+ji)%c_value) 
     5476 
     5477            END SELECT 
     5478         ENDIF 
     5479      ENDDO 
     5480 
     5481      ! update number of attribute 
     5482      td_var%i_natt=td_var%i_natt+il_natt 
     5483 
    48455484 
    48465485   END SUBROUTINE var__add_att_arr 
     
    48505489   ! 
    48515490   !> @author J.Paul 
    4852    !> - November, 2013- Initial Version 
     5491   !> @date November, 2013 - Initial Version 
     5492   !> @date June, 2015  
     5493   !> - use var__add_att_arr subroutine 
    48535494   ! 
    48545495   !> @param[inout] td_var variable structure 
     
    48625503 
    48635504      ! local variable 
    4864       INTEGER(i4) :: il_status 
    4865       INTEGER(i4) :: il_ind 
    4866       TYPE(TATT), DIMENSION(:), ALLOCATABLE :: tl_att 
     5505      TYPE(TATT), DIMENSION(1) :: tl_att 
    48675506 
    48685507      ! loop indices 
    4869       INTEGER(i4) :: ji 
    48705508      !---------------------------------------------------------------- 
    48715509 
    4872       ! check if attribute already in variable structure 
    4873       il_ind=0 
    4874       IF( ASSOCIATED(td_var%t_att) )THEN 
    4875          il_ind=att_get_index( td_var%t_att(:), td_att%c_name ) 
    4876       ENDIF 
    4877  
    4878       IF( il_ind /= 0 )THEN 
    4879  
    4880          CALL logger_error( & 
    4881          &  " VAR ADD ATT: attribute "//TRIM(td_att%c_name)//& 
    4882          &  ", already in variable "//TRIM(td_var%c_name) ) 
    4883  
    4884          DO ji=1,td_var%i_natt 
    4885             CALL logger_debug( & 
    4886             &  " VAR ADD ATT: in variable "//TRIM(td_var%t_att(ji)%c_name) ) 
    4887          ENDDO 
    4888  
    4889       ELSE 
    4890           
    4891          CALL logger_trace( & 
    4892          &  " VAR ADD ATT: add attribute "//TRIM(td_att%c_name)//& 
    4893          &  ", in variable "//TRIM(td_var%c_name) ) 
    4894  
    4895          IF( td_var%i_natt > 0 )THEN 
    4896          ! already other attribute in variable structure 
    4897             ALLOCATE( tl_att(td_var%i_natt), stat=il_status ) 
    4898             IF(il_status /= 0 )THEN 
    4899  
    4900                CALL logger_error( & 
    4901                &  " VAR ADD ATT: not enough space to put attributes from "//& 
    4902                &  TRIM(td_var%c_name)//" in temporary attribute structure") 
    4903  
    4904             ELSE 
    4905  
    4906                ! save temporary global attribute's variable structure 
    4907                tl_att(:)=att_copy(td_var%t_att(:)) 
    4908  
    4909                CALL att_clean(td_var%t_att(:)) 
    4910                DEALLOCATE( td_var%t_att ) 
    4911                ALLOCATE( td_var%t_att(td_var%i_natt+1), stat=il_status ) 
    4912                IF(il_status /= 0 )THEN 
    4913  
    4914                   CALL logger_error( & 
    4915                   &  " VAR ADD ATT: not enough space to put attributes "//& 
    4916                   &  "in variable structure "//TRIM(td_var%c_name) ) 
    4917  
    4918                ENDIF 
    4919  
    4920                ! copy attribute in variable before 
    4921                td_var%t_att(1:td_var%i_natt)=att_copy(tl_att(:)) 
    4922  
    4923                ! clean 
    4924                CALL att_clean(tl_att(:)) 
    4925                DEALLOCATE(tl_att) 
    4926                 
    4927             ENDIF 
    4928          ELSE 
    4929          ! no attribute in variable structure 
    4930             IF( ASSOCIATED(td_var%t_att) )THEN 
    4931                CALL att_clean(td_var%t_att(:)) 
    4932                DEALLOCATE(td_var%t_att) 
    4933             ENDIF 
    4934             ALLOCATE( td_var%t_att(td_var%i_natt+1), stat=il_status ) 
    4935             IF(il_status /= 0 )THEN 
    4936  
    4937                CALL logger_error( & 
    4938                &  " VAR ADD ATT: not enough space to put attributes "//& 
    4939                &  "in variable structure "//TRIM(td_var%c_name) ) 
    4940  
    4941             ENDIF 
    4942          ENDIF 
    4943          ! update number of attribute 
    4944          td_var%i_natt=td_var%i_natt+1 
    4945  
    4946          ! add new attribute 
    4947          td_var%t_att(td_var%i_natt)=att_copy(td_att) 
    4948  
    4949          !! add new attribute id 
    4950          !td_var%t_att(td_var%i_natt)%i_id=att_get_unit(td_var%t_att(:)) 
    4951  
    4952          ! highlight some attribute 
    4953          IF( ASSOCIATED(td_var%t_att(td_var%i_natt)%d_value) .OR. & 
    4954            & td_var%t_att(td_var%i_natt)%c_value /= "none" )THEN 
    4955             SELECT CASE(TRIM(td_var%t_att(td_var%i_natt)%c_name)) 
    4956  
    4957                CASE("add_offset") 
    4958                   td_var%d_ofs = td_var%t_att(td_var%i_natt)%d_value(1) 
    4959                CASE("scale_factor") 
    4960                   td_var%d_scf = td_var%t_att(td_var%i_natt)%d_value(1) 
    4961                CASE("_FillValue") 
    4962                   td_var%d_fill = td_var%t_att(td_var%i_natt)%d_value(1) 
    4963                CASE("ew_overlap") 
    4964                   td_var%i_ew = INT(td_var%t_att(td_var%i_natt)%d_value(1),i4)  
    4965                CASE("standard_name") 
    4966                   td_var%c_stdname = TRIM(td_var%t_att(td_var%i_natt)%c_value) 
    4967                CASE("long_name") 
    4968                   td_var%c_longname = TRIM(td_var%t_att(td_var%i_natt)%c_value) 
    4969                CASE("units") 
    4970                   td_var%c_units = TRIM(td_var%t_att(td_var%i_natt)%c_value) 
    4971                CASE("grid_point") 
    4972                   td_var%c_point = TRIM(td_var%t_att(td_var%i_natt)%c_value) 
    4973  
    4974             END SELECT 
    4975          ENDIF 
    4976       ENDIF 
     5510      ! copy structure in an array 
     5511      tl_att(1)=att_copy(td_att) 
     5512 
     5513      !  
     5514      CALL var_add_att( td_var, tl_att(:) ) 
    49775515 
    49785516   END SUBROUTINE var__add_att_unit 
     
    49825520   ! 
    49835521   !> @author J.Paul 
    4984    !> - November, 2013- Initial Version 
     5522   !> @date November, 2013 - Initial Version 
     5523   !> @date February, 2015  
     5524   !> - define local attribute structure to avoid mistake  
     5525   !> with pointer 
    49855526   ! 
    49865527   !> @param[inout] td_var variable structure 
     
    49965537      INTEGER(i4) :: il_ind 
    49975538 
     5539      TYPE(TATT)  :: tl_att 
    49985540      ! loop indices 
    49995541      !---------------------------------------------------------------- 
     
    50075549      IF( il_ind == 0 )THEN 
    50085550 
    5009          CALL logger_warn( & 
     5551         CALL logger_debug( & 
    50105552         &  " VAR DEL ATT: no attribute "//TRIM(cd_name)//& 
    50115553         &  ", in variable "//TRIM(td_var%c_name) ) 
     
    50135555      ELSE 
    50145556          
    5015          CALL var_del_att(td_var, td_var%t_att(il_ind)) 
     5557         tl_att=att_copy(td_var%t_att(il_ind)) 
     5558         CALL var_del_att(td_var, tl_att) 
    50165559 
    50175560      ENDIF 
     
    50235566   ! 
    50245567   !> @author J.Paul 
    5025    !> - November, 2013- Initial Version 
     5568   !> @date November, 2013- Initial Version 
     5569   !> @date February, 2015  
     5570   !> - delete highlight attribute too, when attribute  
     5571   !> is deleted 
    50265572   ! 
    50275573   !> @param[inout] td_var variable structure 
     
    50405586 
    50415587      ! loop indices 
    5042       !INTEGER(i4) :: ji 
    50435588      !---------------------------------------------------------------- 
    50445589 
     
    50515596      IF( il_ind == 0 )THEN 
    50525597 
    5053          CALL logger_warn( & 
     5598         CALL logger_debug( & 
    50545599         &  " VAR DEL ATT: no attribute "//TRIM(td_att%c_name)//& 
    50555600         &  ", in variable "//TRIM(td_var%c_name) ) 
     
    51035648               td_var%t_att(1:td_var%i_natt)=att_copy(tl_att(:)) 
    51045649 
    5105                !! change attribute id 
    5106                !DO ji=1,td_var%i_natt 
    5107                !   td_var%t_att(ji)%i_id=ji 
    5108                !ENDDO 
    5109  
    51105650               ! clean 
    51115651               CALL att_clean(tl_att(:)) 
     
    51135653            ENDIF  
    51145654         ENDIF 
     5655 
     5656         ! highlight attribute 
     5657         SELECT CASE( TRIM(td_att%c_name) ) 
     5658 
     5659            CASE("add_offset") 
     5660               td_var%d_ofs = 0._dp 
     5661            CASE("scale_factor") 
     5662               td_var%d_scf = 1._dp 
     5663            CASE("_FillValue") 
     5664               td_var%d_fill = 0._dp 
     5665            CASE("ew_overlap") 
     5666               td_var%i_ew = -1  
     5667            CASE("standard_name") 
     5668               td_var%c_stdname = '' 
     5669            CASE("long_name") 
     5670               td_var%c_longname = '' 
     5671            CASE("units") 
     5672               td_var%c_units = '' 
     5673            CASE("grid_point") 
     5674               td_var%c_point = '' 
     5675 
     5676         END SELECT 
     5677 
    51155678      ENDIF 
    51165679 
     
    51215684   ! 
    51225685   !> @author J.Paul 
    5123    !> - November, 2013- Initial Version 
     5686   !> @date November, 2013 - Initial Version 
    51245687   ! 
    51255688   !> @param[inout] td_var variable structure 
     
    51565719   ! 
    51575720   !> @author J.Paul 
    5158    !> - November, 2013- Initial Version 
     5721   !> @date November, 2013 - Initial Version 
    51595722   ! 
    51605723   !> @param[inout] td_var variable structure 
     
    51955758   ! 
    51965759   !> @author J.Paul 
    5197    !> - November, 2013- Initial Version 
     5760   !> @date November, 2013 - Initial Version 
    51985761   ! 
    51995762   !> @param[inout] td_var variable structure 
     
    52115774      !---------------------------------------------------------------- 
    52125775 
    5213       IF( td_var%i_ndim <= 4 )THEN 
     5776      IF( td_var%i_ndim <= ip_maxdim )THEN 
    52145777 
    52155778         ! check if dimension already used in variable structure 
     
    52275790         ELSE 
    52285791 
    5229          ! back to unorder dimension array  
    5230          CALL dim_unorder(td_var%t_dim(:)) 
     5792            ! back to disorder dimension array  
     5793            CALL dim_disorder(td_var%t_dim(:)) 
     5794 
    52315795            ! add new dimension 
    52325796            td_var%t_dim(td_var%i_ndim+1)=dim_copy(td_dim) 
     
    52535817   ! 
    52545818   !> @author J.Paul 
    5255    !> - November, 2013- Initial Version 
     5819   !> @date November, 2013 - Initial Version 
    52565820   ! 
    52575821   !> @param[inout] td_var variable structure 
     
    52725836      !---------------------------------------------------------------- 
    52735837 
    5274       IF( td_var%i_ndim <= 4 )THEN 
     5838      IF( td_var%i_ndim <= ip_maxdim )THEN 
    52755839 
    52765840         CALL logger_trace( & 
     
    53175881   ! 
    53185882   !> @author J.Paul 
    5319    !> - November, 2013- Initial Version 
     5883   !> @date November, 2013 - Initial Version 
    53205884   ! 
    53215885   !> @param[inout] td_var variable structure 
     
    53605924   !> 
    53615925   !> @author J.Paul 
    5362    !> - June, 2014- Initial Version 
     5926   !> @date June, 2014 - Initial Version 
    53635927   ! 
    53645928   !> @param[in] td_var array of variables structure 
     
    53865950   !> 
    53875951   !> @author J.Paul 
    5388    !> - November, 2013- Initial Version 
     5952   !> @date November, 2013 - Initial Version 
    53895953   ! 
    53905954   !> @param[in] td_var    variable structure 
     
    54936057   !> 
    54946058   !> @author J.Paul 
    5495    !> - November, 2013- Initial Version 
     6059   !> @date November, 2013 - Initial Version 
    54966060   !> 
    54976061   !> @param[inout] td_var variable structure 
     
    56316195   !> 
    56326196   !> @author J.Paul 
    5633    !> - November, 2013- Initial Version 
     6197   !> @date November, 2013 - Initial Version 
    56346198   !> 
    56356199   !> @param[inout] td_var variable structure 
     
    56856249   !> 
    56866250   !> @author J.Paul 
    5687    !> - November, 2013- Initial Version 
     6251   !> @date November, 2013 - Initial Version 
    56886252   ! 
    56896253   !> @param[inout] td_var variable structure 
     
    57616325   ! 
    57626326   !> @author J.Paul 
    5763    !> - November, 2013- Initial Version 
     6327   !> @date November, 2013 - Initial Version 
    57646328   ! 
    57656329   !> @param[inout] td_var variabele structure 
     
    58376401   ! 
    58386402   !> @author J.Paul 
    5839    !> - November, 2013- Initial Version 
     6403   !> @date November, 2013 - Initial Version 
    58406404   ! 
    58416405   !> @param[inout] td_var variabele structure 
     
    59136477   ! 
    59146478   !> @author J.Paul 
    5915    !> - November, 2013- Initial Version 
     6479   !> @date November, 2013 - Initial Version 
    59166480   ! 
    59176481   !> @param[inout] td_var variabele structure 
     
    59876551   !> 
    59886552   !> @author J.Paul 
    5989    !> - November, 2013- Initial Version 
     6553   !> @date November, 2013 - Initial Version 
    59906554   ! 
    59916555   !> @param[inout] td_var variable structure 
     
    60576621   !> 
    60586622   !> @author J.Paul 
    6059    !> - November, 2013- Initial Version 
     6623   !> @date November, 2013 - Initial Version 
    60606624   !> 
    60616625   !> @param[inout] td_var variable structure 
     
    60806644   !> 
    60816645   !> @author J.Paul 
    6082    !> - September, 2014- Initial Version 
     6646   !> @date September, 2014 - Initial Version 
    60836647   !> 
    60846648   !> @param[in] td_var       array of variable structure 
     
    61426706   !> given variable name or standard name.  
    61436707   !> 
    6144    !> @warning only variable read from file, have an id. 
    6145    !> 
    61466708   !> @author J.Paul 
    6147    !> - November, 2013- Initial Version 
     6709   !> @date November, 2013 - Initial Version 
     6710   !> @date July, 2015 
     6711   !> - check long name 
    61486712   ! 
    61496713   !> @param[in] td_var       array of variable structure 
     
    61796743         ELSE IF( fct_lower(td_var(ji)%c_stdname) == fct_lower(cd_name) .AND.& 
    61806744         &    TRIM(fct_lower(td_var(ji)%c_stdname)) /= '' )THEN 
     6745             
     6746            var_get_id=td_var(ji)%i_id 
     6747            EXIT 
     6748 
     6749         ! look for variable long name 
     6750         ELSE IF( fct_lower(td_var(ji)%c_longname) == fct_lower(cd_name) .AND.& 
     6751         &    TRIM(fct_lower(td_var(ji)%c_longname)) /= '' )THEN 
    61816752             
    61826753            var_get_id=td_var(ji)%i_id 
     
    62006771   !> 
    62016772   !> @author J.Paul 
    6202    !> - November, 2013- Initial Version 
     6773   !> @date November, 2013 - Initial Version 
    62036774   ! 
    62046775   !> @param[in] td_var array of variable structure 
     
    62196790      IF( ASSOCIATED(td_var%d_value) )THEN 
    62206791 
    6221          CALL logger_trace( "VAR GET MASK: create mask from variable "//& 
    6222          &               TRIM(td_var%c_name) ) 
     6792         CALL logger_debug( "VAR GET MASK: create mask from variable "//& 
     6793         &               TRIM(td_var%c_name)//", FillValue ="//& 
     6794         &               TRIM(fct_str(td_var%d_fill))) 
    62236795         var_get_mask(:,:,:)=1 
    62246796         WHERE( td_var%d_value(:,:,:,1) == td_var%d_fill ) 
     
    62396811   !>  
    62406812   !> @author J.Paul 
    6241    !> - November, 2013- Initial Version 
     6813   !> @date November, 2013 - Initial Version 
    62426814   ! 
    62436815   !> @param[inout] td_var array of variable structure 
     
    63226894   !>  
    63236895   !> @author J.Paul 
    6324    !> - November, 2013- Initial Version 
     6896   !> @date November, 2013 - Initial Version 
     6897   !> @date June, 2015  
     6898   !> - new namelist format to get extra information (interpolation,...) 
    63256899   ! 
    63266900   !> @param[in] cd_file   configuration file of variable 
     
    63576931 
    63586932         il_fileid=fct_getunit() 
    6359          CALL logger_trace("VAR DEF EXTRA: open "//TRIM(cd_file)) 
    63606933         OPEN( il_fileid, FILE=TRIM(cd_file), & 
    63616934         &                FORM='FORMATTED',   & 
     
    63666939         CALL fct_err(il_status) 
    63676940         IF( il_status /= 0 )THEN 
    6368             CALL logger_error("VAR DEF EXTRA: opening file "//TRIM(cd_file)) 
     6941            CALL logger_fatal("VAR DEF EXTRA: can not open file "//& 
     6942            &                 TRIM(cd_file)) 
    63696943         ENDIF 
    63706944 
     
    63756949         DO WHILE( il_status == 0 ) 
    63766950 
    6377          ! search line do not beginning with comment character 
     6951         ! search line not beginning with comment character 
    63786952            IF( SCAN( TRIM(fct_concat(cp_com(:))) ,cl_line(1:1)) == 0 )THEN 
    63796953               il_nvar=il_nvar+1 
     
    64196993                  tg_varextra(ji)%c_axis    =TRIM(fct_split(cl_line,3)) 
    64206994                  tg_varextra(ji)%c_point   =TRIM(fct_split(cl_line,4)) 
    6421                   tg_varextra(ji)%c_stdname =TRIM(fct_split(cl_line,5)) 
    6422                   tg_varextra(ji)%c_longname=TRIM(fct_split(cl_line,6)) 
    6423  
    6424                   cl_interp=TRIM(fct_split(cl_line,7)) 
     6995 
     6996                  cl_interp='int='//TRIM(fct_split(cl_line,5)) 
    64256997                  tg_varextra(ji)%c_interp(:) = & 
    64266998                  &  var__get_interp(TRIM(tg_varextra(ji)%c_name), cl_interp) 
    64276999                  CALL logger_debug("VAR DEF EXTRA: "//& 
    64287000                  &  TRIM(tg_varextra(ji)%c_name)//& 
    6429                   &  " "//TRIM(cl_interp)) 
     7001                  &  " "//TRIM(tg_varextra(ji)%c_interp(1))) 
     7002 
     7003                  tg_varextra(ji)%c_longname=TRIM(fct_split(cl_line,6)) 
     7004                  tg_varextra(ji)%c_stdname =TRIM(fct_split(cl_line,7)) 
    64307005               ELSE 
    64317006                  ji=ji-1 
     
    64587033   !> @details  
    64597034   !> string character format must be : <br/> 
    6460    !> "varname:interp; filter; extrap; > min; < max"<br/> 
     7035   !> "varname:int=interp; flt=filter; ext=extrap; min=min; max=max"<br/> 
    64617036   !> you could specify only interpolation, filter or extrapolation method,  
    64627037   !> whatever the order. you could find more 
     
    64647039   !> \ref extrap module.<br/> 
    64657040   !> Examples:  
    6466    !> cn_varinfo='Bathymetry:2*hamming(2,3); > 10.' 
    6467    !> cn_varinfo='votemper:cubic; dist_weight; <40.' 
     7041   !> cn_varinfo='Bathymetry:flt=2*hamming(2,3); min=10.' 
     7042   !> cn_varinfo='votemper:int=cubic; ext=dist_weight; max=40.' 
     7043   !> 
     7044   !> 
     7045   !> @warning variable should be define in tg_varextra (ie in configuration 
     7046   !> file, to be able to add information from namelist 
    64687047   !> 
    64697048   !> @note If you do not specify a method which is required, default one is 
     
    64717050   !> 
    64727051   !> @author J.Paul 
    6473    !> - November, 2013- Initial Version 
     7052   !> @date November, 2013 - Initial Version 
     7053   !> @date July, 2015  
     7054   !> - get unit and unit factor (to change unit)  
    64747055   ! 
    64757056   !> @param[in] cd_varinfo   variable information from namelist 
     
    64867067      CHARACTER(LEN=lc), DIMENSION(1)              :: cl_extrap 
    64877068      CHARACTER(LEN=lc), DIMENSION(5)              :: cl_filter 
     7069      CHARACTER(LEN=lc)                            :: cl_unt 
    64887070 
    64897071      INTEGER(i4)                                  :: il_ind 
     
    64927074      REAL(dp)                                     :: dl_min 
    64937075      REAL(dp)                                     :: dl_max 
     7076      REAL(dp)                                     :: dl_unf 
    64947077 
    64957078      TYPE(TVAR)       , DIMENSION(:), ALLOCATABLE :: tl_varextra 
     
    65087091            dl_min=var__get_min(cl_name, cl_method) 
    65097092            dl_max=var__get_max(cl_name, cl_method) 
     7093            dl_unf=var__get_unf(cl_name, cl_method) 
    65107094            cl_interp(:)=var__get_interp(cl_name, cl_method) 
    65117095            cl_extrap(:)=var__get_extrap(cl_name, cl_method) 
    65127096            cl_filter(:)=var__get_filter(cl_name, cl_method) 
     7097            cl_unt=var__get_unt(cl_name, cl_method) 
     7098 
    65137099 
    65147100            il_ind=var_get_index(tg_varextra(:), TRIM(cl_name)) 
     
    65167102               IF( dl_min /= dp_fill ) tg_varextra(il_ind)%d_min=dl_min 
    65177103               IF( dl_max /= dp_fill ) tg_varextra(il_ind)%d_max=dl_max 
     7104               IF( dl_unf /= dp_fill ) tg_varextra(il_ind)%d_unf=dl_unf 
     7105               IF(cl_unt      /='') tg_varextra(il_ind)%c_unt      =cl_unt 
    65187106               IF(cl_interp(1)/='') tg_varextra(il_ind)%c_interp(:)=cl_interp(:) 
    65197107               IF(cl_extrap(1)/='') tg_varextra(il_ind)%c_extrap(:)=cl_extrap(:) 
     
    65517139               &                               cd_filter=cl_filter(:), & 
    65527140               &                               dd_min = dl_min, & 
    6553                &                               dd_max = dl_max ) 
     7141               &                               dd_max = dl_max, & 
     7142               &                               cd_unt = cl_unt, & 
     7143               &                               dd_unf = dl_unf ) 
    65547144 
    65557145            ENDIF 
    65567146 
    65577147            ji=ji+1 
    6558             CALL logger_trace( "VAR CHG EXTRA: name       "//& 
     7148            CALL logger_debug( "VAR CHG EXTRA: name       "//& 
    65597149            &                  TRIM(tg_varextra(il_ind)%c_name) ) 
    6560             CALL logger_trace( "VAR CHG EXTRA: interp     "//& 
     7150            CALL logger_debug( "VAR CHG EXTRA: interp     "//& 
    65617151            &                  TRIM(tg_varextra(il_ind)%c_interp(1)) )          
    6562             CALL logger_trace( "VAR CHG EXTRA: filter     "//& 
     7152            CALL logger_debug( "VAR CHG EXTRA: filter     "//& 
    65637153            &                  TRIM(tg_varextra(il_ind)%c_filter(1)) )          
    6564             CALL logger_trace( "VAR CHG EXTRA: extrap     "//& 
     7154            CALL logger_debug( "VAR CHG EXTRA: extrap     "//& 
    65657155            &                  TRIM(tg_varextra(il_ind)%c_extrap(1)) ) 
    65667156            IF( tg_varextra(il_ind)%d_min /= dp_fill )THEN 
    6567                CALL logger_trace( "VAR CHG EXTRA: min value  "//& 
     7157               CALL logger_debug( "VAR CHG EXTRA: min value  "//& 
    65687158               &                  TRIM(fct_str(tg_varextra(il_ind)%d_min)) ) 
    65697159            ENDIF 
    65707160            IF( tg_varextra(il_ind)%d_max /= dp_fill )THEN 
    6571                CALL logger_trace( "VAR CHG EXTRA: max value  "//& 
     7161               CALL logger_debug( "VAR CHG EXTRA: max value  "//& 
    65727162               &                  TRIM(fct_str(tg_varextra(il_ind)%d_max)) ) 
     7163            ENDIF 
     7164            IF( TRIM(tg_varextra(il_ind)%c_unt) /= '' )THEN 
     7165               CALL logger_debug( "VAR CHG EXTRA: new unit  "//& 
     7166               &                  TRIM(tg_varextra(il_ind)%c_unt) ) 
     7167            ENDIF 
     7168            IF( tg_varextra(il_ind)%d_unf /= 1. )THEN 
     7169               CALL logger_debug( "VAR CHG EXTRA: new unit factor  "//& 
     7170               &                  TRIM(fct_str(tg_varextra(il_ind)%d_unf)) ) 
    65737171            ENDIF 
    65747172         ENDDO 
     
    65937191   !> 
    65947192   !> @author J.Paul 
    6595    !> - November, 2013- Initial Version 
     7193   !> @date November, 2013 - Initial Version 
    65967194   ! 
    65977195   !> @param[inout] td_var variable structure 
     
    66877285   !>  
    66887286   !> @author J.Paul 
    6689    !> - November, 2013- Initial Version 
     7287   !> @date November, 2013 - Initial Version 
    66907288   !> 
    66917289   !> @param[inout] td_var variable structure 
     
    66977295 
    66987296      ! local variable 
     7297      CHARACTER(LEN=lc) :: cl_tmp 
     7298 
    66997299      INTEGER(i4)       :: il_ind 
     7300       
    67007301      TYPE(TATT)        :: tl_att 
    67017302 
    67027303      ! loop indices 
     7304      INTEGER(i4)       :: ji 
    67037305      !---------------------------------------------------------------- 
    67047306 
     
    67537355               td_var%c_axis=TRIM(tg_varextra(il_ind)%c_axis) 
    67547356               ! create attibute 
    6755                tl_att=att_init('axis',TRIM(td_var%c_axis)) 
    6756                CALL var_move_att(td_var, tl_att)                
     7357               IF( TRIM(fct_upper(td_var%c_name)) == TRIM(td_var%c_axis) )THEN 
     7358                  tl_att=att_init('axis',TRIM(td_var%c_axis)) 
     7359               ELSE 
     7360                  cl_tmp="" 
     7361                  DO ji=LEN(TRIM(td_var%c_axis)),1,-1 
     7362                     cl_tmp=TRIM(cl_tmp)//" "//TRIM(td_var%c_axis(ji:ji)) 
     7363                  ENDDO 
     7364                  tl_att=att_init('associate',TRIM(ADJUSTL(cl_tmp))) 
     7365               ENDIF 
     7366               CALL var_move_att(td_var, tl_att) 
    67577367            ENDIF 
    67587368 
     
    68087418            ENDIF 
    68097419 
    6810          CALL logger_trace("VAR GET EXTRA: name       "//TRIM(td_var%c_name)) 
    6811          CALL logger_trace("VAR GET EXTRA: stdname    "//TRIM(td_var%c_stdname)) 
    6812          CALL logger_trace("VAR GET EXTRA: longname   "//TRIM(td_var%c_longname)) 
    6813          CALL logger_trace("VAR GET EXTRA: units      "//TRIM(td_var%c_units)) 
    6814          CALL logger_trace("VAR GET EXTRA: point      "//TRIM(td_var%c_point)) 
    6815          CALL logger_trace("VAR GET EXTRA: interp     "//TRIM(td_var%c_interp(1))) 
    6816          CALL logger_trace("VAR GET EXTRA: filter     "//TRIM(td_var%c_filter(1))) 
    6817          CALL logger_trace("VAR GET EXTRA: min value  "//TRIM(fct_str(td_var%d_min))) 
    6818          CALL logger_trace("VAR GET EXTRA: max value  "//TRIM(fct_str(td_var%d_max))) 
     7420            ! unt 
     7421            IF( TRIM(td_var%c_unt) == '' .AND. & 
     7422            &   TRIM(tg_varextra(il_ind)%c_unt) /= '' )THEN 
     7423               td_var%c_unt=TRIM(tg_varextra(il_ind)%c_unt) 
     7424            ENDIF 
     7425 
     7426            ! units factor 
     7427            IF( td_var%d_unf == 1._dp .AND. & 
     7428            &   tg_varextra(il_ind)%d_unf /= 1._dp )THEN 
     7429               td_var%d_unf=tg_varextra(il_ind)%d_unf 
     7430            ENDIF 
     7431 
     7432         ELSE 
     7433            CALL logger_warn("VAR GET EXTRA: no extra information on "//& 
     7434               &  "variable "//TRIM(td_var%c_name)//". you should define it"//& 
     7435               &  " (see variable.cfg).") 
    68197436         ENDIF 
    68207437 
     
    68337450   !>  
    68347451   !> @details 
    6835    !> minimum value is assume to follow sign '>' 
     7452   !> minimum value is assume to follow string "min =" 
    68367453   !> 
    68377454   !> @author J.Paul 
    6838    !> - November, 2013- Initial Version 
     7455   !> @date November, 2013 - Initial Version 
     7456   !> @date June, 2015  
     7457   !> - change way to get information in namelist,  
     7458   !> value follows string "min =" 
     7459   !> @date Feb, 2016 
     7460   !> - check character just after keyword 
    68397461   ! 
    68407462   !> @param[in] cd_name      variable name 
     
    68597481      ! loop indices 
    68607482      INTEGER(i4) :: ji 
     7483      INTEGER(i4) :: jj 
    68617484      !---------------------------------------------------------------- 
    68627485      ! init 
     
    68677490      cl_tmp=fct_split(cd_varinfo,ji,';') 
    68687491      DO WHILE( TRIM(cl_tmp) /= '' ) 
    6869          il_ind=SCAN(TRIM(cl_tmp),'>') 
     7492         il_ind=INDEX(TRIM(cl_tmp),'min') 
    68707493         IF( il_ind /= 0 )THEN 
    6871             cl_min=TRIM(ADJUSTL(cl_tmp(il_ind+1:))) 
    6872             EXIT 
     7494            ! check character just after 
     7495            jj=il_ind+LEN('min') 
     7496            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7497            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7498               cl_min=fct_split(cl_tmp,2,'=') 
     7499               EXIT 
     7500            ENDIF 
    68737501         ENDIF 
    68747502         ji=ji+1 
     
    68777505 
    68787506      IF( TRIM(cl_min) /= '' )THEN 
    6879          IF( fct_is_num(cl_min) )THEN 
     7507         IF( fct_is_real(cl_min) )THEN 
    68807508            READ(cl_min,*) var__get_min 
    68817509            CALL logger_debug("VAR GET MIN: will use minimum value of "//& 
    68827510            &  TRIM(fct_str(var__get_min))//" for variable "//TRIM(cd_name) ) 
    68837511         ELSE 
    6884             CALL logger_error("VAR GET MIN: invalid minimum value for "//& 
    6885             &  "variable "//TRIM(cd_name)//". check namelist." ) 
     7512            CALL logger_error("VAR GET MIN: invalid minimum value ("//& 
     7513               & TRIM(cl_min)//") for variable "//TRIM(cd_name)//& 
     7514               & ". check namelist." ) 
    68867515         ENDIF 
    68877516      ENDIF 
     
    68947523   !>  
    68957524   !> @details 
    6896    !> maximum value is assume to follow sign '<' 
     7525   !> maximum value is assume to follow string "max =" 
    68977526   !> 
    68987527   !> @author J.Paul 
    6899    !> - November, 2013- Initial Version 
     7528   !> @date November, 2013 - Initial Version 
     7529   !> @date June, 2015  
     7530   !> - change way to get information in namelist,  
     7531   !> value follows string "max =" 
     7532   !> @date Feb, 2016 
     7533   !> - check character just after keyword 
    69007534   ! 
    69017535   !> @param[in] cd_name      variable name 
     
    69207554      ! loop indices 
    69217555      INTEGER(i4) :: ji 
     7556      INTEGER(i4) :: jj 
    69227557      !---------------------------------------------------------------- 
    69237558      ! init 
     
    69287563      cl_tmp=fct_split(cd_varinfo,ji,';') 
    69297564      DO WHILE( TRIM(cl_tmp) /= '' ) 
    6930          il_ind=SCAN(TRIM(cl_tmp),'<') 
     7565         il_ind=INDEX(TRIM(cl_tmp),'max') 
    69317566         IF( il_ind /= 0 )THEN 
    6932             cl_max=TRIM(ADJUSTL(cl_tmp(il_ind+1:))) 
    6933             EXIT 
     7567            ! check character just after 
     7568            jj=il_ind+LEN('max') 
     7569            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7570            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7571               cl_max=fct_split(cl_tmp,2,'=') 
     7572               EXIT 
     7573            ENDIF 
    69347574         ENDIF 
    69357575         ji=ji+1 
     
    69387578 
    69397579      IF( TRIM(cl_max) /= '' )THEN 
    6940          IF( fct_is_num(cl_max) )THEN 
     7580         IF( fct_is_real(cl_max) )THEN 
    69417581            READ(cl_max,*) var__get_max 
    69427582            CALL logger_debug("VAR GET MAX: will use maximum value of "//& 
     
    69527592   !> @brief 
    69537593   !> This function check if variable information read in namelist contains  
     7594   !> units factor value and return it if true.  
     7595   !>  
     7596   !> @details 
     7597   !> units factor value is assume to follow string "unf =" 
     7598   !> 
     7599   !> @author J.Paul 
     7600   !> @date June, 2015 - Initial Version 
     7601   !> @date Feb, 2016 
     7602   !> - check character just after keyword 
     7603   ! 
     7604   !> @param[in] cd_name      variable name 
     7605   !> @param[in] cd_varinfo   variable information read in namelist  
     7606   !> @return untis factor value to be used (FillValue if none) 
     7607   !------------------------------------------------------------------- 
     7608   FUNCTION var__get_unf( cd_name, cd_varinfo ) 
     7609      IMPLICIT NONE 
     7610      ! Argument 
     7611      CHARACTER(LEN=*), INTENT(IN   ) :: cd_name 
     7612      CHARACTER(LEN=*), INTENT(IN   ) :: cd_varinfo 
     7613 
     7614      ! function 
     7615      REAL(dp) :: var__get_unf 
     7616 
     7617      ! local variable 
     7618      CHARACTER(LEN=lc) :: cl_tmp 
     7619      CHARACTER(LEN=lc) :: cl_unf 
     7620       
     7621      INTEGER(i4)       :: il_ind 
     7622 
     7623      REAL(dp)          :: rl_unf 
     7624 
     7625      ! loop indices 
     7626      INTEGER(i4) :: ji 
     7627      INTEGER(i4) :: jj 
     7628      !---------------------------------------------------------------- 
     7629      ! init 
     7630      cl_unf='' 
     7631      var__get_unf=dp_fill 
     7632 
     7633      ji=1 
     7634      cl_tmp=fct_split(cd_varinfo,ji,';') 
     7635      DO WHILE( TRIM(cl_tmp) /= '' ) 
     7636         il_ind=INDEX(TRIM(cl_tmp),'unf') 
     7637         IF( il_ind /= 0 )THEN 
     7638            ! check character just after 
     7639            jj=il_ind+LEN('unf') 
     7640            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7641            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7642               cl_unf=fct_split(cl_tmp,2,'=') 
     7643               EXIT 
     7644            ENDIF 
     7645         ENDIF 
     7646         ji=ji+1 
     7647         cl_tmp=fct_split(cd_varinfo,ji,';')          
     7648      ENDDO 
     7649 
     7650      IF( TRIM(cl_unf) /= '' )THEN 
     7651         rl_unf=math_compute(cl_unf) 
     7652         IF( rl_unf /= dp_fill )THEN 
     7653            var__get_unf = rl_unf 
     7654            CALL logger_debug("VAR GET UNITS FACTOR: will use units factor "//& 
     7655               &  "value of "//TRIM(fct_str(var__get_unf))//" for variable "//& 
     7656               &   TRIM(cd_name) ) 
     7657         ELSE 
     7658            CALL logger_error("VAR GET UNITS FACTOR: invalid units factor "//& 
     7659               &  "value for variable "//TRIM(cd_name)//". check namelist." ) 
     7660         ENDIF 
     7661      ENDIF 
     7662 
     7663   END FUNCTION var__get_unf 
     7664   !------------------------------------------------------------------- 
     7665   !> @brief 
     7666   !> This function check if variable information read in namelist contains  
    69547667   !> interpolation method and return it if true.  
    69557668   !>  
    69567669   !> @details  
    6957    !> split namelist information, using ';' as separator. 
     7670   !> interpolation method is assume to follow string "int =" 
     7671   !> 
    69587672   !> compare method name with the list of interpolation method available (see 
    69597673   !> module global). 
    69607674   !> check if factor (*rhoi, /rhoj..) are present.<br/> 
    69617675   !> Example:<br/>  
    6962    !> - cubic/rhoi ; dist_weight 
    6963    !> - bilin 
     7676   !> - int=cubic/rhoi ; ext=dist_weight 
     7677   !> - int=bilin 
    69647678   !> see @ref interp module for more information. 
    69657679   !> 
    69667680   !> @author J.Paul 
    6967    !> - November, 2013- Initial Version 
     7681   !> @date November, 2013 - Initial Version 
     7682   !> @date June, 2015  
     7683   !> - change way to get information in namelist,  
     7684   !> value follows string "int =" 
     7685   !> @date Feb, 2016 
     7686   !> - check character just after keyword 
    69687687   ! 
    69697688   !> @param[in] cd_name      variable name 
     
    69827701      ! local variable 
    69837702      CHARACTER(LEN=lc) :: cl_tmp 
     7703      CHARACTER(LEN=lc) :: cl_int 
    69847704      CHARACTER(LEN=lc) :: cl_factor 
    69857705       
     
    70007720      cl_tmp=fct_split(cd_varinfo,ji,';') 
    70017721      DO WHILE( TRIM(cl_tmp) /= '' ) 
     7722         il_ind=INDEX(TRIM(cl_tmp),'int') 
     7723         IF( il_ind /= 0 )THEN 
     7724            ! check character just after 
     7725            jj=il_ind+LEN('int') 
     7726            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7727            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7728               cl_int=fct_split(cl_tmp,2,'=') 
     7729               EXIT 
     7730            ENDIF 
     7731         ENDIF 
     7732         ji=ji+1 
     7733         cl_tmp=fct_split(cd_varinfo,ji,';')          
     7734      ENDDO 
     7735 
     7736      IF( TRIM(cl_int) /= '' )THEN 
    70027737         DO jj=1,ip_ninterp 
    7003             il_ind= INDEX(fct_lower(cl_tmp),TRIM(cp_interp_list(jj))) 
     7738            il_ind= INDEX(fct_lower(cl_int),TRIM(cp_interp_list(jj))) 
    70047739            IF( il_ind /= 0 )THEN 
    70057740 
     
    70097744               ! look for factor 
    70107745               IF( il_ind==1 )THEN 
    7011                   cl_factor=cl_tmp(il_len+1:) 
     7746                  cl_factor=cl_int(il_len+1:) 
    70127747               ELSE 
    7013                   cl_factor=cl_tmp(1:il_ind-1) 
     7748                  cl_factor=cl_int(1:il_ind-1) 
    70147749               ENDIF 
    70157750               il_mul=SCAN(TRIM(cl_factor),'*') 
     
    70527787            ENDIF 
    70537788         ENDDO 
    7054          IF( jj /= ip_ninterp + 1 ) EXIT 
    7055          ji=ji+1 
    7056          cl_tmp=fct_split(cd_varinfo,ji,';')          
    7057       ENDDO 
     7789      ENDIF 
    70587790 
    70597791   END FUNCTION var__get_interp 
     
    70647796   !>  
    70657797   !> @details  
    7066    !> split namelist information, using ';' as separator. 
     7798   !> extrapolation method is assume to follow string "ext =" 
     7799   !>  
    70677800   !> compare method name with the list of extrapolation method available (see 
    70687801   !> module global).<br/> 
    70697802   !> Example:<br/> 
    7070    !> - cubic ; dist_weight 
    7071    !> - min_error 
     7803   !> - int=cubic ; ext=dist_weight 
     7804   !> - ext=min_error 
    70727805   !> see @ref extrap module for more information. 
    70737806   !> 
    70747807   !> @author J.Paul 
    7075    !> - November, 2013- Initial Version 
     7808   !> @date November, 2013 - Initial Version 
     7809   !> @date June, 2015  
     7810   !> - change way to get information in namelist,  
     7811   !> value follows string "ext =" 
     7812   !> @date Feb, 2016 
     7813   !> - check character just after keyword 
    70767814   ! 
    70777815   !> @param[in] cd_name      variable name 
     
    70907828      ! local variable 
    70917829      CHARACTER(LEN=lc) :: cl_tmp 
     7830      CHARACTER(LEN=lc) :: cl_ext 
     7831 
     7832      INTEGER(i4)       :: il_ind 
    70927833 
    70937834      ! loop indices 
     
    71017842      cl_tmp=fct_split(cd_varinfo,ji,';') 
    71027843      DO WHILE( TRIM(cl_tmp) /= '' ) 
     7844         il_ind=INDEX(TRIM(cl_tmp),'ext') 
     7845         IF( il_ind /= 0 )THEN 
     7846            ! check character just after 
     7847            jj=il_ind+LEN('ext') 
     7848            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7849            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7850               cl_ext=fct_split(cl_tmp,2,'=') 
     7851               EXIT 
     7852            ENDIF 
     7853         ENDIF 
     7854         ji=ji+1 
     7855         cl_tmp=fct_split(cd_varinfo,ji,';')          
     7856      ENDDO 
     7857 
     7858      IF( TRIM(cl_ext) /= '' )THEN 
    71037859         DO jj=1,ip_nextrap 
    7104             IF( TRIM(fct_lower(cl_tmp)) == TRIM(cp_extrap_list(jj)) )THEN 
     7860            IF( TRIM(fct_lower(cl_ext)) == TRIM(cp_extrap_list(jj)) )THEN 
    71057861               var__get_extrap(1)=TRIM(cp_extrap_list(jj)) 
    71067862 
     
    71117867            ENDIF 
    71127868         ENDDO 
    7113          IF( jj /= ip_nextrap + 1 ) EXIT 
    7114          ji=ji+1 
    7115          cl_tmp=fct_split(cd_varinfo,ji,';')          
    7116       ENDDO 
     7869      ENDIF 
    71177870 
    71187871 
     
    71247877   !>  
    71257878   !> @details  
    7126    !> split namelist information, using ';' as separator. 
     7879   !> filter method is assume to follow string "flt =" 
     7880   !> 
    71277881   !> compare method name with the list of filter method available (see 
    71287882   !> module global). 
    7129    !> look for the number of turn, using '*' separator, and method parameters inside 
     7883   !> look for the number of run, using '*' separator, and method parameters inside 
    71307884   !> bracket.<br/> 
    71317885   !> Example:<br/> 
    7132    !> - cubic ; 2*hamming(2,3) 
    7133    !> - hann 
     7886   !> - int=cubic ; flt=2*hamming(2,3) 
     7887   !> - flt=hann 
    71347888   !> see @ref filter module for more information. 
    71357889   !> 
    71367890   !> @author J.Paul 
    7137    !> - November, 2013- Initial Version 
    7138    ! 
     7891   !> @date November, 2013 - Initial Version 
     7892   !> @date June, 2015  
     7893   !> - change way to get information in namelist,  
     7894   !> value follows string "flt =" 
     7895   !> @date Feb, 2016 
     7896   !> - check character just after keyword 
     7897   !> 
    71397898   !> @param[in] cd_name      variable name 
    71407899   !> @param[in] cd_varinfo   variable information read in namelist  
     
    71517910      ! local variable 
    71527911      CHARACTER(LEN=lc) :: cl_tmp 
     7912      CHARACTER(LEN=lc) :: cl_flt 
    71537913      INTEGER(i4)       :: il_ind 
    71547914 
     
    71637923      cl_tmp=fct_split(cd_varinfo,ji,';') 
    71647924      DO WHILE( TRIM(cl_tmp) /= '' ) 
     7925         il_ind=INDEX(TRIM(cl_tmp),'flt') 
     7926         IF( il_ind /= 0 )THEN 
     7927            ! check character just after 
     7928            jj=il_ind+LEN('flt') 
     7929            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     7930            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     7931               cl_flt=fct_split(cl_tmp,2,'=') 
     7932               EXIT 
     7933            ENDIF 
     7934         ENDIF 
     7935         ji=ji+1 
     7936         cl_tmp=fct_split(cd_varinfo,ji,';')          
     7937      ENDDO 
     7938       
     7939      IF( TRIM(cl_flt) /= '' )THEN 
    71657940         DO jj=1,ip_nfilter 
    7166             il_ind=INDEX(fct_lower(cl_tmp),TRIM(cp_filter_list(jj))) 
     7941            il_ind=INDEX(fct_lower(cl_flt),TRIM(cp_filter_list(jj))) 
    71677942            IF( il_ind /= 0 )THEN 
    71687943               var__get_filter(1)=TRIM(cp_filter_list(jj)) 
    71697944 
    7170                ! look for number of turn 
    7171                il_ind=SCAN(fct_lower(cl_tmp),'*') 
     7945               ! look for number of run 
     7946               il_ind=SCAN(fct_lower(cl_flt),'*') 
    71727947               IF( il_ind /=0 )THEN 
    7173                   IF( fct_is_num(cl_tmp(1:il_ind-1)) )THEN 
    7174                      var__get_filter(2)=TRIM(cl_tmp(1:il_ind-1)) 
    7175                   ELSE IF( fct_is_num(cl_tmp(il_ind+1:)) )THEN 
    7176                      var__get_filter(2)=TRIM(cl_tmp(il_ind+1:)) 
     7948                  IF( fct_is_num(cl_flt(1:il_ind-1)) )THEN 
     7949                     var__get_filter(2)=TRIM(cl_flt(1:il_ind-1)) 
     7950                  ELSE IF( fct_is_num(cl_flt(il_ind+1:)) )THEN 
     7951                     var__get_filter(2)=TRIM(cl_flt(il_ind+1:)) 
    71777952                  ELSE 
    71787953                     var__get_filter(2)='1' 
     
    71837958 
    71847959               ! look for filter parameter 
    7185                il_ind=SCAN(fct_lower(cl_tmp),'(') 
     7960               il_ind=SCAN(fct_lower(cl_flt),'(') 
    71867961               IF( il_ind /=0 )THEN 
    7187                   cl_tmp=TRIM(cl_tmp(il_ind+1:)) 
    7188                   il_ind=SCAN(fct_lower(cl_tmp),')') 
     7962                  cl_flt=TRIM(cl_flt(il_ind+1:)) 
     7963                  il_ind=SCAN(fct_lower(cl_flt),')') 
    71897964                  IF( il_ind /=0 )THEN 
    7190                      cl_tmp=TRIM(cl_tmp(1:il_ind-1)) 
     7965                     cl_flt=TRIM(cl_flt(1:il_ind-1)) 
    71917966                     ! look for cut-off frequency 
    7192                      var__get_filter(3)=fct_split(cl_tmp,1,',') 
     7967                     var__get_filter(3)=fct_split(cl_flt,1,',') 
    71937968                     ! look for halo size 
    7194                      var__get_filter(4)=fct_split(cl_tmp,2,',') 
     7969                     var__get_filter(4)=fct_split(cl_flt,2,',') 
    71957970                     ! look for alpha parameter 
    7196                      var__get_filter(5)=fct_split(cl_tmp,3,',') 
     7971                     var__get_filter(5)=fct_split(cl_flt,3,',') 
    71977972                  ELSE 
    71987973                     CALL logger_error("VAR GET FILTER: variable "//& 
     
    72157990            ENDIF 
    72167991         ENDDO 
    7217          IF( jj /= ip_nfilter + 1 ) EXIT 
     7992      ENDIF 
     7993 
     7994   END FUNCTION var__get_filter 
     7995   !------------------------------------------------------------------- 
     7996   !> @brief 
     7997   !> This function check if variable information read in namelist contains  
     7998   !> unit and return it if true.  
     7999   !>  
     8000   !> @details  
     8001   !> unit is assume to follow string "unt =" 
     8002   !> 
     8003   !> @author J.Paul 
     8004   !> @date June, 2015 - Initial Version 
     8005   !> @date Feb, 2016 
     8006   !> - check character just after keyword 
     8007   ! 
     8008   !> @param[in] cd_name      variable name 
     8009   !> @param[in] cd_varinfo   variable information read in namelist 
     8010   !> @return unit string character  
     8011   !------------------------------------------------------------------- 
     8012   FUNCTION var__get_unt( cd_name, cd_varinfo ) 
     8013      IMPLICIT NONE 
     8014      ! Argument 
     8015      CHARACTER(LEN=*), INTENT(IN   ) :: cd_name 
     8016      CHARACTER(LEN=*), INTENT(IN   ) :: cd_varinfo 
     8017 
     8018      ! function 
     8019      CHARACTER(LEN=lc)               :: var__get_unt 
     8020 
     8021      ! local variable 
     8022      CHARACTER(LEN=lc) :: cl_tmp 
     8023       
     8024      INTEGER(i4)       :: il_ind 
     8025 
     8026      ! loop indices 
     8027      INTEGER(i4) :: ji 
     8028      INTEGER(i4) :: jj 
     8029      !---------------------------------------------------------------- 
     8030 
     8031      var__get_unt='' 
     8032 
     8033      ji=1 
     8034      cl_tmp=fct_split(cd_varinfo,ji,';') 
     8035      DO WHILE( TRIM(cl_tmp) /= '' ) 
     8036         il_ind=INDEX(TRIM(cl_tmp),'unt') 
     8037         IF( il_ind /= 0 )THEN 
     8038            ! check character just after 
     8039            jj=il_ind+LEN('unt') 
     8040            IF(  TRIM(cl_tmp(jj:jj)) == ' ' .OR. & 
     8041            &    TRIM(cl_tmp(jj:jj)) == '=' )THEN 
     8042               var__get_unt=fct_split(cl_tmp,2,'=') 
     8043               EXIT 
     8044            ENDIF 
     8045         ENDIF 
    72188046         ji=ji+1 
    72198047         cl_tmp=fct_split(cd_varinfo,ji,';')          
    72208048      ENDDO 
    72218049 
    7222    END FUNCTION var__get_filter 
     8050      IF( TRIM(var__get_unt) /= '' )THEN 
     8051         CALL logger_debug("VAR GET UNIT: will use units "//& 
     8052            &  TRIM(var__get_unt)//" for variable "//& 
     8053            &  TRIM(cd_name) ) 
     8054      ENDIF 
     8055 
     8056   END FUNCTION var__get_unt 
    72238057   !------------------------------------------------------------------- 
    72248058   !> @brief  
     
    72278061   !> 
    72288062   !> @author J.Paul 
    7229    !> - November, 2013- Initial Version 
     8063   !> @date November, 2013 - Initial Version 
    72308064   ! 
    72318065   !> @param[in] td_var array of variable structure 
     
    72858119   !>  
    72868120   !> @author J.Paul 
    7287    !> - November, 2013- Initial Version 
     8121   !> @date November, 2013 - Initial Version 
    72888122   ! 
    72898123   !> @param[inout] td_var variable structure 
     
    73218155   !------------------------------------------------------------------- 
    73228156   !> @brief 
     8157   !> This subroutine replace unit name of the variable, 
     8158   !> and apply unit factor to the value of this variable. 
     8159   !>  
     8160   !> @details 
     8161   !> new unit name (unt) and unit factor (unf) are read from the namelist. 
     8162   !> 
     8163   !> @note the variable value should be already read. 
     8164   !> 
     8165   !> @author J.Paul 
     8166   !> @date June, 2015 - Initial Version 
     8167   ! 
     8168   !> @param[inout] td_var variable structure 
     8169   !------------------------------------------------------------------- 
     8170   SUBROUTINE var_chg_unit( td_var ) 
     8171      IMPLICIT NONE 
     8172      ! Argument 
     8173      TYPE(TVAR), INTENT(INOUT) :: td_var 
     8174 
     8175      ! local variable 
     8176      TYPE(TATT)                :: tl_att 
     8177 
     8178      ! loop indices 
     8179      !---------------------------------------------------------------- 
     8180 
     8181      IF( ASSOCIATED(td_var%d_value) )THEN 
     8182         !- change value 
     8183         IF( td_var%d_unf /= 1._dp )THEN 
     8184            WHERE( td_var%d_value(:,:,:,:) /= td_var%d_fill ) 
     8185               td_var%d_value(:,:,:,:)=td_var%d_value(:,:,:,:)*td_var%d_unf 
     8186            END WHERE 
     8187 
     8188            !- change scale factor and offset to avoid mistake 
     8189            tl_att=att_init('scale_factor',1._dp) 
     8190            CALL var_move_att(td_var, tl_att) 
     8191 
     8192            tl_att=att_init('add_offset',0._dp) 
     8193            CALL var_move_att(td_var, tl_att) 
     8194         ENDIF 
     8195 
     8196         !- change unit name  
     8197         IF( TRIM(td_var%c_unt) /= TRIM(td_var%c_units) .AND. & 
     8198         &   TRIM(td_var%c_unt) /= '' )THEN 
     8199            tl_att=att_init('units',TRIM(td_var%c_unt)) 
     8200            CALL var_move_att(td_var,tl_att) 
     8201         ENDIF 
     8202 
     8203      ENDIF 
     8204 
     8205   END SUBROUTINE var_chg_unit 
     8206   !------------------------------------------------------------------- 
     8207   !> @brief 
    73238208   !> This subroutine check variable dimension expected, as defined in 
    73248209   !> file 'variable.cfg'. 
     
    73298214   !> 
    73308215   !> @author J.Paul 
    7331    !> - November, 2013- Initial Version 
     8216   !> @date November, 2013 - Initial Version 
    73328217   ! 
    73338218   !> @param[inout] td_var    variable structure 
     
    74148299   !>  
    74158300   !> @author J.Paul 
    7416    !> - August, 2014- Initial Version 
     8301   !> @date August, 2014 - Initial Version 
     8302   !> @date July 2015  
     8303   !> - do not use dim_disorder anymore 
    74178304   ! 
    74188305   !> @param[inout] td_var       variable structure 
     
    74388325      IF( PRESENT(cd_dimorder) ) cl_dimorder=TRIM(ADJUSTL(cd_dimorder)) 
    74398326 
     8327      CALL logger_debug("VAR REORDER: work on "//TRIM(td_var%c_name)//& 
     8328         &  " new dimension order "//TRIM(cl_dimorder)) 
     8329 
    74408330      tl_dim(:)=dim_copy(td_var%t_dim(:)) 
    74418331 
    7442       CALL dim_unorder(tl_dim(:)) 
    74438332      CALL dim_reorder(tl_dim(:),TRIM(cl_dimorder)) 
    74448333 
     
    74678356   !>  
    74688357   !> @author J.Paul 
    7469    !> - September, 2014- Initial Version 
     8358   !> @date September, 2014 - Initial Version 
    74708359   ! 
    74718360   !> @param[in] td_var array of variable structure  
     
    74928381   !>  
    74938382   !> @author J.Paul 
    7494    !> - November, 2014- Initial Version 
     8383   !> @date November, 2014 - Initial Version 
    74958384   ! 
    74968385   !> @param[in] td_var time variable structure  
     
    75538442 
    75548443   END FUNCTION var_to_date 
     8444   !------------------------------------------------------------------- 
     8445   !> @brief This subroutine fill dummy variable array 
     8446   ! 
     8447   !> @author J.Paul 
     8448   !> @date September, 2015 - Initial Version 
     8449   ! 
     8450   !> @param[in] cd_dummy dummy configuration file 
     8451   !------------------------------------------------------------------- 
     8452   SUBROUTINE var_get_dummy( cd_dummy ) 
     8453      IMPLICIT NONE 
     8454      ! Argument 
     8455      CHARACTER(LEN=*), INTENT(IN) :: cd_dummy 
     8456 
     8457      ! local variable 
     8458      INTEGER(i4)   :: il_fileid 
     8459      INTEGER(i4)   :: il_status 
     8460 
     8461      LOGICAL       :: ll_exist 
     8462 
     8463      ! loop indices 
     8464      ! namelist 
     8465      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumvar 
     8466      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumdim 
     8467      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumatt 
     8468 
     8469      !---------------------------------------------------------------- 
     8470      NAMELIST /namdum/ &   !< dummy namelist 
     8471      &  cn_dumvar, &       !< variable  name 
     8472      &  cn_dumdim, &       !< dimension name 
     8473      &  cn_dumatt          !< attribute name 
     8474      !---------------------------------------------------------------- 
     8475 
     8476      ! init 
     8477      cm_dumvar(:)='' 
     8478 
     8479      ! read namelist 
     8480      INQUIRE(FILE=TRIM(cd_dummy), EXIST=ll_exist) 
     8481      IF( ll_exist )THEN 
     8482     
     8483         il_fileid=fct_getunit() 
     8484    
     8485         OPEN( il_fileid, FILE=TRIM(cd_dummy), & 
     8486         &                FORM='FORMATTED',       & 
     8487         &                ACCESS='SEQUENTIAL',    & 
     8488         &                STATUS='OLD',           & 
     8489         &                ACTION='READ',          & 
     8490         &                IOSTAT=il_status) 
     8491         CALL fct_err(il_status) 
     8492         IF( il_status /= 0 )THEN 
     8493            CALL logger_fatal("DIM GET DUMMY: opening "//TRIM(cd_dummy)) 
     8494         ENDIF 
     8495    
     8496         READ( il_fileid, NML = namdum ) 
     8497         cm_dumvar(:)=cn_dumvar(:) 
     8498 
     8499         CLOSE( il_fileid ) 
     8500 
     8501      ENDIF 
     8502    
     8503   END SUBROUTINE var_get_dummy 
     8504   !------------------------------------------------------------------- 
     8505   !> @brief This function check if variable is defined as dummy variable 
     8506   !> in configuraton file 
     8507   !> 
     8508   !> @author J.Paul 
     8509   !> @date September, 2015 - Initial Version 
     8510   ! 
     8511   !> @param[in] td_var variable structure 
     8512   !> @return true if variable is dummy variable  
     8513   !------------------------------------------------------------------- 
     8514   FUNCTION var_is_dummy(td_var) 
     8515      IMPLICIT NONE 
     8516 
     8517      ! Argument       
     8518      TYPE(TVAR), INTENT(IN) :: td_var 
     8519       
     8520      ! function 
     8521      LOGICAL :: var_is_dummy 
     8522       
     8523      ! loop indices 
     8524      INTEGER(i4) :: ji 
     8525      !---------------------------------------------------------------- 
     8526 
     8527      var_is_dummy=.FALSE. 
     8528      DO ji=1,ip_maxdum 
     8529         IF( fct_lower(td_var%c_name) == fct_lower(cm_dumvar(ji)) )THEN 
     8530            var_is_dummy=.TRUE. 
     8531            EXIT 
     8532         ENDIF 
     8533      ENDDO 
     8534 
     8535   END FUNCTION var_is_dummy 
    75558536END MODULE var 
    75568537 
Note: See TracChangeset for help on using the changeset viewer.