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 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/DOM/domain.F90 – NEMO

Ignore:
Timestamp:
2020-05-14T21:46:00+02:00 (4 years ago)
Author:
smueller
Message:

Synchronizing with /NEMO/trunk@12925 (ticket #2170)

Location:
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser

    • Property svn:externals
      •  

        old new  
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@HEAD         sette 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/DOM/domain.F90

    r12178 r12928  
    3030   USE trc_oce        ! shared ocean & passive tracers variab 
    3131   USE phycst         ! physical constants 
    32    USE closea         ! closed seas 
    3332   USE domhgr         ! domain: set the horizontal mesh 
    3433   USE domzgr         ! domain: set the vertical mesh 
     
    3837   USE c1d            ! 1D configuration 
    3938   USE dyncor_c1d     ! 1D configuration: Coriolis term    (cor_c1d routine) 
    40    USE wet_dry,  ONLY : ll_wd 
     39   USE wet_dry, ONLY : ll_wd 
     40   USE closea , ONLY : dom_clo ! closed seas 
    4141   ! 
    4242   USE in_out_manager ! I/O manager 
     
    5858CONTAINS 
    5959 
    60    SUBROUTINE dom_init(cdstr) 
     60   SUBROUTINE dom_init( Kbb, Kmm, Kaa, cdstr ) 
    6161      !!---------------------------------------------------------------------- 
    6262      !!                  ***  ROUTINE dom_init  *** 
     
    7373      !!              - 1D configuration, move Coriolis, u and v at T-point 
    7474      !!---------------------------------------------------------------------- 
     75      INTEGER          , INTENT(in) :: Kbb, Kmm, Kaa          ! ocean time level indices 
     76      CHARACTER (len=*), INTENT(in) :: cdstr                  ! model: NEMO or SAS. Determines core restart variables 
     77      ! 
    7578      INTEGER ::   ji, jj, jk, ik   ! dummy loop indices 
    7679      INTEGER ::   iconf = 0    ! local integers 
    7780      CHARACTER (len=64) ::   cform = "(A12, 3(A13, I7))"  
    78       CHARACTER (len=*), INTENT(IN) :: cdstr                  ! model: NEMO or SAS. Determines core restart variables 
    7981      INTEGER , DIMENSION(jpi,jpj) ::   ik_top , ik_bot       ! top and bottom ocean level 
    8082      REAL(wp), DIMENSION(jpi,jpj) ::   z1_hu_0, z1_hv_0 
     
    134136      ENDIF 
    135137      ! 
    136       CALL dom_hgr                     ! Horizontal mesh 
    137       CALL dom_zgr( ik_top, ik_bot )   ! Vertical mesh and bathymetry 
    138       CALL dom_msk( ik_top, ik_bot )   ! Masks 
    139       IF( ln_closea )   CALL dom_clo   ! ln_closea=T : closed seas included in the simulation 
    140                                        ! Read in masks to define closed seas and lakes  
    141       ! 
    142       DO jj = 1, jpj                   ! depth of the iceshelves 
    143          DO ji = 1, jpi 
    144             ik = mikt(ji,jj) 
    145             risfdep(ji,jj) = gdepw_0(ji,jj,ik) 
    146          END DO 
    147       END DO 
     138      CALL dom_hgr                      ! Horizontal mesh 
     139 
     140      IF( ln_closea ) CALL dom_clo      ! Read in masks to define closed seas and lakes 
     141 
     142      CALL dom_zgr( ik_top, ik_bot )    ! Vertical mesh and bathymetry 
     143 
     144      CALL dom_msk( ik_top, ik_bot )    ! Masks 
    148145      ! 
    149146      ht_0(:,:) = 0._wp  ! Reference ocean thickness 
     
    161158      ! 
    162159         !       before        !          now          !       after         ! 
    163             gdept_b = gdept_0  ;   gdept_n = gdept_0   !        ---          ! depth of grid-points 
    164             gdepw_b = gdepw_0  ;   gdepw_n = gdepw_0   !        ---          ! 
    165                                    gde3w_n = gde3w_0   !        ---          ! 
     160            gdept(:,:,:,Kbb) = gdept_0  ;   gdept(:,:,:,Kmm) = gdept_0   ;   gdept(:,:,:,Kaa) = gdept_0   ! depth of grid-points 
     161            gdepw(:,:,:,Kbb) = gdepw_0  ;   gdepw(:,:,:,Kmm) = gdepw_0   ;   gdepw(:,:,:,Kaa) = gdepw_0   ! 
     162                                   gde3w = gde3w_0   !        ---          ! 
    166163         !                                                                   
    167               e3t_b =   e3t_0  ;     e3t_n =   e3t_0   ;   e3t_a =  e3t_0    ! scale factors 
    168               e3u_b =   e3u_0  ;     e3u_n =   e3u_0   ;   e3u_a =  e3u_0    ! 
    169               e3v_b =   e3v_0  ;     e3v_n =   e3v_0   ;   e3v_a =  e3v_0    ! 
    170                                      e3f_n =   e3f_0   !        ---          ! 
    171               e3w_b =   e3w_0  ;     e3w_n =   e3w_0   !        ---          ! 
    172              e3uw_b =  e3uw_0  ;    e3uw_n =  e3uw_0   !        ---          ! 
    173              e3vw_b =  e3vw_0  ;    e3vw_n =  e3vw_0   !        ---          ! 
     164              e3t(:,:,:,Kbb) =   e3t_0  ;     e3t(:,:,:,Kmm) =   e3t_0   ;   e3t(:,:,:,Kaa) =  e3t_0    ! scale factors 
     165              e3u(:,:,:,Kbb) =   e3u_0  ;     e3u(:,:,:,Kmm) =   e3u_0   ;   e3u(:,:,:,Kaa) =  e3u_0    ! 
     166              e3v(:,:,:,Kbb) =   e3v_0  ;     e3v(:,:,:,Kmm) =   e3v_0   ;   e3v(:,:,:,Kaa) =  e3v_0    ! 
     167                                     e3f =   e3f_0   !        ---          ! 
     168              e3w(:,:,:,Kbb) =   e3w_0  ;     e3w(:,:,:,Kmm) =   e3w_0   ;    e3w(:,:,:,Kaa) =   e3w_0   !  
     169             e3uw(:,:,:,Kbb) =  e3uw_0  ;    e3uw(:,:,:,Kmm) =  e3uw_0   ;   e3uw(:,:,:,Kaa) =  e3uw_0   !   
     170             e3vw(:,:,:,Kbb) =  e3vw_0  ;    e3vw(:,:,:,Kmm) =  e3vw_0   ;   e3vw(:,:,:,Kaa) =  e3vw_0   ! 
    174171         ! 
    175172         z1_hu_0(:,:) = ssumask(:,:) / ( hu_0(:,:) + 1._wp - ssumask(:,:) )     ! _i mask due to ISF 
     
    177174         ! 
    178175         !        before       !          now          !       after         ! 
    179                                       ht_n =    ht_0   !                     ! water column thickness 
    180                hu_b =    hu_0  ;      hu_n =    hu_0   ;    hu_a =    hu_0   !  
    181                hv_b =    hv_0  ;      hv_n =    hv_0   ;    hv_a =    hv_0   ! 
    182             r1_hu_b = z1_hu_0  ;   r1_hu_n = z1_hu_0   ; r1_hu_a = z1_hu_0   ! inverse of water column thickness 
    183             r1_hv_b = z1_hv_0  ;   r1_hv_n = z1_hv_0   ; r1_hv_a = z1_hv_0   ! 
     176                                      ht =    ht_0   !                     ! water column thickness 
     177               hu(:,:,Kbb) =    hu_0  ;      hu(:,:,Kmm) =    hu_0   ;    hu(:,:,Kaa) =    hu_0   !  
     178               hv(:,:,Kbb) =    hv_0  ;      hv(:,:,Kmm) =    hv_0   ;    hv(:,:,Kaa) =    hv_0   ! 
     179            r1_hu(:,:,Kbb) = z1_hu_0  ;   r1_hu(:,:,Kmm) = z1_hu_0   ; r1_hu(:,:,Kaa) = z1_hu_0   ! inverse of water column thickness 
     180            r1_hv(:,:,Kbb) = z1_hv_0  ;   r1_hv(:,:,Kmm) = z1_hv_0   ; r1_hv(:,:,Kaa) = z1_hv_0   ! 
    184181         ! 
    185182         ! 
    186183      ELSE                       != time varying : initialize before/now/after variables 
    187184         ! 
    188          IF( .NOT.l_offline )  CALL dom_vvl_init  
     185         IF( .NOT.l_offline )  CALL dom_vvl_init( Kbb, Kmm, Kaa ) 
    189186         ! 
    190187      ENDIF 
     
    192189      IF( lk_c1d         )   CALL cor_c1d       ! 1D configuration: Coriolis set at T-point 
    193190      ! 
    194       IF( ln_meshmask .AND. .NOT.ln_iscpl )                        CALL dom_wri     ! Create a domain file 
    195       IF( ln_meshmask .AND.      ln_iscpl .AND. .NOT.ln_rstart )   CALL dom_wri     ! Create a domain file 
    196       IF(                                       .NOT.ln_rstart )   CALL dom_ctl     ! Domain control 
    197       ! 
    198       IF( ln_write_cfg )   CALL cfg_write         ! create the configuration file 
     191      IF( ln_meshmask    )   CALL dom_wri       ! Create a domain file 
     192      IF( .NOT.ln_rstart )   CALL dom_ctl       ! Domain control 
     193      ! 
     194      IF( ln_write_cfg   )   CALL cfg_write     ! create the configuration file 
    199195      ! 
    200196      IF(lwp) THEN 
     
    291287         &             nn_no   , cn_exp   , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl ,     & 
    292288         &             nn_it000, nn_itend , nn_date0    , nn_time0     , nn_leapy  , nn_istate ,     & 
    293          &             nn_stock, nn_write , ln_mskland  , ln_clobber   , nn_chunksz, nn_euler  ,    & 
    294          &             ln_cfmeta, ln_iscpl, ln_xios_read, nn_wxios 
    295       NAMELIST/namdom/ ln_linssh, rn_isfhmin, rn_rdt, rn_atfp, ln_crs, ln_meshmask 
     289         &             nn_stock, nn_write , ln_mskland  , ln_clobber   , nn_chunksz, ln_1st_euler  , & 
     290         &             ln_cfmeta, ln_xios_read, nn_wxios 
     291      NAMELIST/namdom/ ln_linssh, rn_Dt, rn_atfp, ln_crs, ln_meshmask 
    296292#if defined key_netcdf4 
    297293      NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip 
     
    306302      ! 
    307303      ! 
    308       REWIND( numnam_ref )              ! Namelist namrun in reference namelist : Parameters of the run 
    309304      READ  ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 
    310305901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namrun in reference namelist' ) 
    311       REWIND( numnam_cfg )              ! Namelist namrun in configuration namelist : Parameters of the run 
    312306      READ  ( numnam_cfg, namrun, IOSTAT = ios, ERR = 902 ) 
    313307902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namrun in configuration namelist' ) 
     
    323317         WRITE(numout,*) '      restart output directory        cn_ocerst_outdir= ', TRIM( cn_ocerst_outdir ) 
    324318         WRITE(numout,*) '      restart logical                 ln_rstart       = ', ln_rstart 
    325          WRITE(numout,*) '      start with forward time step    nn_euler        = ', nn_euler 
     319         WRITE(numout,*) '      start with forward time step    ln_1st_euler    = ', ln_1st_euler 
    326320         WRITE(numout,*) '      control of time step            nn_rstctl       = ', nn_rstctl 
    327321         WRITE(numout,*) '      number of the first time step   nn_it000        = ', nn_it000 
     
    343337         WRITE(numout,*) '      overwrite an existing file      ln_clobber      = ', ln_clobber 
    344338         WRITE(numout,*) '      NetCDF chunksize (bytes)        nn_chunksz      = ', nn_chunksz 
    345          WRITE(numout,*) '      IS coupling at the restart step ln_iscpl        = ', ln_iscpl 
    346339         IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    347340            WRITE(numout,*) '      READ restart for a single file using XIOS ln_xios_read =', ln_xios_read 
     
    360353      nleapy = nn_leapy 
    361354      ninist = nn_istate 
    362       neuler = nn_euler 
    363       IF( neuler == 1 .AND. .NOT. ln_rstart ) THEN 
     355      l_1st_euler = ln_1st_euler 
     356      IF( .NOT. l_1st_euler .AND. .NOT. ln_rstart ) THEN 
    364357         IF(lwp) WRITE(numout,*)   
    365358         IF(lwp) WRITE(numout,*)'   ==>>>   Start from rest (ln_rstart=F)' 
    366          IF(lwp) WRITE(numout,*)'           an Euler initial time step is used : nn_euler is forced to 0 '    
    367          neuler = 0 
     359         IF(lwp) WRITE(numout,*)'           an Euler initial time step is used : l_1st_euler is forced to .true. '    
     360         l_1st_euler = .true. 
    368361      ENDIF 
    369362      !                             ! control of output frequency 
     
    404397#endif 
    405398 
    406       REWIND( numnam_ref )              ! Namelist namdom in reference namelist : space & time domain (bathymetry, mesh, timestep) 
    407399      READ  ( numnam_ref, namdom, IOSTAT = ios, ERR = 903) 
    408400903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namdom in reference namelist' ) 
    409       REWIND( numnam_cfg )              ! Namelist namdom in configuration namelist : space & time domain (bathymetry, mesh, timestep) 
    410401      READ  ( numnam_cfg, namdom, IOSTAT = ios, ERR = 904 ) 
    411402904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namdom in configuration namelist' ) 
     
    417408         WRITE(numout,*) '      linear free surface (=T)                ln_linssh   = ', ln_linssh 
    418409         WRITE(numout,*) '      create mesh/mask file                   ln_meshmask = ', ln_meshmask 
    419          WRITE(numout,*) '      treshold to open the isf cavity         rn_isfhmin  = ', rn_isfhmin, ' [m]' 
    420          WRITE(numout,*) '      ocean time step                         rn_rdt      = ', rn_rdt 
     410         WRITE(numout,*) '      ocean time step                         rn_Dt       = ', rn_Dt 
    421411         WRITE(numout,*) '      asselin time filter parameter           rn_atfp     = ', rn_atfp 
    422412         WRITE(numout,*) '      online coarsening of dynamical fields   ln_crs      = ', ln_crs 
    423413      ENDIF 
    424414      ! 
    425       !          ! conversion DOCTOR names into model names (this should disappear soon) 
    426       atfp = rn_atfp 
    427       rdt  = rn_rdt 
     415      !! Initialise current model timestep rDt = 2*rn_Dt if MLF or rDt = rn_Dt if RK3 
     416      rDt  = 2._wp * rn_Dt 
     417      r1_Dt = 1._wp / rDt 
    428418 
    429419      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     
    436426#if defined key_netcdf4 
    437427      !                             ! NetCDF 4 case   ("key_netcdf4" defined) 
    438       REWIND( numnam_ref )              ! Namelist namnc4 in reference namelist : NETCDF 
    439428      READ  ( numnam_ref, namnc4, IOSTAT = ios, ERR = 907) 
    440429907   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namnc4 in reference namelist' ) 
    441       REWIND( numnam_cfg )              ! Namelist namnc4 in configuration namelist : NETCDF 
    442430      READ  ( numnam_cfg, namnc4, IOSTAT = ios, ERR = 908 ) 
    443431908   IF( ios >  0 )   CALL ctl_nam ( ios , 'namnc4 in configuration namelist' ) 
Note: See TracChangeset for help on using the changeset viewer.