1
<?xml version='1.0' encoding='utf-8'?>
2
<shallow_water_options>
4
<string_value lines="1">wave_A</string_value>
8
<integer_value rank="0">3</integer_value>
10
<mesh name="CoordinateMesh">
11
<from_file file_name="src/mesh_A">
12
<format name="triangle"/>
14
<integer_value rank="0">2</integer_value>
21
<mesh name="VelocityMesh">
23
<mesh name="PeriodicMesh"/>
25
<string_value>discontinuous</string_value>
32
<mesh name="PressureMesh">
34
<mesh name="PeriodicMesh"/>
37
<integer_value rank="0">2</integer_value>
45
<mesh name="PeriodicMesh">
47
<mesh name="CoordinateMesh"/>
48
<periodic_boundary_conditions name="periodicity">
49
<physical_boundary_ids>
50
<integer_value shape="1" rank="1">10</integer_value>
51
</physical_boundary_ids>
52
<aliased_boundary_ids>
53
<integer_value shape="1" rank="1">8</integer_value>
54
</aliased_boundary_ids>
56
<string_value lines="20" type="python">def val(X,t):
58
result[0]=result[0]-1.0
59
return result</string_value>
61
</periodic_boundary_conditions>
62
<periodic_boundary_conditions name="periodic_y">
63
<physical_boundary_ids>
64
<integer_value shape="1" rank="1">7</integer_value>
65
</physical_boundary_ids>
66
<aliased_boundary_ids>
67
<integer_value shape="1" rank="1">9</integer_value>
68
</aliased_boundary_ids>
70
<string_value lines="20" type="python">def val(X,t):
72
result[1]=result[1]-1.0
73
return result</string_value>
75
</periodic_boundary_conditions>
83
<integer_value rank="0">4</integer_value>
89
<string_value>vtk</string_value>
91
<dump_period_in_timesteps>
93
<integer_value rank="0">1</integer_value>
95
</dump_period_in_timesteps>
96
<output_mesh name="CoordinateMesh"/>
100
<real_value rank="0">0</real_value>
103
<real_value rank="0">0.25</real_value>
105
<nonlinear_iterations>
106
<integer_value rank="0">1</integer_value>
107
</nonlinear_iterations>
109
<real_value rank="0">1</real_value>
112
<physical_parameters>
115
<real_value rank="0">1</real_value>
117
<vector_field name="GravityDirection" rank="1">
119
<mesh name="CoordinateMesh"/>
120
<value name="WholeMesh">
122
<real_value shape="3" dim1="dim" rank="1">0 0 -1</real_value>
130
<exclude_from_detectors/>
138
</physical_parameters>
139
<material_phase name="Fluid">
140
<vector_field name="Velocity" rank="1">
142
<mesh name="VelocityMesh"/>
143
<equation name="ShallowWater"/>
144
<spatial_discretisation>
145
<discontinuous_galerkin>
149
</discontinuous_galerkin>
150
<conservative_advection>
151
<real_value rank="0">0</real_value>
152
</conservative_advection>
153
</spatial_discretisation>
155
<iterative_method name="gmres">
157
<integer_value rank="0">500</integer_value>
160
<preconditioner name="sor"/>
162
<real_value rank="0">1e-12</real_value>
165
<integer_value rank="0">500</integer_value>
167
<never_ignore_solver_failures/>
172
<initial_condition name="WholeMesh">
174
<string_value lines="20" type="python">def val(X, t):
175
import constants_revolve_2d
176
return constants_revolve_2d.u_exact(X, t)</string_value>
184
</previous_time_step>
190
<include_in_convergence/>
193
<include_in_detectors/>
196
<include_in_steady_state/>
198
<consistent_interpolation/>
201
<scalar_field name="LayerThickness" rank="0">
203
<mesh name="PressureMesh"/>
204
<spatial_discretisation>
205
<continuous_galerkin>
207
<exclude_advection_terms/>
209
</continuous_galerkin>
210
<conservative_advection>
211
<real_value rank="0">0</real_value>
212
</conservative_advection>
213
</spatial_discretisation>
214
<temporal_discretisation>
216
<real_value rank="0">0.5</real_value>
219
<real_value rank="0">1</real_value>
221
</temporal_discretisation>
223
<iterative_method name="cg"/>
224
<preconditioner name="sor"/>
226
<real_value rank="0">1e-12</real_value>
229
<integer_value rank="0">500</integer_value>
231
<never_ignore_solver_failures/>
232
<cache_solver_context/>
237
<initial_condition name="WholeMesh">
239
<string_value lines="20" type="python">def val(X, t):
240
import constants_revolve_2d
241
#return constants_revolve_2d.eta_exact(X, t)
242
return 0.0</string_value>
245
<mean_layer_thickness>
246
<real_value rank="0">1</real_value>
247
</mean_layer_thickness>
250
<consistent_interpolation/>
253
<scalar_field name="AnalyticalLayerThickness" rank="0">
255
<mesh name="PressureMesh"/>
256
<value name="WholeMesh">
258
<string_value lines="20" type="python">def val(X, t):
259
import constants_revolve_2d
260
return constants_revolve_2d.eta_exact(X, t)</string_value>
266
<exclude_from_detectors/>
273
<scalar_field name="LayerThicknessError" rank="0">
275
<algorithm source_field_2_type="scalar" name="scalar_difference" source_field_1_name="LayerThickness" source_field_2_name="AnalyticalLayerThickness" material_phase_support="single" source_field_1_type="scalar">
276
<absolute_difference/>
278
<mesh name="PressureMesh"/>
282
<include_in_convergence/>
285
<include_in_detectors/>
288
<include_in_steady_state/>
295
<vector_field name="AnalyticalVelocity" rank="1">
297
<mesh name="VelocityMesh"/>
298
<value name="WholeMesh">
300
<string_value lines="20" type="python">def val(X, t):
301
import constants_revolve_2d
302
return constants_revolve_2d.u_exact(X, t)</string_value>
310
<exclude_from_detectors/>
317
<vector_field name="VelocityError" rank="1">
319
<algorithm source_field_2_type="vector" name="vector_difference" source_field_1_name="Velocity" source_field_2_name="AnalyticalVelocity" material_phase_support="single" source_field_1_type="vector">
320
<absolute_difference/>
322
<mesh name="VelocityMesh"/>
328
<include_in_convergence/>
331
<include_in_detectors/>
334
<include_in_steady_state/>
344
<max_memory_checkpoints>
345
<integer_value rank="0">3</integer_value>
346
</max_memory_checkpoints>
347
<max_disk_checkpoints>
348
<integer_value rank="0">0</integer_value>
349
</max_disk_checkpoints>
351
<functional name="integral_eta_t1">
353
<algorithm name="functional_value">
354
<string_value lines="20" type="python">J = 0.0
355
T1 = 0.5 # the time at which to evaluate
356
T2 = 1.0 # the time at which to evaluate
358
if time < T1 <= time+dt:
360
elif time < T2 <= time+dt:
362
if time < T <= time+dt:
364
eta_prev = states[n-1]["Fluid"].scalar_fields["LayerThickness"]
365
eta = states[n]["Fluid"].scalar_fields["LayerThickness"]
366
eta_exact_prev = states[n-1]["Fluid"].scalar_fields["AnalyticalLayerThickness"]
367
eta_exact = states[n]["Fluid"].scalar_fields["AnalyticalLayerThickness"]
369
# We want to temporally interpolate to evaluate eta at t=1.0
370
alpha = (time + dt - T) / dt
371
assert 0 <= alpha < 1
372
tmp_eta = alpha * (eta_prev.val - eta_exact_prev.val) + (1-alpha) * (eta.val - eta_exact.val)
374
# Now we want to integrate that over space
375
coord = states[0]["Fluid"].vector_fields["Coordinate"]
376
assert eta.element_count == eta_prev.element_count == coord.element_count
377
for ele in range(coord.element_count):
378
t = Transform(ele, coord)
379
shape = eta_prev.ele_shape(ele)
380
mass = t.shape_shape(shape, shape)
381
nodes = eta_prev.ele_nodes(ele)
382
J = J + numpy.dot(tmp_eta[nodes], numpy.dot(mass, tmp_eta[nodes]))</string_value>
388
<functional_dependencies>
389
<algorithm name="functional_dependencies">
390
<string_value lines="20" type="python">def dependencies(times, timestep):
391
if times[0] < 0.5 <= times[1] or times[0] < 1.0 <= times[1]:
392
return {"Fluid::Coordinate": [0],
393
"Fluid::LayerThickness": [timestep-1, timestep],
394
"Fluid::AnalyticalLayerThickness": [timestep-1, timestep]
397
return {}</string_value>
399
</functional_dependencies>
402
<control name="InitVel">
403
<type field_name="Fluid::Velocity" name="initial_condition"/>
408
</shallow_water_options>