Changeset 9939 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY
- Timestamp:
- 2018-07-13T09:28:50+02:00 (6 years ago)
- Location:
- NEMO/branches/2018/dev_r9838_ENHANCE04_RK3
- Files:
-
- 4 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdyice.F90
r9657 r9939 124 124 125 125 ! Then, a) transfer the snow excess into the ice (different from icethd_dh) 126 zdh = MAX( 0._wp, ( rhos n * h_s(ji,jj,jl) + ( rhoic - rau0 ) * h_i(ji,jj,jl) ) * r1_rau0 )126 zdh = MAX( 0._wp, ( rhos * h_s(ji,jj,jl) + ( rhoi - rho0 ) * h_i(ji,jj,jl) ) * r1_rho0 ) 127 127 ! Or, b) transfer all the snow into ice (if incoming ice is likely to melt as it comes into a warmer environment) 128 !zdh = MAX( 0._wp, h_s(ji,jj,jl) * rhos n / rhoic)128 !zdh = MAX( 0._wp, h_s(ji,jj,jl) * rhos / rhoi ) 129 129 130 130 ! recompute h_i, h_s 131 131 h_i(ji,jj,jl) = MIN( hi_max(jl), h_i(ji,jj,jl) + zdh ) 132 h_s(ji,jj,jl) = MAX( 0._wp, h_s(ji,jj,jl) - zdh * rhoi c / rhosn)133 134 END DO132 h_s(ji,jj,jl) = MAX( 0._wp, h_s(ji,jj,jl) - zdh * rhoi / rhos ) 133 134 END DO 135 135 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) 136 136 CALL lbc_bdy_lnk( h_i(:,:,jl), 'T', 1., ib_bdy ) 137 137 CALL lbc_bdy_lnk( h_s(:,:,jl), 'T', 1., ib_bdy ) 138 END DO138 END DO 139 139 ! retrieve at_i 140 140 at_i(:,:) = 0._wp … … 212 212 DO jk = 1, nlay_s 213 213 ! Snow energy of melting 214 e_s(ji,jj,jk,jl) = rswitch * rhos n * ( cpic * ( rt0 - t_s(ji,jj,jk,jl) ) + lfus )214 e_s(ji,jj,jk,jl) = rswitch * rhos * ( rcpi * ( rt0 - t_s(ji,jj,jk,jl) ) + rLfus ) 215 215 ! Multiply by volume, so that heat content in J/m2 216 216 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * v_s(ji,jj,jl) * r1_nlay_s … … 219 219 ztmelts = - tmut * sz_i(ji,jj,jk,jl) + rt0 !Melting temperature in K 220 220 ! heat content per unit volume 221 e_i(ji,jj,jk,jl) = rswitch * rhoi c* &222 ( cpic* ( ztmelts - t_i(ji,jj,jk,jl) ) &223 + lfus* ( 1.0 - (ztmelts-rt0) / MIN((t_i(ji,jj,jk,jl)-rt0),-epsi20) ) &224 - rcp* ( ztmelts - rt0 ) )221 e_i(ji,jj,jk,jl) = rswitch * rhoi * & 222 ( rcpi * ( ztmelts - t_i(ji,jj,jk,jl) ) & 223 + rLfus * ( 1.0 - (ztmelts-rt0) / MIN((t_i(ji,jj,jk,jl)-rt0),-epsi20) ) & 224 - rcp * ( ztmelts - rt0 ) ) 225 225 ! Mutliply by ice volume, and divide by number of layers to get heat content in J/m2 226 226 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * a_i(ji,jj,jl) * h_i(ji,jj,jl) * r1_nlay_i -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdylib.F90
r9598 r9939 4 4 !! Unstructured Open Boundary Cond. : Library module of generic boundary algorithms. 5 5 !!====================================================================== 6 !! History : 3.6 ! 2013 (D. Storkey) original code7 !! 4.0 ! 2014 (T. Lovato) Generalize OBC structure6 !! History : 3.6 ! 2013 (D. Storkey) original code 7 !! 4.0 ! 2014 (T. Lovato) Generalize OBC structure 8 8 !!---------------------------------------------------------------------- 9 9 10 !!---------------------------------------------------------------------- 10 !! bdy_orlanski_2d 11 !! bdy_orlanski_3d 11 !! bdy_frs : Apply the Flow Relaxation Scheme (tracers) 12 !! bdy_spe : Apply a specified value (tracers) 13 !! bdy_orl : Apply Orlanski radiation (tracers) 14 !! bdy_orlanski_2d: 2D - - - 15 !! bdy_orlanski_3d: 3D - - - 16 !! bdy_nmn : Duplicate the value at open boundaries (zero gradient) 12 17 !!---------------------------------------------------------------------- 13 18 USE oce ! ocean dynamics and tracers … … 22 27 PRIVATE 23 28 24 PUBLIC bdy_frs, bdy_spe, bdy_nmn, bdy_orl 25 PUBLIC bdy_orlanski_2d 26 PUBLIC bdy_orlanski_3d 29 PUBLIC bdy_frs, bdy_spe, bdy_nmn 30 PUBLIC bdy_orl, bdy_orlanski_2d, bdy_orlanski_3d 27 31 28 32 !!---------------------------------------------------------------------- … … 230 234 ! Note no rdt factor in expression for zdt because it cancels in the expressions for 231 235 ! zrx and zry. 232 zdt = phia(iibm1,ijbm1) - phib(iibm1,ijbm1)236 zdt = phia(iibm1,ijbm1) - phib(iibm1,ijbm1) 233 237 zdx = ( ( phia(iibm1,ijbm1) - phia(iibm2,ijbm2) ) / zex2 ) * zmask_x 234 238 zdy_1 = ( ( phib(iibm1 ,ijbm1 ) - phib(iibm1jm1,ijbm1jm1) ) / zey1 ) * zmask_y1 … … 247 251 zout = sign( 1., zrx ) 248 252 zout = 0.5*( zout + abs(zout) ) 249 zwgt = 2.*rdt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) )253 zwgt = rDt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 250 254 ! only apply radiation on outflow points 251 255 if( ll_npo ) then !! NPO version !! … … 385 389 ! Centred derivative is calculated as average of "left" and "right" derivatives for 386 390 ! this reason. 387 zdt = phia(iibm1,ijbm1,jk) - phib(iibm1,ijbm1,jk)391 zdt = phia(iibm1,ijbm1,jk) - phib(iibm1,ijbm1,jk) 388 392 zdx = ( ( phia(iibm1,ijbm1,jk) - phia(iibm2,ijbm2,jk) ) / zex2 ) * zmask_x 389 393 zdy_1 = ( ( phib(iibm1 ,ijbm1 ,jk) - phib(iibm1jm1,ijbm1jm1,jk) ) / zey1 ) * zmask_y1 … … 402 406 !!$ zrx = min(zrx,2.0_wp) 403 407 zout = sign( 1., zrx ) 404 zout = 0.5 *( zout + abs(zout) )405 zwgt = 2.*rdt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) )408 zout = 0.5 * ( zout + abs(zout) ) 409 zwgt = rDt * ( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 406 410 ! only apply radiation on outflow points 407 411 if( ll_npo ) then !! NPO version !! … … 426 430 ! 427 431 END SUBROUTINE bdy_orlanski_3d 432 428 433 429 434 SUBROUTINE bdy_nmn( idx, igrd, phia ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdytides.F90
r9598 r9939 295 295 !!---------------------------------------------------------------------- 296 296 ! 297 ilen0(1) = SIZE( td%ssh(:,1,1))298 ilen0(2) = SIZE( td%u(:,1,1))299 ilen0(3) = SIZE( td%v(:,1,1))297 ilen0(1) = SIZE( td%ssh(:,1,1) ) 298 ilen0(2) = SIZE( td%u (:,1,1) ) 299 ilen0(3) = SIZE( td%v (:,1,1) ) 300 300 301 301 zflag=1 302 302 IF ( PRESENT(jit) ) THEN 303 IF ( jit /= 1 ) zflag=0303 IF ( jit /= 1 ) zflag=0 304 304 ENDIF 305 305 306 IF ( ( nsec_day == NINT(0.5_wp * rdt) .OR. kt==nit000) .AND. zflag==1 ) THEN306 IF ( ( nsec_day == NINT( 0.5_wp * rn_Dt ) .OR. kt == nit000 ) .AND. zflag==1 ) THEN 307 307 ! 308 kt_tide = kt - (nsec_day - 0.5_wp * r dt)/rdt308 kt_tide = kt - (nsec_day - 0.5_wp * rn_Dt) / rn_Dt 309 309 ! 310 310 IF(lwp) THEN 311 311 WRITE(numout,*) 312 WRITE(numout,*) 'bdytide_update : (re)Initialization of the tidal bdy forcing at kt=', kt312 WRITE(numout,*) 'bdytide_update : (re)Initialization of the tidal bdy forcing at kt=', kt 313 313 WRITE(numout,*) '~~~~~~~~~~~~~~ ' 314 314 ENDIF … … 325 325 326 326 IF( PRESENT(jit) ) THEN 327 z_arg = ((kt-kt_tide) * r dt + (jit+0.5_wp*(time_add-1)) * rdt / REAL(nn_baro,wp) )327 z_arg = ((kt-kt_tide) * rn_Dt + (jit+0.5_wp*(time_add-1)) * rn_Dt / REAL(nn_e,wp) ) 328 328 ELSE 329 z_arg = ((kt-kt_tide)+time_add) * r dt329 z_arg = ((kt-kt_tide)+time_add) * rn_Dt 330 330 ENDIF 331 331 332 332 ! Linear ramp on tidal component at open boundaries 333 333 zramp = 1._wp 334 IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg + (kt_tide-nit000)*r dt)/(rdttideramp*rday),0._wp),1._wp)334 IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg + (kt_tide-nit000)*rn_Dt)/(rn_ramp*rday),0._wp),1._wp) 335 335 336 336 DO itide = 1, nb_harmo … … 392 392 ! Absolute time from model initialization: 393 393 IF( PRESENT(kit) ) THEN 394 z_arg = ( kt + (kit+time_add-1) / REAL(nn_ baro,wp) ) * rdt394 z_arg = ( kt + (kit+time_add-1) / REAL(nn_e,wp) ) * rn_Dt 395 395 ELSE 396 z_arg = ( kt + time_add ) * r dt396 z_arg = ( kt + time_add ) * rn_Dt 397 397 ENDIF 398 398 399 399 ! Linear ramp on tidal component at open boundaries 400 400 zramp = 1. 401 IF ( ln_tide_ramp) zramp = MIN(MAX( (z_arg - nit000*rdt)/(rdttideramp*rday),0.),1.)401 IF ( ln_tide_ramp ) zramp = MIN( MAX( 0. , (z_arg - nit000*rn_Dt)/(rn_ramp*rday) ) , 1. ) 402 402 403 403 DO ib_bdy = 1,nb_bdy … … 414 414 ! We refresh nodal factors every day below 415 415 ! This should be done somewhere else 416 IF ( ( nsec_day == NINT(0.5_wp * r dt) .OR. kt==nit000 ) .AND. lk_first_btstp ) THEN417 ! 418 kt_tide = kt - (nsec_day - 0.5_wp * r dt)/rdt416 IF ( ( nsec_day == NINT(0.5_wp * rn_Dt) .OR. kt==nit000 ) .AND. lk_first_btstp ) THEN 417 ! 418 kt_tide = kt - (nsec_day - 0.5_wp * rn_Dt) / rn_Dt 419 419 ! 420 420 IF(lwp) THEN … … 428 428 ! 429 429 ENDIF 430 zoff = -kt_tide * r dt! time offset relative to nodal factor computation time430 zoff = -kt_tide * rn_Dt ! time offset relative to nodal factor computation time 431 431 ! 432 432 ! If time splitting, initialize arrays from slow varying open boundary data: -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdyvol.F90
r9598 r9939 84 84 ! ----------------------------------------------------------------------- 85 85 !!gm replace these lines : 86 z_cflxemp = SUM ( ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / r au086 z_cflxemp = SUM ( ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / rho0 87 87 IF( lk_mpp ) CALL mpp_sum( z_cflxemp ) ! sum over the global domain 88 88 !!gm by : 89 !!gm z_cflxemp = glob_sum( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / r au090 !!gm 89 !!gm z_cflxemp = glob_sum( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / rho0 90 !!gm ??? 91 91 92 92 ! Transport through the unstructured open boundary
Note: See TracChangeset
for help on using the changeset viewer.