-
Notifications
You must be signed in to change notification settings - Fork 1
/
model_formulation_2d.html
219 lines (206 loc) · 15.8 KB
/
model_formulation_2d.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Depth averaged 2D model formulation — Thetis 0+untagged.2009.gb75eefa documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="_static/thetis.css?v=0f3339d6" />
<script src="_static/documentation_options.js?v=47a7fef3"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<!--[if lte IE 6]>
<link rel="stylesheet" href="_static/ie6.css" type="text/css" media="screen" charset="utf-8" />
<![endif]-->
<!-- <link rel="stylesheet" href="_static/featured.css"> -->
<link rel="shortcut icon" href="_static/icon_thetis.ico" />
</head><body>
<div class="wrapper">
<a href="index.html"><img src="_static/banner.jpg" height="180px" alt="Thetis Project Banner" /></a>
<div id="access">
<div class="menu">
<ul>
<li class="page_item"><a href="documentation.html" title="Thetis documentation">Documentation</a></li>
<li class="page_item"><a href="download.html" title="Install Thetis">Download</a></li>
<li class="page_item"><a href="team.html" title="Development team">Team</a></li>
<li class="page_item"><a href="publications.html" title="Publications">Publications</a></li>
<li class="page_item"><a href="funding.html" title="Our financial supporters">Funding</a></li>
<li class="page_item"><a href="contact.html" title="Getting in touch">Contact</a></li>
<li class="page_item"><a href="https://github.com/thetisproject/thetis" title="Thetis source on GitHub">GitHub</a></li>
</ul>
</div><!-- .menu -->
</div><!-- #access -->
</div><!-- #wrapper -->
<div class="document">
<div class="model_formulation_2d">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="depth-averaged-2d-model-formulation">
<h1>Depth averaged 2D model formulation<a class="headerlink" href="#depth-averaged-2d-model-formulation" title="Link to this heading">¶</a></h1>
<section id="governing-equations">
<h2>Governing equations<a class="headerlink" href="#governing-equations" title="Link to this heading">¶</a></h2>
<p>The two dimensional model solves the depth averaged shallow water equations
<a class="reference internal" href="thetis.html#equation-swe-freesurf">(7)</a>-<a class="reference internal" href="thetis.html#equation-swe-momentum">(8)</a>.
The prognostic variables are the water elevation <span class="math notranslate nohighlight">\(\eta\)</span> and depth
averaged velocity <span class="math notranslate nohighlight">\(\bar{\mathbf{u}}\)</span>.
The corresponding fields in Thetis are called <code class="docutils literal notranslate"><span class="pre">'elev_2d'</span></code> and <code class="docutils literal notranslate"><span class="pre">'uv_2d'</span></code>.</p>
</section>
<section id="wetting-and-drying">
<h2>Wetting and drying<a class="headerlink" href="#wetting-and-drying" title="Link to this heading">¶</a></h2>
<p>Wetting and drying is included through the modified bathymetry formulation of
Karna et al. (2011). The modified equations are given by
<a class="reference internal" href="thetis.html#equation-swe-freesurf-wd">(13)</a>-<a class="reference internal" href="thetis.html#equation-swe-momentum-wd">(14)</a>. The <span class="math notranslate nohighlight">\(\alpha\)</span> parameter
associated with the wetting and drying scheme can be specified by the
<a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.ModelOptions2d.wetting_and_drying_alpha" title="thetis.options.ModelOptions2d.wetting_and_drying_alpha"><code class="xref py py-attr docutils literal notranslate"><span class="pre">wetting_and_drying_alpha</span></code></a>
option. It can also be computed automatically, by setting the
<a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.ModelOptions2d.use_automatic_wetting_and_drying_alpha" title="thetis.options.ModelOptions2d.use_automatic_wetting_and_drying_alpha"><code class="xref py py-attr docutils literal notranslate"><span class="pre">use_automatic_wetting_and_drying_alpha</span></code></a>
option to <code class="docutils literal notranslate"><span class="pre">True</span></code>.</p>
</section>
<section id="spatial-discretization">
<h2>Spatial discretization<a class="headerlink" href="#spatial-discretization" title="Link to this heading">¶</a></h2>
<p>Thetis supports different finite element discretizations, summarised in the
table below.</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 35.3%" />
<col style="width: 17.6%" />
<col style="width: 16.2%" />
<col style="width: 14.7%" />
<col style="width: 16.2%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Element Family</p></th>
<th class="head"><p>Name</p></th>
<th class="head"><p>Degree <em>n</em></p></th>
<th class="head"><p><span class="math notranslate nohighlight">\(\bar{\mathbf{u}}\)</span> space</p></th>
<th class="head"><p><span class="math notranslate nohighlight">\(\eta\)</span> space</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Equal order DG</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">'dg-dg'</span></code></p></td>
<td><p>1, 2</p></td>
<td><p>P(n)DG</p></td>
<td><p>P(n)DG</p></td>
</tr>
<tr class="row-odd"><td><p>Raviart-Thomas DG</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">'rt-dg'</span></code></p></td>
<td><p>1, 2</p></td>
<td><p>RT(n+1)</p></td>
<td><p>P(n)DG</p></td>
</tr>
<tr class="row-even"><td><p>P1DG-P2</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">'dg-cg'</span></code></p></td>
<td><p>1</p></td>
<td><p>P(n)DG</p></td>
<td><p>P(n+1)</p></td>
</tr>
<tr class="row-odd"><td><p>Brezzi-Douglas-Marini DG</p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">'bdm-dg'</span></code></p></td>
<td><p>1, 2</p></td>
<td><p>BDM(n+1)</p></td>
<td><p>P(n)DG</p></td>
</tr>
</tbody>
</table>
<p>Table 1. <em>Finite element families for polynomial degree n.</em></p>
<p>The element family and polynomial degree are set by the <a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.CommonModelOptions.element_family" title="thetis.options.CommonModelOptions.element_family"><code class="xref py py-attr docutils literal notranslate"><span class="pre">element_family</span></code></a> and <a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.CommonModelOptions.polynomial_degree" title="thetis.options.CommonModelOptions.polynomial_degree"><code class="xref py py-attr docutils literal notranslate"><span class="pre">polynomial_degree</span></code></a> options.</p>
<p>Lax-Friedrichs stabilization is used by default and may be controlled using
the
<a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.CommonModelOptions.use_lax_friedrichs_velocity" title="thetis.options.CommonModelOptions.use_lax_friedrichs_velocity"><code class="xref py py-attr docutils literal notranslate"><span class="pre">use_lax_friedrichs_velocity</span></code></a>
option. The scaling parameter used by this scheme may be controlled using the
<a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.CommonModelOptions.lax_friedrichs_velocity_scaling_factor" title="thetis.options.CommonModelOptions.lax_friedrichs_velocity_scaling_factor"><code class="xref py py-attr docutils literal notranslate"><span class="pre">lax_friedrichs_velocity_scaling_factor</span></code></a>
option.</p>
</section>
<section id="temporal-discretization">
<h2>Temporal discretization<a class="headerlink" href="#temporal-discretization" title="Link to this heading">¶</a></h2>
<p>Thetis supports different time integration methods, set by the
<a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.ModelOptions2d.swe_timestepper_type" title="thetis.options.ModelOptions2d.swe_timestepper_type"><code class="xref py py-attr docutils literal notranslate"><span class="pre">swe_timestepper_type</span></code></a> option.</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 24.4%" />
<col style="width: 29.9%" />
<col style="width: 17.3%" />
<col style="width: 28.3%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Time integrator</p></th>
<th class="head"><p>Thetis class</p></th>
<th class="head"><p>Unconditionally stable</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">'ForwardEuler'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.timeintegrator.ForwardEuler" title="thetis.timeintegrator.ForwardEuler"><code class="xref py py-class docutils literal notranslate"><span class="pre">ForwardEuler</span></code></a></p></td>
<td><p>No</p></td>
<td><p>Forward Euler method</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">'BackwardEuler'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.rungekutta.BackwardEuler" title="thetis.rungekutta.BackwardEuler"><code class="xref py py-class docutils literal notranslate"><span class="pre">BackwardEuler</span></code></a></p></td>
<td><p>Yes</p></td>
<td><p>Backward Euler method</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">'CrankNicolson'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.timeintegrator.CrankNicolson" title="thetis.timeintegrator.CrankNicolson"><code class="xref py py-class docutils literal notranslate"><span class="pre">CrankNicolson</span></code></a></p></td>
<td><p>Yes</p></td>
<td><p>Crank-Nicolson method</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">'DIRK22'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.rungekutta.DIRK22" title="thetis.rungekutta.DIRK22"><code class="xref py py-class docutils literal notranslate"><span class="pre">DIRK22</span></code></a></p></td>
<td><p>Yes</p></td>
<td><p>DIRK(2,3,2) method</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">'DIRK33'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.rungekutta.DIRK33" title="thetis.rungekutta.DIRK33"><code class="xref py py-class docutils literal notranslate"><span class="pre">DIRK33</span></code></a></p></td>
<td><p>Yes</p></td>
<td><p>DIRK(3,4,3) method</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">'SSPRK33'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.rungekutta.SSPRK33" title="thetis.rungekutta.SSPRK33"><code class="xref py py-class docutils literal notranslate"><span class="pre">SSPRK33</span></code></a></p></td>
<td><p>No</p></td>
<td><p>SSPRK(3,3) method</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">'SSPIMEX'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.implicitexplicit.IMEXLPUM2" title="thetis.implicitexplicit.IMEXLPUM2"><code class="xref py py-class docutils literal notranslate"><span class="pre">IMEXLPUM2</span></code></a></p></td>
<td><p>No</p></td>
<td><p>LPUM2 SSP IMEX scheme</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">'PressureProjectionPicard'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.timeintegrator.PressureProjectionPicard" title="thetis.timeintegrator.PressureProjectionPicard"><code class="xref py py-class docutils literal notranslate"><span class="pre">PressureProjectionPicard</span></code></a></p></td>
<td><p>No</p></td>
<td><p>Efficient pressure projection solver</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">'SteadyState'</span></code></p></td>
<td><p><a class="reference internal" href="thetis.html#thetis.timeintegrator.SteadyState" title="thetis.timeintegrator.SteadyState"><code class="xref py py-class docutils literal notranslate"><span class="pre">SteadyState</span></code></a></p></td>
<td><p>–</p></td>
<td><p>Solves equations in steady state</p></td>
</tr>
</tbody>
</table>
<p>Table 2. <em>Time integration methods for 2D model.</em></p>
<p>Model time step is defined by the <a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.CommonModelOptions.timestep" title="thetis.options.CommonModelOptions.timestep"><code class="xref py py-attr docutils literal notranslate"><span class="pre">timestep</span></code></a> option.</p>
<p>For explicit solvers, Thetis can also estimate the maximum stable time step
based on the mesh resolution, used element family and time integration scheme.
To use this feature, the user should provide the maximal horizontal velocity
scale with <a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.CommonModelOptions.horizontal_velocity_scale" title="thetis.options.CommonModelOptions.horizontal_velocity_scale"><code class="xref py py-attr docutils literal notranslate"><span class="pre">horizontal_velocity_scale</span></code></a> option and set
<a class="reference internal" href="model_options_2d.html#model-options-2d"><span class="std std-ref">ModelOptions2d</span></a>.<a class="reference internal" href="thetis.html#thetis.options.ModelOptions3d.timestepper_options" title="thetis.options.ModelOptions3d.timestepper_options"><code class="xref py py-attr docutils literal notranslate"><span class="pre">timestepper_options</span></code></a>.<a class="reference internal" href="thetis.html#thetis.options.ExplicitTimeStepperOptions.use_automatic_timestep" title="thetis.options.ExplicitTimeStepperOptions.use_automatic_timestep"><code class="xref py py-attr docutils literal notranslate"><span class="pre">use_automatic_timestep</span></code></a> to <code class="docutils literal notranslate"><span class="pre">True</span></code>.</p>
</section>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer" role="contentinfo">
© Copyright 2016-2023, Tuomas Kärnä et al..
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.2.6.
</div>
</body>
</html>