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 8817 for branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90 – NEMO

Ignore:
Timestamp:
2017-11-27T12:03:07+01:00 (6 years ago)
Author:
clem
Message:

make ice restart file shorter (this commit is on behalf of Madec)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90

    r7646 r8817  
    11MODULE iom_nf90 
    2    !!===================================================================== 
     2   !!====================================================================== 
    33   !!                    ***  MODULE  iom_nf90 *** 
    44   !! Input/Output manager :  Library to read input files with NF90 (only fliocom module) 
    5    !!==================================================================== 
     5   !!====================================================================== 
    66   !! History :  9.0  ! 05 12  (J. Belier) Original code 
    77   !!            9.0  ! 06 02  (S. Masson) Adaptation to NEMO 
    88   !!             "   ! 07 07  (D. Storkey) Changes to iom_nf90_gettime 
    99   !!            3.6  ! 2015-15  (J. Harle) Added procedure to read REAL attributes 
    10    !!-------------------------------------------------------------------- 
    11    !!gm  caution add !DIR nec: improved performance to be checked as well as no result changes 
    12  
    13    !!-------------------------------------------------------------------- 
     10   !!            4.0  ! 2017-11 (M. Andrejczuk) Extend IOM interface to write any 3D fields 
     11   !!---------------------------------------------------------------------- 
     12 
     13   !!---------------------------------------------------------------------- 
    1414   !!   iom_open       : open a file read only 
    1515   !!   iom_close      : close a file or all files opened by iom 
     
    1818   !!   iom_varid      : get the id of a variable in a file 
    1919   !!   iom_rstput     : write a field in a restart file (interfaced to several routines) 
    20    !!-------------------------------------------------------------------- 
     20   !!---------------------------------------------------------------------- 
    2121   USE dom_oce         ! ocean space and time domain 
    2222   USE lbclnk          ! lateal boundary condition / mpp exchanges 
     
    2929   PRIVATE 
    3030 
    31    PUBLIC iom_nf90_open, iom_nf90_close, iom_nf90_varid, iom_nf90_get, iom_nf90_gettime, iom_nf90_rstput 
     31   PUBLIC iom_nf90_open  , iom_nf90_close, iom_nf90_varid, iom_nf90_get, iom_nf90_gettime, iom_nf90_rstput 
    3232   PUBLIC iom_nf90_getatt, iom_nf90_putatt 
    3333 
     
    4646 
    4747   !!---------------------------------------------------------------------- 
    48    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     48   !! NEMO/OPA 4.0 , NEMO Consortium (2017) 
    4949   !! $Id$ 
    5050   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    5151   !!---------------------------------------------------------------------- 
    52  
    5352CONTAINS 
    5453 
    55    SUBROUTINE iom_nf90_open( cdname, kiomid, ldwrt, ldok, kdompar ) 
     54   SUBROUTINE iom_nf90_open( cdname, kiomid, ldwrt, ldok, kdompar, kdlev ) 
    5655      !!--------------------------------------------------------------------- 
    5756      !!                   ***  SUBROUTINE  iom_open  *** 
     
    6463      LOGICAL                , INTENT(in   )           ::   ldok        ! check the existence  
    6564      INTEGER, DIMENSION(2,5), INTENT(in   ), OPTIONAL ::   kdompar     ! domain parameters:  
     65      INTEGER                , INTENT(in   ), OPTIONAL ::   kdlev       ! size of the third dimension 
    6666 
    6767      CHARACTER(LEN=256) ::   clinfo           ! info character 
     
    7676      INTEGER            ::   ihdf5            ! local variable for retrieval of value for NF90_HDF5 
    7777      LOGICAL            ::   llclobber        ! local definition of ln_clobber 
    78       !--------------------------------------------------------------------- 
    79  
     78      INTEGER            ::   ilevels           ! vertical levels 
     79      !--------------------------------------------------------------------- 
     80      ! 
    8081      clinfo = '                    iom_nf90_open ~~~  ' 
    81       istop = nstop   ! store the actual value of nstop 
     82      istop = nstop     ! store the actual value of nstop 
     83      ! 
     84      !                 !number of vertical levels 
     85      IF( PRESENT(kdlev) ) THEN   ;   ilevels = kdlev    ! use input value (useful for sea-ice) 
     86      ELSE                        ;   ilevels = jpk      ! by default jpk 
     87      ENDIF 
     88      ! 
    8289      IF( nn_chunksz > 0 ) THEN   ;   ichunk = nn_chunksz 
    8390      ELSE                        ;   ichunk = NF90_SIZEHINT_DEFAULT 
     
    8592      ! 
    8693      llclobber = ldwrt .AND. ln_clobber 
    87       IF( ldok .AND. .NOT. llclobber ) THEN      ! Open existing file... 
    88          !                 ! ============= 
     94      IF( ldok .AND. .NOT. llclobber ) THEN      !==  Open existing file ==! 
     95         !                                       !=========================! 
    8996         IF( ldwrt ) THEN  ! ... in write mode 
    9097            IF(lwp) WRITE(numout,*) TRIM(clinfo)//' open existing file: '//TRIM(cdname)//' in WRITE mode' 
     
    99106            CALL iom_nf90_check(NF90_OPEN( TRIM(cdname), NF90_NOWRITE, if90id, chunksize = ichunk ), clinfo) 
    100107         ENDIF 
    101       ELSE                                       ! the file does not exist (or we overwrite it) 
    102          !                 ! ============= 
     108      ELSE                                       !== the file doesn't exist ==!  (or we overwrite it) 
     109         !                                       !============================! 
    103110         iln = INDEX( cdname, '.nc' ) 
    104          IF( ldwrt ) THEN  ! the file should be open in write mode so we create it... 
     111         IF( ldwrt ) THEN              !* the file should be open in write mode so we create it... 
    105112            IF( jpnij > 1 ) THEN 
    106113               WRITE(cltmp,'(a,a,i4.4,a)') cdname(1:iln-1), '_', narea-1, '.nc' 
     
    126133            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'x', kdompar(1,1)  , idmy ), clinfo) 
    127134            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'y', kdompar(2,1)  , idmy ), clinfo) 
    128             CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'z', jpk           , idmy ), clinfo) 
     135            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'z', ilevels       , idmy ), clinfo) 
    129136            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 't', NF90_UNLIMITED, idmy ), clinfo) 
    130137            ! global attributes 
     
    139146            CALL iom_nf90_check(NF90_PUT_ATT( if90id, NF90_GLOBAL, 'DOMAIN_halo_size_end'  , kdompar(:,5)       ), clinfo) 
    140147            CALL iom_nf90_check(NF90_PUT_ATT( if90id, NF90_GLOBAL, 'DOMAIN_type'           , 'BOX'              ), clinfo) 
    141          ELSE              ! the file should be open for read mode so it must exist... 
     148         ELSE                          !* the file should be open for read mode so it must exist... 
    142149            CALL ctl_stop( TRIM(clinfo), ' should be impossible case...' ) 
    143150         ENDIF 
    144151      ENDIF 
     152      ! 
    145153      ! start to fill file informations 
    146154      ! ============= 
     
    156164         iom_file(kiomid)%nvars  = 0 
    157165         iom_file(kiomid)%irec   = -1   ! useless for NetCDF files, used to know if the file is in define mode  
     166         iom_file(kiomid)%nlev   = ilevels 
    158167         CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 
    159          IF ( iom_file(kiomid)%iduld .GE. 0 ) THEN 
    160            CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, iom_file(kiomid)%iduld,     &  
    161         &                                               name = iom_file(kiomid)%uldname,  & 
    162         &                                               len  = iom_file(kiomid)%lenuld ), clinfo ) 
     168         IF( iom_file(kiomid)%iduld .GE. 0 ) THEN 
     169            CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, iom_file(kiomid)%iduld,    &  
     170               &                                       name = iom_file(kiomid)%uldname,   & 
     171               &                                       len  = iom_file(kiomid)%lenuld ), clinfo ) 
    163172         ENDIF 
    164173         IF(lwp) WRITE(numout,*) '                   ---> '//TRIM(cdname)//' OK' 
     
    179188      CHARACTER(LEN=100)  ::   clinfo   ! info character 
    180189      !--------------------------------------------------------------------- 
    181       ! 
    182190      clinfo = '      iom_nf90_close    , file: '//TRIM(iom_file(kiomid)%name) 
    183191      CALL iom_nf90_check(NF90_CLOSE(iom_file(kiomid)%nfid), clinfo) 
    184       !     
    185192   END SUBROUTINE iom_nf90_close 
    186193 
     
    275282      clinfo = 'iom_nf90_g0d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 
    276283      CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), pvar, start = kstart), clinfo ) 
    277       !  
    278284   END SUBROUTINE iom_nf90_g0d 
    279285 
     
    357363         ivarid = NF90_GLOBAL 
    358364      ENDIF 
    359 ! 
     365      ! 
    360366      IF( llok) THEN 
    361367         clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', giatt: '//TRIM(cdatt) 
     
    368374   END SUBROUTINE iom_nf90_giatt 
    369375 
    370    SUBROUTINE iom_nf90_gratt( kiomid, cdatt, pv_r0d, cdvar) 
     376 
     377   SUBROUTINE iom_nf90_gratt( kiomid, cdatt, pv_r0d, cdvar ) 
    371378      !!----------------------------------------------------------------------- 
    372379      !!                  ***  ROUTINE  iom_nf90_gratt  *** 
     
    376383      !!               attribute if optional variable name is supplied (cdvar)) 
    377384      !!----------------------------------------------------------------------- 
    378       INTEGER         , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    379       CHARACTER(len=*), INTENT(in   ) ::   cdatt    ! attribute name 
    380       REAL(wp)        , INTENT(  out) ::   pv_r0d   ! read field 
    381       CHARACTER(len=*), INTENT(in   ), OPTIONAL     & 
    382                       &               ::   cdvar    ! name of the variable 
    383       ! 
    384       INTEGER                         ::   if90id   ! temporary integer 
    385       INTEGER                         ::   ivarid   ! NetCDF variable Id 
    386       LOGICAL                         ::   llok     ! temporary logical 
    387       CHARACTER(LEN=100)              ::   clinfo   ! info character 
     385      INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
     386      CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
     387      REAL(wp)                  , INTENT(  out) ::   pv_r0d   ! read field 
     388      CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
     389      ! 
     390      INTEGER            ::   if90id   ! temporary integer 
     391      INTEGER            ::   ivarid   ! NetCDF variable Id 
     392      LOGICAL            ::   llok     ! temporary logical 
     393      CHARACTER(LEN=100) ::   clinfo   ! info character 
    388394      !--------------------------------------------------------------------- 
    389395      ! 
     
    402408         ivarid = NF90_GLOBAL 
    403409      ENDIF 
    404 ! 
     410      ! 
    405411      IF( llok) THEN 
    406412         clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', gratt: '//TRIM(cdatt) 
     
    413419   END SUBROUTINE iom_nf90_gratt 
    414420 
    415    SUBROUTINE iom_nf90_gcatt( kiomid, cdatt, pv_c0d, cdvar) 
     421 
     422   SUBROUTINE iom_nf90_gcatt( kiomid, cdatt, pv_c0d, cdvar ) 
    416423      !!----------------------------------------------------------------------- 
    417424      !!                  ***  ROUTINE  iom_nf90_gcatt  *** 
     
    421428      !!               attribute if optional variable name is supplied (cdvar)) 
    422429      !!----------------------------------------------------------------------- 
    423       INTEGER         , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    424       CHARACTER(len=*), INTENT(in   ) ::   cdatt    ! attribute name 
    425       CHARACTER(len=*), INTENT(  out) ::   pv_c0d   ! read field 
    426       CHARACTER(len=*), INTENT(in   ), OPTIONAL     & 
    427                       &               ::   cdvar    ! name of the variable 
    428       ! 
    429       INTEGER                         ::   if90id   ! temporary integer 
    430       INTEGER                         ::   ivarid   ! NetCDF variable Id 
    431       LOGICAL                         ::   llok     ! temporary logical 
    432       CHARACTER(LEN=100)              ::   clinfo   ! info character 
     430      INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
     431      CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
     432      CHARACTER(len=*)          , INTENT(  out) ::   pv_c0d   ! read field 
     433      CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
     434      ! 
     435      INTEGER            ::   if90id   ! temporary integer 
     436      INTEGER            ::   ivarid   ! NetCDF variable Id 
     437      LOGICAL            ::   llok     ! temporary logical 
     438      CHARACTER(LEN=100) ::   clinfo   ! info character 
    433439      !--------------------------------------------------------------------- 
    434440      ! 
     
    458464   END SUBROUTINE iom_nf90_gcatt 
    459465 
     466 
    460467   !!---------------------------------------------------------------------- 
    461468   !!                   INTERFACE iom_nf90_putatt 
     
    495502         ivarid = NF90_GLOBAL 
    496503      ENDIF 
    497 ! 
     504      ! 
    498505      IF( llok) THEN 
    499506         clinfo = 'iom_nf90_putatt, file: '//TRIM(iom_file(kiomid)%name)//', piatt: '//TRIM(cdatt) 
     
    517524   END SUBROUTINE iom_nf90_piatt 
    518525 
    519    SUBROUTINE iom_nf90_pratt( kiomid, cdatt, pv_r0d, cdvar) 
     526 
     527   SUBROUTINE iom_nf90_pratt( kiomid, cdatt, pv_r0d, cdvar ) 
    520528      !!----------------------------------------------------------------------- 
    521529      !!                  ***  ROUTINE  iom_nf90_pratt  *** 
     
    525533      !!               attribute if optional variable name is supplied (cdvar)) 
    526534      !!----------------------------------------------------------------------- 
    527       INTEGER         , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    528       CHARACTER(len=*), INTENT(in   ) ::   cdatt    ! attribute name 
    529       REAL(wp)        , INTENT(in   ) ::   pv_r0d   ! write field 
    530       CHARACTER(len=*), INTENT(in   ), OPTIONAL     & 
    531                       &               ::   cdvar    ! name of the variable 
    532       ! 
    533       INTEGER                         ::   if90id   ! temporary integer 
    534       INTEGER                         ::   ivarid   ! NetCDF variable Id 
    535       LOGICAL                         ::   llok     ! temporary logical 
    536       LOGICAL                         ::   lenddef  ! temporary logical 
    537       CHARACTER(LEN=100)              ::   clinfo   ! info character 
     535      INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
     536      CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
     537      REAL(wp)                  , INTENT(in   ) ::   pv_r0d   ! write field 
     538      CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
     539      ! 
     540      INTEGER            ::   if90id   ! temporary integer 
     541      INTEGER            ::   ivarid   ! NetCDF variable Id 
     542      LOGICAL            ::   llok     ! temporary logical 
     543      LOGICAL            ::   lenddef  ! temporary logical 
     544      CHARACTER(LEN=100) ::   clinfo   ! info character 
    538545      !--------------------------------------------------------------------- 
    539546      ! 
     
    550557         ivarid = NF90_GLOBAL 
    551558      ENDIF 
    552 ! 
     559      ! 
    553560      IF( llok) THEN 
    554561         clinfo = 'iom_nf90_putatt, file: '//TRIM(iom_file(kiomid)%name)//', pratt: '//TRIM(cdatt) 
     
    572579   END SUBROUTINE iom_nf90_pratt 
    573580 
    574    SUBROUTINE iom_nf90_pcatt( kiomid, cdatt, pv_c0d, cdvar) 
     581 
     582   SUBROUTINE iom_nf90_pcatt( kiomid, cdatt, pv_c0d, cdvar ) 
    575583      !!----------------------------------------------------------------------- 
    576584      !!                  ***  ROUTINE  iom_nf90_pcatt  *** 
     
    580588      !!               attribute if optional variable name is supplied (cdvar)) 
    581589      !!----------------------------------------------------------------------- 
    582       INTEGER         , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    583       CHARACTER(len=*), INTENT(in   ) ::   cdatt    ! attribute name 
    584       CHARACTER(len=*), INTENT(in   ) ::   pv_c0d   ! write field 
    585       CHARACTER(len=*), INTENT(in   ), OPTIONAL     & 
    586                       &               ::   cdvar    ! name of the variable 
    587       ! 
    588       INTEGER                         ::   if90id   ! temporary integer 
    589       INTEGER                         ::   ivarid   ! NetCDF variable Id 
    590       LOGICAL                         ::   llok     ! temporary logical 
    591       LOGICAL                         ::   lenddef  ! temporary logical 
    592       CHARACTER(LEN=100)              ::   clinfo   ! info character 
     590      INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
     591      CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
     592      CHARACTER(len=*)          , INTENT(in   ) ::   pv_c0d   ! write field 
     593      CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
     594      ! 
     595      INTEGER            ::   if90id   ! temporary integer 
     596      INTEGER            ::   ivarid   ! NetCDF variable Id 
     597      LOGICAL            ::   llok     ! temporary logical 
     598      LOGICAL            ::   lenddef  ! temporary logical 
     599      CHARACTER(LEN=100) ::   clinfo   ! info character 
    593600      !--------------------------------------------------------------------- 
    594601      ! 
     
    605612         ivarid = NF90_GLOBAL 
    606613      ENDIF 
    607 ! 
     614      ! 
    608615      IF( llok) THEN 
    609616         clinfo = 'iom_nf90_putatt, file: '//TRIM(iom_file(kiomid)%name)//', pcatt: '//TRIM(cdatt) 
     
    658665 
    659666   SUBROUTINE iom_nf90_rp0123d( kt, kwrite, kiomid, cdvar , kvid  , ktype,   & 
    660          &                               pv_r0d, pv_r1d, pv_r2d, pv_r3d ) 
     667         &                                  pv_r0d, pv_r1d, pv_r2d, pv_r3d ) 
    661668      !!-------------------------------------------------------------------- 
    662669      !!                   ***  SUBROUTINE  iom_nf90_rstput  *** 
     
    687694      INTEGER               :: itype                ! variable type 
    688695      INTEGER, DIMENSION(4) :: ichunksz             ! NetCDF4 chunk sizes. Will be computed using 
    689                                                     ! nn_nchunks_[i,j,k,t] namelist parameters 
    690       INTEGER               :: ichunkalg, ishuffle,& 
    691                                ideflate, ideflate_level 
    692                                                     ! NetCDF4 internally fixed parameters 
     696      !                                             ! nn_nchunks_[i,j,k,t] namelist parameters 
     697      INTEGER               :: ichunkalg, ishuffle, ideflate, ideflate_level 
     698      !                                             ! NetCDF4 internally fixed parameters 
    693699      LOGICAL               :: lchunk               ! logical switch to activate chunking and compression 
    694                                                     ! when appropriate (currently chunking is applied to 4d fields only) 
     700      !                                             ! when appropriate (currently chunking is applied to 4d fields only) 
     701      INTEGER               :: idlv                 ! local variable 
    695702      !--------------------------------------------------------------------- 
    696703      ! 
     
    706713         ENDIF 
    707714         ! define the dimension variables if it is not already done 
    708          cltmp = (/ 'nav_lon     ', 'nav_lat     ', 'nav_lev     ', 'time_counter' /) 
     715         IF(iom_file(kiomid)%nlev == jpk ) THEN 
     716          cltmp = (/ 'nav_lon     ', 'nav_lat     ', 'nav_lev     ', 'time_counter' /) 
     717         ELSE 
     718          cltmp = (/ 'nav_lon     ', 'nav_lat     ', 'numcat      ', 'time_counter' /) 
     719         ENDIF 
    709720         CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(1)), NF90_FLOAT , (/ 1, 2 /), iom_file(kiomid)%nvid(1) ), clinfo) 
    710721         CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(2)), NF90_FLOAT , (/ 1, 2 /), iom_file(kiomid)%nvid(2) ), clinfo) 
     
    755766         IF( PRESENT(pv_r0d) ) THEN 
    756767            CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cdvar), itype,                    & 
    757                  &                            iom_file(kiomid)%nvid(idvar) ), clinfo) 
     768               &                              iom_file(kiomid)%nvid(idvar) ), clinfo ) 
    758769         ELSE 
    759770            CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cdvar), itype, idimid(1:idims),   & 
    760                  &                            iom_file(kiomid)%nvid(idvar) ), clinfo) 
     771               &                              iom_file(kiomid)%nvid(idvar) ), clinfo ) 
    761772         ENDIF 
    762773         lchunk = .false. 
    763          IF( snc4set%luse .AND. idims.eq.4 ) lchunk = .true. 
     774         IF( snc4set%luse .AND. idims == 4 )  lchunk = .true. 
    764775         ! update informations structure related the new variable we want to add... 
    765776         iom_file(kiomid)%nvars         = idvar 
     
    782793            ichunksz(3) = MIN( ichunksz(3),MAX( (ichunksz(3)-1)/snc4set%nk + 1 , 1 ) ) ! Suggested default nc4set%nk=6 
    783794            ichunksz(4) = 1                                                            ! Do not allow chunks to span the 
    784                                                                                        ! unlimited dimension 
     795            !                                                                          ! unlimited dimension 
    785796            CALL iom_nf90_check(SET_NF90_DEF_VAR_CHUNKING(if90id, idvar, ichunkalg, ichunksz), clinfo) 
    786797            CALL iom_nf90_check(SET_NF90_DEF_VAR_DEFLATE(if90id, idvar, ishuffle, ideflate, ideflate_level), clinfo) 
     
    791802         idvar = kvid 
    792803      ENDIF 
    793  
     804      ! 
    794805      ! time step kwrite : write the variable 
    795806      IF( kt == kwrite ) THEN 
     
    815826            ! trick: is defined to 0 => dimension variable are defined but not yet written 
    816827            IF( iom_file(kiomid)%dimsz(1, 1) == 0 ) THEN 
    817                CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'nav_lon'     , idmy ), clinfo) 
    818                CALL iom_nf90_check(NF90_PUT_VAR( if90id, idmy, glamt(ix1:ix2, iy1:iy2) ), clinfo) 
    819                CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'nav_lat'     , idmy ), clinfo) 
    820                CALL iom_nf90_check(NF90_PUT_VAR( if90id, idmy, gphit(ix1:ix2, iy1:iy2) ), clinfo) 
    821                CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'nav_lev'     , idmy ), clinfo) 
    822                CALL iom_nf90_check(NF90_PUT_VAR( if90id, idmy, gdept_1d                ), clinfo) 
     828               CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'nav_lon'     , idmy )         , clinfo ) 
     829               CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, glamt(ix1:ix2, iy1:iy2) ), clinfo ) 
     830               CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'nav_lat'     , idmy )         , clinfo ) 
     831               CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, gphit(ix1:ix2, iy1:iy2) ), clinfo ) 
     832               IF(iom_file(kiomid)%nlev == jpk ) THEN  
     833                  !NEMO 
     834                  CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'nav_lev'     , idmy ), clinfo ) 
     835                  CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, gdept_1d       ), clinfo ) 
     836               ELSE 
     837                  CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'numcat'     , idmy ), clinfo) 
     838                  CALL iom_nf90_check( NF90_PUT_VAR  ( if90id, idmy, (/ (idlv, idlv = 1,iom_file(kiomid)%nlev) /)), clinfo ) 
     839               ENDIF 
    823840               ! +++ WRONG VALUE: to be improved but not really useful... 
    824                CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'time_counter', idmy ), clinfo) 
    825                CALL iom_nf90_check(NF90_PUT_VAR( if90id, idmy, kt                      ), clinfo)    
     841               CALL iom_nf90_check( NF90_INQ_VARID( if90id, 'time_counter', idmy ), clinfo ) 
     842               CALL iom_nf90_check( NF90_PUT_VAR( if90id, idmy, kt                      ), clinfo )    
    826843               ! update the values of the variables dimensions size 
    827                CALL iom_nf90_check(NF90_INQUIRE_DIMENSION( if90id, 1, len = iom_file(kiomid)%dimsz(1,1) ), clinfo) 
    828                CALL iom_nf90_check(NF90_INQUIRE_DIMENSION( if90id, 2, len = iom_file(kiomid)%dimsz(2,1) ), clinfo) 
     844               CALL iom_nf90_check( NF90_INQUIRE_DIMENSION( if90id, 1, len = iom_file(kiomid)%dimsz(1,1) ), clinfo ) 
     845               CALL iom_nf90_check( NF90_INQUIRE_DIMENSION( if90id, 2, len = iom_file(kiomid)%dimsz(2,1) ), clinfo ) 
    829846               iom_file(kiomid)%dimsz(1:2, 2) = iom_file(kiomid)%dimsz(1:2, 1) 
    830                CALL iom_nf90_check(NF90_INQUIRE_DIMENSION( if90id, 3, len = iom_file(kiomid)%dimsz(1,3) ), clinfo) 
     847               CALL iom_nf90_check( NF90_INQUIRE_DIMENSION( if90id, 3, len = iom_file(kiomid)%dimsz(1,3) ), clinfo ) 
    831848               iom_file(kiomid)%dimsz(1  , 4) = 1   ! unlimited dimension 
    832849               IF(lwp) WRITE(numout,*) TRIM(clinfo)//' write dimension variables done' 
     
    837854         ! ============= 
    838855         IF(     PRESENT(pv_r0d) ) THEN 
    839             CALL iom_nf90_check(NF90_PUT_VAR( if90id, idvar, pv_r0d                      ), clinfo) 
     856            CALL iom_nf90_check( NF90_PUT_VAR( if90id, idvar, pv_r0d                    ), clinfo ) 
    840857         ELSEIF( PRESENT(pv_r1d) ) THEN 
    841             CALL iom_nf90_check(NF90_PUT_VAR( if90id, idvar, pv_r1d(                  :) ), clinfo) 
     858            CALL iom_nf90_check( NF90_PUT_VAR( if90id, idvar, pv_r1d(:)                 ), clinfo ) 
    842859         ELSEIF( PRESENT(pv_r2d) ) THEN 
    843             CALL iom_nf90_check(NF90_PUT_VAR( if90id, idvar, pv_r2d(ix1:ix2, iy1:iy2   ) ), clinfo) 
     860            CALL iom_nf90_check( NF90_PUT_VAR( if90id, idvar, pv_r2d(ix1:ix2,iy1:iy2)   ), clinfo ) 
    844861         ELSEIF( PRESENT(pv_r3d) ) THEN 
    845             CALL iom_nf90_check(NF90_PUT_VAR( if90id, idvar, pv_r3d(ix1:ix2, iy1:iy2, :) ), clinfo) 
     862            CALL iom_nf90_check( NF90_PUT_VAR( if90id, idvar, pv_r3d(ix1:ix2,iy1:iy2,:) ), clinfo ) 
    846863         ENDIF 
    847864         ! add 1 to the size of the temporal dimension (not really useful...) 
Note: See TracChangeset for help on using the changeset viewer.