~grm08/fluidity/hilbert-for-pyop2

« back to all changes in this revision

Viewing changes to schemas/adaptivity_options.rng

  • Committer: tmb1
  • Date: 2010-10-27 12:18:35 UTC
  • Revision ID: svn-v4:5bf5533e-7014-46e3-b1bb-cce4b9d03719:trunk:2279
Adding a new schemas/ directory following discussion at the dev meeting and
moving all *.rn[c|g] files into it. I'm no schema expert so this may well
require various changes elsewhere to maintain consistency; please could those
who know what they're doing make these changes!

Patrick in particular - please update spud accordingly.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="UTF-8"?>
 
2
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
 
3
  <define name="adaptivity_preprocessing">
 
4
    <optional>
 
5
      <element name="preprocessing">
 
6
        <a:documentation>Occasionally, it is desirable to apply operations or filters
 
7
to fields before using them for the purposes of adaptivity.</a:documentation>
 
8
        <element name="helmholtz_smoother">
 
9
          <a:documentation>Invert a helmholtz operator to smooth out the field
 
10
before using it to adapt. This can help with noisy
 
11
fields.</a:documentation>
 
12
          <element name="smoothing_length_scale">
 
13
            <ref name="real_dim_symmetric_tensor"/>
 
14
          </element>
 
15
          <element name="solver">
 
16
            <ref name="linear_solver_options_sym"/>
 
17
          </element>
 
18
        </element>
 
19
      </element>
 
20
    </optional>
 
21
  </define>
 
22
  <define name="adaptivity_options_prognostic_scalar_field">
 
23
    <optional>
 
24
      <element name="adaptivity_options">
 
25
        <choice>
 
26
          <element name="absolute_measure">
 
27
            <a:documentation>When specifying absolute measure
 
28
one specifies the absolute interpolation 
 
29
error in the units of the field that is 
 
30
being adapted, e.g. you can specify
 
31
the error to be 1.3 units </a:documentation>
 
32
            <attribute name="replaces">
 
33
              <value>ADOPTT = 0</value>
 
34
            </attribute>
 
35
            <element name="scalar_field">
 
36
              <attribute name="rank">
 
37
                <value>0</value>
 
38
              </attribute>
 
39
              <attribute name="name">
 
40
                <value>InterpolationErrorBound</value>
 
41
              </attribute>
 
42
              <attribute name="replaces">
 
43
                <value>ADWEIT</value>
 
44
              </attribute>
 
45
              <element name="prescribed">
 
46
                <ref name="prescribed_scalar_field_no_adapt"/>
 
47
              </element>
 
48
            </element>
 
49
            <optional>
 
50
              <element name="p_norm">
 
51
                <a:documentation>By default the interpolation error controlled is the L_inf
 
52
norm. Use this option to specify an alternative L_p norm. See
 
53
Chen Sun and Zu, Mathematics of Computation, Volume 76,
 
54
Number 257, January 2007, pp. 179-204.</a:documentation>
 
55
                <ref name="integer"/>
 
56
              </element>
 
57
            </optional>
 
58
          </element>
 
59
          <element name="relative_measure">
 
60
            <a:documentation>When specifying relative measure
 
61
one specifies the interpolation error
 
62
relative to the field that is
 
63
being adapted, e.g. you can specify
 
64
the error to be 5% (i.e. 0.05)</a:documentation>
 
65
            <attribute name="replaces">
 
66
              <value>ADOPTT = 1</value>
 
67
            </attribute>
 
68
            <element name="scalar_field">
 
69
              <attribute name="rank">
 
70
                <value>0</value>
 
71
              </attribute>
 
72
              <attribute name="name">
 
73
                <value>InterpolationErrorBound</value>
 
74
              </attribute>
 
75
              <attribute name="replaces">
 
76
                <value>ADADOT</value>
 
77
              </attribute>
 
78
              <element name="prescribed">
 
79
                <ref name="prescribed_scalar_field_no_adapt"/>
 
80
              </element>
 
81
            </element>
 
82
            <element name="tolerance">
 
83
              <a:documentation>The relative Hessian is calculated according to:
 
84
 
 
85
  Q = H / max{ |psi|, psi_min}
 
86
 
 
87
where H is the Hessian, psi is the field value and
 
88
psi_min is the tolerance. The tolerance prevents
 
89
division by zero errors.
 
90
 
 
91
Source: Fluidity/ICOM manual draft version 1.2</a:documentation>
 
92
              <attribute name="replaces">
 
93
                <value>ADATOT</value>
 
94
              </attribute>
 
95
              <ref name="real"/>
 
96
            </element>
 
97
          </element>
 
98
          <element name="anisotropic_zienkiewicz_zhu">
 
99
            <a:documentation>Adapt using the anisotropic strategy of 
 
100
Formaggia, Perotto, Micheletti.
 
101
Rather than taking two derivatives
 
102
and deriving the anisotropic information,
 
103
this approach computes an anisotropic Zienkiewicz-Zhu
 
104
error estimator for each element. The approach then
 
105
optimises the element orientation and length scales
 
106
to equidistribute the estimated error.</a:documentation>
 
107
            <element name="tau">
 
108
              <a:documentation>Tau is an anisotropic estimate for the H1 seminorm of the
 
109
error. This estimator is efficient and reliable, under the
 
110
caveat that the initial mesh is sufficiently fine so as to
 
111
prevent data oscillation. (Micheletti &amp; Perotto, 2006)
 
112
Typically, tau will be ~= 6-8 * |e|_H1.</a:documentation>
 
113
              <ref name="real"/>
 
114
            </element>
 
115
          </element>
 
116
        </choice>
 
117
        <ref name="adaptivity_preprocessing"/>
 
118
      </element>
 
119
    </optional>
 
120
  </define>
 
121
  <define name="adaptivity_options_scalar_field.adaptivity_options">
 
122
    <choice>
 
123
      <element name="absolute_measure">
 
124
        <a:documentation>When specifying absolute measure
 
125
one specifies the absolute interpolation 
 
126
error in the units of the field that is 
 
127
being adapted, e.g. you can specify
 
128
the error to be 1.3 units </a:documentation>
 
129
        <attribute name="replaces">
 
130
          <value>ADOPTT = 0</value>
 
131
        </attribute>
 
132
        <element name="scalar_field">
 
133
          <attribute name="rank">
 
134
            <value>0</value>
 
135
          </attribute>
 
136
          <attribute name="name">
 
137
            <value>InterpolationErrorBound</value>
 
138
          </attribute>
 
139
          <attribute name="replaces">
 
140
            <value>ADWEIT</value>
 
141
          </attribute>
 
142
          <element name="prescribed">
 
143
            <ref name="prescribed_scalar_field_no_adapt"/>
 
144
          </element>
 
145
        </element>
 
146
        <optional>
 
147
          <element name="p_norm">
 
148
            <a:documentation>By default the interpolation error controlled is the L_inf
 
149
norm. Use this option to specify an alternative L_p norm. See
 
150
Chen Sun and Zu, Mathematics of Computation, Volume 76,
 
151
Number 257, January 2007, pp. 179-204.</a:documentation>
 
152
            <ref name="integer"/>
 
153
          </element>
 
154
        </optional>
 
155
      </element>
 
156
      <element name="relative_measure">
 
157
        <a:documentation>When specifying relative measure
 
158
one specifies the interpolation error
 
159
relative to the field that is
 
160
being adapted, e.g. you can specify
 
161
the error to be 5% (i.e. 0.05)</a:documentation>
 
162
        <attribute name="replaces">
 
163
          <value>ADOPTT = 1</value>
 
164
        </attribute>
 
165
        <element name="scalar_field">
 
166
          <attribute name="rank">
 
167
            <value>0</value>
 
168
          </attribute>
 
169
          <attribute name="name">
 
170
            <value>InterpolationErrorBound</value>
 
171
          </attribute>
 
172
          <attribute name="replaces">
 
173
            <value>ADADOT</value>
 
174
          </attribute>
 
175
          <element name="prescribed">
 
176
            <ref name="prescribed_scalar_field_no_adapt"/>
 
177
          </element>
 
178
        </element>
 
179
        <element name="tolerance">
 
180
          <a:documentation>The relative Hessian is calculated according to:
 
181
 
 
182
  Q = H / max{ |psi|, psi_min}
 
183
 
 
184
where H is the Hessian, psi is the field value and
 
185
psi_min is the tolerance. The tolerance prevents
 
186
division by zero errors.
 
187
 
 
188
Source: Fluidity/ICOM manual draft version 1.2</a:documentation>
 
189
          <attribute name="replaces">
 
190
            <value>ADATOT</value>
 
191
          </attribute>
 
192
          <ref name="real"/>
 
193
        </element>
 
194
      </element>
 
195
      <element name="anisotropic_zienkiewicz_zhu">
 
196
        <a:documentation>Adapt using the anisotropic strategy of 
 
197
Formaggia, Perotto, Micheletti.
 
198
Rather than taking two derivatives
 
199
and deriving the anisotropic information,
 
200
this approach computes an anisotropic Zienkiewicz-Zhu
 
201
error estimator for each element. The approach then
 
202
optimises the element orientation and length scales
 
203
to equidistribute the estimated error.</a:documentation>
 
204
        <element name="tau">
 
205
          <a:documentation>Tau is an anisotropic estimate for the H1 seminorm of the
 
206
error. This estimator is efficient and reliable, under the
 
207
caveat that the initial mesh is sufficiently fine so as to
 
208
prevent data oscillation. (Micheletti &amp; Perotto, 2006)
 
209
Typically, tau will be ~= 6-8 * |e|_H1.</a:documentation>
 
210
          <ref name="real"/>
 
211
        </element>
 
212
      </element>
 
213
    </choice>
 
214
  </define>
 
215
  <define name="adaptivity_options_scalar_field">
 
216
    <optional>
 
217
      <element name="adaptivity_options">
 
218
        <ref name="adaptivity_options_scalar_field.adaptivity_options"/>
 
219
        <ref name="adaptivity_preprocessing"/>
 
220
      </element>
 
221
    </optional>
 
222
  </define>
 
223
  <define name="adaptivity_options_prognostic_vector_field">
 
224
    <optional>
 
225
      <element name="adaptivity_options">
 
226
        <a:documentation>Adaptivity weights</a:documentation>
 
227
        <choice>
 
228
          <element name="absolute_measure">
 
229
            <a:documentation>When specifying absolute measure
 
230
one specifies the absolute interpolation 
 
231
error in the units of the field that is 
 
232
being adapted, e.g. you can specify
 
233
the error to be 1.3 units </a:documentation>
 
234
            <element name="vector_field">
 
235
              <attribute name="rank">
 
236
                <value>1</value>
 
237
              </attribute>
 
238
              <attribute name="name">
 
239
                <value>InterpolationErrorBound</value>
 
240
              </attribute>
 
241
              <attribute name="replaces">
 
242
                <value>ADWEIU ADWEIV ADWEIW</value>
 
243
              </attribute>
 
244
              <element name="prescribed">
 
245
                <ref name="prescribed_vector_field_no_adapt"/>
 
246
              </element>
 
247
            </element>
 
248
            <optional>
 
249
              <element name="p_norm">
 
250
                <a:documentation>By default the interpolation error controlled is the L_inf
 
251
norm. Use this option to specify an alternative L_p norm. See
 
252
Chen Sun and Zu, Mathematics of Computation, Volume 76,
 
253
Number 257, January 2007, pp. 179-204.</a:documentation>
 
254
                <ref name="integer"/>
 
255
              </element>
 
256
            </optional>
 
257
          </element>
 
258
          <element name="relative_measure">
 
259
            <a:documentation>When specifying relative measure
 
260
one specifies the interpolation error
 
261
relative to the field that is
 
262
being adapted, e.g. you can specify
 
263
the error to be 5% (i.e. 0.05)</a:documentation>
 
264
            <element name="vector_field">
 
265
              <attribute name="rank">
 
266
                <value>1</value>
 
267
              </attribute>
 
268
              <attribute name="name">
 
269
                <value>InterpolationErrorBound</value>
 
270
              </attribute>
 
271
              <attribute name="replaces">
 
272
                <value>ADATOU ADATOV ADATOW</value>
 
273
              </attribute>
 
274
              <element name="prescribed">
 
275
                <ref name="prescribed_vector_field_no_adapt"/>
 
276
              </element>
 
277
            </element>
 
278
            <element name="tolerance">
 
279
              <a:documentation>The relative Hessian is calculated according to:
 
280
 
 
281
  Q = H / max{ |psi|, psi_min}
 
282
 
 
283
where H is the Hessian, psi is the field value and
 
284
psi_min is the tolerance. The tolerance prevents
 
285
division by zero errors.
 
286
 
 
287
Source: Fluidity/ICOM manual draft version 1.2</a:documentation>
 
288
              <ref name="real_dim_vector"/>
 
289
            </element>
 
290
          </element>
 
291
        </choice>
 
292
        <ref name="adaptivity_preprocessing"/>
 
293
      </element>
 
294
    </optional>
 
295
  </define>
 
296
  <define name="adaptivity_options_vector_field">
 
297
    <optional>
 
298
      <element name="adaptivity_options">
 
299
        <a:documentation>Adaptivity weights</a:documentation>
 
300
        <choice>
 
301
          <element name="absolute_measure">
 
302
            <a:documentation>When specifying absolute measure
 
303
one specifies the absolute interpolation 
 
304
error in the units of the field that is 
 
305
being adapted, e.g. you can specify
 
306
the error to be 1.3 units </a:documentation>
 
307
            <element name="vector_field">
 
308
              <attribute name="rank">
 
309
                <value>1</value>
 
310
              </attribute>
 
311
              <attribute name="name">
 
312
                <value>InterpolationErrorBound</value>
 
313
              </attribute>
 
314
              <attribute name="replaces">
 
