@@ -55,14 +55,15 @@ Subroutine cvmix_kpp_driver()
5555 real (cvmix_r8 ), dimension (:,:), allocatable , target :: hor_vel
5656 real (cvmix_r8 ), dimension (2 ) :: ref_vel
5757 real (cvmix_r8 ), dimension (4 ) :: shape_coeffs
58- integer :: fid, kt, kw, nlev1, nlev3, nlev4, max_nlev4, OBL_levid4, nlev5
58+ integer :: i, fid, kt, kw, nlev1, nlev3, nlev4, max_nlev4, OBL_levid4, nlev5
5959 real (cvmix_r8 ) :: hmix1, hmix5, ri_crit, layer_thick1, layer_thick4, &
6060 layer_thick5, OBL_depth4, OBL_depth5, N, Nsqr
6161 real (cvmix_r8 ) :: kOBL_depth, Bslope, Vslope
6262 real (cvmix_r8 ) :: sigma6, OBL_depth6, surf_buoy_force6, surf_fric_vel6, &
6363 vonkarman6, tao, rho0, grav, alpha, Qnonpen, Cp0, &
6464 w_m6, w_s6, wm6_true, ws6_true
6565 character (len= cvmix_strlen) :: interp_type_t1, interp_type_t4, interp_type_t5
66+ character (len= cvmix_strlen) :: filename
6667 ! True => run specified test
6768 logical :: ltest1, ltest2, ltest3, ltest4, ltest5, ltest6
6869 logical :: lnoDGat1 ! True => G'(1) = 0 (in test 4)
@@ -264,13 +265,17 @@ Subroutine cvmix_kpp_driver()
264265 deallocate (zeta, w_m, w_s)
265266 endif ! ltest3
266267
268+ ! Test 4: Compute boundary layer diffusivity
269+ ! 1) Boundary layer between top interface and cell center
270+ ! 2) Boundary layer between cell center and bottom interface
271+ ! 3,4) Same as above, without enhanced diffusivity
267272 if (ltest4) then
268273 print * , " "
269274 print * , " Test 4: Computing Diffusivity in boundary layer"
270275 print * , " (2 cases - boundary layer above and below cell center)"
276+ print * , " (Both cases run with and without enhanced diffusivity)"
271277 print * , " ----------"
272278
273- call cvmix_init_kpp(MatchTechnique= ' MatchGradient' )
274279 nlev4 = 5
275280 max_nlev4 = 10
276281 if (OBL_levid4.gt. nlev4) &
@@ -305,88 +310,106 @@ Subroutine cvmix_kpp_driver()
305310 call cvmix_put(CVmix_vars4, ' surf_buoy' , real (100 , cvmix_r8 ))
306311 call cvmix_put(CVmix_vars4, ' Coriolis' , 1e-4_cvmix_r8 )
307312
308- ! Test 4a: Boundary layer above center of level containing it
309- Tdiff = cvmix_zero
310- Tdiff(1 ) = cvmix_one
311- Tdiff(2 ) = real (10 ,cvmix_r8 )
312- Tdiff(3 ) = real (5 ,cvmix_r8 )
313- Mdiff = Tdiff
314- Sdiff = Tdiff
315-
316- OBL_depth4 = abs (zt(OBL_levid4))- layer_thick4/ real (4 ,cvmix_r8 )
317- call cvmix_put(CVmix_vars4, ' OBL_depth' , OBL_depth4)
318- call cvmix_put(CVmix_vars4, ' kOBL_depth' , &
319- cvmix_kpp_compute_kOBL_depth(zw_iface, zt, OBL_depth4))
320-
321- print * , " OBL_depth = " , CVmix_vars4% BoundaryLayerDepth
322- print * , " kOBL_depth = " , CVmix_vars4% kOBL_depth
323-
324- call cvmix_init_kpp(ri_crit= ri_crit, vonkarman= 0.4_cvmix_r8 , &
325- interp_type2= interp_type_t4, lnoDGat1= lnoDGat1)
326- call cvmix_coeffs_kpp(CVmix_vars4)
327-
328- print * , " Height and Diffusivity throughout column: "
329- do kw= 1 ,nlev4+1
330- write (* ," (1X, F6.2, 1X, F8.5)" ) zw_iface(kw), Mdiff(kw)
331- end do
332- print * , " "
333-
313+ do i= 1 ,2
314+ ! Test 4a/c: Boundary layer above center of level containing it
315+ Tdiff = cvmix_zero
316+ Tdiff(1 ) = cvmix_one
317+ Tdiff(2 ) = real (10 ,cvmix_r8 )
318+ Tdiff(3 ) = real (5 ,cvmix_r8 )
319+ Mdiff = Tdiff
320+ Sdiff = Tdiff
321+
322+ OBL_depth4 = abs (zt(OBL_levid4))- layer_thick4/ real (4 ,cvmix_r8 )
323+ call cvmix_put(CVmix_vars4, ' OBL_depth' , OBL_depth4)
324+ call cvmix_put(CVmix_vars4, ' kOBL_depth' , &
325+ cvmix_kpp_compute_kOBL_depth(zw_iface, zt, OBL_depth4))
326+
327+ print * , " OBL_depth = " , CVmix_vars4% BoundaryLayerDepth
328+ print * , " kOBL_depth = " , CVmix_vars4% kOBL_depth
329+
330+ call cvmix_init_kpp(ri_crit= ri_crit, vonkarman= 0.4_cvmix_r8 , &
331+ interp_type2= interp_type_t4, lnoDGat1= lnoDGat1, &
332+ MatchTechnique= ' MatchGradient' , &
333+ lenhanced_diff= (i.eq. 1 ))
334+ call cvmix_coeffs_kpp(CVmix_vars4)
335+
336+ print * , " Height and Diffusivity throughout column: "
337+ do kw= 1 ,nlev4+1
338+ write (* ," (1X, F6.2, 1X, F8.5)" ) zw_iface(kw), Mdiff(kw)
339+ end do
340+ print * , " "
341+
342+ if (i.eq. 1 ) then
343+ filename= " test4a"
344+ else
345+ filename= " test4c"
346+ endif
334347#ifdef _NETCDF
335- call cvmix_io_open(fid, " test4a .nc" , " nc" )
348+ call cvmix_io_open(fid, trim (filename) // " .nc" , " nc" )
336349#else
337- call cvmix_io_open(fid, " test4a .out" , " ascii" )
350+ call cvmix_io_open(fid, trim (filename) // " .out" , " ascii" )
338351#endif
339352
340- call cvmix_output_write(fid, CVmix_vars4, (/ " zt " , " zw " , " Mdiff" , &
341- " Tdiff" , " Sdiff" / ))
353+ call cvmix_output_write(fid, CVmix_vars4, (/ " zt " , " zw " , " Mdiff" , &
354+ " Tdiff" , " Sdiff" / ))
342355#ifdef _NETCDF
343- call cvmix_output_write_att(fid, " interp_type2" , interp_type_t4)
344- call cvmix_output_write_att(fid, " OBL_depth" , &
345- CVmix_vars4% BoundaryLayerDepth)
356+ call cvmix_output_write_att(fid, " interp_type2" , interp_type_t4)
357+ call cvmix_output_write_att(fid, " OBL_depth" , &
358+ CVmix_vars4% BoundaryLayerDepth)
346359#endif
347360
348- call cvmix_io_close(fid)
349-
350- ! Test 4b: Boundary layer below center of level containing it
351- Tdiff = cvmix_zero
352- Tdiff(1 ) = cvmix_one
353- Tdiff(2 ) = real (10 ,cvmix_r8 )
354- Tdiff(3 ) = real (5 ,cvmix_r8 )
355- Mdiff = Tdiff
356- Sdiff = Tdiff
357-
358- OBL_depth4 = abs (zt(OBL_levid4))+ layer_thick4/ real (4 ,cvmix_r8 )
359- call cvmix_put(CVmix_vars4, ' OBL_depth' , OBL_depth4)
360- call cvmix_put(CVmix_vars4, ' kOBL_depth' , &
361- cvmix_kpp_compute_kOBL_depth(zw_iface, zt, OBL_depth4))
362-
363- print * , " OBL_depth = " , CVmix_vars4% BoundaryLayerDepth
364- print * , " kOBL_depth = " , CVmix_vars4% kOBL_depth
365-
366- call cvmix_init_kpp(ri_crit= ri_crit, vonkarman= 0.4_cvmix_r8 , &
367- interp_type2= interp_type_t4, lnoDGat1= lnoDGat1)
368- call cvmix_coeffs_kpp(CVmix_vars4)
369-
370- print * , " Height and Diffusivity throughout column: "
371- do kw= 1 ,nlev4+1
372- write (* ," (1X, F6.2, 1X, F8.5)" ) zw_iface(kw), Mdiff(kw)
373- end do
374-
361+ call cvmix_io_close(fid)
362+
363+ ! Test 4b/d: Boundary layer below center of level containing it
364+ Tdiff = cvmix_zero
365+ Tdiff(1 ) = cvmix_one
366+ Tdiff(2 ) = real (10 ,cvmix_r8 )
367+ Tdiff(3 ) = real (5 ,cvmix_r8 )
368+ Mdiff = Tdiff
369+ Sdiff = Tdiff
370+
371+ OBL_depth4 = abs (zt(OBL_levid4))+ layer_thick4/ real (4 ,cvmix_r8 )
372+ call cvmix_put(CVmix_vars4, ' OBL_depth' , OBL_depth4)
373+ call cvmix_put(CVmix_vars4, ' kOBL_depth' , &
374+ cvmix_kpp_compute_kOBL_depth(zw_iface, zt, OBL_depth4))
375+
376+ print * , " OBL_depth = " , CVmix_vars4% BoundaryLayerDepth
377+ print * , " kOBL_depth = " , CVmix_vars4% kOBL_depth
378+
379+ call cvmix_init_kpp(ri_crit= ri_crit, vonkarman= 0.4_cvmix_r8 , &
380+ interp_type2= interp_type_t4, lnoDGat1= lnoDGat1, &
381+ MatchTechnique= ' MatchGradient' , &
382+ lenhanced_diff= (i.eq. 1 ))
383+ call cvmix_coeffs_kpp(CVmix_vars4)
384+
385+ print * , " Height and Diffusivity throughout column: "
386+ do kw= 1 ,nlev4+1
387+ write (* ," (1X, F6.2, 1X, F8.5)" ) zw_iface(kw), Mdiff(kw)
388+ end do
389+
390+ if (i.eq. 1 ) then
391+ print * , " "
392+ filename= " test4b"
393+ else
394+ filename= " test4d"
395+ endif
375396#ifdef _NETCDF
376- call cvmix_io_open(fid, " test4b .nc" , " nc" )
397+ call cvmix_io_open(fid, trim (filename) // " .nc" , " nc" )
377398#else
378- call cvmix_io_open(fid, " test4b .out" , " ascii" )
399+ call cvmix_io_open(fid, trim (filename) // " .out" , " ascii" )
379400#endif
380401
381- call cvmix_output_write(fid, CVmix_vars4, (/ " zt " , " zw " , " Mdiff" , &
382- " Tdiff" , " Sdiff" / ))
402+ call cvmix_output_write(fid, CVmix_vars4, (/ " zt " , " zw " , " Mdiff" , &
403+ " Tdiff" , " Sdiff" / ))
383404#ifdef _NETCDF
384- call cvmix_output_write_att(fid, " interp_type2" , interp_type_t4)
385- call cvmix_output_write_att(fid, " OBL_depth" , &
386- CVmix_vars4% BoundaryLayerDepth)
405+ call cvmix_output_write_att(fid, " interp_type2" , interp_type_t4)
406+ call cvmix_output_write_att(fid, " OBL_depth" , &
407+ CVmix_vars4% BoundaryLayerDepth)
387408#endif
388409
389- call cvmix_io_close(fid)
410+ call cvmix_io_close(fid)
411+
412+ end do
390413
391414 deallocate (zt, zw_iface)
392415 deallocate (Mdiff, Tdiff, Sdiff)
0 commit comments