Skip to content

fxadv

FiniteVolumeFluxPrep

A large section of code near the beginning of Fortran's d_sw subroutine Known in this repo as FxAdv,

__call__(uc, vc, crx, cry, x_area_flux, y_area_flux, uc_contra, vc_contra, dt)

Updates flux operators and courant numbers for fvtp2d To start off D_SW after the C-grid winds have been advanced half a timestep, and and compute finite volume transport on the D-grid (e.g.Putman and Lin 2007), this module prepares terms such as parts of equations 7 and 13 in Putnam and Lin, 2007, that get consumed by fvtp2d and ppm methods.

Described in sections 3.2 and 4.2 of the FV3 documentation.

Parameters:

Name Type Description Default
uc in

covariant x-velocity on the C-grid

required
vc in

covariant y-velocity on the C-grid

required
crx out

Courant number, x direction

required
cry out

Courant number, y direction

required
x_area_flux out

flux of area in x-direction, in units of m^2

required
y_area_flux out

flux of area in y-direction, in units of m^2

required
uc_contra out

contravariant x-velocity on C-grid

required
vc_contra out

contravariant y-velocity on C-grid

required
dt in

acoustic timestep in seconds

required

fxadv_fluxes_stencil(sin_sg1, sin_sg2, sin_sg3, sin_sg4, rdxa, rdya, dy, dx, crx, cry, x_area_flux, y_area_flux, uc_contra, vc_contra, dt)

Parameters:

Name Type Description Default
sin_sg1 in
required
sin_sg2 in
required
sin_sg3 in
required
sin_sg4 in
required
rdxa in
required
rdya in
required
dy in
required
dx in
required
crx out
required
cry out
required
x_area_flux out
required
y_area_flux out
required
uc_contra in
required
vc_contra in
required

main_uc_vc_contra(uc, vc, cosa_u, rsin_u, cosa_v, rsin_v, uc_contra, vc_contra)

Parameters:

Name Type Description Default
uc in

covariant c-grid x-wind

required
vc in

covariant c-grid y-wind

required
cosa_u in

???

required
rsin_u in

???

required
cosa_v in

???

required
rsin_v in

???

required
uc_contra out

contravariant c-grid x-wind

required
vc_contra out

contravariant c-grid y-wind

required

uc_contra_corners(cosa_u, cosa_v, uc, vc, uc_contra, uc_contra_copy, vc_contra)

The following code (and vt_corners) solves a 2x2 system to get the interior parallel-to-edge uc,vc values near the corners (ex: for the sw corner ut(2,1) and vt(1,2) are solved for simultaneously). It then computes the halo uc, vc values so as to be consistent with the computations on the facing panel.

The system solved is

ut(2,1) = uc(2,1) - avg(vt)cosa_u(2,1) vt(1,2) = vc(1,2) - avg(ut)cosa_v(1,2) in which avg(vt) includes vt(1,2) and avg(ut) includes ut(2,1)

Parameters:

Name Type Description Default
cosa_u in
required
cosa_v in
required
uc in
required
vc in
required
uc_contra out
required
uc_contra_copy in

the covariant u-wind on ??? grid

required
vc_contra in
required

uc_contra_x_edge(uc, cosa_u, vc_contra, uc_contra)

Parameters:

Name Type Description Default
uc in
required
cosa_u in
required
vc_contra in
required
uc_contra inout
required

uc_contra_y_edge(uc, sin_sg1, sin_sg3, uc_contra)

On the edges, the definition of contravariant C-grid wind is ambiguous, so we use the average normal vector as the new normal vector.

This uses the upstream value of the metric term sin_sg (on both sides) instead of some kind of average to modify the rsin2 term used in the covariant -> contravariant conversion.

ucontra = uc / sin(alpha) at the edges

Parameters:

Name Type Description Default
uc in
required
sin_sg1 in
required
sin_sg3 in
required
uc_contra out
required

vc_contra_corners(cosa_u, cosa_v, uc, vc, ut, vc_contra, vc_contra_copy)

Parameters:

Name Type Description Default
cosa_u in
required
cosa_v in
required
uc in
required
vc in
required
ut in
required
vc_contra out
required
vc_contra_copy in

the covariant v-wind on ??? grid

required

vc_contra_x_edge(vc, sin_sg2, sin_sg4, vc_contra)

Parameters:

Name Type Description Default
vc in
required
sin_sg2 in
required
sin_sg4 in
required
vc_contra out
required

vc_contra_y_edge(vc, cosa_v, uc_contra, vc_contra)

Parameters:

Name Type Description Default
vc in
required
cosa_v in
required
uc_contra in
required
vc_contra inout
required