315
                <value>ADWEIU ADWEIV ADWEIW</value>
 
316
              </attribute>
 
317
              <element name="prescribed">
 
318
                <ref name="prescribed_vector_field_no_adapt"/>
 
319
              </element>
 
320
            </element>
 
321
            <optional>
 
322
              <element name="p_norm">
 
323
                <a:documentation>By default the interpolation error controlled is the L_inf
 
324
norm. Use this option to specify an alternative L_p norm. See
 
325
Chen Sun and Zu, Mathematics of Computation, Volume 76,
 
326
Number 257, January 2007, pp. 179-204.</a:documentation>
 
327
                <ref name="integer"/>
 
328
              </element>
 
329
            </optional>
 
330
          </element>
 
331
          <element name="relative_measure">
 
332
            <a:documentation>When specifying relative measure
 
333
one specifies the interpolation error
 
334
relative to the field that is
 
335
being adapted, e.g. you can specify
 
336
the error to be 5% (i.e. 0.05)</a:documentation>
 
337
            <element name="vector_field">
 
338
              <attribute name="rank">
 
339
                <value>1</value>
 
340
              </attribute>
 
341
              <attribute name="name">
 
342
                <value>InterpolationErrorBound</value>
 
343
              </attribute>
 
344
              <attribute name="replaces">
 
345
                <value>ADATOU ADATOV ADATOW</value>
 
346
              </attribute>
 
347
              <element name="prescribed">
 
348
                <ref name="prescribed_vector_field_no_adapt"/>
 
349
              </element>
 
350
            </element>
 
351
            <element name="tolerance">
 
352
              <a:documentation>The relative Hessian is calculated according to:
 
353
 
 
354
  Q = H / max{ |psi|, psi_min}
 
355
 
 
356
where H is the Hessian, psi is the field value and
 
357
psi_min is the tolerance. The tolerance prevents
 
358
division by zero errors.
 
359
 
 
360
Source: Fluidity/ICOM manual draft version 1.2</a:documentation>
 
361
              <ref name="real_dim_vector"/>
 
362
            </element>
 
363
          </element>
 
364
        </choice>
 
365
        <ref name="adaptivity_preprocessing"/>
 
366
      </element>
 
367
    </optional>
 
368
  </define>
 
369
  <define name="adaptivity_options_prognostic_tensor_field">
 
370
    <optional>
 
371
      <element name="adaptivity_options">
 
372
        <a:documentation>Adaptivity weights</a:documentation>
 
373
        <choice>
 
374
          <element name="absolute_measure">
 
375
            <a:documentation>When specifying absolute measure
 
376
one specifies the absolute interpolation 
 
377
error in the units of the field that is 
 
378
being adapted, e.g. you can specify
 
379
the error to be 1.3 units </a:documentation>
 
380
            <element name="tensor_field">
 
381
              <attribute name="rank">
 
382
                <value>2</value>
 
383
              </attribute>
 
384
              <attribute name="name">
 
385
                <value>InterpolationErrorBound</value>
 
386
              </attribute>
 
387
              <element name="prescribed">
 
388
                <ref name="prescribed_values_tensor_field"/>
 
389
              </element>
 
390
            </element>
 
391
            <optional>
 
392
              <element name="p_norm">
 
393
                <a:documentation>By default the interpolation error controlled is the L_inf
 
394
norm. Use this option to specify an alternative L_p norm. See
 
395
Chen Sun and Zu, Mathematics of Computation, Volume 76,
 
396
Number 257, January 2007, pp. 179-204.</a:documentation>
 
397
                <ref name="integer"/>
 
398
              </element>
 
399
            </optional>
 
400
          </element>
 
401
          <element name="relative_measure">
 
402
            <a:documentation>When specifying relative measure
 
403
one specifies the interpolation error
 
404
relative to the field that is
 
405
being adapted, e.g. you can specify
 
406
the error to be 5% (i.e. 0.05)</a:documentation>
 
407
            <element name="tensor_field">
 
408
              <attribute name="rank">
 
409
                <value>2</value>
 
410
              </attribute>
 
411
              <attribute name="name">
 
412
                <value>InterpolationErrorBound</value>
 
413
              </attribute>
 
414
              <element name="prescribed">
 
415
                <ref name="prescribed_values_tensor_field"/>
 
416
              </element>
 
417
            </element>
 
418
            <element name="tolerance">
 
419
              <a:documentation>The relative Hessian is calculated according to:
 
420
 
 
421
  Q = H / max{ |psi|, psi_min}
 
422
 
 
423
where H is the Hessian, psi is the field value and
 
424
psi_min is the tolerance. The tolerance prevents
 
425
division by zero errors.
 
426
 
 
427
Source: Fluidity/ICOM manual draft version 1.2</a:documentation>
 
428
              <ref name="real_dim_tensor"/>
 
429
            </element>
 
430
          </element>
 
431
        </choice>
 
432
        <ref name="adaptivity_preprocessing"/>
 
433
      </element>
 
434
    </optional>
 
435
  </define>
 
436
  <define name="adaptivity_options_tensor_field">
 
437
    <optional>
 
438
      <element name="adaptivity_options">
 
439
        <a:documentation>Adaptivity weights</a:documentation>
 
440
        <choice>
 
441
          <element name="absolute_measure">
 
442
            <a:documentation>When specifying absolute measure
 
443
one specifies the absolute interpolation 
 
444
error in the units of the field that is 
 
445
being adapted, e.g. you can specify
 
446
the error to be 1.3 units </a:documentation>
 
447
            <element name="tensor_field">
 
448
              <attribute name="rank">
 
449
                <value>2</value>
 
450
              </attribute>
 
451
              <attribute name="name">
 
452
                <value>InterpolationErrorBound</value>
 
453
              </attribute>
 
454
              <element name="prescribed">
 
455
                <ref name="prescribed_values_tensor_field"/>
 
456
              </element>
 
457
            </element>
 
458
            <optional>
 
459
              <element name="p_norm">
 
460
                <a:documentation>By default the interpolation error controlled is the L_inf
 
461
norm. Use this option to specify an alternative L_p norm. See
 
462
Chen Sun and Zu, Mathematics of Computation, Volume 76,
 
463
Number 257, January 2007, pp. 179-204.</a:documentation>
 
464
                <ref name="integer"/>
 
465
              </element>
 
466
            </optional>
 
467
          </element>
 
468
          <element name="relative_measure">
 
469
            <a:documentation>When specifying relative measure
 
470
one specifies the interpolation error
 
471
relative to the field that is
 
472
being adapted, e.g. you can specify
 
473
the error to be 5% (i.e. 0.05)</a:documentation>
 
474
            <element name="tensor_field">
 
475
              <attribute name="rank">
 
476
                <value>2</value>
 
477
              </attribute>
 
478
              <attribute name="name">
 
479
                <value>InterpolationErrorBound</value>
 
480
              </attribute>
 
481
              <element name="prescribed">
 
482
                <ref name="prescribed_values_tensor_field"/>
 
483
              </element>
 
484
            </element>
 
485
            <element name="tolerance">
 
486
              <a:documentation>The relative Hessian is calculated according to:
 
487
 
 
488
  Q = H / max{ |psi|, psi_min}
 
489
 
 
490
where H is the Hessian, psi is the field value and
 
491
psi_min is the tolerance. The tolerance prevents
 
492
division by zero errors.
 
493
 
 
494
Source: Fluidity/ICOM manual draft version 1.2</a:documentation>
 
495
              <ref name="real_dim_tensor"/>
 
496
            </element>
 
497
          </element>
 
498
        </choice>
 
499
        <ref name="adaptivity_preprocessing"/>
 
500
      </element>
 
501
    </optional>
 
502
  </define>
 
503
  <define name="hr_adaptivity">
 
504
    <element name="hr_adaptivity">
 
505
      <a:documentation>Anisotropic mesh hr-adaptivity</a:documentation>
 
506
      <attribute name="replaces">
 
507
        <value>ADMESH</value>
 
508
      </attribute>
 
509
      <choice>
 
510
        <element name="period">
 
511
          <a:documentation>Time interval (in simulation time) when mesh adaptivity performed.
 
512
 
 
513
DO NOT SET THIS EQUAL TO OR LESS THAN ONE TIME-STEP SMALLER
 
514
THAN YOUR DUMP PERIOD BECAUSE ALL YOUR DIAGNOSTIC FIELDS WILL
 
515
APPEAR AS ZERO OR JUNK
 
516
DIAGNOSTIC FIELDS GET ZEROED AFTER AN ADAPT
 
517
 
 
518
Usually set to 10-20 times the timestep.</a:documentation>
 
519
          <attribute name="replaces">
 
520
            <value>TIMMES</value>
 
521
          </attribute>
 
522
          <ref name="real"/>
 
523
        </element>
 
524
        <element name="period_in_timesteps">
 
525
          <a:documentation>Adapt period in timesteps.</a:documentation>
 
526
          <ref name="integer"/>
 
527
        </element>
 
528
      </choice>
 
529
      <optional>
 
530
        <element name="cpu_period">
 
531
          <a:documentation>Time interval (in cpu time) when mesh adaptivity performed
 
532
Manual suggests disabling this option.</a:documentation>
 
533
          <attribute name="replaces">
 
534
            <value>CPUMES</value>
 
535
          </attribute>
 
536
          <ref name="real"/>
 
537
        </element>
 
538
      </optional>
 
539
      <optional>
 
540
        <element name="minimum_number_of_nodes">
 
541
          <a:documentation>The minimum number of nodes this simulation may use.
 
542
In parallel, by default, this is the global minimum number of nodes.
 
543
 
 
544
If the mesh adaptivity algorithm wants to place fewer nodes
 
545
than this, the desired mesh is refined everywhere in space
 
546
until it will exceed this limit. This option should generally
 
547
only be used if a specified node count is being targetted.
 
548
Default value: 0</a:documentation>
 
549
          <optional>
 
550
            <element name="per_process">
 
551
              <a:documentation>Define minimum_number_of_nodes to be the minimum number of
 
552
nodes per process (rather than the global minimum number of
 
553
nodes).</a:documentation>
 
554
              <ref name="comment"/>
 
555
            </element>
 
556
          </optional>
 
557
          <ref name="integer"/>
 
558
        </element>
 
559
      </optional>
 
560
      <element name="maximum_number_of_nodes">
 
561
        <a:documentation>The maximum number of nodes this simulation may use.
 
562
In parallel, by default, this is the global maximum number of nodes.
 
563
 
 
564
If the mesh adaptivity algorithm wants to place more
 
565
nodes than this, the desired mesh is coarsened
 
566
everywhere in space until it will fit within this limit.
 
567
In general, the error tolerances should be set so that
 
568
this is never reached; it should only be a safety catch.
 
569
A typical value is 100000.
 
570
 
 
571
When using vertically_structured_adaptivity this indicates the 
 
572
maximum number of nodes in the horizontal mesh, i.e. the number
 
573
of nodes in the full mesh will be much bigger and depends on the 
 
574
number of layers specified, or if using inhomogenous_vertical_resolution
 
575
on the resolution produced by the vertical adaptivity step.</a:documentation>
 
576
        <attribute name="replaces">
 
577
          <value>MXNODS</value>
 
578
        </attribute>
 
579
        <optional>
 
580
          <element name="per_process">
 
581
            <a:documentation>Define maximum_number_of_nodes to be the maximum number of
 
582
nodes per process (rather than the global maximum number of
 
583
nodes).</a:documentation>
 
584
            <ref name="comment"/>
 
585
          </element>
 
586
        </optional>
 
587
        <ref name="integer"/>
 
588
      </element>
 
589
      <optional>
 
590
        <element name="max_node_increase">
 
591
          <a:documentation>The maximum ratio by which the number of nodes is allowed to
 
592
increase in an adapt. e.g., a value of 1.1 indicates that the
 
593
number of nodes may be increased by at most 10%.</a:documentation>
 
594
          <ref name="real"/>
 
595
        </element>
 
596
      </optional>
 
597
      <optional>
 
598
        <element name="node_locking">
 
599
          <a:documentation>Enable to lock nodes in the mesh.</a:documentation>
 
600
          <element name="python">
 
601
            <a:documentation>Python function defining nodes to lock. Return 0 for free
 
602
nodes, and non-zero for locked nodes. Functions should be
 
603
of the form:
 
604
 
 
605
 def val(x, t):
 
606
    # Function code
 
607
    return # Return value
 
608
 
 
609
The return value must be an integer.</a:documentation>
 
610
            <ref name="python_code"/>
 
611
          </element>
 
612
          <ref name="comment"/>
 
613
        </element>
 
614
      </optional>
 
615
      <optional>
 
616
        <element name="functional_tolerance">
 
617
          <a:documentation>Specifies the minimum element functional value for which elements
 
618
are considered for adaptivity. For the Pain et al 2001 functional,
 
619
ideal tetrahdera have a functional value of 0.0. A functional value
 
620
of 0.5 corresponds to a tetrehedron with: unit edge lengths and
 
621
and in-sphere radius of 0.3, or alternatively unit in-sphere radius,
 
622
five edges of unit length and a single edge of length 2
 
623
(all measured in metric space).
 
624
 
 
625
The minimum permitted value is 0.15 - the value supplied to
 
626
libadaptivity is max(abs(user value), 0.15).
 
627
 
 
628
Default value if not specified: 0.15</a:documentation>
 
629
          <attribute name="replaces">
 
630
            <value>MESTP1</value>
 
631
          </attribute>
 
632
          <ref name="real"/>
 
633
        </element>
 
634
      </optional>
 
635
      <ref name="gradation_options_full"/>
 
636
      <optional>
 
637
        <element name="metric_advection">
 
638
          <a:documentation>Metric advection algorithm.
 
639
By advecting the metric with the flow velocity,
 
640
we can push mesh resolution ahead of the flow dynamics,
 
641
rather than always lagging behind.</a:documentation>
 
642
          <element name="spatial_discretisation">
 
643
            <a:documentation>Spatial discretisation options</a:documentation>
 
644
            <element name="control_volumes">
 
645
              <ref name="standard_control_volume_options"/>
 
646
            </element>
 
647
            <element name="conservative_advection">
 
648
              <a:documentation>Conservative discretisation of field advection equation
 
649
 TBETA=1. -- conservative (divergence form)
 
650
 TBETA=0. -- non-conservative
 
651
 0. &lt; TBETA &lt; 1.</a:documentation>
 
652
              <attribute name="replaces">
 
653
                <value>TBETA, DEFALT (TBETA = 0.0)</value>
 
654
              </attribute>
 
655
              <ref name="real"/>
 
656
            </element>
 
657
          </element>
 
658
          <element name="temporal_discretisation">
 
659
            <element name="theta">
 
660
              <a:documentation>Implicit/explicit control (TTHETA)
 
661
 =0.  -- explicit
 
662
 =0.5 -- Crank-Nicolson
 
663
 =1.  -- implicit</a:documentation>
 
664
              <attribute name="replaces">
 
665
                <value>TTHETA, DEFALT (TTHETA = 0.5)</value>
 
666
              </attribute>
 
667
              <ref name="real"/>
 
668
            </element>
 
669
            <choice>
 
670
              <element name="maximum_courant_number_per_subcycle">
 
671
                <a:documentation>Use subcycling to advect the metric.
 
672
 
 
673
Specify the maximum courant number per subcycle.</a:documentation>
 
674
                <ref name="real"/>
 
675
                <ref name="field_based_cfl_number_options"/>
 
676
              </element>
 
677
              <element name="number_advection_subcycles">
 
678
                <a:documentation>Use subcycling to advect the metric.
 
679
 
 
680
Specify the number of subcycles.</a:documentation>
 
681
                <ref name="integer"/>
 
682
              </element>
 
683
            </choice>
 
684
            <optional>
 
685
              <element name="scale_advection_time">
 
686
                <a:documentation>Scale the time period over which the metric is
 
687
advected by this factor.
 
688
 
 
689
Default is 1.1</a:documentation>
 
690
                <ref name="real"/>
 
691
              </element>
 
692
            </optional>
 
693
            <element name="control_volumes">
 
694
              <a:documentation>Temporal discretisation options for the control volume discretisation</a:documentation>
 
695
              <optional>
 
696
                <element name="number_advection_iterations">
 
697
                  <a:documentation>Number of iterations within an advection solve.
 
698
This increases the accuracy of the face values and ensures that
 
699
the pivoted solution is cancelled out.
 
700
Defaults to 1 if unselected.</a:documentation>
 
701
                  <attribute name="replaces">
 
702
                    <value>INT(ABS(NDISOT)/10)</value>
 
703
                  </attribute>
 
704
                  <ref name="integer"/>
 
705
                </element>
 
706
              </optional>
 
707
              <optional>
 
708
                <element name="limit_theta">
 
709
                  <a:documentation>If not active then the theta specified above will be used.
 
710
Otherwise use variable limited theta on individual faces.</a:documentation>
 
711
                  <attribute name="replaces">
 
712
                    <value>MOD(INT(ABS(NDISOT)/1),10) = 1,3,5,7,9 (odd)</value>
 
713
                  </attribute>
 
714
                  <empty/>
 
715
                </element>
 
716
              </optional>
 
717
              <optional>
 
718
                <element name="pivot_theta">
 
719
                  <a:documentation>Time discretisation of upwind discretisation off which the
 
720
higher order solution is pivotted.
 
721
 - pivot_theta = 1 - implicit pivot (default if not set and 
 
722
                     best choice if not intentionally modifying
 
723
                     scheme to be explicit)
 
724
 - pivot_theta = 0 - explicit pivot</a:documentation>
 
725
                  <ref name="real"/>
 
726
                </element>
 
727
              </optional>
 
728
            </element>
 
729
          </element>
 
730
          <choice>
 
731
            <element name="solver">
 
732
              <a:documentation>Solver</a:documentation>
 
733
              <ref name="linear_solver_options_asym"/>
 
734
            </element>
 
735
            <element name="explicit">
 
736
              <a:documentation>Assume this field is being solved explicitly and skip the solver.
 
737
 
 
738
Assumes lhs matrix only has diagonal lumped mass
 
739
and divides the rhs by this.</a:documentation>
 
740
              <empty/>
 
741
            </element>
 
742
          </choice>
 
743
          <element name="output">
 
744
            <a:documentation>Debugging output options</a:documentation>
 
745
            <optional>
 
746
              <element name="output_subcycle_vtus">
 
747
                <a:documentation>Output vtus of the advected metric and edge lengths at every subcycle</a:documentation>
 
748
                <empty/>
 
749
              </element>
 
750
            </optional>
 
751
            <optional>
 
752
              <element name="output_final_vtus">
 
753
                <a:documentation>Output vtus of the final metric merged over all the subcycles</a:documentation>
 
754
                <empty/>
 
755
              </element>
 
756
            </optional>
 
757
          </element>
 
758
        </element>
 
759
      </optional>
 
760
      <optional>
 
761
        <element name="geometric_constraints">
 
762
          <a:documentation>Apply geometric constraints to the metric formation.
 
763
 
 
764
As specified in (Pain, 2001), the mesh adaptivity
 
765
scheme attempts to formulate an appropriate edge length
 
766
for each direction at each point in space, independent
 
767
of problem, PDE or domain.
 
768
 
 
769
This option instructs the error metric formation
 
770
code to inspect the boundaries of the domain
 
771
and to bound the edge lengths requested appropriately.
 
772
This procedure stops the metric from asking for edge lengths
 
773
that are inappropriately large in comparison to the
 
774
resolution required to preserve the geometric accuracy
 
775
of the boundaries.
 
776
 
 
777
If you get 'knife elements' near domain boundaries,
 
778
turn this on.</a:documentation>
 
779
          <empty/>
 
780
        </element>
 
781
      </optional>
 
782
      <optional>
 
783
        <element name="bounding_box_factor">
 
784
          <a:documentation>Bounding box factor.
 
785
 
 
786
If the length scales specified by the metric are
 
787
unrealistically large, the mesh optimisation
 
788
algorithm can get confused. An example
 
789
would be specifying a length scale in a direction to be an
 
790
order of magnitude greater than the width
 
791
of the domain.
 
792
 
 
793
In order to fix this, the edge lengths requested
 
794
are bounded by the bounding box of the domain
 
795
(the smallest cuboid that contains the domain).
 
796
However, it was found that bounding by the bounding
 
797
box impairs the generation of anisotropic elements
 
798
in the mesh optimisation algorithm.
 
799
 
 
800
This option is multiplied by the bounding box of the domain
 
801
before it bounds the metric formed from other
 
802
considerations. By default, it is set to 2.0.</a:documentation>
 
803
          <ref name="real"/>
 
804
        </element>
 
805
      </optional>
 
806
      <optional>
 
807
        <element name="goal_based_adaptivity">
 
808
          <a:documentation>Goal-based adaptivity. 
 
809
 
 
810
With this option,
 
811
rather than taking the user-specified interpolation
 
812
error bounds as the weights to form the error metric
 
813
from the Hessians of the solution fields,
 
814
the interpolation weight is computed to optimally
 
815
represent the value of some specified functional
 
816
of state. In other words, the mesh is optimised
 
817
for the representation of a particular goal.
 
818
 
 
819
This is currently experimental. Activating
 
820
this option induces the code to ignore
 
821
any error bounds associated with the fields
 
822
specified under a material_phase.
 
823
 
 
824
For more information on this scheme,
 
825
see (Venditti &amp; Darmofal, 2003), or
 
826
(Power et. al, 2006).
 
827
 
 
828
Coding your own goal is also possible
 
829
but currently undocumented. See
 
830
error_measures/Goals.F90
 
831
for examples.</a:documentation>
 
832
          <choice>
 
833
            <element name="enstrophy_goal">
 
834
              <a:documentation>Optimise for the representation of
 
835
enstrophy,
 
836
  0.5 * int( |curl(velocity)|**2 ) dV.</a:documentation>
 
837
              <attribute name="subroutine">
 
838
                <value>goal_enstrophy</value>
 
839
              </attribute>
 
840
              <attribute name="dependencies">
 
841
                <value>Velocity%1 Velocity%2 Velocity%3</value>
 
842
              </attribute>
 
843
            </element>
 
844
            <element name="temperature_gradient_goal">
 
845
              <a:documentation>Optimise for the representation of
 
846
gradients of temperature,
 
847
  int(|grad(temperature)|**2) dV.</a:documentation>
 
848
              <attribute name="subroutine">
 
849
                <value>goal_temp</value>
 
850
              </attribute>
 
851
              <attribute name="dependencies">
 
852
                <value>Temperature</value>
 
853
              </attribute>
 
854
            </element>
 
855
            <element name="les_goal">
 
856
              <a:documentation>Optimise for the contribution of the standard
 
857
Smagorinsky LES tensor.
 
858
 
 
859
In effect, this goal minimises
 
860
the contribution of the sub-filter scale
 
861
model -- it applies mesh resolution where
 
862
the sub-grid scale model has an effect.
 
863
 
 
864
int( transpose(grad(u)) . kappa . grad(u) ) dV,
 
865
with u ranging over the components of (nonlinear)
 
866
velocity and kappa the LES tensor.</a:documentation>
 
867
              <attribute name="subroutine">
 
868
                <value>goal_les_velocity</value>
 
869
              </attribute>
 
870
              <attribute name="dependencies">
 
871
                <value>NonlinearVelocity%1 NonlinearVelocity%2 NonlinearVelocity%3</value>
 
872
              </attribute>
 
873
              <optional>
 
874
                <element name="nonlinear_iterations">
 
875
                  <a:documentation>The number of nonlinear iterations to perform when
 
876
forming the metric with this goal.
 
877
 
 
878
Because the LES tensor explicitly depends on mesh sizing,
 
879
we can form a metric and feed this back into the goal,
 
880
using the proposed mesh sizing instead of the current mesh.
 
881
This allows us to simulate adapts without actually incurring
 
882
the cost of adaptation, for the purposes of converging the metric.
 
883
The default value is 3.</a:documentation>
 
884
                  <ref name="integer"/>
 
885
                </element>
 
886
              </optional>
 
887
            </element>
 
888
            <element name="higher_order_les_goal">
 
889
              <a:documentation>Optimise for the contribution of the new 4th-order
 
890
LES tensor.
 
891
 
 
892
In effect, this goal minimises
 
893
the contribution of the sub-filter scale
 
894
model -- it applies mesh resolution where
 
895
the sub-grid scale model has an effect.
 
896
 
 
897
int( transpose(grad(u))   . kappa . grad(u) ) dV -
 
898
int( transpose(grad_h(u)) . kappa . grad_h(u) ) dV
 
899
 
 
900
with u ranging over the components of (nonlinear)
 
901
velocity, kappa the LES tensor,
 
902
grad(.) differentiation of basis functions and
 
903
grad_h(.) the Galerkin projection of the first derivative.</a:documentation>
 
904
              <attribute name="subroutine">
 
905
                <value>goal_les_velocity_4th</value>
 
906
              </attribute>
 
907
              <attribute name="dependencies">
 
908
                <value>NonlinearVelocity%1 NonlinearVelocity%2 NonlinearVelocity%3</value>
 
909
              </attribute>
 
910
              <optional>
 
911
                <element name="nonlinear_iterations">
 
912
                  <a:documentation>The number of nonlinear iterations to perform when
 
913
forming the metric with this goal.
 
914
 
 
915
Because the LES tensor explicitly depends on mesh sizing,
 
916
we can form a metric and feed this back into the goal,
 
917
using the proposed mesh sizing instead of the current mesh.
 
918
This allows us to simulate adapts without actually incurring
 
919
the cost of adaptation, for the purposes of converging the metric.
 
920
The default value is 3.</a:documentation>
 
921
                  <ref name="integer"/>
 
922
                </element>
 
923
              </optional>
 
924
            </element>
 
925
          </choice>
 
926
          <choice>
 
927
            <element name="relative_tolerance">
 
928
              <a:documentation>The tolerance of the goal specifies the acceptable
 
929
error in the quantity computed. The adaptation scheme
 
930
attempts to adapt the mesh to ensure that the
 
931
goal computed from the primitive solution is 
 
932
within the tolerance specified here.
 
933
 
 
934
A relative tolerance specifies that the acceptable error
 
935
in the goal is some fraction of the value as computed
 
936
from the primitive solution. It is generally 
 
937
the easiest to use. This is a unitless percentage.</a:documentation>
 
938
              <ref name="real"/>
 
939
            </element>
 
940
            <element name="absolute_tolerance">
 
941
              <a:documentation>The tolerance of the goal specifies the acceptable
 
942
error in the quantity computed. The adaptation scheme
 
943
attempts to adapt the mesh to ensure that the
 
944
goal computed from the primitive solution is 
 
945
within the tolerance specified here.
 
946
 
 
947
An absolute tolerance specifies the acceptable error
 
948
in the goal, in the units of the goal itself.</a:documentation>
 
949
              <ref name="real"/>
 
950
            </element>
 
951
          </choice>
 
952
        </element>
 
953
      </optional>
 
954
      <element name="tensor_field">
 
955
        <a:documentation>Mesh size constraints: the minimum edge length bound.</a:documentation>
 
956
        <attribute name="name">
 
957
          <value>MinimumEdgeLengths</value>
 
958
        </attribute>
 
959
        <element name="anisotropic_symmetric">
 
960
          <ref name="input_choice_real_dim_symmetric_tensor"/>
 
