-
Notifications
You must be signed in to change notification settings - Fork 7
/
LMR.xsd
325 lines (320 loc) · 28.7 KB
/
LMR.xsd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:lmr="https://bitbucket.org/lmondy/lithosphericmodellingrecipe" targetNamespace="https://bitbucket.org/lmondy/lithosphericmodellingrecipe">
<xsd:annotation>
<xsd:documentation>This schema aims to document and assist the validation of input files for the LMR starter-kit.</xsd:documentation>
</xsd:annotation>
<xsd:element name="LMRStarterKit">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="Output_Controls">
<xsd:annotation>
<xsd:documentation>This section allows to control the experiment output parameters.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="description" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Defines a subset of the name to be used for the experiment output</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="model_resolution">
<xsd:annotation>
<xsd:documentation>This section controls the resolution the model box in the X, Y and Z directions. Note that Y is the vertical direction. The model dimensionality will be automatically changed from 2D to 3D by defining a the resolution in Z to a value different from 0</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="x" type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation>Number of cells along the X axis. This is the horizontal axis in Underworld.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="y" type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation>Number of cells along the Y axis. This is the
vertical axis in Underworld.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="z" type="xsd:nonNegativeInteger" default="0">
<xsd:annotation>
<xsd:documentation>Number of cells along the Z axis. Changing the value from 0 to any positive integer will switch the model dimensionality from 2D to 3D. This is the second horizontal axis in Underworld, defining the depth dimension in 3D experiments.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="experiment_duration_options">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="maximum_timesteps" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Use a large number for normal runs, use -1 for checking material geometries. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="maximum_time_in_years" type="xsd:double" default="10e6">
<xsd:annotation>
<xsd:documentation>The experiment will stop after reaching this time. maximum_time is defined in years.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="checkpoint_frequency_options">
<xsd:annotation>
<xsd:documentation>Underworld will output a checkpoint (h5 files) either after it reaches a defined number of years, or after a number of timesteps. It will choose whichever comes first, so make the one you don't want very large.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="every_x_years" type="xsd:double"> </xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="every_x_timesteps" type="xsd:positiveInteger"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="output_pictures" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>If true, a png output file with a predefined view will be created every so often. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="write_log_file" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>If true, command-line output will be stored into an appropriately named log file.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Thermal_Equilibration">
<xsd:annotation>
<xsd:documentation>Underworld can run a purely thermal solve very quickly. This means we can setup with desired radiogenic productions and thermal boundary conditions, and then let the model thermally equilibrate before any perturbation is set.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="run_thermal_equilibration_phase" type="xsd:boolean" default="true">
<xsd:annotation>
<xsd:documentation>Set to be false after running hie thermal equilibration phase once.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="update_xml_information" type="xsd:boolean" default="true">
<xsd:annotation>
<xsd:documentation> This parameters enables the automatic update of the thermal equilibration results location in the lmrInitials.xml input file. Thus the next phase starts with a thermally equilibrated geotherm. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="preserve_thermal_equilibration_checkpoints" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>When false, all but the last checkpoint of thermal equilibration will be preserved.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="output_controls">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="description" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Defines a subset of the name to be used for the experiment output</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="thermal_model_resolution">
<xsd:annotation>
<xsd:documentation>This section controls the resolution of the model box in the X, Y and Z directions when running the thermal equilibration phase. Note that Y is the vertical direction. Thermal diffusion has a characteristic time scale, based on the size of the cells being used to calculate it. Because the model is static, is fair to use very coarse resolutions to speed up this process. However, it is generally best to use a decent resolution any axis that has thermal gradients - for example, Y almost always will be increasing in temp. Generally if your model is laterally homogenous in temperature, a resolution like 2x40x2 works quite well.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="x" type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation>Number of cells along the X axis. This is the horizontal axis in Underworld.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="y" type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation>Number of cells along the Y axis. This is the vertical axis in Underworld.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="z" type="xsd:nonNegativeInteger"
default="0">
<xsd:annotation>
<xsd:documentation>Number of cells along the Z axis. This is the second horizontal axis in Underworld, defining the depth dimension in 3D experiments.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="experiment_duration_options">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="maximum_timesteps" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Use a very large number for thermal runs.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="maximum_time_in_years" type="xsd:double"
default="10e9">
<xsd:annotation>
<xsd:documentation>The experiment will stop after reaching this time. maximum_time is defined in years. For thermal equilibration, 1 billion years is a common time.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="checkpoint_frequency_options">
<xsd:annotation>
<xsd:documentation>Underworld will output a checkpoint (h5 files) either after it reaches a defined number of years, or after a number of timesteps. It will choose whichever comes first, so make the one you don't want very large.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="every_x_years" type="xsd:double"> </xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="every_x_timesteps" type="xsd:positiveInteger"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Restarting_Controls">
<xsd:annotation>
<xsd:documentation>This section enables to restart an experiment from a defined time step</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="restart" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>Set to be true to enable restart functionality.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="restart_from_step" type="xsd:nonNegativeInteger">
<xsd:annotation>
<xsd:documentation>Set to be the checkpoint number to restart from. If this tag is not specified, or set to -1, the model will restart from the last checkpoint it can find.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Solver_Details">
<xsd:annotation>
<xsd:documentation>This section controls the precision of the solvers, and which method should be used to solve. There two solvers to control - the linear solver, and the non-linear. The linear solver is solving stokes-flow (finding pressure and velocity). The non-linear solver sits on top of this, and forces the linear solver to solve again, in the case that there are strain-rate dependent viscosities. This is required because the linear solver solves with viscosity at a given strain-rate. Once it has a solution for P and V, the viscosity solution is now out of date, so the non-linear solver forces another linear solve. This continues until the model converges. You then have the option to force either a direct solve, or to use multigrid. Please read the documentation for each option to understand more.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="linear_solver">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="tolerance" type="xsd:double"
default="5e-4">
<xsd:annotation>
<xsd:documentation>The smaller the number, the better the solution for pressure and velocity - however, it will take longer, with sometimes little benifit.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="min_iterations" type="xsd:nonNegativeInteger"
default="10">
<xsd:annotation>
<xsd:documentation>This forces the solver to keep trying if a solution is found within this number of iterations. This can be important when using complex rheologies, and sometimes the solver has a lucky (but incorrect) guess at the
beginning.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="max_iterations" type="xsd:nonNegativeInteger"
default="1000">
<xsd:annotation>
<xsd:documentation>This parameter can be set very high if needed, but it essentially acts as an alarm, and forces the model to quit if this many iterations is reached. If it does, it's generally an indication that something
has gone wrong. </xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="nonLinear_solver">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="tolerance" type="xsd:double"
default="5e-3">
<xsd:annotation>
<xsd:documentation>The nonLinear tolerance is the acceptable difference between this linear solve's P and T, and the previous linear solve. Generally the smaller the better but it comes at a significant computational cost.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="min_iterations" type="xsd:nonNegativeInteger"
default="5">
<xsd:annotation>
<xsd:documentation>This forces the solver to keep trying if a solution is found within this number of iterations. This can be important when using complex rheologies, and sometimes the solver has a lucky (but incorrect) guess at the beginning.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="max_iterations" type="xsd:nonNegativeInteger"
default="500">
<xsd:annotation>
<xsd:documentation>This parameter can be set very high if needed, but it essentially acts as an alarm, and forces the model to quit if this many iterations is reached. If it does, it's generally an indication that something has gone wrong.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="force_multigrid_level_to_be" type="xsd:integer" default="-1">
<xsd:annotation>
<xsd:documentation>Multigrid works by repeatedly coarsening the element grid, and solving on the rougher grid. Underworld roughens the grid by a factor of two (so x = 48 becomes x = 24, becomes x = 12, becomes x = 6, becomes x = 3; which is 5 multigrid levels). If this flag is set to -1, the LMR will automatically determine the max number of multigrid levels your model resolution can take. If it is set to any positive number, the multigrid level will be set to that number. The job will fail if the model cannot support the multigrid level supplied.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="force_multigrid_solve" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>Multigrid is a numerical technique for reducing errors. While it is generally slower than a direct solve, it works well on really large problems. The LMR automatically uses multigrid on 3D problems, or 2D problems with more than 1e6 elements. If you switch this flag to true, the LMR will force Underworld to use multigrid.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="force_direct_solve" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>Using a direct solver can work very efficiently on problems that are not too large. The LMR automatically uses a direct solver on 2D problems that are less than 1e6 elements. However, by switching this flag to true, you can force Underworld to use the direct solver - warning, it may use up a LOT of memory.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Underworld_Execution">
<xsd:annotation>
<xsd:documentation>Define the location of Underworld binary and the number of CPUs to be use for the experiment. </xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="Underworld_binary" type="xsd:anyURI" default="/path/to/your/underworld/install/build/bin/Underworld">
<xsd:annotation>
<xsd:documentation>Absolute or relative path to Underworld binary. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="CPUs" type="xsd:positiveInteger" default="1">
<xsd:annotation>
<xsd:documentation>Define the number of CPUs available for executing Underworld in the experiment. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="supercomputer_mpi_format" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>When false, the command is run: 'mpirun -np CPUs Underworld...'. When true, the command is run 'mpirun Underworld...'. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="extra_command_line_flags" type="xsd:anyURI" default="">
<xsd:annotation>
<xsd:documentation>You can add any additional commandline flags to pass straight to Underworld here. They will be added last. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="parallel_command" type="xsd:anyURI" default="mpirun">
<xsd:annotation>
<xsd:documentation>Some computers may use different commands to run parallel jobs. The default is mpirun, but some Cray computers use aprun -B. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="parallel_command_cpu_flag" type="xsd:anyURI" default="-np">
<xsd:annotation>
<xsd:documentation>In conjunction with parrallel_command. When running on normal machines, mpirun specifics how many CPUs you want with the -np flag, to give "mpirun -np x command". This flag allows you to change this. Switching "supercomputer_mpi_format" removes this flag. </xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="verbose_run" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation>When true, the LMR prints out the command it is about to try and run. </xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>