1
<?xml version='1.0' encoding='utf-8'?>
4
<string_value lines="1">mms_diffusion_adjoint_C</string_value>
8
<integer_value rank="0">1</integer_value>
10
<mesh name="CoordinateMesh">
11
<from_file file_name="mms_C">
12
<format name="triangle"/>
18
<mesh name="VelocityMesh">
20
<mesh name="CoordinateMesh"/>
28
<integer_value rank="0">4</integer_value>
33
<dump_format>vtk</dump_format>
34
<dump_period_in_timesteps>
36
<integer_value rank="0">1</integer_value>
38
</dump_period_in_timesteps>
39
<output_mesh name="VelocityMesh"/>
43
<real_value rank="0">0.0</real_value>
46
<real_value rank="0">0.5</real_value>
49
<real_value rank="0">10.0</real_value>
52
<material_phase name="Fluid">
53
<scalar_field name="Velocity" rank="0">
55
<mesh name="VelocityMesh"/>
56
<temporal_discretisation>
58
<real_value rank="0">0.5</real_value>
61
<real_value rank="0">0.5</real_value>
63
</temporal_discretisation>
65
<iterative_method name="preonly"/>
66
<preconditioner name="lu"/>
68
<real_value rank="0">1.0e-16</real_value>
71
<real_value rank="0">1.0e-12</real_value>
74
<integer_value rank="0">10000</integer_value>
76
<never_ignore_solver_failures/>
81
<remove_advection_term/>
82
<initial_condition name="WholeMesh">
84
<string_value lines="20" type="code" language="python">def val(X, t):
87
return sin(x+t)</string_value>
90
<boundary_conditions name="bc">
92
<integer_value shape="2" rank="1">1 2</integer_value>
94
<type name="dirichlet">
96
<string_value lines="20" type="code" language="python">def val(X, t):
99
return sin(x+t)</string_value>
102
</boundary_conditions>
104
<real_value rank="0">1.0</real_value>
110
<scalar_field name="Source" rank="0">
112
<value name="WholeMesh">
114
<string_value lines="20" type="code" language="python">def val(X, t):
115
from math import sin, cos
117
return sin(x+t) + cos(x+t)</string_value>
124
<scalar_field name="AnalyticalSolution" rank="0">
126
<mesh name="VelocityMesh"/>
127
<value name="WholeMesh">
129
<string_value lines="20" type="code" language="python">def val(X, t):
132
return sin(x+t)</string_value>
140
<scalar_field name="Error" rank="0">
142
<mesh name="VelocityMesh"/>
143
<algorithm name="scalar_python_diagnostic" material_phase_support="single">
144
<string_value lines="20" type="code" language="python">soln = state.scalar_fields["Velocity"]
145
exact = state.scalar_fields["AnalyticalSolution"]
146
# The problem is only specified up to a constant, so add on the constant
147
constant = exact.node_val(0) - soln.node_val(0)
149
for i in range(field.node_count):
150
field.set(i, soln.node_val(i) + constant - exact.node_val(i))</string_value>
160
<functional name="time_integral_ad">
162
<algorithm name="functional_value">
163
<string_value lines="20" type="code" language="python">import numpy
165
coord = states[0]["Fluid"].vector_fields["Coordinate"]
166
u = states[n]["Fluid"].scalar_fields["Velocity"]
167
u_prev = states[n-1]["Fluid"].scalar_fields["Velocity"]
171
for ele in range(coord.element_count):
172
t = Transform(ele, coord)
173
shape = u.ele_shape(ele)
174
mass = t.shape_shape(shape, shape)
175
int_u = int_u + sum(numpy.dot(mass, u.ele_val(ele)))
176
int_u_prev = int_u_prev + sum(numpy.dot(mass, u_prev.ele_val(ele)))
178
J = dt * (int_u + int_u_prev) * 0.5
179
#if not hasattr(J, "nominal_value"):
180
# print "J(%d): %s" % (n, J)
181
# print "int(u[%d]): %s" % (n, int_u)
182
# print "int(u[%d]): %s" % (n-1, int_u_prev)</string_value>
188
<functional_dependencies>
189
<algorithm name="functional_dependencies">
190
<string_value lines="20" type="code" language="python">def dependencies(times, timestep):
191
return {"Fluid::Coordinate": [0],
192
"Fluid::Velocity": [timestep-1, timestep]}</string_value>
194
</functional_dependencies>
197
<replay_forward_run/>