961
        </element>
 
962
      </element>
 
963
      <element name="tensor_field">
 
964
        <a:documentation>Mesh size constraints: the maximum edge length bound.</a:documentation>
 
965
        <attribute name="name">
 
966
          <value>MaximumEdgeLengths</value>
 
967
        </attribute>
 
968
        <element name="anisotropic_symmetric">
 
969
          <ref name="input_choice_real_dim_symmetric_tensor"/>
 
970
        </element>
 
971
      </element>
 
972
      <zeroOrMore>
 
973
        <element name="reference_mesh">
 
974
          <a:documentation>Supply a reference mesh with which to bound the metric</a:documentation>
 
975
          <attribute name="name">
 
976
            <data type="string"/>
 
977
          </attribute>
 
978
          <attribute name="mesh_name">
 
979
            <data type="string"/>
 
980
          </attribute>
 
981
          <choice>
 
982
            <element name="minimum">
 
983
              <a:documentation>Use this reference mesh as a bound on the minimum edge
 
984
length of the metric</a:documentation>
 
985
              <ref name="comment"/>
 
986
            </element>
 
987
            <element name="maximum">
 
988
              <a:documentation>Use this reference mesh as a bound on the maximum edge
 
989
length of the metric</a:documentation>
 
990
              <ref name="comment"/>
 
991
            </element>
 
992
          </choice>
 
993
          <ref name="comment"/>
 
994
        </element>
 
995
      </zeroOrMore>
 
996
      <optional>
 
997
        <element name="aspect_ratio_bound">
 
998
          <a:documentation>Maximum aspect ratio in the adapted mesh.</a:documentation>
 
999
          <ref name="real"/>
 
1000
        </element>
 
1001
      </optional>
 
1002
      <optional>
 
1003
        <element name="adapt_at_first_timestep">
 
1004
          <a:documentation>Adapt at first timestep</a:documentation>
 
1005
          <element name="number_of_adapts">
 
1006
            <a:documentation>Number of adapts done after initialisation but
 
1007
before the actual simulation starts</a:documentation>
 
1008
            <ref name="integer"/>
 
1009
          </element>
 
1010
          <optional>
 
1011
            <element name="output_adapted_mesh">
 
1012
              <a:documentation>Write out the first timestep adapted mesh.
 
1013
This is useful when needing to re-run simulations
 
1014
without waiting for the first timestep adapt</a:documentation>
 
1015
              <ref name="comment"/>
 
1016
            </element>
 
1017
          </optional>
 
1018
        </element>
 
1019
      </optional>
 
1020
      <optional>
 
1021
        <element name="preserve_mesh_regions">
 
1022
          <a:documentation>Enable this option to preserve any regions in your
 
1023
mesh (i.e. those specified by region_ids).
 
1024
Also, any prescribed fields using region_ids will be
 
1025
reinitialised using them on the new mesh.
 
1026
 
 
1027
Therefore this is a required option if you want your
 
1028
prescribed region_id fields to survive adapts!
 
1029
Obviously this does not apply to initial conditions
 
1030
set using region_ids.</a:documentation>
 
1031
          <ref name="comment"/>
 
1032
        </element>
 
1033
      </optional>
 
1034
      <optional>
 
1035
        <element name="vertically_structured_adaptivity">
 
1036
          <a:documentation>Vertically structured adaptivity.
 
1037
 
 
1038
The mesh will be unstructured in the horizontal, but columnar
 
1039
in the vertical.
 
1040
To enable this, your meshes must be derived by extrusion
 
1041
from a lower-dimensional horizontal mesh.
 
1042
This will give a columnar, layered mesh.</a:documentation>
 
1043
          <optional>
 
1044
            <element name="inhomogenous_vertical_resolution">
 
1045
              <a:documentation>If this is enabled, the resolution along each column
 
1046
will be computed from the error metric.
 
1047
This will give a columnar mesh, but not a layered one.</a:documentation>
 
1048
              <optional>
 
1049
                <element name="adapt_in_vertical_only">
 
1050
                  <a:documentation>Ignore the horizontal adapt, and *only* adapt in the vertical</a:documentation>
 
1051
                  <empty/>
 
1052
                </element>
 
1053
              </optional>
 
1054
            </element>
 
1055
          </optional>
 
1056
          <optional>
 
1057
            <element name="split_gradation">
 
1058
              <a:documentation>Apply a separate step of horizontal (and vertical, if using inhomogeneous_vertical_resolution)
 
1059
gradation to the horizontal (and vertical) metric.
 
1060
This replaces is the gradation applied to the full metric and uses the gradation
 
1061
algorithm specified above.</a:documentation>
 
1062
              <empty/>
 
1063
            </element>
 
1064
          </optional>
 
1065
          <choice>
 
1066
            <element name="vertically_align_metric">
 
1067
              <a:documentation>Remove components from each field's metric that aren't aligned either horizontally
 
1068
or vertically.  This can help prevent the horizontal metric from becoming
 
1069
contaminated by parts of the vertical metric.
 
1070
 
 
1071
NOTE: Vertical is defined using the GravityDirection field.  This is unlike some other
 
1072
parts of the vertically_structured_adaptivity and extrusion routines where vertical is defined as the
 
1073
last dimension.</a:documentation>
 
1074
              <empty/>
 
1075
            </element>
 
1076
            <element name="use_full_metric">
 
1077
              <a:documentation>When separating the horizontal metric from the vertical use the full metric.  This
 
1078
can lead to more constrained horizontal resolution due to leakage between the vertical
 
1079
and horizontal components.</a:documentation>
 
1080
              <empty/>
 
1081
            </element>
 
1082
          </choice>
 
1083
          <optional>
 
1084
            <element name="include_bottom_metric">
 
1085
              <a:documentation>When constructing the horizontal metric incorporate the components of the 
 
1086
full metric tangential to the bottom boundary.  For example, this is useful 
 
1087
when horizontal contours of a field intersect the bathymetry and this information
 
1088
is not automatically incorporated into the horizontal metric leading to
 
1089
the contact point being underresolved.
 
1090
 
 
1091
Depends on /geometry/ocean_boundaries.</a:documentation>
 
1092
              <empty/>
 
1093
            </element>
 
1094
          </optional>
 
1095
        </element>
 
1096
      </optional>
 
1097
      <optional>
 
1098
        <element name="zoltan_options">
 
1099
          <a:documentation>Zoltan Options
 
1100
 
 
1101
Set up some Zoltan options, including which partitioner to use.
 
1102
Only works if you have the --with-zoltan option in your configure.
 
1103
 
 
1104
Note that Zoltan will become the default (replacing Sam at some point)
 
1105
and these options are currently here only for development and testing
 
1106
purposes. They are subject to change and may not be in the final "release".</a:documentation>
 
1107
          <optional>
 
1108
            <element name="partitioner">
 
1109
              <a:documentation>Select which partitioner to use. Graph partitioners available are ParMETIS
 
1110
and Zoltan PHG. The Zoltan PHG hypergraph partitoner is also available.</a:documentation>
 
1111
              <choice>
 
1112
                <element name="metis">
 
1113
                  <a:documentation>Use the ParMETIS graph partitioner. ParMETIS setup to match as
 
1114
closely as possible the setup used previously by Sam.</a:documentation>
 
1115
                  <empty/>
 
1116
                </element>
 
1117
                <element name="scotch">
 
1118
                  <a:documentation>Use the PT-Scotch graph partitioner. </a:documentation>
 
1119
                  <empty/>
 
1120
                </element>
 
1121
                <element name="zoltan">
 
1122
                  <a:documentation>Use the Zoltan PHG partitioner.</a:documentation>
 
1123
                  <element name="method">
 
1124
                    <a:documentation>Select the partitioning method you would like used by Zoltan PHG.
 
1125
Currently hypergraph partitioning is the simplest implementation
 
1126
and can produce non-contiguous partitions for certain problems.</a:documentation>
 
1127
                    <choice>
 
1128
                      <value>graph</value>
 
1129
                      <value>hypergraph</value>
 
1130
                    </choice>
 
1131
                  </element>
 
1132
                </element>
 
1133
              </choice>
 
1134
            </element>
 
1135
          </optional>
 
1136
          <optional>
 
1137
            <element name="element_quality_cutoff">
 
1138
              <a:documentation>Element quality cut off. 
 
1139
Elements with a quality greater than this will be liable to be
 
1140
on the parition boundary. Below this, they will be free to be adapted
 
1141
and improved. Range is 0 to 1, with default 0.6</a:documentation>
 
1142
              <ref name="real"/>
 
1143
            </element>
 
1144
          </optional>
 
1145
          <optional>
 
1146
            <element name="zoltan_debug">
 
1147
              <a:documentation>Zoltan Debugging
 
1148
 
 
1149
Turn on more verbose output for use when debugging Zoltan.</a:documentation>
 
1150
              <optional>
 
1151
                <element name="graph_checking">
 
1152
                  <a:documentation>Turn on graph checking.
 
1153
When using ParMETIS or PT-Scotch options for turning on
 
1154
graph checking are provided by Zoltan.
 
1155
1 - on process checking,
 
1156
2 - full checking (very slow)</a:documentation>
 
1157
                  <choice>
 
1158
                    <value>1</value>
 
1159
                    <value>2</value>
 
1160
                  </choice>
 
1161
                </element>
 
1162
              </optional>
 
1163
              <optional>
 
1164
                <element name="dump_edge_counts">
 
1165
                  <a:documentation>Print out a dump file of the edge counts.
 
1166
Edge counts for each owned node are calculated in zoltan_cb_get_num_edges.
 
1167
This option dumps the edge count for each owned node.
 
1168
Dump is to the current directory, in a file called edge_counts_*.dat
 
1169
One dump file is created for each rank.
 
1170
Will get overwritten at each adapt.</a:documentation>
 
1171
                  <empty/>
 
1172
                </element>
 
1173
              </optional>
 
1174
              <optional>
 
1175
                <element name="dump_edge_weights">
 
1176
                  <a:documentation>Print out a dump file of the edge weights.
 
1177
Edge weights are calculated for each edge in zoltan_cb_get_edge_list.
 
1178
Permits a visualisation of how the edge weights are distributed.
 
1179
Dump is to the current directory, in a file called edge_weights_*.dat
 
1180
One dump file is created for each rank.
 
1181
Will get overwritten at each adapt.</a:documentation>
 
1182
                  <empty/>
 
1183
                </element>
 
1184
              </optional>
 
1185
              <optional>
 
1186
                <element name="dump_node_sizes">
 
1187
                  <a:documentation>Print out a dump file of node sizes.
 
1188
Zoltan needs to be told how much data is associated with each node when
 
1189
doing phase one migration.
 
1190
Here we dump the size calculated by zoltan_cb_pack_node_sizes for each
 
1191
owned node.
 
1192
Dump is to the current directory, in a file called node_sizes_*.dat
 
1193
One dump file is created for each rank.</a:documentation>
 
1194
                  <empty/>
 
1195
                </element>
 
1196
              </optional>
 
1197
              <optional>
 
1198
                <element name="dump_halo_node_sizes">
 
1199
                  <a:documentation>Print out a dump file of halo node sizes.
 
1200
Zoltan needs to be told how much data is associated with each halo node when
 
1201
doing phase two migration.
 
1202
Here we dump the size calculated by zoltan_cb_pack_halo_node_sizes for each
 
1203
owned node.
 
1204
Dump is to the current directory, in a file called halo_node_sizes_*.dat
 
1205
One dump file is created for each rank.</a:documentation>
 
1206
                  <empty/>
 
1207
                </element>
 
1208
              </optional>
 
1209
              <optional>
 
1210
                <element name="dump_field_sizes">
 
1211
                  <a:documentation>Print out a dump file of field sizes.
 
1212
Zoltan needs to be told how much data is associated with the fields for each 
 
1213
element when we're transfering fields.
 
1214
Here we dump the size calculated by zoltan_cb_pack_field_sizes for each
 
1215
owned node.
 
1216
Dump is to the current directory, in a file called field_sizes_*.dat
 
1217
One dump file is created for each rank.</a:documentation>
 
1218
                  <empty/>
 
1219
                </element>
 
1220
              </optional>
 
1221
            </element>
 
1222
          </optional>
 
1223
        </element>
 
1224
      </optional>
 
1225
      <optional>
 
1226
        <element name="adaptivity_library">
 
1227
          <a:documentation>Select the adaptivity library used by hr-adaptivity. If disabled,
 
1228
the defaults are:
 
1229
  In 3D: libadaptivity
 
1230
  In 2D: libmba2d
 
1231
  In 1D: adaptivity_1d</a:documentation>
 
1232
          <choice>
 
1233
            <element name="libadaptivity">
 
1234
              <a:documentation>libadaptivity. 3D, parallelised.</a:documentation>
 
1235
              <optional>
 
1236
                <element name="sweeps">
 
1237
                  <a:documentation>The number of adaptivity sweeps. Default value: 10</a:documentation>
 
1238
                  <ref name="integer"/>
 
1239
                </element>
 
1240
              </optional>
 
1241
              <optional>
 
1242
                <element name="disable_edge_split">
 
1243
                  <a:documentation>Enable this option to turn off edge splitting</a:documentation>
 
1244
                  <ref name="comment"/>
 
1245
                </element>
 
1246
              </optional>
 
1247
              <optional>
 
1248
                <element name="disable_edge_collapse">
 
1249
                  <a:documentation>Enable this option to turn off edge collapsing</a:documentation>
 
1250
                  <ref name="comment"/>
 
1251
                </element>
 
1252
              </optional>
 
1253
              <optional>
 
1254
                <element name="disable_edge_swap">
 
1255
                  <a:documentation>Enable this option to turn off edge/face, face/edge and
 
1256
edge/edge swapping</a:documentation>
 
1257
                  <ref name="comment"/>
 
1258
                </element>
 
1259
              </optional>
 
1260
              <optional>
 
1261
                <element name="disable_node_movement">
 
1262
                  <a:documentation>Enable this option to turn off node movement, and use
 
1263
h-adaptivity only.</a:documentation>
 
1264
                  <ref name="comment"/>
 
1265
                </element>
 
1266
              </optional>
 
1267
              <optional>
 
1268
                <element name="write_adapted_quality">
 
1269
                  <a:documentation>Writes vtus containing the Pain 2001 P0 element functionals
 
1270
of the adapted meshes.</a:documentation>
 
1271
                  <ref name="comment"/>
 
1272
                </element>
 
1273
              </optional>
 
1274
              <ref name="comment"/>
 
1275
            </element>
 
1276
            <element name="libmba2d">
 
1277
              <a:documentation>libmba2d. 2D. A testing parallel implementation is available.</a:documentation>
 
1278
              <optional>
 
1279
                <element name="quality">
 
1280
                  <a:documentation>Desired output mesh quality, 0 &lt;= quality &lt;= 1.
 
1281
Default value 0.6.</a:documentation>
 
1282
                  <ref name="real"/>
 
1283
                </element>
 
1284
              </optional>
 
1285
              <ref name="comment"/>
 
1286
            </element>
 
1287
            <element name="adaptivity_1d">
 
1288
              <a:documentation>Re-uses 1D adaptivity code from 2+1D adaptivity. 1D, serial only.</a:documentation>
 
1289
              <ref name="comment"/>
 
1290
            </element>
 
1291
            <element name="libmba3d">
 
1292
              <a:documentation>libmba3d. 3D, serial only.</a:documentation>
 
1293
              <optional>
 
1294
                <element name="quality">
 
1295
                  <a:documentation>Desired output mesh quality, 0 &lt;= quality &lt;= 1.
 
1296
Default value 0.6.</a:documentation>
 
1297
                  <ref name="real"/>
 
1298
                </element>
 
1299
              </optional>
 
1300
              <optional>
 
1301
                <element name="max_optimisations">
 
1302
                  <a:documentation>Maximum number of mesh optimisations. Default value 10^5.</a:documentation>
 
1303
                  <ref name="integer"/>
 
1304
                </element>
 
1305
              </optional>
 
1306
              <ref name="comment"/>
 
1307
            </element>
 
1308
          </choice>
 
1309
        </element>
 
1310
      </optional>
 
1311
      <optional>
 
1312
        <element name="debug">
 
1313
          <a:documentation>hr adptivity debugging options</a:documentation>
 
1314
          <optional>
 
1315
            <element name="write_metric_stages">
 
1316
              <a:documentation>Write out error metric at each stage of the processing
 
1317
pipeline. This can be very useful in diagnosing why
 
1318
adaptivity is doing something you don't expect.</a:documentation>
 
1319
              <ref name="comment"/>
 
1320
            </element>
 
1321
          </optional>
 
1322
          <optional>
 
1323
            <element name="write_adapted_mesh">
 
1324
              <a:documentation>Write out the Coordinate field to a triangle mesh for every
 
1325
state adapt. In parallel, a triangle mesh and .halo files
 
1326
will be written for every parallel adapt iteration.</a:documentation>
 
1327
              <ref name="comment"/>
 
1328
            </element>
 
1329
          </optional>
 
1330
          <optional>
 
1331
            <element name="write_adapted_state">
 
1332
              <a:documentation>Write out the system state to a vtu adapt every state adapt.
 
1333
In parallel, a vtu will be written for every parallel
 
1334
adapt iteration.</a:documentation>
 
1335
              <ref name="comment"/>
 
1336
            </element>
 
1337
          </optional>
 
1338
          <optional>
 
1339
            <element name="checkpoint">
 
1340
              <a:documentation>Checkpoint the simulation after every adapt. In parallel, a
 
1341
checkpoint will be written &lt;b&gt;only&lt;/b&gt; after the final adapt
 
1342
iteration. Checkpoints are postfixed with "adapt_checkpoint".</a:documentation>
 
1343
              <optional>
 
1344
                <element name="max_checkpoint_count">
 
1345
                  <a:documentation>Number of checkpoints to write before overwriting existing
 
1346
checkpoints.</a:documentation>
 
1347
                  <ref name="integer"/>
 
1348
                </element>
 
1349
              </optional>
 
1350
              <ref name="comment"/>
 
1351
            </element>
 
1352
          </optional>
 
1353
          <ref name="comment"/>
 
1354
        </element>
 
1355
      </optional>
 
1356
    </element>
 
1357
  </define>
 
1358
  <define name="prescribed_adaptivity">
 
1359
    <element name="prescribed_adaptivity">
 
1360
      <a:documentation>Mesh adaptivity, with prescribed adapt interval and target meshes.
 
1361
&lt;b&gt;Serial only&lt;/b&gt;.</a:documentation>
 
1362
      <element name="adapt_interval">
 
1363
        <a:documentation>Options relating the the frequency of mesh adaptivity</a:documentation>
 
1364
        <element name="python">
 
1365
          <a:documentation>Python code defining whether to adapt the mesh, evaluated at the
 
1366
end of each timestep. Return non-zero to signal a mesh adapt, and
 
1367
zero otherwise. Functions should be of the form:
 
1368
 
 
1369
 def val(t):
 
1370
   # Function code
 
1371
   return # Return value
 
1372
 
 
1373
The return value must be an integer.</a:documentation>
 
1374
          <ref name="python_code"/>
 
1375
        </element>
 
1376
        <ref name="comment"/>
 
1377
      </element>
 
1378
      <element name="mesh">
 
1379
        <a:documentation>Options relating to the target meshes</a:documentation>
 
1380
        <element name="name">
 
1381
          <a:documentation>The target mesh. If not reading from file, this must be a mesh
 
1382
specified under /geometry.</a:documentation>
 
1383
          <element name="python">
 
1384
            <a:documentation>Python code defining the target mesh. Functions should be of
 
1385
the form:
 
1386
 
 
1387
 def val(t):
 
1388
   # Function code
 
1389
   return # Return value
 
1390
 
 
1391
The return value must be a string.</a:documentation>
 
1392
            <ref name="python_code"/>
 
1393
          </element>
 
1394
          <ref name="comment"/>
 
1395
        </element>
 
1396
        <optional>
 
1397
          <element name="from_file">
 
1398
            <a:documentation>Read the mesh from file, rather than extracting it from the
 
1399
system state.</a:documentation>
 
1400
            <element name="format">
 
1401
              <a:documentation>Input mesh file format.</a:documentation>
 
1402
              <value>triangle</value>
 
1403
              <ref name="comment"/>
 
1404
            </element>
 
1405
            <ref name="comment"/>
 
1406
          </element>
 
1407
        </optional>
 
1408
        <ref name="comment"/>
 
1409
      </element>
 
1410
      <ref name="comment"/>
 
1411
    </element>
 
1412
  </define>
 
1413
  <define name="consistent_interpolation">
 
1414
    <element name="consistent_interpolation">
 
1415
      <a:documentation>Basis function interpolation.
 
1416
The standard algorithm. It is quick
 
1417
and bounded, but non-conservative and dissipative.
 
1418
All other algorithms require construction of a supermesh.</a:documentation>
 
1419
      <empty/>
 
1420
    </element>
 
1421
  </define>
 
1422
  <define name="pseudo_consistent_interpolation">
 
1423
    <element name="pseudo_consistent_interpolation">
 
1424
      <a:documentation>Basis function pseudo-interpolation, with averaging for nodes on
 
1425
element boundaries. This can accept a discontinuous input, but always
 
1426
gives a continuous output. It is strong recommended that you &lt;b&gt;use
 
1427
interpolation_galerkin&lt;/b&gt; instead of this interpolation method.
 
1428
 
 
1429
The distance in ideal space from the boundary where averaging is
 
1430
applied is currently hard coded to 1.0e3 * epsilon(0.0).</a:documentation>
 
1431
      <ref name="comment"/>
 
1432
    </element>
 
1433
  </define>
 
1434
  <define name="grandy_interpolation">
 
1435
    <element name="grandy_interpolation">
 
1436
      <a:documentation>Grandy interpolation. Conservative, but highly diffusive.
 
1437
See doi:10.1006/jcph.1998.6125 .</a:documentation>
 
1438
      <empty/>
 
1439
    </element>
 
1440
  </define>
 
1441
  <define name="interpolation_algorithm_disabled">
 
1442
    <element name="no_interpolation">
 
1443
      <a:documentation>Disable interpolation</a:documentation>
 
1444
      <ref name="comment"/>
 
1445
    </element>
 
1446
  </define>
 
1447
  <define name="interpolation_algorithm_scalar">
 
1448
    <choice>
 
1449
      <ref name="consistent_interpolation"/>
 
1450
      <ref name="pseudo_consistent_interpolation"/>
 
1451
      <element name="galerkin_projection">
 
1452
        <a:documentation>Galerkin projection. By default, conservative, non-dissipative and
 
1453
non-bounded. The most accurate choice, in the sense of minimising
 
1454
the L2 norm of the residual</a:documentation>
 
1455
        <ref name="galerkin_projection_scalar"/>
 
1456
      </element>
 
1457
      <ref name="grandy_interpolation"/>
 
1458
    </choice>
 
1459
  </define>
 
1460
  <define name="interpolation_algorithm_scalar_full">
 
1461
    <ref name="interpolation_algorithm_scalar"/>
 
1462
  </define>
 
1463
  <define name="interpolation_algorithm_scalar_full" combine="choice">
 
1464
    <ref name="interpolation_algorithm_disabled"/>
 
1465
  </define>
 
1466
  <define name="interpolation_algorithm_vector_full">
 
1467
    <ref name="interpolation_algorithm_vector"/>
 
1468
  </define>
 
1469
  <define name="interpolation_algorithm_vector_full" combine="choice">
 
1470
    <ref name="interpolation_algorithm_disabled"/>
 
1471
  </define>
 
1472
  <define name="interpolation_algorithm_vector">
 
1473
    <choice>
 
1474
      <ref name="consistent_interpolation"/>
 
1475
      <ref name="pseudo_consistent_interpolation"/>
 
1476
      <element name="galerkin_projection">
 
1477
        <a:documentation>Galerkin projection. By default, conservative, non-dissipative and
 
1478
non-bounded. The most accurate choice, in the sense of minimising
 
1479
the L2 norm of the residual</a:documentation>
 
1480
        <ref name="galerkin_projection_vector"/>
 
1481
      </element>
 
1482
      <ref name="grandy_interpolation"/>
 
1483
      <element name="geostrophic_interpolation">
 
1484
        <a:documentation>Helmholtz decomposed projection of the Coriolis acceleration. Suitable
 
1485
only for Velocity fields. This interpolation happens in three stages:
 
1486
 
 
1487
  1. Computation of Coriolis and its Helmholtz decomposition
 
1488
  2. Interpolation of the Helmholtz decomposition
 
1489
  3. Formation of Coriolis from the decomposition and inversion for velocity
 
1490
 
 
1491
Notes for balance preserving interpolants:
 
1492
 
 
1493
The spatial discretisation options for the conservative potential
 
1494
must match those used for Pressure.
 
1495
 
 
1496
With weak boundary conditions for the conservative potential, if
 
1497
no-normal-flow is satisfied on the boundary this must be preserved by
 
1498
the interpolation. For 2D domains this can be achieved by using
 
1499
consistent interpolation for the conservative potential or, for more
 
1500
general interpolants, by performing a further decomposition of the
 
1501
conservative potential (see
 
1502
geostrophic_interpolation/conservative_potential/decompose).
 
1503
 
 
1504
For shallow-water modelling the interpolants for layer thickness and
 
1505
the conservative potential must be identical and degree one
 
1506
homogenenous (see
 
1507
geostrophic_interpolation/conservative_potential/project_pressure/scale_factor).</a:documentation>
 
1508
        <element name="coriolis">
 
1509
          <a:documentation>Options relating to the Coriolis acceleration</a:documentation>
 
1510
          <optional>
 
1511
            <choice>
 
1512
              <element name="mesh">
 
1513
                <a:documentation>The mesh used for the Coriolis acceleration. Defaults to the
 
1514
Velocity mesh if not supplied.</a:documentation>
 
1515
                <attribute name="name">
 
1516
                  <value>VelocityMesh</value>
 
1517
                </attribute>
 
1518
              </element>
 
1519
              <element name="mesh">
 
1520
                <a:documentation>The mesh used for the Coriolis acceleration. Defaults to the
 
1521
Velocity mesh if not supplied.</a:documentation>
 
1522
                <attribute name="name">
 
1523
                  <value>PressureMesh</value>
 
1524
                </attribute>
 
1525
              </element>
 
1526
              <element name="mesh">
 
1527
                <a:documentation>The mesh used for the Coriolis acceleration. Defaults to the
 
1528
Velocity mesh if not supplied.</a:documentation>
 
1529
                <attribute name="name">
 
1530
                  <value>CoordinateMesh</value>
 
1531
                </attribute>
 
1532
              </element>
 
1533
              <element name="mesh">
 
1534
                <a:documentation>The mesh used for the Coriolis acceleration. Defaults to the
 
1535
Velocity mesh if not supplied.</a:documentation>
 
1536
                <attribute name="name">
 
1537
                  <data type="string" datatypeLibrary=""/>
 
1538
                </attribute>
 
1539
              </element>
 
1540
            </choice>
 
1541
          </optional>
 
1542
          <element name="velocity_to_coriolis">
 
1543
            <a:documentation>Options relating to the diagnostic solve for the Coriolis
 
1544
acceleration from Velocity on the donor mesh.</a:documentation>
 
1545
            <optional>
 
1546
              <ref name="galerkin_projection_mass_options"/>
 
