Thanks to visit codestin.com
Credit goes to github.com

Skip to content

4) Check tapering of Redi Coefficients (important) #715

@patrickscholz

Description

@patrickscholz

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions