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 544 for trunk/NEMO/OPA_SRC/restart.F90 – NEMO

Ignore:
Timestamp:
2006-10-20T16:23:21+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_078:RB: finalization of IOM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/restart.F90

    r521 r544  
    2525   USE iom             ! I/O module 
    2626   USE trdmld_oce      ! ! ocean active mixed layer tracers trends variables 
     27   USE ini1d           ! re-initialization of u-v mask for the 1D configuration 
     28   USE zpshde          ! partial step: hor. derivative (zps_hde routine) 
     29   USE eosbn2          ! equation of state            (eos bn2 routine) 
    2730 
    2831   IMPLICIT NONE 
     
    8285         clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_restart" 
    8386         IF(lwp) WRITE(numout,*) '             open ocean restart.output NetCDF file: '//clname 
    84          CALL iom_open( clname, numrow, ldwrt = .TRUE. ) 
     87         CALL iom_open( clname, numrow, ldwrt = .TRUE., kiolib = jprstdimg ) 
    8588         IF( lk_trdmld )   THEN 
    8689            clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_restart_mld" 
    8790            IF(lwp) WRITE(numout,*) '             open ocean restart_mld NetCDF file: '//clname 
    88             CALL iom_open( clname, nummldw, ldwrt = .TRUE. ) 
     91            CALL iom_open( clname, nummldw, ldwrt = .TRUE., kiolib = jprstdimg ) 
    8992         ENDIF 
    9093         lrst_oce = .TRUE. 
     
    9396   END SUBROUTINE rst_opn 
    9497 
    95  
    96 #if  ( defined key_mpp_mpi   ||   defined key_mpp_shmem ) && defined key_dimgout 
    97    !!---------------------------------------------------------------------- 
    98    !!   'key_mpp_mpi'     OR      MPI massively parallel processing library 
    99    !!   'key_mpp_shmem'         SHMEM massively parallel processing library 
    100    !!                     AND 
    101    !!   'key_dimgout'           
    102    !!---------------------------------------------------------------------- 
    103    !!                 direct acces file one per processor 
    104    !!          (merging/splitting is done off-line, eventually) 
    105    !!----------------------------------------------------------------------- 
    106 #  include "restart_dimg.h90" 
    107  
    108 #else 
    109    !!---------------------------------------------------------------------- 
    110    !!   Default option                                          NetCDF file 
    111    !!---------------------------------------------------------------------- 
    11298 
    11399   SUBROUTINE rst_write( kt ) 
     
    128114         WRITE(numout,*) '~~~~~~~~~' 
    129115      ENDIF 
    130        
     116 
    131117      ! calendar control 
    132118      CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp) )   ! time-step  
    133119      CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) )   ! date 
    134       CALL iom_rstput( kt, nitrst, numrow, 'adatrj' ,       adatrj      )   ! number of elapsed days since 
     120      CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj            )   ! number of elapsed days since 
    135121      !                                                                     ! the begining of the run [s] 
     122      CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt               )   ! dynamics time step 
     123      CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1)         )   ! surface tracer time step 
    136124 
    137125      ! prognostic variables 
     
    148136      CALL iom_rstput( kt, nitrst, numrow, 'rotn'   , rotn    ) 
    149137      CALL iom_rstput( kt, nitrst, numrow, 'hdivn'  , hdivn   ) 
    150  
    151 # if defined key_ice_lim         
     138       
     139#if defined key_ice_lim         
    152140      CALL iom_rstput( kt, nitrst, numrow, 'nfice'  , REAL( nfice, wp) )   !  ice computation frequency 
    153141      CALL iom_rstput( kt, nitrst, numrow, 'sst_io' , sst_io  ) 
     
    155143      CALL iom_rstput( kt, nitrst, numrow, 'u_io'   , u_io    ) 
    156144      CALL iom_rstput( kt, nitrst, numrow, 'v_io'   , v_io    ) 
    157 #  if defined key_coupled 
     145# if defined key_coupled 
    158146      CALL iom_rstput( kt, nitrst, numrow, 'alb_ice', alb_ice ) 
    159 #  endif 
    160147# endif 
    161 # if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 
     148#endif 
     149#if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 
    162150      CALL iom_rstput( kt, nitrst, numrow, 'nfbulk' , REAL( nfbulk, wp) )   !  bulk computation frequency 
    163151      CALL iom_rstput( kt, nitrst, numrow, 'gsst'   , gsst    ) 
    164 # endif 
     152#endif 
     153 
     154      IF( nn_dynhpg_rst == 1 ) THEN 
     155         CALL iom_rstput( kt, nitrst, numrow, 'rhd' , rhd  ) 
     156         CALL iom_rstput( kt, nitrst, numrow, 'rhop', rhop ) 
     157         IF( ln_zps ) THEN 
     158            CALL iom_rstput( kt, nitrst, numrow, 'gtu' , gtu ) 
     159            CALL iom_rstput( kt, nitrst, numrow, 'gsu' , gsu ) 
     160            CALL iom_rstput( kt, nitrst, numrow, 'gru' , gru ) 
     161            CALL iom_rstput( kt, nitrst, numrow, 'gtv' , gtv ) 
     162            CALL iom_rstput( kt, nitrst, numrow, 'gsv' , gsv ) 
     163            CALL iom_rstput( kt, nitrst, numrow, 'grv' , grv ) 
     164         ENDIF 
     165      ENDIF 
    165166 
    166167      IF( kt == nitrst ) THEN 
     
    201202      !!                    has been stored in the restart file. 
    202203      !!---------------------------------------------------------------------- 
    203       REAL(wp) ::   zcoef, zkt, zndastp, znfice, znfbulk 
    204 # if defined key_ice_lim 
     204      REAL(wp) ::   zcoef, zkt, zrdt, zrdttra1, zndastp, znfice, znfbulk 
     205#if defined key_ice_lim 
    205206      INTEGER  ::   ji, jj 
    206 # endif 
     207#endif 
    207208      !!---------------------------------------------------------------------- 
    208209 
     
    214215         WRITE(numout,*) ' *** Info on the present job : ' 
    215216         WRITE(numout,*) '   time-step           : ', nit000 
    216 !!$         WRITE(numout,*) '   solver type         : ', nsolv 
    217 !!$         IF( lk_zdftke ) THEN 
    218 !!$            WRITE(numout,*) '   tke option          : 1 ' 
    219 !!$         ELSE 
    220 !!$            WRITE(numout,*) '   tke option          : 0 ' 
    221 !!$         ENDIF 
    222217         WRITE(numout,*) '   date ndastp         : ', ndastp 
    223218         WRITE(numout,*) 
     
    237232      ENDIF 
    238233 
    239       CALL iom_open( 'restart', numror )                       ! Open 
     234      CALL iom_open( 'restart', numror, kiolib = jprstdimg )   ! Open 
    240235 
    241236      ! Calendar informations 
    242       CALL iom_get( numror, 'kt'    , zkt     )   ! time-step  
    243       CALL iom_get( numror, 'ndastp', zndastp )   ! date 
    244       ! Additional contol prints 
     237      CALL iom_get( numror, 'kt'     , zkt      )   ! time-step  
     238      CALL iom_get( numror, 'ndastp' , zndastp  )   ! date 
    245239      IF(lwp) THEN 
    246240         WRITE(numout,*) 
    247241         WRITE(numout,*) ' *** Info on the restart file read : ' 
    248242         WRITE(numout,*) '   time-step           : ', NINT( zkt ) 
    249 !!$         WRITE(numout,*) '   solver type         : ', +++ 
    250 !!$         WRITE(numout,*) '   tke option          : ', +++ 
    251243         WRITE(numout,*) '   date ndastp         : ', NINT( zndastp ) 
    252244         WRITE(numout,*) 
     
    259251      adatrj0 = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 
    260252      IF ( nrstdt == 2 ) THEN 
    261 !                            by default ndatsp has been set to ndate0 in dom_nam 
    262 !                            ndate0 has been read in the namelist (standard OPA 8) 
    263 !                            here when nrstdt=2 we keep the  final date of previous run 
     253         ! by default ndatsp has been set to ndate0 in dom_nam 
     254         ! ndate0 has been read in the namelist (standard OPA 8) 
     255         ! here when nrstdt=2 we keep the  final date of previous run 
    264256         ndastp = NINT( zndastp ) 
    265         CALL iom_get( numror, 'adatrj', adatrj )   ! number of elapsed days since the begining of last run 
    266       ENDIF 
    267  
     257         CALL iom_get( numror, 'adatrj', adatrj )   ! number of elapsed days since the begining of last run 
     258      ENDIF 
     259      ! Check dynamics and tracer time-step consistency and force Euler restart if changed 
     260      IF( iom_varid( numror, 'rdt' ) > 0 )   THEN 
     261         CALL iom_get( numror, 'rdt', zrdt ) 
     262         IF( zrdt /= rdt )   neuler = 0 
     263      ENDIF 
     264      IF( iom_varid( numror, 'rdttra1' ) > 0 )   THEN 
     265         CALL iom_get( numror, 'rdttra1', zrdttra1 ) 
     266         IF( zrdttra1 /= rdttra(1) )   neuler = 0 
     267      ENDIF 
     268      ! 
    268269      !                                                       ! Read prognostic variables 
    269270      CALL iom_get( numror, jpdom_local, 'ub'   , ub    )        ! before i-component velocity 
     
    292293      !!sm: TO BE MOVED IN NEW SURFACE MODULE... 
    293294 
    294 # if defined key_ice_lim 
     295#if defined key_ice_lim 
    295296      ! Louvain La Neuve Sea Ice Model 
    296297      IF( iom_varid( numror, 'nfice' ) > 0 ) then  
     
    300301         CALL iom_get( numror, jpdom_local, 'u_io'   , u_io    ) 
    301302         CALL iom_get( numror, jpdom_local, 'v_io'   , v_io    ) 
    302 #if defined key_coupled 
     303# if defined key_coupled 
    303304         CALL iom_get( numror, jpdom_local, 'alb_ice', alb_ice ) 
    304 #endif 
     305# endif 
    305306         IF( znfice /= REAL( nfice, wp ) ) THEN      ! if nfice changed between 2 runs 
    306307            zcoef = REAL( nfice-1, wp ) / znfice 
     
    324325            END DO 
    325326         END DO 
    326 #    if defined key_coupled 
     327# if defined key_coupled 
    327328         alb_ice(:,:) = 0.8 * tmask(:,:,1) 
    328 #    endif 
    329       ENDIF 
    330329# endif 
    331 # if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 
     330      ENDIF 
     331#endif 
     332#if defined key_flx_bulk_monthly || defined key_flx_bulk_daily 
    332333      ! Louvain La Neuve Sea Ice Model 
    333334      IF( iom_varid( numror, 'nfbulk' ) > 0 ) THEN  
     
    344345         gsst(:,:) = REAL( nfbulk - 1, wp )*( tn(:,:,1) + rt0 ) 
    345346      ENDIF 
    346 # endif 
     347#endif 
    347348       
    348349      !!sm: end of TO BE MOVED IN NEW SURFACE MODULE... 
     350 
     351      IF( iom_varid( numror, 'rhd' ) > 0 ) THEN 
     352         CALL iom_get( numror, jpdom_local, 'rhd' , rhd  ) 
     353         CALL iom_get( numror, jpdom_local, 'rhop', rhop ) 
     354      ELSE 
     355         CALL eos( tb, sb, rhd, rhop )        ! before potential and in situ densities 
     356      ENDIF 
     357      IF( ln_zps .AND. .NOT. lk_cfg_1d ) THEN 
     358         IF( iom_varid( numror, 'gtu' ) > 0 ) THEN 
     359            CALL iom_get( numror, jpdom_local, 'gtu' , gtu ) 
     360            CALL iom_get( numror, jpdom_local, 'gsu' , gsu ) 
     361            CALL iom_get( numror, jpdom_local, 'gru' , gru ) 
     362            CALL iom_get( numror, jpdom_local, 'gtv' , gtv ) 
     363            CALL iom_get( numror, jpdom_local, 'gsv' , gsv ) 
     364            CALL iom_get( numror, jpdom_local, 'grv' , grv ) 
     365         ELSE 
     366            CALL zps_hde( nit000, tb , sb , rhd,   &  ! Partial steps: before Horizontal DErivative 
     367               &                  gtu, gsu, gru,   &  ! of t, s, rd at the bottom ocean level 
     368               &                  gtv, gsv, grv ) 
     369         ENDIF 
     370      ENDIF 
    349371      ! 
    350372   END SUBROUTINE rst_read 
    351373 
    352 #endif 
    353374 
    354375   !!===================================================================== 
Note: See TracChangeset for help on using the changeset viewer.