1547
            </optional>
 
1548
            <optional>
 
1549
              <element name="lump_rhs">
 
1550
                <a:documentation>Lump the RHS term. Requires Velocity and the Coriolis 
 
1551
acceleration to be on the same mesh.</a:documentation>
 
1552
                <ref name="comment"/>
 
1553
              </element>
 
1554
            </optional>
 
1555
            <ref name="comment"/>
 
1556
          </element>
 
1557
          <element name="coriolis_to_velocity">
 
1558
            <a:documentation>Options relating to the diagnostic solve for Velocity from
 
1559
the Coriolis acceleration on the target mesh.</a:documentation>
 
1560
            <optional>
 
1561
              <ref name="galerkin_projection_mass_options"/>
 
1562
            </optional>
 
1563
            <optional>
 
1564
              <element name="lump_rhs">
 
1565
                <a:documentation>Lump the RHS term. Requires Velocity and the Coriolis 
 
1566
acceleration to be on the same mesh.</a:documentation>
 
1567
                <ref name="comment"/>
 
1568
              </element>
 
1569
            </optional>
 
1570
            <ref name="comment"/>
 
1571
          </element>
 
1572
          <ref name="comment"/>
 
1573
        </element>
 
1574
        <element name="conservative_potential">
 
1575
          <a:documentation>Options relating to the conservative potential component of the
 
1576
Helmholtz decomposition</a:documentation>
 
1577
          <choice>
 
1578
            <element name="mesh">
 
1579
              <a:documentation>The mesh used for the conservative potential. Note that this is
 
1580
computed using the same method as the pressure projection, and
 
1581
hence LBB constraints apply.</a:documentation>
 
1582
              <attribute name="name">
 
1583
                <value>PressureMesh</value>
 
1584
              </attribute>
 
1585
            </element>
 
1586
            <element name="mesh">
 
1587
              <a:documentation>The mesh used for the conservative potential. Note that this is
 
1588
computed using the same method as the pressure projection, and
 
1589
hence LBB constraints apply.</a:documentation>
 
1590
              <attribute name="name">
 
1591
                <value>VelocityMesh</value>
 
1592
              </attribute>
 
1593
            </element>
 
1594
            <element name="mesh">
 
1595
              <a:documentation>The mesh used for the conservative potential. Note that this is
 
1596
computed using the same method as the pressure projection, and
 
1597
hence LBB constraints apply.</a:documentation>
 
1598
              <attribute name="name">
 
1599
                <value>CoordinateMesh</value>
 
1600
              </attribute>
 
1601
            </element>
 
1602
            <element name="mesh">
 
1603
              <a:documentation>The mesh used for the conservative potential. Note that this is
 
1604
computed using the same method as the pressure projection, and
 
1605
hence LBB constraints apply.</a:documentation>
 
1606
              <attribute name="name">
 
1607
                <data type="string" datatypeLibrary=""/>
 
1608
              </attribute>
 
1609
            </element>
 
1610
          </choice>
 
1611
          <element name="spatial_discretisation">
 
1612
            <a:documentation>Spatial discretisation options</a:documentation>
 
1613
            <element name="mass">
 
1614
              <a:documentation>Options relating to the mass matrix</a:documentation>
 
1615
              <optional>
 
1616
                <element name="lump_mass">
 
1617
                  <a:documentation>Lump the mass matrix. Required for continuous fields.</a:documentation>
 
1618
                  <ref name="comment"/>
 
1619
                </element>
 
1620
              </optional>
 
1621
            </element>
 
1622
            <element name="continuous_galerkin">
 
1623
              <a:documentation>Use a continuous Galerkin discretisation</a:documentation>
 
1624
              <optional>
 
1625
                <element name="integrate_divergence_by_parts">
 
1626
                  <a:documentation>Integrate the divergence operator by parts</a:documentation>
 
1627
                  <ref name="comment"/>
 
1628
                </element>
 
1629
              </optional>
 
1630
              <optional>
 
1631
                <element name="remove_stabilisation_term">
 
1632
                  <a:documentation>Remove the stabilisation term from the projection operator.
 
1633
 
 
1634
Automatic when not using P1P1.</a:documentation>
 
1635
                  <ref name="comment"/>
 
1636
                </element>
 
1637
              </optional>
 
1638
              <ref name="comment"/>
 
1639
            </element>
 
1640
            <ref name="comment"/>
 
1641
          </element>
 
1642
          <optional>
 
1643
            <element name="reference_node">
 
1644
              <a:documentation>Reference node, at which the solution value is pinned to zero</a:documentation>
 
1645
              <ref name="integer"/>
 
1646
            </element>
 
1647
          </optional>
 
1648
          <element name="solver">
 
1649
            <a:documentation>Solver options for the conservative potential calculation</a:documentation>
 
1650
            <ref name="linear_solver_options_sym"/>
 
1651
          </element>
 
1652
          <choice>
 
1653
            <element name="galerkin_projection">
 
1654
              <a:documentation>Galerkin projection. By default, conservative, non-dissipative and
 
1655
non-bounded. The most accurate choice, in the sense of minimising
 
1656
the L2 norm of the residual</a:documentation>
 
1657
              <ref name="galerkin_projection_honour_strong_bcs"/>
 
1658
              <ref name="continuous_projection"/>
 
1659
              <optional>
 
1660
                <ref name="supermesh_conservation"/>
 
1661
              </optional>
 
1662
              <ref name="comment"/>
 
1663
            </element>
 
1664
            <ref name="consistent_interpolation"/>
 
1665
            <ref name="grandy_interpolation"/>
 
1666
          </choice>
 
1667
          <optional>
 
1668
            <choice>
 
1669
              <element name="project_pressure">
 
1670
                <a:documentation>Supply a Pressure field. This enables better initial guesses for
 
1671
the decomposition solvers, and also allows decomposed interpolants
 
1672
for Pressure (see
 
1673
geostrophic_interpolation/conservative_potential/decompose and
 
1674
geostrophic_interpolation/conservative_potential/interpolate_boundary).</a:documentation>
 
1675
                <attribute name="name">
 
1676
                  <value>Pressure</value>
 
1677
                </attribute>
 
1678
                <optional>
 
1679
                  <ref name="geostrophic_interpolation_project_pressure_scale_factor"/>
 
1680
                </optional>
 
1681
                <ref name="comment"/>
 
1682
              </element>
 
1683
              <element name="project_pressure">
 
1684
                <a:documentation>Supply a Pressure field. This enables better initial guesses for
 
1685
the decomposition solvers, and also allows decomposed interpolants
 
1686
for Pressure (see
 
1687
geostrophic_interpolation/conservative_potential/decompose and
 
1688
geostrophic_interpolation/conservative_potential/interpolate_boundary).</a:documentation>
 
1689
                <attribute name="name">
 
1690
                  <value>LayerThickness</value>
 
1691
                </attribute>
 
1692
                <ref name="geostrophic_interpolation_project_pressure_scale_factor"/>
 
1693
                <ref name="comment"/>
 
1694
              </element>
 
1695
              <element name="project_pressure">
 
1696
                <a:documentation>Supply a Pressure field. This enables better initial guesses for
 
1697
the decomposition solvers, and also allows decomposed interpolants
 
1698
for Pressure (see
 
1699
geostrophic_interpolation/conservative_potential/decompose and
 
1700
geostrophic_interpolation/conservative_potential/interpolate_boundary).</a:documentation>
 
1701
                <attribute name="name">
 
1702
                  <data type="string"/>
 
1703
                </attribute>
 
1704
                <optional>
 
1705
                  <ref name="geostrophic_interpolation_project_pressure_scale_factor"/>
 
1706
                </optional>
 
1707
                <ref name="comment"/>
 
1708
              </element>
 
1709
            </choice>
 
1710
          </optional>
 
1711
          <optional>
 
1712
            <choice>
 
1713
              <element name="decompose">
 
1714
                <a:documentation>Decompose the conservative potential into a component constant
 
1715
on the boundary, and a residual.
 
1716
 
 
1717
If interpolating Pressure, a similar decomposition is applied
 
1718
to the Pressure projection.
 
1719
 
 
1720
This requires the domain to be 2D and simply connected.</a:documentation>
 
1721
                <choice>
 
1722
                  <element name="l2_minimised_residual">
 
1723
                    <a:documentation>Choose a boundary value that minimises the l2 norm of the
 
1724
residual</a:documentation>
 
1725
                    <ref name="comment"/>
 
1726
                  </element>
 
1727
                  <element name="boundary_mean">
 
1728
                    <a:documentation>Use the mean boundary value</a:documentation>
 
1729
                    <ref name="comment"/>
 
1730
                  </element>
 
1731
                </choice>
 
1732
                <element name="solver">
 
1733
                  <a:documentation>Solver options for the decomposition</a:documentation>
 
1734
                  <ref name="linear_solver_options_sym"/>
 
1735
                </element>
 
1736
                <ref name="comment"/>
 
1737
              </element>
 
1738
              <element name="interpolate_boundary">
 
1739
                <a:documentation>Interpolate the boundary values using consistent interpolation and
 
1740
use these as a strong Dirichlet boundary condition on the
 
1741
conservative potential.
 
1742
 
 
1743
If interpolating Pressure, a similar boundary condition is applied
 
1744
to the Pressure projection.</a:documentation>
 
1745
                <ref name="comment"/>
 
1746
              </element>
 
1747
            </choice>
 
1748
          </optional>
 
1749
          <ref name="comment"/>
 
1750
        </element>
 
1751
        <element name="residual">
 
1752
          <a:documentation>Options relating to the non-conservative residual component of the
 
1753
Helmholz decomposition</a:documentation>
 
1754
          <choice>
 
1755
            <element name="galerkin_projection">
 
1756
              <a:documentation>Galerkin projection. By default, conservative, non-dissipative and
 
1757
non-bounded. The most accurate choice, in the sense of minimising
 
1758
the L2 norm of the residual</a:documentation>
 
1759
              <ref name="continuous_discontinuous_projection"/>
 
1760
              <optional>
 
1761
                <ref name="supermesh_conservation"/>
 
1762
              </optional>
 
1763
              <ref name="comment"/>
 
1764
            </element>
 
1765
            <ref name="consistent_interpolation"/>
 
1766
            <ref name="pseudo_consistent_interpolation"/>
 
1767
            <ref name="grandy_interpolation"/>
 
1768
          </choice>
 
1769
          <optional>
 
1770
            <element name="enforce_solenoidal">
 
1771
              <a:documentation>Enforce divergence free after the projection</a:documentation>
 
1772
              <ref name="comment"/>
 
1773
            </element>
 
1774
          </optional>
 
1775
          <ref name="comment"/>
 
1776
        </element>
 
1777
        <optional>
 
1778
          <element name="geopressure">
 
1779
            <a:documentation>If enabled, preconditions the Helmholtz decomposition by solving
 
1780
for the conservative potential using a geopressure solver. The
 
1781
projection equation then becomes:
 
1782
  M f = M f_* + C \phi + C_{gp} \phi_{gp},
 
1783
where f_* is the coriolis acceleration, f is divergence free, phi is
 
1784
the conservative potential, phi_gp is the geopressure conservative
 
1785
potential and:
 
1786
  C_{gp,ij}^q = \int_Omega N_j \partial_q M_i,
 
1787
is the geopressure gradient matrix, where N_i are the velocity shape
 
1788
functions and M_i the geopressure conservative potential shape
 
1789
functions.</a:documentation>
 
1790
            <element name="mesh">
 
1791
              <a:documentation>The mesh used for the geopressure conservative potential</a:documentation>
 
1792
              <attribute name="name">
 
1793
                <data type="string" datatypeLibrary=""/>
 
1794
              </attribute>
 
1795
            </element>
 
1796
            <optional>
 
1797
              <element name="reference_node">
 
1798
                <a:documentation>Reference node, at which the solution value is pinned to zero</a:documentation>
 
1799
                <ref name="integer"/>
 
1800
              </element>
 
1801
            </optional>
 
1802
            <element name="solver">
 
1803
              <a:documentation>Solver options for the geopressure conservative potential
 
1804
calculation</a:documentation>
 
1805
              <ref name="linear_solver_options_sym"/>
 
1806
            </element>
 
1807
            <choice>
 
1808
              <element name="galerkin_projection">
 
1809
                <a:documentation>Galerkin projection. By default, conservative, non-dissipative and
 
1810
non-bounded. The most accurate choice, in the sense of minimising
 
1811
the L2 norm of the residual</a:documentation>
 
1812
                <ref name="continuous_projection"/>
 
1813
                <optional>
 
1814
                  <ref name="supermesh_conservation"/>
 
1815
                </optional>
 
1816
                <ref name="comment"/>
 
1817
              </element>
 
1818
              <ref name="consistent_interpolation"/>
 
1819
              <ref name="pseudo_consistent_interpolation"/>
 
1820
              <ref name="grandy_interpolation"/>
 
1821
            </choice>
 
1822
          </element>
 
1823
        </optional>
 
1824
        <optional>
 
1825
          <element name="vertical_velocity">
 
1826
            <a:documentation>Options relating to the vertical velocity. Required in 3D.</a:documentation>
 
1827
            <choice>
 
1828
              <element name="galerkin_projection">
 
1829
                <a:documentation>Galerkin projection. By default, conservative, non-dissipative and
 
1830
non-bounded. The most accurate choice, in the sense of minimising
 
1831
the L2 norm of the residual</a:documentation>
 
1832
                <ref name="continuous_discontinuous_projection"/>
 
1833
                <optional>
 
1834
                  <ref name="supermesh_conservation"/>
 
1835
                </optional>
 
1836
                <ref name="comment"/>
 
1837
              </element>
 
1838
              <ref name="consistent_interpolation"/>
 
1839
              <ref name="pseudo_consistent_interpolation"/>
 
