1
<?xml version='1.0' encoding='utf8'?>
2
<shallow_water_options>
4
<string_value lines="1">wave_C</string_value>
8
<integer_value rank="0">3</integer_value>
10
<mesh name="CoordinateMesh">
11
<from_file file_name="src/mesh_C">
12
<format name="triangle"/>
14
<integer_value rank="0">1</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 rank="1" shape="1">1</integer_value>
51
</physical_boundary_ids>
52
<aliased_boundary_ids>
53
<integer_value rank="1" shape="1">2</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>
69
<integer_value rank="0">4</integer_value>
75
<string_value>vtk</string_value>
77
<dump_period_in_timesteps>
79
<integer_value rank="0">1</integer_value>
81
</dump_period_in_timesteps>
82
<output_mesh name="CoordinateMesh"/>
86
<real_value rank="0">0</real_value>
89
<real_value rank="0">0.0625</real_value>
91
<nonlinear_iterations>
92
<integer_value rank="0">1</integer_value>
93
</nonlinear_iterations>
95
<real_value rank="0">1</real_value>
101
<real_value rank="0">1</real_value>
103
<vector_field name="GravityDirection" rank="1">
105
<mesh name="CoordinateMesh"/>
106
<value name="WholeMesh">
108
<real_value rank="1" shape="3" dim1="dim">0 0 -1</real_value>
116
<exclude_from_detectors/>
124
</physical_parameters>
125
<material_phase name="Fluid">
126
<vector_field name="Velocity" rank="1">
128
<mesh name="VelocityMesh"/>
129
<equation name="ShallowWater"/>
130
<spatial_discretisation>
131
<discontinuous_galerkin>
135
</discontinuous_galerkin>
136
<conservative_advection>
137
<real_value rank="0">0</real_value>
138
</conservative_advection>
139
</spatial_discretisation>
141
<iterative_method name="preonly"/>
142
<preconditioner name="lu"/>
144
<real_value rank="0">1e-07</real_value>
147
<integer_value rank="0">500</integer_value>
149
<never_ignore_solver_failures/>
154
<initial_condition name="WholeMesh">
156
<string_value lines="20" type="python">def val(X, t):
157
import shallow_water_optimisation_bounds as constants
158
return constants.u_exact(X[0], t)</string_value>
166
</previous_time_step>
172
<include_in_convergence/>
175
<include_in_detectors/>
178
<include_in_steady_state/>
180
<consistent_interpolation/>
183
<scalar_field name="LayerThickness" rank="0">
185
<mesh name="PressureMesh"/>
186
<spatial_discretisation>
187
<continuous_galerkin>
189
<exclude_advection_terms/>
191
</continuous_galerkin>
192
<conservative_advection>
193
<real_value rank="0">0</real_value>
194
</conservative_advection>
195
</spatial_discretisation>
196
<temporal_discretisation>
198
<real_value rank="0">0.5</real_value>
201
<real_value rank="0">1</real_value>
203
</temporal_discretisation>
205
<iterative_method name="preonly"/>
206
<preconditioner name="lu"/>
208
<real_value rank="0">1e-07</real_value>
211
<integer_value rank="0">500</integer_value>
213
<never_ignore_solver_failures/>
214
<cache_solver_context/>
219
<initial_condition name="WholeMesh">
221
<string_value lines="20" type="python">def val(X, t):
222
import shallow_water_optimisation_bounds as constants
223
#return constants.eta_exact(X[0], t)
224
# Instead of prescribing the exact eta we will optimise to it
225
return 0.0</string_value>
228
<mean_layer_thickness>
229
<real_value rank="0">1</real_value>
230
</mean_layer_thickness>
233
<consistent_interpolation/>
236
<scalar_field name="AnalyticalLayerThickness" rank="0">
238
<mesh name="PressureMesh"/>
239
<value name="WholeMesh">
241
<string_value lines="20" type="python">def val(X,t):
242
import shallow_water_optimisation_bounds as constants
244
return constants.eta_exact(x, t)</string_value>
250
<exclude_from_detectors/>
257
<scalar_field name="LayerThicknessError" rank="0">
259
<algorithm name="scalar_difference" source_field_2_type="scalar" source_field_1_name="LayerThickness" source_field_2_name="AnalyticalLayerThickness" material_phase_support="single" source_field_1_type="scalar">
260
<absolute_difference/>
262
<mesh name="PressureMesh"/>
266
<include_in_convergence/>
269
<include_in_detectors/>
272
<include_in_steady_state/>
279
<scalar_field name="InitEta_UpperBound" rank="0">
281
<mesh name="PressureMesh"/>
282
<value name="WholeMesh">
284
<real_value rank="0">1.1</real_value>
290
<exclude_from_detectors/>
297
<scalar_field name="InitEta_LowerBound" rank="0">
299
<mesh name="PressureMesh"/>
300
<value name="WholeMesh">
302
<real_value rank="0">-1.1</real_value>
308
<exclude_from_detectors/>
315
<vector_field name="AnalyticalVelocity" rank="1">
317
<mesh name="VelocityMesh"/>
318
<value name="WholeMesh">
320
<string_value lines="20" type="python">def val(X,t):
321
import shallow_water_optimisation_bounds as constants
323
return constants.u_exact(x, t)</string_value>
331
<exclude_from_detectors/>
338
<vector_field name="VelocityError" rank="1">
340
<algorithm name="vector_difference" source_field_2_type="vector" source_field_1_name="Velocity" source_field_2_name="AnalyticalVelocity" material_phase_support="single" source_field_1_type="vector">
341
<absolute_difference/>
343
<mesh name="VelocityMesh"/>
349
<include_in_convergence/>
352
<include_in_detectors/>
355
<include_in_steady_state/>
364
<functional name="integral_eta_t1">
366
<algorithm name="functional_value">
367
<string_value lines="20" type="python">J = 0.0
368
T = 1.0 # the time at which to evaluate
369
if time < T <= time+dt:
371
eta_prev = states[n-1]["Fluid"].scalar_fields["LayerThickness"]
372
eta = states[n]["Fluid"].scalar_fields["LayerThickness"]
373
eta_exact_prev = states[n-1]["Fluid"].scalar_fields["AnalyticalLayerThickness"]
374
eta_exact = states[n]["Fluid"].scalar_fields["AnalyticalLayerThickness"]
376
# We want to temporally interpolate to evaluate eta at t=1.0
377
alpha = (time + dt - T) / dt
378
assert 0 <= alpha < 1
379
tmp_eta = alpha * (eta_prev.val - eta_exact_prev.val) + (1-alpha) * (eta.val - eta_exact.val)
381
# Now we want to integrate that over space
382
coord = states[0]["Fluid"].vector_fields["Coordinate"]
383
assert eta.element_count == eta_prev.element_count == coord.element_count
384
for ele in range(coord.element_count):
385
t = Transform(ele, coord)
386
shape = eta_prev.ele_shape(ele)
387
mass = t.shape_shape(shape, shape)
388
nodes = eta_prev.ele_nodes(ele)
389
J = J + numpy.dot(tmp_eta[nodes], numpy.dot(mass, tmp_eta[nodes]))</string_value>
395
<functional_dependencies>
396
<algorithm name="functional_dependencies">
397
<string_value lines="20" type="python">def dependencies(times, timestep):
398
if times[0] < 1.0 <= times[1]:
399
return {"Fluid::Coordinate": [0],
400
"Fluid::LayerThickness": [timestep-1, timestep],
401
"Fluid::AnalyticalLayerThickness": [timestep-1, timestep]
404
return {}</string_value>
406
</functional_dependencies>
409
<control name="InitEta">
410
<type name="initial_condition" field_name="Fluid::LayerThickness"/>
412
<upper_bound field_name="Fluid::InitEta_UpperBound"/>
413
<lower_bound field_name="Fluid::InitEta_LowerBound"/>
422
</shallow_water_options>
b'\\ No newline at end of file'