Skip to content

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