~fluidity-core/fluidity/sea-ice-branch

« back to all changes in this revision

Viewing changes to tests/burgers_mms_diffusion_replay/mms_D.bml

  • Committer: Simon Mouradian
  • Date: 2012-10-19 10:35:59 UTC
  • mfrom: (3520.32.371 fluidity)
  • Revision ID: simon.mouradian06@imperial.ac.uk-20121019103559-y36qa47phc69q8sc
mergeĀ fromĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?xml version='1.0' encoding='utf-8'?>
2
 
<burgers_equation>
3
 
  <simulation_name>
4
 
    <string_value lines="1">mms_diffusion_adjoint_D</string_value>
5
 
  </simulation_name>
6
 
  <geometry>
7
 
    <dimension>
8
 
      <integer_value rank="0">1</integer_value>
9
 
    </dimension>
10
 
    <mesh name="CoordinateMesh">
11
 
      <from_file file_name="mms_D">
12
 
        <format name="triangle"/>
13
 
        <stat>
14
 
          <include_in_stat/>
15
 
        </stat>
16
 
      </from_file>
17
 
    </mesh>
18
 
    <mesh name="VelocityMesh">
19
 
      <from_mesh>
20
 
        <mesh name="CoordinateMesh"/>
21
 
        <stat>
22
 
          <exclude_from_stat/>
23
 
        </stat>
24
 
      </from_mesh>
25
 
    </mesh>
26
 
    <quadrature>
27
 
      <degree>
28
 
        <integer_value rank="0">4</integer_value>
29
 
      </degree>
30
 
    </quadrature>
31
 
  </geometry>
32
 
  <io>
33
 
    <dump_format>vtk</dump_format>
34
 
    <dump_period_in_timesteps>
35
 
      <constant>
36
 
        <integer_value rank="0">1</integer_value>
37
 
      </constant>
38
 
    </dump_period_in_timesteps>
39
 
    <output_mesh name="VelocityMesh"/>
40
 
  </io>
41
 
  <timestepping>
42
 
    <current_time>
43
 
      <real_value rank="0">0.0</real_value>
44
 
    </current_time>
45
 
    <timestep>
46
 
      <real_value rank="0">0.25</real_value>
47
 
    </timestep>
48
 
    <finish_time>
49
 
      <real_value rank="0">10.0</real_value>
50
 
    </finish_time>
51
 
  </timestepping>
52
 
  <material_phase name="Fluid">
53
 
    <scalar_field name="Velocity" rank="0">
54
 
      <prognostic>
55
 
        <mesh name="VelocityMesh"/>
56
 
        <temporal_discretisation>
57
 
          <theta>
58
 
            <real_value rank="0">0.5</real_value>
59
 
          </theta>
60
 
          <relaxation>
61
 
            <real_value rank="0">0.5</real_value>
62
 
          </relaxation>
63
 
        </temporal_discretisation>
64
 
        <solver>
65
 
          <iterative_method name="preonly"/>
66
 
          <preconditioner name="lu"/>
67
 
          <relative_error>
68
 
            <real_value rank="0">1.0e-16</real_value>
69
 
          </relative_error>
70
 
          <absolute_error>
71
 
            <real_value rank="0">1.0e-12</real_value>
72
 
          </absolute_error>
73
 
          <max_iterations>
74
 
            <integer_value rank="0">10000</integer_value>
75
 
          </max_iterations>
76
 
          <never_ignore_solver_failures/>
77
 
          <diagnostics>
78
 
            <monitors/>
79
 
          </diagnostics>
80
 
        </solver>
81
 
        <remove_advection_term/>
82
 
        <initial_condition name="WholeMesh">
83
 
          <python>
84
 
            <string_value lines="20" type="code" language="python">def val(X, t):
85
 
  from math import sin
86
 
  x = X[0]
87
 
  return sin(x+t)</string_value>
88
 
          </python>
89
 
        </initial_condition>
90
 
        <boundary_conditions name="bc">
91
 
          <surface_ids>
92
 
            <integer_value shape="2" rank="1">1 2</integer_value>
93
 
          </surface_ids>
94
 
          <type name="dirichlet">
95
 
            <python>
96
 
              <string_value lines="20" type="code" language="python">def val(X, t):
97
 
  from math import sin
98
 
  x = X[0]
99
 
  return sin(x+t)</string_value>
100
 
            </python>
101
 
          </type>
102
 
        </boundary_conditions>
103
 
        <viscosity>
104
 
          <real_value rank="0">1.0</real_value>
105
 
        </viscosity>
106
 
        <stat/>
107
 
        <adjoint_storage>
108
 
          <exists_in_both/>
109
 
        </adjoint_storage>
110
 
        <scalar_field name="Source" rank="0">
111
 
          <prescribed>
112
 
            <value name="WholeMesh">
113
 
              <python>
114
 
                <string_value lines="20" type="code" language="python">def val(X, t):
115
 
  from math import sin, cos
116
 
  x = X[0]
117
 
  return sin(x+t) + cos(x+t)</string_value>
118
 
              </python>
119
 
            </value>
120
 
          </prescribed>
121
 
        </scalar_field>
122
 
      </prognostic>
123
 
    </scalar_field>
124
 
    <scalar_field name="AnalyticalSolution" rank="0">
125
 
      <prescribed>
126
 
        <mesh name="VelocityMesh"/>
127
 
        <value name="WholeMesh">
128
 
          <python>
129
 
            <string_value lines="20" type="code" language="python">def val(X, t):
130
 
  from math import sin
131
 
  x = X[0]
132
 
  return sin(x+t)</string_value>
133
 
          </python>
134
 
        </value>
135
 
        <adjoint_storage>
136
 
          <exists_in_forward/>
137
 
        </adjoint_storage>
138
 
      </prescribed>
139
 
    </scalar_field>
140
 
    <scalar_field name="Error" rank="0">
141
 
      <diagnostic>
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)
148
 
 
149
 
for i in range(field.node_count):
150
 
  field.set(i, soln.node_val(i) + constant - exact.node_val(i))</string_value>
151
 
        </algorithm>
152
 
        <stat/>
153
 
        <adjoint_storage>
154
 
          <exists_in_forward/>
155
 
        </adjoint_storage>
156
 
      </diagnostic>
157
 
    </scalar_field>
158
 
  </material_phase>
159
 
  <adjoint>
160
 
    <functional name="time_integral_ad">
161
 
      <functional_value>
162
 
        <algorithm name="functional_value">
163
 
          <string_value lines="20" type="code" language="python">import numpy
164
 
 
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"]
168
 
int_u = 0.0
169
 
int_u_prev = 0.0
170
 
 
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)))
177
 
 
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>
183
 
        </algorithm>
184
 
        <reduction>
185
 
          <sum/>
186
 
        </reduction>
187
 
      </functional_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>
193
 
        </algorithm>
194
 
      </functional_dependencies>
195
 
    </functional>
196
 
    <debug>
197
 
      <replay_forward_run/>
198
 
    </debug>
199
 
  </adjoint>
200
 
</burgers_equation>