- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- 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 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/DOM/domain.F90
r12178 r12928 30 30 USE trc_oce ! shared ocean & passive tracers variab 31 31 USE phycst ! physical constants 32 USE closea ! closed seas33 32 USE domhgr ! domain: set the horizontal mesh 34 33 USE domzgr ! domain: set the vertical mesh … … 38 37 USE c1d ! 1D configuration 39 38 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 41 41 ! 42 42 USE in_out_manager ! I/O manager … … 58 58 CONTAINS 59 59 60 SUBROUTINE dom_init( cdstr)60 SUBROUTINE dom_init( Kbb, Kmm, Kaa, cdstr ) 61 61 !!---------------------------------------------------------------------- 62 62 !! *** ROUTINE dom_init *** … … 73 73 !! - 1D configuration, move Coriolis, u and v at T-point 74 74 !!---------------------------------------------------------------------- 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 ! 75 78 INTEGER :: ji, jj, jk, ik ! dummy loop indices 76 79 INTEGER :: iconf = 0 ! local integers 77 80 CHARACTER (len=64) :: cform = "(A12, 3(A13, I7))" 78 CHARACTER (len=*), INTENT(IN) :: cdstr ! model: NEMO or SAS. Determines core restart variables79 81 INTEGER , DIMENSION(jpi,jpj) :: ik_top , ik_bot ! top and bottom ocean level 80 82 REAL(wp), DIMENSION(jpi,jpj) :: z1_hu_0, z1_hv_0 … … 134 136 ENDIF 135 137 ! 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 148 145 ! 149 146 ht_0(:,:) = 0._wp ! Reference ocean thickness … … 161 158 ! 162 159 ! before ! now ! after ! 163 gdept _b = gdept_0 ; gdept_n = gdept_0 ! ---! depth of grid-points164 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 ! --- ! 166 163 ! 167 e3t _b = e3t_0 ; e3t_n = e3t_0 ; e3t_a= e3t_0 ! scale factors168 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 ! 174 171 ! 175 172 z1_hu_0(:,:) = ssumask(:,:) / ( hu_0(:,:) + 1._wp - ssumask(:,:) ) ! _i mask due to ISF … … 177 174 ! 178 175 ! before ! now ! after ! 179 ht _n= ht_0 ! ! water column thickness180 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 thickness183 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 ! 184 181 ! 185 182 ! 186 183 ELSE != time varying : initialize before/now/after variables 187 184 ! 188 IF( .NOT.l_offline ) CALL dom_vvl_init 185 IF( .NOT.l_offline ) CALL dom_vvl_init( Kbb, Kmm, Kaa ) 189 186 ! 190 187 ENDIF … … 192 189 IF( lk_c1d ) CALL cor_c1d ! 1D configuration: Coriolis set at T-point 193 190 ! 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 199 195 ! 200 196 IF(lwp) THEN … … 291 287 & nn_no , cn_exp , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl , & 292 288 & 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_wxios295 NAMELIST/namdom/ ln_linssh, rn_ isfhmin, rn_rdt, rn_atfp, ln_crs, ln_meshmask289 & 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 296 292 #if defined key_netcdf4 297 293 NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip … … 306 302 ! 307 303 ! 308 REWIND( numnam_ref ) ! Namelist namrun in reference namelist : Parameters of the run309 304 READ ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 310 305 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namrun in reference namelist' ) 311 REWIND( numnam_cfg ) ! Namelist namrun in configuration namelist : Parameters of the run312 306 READ ( numnam_cfg, namrun, IOSTAT = ios, ERR = 902 ) 313 307 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namrun in configuration namelist' ) … … 323 317 WRITE(numout,*) ' restart output directory cn_ocerst_outdir= ', TRIM( cn_ocerst_outdir ) 324 318 WRITE(numout,*) ' restart logical ln_rstart = ', ln_rstart 325 WRITE(numout,*) ' start with forward time step nn_euler = ', nn_euler319 WRITE(numout,*) ' start with forward time step ln_1st_euler = ', ln_1st_euler 326 320 WRITE(numout,*) ' control of time step nn_rstctl = ', nn_rstctl 327 321 WRITE(numout,*) ' number of the first time step nn_it000 = ', nn_it000 … … 343 337 WRITE(numout,*) ' overwrite an existing file ln_clobber = ', ln_clobber 344 338 WRITE(numout,*) ' NetCDF chunksize (bytes) nn_chunksz = ', nn_chunksz 345 WRITE(numout,*) ' IS coupling at the restart step ln_iscpl = ', ln_iscpl346 339 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 347 340 WRITE(numout,*) ' READ restart for a single file using XIOS ln_xios_read =', ln_xios_read … … 360 353 nleapy = nn_leapy 361 354 ninist = nn_istate 362 neuler = nn_euler363 IF( neuler == 1.AND. .NOT. ln_rstart ) THEN355 l_1st_euler = ln_1st_euler 356 IF( .NOT. l_1st_euler .AND. .NOT. ln_rstart ) THEN 364 357 IF(lwp) WRITE(numout,*) 365 358 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 = 0359 IF(lwp) WRITE(numout,*)' an Euler initial time step is used : l_1st_euler is forced to .true. ' 360 l_1st_euler = .true. 368 361 ENDIF 369 362 ! ! control of output frequency … … 404 397 #endif 405 398 406 REWIND( numnam_ref ) ! Namelist namdom in reference namelist : space & time domain (bathymetry, mesh, timestep)407 399 READ ( numnam_ref, namdom, IOSTAT = ios, ERR = 903) 408 400 903 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)410 401 READ ( numnam_cfg, namdom, IOSTAT = ios, ERR = 904 ) 411 402 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'namdom in configuration namelist' ) … … 417 408 WRITE(numout,*) ' linear free surface (=T) ln_linssh = ', ln_linssh 418 409 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 421 411 WRITE(numout,*) ' asselin time filter parameter rn_atfp = ', rn_atfp 422 412 WRITE(numout,*) ' online coarsening of dynamical fields ln_crs = ', ln_crs 423 413 ENDIF 424 414 ! 425 ! ! conversion DOCTOR names into model names (this should disappear soon)426 atfp = rn_atfp427 r dt = rn_rdt415 !! 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 428 418 429 419 IF( TRIM(Agrif_CFixed()) == '0' ) THEN … … 436 426 #if defined key_netcdf4 437 427 ! ! NetCDF 4 case ("key_netcdf4" defined) 438 REWIND( numnam_ref ) ! Namelist namnc4 in reference namelist : NETCDF439 428 READ ( numnam_ref, namnc4, IOSTAT = ios, ERR = 907) 440 429 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namnc4 in reference namelist' ) 441 REWIND( numnam_cfg ) ! Namelist namnc4 in configuration namelist : NETCDF442 430 READ ( numnam_cfg, namnc4, IOSTAT = ios, ERR = 908 ) 443 431 908 IF( ios > 0 ) CALL ctl_nam ( ios , 'namnc4 in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.