Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 ...
- Loading branch information