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 |