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

Ignore:
Timestamp:
2017-11-15T12:39:36+01:00 (6 years ago)
Author:
andmirek
Message:

#1976 improvements in LIM3 restart. Working version

File:
1 edited

Legend:

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

    r7646 r8708  
    5353CONTAINS 
    5454 
    55    SUBROUTINE iom_nf90_open( cdname, kiomid, ldwrt, ldok, kdompar ) 
     55   SUBROUTINE iom_nf90_open( cdname, kiomid, ldwrt, ldok, kdompar, ndlev ) 
    5656      !!--------------------------------------------------------------------- 
    5757      !!                   ***  SUBROUTINE  iom_open  *** 
     
    6464      LOGICAL                , INTENT(in   )           ::   ldok        ! check the existence  
    6565      INTEGER, DIMENSION(2,5), INTENT(in   ), OPTIONAL ::   kdompar     ! domain parameters:  
     66      INTEGER                , INTENT(in   ), OPTIONAL ::   ndlev 
    6667 
    6768      CHARACTER(LEN=256) ::   clinfo           ! info character 
     
    7677      INTEGER            ::   ihdf5            ! local variable for retrieval of value for NF90_HDF5 
    7778      LOGICAL            ::   llclobber        ! local definition of ln_clobber 
     79      INTEGER            ::   ilevels           ! vertical levels 
    7880      !--------------------------------------------------------------------- 
    7981 
    8082      clinfo = '                    iom_nf90_open ~~~  ' 
    8183      istop = nstop   ! store the actual value of nstop 
     84      ilevels = jpk 
     85      IF(PRESENT(ndlev)) ilevels = ndlev      ! number of vertical levels 
     86                                             ! by default jpk, but can be 
     87                                             ! different for LIM3 
    8288      IF( nn_chunksz > 0 ) THEN   ;   ichunk = nn_chunksz 
    8389      ELSE                        ;   ichunk = NF90_SIZEHINT_DEFAULT 
     
    126132            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'x', kdompar(1,1)  , idmy ), clinfo) 
    127133            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) 
     134            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'z', ilevels       , idmy ), clinfo) 
    129135            CALL iom_nf90_check(NF90_DEF_DIM( if90id, 't', NF90_UNLIMITED, idmy ), clinfo) 
    130136            ! global attributes 
     
    156162         iom_file(kiomid)%nvars  = 0 
    157163         iom_file(kiomid)%irec   = -1   ! useless for NetCDF files, used to know if the file is in define mode  
     164         iom_file(kiomid)%nlev   = ilevels 
    158165         CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 
    159166         IF ( iom_file(kiomid)%iduld .GE. 0 ) THEN 
     
    693700      LOGICAL               :: lchunk               ! logical switch to activate chunking and compression 
    694701                                                    ! when appropriate (currently chunking is applied to 4d fields only) 
     702      INTEGER               :: i                    ! local variable 
    695703      !--------------------------------------------------------------------- 
    696704      ! 
     
    706714         ENDIF 
    707715         ! define the dimension variables if it is not already done 
    708          cltmp = (/ 'nav_lon     ', 'nav_lat     ', 'nav_lev     ', 'time_counter' /) 
     716         IF(iom_file(kiomid)%nlev == jpk ) THEN 
     717          cltmp = (/ 'nav_lon     ', 'nav_lat     ', 'nav_lev     ', 'time_counter' /) 
     718         ELSE 
     719          cltmp = (/ 'nav_lon     ', 'nav_lat     ', 'numcat     ', 'time_counter' /) 
     720         ENDIF 
    709721         CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(1)), NF90_FLOAT , (/ 1, 2 /), iom_file(kiomid)%nvid(1) ), clinfo) 
    710722         CALL iom_nf90_check(NF90_DEF_VAR( if90id, TRIM(cltmp(2)), NF90_FLOAT , (/ 1, 2 /), iom_file(kiomid)%nvid(2) ), clinfo) 
     
    819831               CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'nav_lat'     , idmy ), clinfo) 
    820832               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) 
     833               IF(iom_file(kiomid)%nlev == jpk ) THEN  
     834                  !NEMO 
     835                  CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'nav_lev'     , idmy ), clinfo) 
     836                  CALL iom_nf90_check(NF90_PUT_VAR( if90id, idmy, gdept_1d                ), clinfo) 
     837               ELSE 
     838                  CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'numcat'     , idmy ), clinfo) 
     839                  CALL iom_nf90_check(NF90_PUT_VAR( if90id, idmy, (/ (i, i = 1,iom_file(kiomid)%nlev) /)), clinfo) 
     840               ENDIF 
    823841               ! +++ WRONG VALUE: to be improved but not really useful... 
    824842               CALL iom_nf90_check(NF90_INQ_VARID( if90id, 'time_counter', idmy ), clinfo) 
Note: See TracChangeset for help on using the changeset viewer.