Commit 7ac9859
committed
Merge branch 'trhille/add_higher_order_advection' into MALI-Dev/develop
This merge adds a flux-correct transport (FCT) scheme to MALI for thickness and
tracer advection, ported over with MALI-relevant modification from MPAS-Ocean's
routines, which are based on Skamarock and Gassmann (2011)
(https://doi.org/10.1175/MWR-D-10-05056.1). This uses a blend of 3rd and 4th
order fluxes to achieve monotonicity. The FCT routine is only used for tracers
in MPAS-Ocean, whereas here it is modified for use with both thickness and
tracers. The user can specify 2nd, 3rd, or 4th order advection with the
config_horiz_tracer_adv_order option, but only config_horiz_tracer_adv_order = 3
with 0 < config_advection_coef_3rd_order < 1 is truly FCT. The
config_advection_coef_3rd_order option specifies the blend between 3rd and 4th
order fluxes used in the flux correction. config_advection_coef_3rd_order = 1.0
is purely 3rd order, while config_advection_coef_3rd_order = 0.0 is purely 4th
order. The default value of 0.25 is taken from the MPAS-Ocean default and may
not be appropriate for all situations. Note that all higher-order advection must
reduce to 1st order at the boundaries.
This also adds a new variable passiveTracer2d, that can be used to verify
advection schemes.
Currently supported combinations of thickness and tracer advection with fct
include:
1. config_thickness_advection = 'fo'; config_tracer_advection = 'fct'
2. config_thickness_advection = 'fct'; config_tracer_advection = 'fct'
3. config_thickness_advection = 'fct'; config_tracer_advection = 'none'
FCT tracer advection with no thickness advection and FCT thickness advection
with FO tracer advection could be added, but we do not currently anticipate
using them. Therefore, we have left them out of this PR as they would add
unnecessary complexity to the code. When used with forward Euler time
integration, FCT requires a severely reduced time step relative to first order
advection. Testing shows that CFL fraction on the order of 0.1 is likely
sufficiently small, but this is probably case-dependent. Once Runge-Kutta time
integration is operational, it is recommended to use that instead of forward
Euler.
At the time of merging, there is a very slight conservation error (<0.1% in the
grounded slab test shown below) for tracers when using FCT for both thickness
and tracer advection, while mass is fully conserved. Tracers are conserved when
using FO thickness advection with FCT tracer advection. The convergence order
has not yet been verified, but testing is under way using a new mesh convergence
COMPASS test: MPAS-Dev/compass#690.
* trhille/add_higher_order_advection: (46 commits)
Enable fct thickness advection without tracer advection
Change passiveTracer to passiveTracer2d
Only pass layer thickness tracer for first call to fct
Fix the case of fo thickness, none tracer advection
Fix bug with activeTracerHorizontalAdvectionEdgeFlux
Make activeTracerHorizontalAdvectionEdgeFlux optional
Throw error forr fct thickness with fo tracer
Simple cleanup after code review
Make conserve tracer volume
Fix first order flux at ice edge
Make fct conserve mass
Call li_tracer_advection_fct_tend for thickness and tracers separately
Clean up 2nd order mask
Make 2nd order and 3rd-4th order masks mutually exclusive
Try new mask for 2nd order terms
Change normalThicknessFlux, layerThickness, and tracer definitions
Pass layerThickness as tracer instead of array of 1s
Increase max number of tracers to accomodate passiveTracer
Add passiveTracer to help verify advection schemes
Fix bug in marking boundaryCell
...File tree
11 files changed
+3956
-44
lines changed- components/mpas-albany-landice/src
- mode_forward
11 files changed
+3956
-44
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
113 | | - | |
| 113 | + | |
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
117 | | - | |
118 | | - | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
119 | 127 | | |
120 | 128 | | |
121 | 129 | | |
| |||
638 | 646 | | |
639 | 647 | | |
640 | 648 | | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
641 | 653 | | |
642 | 654 | | |
643 | 655 | | |
| |||
741 | 753 | | |
742 | 754 | | |
743 | 755 | | |
| 756 | + | |
744 | 757 | | |
745 | 758 | | |
746 | 759 | | |
| |||
850 | 863 | | |
851 | 864 | | |
852 | 865 | | |
| 866 | + | |
853 | 867 | | |
854 | 868 | | |
855 | 869 | | |
| |||
1273 | 1287 | | |
1274 | 1288 | | |
1275 | 1289 | | |
| 1290 | + | |
| 1291 | + | |
| 1292 | + | |
1276 | 1293 | | |
1277 | 1294 | | |
1278 | 1295 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
10 | 12 | | |
11 | 13 | | |
12 | 14 | | |
| |||
45 | 47 | | |
46 | 48 | | |
47 | 49 | | |
| 50 | + | |
| 51 | + | |
48 | 52 | | |
49 | 53 | | |
| 54 | + | |
| 55 | + | |
50 | 56 | | |
51 | 57 | | |
52 | 58 | | |
| |||
0 commit comments