1840
              <ref name="grandy_interpolation"/>
 
1841
            </choice>
 
1842
            <ref name="comment"/>
 
1843
          </element>
 
1844
        </optional>
 
1845
        <optional>
 
1846
          <element name="debug">
 
1847
            <a:documentation>Debug options</a:documentation>
 
1848
            <optional>
 
1849
              <element name="write_debug_vtus">
 
1850
                <a:documentation>If enabled, pre and post interpolation decomposition vtus are
 
1851
written</a:documentation>
 
1852
                <optional>
 
1853
                  <element name="max_vtu_count">
 
1854
                    <a:documentation>Maximum number of debug vtus that will be written before
 
1855
over-writing existing vtus</a:documentation>
 
1856
                    <ref name="integer"/>
 
1857
                  </element>
 
1858
                </optional>
 
1859
                <ref name="comment"/>
 
1860
              </element>
 
1861
            </optional>
 
1862
            <ref name="comment"/>
 
1863
          </element>
 
1864
        </optional>
 
1865
        <ref name="comment"/>
 
1866
      </element>
 
1867
    </choice>
 
1868
  </define>
 
1869
  <define name="geostrophic_interpolation_project_pressure_scale_factor">
 
1870
    <element name="scale_factor">
 
1871
      <a:documentation>Scale the pressure field by some factor before interpolation,
 
1872
and apply the inverse after interpolation. This should be set
 
1873
if the pressure field is divided by some reference value
 
1874
e.g., in a shallow water with gravity magnitude g, this should
 
1875
take the value g. This enables better initial guesses for the
 
1876
decomposition solvers, and means that non degree one
 
1877
homonogeneous interpolants can be used for the conservative
 
1878
potential and pressure, while still being balance preserving.</a:documentation>
 
1879
      <ref name="real"/>
 
1880
    </element>
 
1881
  </define>
 
1882
  <define name="galerkin_projection_honour_strong_bcs">
 
1883
    <element name="honour_strong_boundary_conditions">
 
1884
      <a:documentation>Honour strong Dirichlet boundary conditions in the Galerkin projection</a:documentation>
 
1885
      <empty/>
 
1886
    </element>
 
1887
  </define>
 
1888
  <define name="galerkin_projection_vector">
 
1889
    <ref name="continuous_discontinuous_projection"/>
 
1890
    <optional>
 
1891
      <ref name="supermesh_free"/>
 
1892
    </optional>
 
1893
    <optional>
 
1894
      <ref name="supermesh_conservation"/>
 
1895
    </optional>
 
1896
    <optional>
 
1897
      <ref name="galerkin_projection_honour_strong_bcs"/>
 
1898
    </optional>
 
1899
  </define>
 
1900
  <define name="galerkin_projection_scalar">
 
1901
    <ref name="continuous_discontinuous_projection"/>
 
1902
    <optional>
 
1903
      <ref name="supermesh_free"/>
 
1904
    </optional>
 
1905
    <optional>
 
1906
      <ref name="supermesh_conservation"/>
 
1907
    </optional>
 
1908
    <optional>
 
1909
      <ref name="galerkin_projection_honour_strong_bcs"/>
 
1910
    </optional>
 
1911
  </define>
 
1912
  <define name="continuous_projection">
 
1913
    <element name="continuous">
 
1914
      <a:documentation>Continuous field Galerkin projection.
 
1915
If the field you are interpolating is continuous, then
 
1916
a linear solver is required to invert the mass matrix.</a:documentation>
 
1917
      <optional>
 
1918
        <choice>
 
1919
          <element name="bounded">
 
1920
            <a:documentation>Use a bounded Galerkin projection. Conservative, bounded in the
 
1921
limit, and minimally dissipative. This algorithm starts with the
 
1922
Galerkin projection and dissipates it until it achieves
 
1923
boundedness.
 
1924
If it does not converge, it may not be exactly bounded.
 
1925
Note well: this only works for linear fields.</a:documentation>
 
1926
            <attribute name="name">
 
1927
              <value>Diffuse</value>
 
1928
            </attribute>
 
1929
            <element name="boundedness_iterations">
 
1930
              <a:documentation>The number of dissipation iterations attempted to bound the
 
1931
Galerkin projection.</a:documentation>
 
1932
              <ref name="integer"/>
 
1933
              <optional>
 
1934
                <element name="tolerance">
 
1935
                  <a:documentation>Specify the tolerance to which boundedness is to be tested during the iterations.
 
1936
Defaults to computer precision if unspecified.</a:documentation>
 
1937
                  <ref name="real"/>
 
1938
                </element>
 
1939
              </optional>
 
1940
            </element>
 
1941
            <optional>
 
1942
              <element name="bounds">
 
1943
                <a:documentation>If the bounds on this field are known then they can be set here.
 
1944
These can either further constrain the limits worked out by the
 
