Changeset 12377 for NEMO/trunk/src/ICE/iceistate.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/ICE/iceistate.F90
r11536 r12377 61 61 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: si ! structure of input fields (file informations, fields read) 62 62 ! 63 !! * Substitutions 64 # include "do_loop_substitute.h90" 63 65 !!---------------------------------------------------------------------- 64 66 !! NEMO/ICE 4.0 , NEMO Consortium (2018) … … 68 70 CONTAINS 69 71 70 SUBROUTINE ice_istate( kt )72 SUBROUTINE ice_istate( kt, Kbb, Kmm, Kaa ) 71 73 !!------------------------------------------------------------------- 72 74 !! *** ROUTINE ice_istate *** … … 89 91 !! where there is no ice 90 92 !!-------------------------------------------------------------------- 91 INTEGER, INTENT(in) :: kt ! time step 92 !! 93 INTEGER, INTENT(in) :: kt ! time step 94 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa ! ocean time level indices 95 ! 93 96 INTEGER :: ji, jj, jk, jl ! dummy loop indices 94 97 REAL(wp) :: ztmelts … … 268 271 ! select ice covered grid points 269 272 npti = 0 ; nptidx(:) = 0 270 DO jj = 1, jpj 271 DO ji = 1, jpi 272 IF ( zht_i_ini(ji,jj) > 0._wp ) THEN 273 npti = npti + 1 274 nptidx(npti) = (jj - 1) * jpi + ji 275 ENDIF 276 END DO 277 END DO 273 DO_2D_11_11 274 IF ( zht_i_ini(ji,jj) > 0._wp ) THEN 275 npti = npti + 1 276 nptidx(npti) = (jj - 1) * jpi + ji 277 ENDIF 278 END_2D 278 279 279 280 ! move to 1D arrays: (jpi,jpj) -> (jpi*jpj) … … 320 321 CALL ice_var_salprof ! for sz_i 321 322 DO jl = 1, jpl 322 DO jj = 1, jpj 323 DO ji = 1, jpi 324 v_i (ji,jj,jl) = h_i(ji,jj,jl) * a_i(ji,jj,jl) 325 v_s (ji,jj,jl) = h_s(ji,jj,jl) * a_i(ji,jj,jl) 326 sv_i(ji,jj,jl) = MIN( MAX( rn_simin , s_i(ji,jj,jl) ) , rn_simax ) * v_i(ji,jj,jl) 327 END DO 328 END DO 323 DO_2D_11_11 324 v_i (ji,jj,jl) = h_i(ji,jj,jl) * a_i(ji,jj,jl) 325 v_s (ji,jj,jl) = h_s(ji,jj,jl) * a_i(ji,jj,jl) 326 sv_i(ji,jj,jl) = MIN( MAX( rn_simin , s_i(ji,jj,jl) ) , rn_simax ) * v_i(ji,jj,jl) 327 END_2D 329 328 END DO 330 329 ! 331 330 DO jl = 1, jpl 332 DO jk = 1, nlay_s 333 DO jj = 1, jpj 334 DO ji = 1, jpi 335 t_s(ji,jj,jk,jl) = zts_3d(ji,jj,jl) 336 e_s(ji,jj,jk,jl) = zswitch(ji,jj) * v_s(ji,jj,jl) * r1_nlay_s * & 337 & rhos * ( rcpi * ( rt0 - t_s(ji,jj,jk,jl) ) + rLfus ) 338 END DO 339 END DO 340 END DO 331 DO_3D_11_11( 1, nlay_s ) 332 t_s(ji,jj,jk,jl) = zts_3d(ji,jj,jl) 333 e_s(ji,jj,jk,jl) = zswitch(ji,jj) * v_s(ji,jj,jl) * r1_nlay_s * & 334 & rhos * ( rcpi * ( rt0 - t_s(ji,jj,jk,jl) ) + rLfus ) 335 END_3D 341 336 END DO 342 337 ! 343 338 DO jl = 1, jpl 344 DO jk = 1, nlay_i 345 DO jj = 1, jpj 346 DO ji = 1, jpi 347 t_i (ji,jj,jk,jl) = zti_3d(ji,jj,jl) 348 ztmelts = - rTmlt * sz_i(ji,jj,jk,jl) + rt0 ! melting temperature in K 349 e_i(ji,jj,jk,jl) = zswitch(ji,jj) * v_i(ji,jj,jl) * r1_nlay_i * & 350 & rhoi * ( rcpi * ( ztmelts - t_i(ji,jj,jk,jl) ) + & 351 & rLfus * ( 1._wp - (ztmelts-rt0) / MIN( (t_i(ji,jj,jk,jl)-rt0), -epsi20 ) ) & 352 & - rcp * ( ztmelts - rt0 ) ) 353 END DO 354 END DO 355 END DO 339 DO_3D_11_11( 1, nlay_i ) 340 t_i (ji,jj,jk,jl) = zti_3d(ji,jj,jl) 341 ztmelts = - rTmlt * sz_i(ji,jj,jk,jl) + rt0 ! melting temperature in K 342 e_i(ji,jj,jk,jl) = zswitch(ji,jj) * v_i(ji,jj,jl) * r1_nlay_i * & 343 & rhoi * ( rcpi * ( ztmelts - t_i(ji,jj,jk,jl) ) + & 344 & rLfus * ( 1._wp - (ztmelts-rt0) / MIN( (t_i(ji,jj,jk,jl)-rt0), -epsi20 ) ) & 345 & - rcp * ( ztmelts - rt0 ) ) 346 END_3D 356 347 END DO 357 348 … … 380 371 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 381 372 ! 382 ssh n(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0383 ssh b(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0373 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rau0 374 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rau0 384 375 ! 385 376 IF( .NOT.ln_linssh ) THEN 386 377 ! 387 WHERE( ht_0(:,:) > 0 ) ; z2d(:,:) = 1._wp + ssh n(:,:)*tmask(:,:,1) / ht_0(:,:)378 WHERE( ht_0(:,:) > 0 ) ; z2d(:,:) = 1._wp + ssh(:,:,Kmm)*tmask(:,:,1) / ht_0(:,:) 388 379 ELSEWHERE ; z2d(:,:) = 1._wp ; END WHERE 389 380 ! 390 381 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 391 e3t _n(:,:,jk) = e3t_0(:,:,jk) * z2d(:,:)392 e3t _b(:,:,jk) = e3t_n(:,:,jk)393 e3t _a(:,:,jk) = e3t_n(:,:,jk)382 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * z2d(:,:) 383 e3t(:,:,jk,Kbb) = e3t(:,:,jk,Kmm) 384 e3t(:,:,jk,Kaa) = e3t(:,:,jk,Kmm) 394 385 END DO 395 386 ! … … 398 389 ! Horizontal scale factor interpolations 399 390 ! -------------------------------------- 400 CALL dom_vvl_interpol( e3t _b(:,:,:), e3u_b(:,:,:), 'U' )401 CALL dom_vvl_interpol( e3t _b(:,:,:), e3v_b(:,:,:), 'V' )402 CALL dom_vvl_interpol( e3t _n(:,:,:), e3u_n(:,:,:), 'U' )403 CALL dom_vvl_interpol( e3t _n(:,:,:), e3v_n(:,:,:), 'V' )404 CALL dom_vvl_interpol( e3u _n(:,:,:), e3f_n(:,:,:), 'F' )391 CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3u(:,:,:,Kbb), 'U' ) 392 CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3v(:,:,:,Kbb), 'V' ) 393 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3u(:,:,:,Kmm), 'U' ) 394 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3v(:,:,:,Kmm), 'V' ) 395 CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F' ) 405 396 ! Vertical scale factor interpolations 406 397 ! ------------------------------------ 407 CALL dom_vvl_interpol( e3t _n(:,:,:), e3w_n (:,:,:), 'W' )408 CALL dom_vvl_interpol( e3u _n(:,:,:), e3uw_n(:,:,:), 'UW' )409 CALL dom_vvl_interpol( e3v _n(:,:,:), e3vw_n(:,:,:), 'VW' )410 CALL dom_vvl_interpol( e3u _b(:,:,:), e3uw_b(:,:,:), 'UW' )411 CALL dom_vvl_interpol( e3v _b(:,:,:), e3vw_b(:,:,:), 'VW' )398 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w (:,:,:,Kmm), 'W' ) 399 CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3uw(:,:,:,Kmm), 'UW' ) 400 CALL dom_vvl_interpol( e3v(:,:,:,Kmm), e3vw(:,:,:,Kmm), 'VW' ) 401 CALL dom_vvl_interpol( e3u(:,:,:,Kbb), e3uw(:,:,:,Kbb), 'UW' ) 402 CALL dom_vvl_interpol( e3v(:,:,:,Kbb), e3vw(:,:,:,Kbb), 'VW' ) 412 403 ! t- and w- points depth 413 404 ! ---------------------- 414 405 !!gm not sure of that.... 415 gdept _n(:,:,1) = 0.5_wp * e3w_n(:,:,1)416 gdepw _n(:,:,1) = 0.0_wp417 gde3w _n(:,:,1) = gdept_n(:,:,1) - sshn(:,:)406 gdept(:,:,1,Kmm) = 0.5_wp * e3w(:,:,1,Kmm) 407 gdepw(:,:,1,Kmm) = 0.0_wp 408 gde3w(:,:,1) = gdept(:,:,1,Kmm) - ssh(:,:,Kmm) 418 409 DO jk = 2, jpk 419 gdept _n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk)420 gdepw _n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1)421 gde3w _n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:)410 gdept(:,:,jk,Kmm) = gdept(:,:,jk-1,Kmm) + e3w(:,:,jk ,Kmm) 411 gdepw(:,:,jk,Kmm) = gdepw(:,:,jk-1,Kmm) + e3t(:,:,jk-1,Kmm) 412 gde3w(:,:,jk) = gdept(:,:,jk ,Kmm) - ssh (:,:,Kmm) 422 413 END DO 423 414 ENDIF … … 474 465 !!----------------------------------------------------------------------------- 475 466 ! 476 REWIND( numnam_ice_ref ) ! Namelist namini in reference namelist : Ice initial state477 467 READ ( numnam_ice_ref, namini, IOSTAT = ios, ERR = 901) 478 468 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namini in reference namelist' ) 479 REWIND( numnam_ice_cfg ) ! Namelist namini in configuration namelist : Ice initial state480 469 READ ( numnam_ice_cfg, namini, IOSTAT = ios, ERR = 902 ) 481 470 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namini in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.