Project

General

Profile

Variables » History » Version 3

Ted Sume, 11/13/2019 03:04 PM

1 1 Ted Sume
# Variables
2
3
# Variables and their metadata
4
5
Variables are represented by datasets with attributes. The attribute vsMesh gives the mesh that the data lives on. Other attributes can denote whether the data lives at the nodes or centers of cells. Of course, the data shape must match up to the mesh shape. 
6
Each variable can optionally show the time group it belongs too (using optional attribute vsTimeGroup). If there is no such attribute, we assume that there is only one global time group to which a variable is tied too. Otherwise (multiple time groups with variables not referencing a particular one) the data is VizSchema compliant. Another problem may occur if a variable uses the vsTimeGroup attribute and its mesh is actually temporal. Such data is also considered not compliant. 
7
8
Jump to
9
10
* [Variables and their metadata](https://ice.txcorp.com/vizschema/wiki/Variables) 
11
* [Variables that are combined with their meshes](https://ice.txcorp.com/vizschema/wiki/VariablesWithMesh)
12
* [Data ordering](https://ice.txcorp.com/vizschema/wiki/DataOrdering)
13
* [Variables defined in terms of other variables](https://ice.txcorp.com/vizschema/wiki/DerivedVariables) 
14
* [Multidomain metadata](https://ice.txcorp.com/vizschema/wiki/MultiDomainMetaData)
15
* [Other metadata](https://ice.txcorp.com/vizschema/wiki/OtherMetaData)
16
17
Nodal structured scalar data
18
```
19
GROUP "/" {
20
  Group "A" {
21
    Dataset "phi" {
22
      Att vsType = "variable"                     // Required string
23
      Att vsMesh = "mycartgrid"                   // Required string
24
      DATASPACE [201, 301, 105]
25
      Att vsCentering = "nodal"                   // Optional string, defaults to "nodal", other allowed values 
26
                                                  // are "zonal", "edge" or "face"
27
      Att vsIndexOrder = "compMinorC"             // Optional string with default value is "compMinorC"
28
                                                  // ("compMajorC" and "compMajorF" have the same result as the minor variants). 
29
      Att vsTimeGroup = "/mytime"                 // Optional string
30
    }
31
    Group mycartgrid {
32
      Att vsType = "mesh"                         // Required string
33
      Att vsKind = "uniform"                      // Required string
34
      Att vsStartCell = [0, 0, 0]                 // Required integer array
35
      Att vsNumCells = [200, 300, 104]            // Required integer array
36
      Att vsLowerBounds = [-2.5, -2.5, -1.3]      // Required float array
37
      Att vsUpperBounds = [2.5, 2.5, 1.3]         // Required float array
38
    }
39
  }
40
}
41
```
42
* vsType identifies phi as a variable. 
43
* vsMesh gives the mesh that this variable lives on. See [Naming Conventions](https://ice.txcorp.com/vizschema/wiki/Naming) for details 
44
* vsCentering set to "nodal" denotes that the variable lives at the mesh nodes. Accordingly, the array is one larger in each dimension than vsNumCells of the mesh. If it is "zonal", then the data is centered at the cell (zone) centers, and the number of points equals the number of cells. In the future, we hope to support face and edge, but for now, any data that is not labeled specifically "zonal" is assumed to be nodal. Other labels are ignored. 
45
* vsIndexOrder indicates the interpretation of the indices for the data set. See [Data Ordering](https://ice.txcorp.com/vizschema/wiki/DataOrdering). E.g., for "compMinorC", the first index is the x index, the second index is the y index, and the last index is the z index. 
46
* vsTimeGroup denotes a time group for this data as described [here](https://ice.txcorp.com/vizschema/wiki/OtherMetaData). 
47
* The data is assumed to have the same index ordering as the spatial part of its corresponding mesh. 
48
49
See [meshes](https://ice.txcorp.com/vizschema/wiki/Meshes) for the definition of the mesh description. 
50
51
**Nodal structured vector data**
52
```
53
GROUP "/" {
54
  Group "A" {
55
    Dataset "phi" {
56
      Att vsType = "variable"                     // Required string
57
      Att vsMesh = "mycartgrid"                   // Required string
58
      DATASPACE [201, 301, 105, 4]
59
      Att vsIndexOrder = "compMinorC"             // Required string, defaults to "compMinorC", denoting that the component
60
                                                  // index is the last, most rapidly varying. 
61
      Att vsCentering = "nodal"                   // Optional string, defaults to "nodal", other allowed values 
62
                                                  // are "zonal", "edge" or "face"
63
      Att vsTimeGroup = "mytime"                  // Optional string
64
      Att vsLabels = "x, y, z"                    // Optional string
65
    }
66
    Group mycartgrid {
67
      Att vsType = "mesh"                         // Required string
68
      Att vsKind = "uniform"                      // Required string
69
      Att vsStartCell = [0, 0, 0]                 // Required integer array
70
      Att vsNumCells = [200, 300, 104]            // Required integer array
71
      Att vsLowerBounds = [-2.5, -2.5, -1.3]      // Required float array
72
      Att vsUpperBounds = [2.5, 2.5, 1.3]         // Required float array
73
    }
74
  }
75
}
76
```
77
* vsType identifies phi as a variable. 
78
* vsMesh gives the mesh that this variable lives on. See [Naming Conventions](https://ice.txcorp.com/vizschema/wiki/Naming) for details 
79
* vsCentering set to "nodal" denotes that the variable lives at the mesh nodes. Accordingly, the array is one larger in each dimension than vsNumCells of the mesh. If it is "zonal", then the data is centered at the cell (zone) centers, and the number of points equals the number of cells. In the future, we hope to support face and edge, but for now, any data that is not labeled specifically "zonal" is assumed to be nodal. Other labels are ignored. 
80
* vsTimeGroup denotes a time group for this data. 
81
* vsIndexOrder can be either "compMinor", the default, or compMajor, with the latter denoting that the most slowly varying index is the component index. This attribute is not needed for data on irregular structured or unstructured meshes, where it is assumed that the data index order matches that of the mesh. 
82
* vsLabels gives names to the components of the variable. In this case, the first three components of variable 'phi' will be named 'x', 'y', and 'z' instead of 'phi_0', 'phi_1', and 'phi_2'. Since there are 3 names given, but 4 components, the last component will retain its default name, 'phi_3'. 
83
84
**Zonal structured data**
85
```
86
GROUP "/" {
87
  Group "A" {
88
    Dataset "phi" {
89
      Att vsType = "variable"                     // Required string
90
      Att vsMesh = "mycartgrid"                   // Required string
91
      DATASPACE [200, 300, 104] 
92
      Att vsCentering = "zonal"                   // Optional string, defaults to "nodal", other allowed values 
93
                                                  // are "zonal", "edge" or "face"
94
      Att vsTimeGroup = "mytime"                  // Optional string
95
    }
96
    Group mycartgrid {
97
      Att vsType = "mesh"                         // Required string
98
      Att vsKind = "uniform"                      // Required string
99
      Att vsStartCell = [0, 0, 0]                 // Required integer array
100
      Att vsNumCells = [200, 300, 104]            // Required integer array
101
      Att vsLowerBounds = [-2.5, -2.5, -1.3]      // Required float array
102
      Att vsUpperBounds = [2.5, 2.5, 1.3]         // Required float array
103
    }
104
  }
105
}
106
```
107
This array now is zonal, so that the data is associated with the centers of the zones. Accordingly, the number of data points per direction should match up to vsNumCells. 
108
109
**Structured data with arbitrary offsets**
110
111
For structured data that are neither nodal nor zonal, one must specify the location of the data within the cell using the vsNodeOffset attribute, a float vector, to be used in place of the vsCentering attribute defined above. The values of vsNodeOffset are in the range 0...1, where 0 refers to the lower, let, bottom node, and 1 to the upper, right, top position within the cell. The number of elements in vsNodeOffset should match the number of topological dimensions. The presence of vsNodeOffset overrides any vsCentering setting. The size of data must match vsNumCells (even in the case where vsNodeOffset is [0., 0., 0.]). Use masking to turn off some cells (see next section). Following are examples of offsets: 
112
```
113
vsNodeOffset = [0., 0., 0.]     // same as nodal 
114
vsNodeOffset = [0.5, 0.5, 0.5]  // same as zonal
115
vsNodeOffset = [0.5, 0., 0.]    // x-edge
116
vsNodeOffset = [0.5, 0.5, 0.]   // z-face
117
```
118
More details are provided at  https://ice.txcorp.com/staggeredviz/wiki/VizSchemaEdgeFace. 
119
120
**Vector edge and face fields**
121
122
In addition to "nodal" or "zonal", the vsCentering attribute can take the values of "edge" or "face" to denote vector fields which are centred on the faces or the edges of the cell. Edge/face fields are common occurrences in electromagnetic simulations with the electric field (E) located on edges and the magnetic field (B) on faces. In finite volume schemes, the flux is typically face-centered. 
123
A field cannot have vsCentering="face" or vsCentering="edge" and vsNodeOffset defined, as an "edge" ("face") centering has a different meaning from a vsNodeOffset. An edge (face) field value represents an average value over the edge (face) whereas a vsNodeOffset denotes the point location of the field with respect to the base node of the cell. 
124
Contrary to "zonal" and "nodal" data, "face" and "edge" data must correspond to vector fields. The number of components of the vector field is expected to match the number of space dimensions. An exception is in 2D where a face/edge vector field will be allowed to have a third component (Bz) which is assumed to be zonal for a face field, and nodal for an edge field (Ez). 
125
For structured grids, the sizes of all components must match the number of nodes in this case. Each component will be implicitly assumed to be attached to the low end face/edge of each cell. For instance, given the nodes (i, j), (i+1, j), (i+1, j+1),and (i, j+1), the edge Ex component will be attached to the segment (i, j) -> (i+1, j) and the Ey component to (i, j) -> (i, j+1). Note that if the number of nodes is (nx + 1) * (ny + 1) then all components are expected to have dimensions (nx + 1, ny + 1). In other words, there is an additional row/column of cells on the upper side of the domain to accommodate the last face/edge values. In the example below, the grid is 2 by 3 cells and has been padded to become 3 by 4 in order to attach face/edge values along i = 2 and j = 3. Face/edge values falling outside the domain, e.g. edge Ey or face Bx at i = 0 and j = 3, are assumed to be invalid. However, edge Ex and face By are valid at i = 0 and j = 3. 
126
```
127
^
128
|
129
j 
130
  +...+...+...+
131
  :   :   :   :
132
3 +---+---+...+
133
  |   |   |   :
134
2 +---+---+...+
135
  |   |   |   :
136
1 +---+---+...+
137
  |   |   |   :
138
0 +---+---+...+
139
  0   1   2   --> I
140
```
141
142
**Edge vector structured data**
143
```
144
GROUP "/" {
145
  Group "A" {
146
    Dataset "phi" {
147
      Att vsType = "variable"                     // Required string
148
      Att vsMesh = "mycartgrid"                   // Required string
149
      DATASPACE [202, 302, 106, 4]
150
      Att vsCentering = "edge"                    // Optional string, defaults to "nodal", other allowed value 
151
                                                  // are "zonal", "edge" and "face"
152
      Att vsIndexOrder = "compMinorC"             // Optional string with default value is "compMinorC"
153
                                                  // ("compMajorC" and "compMajorF" have the same result as the minor variants). 
154
      Att vsTimeGroup = "/mytime"                 // Optional string
155
    }
156
    Group mycartgrid {
157
      Att vsType = "mesh"                         // Required string
158
      Att vsKind = "uniform"                      // Required string
159
      Att vsStartCell = [0, 0, 0]                 // Required integer array
160
      Att vsNumCells = [200, 300, 104]            // Required integer array
161
      Att vsLowerBounds = [-2.5, -2.5, -1.3]      // Required float array
162
      Att vsUpperBounds = [2.5, 2.5, 1.3]         // Required float array
163
    }
164
  }
165
}
166
```
167
**Face vector structured data**
168
```
169
GROUP "/" {
170
  Group "A" {
171
    Dataset "phi" {
172
      Att vsType = "variable"                     // Required string
173
      Att vsMesh = "mycartgrid"                   // Required string
174
      DATASPACE [202, 302, 106, 4]
175
      Att vsCentering = "face"                    // Optional string, defaults to "nodal", other allowed value 
176
                                                  // are "zonal", "edge" and "face"
177
      Att vsIndexOrder = "compMinorC"             // Optional string with default value is "compMinorC"
178
                                                  // ("compMajorC" and "compMajorF" have the same result as the minor variants). 
179
      Att vsTimeGroup = "/mytime"                 // Optional string
180
    }
181
    Group mycartgrid {
182
      Att vsType = "mesh"                         // Required string
183
      Att vsKind = "uniform"                      // Required string
184
      Att vsStartCell = [0, 0, 0]                 // Required integer array
185
      Att vsNumCells = [200, 300, 104]            // Required integer array
186
      Att vsLowerBounds = [-2.5, -2.5, -1.3]      // Required float array
187
      Att vsUpperBounds = [2.5, 2.5, 1.3]         // Required float array
188
    }
189
  }
190
}
191
```
192
For unstructured grids, the attributes "face" and "edge" can also be used. In this case, the user is expected to attach a scalar value to each oriented face/edge element, the list of edges and faces must be provided as a list of node indexes. Note that edges are defined by two nodes (i, j) and that edge (j, i) = - edge(i, j). Similarly, faces are defined by 3 nodes (i, j, k) and face(i, k, j) = - face(i, j, k). In other words, the permutation of two indexes introduces a negative sign. 
193 3 Ted Sume
194 1 Ted Sume
Below are vector basis functions for edge (silver) and face (gold) vector fields in the case of a tetrahedral cell (left and middle) and a cuboid cell. Theses basis functions, known as Whitney forms, determine the interpolation weights inside a cell. They have the important property that the line (area) integral of the vector field over the edge (face) is zero on all edges (faces) except one. Note that the direction of the edge (face) vector field is not necessarily along the edge (perpendicular to the face). 
195
196 3 Ted Sume
<img style="width:35%" src="https://ice.txcorp.com/attachments/download/97/simplexEdge.png> 
197
<img style="width:35%" src="https://ice.txcorp.com/attachments/download/98/simplexFace.png> 
198
<img style="width:35%" src="https://ice.txcorp.com/attachments/download/96/cuboid.png>
199 1 Ted Sume
   
200
**Missing data values**
201
202
There are cases where the data are corrupted or otherwise not known. Since data values are expected to be provided over the entire mesh, special values must be chosen to indicate that the data are invalid at these locations. This is known as a missing value. Missing values should be chosen outside the range of data validity, if possible. Thus, variables that are positive definite (density, temperature in Kelvin, etc.) may choose a negative value. When this is not possible then an extremely unlikely value can also serve the purpose of a missing value, e.g. close to the minimum or maximum range of the floating point number representation (-3.402823466E+38, 3.402823466E+38). 
203
204
The optional variable attribute for a missing value is vsMissingValue. This attribute cannot apply to a variable that has vsType == "mask". 
205
```
206
GROUP "/" {
207
  Group "A" {
208
    Dataset "myarray" {
209
      Att vsMissingValue =  -3.402823466E+38      // float attribute
210
      Att vsMesh = "mycartgrid"                   // Required string
211
      DATASPACE [201, 301, 105]
212
      Att vsCentering = "nodal"                   // Optional string, defaults to "nodal", other allowed values 
213
                                                  // are "zonal", "edge" or "face"
214
      Att vsIndexOrder = "compMinorC"             // Optional string with default value is "compMinorC"
215
                                                  // ("compMajorC" and "compMajorF" have the same result as the minor variants). 
216
      Att vsTimeGroup = "/mytime"                 // Optional string
217
    }
218
    Group mycartgrid {
219
      Att vsType = "mesh"                         // Required string
220
      Att vsKind = "uniform"                      // Required string
221
      Att vsStartCell = [0, 0, 0]                 // Required integer array
222
      Att vsNumCells = [200, 300, 104]            // Required integer array
223
      Att vsLowerBounds = [-2.5, -2.5, -1.3]      // Required float array
224
      Att vsUpperBounds = [2.5, 2.5, 1.3]         // Required float array
225
    }
226
  }
227
```
228
**Labeling Variable Components**
229
230
The default names given to components of a multi-component variable are generally of the form "datasetName_componentNumber". Users desiring more human-readable labels for components may use the vsLabels attribute to specify different names. This attribute must contain a comma-separated string of names to be used for each component of a variable. In the event of an error such as an incorrectly formatted string, the default component names will be used. 
231
Note that if labels are assigned to components, those components will no longer be available with the default name. This limitation includes any expressions defined with vsVars or in a VisIt session. Any expression that refers to an old component name will fail to find the component under the new name. In order to function properly, these expressions will need to refer to the label as supplied by the vsLabel attribute. 
232
This example shows a variable with 7 components, labeled 'x', 'y', 'z', 'dx', 'dy', 'dz', 'particle_id':
233
```
234
Dataset "myVar" {
235
  Att vsType = "variable"
236
  Att vsMesh = "myMesh"
237
  DATASPACE [200, 7] 
238
  vsLabels = "x, y, z, dx, dy, dz, particle_id" 
239
}
240
```
241
**Associating Variables with Times**
242
243
Any Variable or VariableWithMesh may be assigned time information using the vsTimeGroup attribute. This optional attribute should contain the name of a "time" group (see [Other metadata](https://ice.txcorp.com/vizschema/wiki/OtherMetaData) for more information). 
244
Note that since Vizschema does not allow multiple timesteps in a single file, conflicting time information will result in undefined behavior. 
245
In this example, the variable "myVar" has been declared to belong to time "0.005" and step "2": 
246
```
247
Dataset "myVar" {
248
  Att vsType = "variable"
249
  Att vsMesh = "myMesh"
250
  DATASPACE [200, 7]
251
  Att vsTimeGroup = "timeGroup"
252
}
253
254
Group "timeGroup" {
255
  Att vsKind = "time"
256
  Att vsTime = "0.005"
257
  Att vsStep = "2"
258
}
259
```
260
For unstructured grids there are attributes for various shapes. Lines, Triangles, Quadrilaterals, Polygons and Polyherda. Datasets of these types must include the connectivity. The attributes are vsLines, vsTriangles, vsPolygons, vsPolyhedra, vsPoints, vsLines, vsTriangles, vsQuadrilaterals, vsTetrahedrals, vsPyramids, vsPrisms and vsHexahedrals. 
261
```
262
Dataset "myVar" {
263
  Att vsType = "variable"         // 
264
  Att vsMesh = "myMesh"           //
265
  DATASPACE [5, 6, 7]
266
  Att vsLines = "/connectivity"
267
}
268
Dataset "connectivity" {
269
  DATA [210, 2]
270
}
271
Group myMesh {
272
      Att vsType = "mesh"                         // Required string
273
      Att vsKind = "uniform"                      // Required string
274
      Att vsStartCell = [0, 0, 0]                 // Required integer array
275
      Att vsNumCells = [5, 6, 7]                  // Required integer array
276
```
277
**High order fields**
278
279
High order fields can be attached to meshes of type vsKind = "unstructured", "structured", or "uniform". These fields are similar to unstructured, structured, or uniform fields except that they carry an additional index, of dimension n_subCell, which denotes the location of the field inside the coarse cells. 
280
```
281
Dataset myScalarVar {
282
   Att vsType = "variable"
283
   Att vsMesh = "myMesh"
284
   DATASPACE [n_coarseCells, n_subCell]
285
}
286
```
287
Higher order vector fields have the component as last index: 
288
```
289
Dataset myVectorVar {
290
   Att vsType = "variable"
291
   Att vsMesh = "myMesh"
292
   DATASPACE [n_coarseCells, n_subCell, n_comps]
293
}
294
```
295
High order fields cannot have the vsCentering attribute.