1945
lumped version of the projection (i.e. to make sure that errors 
 
1946
don't accumulate with succesive interpolations) or if apply_globally
 
1947
is set they are just made to be bounded within the bounds globally
 
1948
(i.e. anything between those bounds is not smoothed).</a:documentation>
 
1949
                <optional>
 
1950
                  <element name="upper_bound">
 
1951
                    <ref name="real"/>
 
1952
                    <optional>
 
1953
                      <element name="apply_globally">
 
1954
                        <a:documentation>If this is set the upper_bound is used everywhere.
 
1955
If left unset the upper_bound is only used to constrain
 
1956
the smoothed bounds calculated by the code</a:documentation>
 
1957
                        <empty/>
 
1958
                      </element>
 
1959
                    </optional>
 
1960
                    <optional>
 
1961
                      <element name="coupled">
 
1962
                        <a:documentation>This field is to be considered as being coupled to another field
 
1963
such that the sum of the two fields is constrained to be less than
 
1964
the upper_bound specified above.
 
1965
 
 
1966
The relationships between fields are worked out according to their
 
1967
priority ordering.
 
1968
 
 
1969
This method is akin to the coupled_cv advection method.</a:documentation>
 
1970
                        <empty/>
 
1971
                      </element>
 
1972
                    </optional>
 
1973
                  </element>
 
1974
                </optional>
 
1975
                <optional>
 
1976
                  <element name="lower_bound">
 
1977
                    <ref name="real"/>
 
1978
                    <optional>
 
1979
                      <element name="apply_globally">
 
1980
                        <a:documentation>If this is set the upper_bound is used everywhere.
 
1981
If left unset the upper_bound is only used to constrain
 
1982
the smoothed bounds calculated by the code</a:documentation>
 
1983
                        <empty/>
 
1984
                      </element>
 
1985
                    </optional>
 
1986
                  </element>
 
1987
                </optional>
 
1988
              </element>
 
1989
            </optional>
 
1990
            <optional>
 
1991
              <element name="repair_deviations">
 
1992
                <a:documentation>If, after performing all the boundedness_iterations, the field
 
1993
is still not bounded then perform surgery to redistribute the
 
1994
deviations to nodes that have less than their bounds.</a:documentation>
 
1995
                <optional>
 
1996
                  <element name="tolerance">
 
1997
                    <a:documentation>Specify the tolerance to which boundedness is to be tested during the repair.
 
1998
Defaults to computer precision if unspecified.</a:documentation>
 
1999
                    <ref name="real"/>
 
2000
                  </element>
 
2001
                </optional>
 
2002
              </element>
 
2003
            </optional>
 
2004
          </element>
 
2005
          <element name="bounded">
 
2006
            <a:documentation>Use a bounded Galerkin projection. Conservative, bounded in the
 
2007
limit, and hopefully minimally dissipative. This algorithm starts with the
 
2008
Galerkin projection and uses the optimisation library Algencan to bound
 
2009
it by minimising a functional within constraints on boundedness and conservation.
 
2010
Note well: this only works for linear fields.</a:documentation>
 
2011
            <attribute name="name">
 
2012
              <value>Algencan</value>
 
2013
            </attribute>
 
2014
            <choice>
 
2015
              <element name="functional">
 
2016
                <attribute name="name">
 
2017
                  <value>L2</value>
 
2018
                </attribute>
 
2019
                <optional>
 
2020
                  <element name="weight">
 
2021
                    <ref name="real"/>
 
2022
                  </element>
 
2023
                </optional>
 
2024
              </element>
 
2025
              <element name="functional">
 
2026
                <attribute name="name">
 
2027
                  <value>LumpedMassL2</value>
 
2028
                </attribute>
 
2029
                <optional>
 
2030
                  <element name="weight">
 
2031
                    <ref name="real"/>
 
2032
                  </element>
 
2033
                </optional>
 
2034
              </element>
 
2035
              <element name="functional">
 
2036
                <attribute name="name">
 
2037
                  <value>IntegralL2</value>
 
2038
                </attribute>
 
2039
                <optional>
 
2040
                  <element name="weight">
 
2041
                    <ref name="real"/>
 
2042
                  </element>
 
2043
                </optional>
 
2044
              </element>
 
2045
              <element name="functional">
 
2046
                <attribute name="name">
 
2047
                  <data type="string" datatypeLibrary=""/>
 
2048
                </attribute>
 
2049
                <optional>
 
2050
                  <element name="weight">
 
2051
                    <ref name="real"/>
 
2052
                  </element>
 
2053
                </optional>
 
2054
              </element>
 
2055
            </choice>
 
2056
            <optional>
 
2057
              <element name="bounds">
 
2058
                <a:documentation>If the bounds on this field are known then they can be set here.
 
2059
These can either further constrain the limits worked out by the
 
2060
lumped version of the projection (i.e. to make sure that errors 
 
2061
don't accumulate with succesive interpolations) or if apply_globally
 
2062
is set they are just made to be bounded within the bounds globally
 
2063
(i.e. anything between those bounds is not smoothed).</a:documentation>
 
2064
                <optional>
 
2065
                  <element name="upper_bound">
 
2066
                    <ref name="real"/>
 
2067
                    <optional>
 
2068
                      <element name="apply_globally">
 
2069
                        <a:documentation>If this is set the upper_bound is used everywhere.
 
2070
If left unset the upper_bound is only used to constrain
 
2071
the smoothed bounds calculated by the code</a:documentation>
 
2072
                        <empty/>
 
2073
                      </element>
 
2074
                    </optional>
 
2075
                    <optional>
 
2076
                      <element name="coupled">
 
2077
                        <a:documentation>This field is to be considered as being coupled to another field
 
2078
such that the sum of the two fields is constrained to be less than
 
2079
the upper_bound specified above.
 
2080
 
 
2081
The relationships between fields are worked out according to their
 
2082
priority ordering.
 
2083
 
 
2084
This method is akin to the coupled_cv advection method.</a:documentation>
 
2085
                        <empty/>
 
2086
                      </element>
 
2087
                    </optional>
 
2088
                  </element>
 
2089
                </optional>
 
2090
                <optional>
 
2091
                  <element name="lower_bound">
 
2092
                    <ref name="real"/>
 
2093
                    <optional>
 
2094
                      <element name="apply_globally">
 
2095
                        <a:documentation>If this is set the upper_bound is used everywhere.
 
2096
If left unset the upper_bound is only used to constrain
 
2097
the smoothed bounds calculated by the code</a:documentation>
 
2098
                        <empty/>
 
2099
                      </element>
 
2100
                    </optional>
 
2101
                  </element>
 
2102
                </optional>
 
2103
              </element>
 
2104
            </optional>
 
2105
          </element>
 
2106
        </choice>
 
2107
      </optional>
 
2108
      <choice>
 
2109
        <element name="solver">
 
2110
          <a:documentation>Solver options for the linear solve.
 
2111
This method requires the inversion of a mass matrix. Note that
 
2112
conservation properties are affected by the tolerance of the
 
2113
linear solve.</a:documentation>
 
2114
          <ref name="linear_solver_options_sym"/>
 
2115
        </element>
 
2116
        <element name="lump_mass_matrix">
 
2117
          <a:documentation>Lump the mass matrix on the left hand side of the galerkin projection.
 
2118
Hence solver options aren't necessary.
 
2119
 
 
2120
This is much more diffusive than a non-lumped Galerkin projection
 
2121
for only a minimal saving in computational cost.</a:documentation>
 
2122
          <empty/>
 
2123
        </element>
 
2124
      </choice>
 
2125
    </element>
 
2126
  </define>
 
2127
  <define name="continuous_discontinuous_projection">
 
2128
    <choice>
 
2129
      <ref name="continuous_projection"/>
 
2130
      <element name="discontinuous">
 
2131
        <a:documentation>Discontinuous field Galerkin projection.
 
2132
In this case, no linear solver is required to invert the mass matrix.</a:documentation>
 
2133
        <empty/>
 
2134
      </element>
 
2135
    </choice>
 
2136
  </define>
 
2137
  <define name="supermesh_free">
 
2138
    <element name="supermesh_free">
 
2139
      <a:documentation>Enables a supermesh free Galerkin projection. Uses incomplete
 
2140
quadrature, and hence is not conservative.</a:documentation>
 
2141
      <empty/>
 
2142
    </element>
 
2143
  </define>
 
2144
  <define name="supermesh_conservation">
 
2145
    <element name="supermesh_conservation">
 
2146
      <a:documentation>Options for checking the supermesh conservation properties</a:documentation>
 
2147
      <optional>
 
2148
        <element name="tolerance">
 
2149
          <a:documentation>Specify the fraction of the original elemental area/volume
 
2150
to be used to check the conservation of the supermesh.
 
2151
 
 
2152
Since all fields are supermeshed together the minimum tolerance
 
2153
specified over all fields will be used.
 
2154
 
 
2155
Defaults to 0.001 if unspecified.
 
2156
i.e. 0.1% of the area/volume of an element in the new mesh may
 
2157
be lost without warning or attempts to fix (if compiled with cgal)
 
2158
during the construction of the supermesh between the old
 
2159
and new meshes.</a:documentation>
 
2160
          <ref name="real"/>
 
2161
        </element>
 
2162
      </optional>
 
2163
      <optional>
 
2164
        <element name="print_field_integral">
 
2165
          <a:documentation>Compute the field integral after the interpolation and print the relative
 
2166
mass loss to the logfile (level 2 verbosity).
 
2167
 
 
2168
Note this is a post interpolation step and offers no chance of
 
2169
fixing the conservation error (unlike the tolerance above if compiled
 
2170
with cgal)</a:documentation>
 
2171
          <element name="tolerance">
 
2172
            <a:documentation>Relative tolerance with which to test the conservation of the field
 
2173
integral.  If the conservation fails this tolerance a warning is issued
 
2174
(level 0 verbosity) and vtus containing the field are output.</a:documentation>
 
2175
            <ref name="real"/>
 
2176
          </element>
 
2177
        </element>
 
2178
      </optional>
 
2179
    </element>
 
2180
  </define>
 
2181
  <define name="mesh_adaptivity_options">
 
2182
    <element name="mesh_adaptivity">
 
2183
      <optional>
 
2184
        <element name="mesh_movement">
 
2185
          <a:documentation>Options involving mesh movement (Lagrangian, ALE methods)
 
2186
 Allow a moving mesh.
 
2187
 Assigns memory for grid velocities
 
2188
 Amends previous timestep`s mass matrix</a:documentation>
 
2189
          <attribute name="replaces">
 
2190
            <value>MVMESH = TRUE, ZERQG, CMCHAN = TRUE</value>
 
2191
          </attribute>
 
2192
          <choice>
 
2193
            <element name="free_surface">
 
2194
              <a:documentation>enable movement of mesh with the free surface</a:documentation>
 
2195
              <choice>
 
2196
                <element name="move_surface_nodes">
 
2197
                  <a:documentation>Only move the nodes on the free surface using
 
2198
the surface height calculated at it.</a:documentation>
 
2199
                  <empty/>
 
2200
                </element>
 
2201
                <element name="move_whole_mesh">
 
2202
                  <a:documentation>Move the whole mesh according to the free surface
 
2203
height, scaled linearly by the depth from the surface.
 
2204
 
 
2205
Requires the specification of ocean_boundaries under
 
2206
geometry.</a:documentation>
 
2207
                  <empty/>
 
2208
                </element>
 
2209
              </choice>
 
2210
              <optional>
 
2211
                <element name="wetting_and_drying">
 
2212
                  <a:documentation>Activates wetting and drying. Note: Works only with theta=1.0 and relaxation=1.0 under temporal discretisation</a:documentation>
 
2213
                  <element name="d0">
 
2214
                    <a:documentation>Specifies the d0 value which is the waterlevel kept in dry areas.</a:documentation>
 
2215
                    <ref name="real"/>
 
2216
                  </element>
 
2217
                  <optional>
 
2218
                    <element name="dry_absorption">
 
2219
                      <a:documentation>Specifies the amount of absorption in dry areas. If a pressure corrected absorption term is desired, please add a pressure corrected absorption under Velocity (of magnitude 0).
 
2220
Note: If you double d0, this value has to be doubled as well to achieve the same amount of absorption.</a:documentation>
 
2221
                      <ref name="real_dim_vector"/>
 
2222
                    </element>
 
2223
                  </optional>
 
2224
                  <optional>
 
2225
                    <element name="smooth_max_discretisation">
 
2226
                      <a:documentation>Use a smooth maximum operator discretisation. This is deprecated and will be removed soon.</a:documentation>
 
2227
                      <ref name="real"/>
 
2228
                    </element>
 
2229
                  </optional>
 
2230
                </element>
 
2231
              </optional>
 
2232
            </element>
 
2233
            <element name="imposed_grid_velocity">
 
2234
              <a:documentation>Enable movement of mesh by an imposed Grid Velocity.
 
2235
Requires a prescribed GridVelocity field (see below).</a:documentation>
 
2236
              <empty/>
 
2237
            </element>
 
2238
            <element name="pseudo_lagrangian">
 
2239
              <a:documentation>Enable movement of mesh by the Velocity.
 
2240
Note that this is only pseudo-lagrangian as the
 
2241
Velocity and GridVelocity only match at the beginning of
 
2242
the timestep.  Therefore the advection terms are still
 
2243
present and evaluated.</a:documentation>
 
2244
              <optional>
 
2245
                <element name="velocity_material_phase">
 
2246
                  <a:documentation>Specify the material phase from which to extract the Velocity
 
2247
field.  Defaults to state(1) if unspecified.  Note that this
 
2248
doesn't necessarily correspond to the first material_phase
 
2249
in a flml file!</a:documentation>
 
2250
                  <attribute name="material_phase_name">
 
2251
                    <data type="string"/>
 
2252
                  </attribute>
 
2253
                  <empty/>
 
2254
                </element>
 
2255
              </optional>
 
2256
            </element>
 
2257
            <element name="explicit_ale">
 
2258
              <a:documentation>enable full ale movement of mesh</a:documentation>
 
2259
              <element name="number_of_linesearch_pts">
 
2260
                <ref name="integer"/>
 
2261
              </element>
 
2262
              <element name="maximum_iterations">
 
2263
                <ref name="integer"/>
 
2264
              </element>
 
2265
              <element name="max_elements_second_level">
 
2266
                <ref name="integer"/>
 
2267
              </element>
 
2268
              <element name="functional1_weight">
 
2269
                <ref name="real"/>
 
2270
              </element>
 
2271
              <element name="functional2_weight">
 
2272
                <ref name="real"/>
 
2273
              </element>
 
2274
              <element name="functional3_weight">
 
2275
                <ref name="real"/>
 
2276
              </element>
 
2277
              <element name="functional4_weight">
 
2278
                <ref name="real"/>
 
2279
              </element>
 
2280
              <element name="functional5_weight">
 
2281
                <ref name="real"/>
 
2282
              </element>
 
2283
              <element name="minimum_val_functional_change">
 
2284
                <ref name="real"/>
 
2285
              </element>
 
2286
              <element name="minimum_val_functional">
 
2287
                <ref name="real"/>
 
2288
              </element>
 
2289
              <element name="coarse_tolerance">
 
2290
                <ref name="real"/>
 
2291
              </element>
 
2292
              <element name="fine_tolerance">
 
2293
                <ref name="real"/>
 
2294
              </element>
 
2295
              <element name="gradient_dx">
 
2296
                <ref name="real"/>
 
2297
              </element>
 
2298
              <element name="gradient_dy">
 
2299
                <ref name="real"/>
 
2300
              </element>
 
2301
              <element name="gradient_dz">
 
2302
                <ref name="real"/>
 
2303
              </element>
 
2304
              <optional>
 
2305
                <element name="move_nodes_in_x">
 
2306
                  <empty/>
 
2307
                </element>
 
2308
              </optional>
 
2309
              <optional>
 
2310
                <element name="move_nodes_in_y">
 
2311
                  <empty/>
 
2312
                </element>
 
2313
              </optional>
 
2314
              <optional>
 
2315
                <element name="move_nodes_in_z">
 
2316
                  <empty/>
 
2317
                </element>
 
2318
              </optional>
 
2319
            </element>
 
2320
            <element name="vertical_ale">
 
2321
              <a:documentation>enable vertical movement of mesh (TBD)</a:documentation>
 
2322
              <attribute name="replaces">
 
2323
                <value>NCOLOP &lt; 0 </value>
 
2324
              </attribute>
 
2325
              <group>
 
2326
                <element name="physical_functionals">
 
2327
                  <a:documentation>Functionals</a:documentation>
 
2328
                  <choice>
 
2329
                    <element name="minimise_relative_velocity_dot_grad_density">
 
2330
                      <a:documentation>move the nodes along an isosurface
 
2331
Please specify a scalar field</a:documentation>
 
2332
                      <attribute name="replaces">
 
2333
                        <value>NCOLOP = -1</value>
 
2334
                      </attribute>
 
2335
                      <attribute name="name">
 
2336
                        <data type="string"/>
 
2337
                      </attribute>
 
2338
                    </element>
 
2339
                    <element name="use_hessian_density">
 
2340
                      <a:documentation>Lock a node to a high curvature region, 
 
2341
Please specify a scalar field</a:documentation>
 
2342
                      <attribute name="replaces">
 
2343
                        <value>NCOLOP = -2</value>
 
2344
                      </attribute>
 
2345
                      <attribute name="name">
 
2346
                        <data type="string"/>
 
2347
                      </attribute>
 
2348
                    </element>
 
2349
                  </choice>
 
2350
                </element>
 
2351
                <optional>
 
2352
                  <element name="mesh_quality_terms">
 
2353
                    <a:documentation>Mesh Quality terms</a:documentation>
 
2354
                    <optional>
 
2355
                      <element name="spring_term">
 
2356
                        <a:documentation>Spring term, default value is 1.0</a:documentation>
 
2357
                        <ref name="real"/>
 
2358
                      </element>
 
2359
                    </optional>
 
2360
                    <optional>
 
2361
                      <element name="exponential_term">
 
2362
                        <a:documentation>Exponential term, default value is 1.0</a:documentation>
 
2363
                        <ref name="real"/>
 
2364
                      </element>
 
2365
                    </optional>
 
2366
                  </element>
 
2367
                </optional>
 
2368
                <optional>
 
2369
                  <element name="block_nodes_in_x">
 
2370
                    <empty/>
 
2371
                  </element>
 
2372
                </optional>
 
2373
                <optional>
 
2374
                  <element name="block_nodes_in_y">
 
2375
                    <empty/>
 
2376
                  </element>
 
2377
                </optional>
 
2378
                <optional>
 
2379
                  <element name="block_nodes_in_z">
 
2380
                    <empty/>
 
2381
                  </element>
 
2382
                </optional>
 
2383
              </group>
 
2384
            </element>
 
2385
          </choice>
 
2386
          <element name="vector_field">
 
2387
            <a:documentation>The velocity of the mesh.</a:documentation>
 
2388
            <attribute name="name">
 
2389
              <value>GridVelocity</value>
 
2390
            </attribute>
 
2391
            <attribute name="rank">
 
2392
              <value>1</value>
 
2393
            </attribute>
 
2394
            <choice>
 
2395
              <element name="diagnostic">
 
2396
                <ref name="internal_algorithm"/>
 
2397
                <element name="mesh">
 
2398
                  <attribute name="name">
 
2399
                    <value>CoordinateMesh</value>
 
2400
                  </attribute>
 
2401
                </element>
 
2402
                <ref name="diagnostic_vector_field"/>
 
2403
              </element>
 
2404
              <element name="prescribed">
 
2405
                <element name="mesh">
 
2406
                  <attribute name="name">
 
2407
                    <value>CoordinateMesh</value>
 
2408
                  </attribute>
 
2409
                </element>
 
2410
                <ref name="prescribed_vector_field_no_adapt"/>
 
2411
              </element>
 
2412
              <element name="aliased">
 
2413
                <ref name="generic_aliased_field"/>
 
2414
              </element>
 
2415
            </choice>
 
2416
          </element>
 
2417
        </element>
 
2418
      </optional>
 
2419
      <optional>
 
2420
        <choice>
 
2421
          <ref name="hr_adaptivity"/>
 
2422
          <ref name="prescribed_adaptivity"/>
 
2423
        </choice>
 
2424
      </optional>
 
2425
    </element>
 
2426
  </define>
 
2427
  <define name="gradation_options_full">
 
2428
    <ref name="disable_gradation"/>
 
2429
  </define>
 
2430
  <define name="gradation_options_full" combine="choice">
 
2431
    <ref name="gradation_options"/>
 
2432
  </define>
 
2433
  <define name="gradation_options">
 
2434
    <choice>
 
2435
      <element name="enable_gradation">
 
2436
        <a:documentation>Gradation constrains the jump
 
2437
in desired edge lengths along an edge, i.e.
 
2438
it controls how fast the mesh size may change.</a:documentation>
 
2439
        <optional>
 
2440
          <element name="gradation_parameter">
 
2441
            <a:documentation>The gradation parameter. Must be a real &gt;= 1.0.
 
2442
 
 
2443
The gradation parameter constrains the jump
 
2444
in desired edge lengths along an edge, i.e.
 
2445
it controls how fast the mesh size may change.
 
2446
A constant of 1.0 enforces a mesh of constant
 
2447
edge length everywhere. A value of 2.0 would
 
2448
allow the element size to double from element
 
2449
to element. The default value is 1.5.</a:documentation>
 
2450
            <ref name="real"/>
 
2451
          </element>
 
2452
        </optional>
 
2453
      </element>
 
2454
      <element name="anisotropic_gradation">
 
2455
        <a:documentation>Anisotropic gradation algorithm, allowing for
 
2456
anisotropic bounds on the gradient of the sizing
 
2457
function.</a:documentation>
 
2458
        <element name="tensor_field">
 
2459
          <a:documentation>Gamma is the tensor field that contains
 
2460
the bounds on the edge length specified by the error metric.</a:documentation>
 
2461
          <attribute name="name">
 
2462
            <value>Gamma</value>
 
2463
          </attribute>
 
2464
          <element name="anisotropic_symmetric">
 
2465
            <ref name="input_choice_real_dim_symmetric_tensor"/>
 
2466
          </element>
 
2467
        </element>
 
2468
      </element>
 
2469
    </choice>
 
2470
  </define>
 
2471
  <define name="disable_gradation">
 
2472
    <element name="disable_gradation">
 
2473
      <a:documentation>Gradation constrains the jump
 
2474
in desired edge lengths along an edge, i.e.
 
2475
it controls how fast the mesh size may change.</a:documentation>
 
2476
      <empty/>
 
2477
    </element>
 
2478
  </define>
 
2479
</grammar>