- Timestamp:
- 2017-12-15T18:00:09+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfdrg.F90
r9019 r9089 29 29 USE lib_mpp ! distributed memory computing 30 30 USE prtctl ! Print control 31 USE timing ! Timing32 31 33 32 IMPLICIT NONE … … 78 77 CONTAINS 79 78 80 SUBROUTINE zdf_drg( kt, k_mk, pCdmin, pCdmax, pz0, pke0, pCd0, pCdU ) 79 SUBROUTINE zdf_drg( kt, k_mk, pCdmin, pCdmax, pz0, pke0, pCd0, & ! <<== in 80 & pCdU ) ! ==>> out : bottom drag [m/s] 81 81 !!---------------------------------------------------------------------- 82 82 !! *** ROUTINE zdf_drg *** … … 108 108 REAL(wp):: zzz, zut, zvt, zcd ! local scalars 109 109 !!---------------------------------------------------------------------- 110 !111 IF( ln_timing ) CALL timing_start('zdf_drg')112 !113 110 ! 114 111 IF( l_log_not_linssh ) THEN !== "log layer" ==! compute Cd and -Cd*|U| … … 123 120 zcd = ( vkarmn / LOG( zzz / pz0 ) )**2 124 121 zcd = pCd0(ji,jj) * MIN( MAX( pCdmin , zcd ) , pCdmax ) ! here pCd0 = mask*boost 125 pCdU(ji,jj) = - zcd * SQRT( 0.25 * ( zut*z vt + zvt*zvt ) + pke0 )122 pCdU(ji,jj) = - zcd * SQRT( 0.25 * ( zut*zut + zvt*zvt ) + pke0 ) 126 123 END DO 127 124 END DO … … 133 130 zvt = vn(ji,jj,imk) + vn(ji,jj-1,imk) 134 131 ! ! here pCd0 = mask*boost * drag 135 pCdU(ji,jj) = - pCd0(ji,jj) * SQRT( 0.25 * ( zut*z vt + zvt*zvt ) + pke0 )132 pCdU(ji,jj) = - pCd0(ji,jj) * SQRT( 0.25 * ( zut*zut + zvt*zvt ) + pke0 ) 136 133 END DO 137 134 END DO … … 139 136 ! 140 137 IF(ln_ctl) CALL prt_ctl( tab2d_1=pCdU, clinfo1=' Cd*U ') 141 !142 IF( ln_timing ) CALL timing_stop('zdf_drg')143 138 ! 144 139 END SUBROUTINE zdf_drg … … 200 195 ! !== TOP drag setting ==! (applied at the top of ocean cavities) 201 196 ! 202 IF ( ln_isfcav ) THEN! Ocean cavities: top friction setting197 IF( ln_isfcav ) THEN ! Ocean cavities: top friction setting 203 198 ALLOCATE( rCd0_top(jpi,jpj), rCdU_top(jpi,jpj) ) 204 199 CALL drg_init( 'TOP ' , mikt , & ! <== in 205 & r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_ bot, rCdU_bot) ! ==> out200 & r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top ) ! ==> out 206 201 ENDIF 207 202 ! … … 223 218 REAL(wp) , INTENT( out) :: pke0 ! background KE [m2/s2] 224 219 REAL(wp), DIMENSION(:,:), INTENT( out) :: pCd0 ! masked precomputed part of the non-linear drag coefficient 225 REAL(wp), DIMENSION(:,:), INTENT( out) :: pCdU ! linear drag*|U| at t-points [m/s]220 REAL(wp), DIMENSION(:,:), INTENT( out) :: pCdU ! minus linear drag*|U| at t-points [m/s] 226 221 !! 227 222 CHARACTER(len=40) :: cl_namdrg, cl_file, cl_varname, cl_namref, cl_namcfg ! local names … … 318 313 l_zdfdrg = .FALSE. ! no time variation of the drag: set it one for all 319 314 ! 320 pCdU(:,:) = 0._wp ! pCd0 never used 315 pCdU(:,:) = 0._wp 316 pCd0(:,:) = 0._wp 321 317 ! 322 318 CASE( np_lin ) !== linear friction ==! (pCdU = Cd0 * Uc0) … … 326 322 l_zdfdrg = .FALSE. ! no time variation of the Cd*|U| : set it one for all 327 323 ! 328 pCdU(:,:) = - rn_Cd0 * rn_Uc0 * zmsk_boost(:,:) ! pCd0 never used: remain undefined 324 pCd0(:,:) = rn_Cd0 * zmsk_boost(:,:) !* constant in time drag coefficient (= mask (and boost) Cd0) 325 pCdU(:,:) = - pCd0(:,:) * rn_Uc0 ! using a constant velocity 329 326 ! 330 327 CASE( np_non_lin ) !== non-linear friction ==! (pCd0 = Cd0 ) … … 337 334 ! 338 335 pCd0(:,:) = rn_Cd0 * zmsk_boost(:,:) !* constant in time proportionality coefficient (= mask (and boost) Cd0) 336 pCdU(:,:) = 0._wp ! 339 337 ! 340 338 CASE( np_loglayer ) !== logarithmic layer formulation of friction ==! (CdU = (vkarman log(z/z0))^2 |U| ) … … 349 347 ! 350 348 IF( ln_linssh ) THEN !* pCd0 = (v log(z/z0))^2 as velocity points have a fixed z position 351 IF(lwp) WRITE(numout,*)352 IF(lwp) WRITE(numout,*) ' N.B. linear free surface case, Cd0 computed one for all'349 IF(lwp) WRITE(numout,*) 350 IF(lwp) WRITE(numout,*) ' N.B. linear free surface case, Cd0 computed one for all' 353 351 ! 354 352 l_log_not_linssh = .FALSE. !- don't update Cd at each time step … … 369 367 pCd0(:,:) = zmsk_boost(:,:) 370 368 ENDIF 369 pCdU(:,:) = 0._wp ! initialisation to zero (will be updated at each time step) 371 370 ! 372 371 CASE DEFAULT
Note: See TracChangeset
for help on using the changeset viewer.