1
<?xml version='1.0' encoding='utf-8'?>
2
<shallow_water_options>
4
<string_value lines="1">wave_D</string_value>
8
<integer_value rank="0">3</integer_value>
10
<mesh name="CoordinateMesh">
11
<from_file file_name="src/mesh_D">
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="code" language="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="code" language="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>
93
<real_value rank="0">0.0</real_value>
96
<output_mesh name="CoordinateMesh"/>
100
<real_value rank="0">0</real_value>
103
<real_value rank="0">0.03125</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">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 0.0 -1.0</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="preonly"/>
156
<preconditioner name="lu"/>
158
<real_value rank="0">1.0e-7</real_value>
161
<integer_value rank="0">500</integer_value>
163
<never_ignore_solver_failures/>
168
<initial_condition name="WholeMesh">
170
<string_value lines="20" type="code" language="python">def val(X, t):
172
return constants_2d.u_exact(X, t)</string_value>
175
<vector_field name="Source" rank="1">
177
<value name="WholeMesh">
179
<string_value lines="20" type="code" language="python">def val(X, t):
181
return constants_2d.u_src(X, t)</string_value>
189
<exclude_from_detectors/>
201
</previous_time_step>
207
<include_in_convergence/>
210
<include_in_detectors/>
213
<include_in_steady_state/>
215
<consistent_interpolation/>
218
<scalar_field name="LayerThickness" rank="0">
220
<mesh name="PressureMesh"/>
221
<spatial_discretisation>
222
<continuous_galerkin>
224
<exclude_advection_terms/>
226
</continuous_galerkin>
227
<conservative_advection>
228
<real_value rank="0">0</real_value>
229
</conservative_advection>
230
</spatial_discretisation>
231
<temporal_discretisation>
233
<real_value rank="0">0.5</real_value>
236
<real_value rank="0">1</real_value>
238
</temporal_discretisation>
240
<iterative_method name="preonly"/>
241
<preconditioner name="lu"/>
243
<real_value rank="0">1.0e-7</real_value>
246
<integer_value rank="0">500</integer_value>
248
<never_ignore_solver_failures/>
249
<cache_solver_context/>
254
<initial_condition name="WholeMesh">
256
<string_value lines="20" type="code" language="python">def val(X, t):
258
return constants_2d.eta_exact(X, t)</string_value>
261
<mean_layer_thickness>
262
<real_value rank="0">0.5</real_value>
263
</mean_layer_thickness>
264
<scalar_field name="Source">
266
<value name="WholeMesh">
268
<string_value lines="20" type="code" language="python">def val(X, t):
270
return constants_2d.eta_src(X, t)</string_value>
276
<exclude_from_detectors/>
285
<consistent_interpolation/>
288
<scalar_field name="AnalyticalLayerThickness" rank="0">
290
<mesh name="PressureMesh"/>
291
<value name="WholeMesh">
293
<string_value lines="20" type="code" language="python">def val(X, t):
295
return constants_2d.eta_exact(X, t)</string_value>
301
<exclude_from_detectors/>
308
<scalar_field name="LayerThicknessError" rank="0">
310
<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">
311
<absolute_difference/>
313
<mesh name="PressureMesh"/>
317
<include_in_convergence/>
320
<include_in_detectors/>
323
<include_in_steady_state/>
330
<scalar_field name="dJdh" rank="0">
332
<algorithm name="scalar_python_diagnostic" material_phase_support="single">
333
<string_value lines="20" type="code" language="python">import fluidity.state_types
338
coord = state.vector_fields["Coordinate"]
339
dJdu0 = state.vector_fields['integral_eta_t1_InitVelCtrl_TotalDerivative']
340
dJdusrc = state.vector_fields['integral_eta_t1_VelSrcCtrl_TotalDerivative']
341
dJdeta0 = state.scalar_fields['integral_eta_t1_InitEtaCtrl_TotalDerivative']
342
dJdetasrc = state.scalar_fields['integral_eta_t1_EtaSrcCtrl_TotalDerivative']
343
eta_exact = state.scalar_fields['AnalyticalLayerThickness']
344
u_exact = state.vector_fields['AnalyticalVelocity']
345
eta_src = state.scalar_fields['MyEtaSource']
346
u_src = state.vector_fields['MyVelocitySource']
349
for node in range(dJdeta0.node_count):
350
dJ = dJ + numpy.dot(dJdeta0.node_val(node), eta_exact.node_val(node))
351
for node in range(dJdu0.node_count):
352
dJ = dJ + numpy.dot(dJdu0.node_val(node), u_exact.node_val(node))
354
for node in range(dJdetasrc.node_count):
355
dJ = dJ + numpy.dot(dJdetasrc.node_val(node), eta_src.node_val(node))
356
for node in range(dJdusrc.node_count):
357
dJ = dJ + numpy.dot(dJdusrc.node_val(node), u_src.node_val(node))
359
field.val[:] = dJ</string_value>
361
<string_value lines="1">MyEtaSource,MyVelocitySource</string_value>
364
<mesh name="VelocityMesh"/>
368
<include_in_convergence/>
371
<include_in_detectors/>
374
<include_in_steady_state/>
381
<scalar_field name="MyEtaSource" rank="0">
383
<algorithm name="scalar_python_diagnostic" material_phase_support="single">
384
<string_value lines="20" type="code" language="python">import constants_2d as constants
385
timeprime = time + constants.theta*dt
386
coord = state.vector_fields["Coordinate"]
388
for ele in range(coord.ele_count):
389
ele_vals = [constants.eta_src(x, timeprime) for x in coord.remap_ele(ele, field.mesh)]
390
field.set(field.ele_nodes(ele), ele_vals)</string_value>
392
<mesh name="PressureMesh"/>
396
<include_in_convergence/>
399
<include_in_detectors/>
402
<include_in_steady_state/>
409
<vector_field name="AnalyticalVelocity" rank="1">
411
<mesh name="VelocityMesh"/>
412
<value name="WholeMesh">
414
<string_value lines="20" type="code" language="python">def val(X, t):
416
return constants_2d.u_exact(X, t)</string_value>
424
<exclude_from_detectors/>
431
<vector_field name="VelocityError" rank="1">
433
<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">
434
<absolute_difference/>
436
<mesh name="VelocityMesh"/>
442
<include_in_convergence/>
445
<include_in_detectors/>
448
<include_in_steady_state/>
455
<vector_field name="MyVelocitySource" rank="1">
457
<algorithm name="vector_python_diagnostic" material_phase_support="single">
458
<string_value lines="20" type="code" language="python">import constants_2d as constants
459
timeprime = time + constants.theta*dt
460
coord = state.vector_fields["Coordinate"]
462
for ele in range(field.ele_count):
463
ele_vals = [constants.u_src(x, timeprime) for x in coord.remap_ele(ele, field.mesh)]
464
field.set(field.ele_nodes(ele), ele_vals)</string_value>
466
<mesh name="VelocityMesh"/>
472
<include_in_convergence/>
475
<include_in_detectors/>
478
<include_in_steady_state/>
487
<functional name="integral_eta_t1">
489
<algorithm name="functional_value">
490
<string_value lines="20" type="code" language="python">J = 0.0
491
T = 1.0 # the time at which to evaluate
492
if time < T <= time+dt:
494
eta_prev = states[n-1]["Fluid"].scalar_fields["LayerThickness"]
495
eta = states[n]["Fluid"].scalar_fields["LayerThickness"]
497
# We want to temporally interpolate to evaluate eta at t=1.0
498
alpha = (time + dt - T) / dt
499
assert 0 <= alpha < 1
500
tmp_eta = alpha * eta_prev.val + (1-alpha) * eta.val
502
# Now we want to integrate that over space
503
coord = states[0]["Fluid"].vector_fields["Coordinate"]
504
assert eta.element_count == eta_prev.element_count == coord.element_count
505
for ele in range(coord.element_count):
506
t = Transform(ele, coord)
507
shape = eta_prev.ele_shape(ele)
508
mass = t.shape_shape(shape, shape)
509
nodes = eta_prev.ele_nodes(ele)
510
J = J + numpy.dot(tmp_eta[nodes], numpy.dot(mass, tmp_eta[nodes]))</string_value>
516
<functional_dependencies>
517
<algorithm name="functional_dependencies">
518
<string_value lines="20" type="code" language="python">def dependencies(times, timestep):
519
if times[0] < 1.0 <= times[1]:
520
return {"Fluid::Coordinate": [0],
521
"Fluid::LayerThickness": [timestep-1, timestep]}
523
return {}</string_value>
525
</functional_dependencies>
528
<control name="InitVelCtrl">
529
<type field_name="Velocity" name="initial_condition"/>
531
<control name="InitEtaCtrl">
532
<type field_name="LayerThickness" name="initial_condition"/>
534
<control name="VelSrcCtrl">
535
<type field_name="VelocitySource" name="source_term"/>
537
<control name="EtaSrcCtrl">
538
<type field_name="LayerThicknessSource" name="source_term"/>
542
<replay_forward_run/>
546
</shallow_water_options>