-
Notifications
You must be signed in to change notification settings - Fork 64
Description
When using Redi parameterisation (diffusion along isopycnals) with the Redi diffusion tensor ...
| 1 0 S_x |
| 0 1 S_y | *K_redi
| S_x S_y S_x^2+S_y^2 |
... where K_redi is the isoneutral diffusivity, S_x= [drho/dx]/[-drho/dz] and S_y=[drho/dy]/[-drho/dz] are the isoneutral slopes, with S_x*S_y <<1. Than in case of tapered isoneutral slope (S_x=S_y=0). Than in the Redi diffusion tensor the horizontal components remains ...
| 1 0 0 |
| 0 1 0 | *K_redi
| 0 0 0 |
... which means than in the tapered areas, Redi does additional full horizontal diffusion using the Redi diffusivtiy K_redi. especially when the K_redi is large this could lead to some problems in FESOM2 since the model has already inherited numerical diffusion from the 3rd order advection scheme.
For that reason i made some test where i not just taper the isoneutral slope, i also taper the Redi diffusivity using for both the same scaling function...
! in FESOM1.4 ODM95=True hyperbolic tangent slope tapering tapering
! Danabasoglu and McWilliams, 1995, sensitivity of the global ocean circulation
! to parameterizations of mesoscale tracer transport,
c1 = 1.0_WP
if (scaling_ODM95) then
do nz = ul1, nl1
c1(nz)=0.5_WP*(1.0_WP + tanh((ODM95_Scr - neutral_slope(3,nz,n))/ODM95_Sd))
if ((bvfreq(nz,n) <= 0.0_WP) .or. (bvfreq(nz+1,n) <= 0.0_WP)) c1(nz)=0.0_WP
enddo
end if
...
if (Redi_Ktaper) then
do nz = ul1, nl1
fer_tapfac(nz, n) = c1(nz) * c2(nz)
slope_tapered(:, nz, n)=neutral_slope(:, nz, n) * sqrt(c1(nz) * c2(nz))
end do
else
do nz = ul1, nl1
slope_tapered(:, nz, n)=neutral_slope(:, nz, n) * c1(nz) * c2(nz)
end do
end if
...
! aplly tapering to Ki, not just to the tapered neutral slope
if (Redi_Ktaper) then
! do tapering of redi diffusion coefficient instead of tapering neutral
! slope
do nz=nzmin, nzmax-1
Ki(nz, n)=Ki(nz, n)*sqrt(fer_tapfac(nz, n)) + Redi_Kmin*abs(sqrt(fer_tapfac(nz, n))-1)
end do
end if
.... i tapered the isoneutral slope Sx and Sy as well as the K_redi with sqrt(fer_tapfac).
Beyond that i also tried what happens if we taper the GM coefficient in the same way! In theory that would mean we enforce again the same tapering method between between Redi and GM
! aplly tapering to Kgm, not just to the tapered neutral slope
if (K_GM_Ktaper) then
! do tapering of redi diffusion coefficient instead of tapering neutral
! slope
do nz=nzmin, nzmax-1
fer_k(nz, n)=fer_k(nz, n)*sqrt(fer_tapfac(nz, n)) + K_GM_min*abs(sqrt(fer_tapfac(nz, n))-1)
end do
end if