divergence_damping
DivergenceDamping
A large section in Fortran's d_sw that applies divergence damping
__call__(u, v, va, damped_rel_vort_bgrid, ua, divg_d, vc, uc, delpc, ke, rel_vort_agrid, dt)
Adds another form of diffusive flux that acts on the divergence field. To apply diffusion you can take the gradient of the divergence field and add it into the components of the velocity equation. This gives second-order diffusion, which is quite diffusive. But if we apply this iteratively, we can get 4th, 6th, 8th, etc. order diffusion.
Explained in detail in section 8.3 of the FV3 documentation.
Applies both a background second-order diffusion (with strength controlled by d2_bg passed on init) and a higher-order hyperdiffusion.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
u
|
in
|
x-velocity on d-grid |
required |
v
|
in
|
y-velocity on d-grid |
required |
va
|
in
|
|
required |
damped_rel_vort_bgrid
|
out
|
damped relative vorticity on b-grid |
required |
ua
|
in
|
|
required |
divg_d
|
inout
|
finite volume divergence defined on cell corners, output value is not used later in D_SW |
required |
vc
|
inout
|
|
required |
uc
|
inout
|
|
required |
delpc
|
out
|
finite volume divergence defined on cell corners |
required |
ke
|
inout
|
dt times the kinetic energy defined on cell corners, at input time must be accurate for the input winds. Gets updated to remain accurate for the output winds, as described in section 8.3 of the FV3 documentation. |
required |
rel_vort_agrid
|
in
|
a-grid relative vorticity computed before divergence damping gets converted by a2b_ord4 and put into v_contra_dxc |
required |
dt
|
in
|
timestep |
required |
compute_u_contra_dyc(u, va, vc, cosa_v, sina_v, dyc, sin_sg2, sin_sg4, u_contra_dyc)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
u
|
in
|
|
required |
va
|
in
|
|
required |
vc
|
in
|
|
required |
cosa_v
|
in
|
|
required |
sina_v
|
in
|
|
required |
dyc
|
in
|
|
required |
sin_sg2
|
in
|
|
required |
sin_sg4
|
in
|
|
required |
u_contra_dyc
|
out
|
contravariant u-wind on d-grid |
required |
compute_v_contra_dxc(v, ua, cosa_u, sina_u, dxc, v_contra_dxc, uc, sin_sg3, sin_sg1)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
v
|
in
|
|
required |
ua
|
in
|
|
required |
cosa_u
|
in
|
|
required |
sina_u
|
in
|
|
required |
dxc
|
in
|
|
required |
vort
|
out
|
contravariant v-wind on d-grid |
required |
uc
|
in
|
|
required |
sin_sg3
|
in
|
|
required |
sin_sg1
|
in
|
|
required |
damping(delpc, vort, ke, d2_bg, da_min_c, dddmp, dt)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
delpc
|
in
|
divergence at cell corner |
required |
vort
|
out
|
|
required |
ke
|
inout
|
|
required |
d2_bg
|
in
|
|
required |
damping_nord_highorder_stencil(vort, ke, delpc, divg_d, d2_bg, da_min_c, dddmp, dd8)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
vort
|
inout
|
linear combination of second-order and higher-order divergence damping, on output is the damping term itself |
required |
ke
|
inout
|
on input, is the kinetic energy, on output also includes the damping term vort |
required |
delpc
|
in
|
divergence on cell corners |
required |
divg_d
|
in
|
higher-order divergence on d-grid |
required |
d2_bg
|
in
|
background second-order divergence damping coefficient |
required |
delpc_computation(u_contra_dxc, rarea_c, delpc, v_contra_dyc)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
u_contra_dyc
|
in
|
contravariant u-wind on d-grid * dxc |
required |
rarea_c
|
in
|
|
required |
delpc
|
out
|
convergence of wind on cell centers |
required |
v_contra_dxc
|
in
|
contravariant v-wind on d-grid * dyc |
required |
redo_divg_d(uc, vc, divg_d, adjustment_factor)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
uc
|
in
|
intermediate component of hyperdiffusion defined on same grid as c-grid x-wind |
required |
vc
|
in
|
intermediate component of hyperdiffusion defined on same grid as c-grid y-wind |
required |
divg_d
|
out
|
updated divergence for hyperdiffusion on d-grid |
required |
adjustment_factor
|
in
|
|
required |
smag_corner(u, v, dx, dxc, dy, dyc, rarea, rarea_c, smag_c, dt)
Smagorinsky diffusion for a doubly-periodic domain Args: u (in): d-grid u wind v (in): d-grid v wind dx (in): Distance between grid corners along the x-direction dxc (in): Distance between grid centers along the x-direction dy (in): Distance between grid corners along the y-direction dyc (in): Distance between grid centers along the y-direction rarea (in): 1/cell area rarea_c (in): 1/ c-grid cell area smag_c (out): tension shear strain on cell corners dt (in): timestep
smagorinsky_diffusion_approx(delpc, vort, absdt)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
delpc
|
in
|
divergence on cell corners |
required |
vort
|
inout
|
local eddy diffusivity |
required |
absdt
|
in
|
abs(dt) |
required |
uc_from_divg(divg_d, divg_v, uc)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
divg_d
|
in
|
divergence on d-grid |
required |
divg_v
|
in
|
metric term, divg_v = sina_u * dxc / dy |
required |
uc
|
out
|
intermediate component of hyperdiffusion defined on same grid as c-grid x-wind |
required |
vc_from_divg(divg_d, divg_u, vc)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
divg_d
|
in
|
divergence on d-grid |
required |
divg_u
|
in
|
metric term, divg_u = sina_v * dyc / dx |
required |
uv
|
out
|
intermediate component of hyperdiffusion defined on same grid as c-grid y-wind |
required |