Commit 5fd35f73 authored by Knut's avatar Knut
Browse files

unified advection/diffusion handling for 2D and 3D (v2.3.1)

parent 198e9f3b
......@@ -52,6 +52,8 @@ VER=2.1.0
VER=2.2.0
# 2012/04/01 - new devel release
VER=2.3.0
# 2012/06/26 - unified advection/diffusion
VER=2.3.1
.PHONY: doc
......
......@@ -39,6 +39,12 @@
<Filter Name="Resource Files" Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"/>
<Filter Name="Source Files" Filter="f90;for;f;fpp;ftn;def;odl;idl">
<Filter Name="2d">
<File RelativePath="..\..\src\2d\adv_arakawa_j7_2dh.F90"/>
<File RelativePath="..\..\src\2d\adv_fct_2dh.F90"/>
<File RelativePath="..\..\src\2d\adv_split_u.F90"/>
<File RelativePath="..\..\src\2d\adv_split_v.F90"/>
<File RelativePath="..\..\src\2d\adv_upstream_2dh.F90"/>
<File RelativePath="..\..\src\2d\advection.F90"/>
<File RelativePath="..\..\src\2d\bottom_friction.F90"/>
<File RelativePath="..\..\src\2d\cfl_check.F90"/>
<File RelativePath="..\..\src\2d\depth_update.F90"/>
......@@ -49,17 +55,18 @@
<File RelativePath="..\..\src\2d\sealevel.F90"/>
<File RelativePath="..\..\src\2d\update_2d_bdy.F90"/>
<File RelativePath="..\..\src\2d\uv_advect.F90"/>
<File RelativePath="..\..\src\2d\uv_diff_2dh.F90"/>
<File RelativePath="..\..\src\2d\uv_diffusion.F90"/>
<File RelativePath="..\..\src\2d\variables_2d.F90"/></Filter>
<Filter Name="3d">
<File RelativePath="..\..\src\3d\adaptive_coordinates.F90"/>
<File RelativePath="..\..\src\3d\adv_split_w.F90"/>
<File RelativePath="..\..\src\3d\advection_3d.F90"/>
<File RelativePath="..\..\src\3d\bdy_3d.F90"/>
<File RelativePath="..\..\src\3d\bottom_friction_3d.F90"/>
<File RelativePath="..\..\src\3d\check_h.F90"/>
<File RelativePath="..\..\src\3d\coordinates.F90"/>
<File RelativePath="..\..\src\3d\eqstate.F90"/>
<File RelativePath="..\..\src\3d\fct_2dh_adv.F90"/>
<File RelativePath="..\..\src\3d\general_coordinates.F90"/>
<File RelativePath="..\..\src\3d\getm_bio.F90"/>
<File RelativePath="..\..\src\3d\getm_fabm.F90"/>
......@@ -81,9 +88,7 @@
<File RelativePath="..\..\src\3d\rivers.F90"/>
<File RelativePath="..\..\src\3d\salinity.F90"/>
<File RelativePath="..\..\src\3d\sigma_coordinates.F90"/>
<File RelativePath="..\..\src\3d\slow_advection.F90"/>
<File RelativePath="..\..\src\3d\slow_bottom_friction.F90"/>
<File RelativePath="..\..\src\3d\slow_diffusion.F90"/>
<File RelativePath="..\..\src\3d\slow_terms.F90"/>
<File RelativePath="..\..\src\3d\ss_nn.F90"/>
<File RelativePath="..\..\src\3d\start_macro.F90"/>
......@@ -91,17 +96,11 @@
<File RelativePath="..\..\src\3d\stresses_3d.F90"/>
<File RelativePath="..\..\src\3d\temperature.F90"/>
<File RelativePath="..\..\src\3d\tke_eps_advect_3d.F90"/>
<File RelativePath="..\..\src\3d\u_split_adv.F90"/>
<File RelativePath="..\..\src\3d\upstream_2dh_adv.F90"/>
<File RelativePath="..\..\src\3d\upstream_adv.F90"/>
<File RelativePath="..\..\src\3d\uu_momentum_3d.F90"/>
<File RelativePath="..\..\src\3d\uv_advect_3d.F90"/>
<File RelativePath="..\..\src\3d\uv_diffusion_3d.F90"/>
<File RelativePath="..\..\src\3d\v_split_adv.F90"/>
<File RelativePath="..\..\src\3d\variables_3d.F90"/>
<File RelativePath="..\..\src\3d\vv_momentum_3d.F90"/>
<File RelativePath="..\..\src\3d\w_split_adv.F90"/>
<File RelativePath="..\..\src\3d\w_split_it_adv.F90"/>
<File RelativePath="..\..\src\3d\ww_momentum_3d.F90"/></Filter>
<Filter Name="domain">
<File RelativePath="..\..\src\domain\bdy_spec.F90"/>
......
......@@ -30,6 +30,12 @@
<Filter Name="Resource Files" Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"/>
<Filter Name="Source Files" Filter="f90;for;f;fpp;ftn;def;odl;idl">
<Filter Name="2d">
<File RelativePath="..\..\src\2d\adv_arakawa_j7_2dh.F90"/>
<File RelativePath="..\..\src\2d\adv_fct_2dh.F90"/>
<File RelativePath="..\..\src\2d\adv_split_u.F90"/>
<File RelativePath="..\..\src\2d\adv_split_v.F90"/>
<File RelativePath="..\..\src\2d\adv_upstream_2dh.F90"/>
<File RelativePath="..\..\src\2d\advection.F90"/>
<File RelativePath="..\..\src\2d\bottom_friction.F90"/>
<File RelativePath="..\..\src\2d\cfl_check.F90"/>
<File RelativePath="..\..\src\2d\depth_update.F90"/>
......@@ -40,17 +46,18 @@
<File RelativePath="..\..\src\2d\sealevel.F90"/>
<File RelativePath="..\..\src\2d\update_2d_bdy.F90"/>
<File RelativePath="..\..\src\2d\uv_advect.F90"/>
<File RelativePath="..\..\src\2d\uv_diff_2dh.F90"/>
<File RelativePath="..\..\src\2d\uv_diffusion.F90"/>
<File RelativePath="..\..\src\2d\variables_2d.F90"/></Filter>
<Filter Name="3d">
<File RelativePath="..\..\src\3d\adaptive_coordinates.F90"/>
<File RelativePath="..\..\src\3d\adv_split_w.F90"/>
<File RelativePath="..\..\src\3d\advection_3d.F90"/>
<File RelativePath="..\..\src\3d\bdy_3d.F90"/>
<File RelativePath="..\..\src\3d\bottom_friction_3d.F90"/>
<File RelativePath="..\..\src\3d\check_h.F90"/>
<File RelativePath="..\..\src\3d\coordinates.F90"/>
<File RelativePath="..\..\src\3d\eqstate.F90"/>
<File RelativePath="..\..\src\3d\fct_2dh_adv.F90"/>
<File RelativePath="..\..\src\3d\general_coordinates.F90"/>
<File RelativePath="..\..\src\3d\getm_bio.F90"/>
<File RelativePath="..\..\src\3d\gotm.F90"/>
......@@ -71,9 +78,7 @@
<File RelativePath="..\..\src\3d\rivers.F90"/>
<File RelativePath="..\..\src\3d\salinity.F90"/>
<File RelativePath="..\..\src\3d\sigma_coordinates.F90"/>
<File RelativePath="..\..\src\3d\slow_advection.F90"/>
<File RelativePath="..\..\src\3d\slow_bottom_friction.F90"/>
<File RelativePath="..\..\src\3d\slow_diffusion.F90"/>
<File RelativePath="..\..\src\3d\slow_terms.F90"/>
<File RelativePath="..\..\src\3d\ss_nn.F90"/>
<File RelativePath="..\..\src\3d\start_macro.F90"/>
......@@ -81,17 +86,11 @@
<File RelativePath="..\..\src\3d\stresses_3d.F90"/>
<File RelativePath="..\..\src\3d\temperature.F90"/>
<File RelativePath="..\..\src\3d\tke_eps_advect_3d.F90"/>
<File RelativePath="..\..\src\3d\u_split_adv.F90"/>
<File RelativePath="..\..\src\3d\upstream_2dh_adv.F90"/>
<File RelativePath="..\..\src\3d\upstream_adv.F90"/>
<File RelativePath="..\..\src\3d\uu_momentum_3d.F90"/>
<File RelativePath="..\..\src\3d\uv_advect_3d.F90"/>
<File RelativePath="..\..\src\3d\uv_diffusion_3d.F90"/>
<File RelativePath="..\..\src\3d\v_split_adv.F90"/>
<File RelativePath="..\..\src\3d\variables_3d.F90"/>
<File RelativePath="..\..\src\3d\vv_momentum_3d.F90"/>
<File RelativePath="..\..\src\3d\w_split_adv.F90"/>
<File RelativePath="..\..\src\3d\w_split_it_adv.F90"/>
<File RelativePath="..\..\src\3d\ww_momentum_3d.F90"/></Filter>
<Filter Name="domain">
<File RelativePath="..\..\src\domain\bdy_spec.F90"/>
......
......@@ -14,7 +14,10 @@
#define DXCJP1 dxc(i,j+1)
#define DXU dxu(i,j)
#define DXV dxv(i,j)
#define DXVIP1 dxv(i+1,j)
#define DXVJM1 dxv(i,j-1)
#define DXVJP1 dxv(i,j+1)
#define DXVPM dxv(i+1,j-1)
#define DXX dxx(i,j)
#define DXXJM1 dxx(i,j-1)
#define DYC dyc(i,j)
......@@ -22,7 +25,10 @@
#define DYCJP1 dyc(i,j+1)
#define DYCJM1 dyc(i,j-1)
#define DYU dyu(i,j)
#define DYUIP1 dyu(i+1,j)
#define DYUIM1 dyu(i-1,j)
#define DYUJP1 dyu(i,j+1)
#define DYUMP dyu(i-1,j+1)
#define DYV dyv(i,j)
#define DYX dyx(i,j)
#define DYXIM1 dyx(i-1,j)
......@@ -36,7 +42,10 @@
#define DXCJP1 dx
#define DXU dx
#define DXV dx
#define DXVIP1 dx
#define DXVJM1 dx
#define DXVJP1 dx
#define DXVPM dx
#define DXX dx
#define DXXJM1 dx
#define DYC dy
......@@ -44,7 +53,10 @@
#define DYCJP1 dy
#define DYCJM1 dy
#define DYU dy
#define DYUIP1 dy
#define DYUIM1 dy
#define DYUJP1 dy
#define DYUMP dy
#define DYV dy
#define DYX dy
#define DYXIM1 dy
......@@ -111,22 +123,24 @@
#ifdef SINGLE
#define REAL_SIZE 4
#define REALTYPE real(kind=4)
#define _ZERO_ 0.0
#define _ZERO_ 0.0
#define _TENTH_ 0.1
#define _QUART_ 0.25
#define _HALF_ 0.5
#define _ONE_ 1.0
#define _TWO_ 2.0
#define _HALF_ 0.5
#define _ONE_ 1.0
#define _TWO_ 2.0
#define _THREE_ 3.0
#else
#define REAL_SIZE 8
#define REALTYPE real(kind=8)
#define MPI_REALTYPE MPI_DOUBLE_PRECISION
#define _ZERO_ 0.0d0
#define _ZERO_ 0.0d0
#define _TENTH_ 0.1d0
#define _QUART_ 0.25d0
#define _HALF_ 0.5d0
#define _ONE_ 1.0d0
#define _TWO_ 2.0d0
#define _HALF_ 0.5d0
#define _ONE_ 1.0d0
#define _TWO_ 2.0d0
#define _THREE_ 3.0d0
#endif
! Rare use of long integers (e.g. timers):
......
......@@ -3,4 +3,53 @@
<links>
<link source="/getm/m2d/vel_depth_method" target="/getm/domain/vel_depth_method"/>
</links>
<custom>
<forward>
<![CDATA[
nmls_s = ('getm/m3d/vel_' ,'getm/temp/temp_','getm/salt/salt_')
nmls_t = ('getm/m3d/vel3d_','getm/temp/temp_','getm/salt/salt_')
for n,nml in enumerate(nmls_s):
adv_split = source[nml+'adv_split'].getValue(usedefault=True)
hor_adv = source[nml+'hor_adv'].getValue(usedefault=True)
ver_adv = source[nml+'hor_adv'].getValue(usedefault=True)
target[nmls_t[n]+'adv_split'].setValue(adv_split+1)
target[nmls_t[n]+'adv_hor'].setValue(hor_adv)
target[nmls_t[n]+'adv_ver'].setValue(ver_adv)
if hor_adv == 1:
target[nmls_t[n]+'adv_split'].setValue(0)
target[nmls_t[n]+'adv_ver'].setValue(1)
elif hor_adv == 2:
if adv_split in (0,1):
target[nmls_t[n]+'adv_hor'].setValue(1)
elif hor_adv == 7:
target[nmls_t[n]+'adv_hor'].setValue(8)
if ver_adv == 2:
target[nmls_t[n]+'adv_ver'].setValue(1)
]]>
</forward>
<backward>
<![CDATA[
nmls_s = ('getm/m3d/vel3d_','getm/temp/temp_','getm/salt/salt_')
nmls_t = ('getm/m3d/vel_' ,'getm/temp/temp_','getm/salt/salt_')
for n,nml in enumerate(nmls_s):
adv_split = source[nml+'adv_split'].getValue(usedefault=True)
adv_hor = source[nml+'adv_hor'].getValue(usedefault=True)
adv_ver = source[nml+'adv_ver'].getValue(usedefault=True)
target[nmls_t[n]+'hor_adv'].setValue(adv_hor)
target[nmls_t[n]+'ver_adv'].setValue(adv_ver)
if adv_split == 0:
if adv_hor in (2,7,8,9):
target[nmls_t[n]+'adv_split'].setValue(2)
else:
target[nmls_t[n]+'adv_split'].setValue(adv_split-1)
if adv_hor == 1:
if adv_split in (1,2):
target[nmls_t[n]+'hor_adv'].setValue(2)
if adv_hor == 8:
target[nmls_t[n]+'hor_adv'].setValue(7)
if adv_ver == 1:
target[nmls_t[n]+'ver_adv'].setValue(2)
]]>
</backward>
</custom>
</converter>
......@@ -201,6 +201,12 @@
<MM>
1
</MM>
<vel2d_adv_split>
0
</vel2d_adv_split>
<vel2d_adv_hor>
1
</vel2d_adv_hor>
<Am>
-1.0
</Am>
......@@ -242,6 +248,9 @@
<cord_relax>
0.0
</cord_relax>
<adv_ver_iterations>
200
</adv_ver_iterations>
<bdy3d>
False
</bdy3d>
......@@ -266,15 +275,15 @@
<bdy3d_tmrlx_ucut>
0.02
</bdy3d_tmrlx_ucut>
<vel_hor_adv>
<vel3d_adv_split>
0
</vel3d_adv_split>
<vel3d_adv_hor>
1
</vel_hor_adv>
<vel_ver_adv>
</vel3d_adv_hor>
<vel3d_adv_ver>
1
</vel_ver_adv>
<vel_adv_split>
0
</vel_adv_split>
</vel3d_adv_ver>
<calc_temp>
True
</calc_temp>
......@@ -287,6 +296,9 @@
<avhback>
0.0
</avhback>
<advect_turbulence>
False
</advect_turbulence>
<ip_method>
1
</ip_method>
......@@ -322,15 +334,15 @@
<temp_field_no>
1
</temp_field_no>
<temp_hor_adv>
1
</temp_hor_adv>
<temp_ver_adv>
1
</temp_ver_adv>
<temp_adv_split>
0
</temp_adv_split>
<temp_adv_hor>
1
</temp_adv_hor>
<temp_adv_ver>
1
</temp_adv_ver>
<temp_AH>
-1.0
</temp_AH>
......@@ -387,15 +399,15 @@
<salt_field_no>
1
</salt_field_no>
<salt_hor_adv>
1
</salt_hor_adv>
<salt_ver_adv>
1
</salt_ver_adv>
<salt_adv_split>
0
</salt_adv_split>
<salt_adv_hor>
1
</salt_adv_hor>
<salt_adv_ver>
1
</salt_adv_ver>
<salt_AH>
-1.0
</salt_AH>
......
......@@ -238,6 +238,37 @@
<condition type="eq" variable="./elev_method" value="2"/>
</element>
<element name="MM" type="int" label="time steps between calls to bottom_friction()" unit="micro time steps" minInclusive="0"/>
<element name="vel2d_adv_split" type="int" label="advection splitting for depth-averaged velocities">
<condition type="ne" variable="./vel2d_adv_hor" value="0"/>
<options>
<option value="0" label="no split: one 2D uv step"/>
<option value="1" label="full step splitting: u + v"/>
<option value="2" label="half step splitting: u/2 + v + u/2"/>
</options>
</element>
<element name="vel2d_adv_hor" type="int" label="advection scheme for depth-averaged velocities">
<options>
<option value="0" label="advection disabled"/>
<option value="1" label="upstream (first-order, monotone)"/>
<option value="2" label="2DH-upstream with forced monotonicity">
<condition type="eq" variable="./vel2d_adv_split" value="0"/>
</option>
<option value="3" label="P2 (third-order, non-monotone)"/>
<option value="4" label="TVD-Superbee (second-order, monotone)"/>
<option value="5" label="TVD-MUSCL (second-order, monotone)"/>
<option value="6" label="TVD-P2-PDM (third-order, monotone)"/>
<option value="7" label="2DH-J7">
<condition type="eq" variable="./vel2d_adv_split" value="0"/>
</option>
<option value="8" label="2DH-FCT">
<condition type="eq" variable="./vel2d_adv_split" value="0"/>
</option>
<option value="9" label="2DH-P2">
<condition type="eq" variable="./vel2d_adv_split" value="0"/>
</option>
</options>
</element>
<element name="Am" type="float" label="constant horizontal momentum diffusion coefficient" unit="m²/s"/>
<element name="An_method" type="int" label="method for constant horizontal numerical diffusion coefficient (m²/s) used to filter the surface elevation">
<options>
......@@ -284,6 +315,7 @@
<element name="cord_relax" type="float" label="coordinate relaxation time scale" minInclusive="0.0" unit="s" description="Coordinate relaxation time scale. The parameter r=cord_relax/dt*H(i,j)/maxdepth regulates how strongly new layer distribution is relaxed to the old one.">
<condition type="eq" variable="../domain/vert_cord" value="3"/>
</element>
<element name="adv_ver_iterations" type="int" label="max number of iterations of vertical advection" minInclusive="0"/>
<element name="bdy3d" type="bool" label="open boundaries exist"/>
<element name="bdyfmt_3d" type="int" label="format of boundary specifications">
<condition type="eq" variable="./bdy3d" value="True"/>
......@@ -310,39 +342,64 @@
<element name="bdy3d_tmrlx_ucut" type="float" label="velocity threshold" unit="m/s" minInclusive="0.0">
<condition type="eq" variable="./bdy3d_tmrlx" value="True"/>
</element>
<element name="vel_hor_adv" type="int" label="horizontal advection method for momentum">
<element name="vel3d_adv_split" type="int" label="advection splitting for horizontal 3D velocities">
<condition type="ne" variable="./vel3d_adv_hor" value="0"/>
<options>
<option value="0" label="no split: one 3D uvw step"/>
<option value="1" label="full step splitting: u + v + w"/>
<option value="2" label="half step splitting: u/2 + v/2 + w + v/2 + u/2"/>
<option value="3" label="hor/ver splitting: uv + w"/>
</options>
</element>
<element name="vel3d_adv_hor" type="int" label="horizontal advection scheme for horizontal 3D velocities">
<options>
<option value="0" label="advection disabled"/>
<option value="1" label="upstream (first-order, monotone)"/>
<option value="2" label="2D upstream (first-order, monotone)"/>
<option value="3" label="P2-PDM (third-order, non-monotone)"/>
<option value="2" label="2DH-upstream with forced monotonicity">
<condition type="or">
<condition type="eq" variable="./vel3d_adv_split" value="0"/>
<condition type="eq" variable="./vel3d_adv_split" value="3"/>
</condition>
</option>
<option value="3" label="P2 (third-order, non-monotone)"/>
<option value="4" label="TVD-Superbee (second-order, monotone)"/>
<option value="5" label="TVD-MUSCL (second-order, monotone)"/>
<option value="6" label="TVD-P2-PDM (third-order, monotone)"/>
<option value="7" label="2D-FCT"/>
</options>
</element>
<element name="vel_ver_adv" type="int" label="vertical advection method for momentum">
<options>
<option value="7" label="2DH-J7">
<condition type="or">
<condition type="eq" variable="./vel3d_adv_split" value="0"/>
<condition type="eq" variable="./vel3d_adv_split" value="3"/>
</condition>
</option>
<option value="8" label="2DH-FCT">
<condition type="or">
<condition type="eq" variable="./vel3d_adv_split" value="0"/>
<condition type="eq" variable="./vel3d_adv_split" value="3"/>
</condition>
</option>
<option value="9" label="2DH-P2">
<condition type="or">
<condition type="eq" variable="./vel3d_adv_split" value="0"/>
<condition type="eq" variable="./vel3d_adv_split" value="3"/>
</condition>
</option>
</options>
</element>
<element name="vel3d_adv_ver" type="int" label="vertical advection scheme for horizontal 3D velocities">
<options>
<option value="0" label="advection disabled"/>
<option value="1" label="upstream (first-order, monotone)"/>
<option value="2" label="2D upstream (first-order, monotone)"/>
<option value="3" label="P2-PDM (third-order, non-monotone)"/>
<option value="3" label="P2 (third-order, non-monotone)"/>
<option value="4" label="TVD-Superbee (second-order, monotone)"/>
<option value="5" label="TVD-MUSCL (second-order, monotone)"/>
<option value="6" label="TVD-P2-PDM (third-order, monotone)"/>
<option value="7" label="2D-FCT"/>
</options>
</element>
<element name="vel_adv_split" type="int" label="splitting scheme for advection">
<options>
<option value="0" label="1D split --> full u, full v, full w"/>
<option value="1" label="1D split --> half u, half v, full w, half v, half u"/>
<option value="2" label="2D-hor-1D-vert split --> full uv, full w"/>
</options>
</element>
<element name="calc_temp" type="bool" label="solve temperature equation"/>
<element name="calc_salt" type="bool" label="solve salinity equation"/>
<element name="avmback" type="float" label="background viscosity" unit="m²/s"/>
<element name="avhback" type="float" label="background diffusivity" unit="m²/s"/>
<element name="advect_turbulence" type="bool" label="advect TKE and eps"/>
<element name="ip_method" type="int" label="internal pressure method">
<options>
<option value="1" label="Blumberg and Mellor"/>
......@@ -401,33 +458,51 @@
<condition type="eq" variable="./temp_format" value="2"/>
</condition>
</element>
<element name="temp_hor_adv" type="int" label="horizontal advection method for temperature">
<element name="temp_adv_split" type="int" label="advection splitting for temperature">
<condition type="ne" variable="./temp_adv_hor" value="0"/>
<options>
<option value="0" label="no split: one 3D uvw step"/>
<option value="1" label="full step splitting: u + v + w"/>
<option value="2" label="half step splitting: u/2 + v/2 + w + v/2 + u/2"/>
<option value="3" label="hor/ver splitting: uv + w"/>
</options>
</element>
<element name="temp_adv_hor" type="int" label="horizontal advection scheme for temperature">
<options>
<option value="0" label="advection disabled"/>
<option value="1" label="upstream (first-order, monotone)"/>
<option value="2" label="2D upstream (first-order, monotone)"/>
<option value="3" label="P2-PDM (third-order, non-monotone)"/>
<option value="2" label="2DH-upstream with forced monotonicity">
<condition type="or">
<condition type="eq" variable="./temp_adv_split" value="0"/>
<condition type="eq" variable="./temp_adv_split" value="3"/>
</condition>
</option>
<option value="3" label="P2 (third-order, non-monotone)"/>
<option value="4" label="TVD-Superbee (second-order, monotone)"/>
<option value="5" label="TVD-MUSCL (second-order, monotone)"/>
<option value="6" label="TVD-P2-PDM (third-order, monotone)"/>
<option value="7" label="2D-FCT"/>
</options>
</element>
<element name="temp_ver_adv" type="int" label="vertical advection method for temperature">
<options>
<option value="8" label="2DH-FCT">
<condition type="or">
<condition type="eq" variable="./temp_adv_split" value="0"/>
<condition type="eq" variable="./temp_adv_split" value="3"/>
</condition>
</option>
<option value="8" label="2DH-P2">
<condition type="or">
<condition type="eq" variable="./temp_adv_split" value="0"/>
<condition type="eq" variable="./temp_adv_split" value="3"/>
</condition>
</option>
</options>
</element>
<element name="temp_adv_ver" type="int" label="vertical advection scheme for temperature">
<options>
<option value="0" label="advection disabled"/>
<option value="1" label="upstream (first-order, monotone)"/>
<option value="2" label="2D upstream (first-order, monotone)"/>
<option value="3" label="P2-PDM (third-order, non-monotone)"/>
<option value="3" label="P2 (third-order, non-monotone)"/>
<option value="4" label="TVD-Superbee (second-order, monotone)"/>
<option value="5" label="TVD-MUSCL (second-order, monotone)"/>
<option value="6" label="TVD-P2-PDM (third-order, monotone)"/>
<option value="7" label="2D-FCT"/>
</options>
</element>
<element name="temp_adv_split" type="int" label="splitting scheme for advection of temperature">
<options>
<option value="0" label="1D split --> full u, full v, full w"/>
<option value="1" label="1D split --> half u, half v, full w, half v, half u"/>
<option value="2" label="2D-hor-1D-vert split --> full uv, full w"/>
</options>
</element>
<element name="temp_AH" type="float" label="horizontal diffusivity of heat" unit="m²/s"/>
......@@ -522,33 +597,51 @@
<condition type="eq" variable="./salt_format" value="2"/>
</condition>
</element>
<element name="salt_hor_adv" type="int" label="horizontal advection method for salinity">
<element name="salt_adv_split" type="int" label="advection splitting for salinity">
<condition type="ne" variable="./salt_adv_hor" value="0"/>
<options>
<option value="0" label="no split: one 3D uvw step"/>
<option value="1" label="full step splitting: u + v + w"/>
<option value="2" label="half step splitting: u/2 + v/2 + w + v/2 + u/2"/>
<option value="3" label="hor/ver splitting: uv + w"/>
</options>
</element>
<element name="salt_adv_hor" type="int" label="horizontal advection scheme for salinity">
<options>
<option value="0" label="advection disabled"/>
<option value="1" label="upstream (first-order, monotone)"/>
<option value="2" label="2D upstream (first-order, monotone)"/>
<option value="3" label="P2-PDM (third-order, non-monotone)"/>
<option value="2" label="2DH-upstream with forced monotonicity">
<condition type="or">
<condition type="eq" variable="./salt_adv_split" value="0"/>
<condition type="eq" variable="./salt_adv_split" value="3"/>
</condition>
</option>
<option value="3" label="P2 (third-order, non-monotone)"/>
<option value="4" label="TVD-Superbee (second-order, monotone)"/>
<option value="5" label="TVD-MUSCL (second-order, monotone)"/>
<option value="6" label="TVD-P2-PDM (third-order, monotone)"/>
<option value="7" label="2D-FCT"/>
</options>
</element>
<element name="salt_ver_adv" type="int" label="vertical advection method for salinity">
<options>
<option value="8" label="2DH-FCT">
<condition type="or">
<condition type="eq" variable="./salt_adv_split" value="0"/>
<condition type="eq" variable="./salt_adv_split" value="3"/>
</condition>
</option>
<option value="9" label="2DH-P2">
<condition type="or">
<condition type="eq" variable="./salt_adv_split" value="0"/>
<condition type="eq" variable="./salt_adv_split" value="3"/>
</condition>
</option>
</options>
</element>
<element name="salt_adv_ver" type="int" label="vertical advection scheme for salinity">
<options>
<option value="0" label="advection disabled"/>