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 10251 for branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/iom_cdf.f90 – NEMO

Ignore:
Timestamp:
2018-10-29T15:20:26+01:00 (5 years ago)
Author:
kingr
Message:

Rolled back to r10247 - i.e., undid merge of pkg br and 3.6_stable br

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/iom_cdf.f90

    r10248 r10251  
    144144   !> 
    145145   !> @author J.Paul 
    146    !> @date November, 2013 - Initial Version 
    147    !> @date May, 2015 - add optional message to netcdf error message 
    148    !> 
     146   !> - November, 2013- Initial Version 
     147   ! 
    149148   !> @param[in] id_status error status 
    150    !> @param[in] cd_msg    message 
    151    !------------------------------------------------------------------- 
    152    SUBROUTINE iom_cdf__check(id_status, cd_msg) 
    153       IMPLICIT NONE 
    154       ! Argument       
    155       INTEGER(i4)     , INTENT(IN)           :: id_status 
    156       CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: cd_msg 
    157       ! local variable 
    158       CHARACTER(LEN=lc) :: cl_msg 
    159       !---------------------------------------------------------------- 
    160  
    161       cl_msg="" 
    162       IF( PRESENT(cd_msg) ) cl_msg=cd_msg 
     149   !------------------------------------------------------------------- 
     150   SUBROUTINE iom_cdf__check(id_status) 
     151      IMPLICIT NONE 
     152      ! Argument       
     153      INTEGER(i4), INTENT(IN) :: id_status 
     154      !---------------------------------------------------------------- 
    163155 
    164156      IF( id_status /= NF90_NOERR )THEN 
    165          CALL logger_error(TRIM(cl_msg)//TRIM(NF90_STRERROR(id_status))) 
     157         CALL logger_error(TRIM(NF90_STRERROR(id_status))) 
    166158      ENDIF 
    167159 
     
    181173   !> 
    182174   !> @author J.Paul 
    183    !> @date November, 2013 - Initial Version 
     175   !> - November, 2013- Initial Version 
    184176   ! 
    185177   !> @param[inout] td_file   file structure 
     
    211203            CALL logger_info( " IOM CDF CREATE: file "//TRIM(td_file%c_name) ) 
    212204 
    213             il_status = NF90_CREATE(TRIM(td_file%c_name),& 
    214             &                       cmode=NF90_64BIT_OFFSET,& 
    215             &                       ncid=td_file%i_id) 
    216          !NF90_WRITE,               & 
    217             CALL iom_cdf__check(il_status," IOM CDF CREATE: ") 
     205            il_status = NF90_CREATE( TRIM(td_file%c_name),& 
     206            &                        NF90_WRITE,               & 
     207            &                        td_file%i_id) 
     208            CALL iom_cdf__check(il_status) 
    218209 
    219210            td_file%l_def=.TRUE. 
     
    237228               &                      NF90_NOWRITE,         & 
    238229               &                      td_file%i_id) 
    239                CALL iom_cdf__check(il_status," IOM CDF OPEN: ") 
    240  
    241                CALL logger_trace("IOM CDF OPEN "//TRIM(td_file%c_name)//" "//& 
    242                   &  TRIM(fct_str(td_file%i_id))) 
     230               CALL iom_cdf__check(il_status) 
     231 
     232               CALL logger_trace("IOM CDF OPEN "//TRIM(td_file%c_name)//" "//TRIM(fct_str(td_file%i_id))) 
    243233            ELSE 
    244234 
     
    249239               &                      NF90_WRITE,           & 
    250240               &                      td_file%i_id) 
    251                CALL iom_cdf__check(il_status,"IOM CDF OPEN: ") 
     241               CALL iom_cdf__check(il_status) 
    252242 
    253243            ENDIF 
     
    277267   !> 
    278268   !> @author J.Paul 
    279    !> @date November, 2013 - Initial Version 
     269   !> - November, 2013- Initial Version 
    280270   ! 
    281271   !> @param[inout] td_file   file structure 
     
    301291 
    302292         il_status = NF90_CLOSE(td_file%i_id) 
    303          CALL iom_cdf__check(il_status,"IOM CDF CLOSE: ") 
     293         CALL iom_cdf__check(il_status) 
    304294 
    305295         td_file%i_id = 0 
     
    317307   !> 
    318308   !> @author J.Paul 
    319    !> @date November, 2013 - Initial Version 
     309   !> - November, 2013- Initial Version 
    320310   ! 
    321311   !> @param[inout] td_file   file structure 
     
    336326      il_status=NF90_INQUIRE(td_file%i_id, td_file%i_ndim, & 
    337327      &     td_file%i_nvar, td_file%i_natt, td_file%i_uldid, il_fmt) 
    338       CALL iom_cdf__check(il_status,"IOM CDF GET INFO: ") 
     328      CALL iom_cdf__check(il_status) 
    339329 
    340330      SELECT CASE(il_fmt) 
     
    355345   ! 
    356346   !> @author J.Paul 
    357    !> @date November, 2013 - Initial Version 
     347   !> - November, 2013- Initial Version 
    358348   ! 
    359349   !> @param[inout] td_file   file structure 
     
    406396   ! 
    407397   !> @author J.Paul 
    408    !> @date November, 2013 - Initial Version 
     398   !> - November, 2013- Initial Version 
    409399   !> @date September, 2014 
    410400   !> - use attribute periodicity read from the file if present. 
     
    449439   ! 
    450440   !> @author J.Paul 
    451    !> @date November, 2013 - Initial Version 
     441   !> - November, 2013- Initial Version 
    452442   ! 
    453443   !> @param[inout] td_file   file structure 
     
    490480 
    491481            ! look for depth id 
    492             IF( INDEX(TRIM(fct_lower(td_file%t_var(ji)%c_name)),'depth')/=0 )THEN 
     482            IF( INDEX(TRIM(td_file%t_var(ji)%c_name),'depth') /= 0 )THEN 
    493483               IF( td_file%i_depthid == 0 )THEN 
    494484                  td_file%i_depthid=ji 
    495485               ELSE 
    496486                  IF( td_file%i_depthid /= ji )THEN 
    497                      CALL logger_error("IOM CDF GET FILE VAR: find more"//& 
    498                         &  " than one depth variable in file "//& 
    499                         &  TRIM(td_file%c_name) ) 
     487                     CALL logger_error("IOM CDF GET FILE VAR: find more than one "//& 
     488                     &                 "depth variable in file "//& 
     489                     &                 TRIM(td_file%c_name) ) 
    500490                  ENDIF 
    501491               ENDIF 
     
    503493 
    504494            ! look for time id 
    505             IF( INDEX(TRIM(fct_lower(td_file%t_var(ji)%c_name)),'time')/=0 )THEN 
     495            IF( INDEX(TRIM(td_file%t_var(ji)%c_name),'time') /= 0 )THEN 
    506496               IF( td_file%i_timeid == 0 )THEN 
    507497                  td_file%i_timeid=ji 
     
    514504                     td_file%i_timeid=ji 
    515505                  !ELSE 
    516                   !   CALL logger_error("IOM CDF GET FILE VAR: find more "//& 
    517                   !   &                 "than one time variable in file "//& 
     506                  !   print *,'error' 
     507                  !   CALL logger_error("IOM OPEN: find more than one "//& 
     508                  !   &                 "time variable in file "//& 
    518509                  !   &                 TRIM(td_file%c_name) ) 
    519510                  ENDIF 
     
    535526   ! 
    536527   !> @author J.Paul 
    537    !> @date November, 2013 - Initial Version 
     528   !> - November, 2013- Initial Version 
    538529   ! 
    539530   !> @param[inout] td_file   file structure 
     
    576567   ! 
    577568   !> @author J.Paul 
    578    !> @date November, 2013 - Initial Version 
    579    !> @date February, 2015 - create unused dimension, when reading dimension 
    580    !> of length less or equal to zero 
     569   !> - November, 2013- Initial Version 
    581570   ! 
    582571   !> @param[in] td_file   file structure 
     
    594583      INTEGER(i4)       :: il_len 
    595584      CHARACTER(LEN=lc) :: cl_name 
    596       LOGICAL           :: ll_use 
    597585      !---------------------------------------------------------------- 
    598586 
     
    613601         il_status=NF90_INQUIRE_DIMENSION(td_file%i_id, id_dimid, & 
    614602         &                                cl_name, il_len ) 
    615          CALL iom_cdf__check(il_status,"IOM CDF READ DIM: ") 
    616  
    617          ll_use=.TRUE. 
    618          IF( il_len <= 0 )THEN 
    619             CALL logger_warn( & 
    620          &  " IOM CDF READ DIM: dimension "//TRIM(fct_str(id_dimid))//& 
    621          &  " in file "//TRIM(td_file%c_name)//" is less or equel to zero") 
    622             il_len=1 
    623             ll_use=.FALSE. 
    624          ENDIF 
    625          iom_cdf__read_dim_id=dim_init(cl_name, il_len, ld_use=ll_use) 
     603         CALL iom_cdf__check(il_status) 
     604 
     605         iom_cdf__read_dim_id=dim_init(cl_name, il_len) 
    626606 
    627607      ENDIF 
     
    633613   ! 
    634614   !> @author J.Paul 
    635    !> @date November, 2013 - Initial Version 
     615   !> - November, 2013- Initial Version 
    636616   ! 
    637617   !> @param[in] td_file   file structure 
     
    654634 
    655635         CALL logger_error( & 
    656          &  " IOM CDF READ DIM: no id associated to file "//& 
    657          &  TRIM(td_file%c_name)) 
     636         &  " IOM CDF READ DIM: no id associated to file "//TRIM(td_file%c_name)) 
    658637 
    659638      ELSE       
     
    661640         il_status=NF90_INQ_DIMID( td_file%i_id, TRIM(ADJUSTL(cd_name)), & 
    662641         &                         il_dimid) 
    663          CALL iom_cdf__check(il_status,"IOM CDF READ DIM: ") 
     642         CALL iom_cdf__check(il_status) 
    664643 
    665644         iom_cdf__read_dim_name=iom_cdf_read_dim(td_file, il_dimid) 
     
    673652   ! 
    674653   !> @author J.Paul 
    675    !> @date November, 2013 - Initial Version 
     654   !> - November, 2013- Initial Version 
    676655   ! 
    677656   !> @param[in] td_file   file structure 
     
    735714         &                                il_len, & 
    736715         &                                il_attid ) 
    737          CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 
     716         CALL iom_cdf__check(il_status) 
    738717 
    739718         !! get attribute value 
    740          CALL logger_debug( " IOM CDF READ ATT: get attribute "//& 
    741             &            TRIM(cl_name)//" in file "//TRIM(td_file%c_name)) 
     719         CALL logger_debug( " IOM CDF READ ATT: get attribute "//TRIM(cl_name)//& 
     720         &               " in file "//TRIM(td_file%c_name)) 
    742721 
    743722         SELECT CASE( il_type ) 
     
    749728 
    750729                  CALL logger_error( & 
    751                   &  " IOM CDF READ ATT: not enough space to put "//& 
    752                   &  "attribute "//TRIM(cl_name) ) 
     730                  &  " IOM CDF READ ATT: not enough space to put attribute "//& 
     731                  &  TRIM(cl_name) ) 
    753732 
    754733               ELSE 
     
    758737                  &                      cl_name, & 
    759738                  &                      cl_value ) 
    760                   CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 
     739                  CALL iom_cdf__check(il_status) 
    761740 
    762741                  iom_cdf__read_att_name=att_init(cl_name, cl_value) 
     
    779758                  &                      cl_name, & 
    780759                  &                      bl_value(:)) 
    781                   CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ")    
     760                  CALL iom_cdf__check(il_status)    
    782761 
    783762                  iom_cdf__read_att_name=att_init(cl_name, bl_value(:)) 
     
    794773 
    795774                  CALL logger_error( & 
    796                   &  " IOM CDF READ ATT: not enough space to put "//& 
    797                   &  "attribute "//TRIM(cl_name) ) 
     775                  &  " IOM CDF READ ATT: not enough space to put attribute "//& 
     776                  &  TRIM(cl_name) ) 
    798777 
    799778               ELSE 
     
    803782                  &                      cl_name, & 
    804783                  &                      sl_value(:)) 
    805                   CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ")    
     784                  CALL iom_cdf__check(il_status)    
    806785 
    807786                  iom_cdf__read_att_name=att_init(cl_name, sl_value(:)) 
     
    818797 
    819798                  CALL logger_error( & 
    820                   &  " IOM CDF READ ATT: not enough space to put "//& 
    821                   &  "attribute "//TRIM(cl_name) ) 
     799                  &  " IOM CDF READ ATT: not enough space to put attribute "//& 
     800                  &  TRIM(cl_name) ) 
    822801 
    823802               ELSE 
     
    827806                  &                      cl_name, & 
    828807                  &                      il_value(:)) 
    829                   CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ")    
     808                  CALL iom_cdf__check(il_status)    
    830809 
    831810                  iom_cdf__read_att_name=att_init(cl_name, il_value(:)) 
     
    841820 
    842821                  CALL logger_error( & 
    843                   &  " IOM CDF READ ATT: not enough space to put "//& 
    844                   &  "attribute "//TRIM(cl_name) ) 
     822                  &  " IOM CDF READ ATT: not enough space to put attribute "//& 
     823                  &  TRIM(cl_name) ) 
    845824 
    846825               ELSE 
     
    850829                  &                      cl_name, & 
    851830                  &                      fl_value(:)) 
    852                   CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ")    
     831                  CALL iom_cdf__check(il_status)    
    853832 
    854833                  iom_cdf__read_att_name=att_init(cl_name, fl_value(:)) 
     
    865844 
    866845                  CALL logger_error( & 
    867                   &  " IOM CDF READ ATT: not enough space to put "//& 
    868                   &  "attribute "//TRIM(cl_name) ) 
     846                  &  " IOM CDF READ ATT: not enough space to put attribute "//& 
     847                  &  TRIM(cl_name) ) 
    869848 
    870849               ELSE 
     
    874853                  &                      cl_name, & 
    875854                  &                      dl_value(:)) 
    876                   CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ")    
     855                  CALL iom_cdf__check(il_status)    
    877856 
    878857                  iom_cdf__read_att_name=att_init(cl_name, dl_value(:)) 
     
    894873   ! 
    895874   !> @author J.Paul 
    896    !> @date November, 2013 - Initial Version 
     875   !> - November, 2013- Initial Version 
    897876   ! 
    898877   !> @param[in] td_file   file structure 
     
    923902         ! get attribute name 
    924903         il_status=NF90_INQ_ATTNAME(td_file%i_id, id_varid, id_attid, cl_name) 
    925          CALL iom_cdf__check(il_status,"IOM CDF READ ATT: ") 
     904         CALL iom_cdf__check(il_status) 
    926905 
    927906         ! read attribute 
     
    939918   ! 
    940919   !> @author J.Paul 
    941    !> @date November, 2013 - Initial Version 
     920   !> - November, 2013- Initial Version 
    942921   ! 
    943922   !> @param[in] td_file   file structure 
     
    997976   ! 
    998977   !> @author J.Paul 
    999    !> @date November, 2013 - Initial Version 
     978   !> - November, 2013- Initial Version 
    1000979   ! 
    1001980   !> @param[in] td_file   file structure 
     
    10641043   ! 
    10651044   !> @author J.Paul 
    1066    !> @date November, 2013 - Initial Version 
     1045   !> - November, 2013- Initial Version 
    10671046   ! 
    10681047   !> @param[inout] td_file   file structure 
     
    11061085   ! 
    11071086   !> @author J.Paul 
    1108    !> @date November, 2013 - Initial Version 
     1087   !> - November, 2013- Initial Version 
    11091088   ! 
    11101089   !> @param[inout] td_file   file structure 
     
    11691148   ! 
    11701149   !> @author J.Paul 
    1171    !> @date November, 2013 - Initial Version 
     1150   !> - November, 2013- Initial Version 
    11721151   ! 
    11731152   !> @param[inout] td_file   file structure 
     
    12201199   ! 
    12211200   !> @author J.Paul 
    1222    !> @date November, 2013 - Initial Version 
     1201   !> - November, 2013- Initial Version 
    12231202   !> @date September, 2014 
    12241203   !> - force to use FillValue=1.e20 if no FillValue for coordinate variable. 
     
    12611240 
    12621241         ! inquire variable 
    1263          CALL logger_debug( & 
     1242         CALL logger_trace( & 
    12641243         &  " IOM CDF READ VAR META: inquire variable "//& 
    12651244         &  TRIM(fct_str(id_varid))//& 
     
    12741253         &                                il_dimid(:),& 
    12751254         &                                il_natt ) 
    1276          CALL iom_cdf__check(il_status,"IOM CDF READ VAR META: ") 
     1255         CALL iom_cdf__check(il_status) 
    12771256         !!! fill variable dimension structure 
    12781257         tl_dim(:)=iom_cdf__read_var_dim( td_file, il_ndim, il_dimid(:) ) 
    1279  
    12801258         IF( il_natt /= 0 )THEN 
    12811259            ALLOCATE( tl_att(il_natt) ) 
     
    12981276               ELSE 
    12991277                  ! create attribute _FillValue 
    1300                   SELECT CASE(TRIM(fct_lower(cl_name))) 
     1278                  SELECT CASE(TRIM(cl_name)) 
    13011279                     CASE DEFAULT 
    13021280                        CALL logger_info("IOM CDF READ VAR META: assume _FillValue is equal to "//& 
    13031281                        &                "zero for variable "//TRIM(cl_name) ) 
    13041282                        tl_fill=att_init('_FillValue',0.) 
    1305                      CASE('nav_lon','nav_lat', 'nav_lev', & 
     1283                     CASE('nav_lon','nav_lat', & 
    13061284                        &  'glamt','glamu','glamv','glamf', & 
    13071285                        &  'gphit','gphiu','gphiv','gphif') 
     
    13331311            ALLOCATE(tl_att(il_natt+1) ) 
    13341312            ! create attribute _FillValue 
    1335             SELECT CASE(TRIM(fct_lower(cl_name))) 
     1313            SELECT CASE(TRIM(cl_name)) 
    13361314               CASE DEFAULT 
    13371315                  CALL logger_info("IOM CDF READ VAR META: assume _FillValue is equal to "//& 
     
    13751353   ! 
    13761354   !> @author J.Paul 
    1377    !> @date November, 2013 - Initial Version 
    1378    !> @date July, 2015  
    1379    !> - Bug fix: use order to disorder table (see dim_init) 
    1380    !> 
     1355   !> - November, 2013- Initial Version 
     1356   ! 
    13811357   !> @param[in] td_file   file structure 
    13821358   !> @param[in] id_ndim   number of dimension 
     
    13951371 
    13961372      ! local variable 
    1397       INTEGER(i4), DIMENSION(ip_maxdim) :: il_xyzt2 
     1373      INTEGER(i4), DIMENSION(ip_maxdim) :: il_2xyzt 
    13981374 
    13991375      TYPE(TDIM) , DIMENSION(ip_maxdim) :: tl_dim 
     
    14191395 
    14201396         DO ji = 1, id_ndim 
    1421             CALL logger_debug( " IOM CDF READ VAR DIM: get variable "//& 
    1422                &  "dimension "//TRIM(fct_str(ji)) ) 
    1423  
    1424             il_xyzt2(ji)=td_file%t_dim(id_dimid(ji))%i_xyzt2 
     1397            CALL logger_trace( " IOM CDF READ VAR DIM: get variable dimension "//& 
     1398            &               TRIM(fct_str(ji)) ) 
     1399 
     1400            il_2xyzt(ji)=td_file%t_dim(id_dimid(ji))%i_2xyzt 
    14251401 
    14261402            ! read dimension information 
    1427             tl_dim(ji) = dim_init( td_file%t_dim(il_xyzt2(ji))%c_name, & 
    1428             &                      td_file%t_dim(il_xyzt2(ji))%i_len ) 
     1403            tl_dim(ji) = dim_init( td_file%t_dim(il_2xyzt(ji))%c_name, & 
     1404            &                      td_file%t_dim(il_2xyzt(ji))%i_len ) 
    14291405         ENDDO 
    14301406 
    14311407         ! reorder dimension to ('x','y','z','t') 
    14321408         CALL dim_reorder(tl_dim(:)) 
    1433   
     1409       
    14341410         iom_cdf__read_var_dim(:)=dim_copy(tl_dim(:)) 
    14351411 
     
    14501426   ! 
    14511427   !> @author J.Paul 
    1452    !> @date November, 2013 - Initial Version 
     1428   !> - November, 2013- Initial Version 
    14531429   ! 
    14541430   !> @param[in] td_file   file structure 
     
    14991475   ! 
    15001476   !> @author J.Paul 
    1501    !> @date November, 2013 - Initial Version 
    1502    !> @date June, 2015  
    1503    !> - use scale factor and offset, as soon as read variable value 
     1477   !> - November, 2013- Initial Version 
    15041478   ! 
    15051479   !> @param[in] td_file   file structure 
     
    15081482   !> @param[in] id_count  number of indices selected along each dimension 
    15091483   !> @return variable structure completed  
     1484   ! 
     1485   !> @todo 
     1486   !> - warning do not change fill value when use scale factor.. 
    15101487   !------------------------------------------------------------------- 
    15111488   SUBROUTINE iom_cdf__read_var_value(td_file, td_var, & 
     
    15191496 
    15201497      ! local variable 
    1521       INTEGER(i4)                                    :: il_status 
    1522       INTEGER(i4)                                    :: il_tmp1 
    1523       INTEGER(i4)                                    :: il_tmp2 
    1524       INTEGER(i4)                                    :: il_varid 
    1525       INTEGER(i4), DIMENSION(ip_maxdim)              :: il_start 
    1526       INTEGER(i4), DIMENSION(ip_maxdim)              :: il_count 
    1527       INTEGER(i4), DIMENSION(ip_maxdim)              :: il_start_ord 
    1528       INTEGER(i4), DIMENSION(ip_maxdim)              :: il_count_ord 
    1529  
     1498      INTEGER(i4)                       :: il_status 
     1499      INTEGER(i4)                       :: il_tmp1 
     1500      INTEGER(i4)                       :: il_tmp2 
     1501      INTEGER(i4)                       :: il_varid 
     1502      INTEGER(i4), DIMENSION(ip_maxdim) :: il_start 
     1503      INTEGER(i4), DIMENSION(ip_maxdim) :: il_count 
     1504      INTEGER(i4), DIMENSION(ip_maxdim) :: il_start_ord 
     1505      INTEGER(i4), DIMENSION(ip_maxdim) :: il_count_ord 
    15301506      REAL(dp)   , DIMENSION(:,:,:,:)  , ALLOCATABLE :: dl_value 
    15311507      REAL(dp)   , DIMENSION(:,:,:,:)  , ALLOCATABLE :: dl_tmp 
     
    15421518         IF( (       PRESENT(id_start)  .AND. (.NOT. PRESENT(id_count))) .OR. & 
    15431519             ((.NOT. PRESENT(id_start)) .AND.        PRESENT(id_count) ) )THEN 
    1544             CALL logger_warn( "IOM CDF READ VAR VALUE: id_start and id_count"//& 
    1545                & " should be both specify") 
     1520            CALL logger_warn( & 
     1521            &  "IOM CDF READ VAR VALUE: id_start and id_count should be both specify") 
    15461522         ENDIF 
    15471523         IF( PRESENT(id_start).AND.PRESENT(id_count) )THEN 
     
    15491525            IF( SIZE(id_start(:)) /= ip_maxdim .OR. & 
    15501526            &   SIZE(id_count(:)) /= ip_maxdim )THEN 
    1551                CALL logger_error("IOM CDF READ VAR: dimension of array start"//& 
    1552                   &  " or count are invalid to read variable "//& 
    1553                   &  TRIM(td_var%c_name)//" in file "//TRIM(td_file%c_name) ) 
     1527               CALL logger_error("IOM CDF READ VAR: dimension of array start or count "//& 
     1528               &      " are invalid to read variable "//TRIM(td_var%c_name)//& 
     1529               &      " in file "//TRIM(td_file%c_name) ) 
    15541530            ENDIF 
    15551531 
     
    15881564            &    td_var%t_dim( 4 )%i_len & 
    15891565            &                                            /)) )THEN 
     1566 
     1567            CALL logger_error( "IOM CDF READ VAR VALUE: start + count exceed "//& 
     1568            &  "variable dimension for "//TRIM(td_var%c_name) ) 
    15901569 
    15911570            DO ji = 1, ip_maxdim 
     
    15961575               &  TRIM(fct_str(il_tmp2))) 
    15971576            ENDDO 
    1598             CALL logger_error( "IOM CDF READ VAR VALUE: start + count exceed "//& 
    1599             &  "variable dimension for "//TRIM(td_var%c_name) ) 
    16001577 
    16011578         ELSE 
    16021579 
    1603             ! Allocate space to hold variable value (disorder) 
     1580            ! Allocate space to hold variable value (unorder) 
    16041581            ALLOCATE(dl_value( il_count(1), & 
    16051582               &               il_count(2), & 
     
    16241601            &                                       start = il_start(:),& 
    16251602            &                                       count = il_count(:) ) 
    1626             CALL iom_cdf__check(il_status,"IOM CDF READ VAR VALUE: ") 
     1603            CALL iom_cdf__check(il_status) 
    16271604 
    16281605            ! Allocate space to hold variable value in structure 
     
    16861663               CALL var_chg_FillValue(td_var) 
    16871664            ENDIF 
    1688  
    1689             ! use scale factor and offset 
    1690             WHERE( td_var%d_value(:,:,:,:) /= td_var%d_fill ) 
    1691                td_var%d_value(:,:,:,:) = & 
    1692                &  td_var%d_value(:,:,:,:)*td_var%d_scf + td_var%d_ofs 
    1693             END WHERE 
    1694  
    16951665         ENDIF 
    16961666      ELSE 
     
    17031673   !------------------------------------------------------------------- 
    17041674   !> @brief This subroutine write file structure in an opened netcdf file. 
    1705    !> 
    1706    !> @details 
    1707    !> optionally, you could specify dimension order (default 'xyzt') 
    1708    !> 
    1709    !> @author J.Paul 
    1710    !> @date November, 2013 - Initial Version 
    1711    !> @date July, 2015  
    1712    !> - add dimension order option  
     1675   ! 
     1676   !> @author J.Paul 
     1677   !> - November, 2013- Initial Version 
    17131678   ! 
    17141679   !> @param[inout] td_file   file structure 
    17151680   !------------------------------------------------------------------- 
    1716    SUBROUTINE iom_cdf_write_file(td_file, cd_dimorder) 
    1717       IMPLICIT NONE 
    1718       ! Argument       
    1719       TYPE(TFILE)     , INTENT(INOUT) :: td_file 
    1720       CHARACTER(LEN=*), INTENT(IN   ), OPTIONAL :: cd_dimorder 
     1681   SUBROUTINE iom_cdf_write_file(td_file) 
     1682      IMPLICIT NONE 
     1683      ! Argument       
     1684      TYPE(TFILE), INTENT(INOUT) :: td_file 
    17211685 
    17221686      ! local variable 
    17231687      INTEGER(i4), DIMENSION(:), ALLOCATABLE :: il_value 
    1724  
    1725       CHARACTER(LEN=lc)                      :: cl_dimorder 
    17261688 
    17271689      TYPE(TVAR)                             :: tl_var 
     
    17321694      INTEGER(i4) :: ji 
    17331695      INTEGER(i4) :: jj 
    1734       INTEGER(i4) :: jvar 
    1735       !---------------------------------------------------------------- 
    1736  
    1737       cl_dimorder='xyzt' 
    1738       IF( PRESENT(cd_dimorder) ) cl_dimorder=TRIM(cd_dimorder) 
     1696      !---------------------------------------------------------------- 
    17391697 
    17401698      ! check if file opened 
     
    17681726            ENDIF 
    17691727 
    1770             ! change dimension order 
    1771             IF( TRIM(cl_dimorder) /= 'xyzt' )THEN 
    1772                CALL dim_reorder(td_file%t_dim(:),TRIM(cl_dimorder)) 
    1773                DO jvar=1,td_file%i_nvar 
    1774                   CALL logger_debug("VAR REORDER: "//TRIM(td_file%t_var(jvar)%c_name)) 
    1775                   CALL var_reorder(td_file%t_var(jvar),TRIM(cl_dimorder)) 
    1776                ENDDO 
    1777             ENDIF 
    1778  
    17791728            ! write dimension in file 
    17801729            DO ji = 1, ip_maxdim 
     
    18271776   ! 
    18281777   !> @author J.Paul 
    1829    !> @date November, 2013 - Initial Version 
     1778   !> - November, 2013- Initial Version 
    18301779   ! 
    18311780   !> @param[inout] td_file   file structure 
     
    18491798         ! Enter define mode 
    18501799         il_status=NF90_REDEF(td_file%i_id) 
    1851          CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE DIM: ") 
     1800         CALL iom_cdf__check(il_status) 
    18521801 
    18531802         td_file%l_def=.TRUE. 
     
    18641813            il_status=NF90_DEF_DIM(td_file%i_id, fct_upper(td_dim%c_sname), & 
    18651814            &                      NF90_UNLIMITED, td_dim%i_id) 
    1866             CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE DIM: ") 
     1815            CALL iom_cdf__check(il_status) 
    18671816 
    18681817         ELSE 
    18691818            ! write not unlimited dimension 
    1870             CALL logger_debug( & 
     1819            CALL logger_trace( & 
    18711820            &  "IOM CDF WRITE FILE DIM: write dimension "//TRIM(td_dim%c_name)//& 
    18721821            &  " in file "//TRIM(td_file%c_name)) 
     
    18741823            il_status=NF90_DEF_DIM(td_file%i_id, fct_upper(td_dim%c_sname), & 
    18751824            &                      td_dim%i_len, td_dim%i_id) 
    1876             CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE DIM: ") 
     1825            CALL iom_cdf__check(il_status) 
    18771826 
    18781827         ENDIF 
     
    18851834   ! 
    18861835   !> @author J.Paul 
    1887    !> @date November, 2013 - Initial Version 
     1836   !> - November, 2013- Initial Version 
    18881837   ! 
    18891838   !> @param[inout] td_file   file structure 
     
    19101859         ! Enter define mode 
    19111860         il_status=NF90_REDEF(td_file%i_id) 
    1912          CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE ATT: ") 
     1861         CALL iom_cdf__check(il_status) 
    19131862 
    19141863         td_file%l_def=.TRUE. 
     
    19271876            il_status = NF90_PUT_ATT(td_file%i_id, id_varid, & 
    19281877            &  td_att%c_name, td_att%c_value ) 
    1929             CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE ATT: ") 
     1878            CALL iom_cdf__check(il_status) 
    19301879 
    19311880         CASE(NF90_BYTE, NF90_SHORT, NF90_INT, NF90_FLOAT, NF90_DOUBLE) 
     
    19331882            il_status = NF90_PUT_ATT(td_file%i_id, id_varid, & 
    19341883            &  td_att%c_name, td_att%d_value ) 
    1935             CALL iom_cdf__check(il_status,"IOM CDF WRITE FILE ATT: ") 
     1884            CALL iom_cdf__check(il_status) 
    19361885 
    19371886      END SELECT 
     
    19421891   ! 
    19431892   !> @author J.Paul 
    1944    !> @date November, 2013 - Initial Version 
     1893   !> - November, 2013- Initial Version 
    19451894   ! 
    19461895   !> @param[inout] td_file   file structure 
     
    19681917         ! Enter define mode 
    19691918         il_status=NF90_REDEF(td_file%i_id) 
    1970          CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR: ") 
     1919         CALL iom_cdf__check(il_status) 
    19711920 
    19721921         td_file%l_def=.TRUE. 
    19731922 
    19741923      ENDIF 
    1975   
     1924       
    19761925      ! check if file and variable dimension conform 
    19771926      IF( file_check_var_dim(td_file, td_var) )THEN 
     
    19891938            ENDIF 
    19901939         ENDDO 
    1991          ! ugly patch until NEMO do not force to use 0. as FillValue  
    19921940         IF( ll_chg )THEN 
    19931941            ! not a dimension variable 
    19941942            ! change FillValue 
    1995             SELECT CASE( TRIM(fct_lower(td_var%c_name)) ) 
    1996                CASE DEFAULT 
    1997                   CALL var_chg_FillValue(td_var,0._dp) 
    1998                CASE('nav_lon','nav_lat', & 
    1999                   & 'glamt','glamu','glamv','glamf', & 
    2000                   & 'gphit','gphiu','gphiv','gphif') 
    2001             END SELECT 
     1943 
     1944            ! ugly patch until NEMO do not force to use 0. as FillValue  
     1945            CALL var_chg_FillValue(td_var,0._dp) 
    20021946         ENDIF 
    20031947 
     
    20131957            ! Leave define mode 
    20141958            il_status=NF90_ENDDEF(td_file%i_id) 
    2015             CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR: ") 
     1959            CALL iom_cdf__check(il_status) 
    20161960 
    20171961            td_file%l_def=.FALSE. 
     
    20311975   ! 
    20321976   !> @author J.Paul 
    2033    !> @date November, 2013 - Initial Version 
     1977   !> - November, 2013- Initial Version 
    20341978   ! 
    20351979   !> @param[in] td_file   file structure 
     
    20582002      tl_var=var_copy(td_var) 
    20592003 
    2060       ! forced to use float type 
    2061       IF( tl_var%d_unf /= 1. .AND. tl_var%i_type==NF90_SHORT )THEN 
    2062          tl_var%i_type=NF90_FLOAT 
    2063       ENDIF 
    2064  
    20652004      IF( ALL( .NOT. tl_var%t_dim(:)%l_use ) )THEN 
    2066          CALL logger_debug( & 
    2067          &  "IOM CDF WRITE VAR DEF scalar: define variable "//& 
    2068          &  TRIM(tl_var%c_name)//" in file "//TRIM(td_file%c_name)) 
    20692005         ! scalar value 
    20702006         il_status = NF90_DEF_VAR(td_file%i_id, TRIM(tl_var%c_name), & 
    20712007         &                        tl_var%i_type, varid=iom_cdf__write_var_def)  
    2072          CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 
     2008         CALL iom_cdf__check(il_status) 
    20732009      ELSE 
    20742010 
     
    20842020         ENDDO 
    20852021 
    2086          CALL logger_debug( & 
     2022         CALL logger_trace( & 
    20872023         &  "IOM CDF WRITE VAR DEF: define dimension to be used for variable "//& 
    20882024         &  TRIM(tl_var%c_name)//" in file "//TRIM(td_file%c_name)) 
    20892025 
    20902026         DO ji=1,jj 
    2091             CALL logger_debug("IOM CDF WRITE VAR DEF: dimid "//TRIM(fct_str(il_dimid(ji))) ) 
     2027            CALL logger_trace("IOM CDF WRITE VAR DEF: dimid "//TRIM(fct_str(il_dimid(ji))) ) 
    20922028         ENDDO 
    2093  
    20942029         il_status = NF90_DEF_VAR(td_file%i_id, TRIM(tl_var%c_name),     & 
    20952030         &                        tl_var%i_type,                         & 
    20962031         &                        il_dimid(1:jj),                        & 
    20972032         &                        varid=iom_cdf__write_var_def           ) 
    2098          CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 
     2033         CALL iom_cdf__check(il_status) 
    20992034      ENDIF 
    21002035 
     
    21082043 
    21092044      DO ji = 1, tl_var%i_natt 
    2110          CALL logger_debug( & 
     2045         CALL logger_trace( & 
    21112046         &  " IOM CDF WRITE VAR DEF: put attribute "//TRIM(tl_var%t_att(ji)%c_name)//& 
    21122047         &  " for variable "//TRIM(tl_var%c_name)//& 
    21132048         &  " in file "//TRIM(td_file%c_name) ) 
    2114  
    2115          ! forced FillValue to have same type than variable 
    2116          IF( TRIM(tl_var%t_att(ji)%c_name) == '_FillValue' )THEN 
    2117             tl_var%t_att(ji)%i_type=tl_var%i_type 
    2118          ENDIF 
    21192049 
    21202050         IF( tl_var%t_att(ji)%i_type == NF90_CHAR )THEN 
     
    21232053               &                        TRIM(tl_var%t_att(ji)%c_name),        & 
    21242054               &                        TRIM(tl_var%t_att(ji)%c_value)        ) 
    2125                CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 
     2055               CALL iom_cdf__check(il_status) 
    21262056            ENDIF 
    21272057         ELSE 
     
    21522082                  &                        TRIM(tl_var%t_att(ji)%c_name),  & 
    21532083                  &                        REAL(tl_var%t_att(ji)%d_value(:),dp)) 
    2154             END SELECT 
    2155             CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR DEF: ") 
     2084               END SELECT 
     2085            CALL iom_cdf__check(il_status) 
    21562086         ENDIF 
    21572087      ENDDO 
     
    21672097   ! 
    21682098   !> @author J.Paul 
    2169    !> @date November, 2013 - Initial Version 
    2170    !> @date June, 2015 
    2171    !> - reuse scale factor and offset, before writing variable 
     2099   !> - November, 2013- Initial Version 
    21722100   ! 
    21732101   !> @param[in] td_file   file structure 
     
    21942122      &  "IOM CDF WRITE VAR VALUE: get dimension to be used for variable "//& 
    21952123      &  TRIM(td_var%c_name)//" in file "//TRIM(td_file%c_name)) 
    2196     
    2197       ! use scale factor and offset 
    2198       WHERE( td_var%d_value(:,:,:,:) /= td_var%d_fill ) 
    2199          td_var%d_value(:,:,:,:) = & 
    2200          &  (td_var%d_value(:,:,:,:)-td_var%d_ofs)/td_var%d_scf 
    2201       END WHERE 
    2202        
     2124 
    22032125      jj=0 
    22042126      DO ji = 1, ip_maxdim 
     
    22312153 
    22322154      il_status = NF90_PUT_VAR( td_file%i_id, td_var%i_id, dl_value(:,:,:,:)) 
    2233       CALL iom_cdf__check(il_status,"IOM CDF WRITE VAR VALUE: ") 
     2155      CALL iom_cdf__check(il_status) 
    22342156 
    22352157      DEALLOCATE( dl_value ) 
Note: See TracChangeset for help on using the changeset viewer.