importFromFileUpdater
Works with VSimBase, VSimEM, VSimPD, VSimPA, and VSimMD licenses.
Updates a field from a file (e.g,. an hdf5 file). This updater sets the values of a field from a dataset in an appropriate file (e.g., a Vorpal field dump file).
The importFromFileUpdater
takes the lowerBounds
and upperBounds
parameters of FieldUpdater, as well
as the following parameters:
writeFields (required string vector)
A single element, the field to update with the imported data.
fileName (required string)
Name of the HDF5 file containing the data to read.
dataset (required string)
Name of the HDF5 dataset to read from the file.
component (optional integer, default = 0)
The component to read, if reading a single component. Either this
parameter or writeComponents
must be given, but not both.
writeComponents (optional integer vector)
The components of the writeField to be set from the file. If given,
the vector must have at least one element, and elements must be in
sequence, e.g., [0 1 2] or [2 3], not [0 2], not [3 2]. If
writeComponents
is not given, the updater will update only
the component corresponding to the component
parameter.
Either component
or writeComponents
must be
given, but not both.
datasetLowerBounds (optional integer vector)
See datasetUpperBounds
.
datasetUpperBounds (optional integer vector)
With datasetLowerBounds
, the bounds describing the subset
of the file’s dataset (array) to be copied to the field; the region
of cells includes the lower bound, but excludes the upper (as usual
for lowerBounds and upperBounds in Vorpal). These bounds are specified
by grid index, and must be of the same size as the upper/lowerBounds
provided. So for example to import the first 10 cells of a 3 component field
lowerBounds = [0 0 0] upperBounds = [10 10 10] dataSetLowerBounds = [0 0 0 0] datasetUpperBounds = [10 10 10 3]
If you wanted to import the first 10 cells of a 3 component field into cells 10-20 of the destination field it would look like lowerBounds = [10 10 10] upperBounds = [20 20 20] dataSetLowerBounds = [0 0 0 0] datasetUpperBounds = [10 10 10 3]
The length in each dimension must correspond to the length in a spatial dimension (of the volume described by lower/upperBounds), in order. For example, if the updater updates a box in space of size \(10\times 12\times 20\), then then the subset of the file’s dataset may be \(10\times 1\times 12\times 20\) or \(1\times 10\times 1\times 12\times 1\times 12\times 1\), but it may not be \(12\times 10\times 20\) or \(12\times 12\times 20\).
(In a serial simulation, the above correspondence is relaxed if
the allowDatasetReshapeInSerial
option is true
.)
The compatibility of bounds is slightly altered if copyUniformInDir is set; in this case, the length of the dataset dimension corresponding to the direction specified by copyUniformInDir must be one, rather than the same as the length of the updater’s bounds in that direction.
copyUniformInDir (optional integer)
Allows a (lower-dimensional) file dataset to be copied to a field
slice, after which those values are copied into adjacent field
slices. For example, if a file contains a 2D dataset representing a
function \(f(x, y)\), setting copyUniformDir = 2
would
allow setting a 3D field \(F(x,y,z) = f(x,y)\) for every
\(z\). When copyUniformInDir
is specified, the
dataset dimensions must correspond to the updater’s bounds after the
updater’s bounds have been modified to have length 1 in the
direction of copyUniformDir.
For example, suppose we have a 1D dataset with length 4 and
values [10,20,30,40], and
a 2+1-dimensional field with dimensions
\(4\times 3\times 1\) (a \(4\times 3\) scalar field in 2D).
If the dataset bounds are dataSetLowerBounds=[0]
and
datasetUpperBounds=[4]
, and the field bounds are
lowerBounds=[0,1]
and upperBounds=[4,2]
(and
writeComponents=[0]
, the only choice for this scalar field),
then the field will be set to:
0 0 0 0
10 20 30 40
0 0 0 0
(where the first dimension is horizontal, and the second vertical)
but if field bounds are [0,1]
and [4,3]
and
copyUniformDir = 1
, then the field will be set to:
0 0 0 0
10 20 30 40
10 20 30 40
allowDatasetReshapeInSerial (optional integer, default = 0 (false))
This option, available only for serial simulations, allows the datasetBounds to be reshaped to match the updater’s bounds; for example, a 1D dataset with 12 elements might be used to update a \(4\times 3\) sub-array of the writeField. Use of this option is discouraged.
<FieldUpdater readB>
kind = importFromFileUpdater
fileName = sourceSim_B_5.h5
dataset = "B"
writeFields = [B]
writeComponents = [0 1 2]
lowerBounds = [0 0 0]
upperBounds = [$NX+1$ $NY+1$ $NZ+1$]
</FieldUpdater>