yeeAmpereUpdater
Works with VSimBase, VSimEM, VSimPD, VSimPA, and VSimMD licenses.
MultiField updater that updates an electric field, defined on grid edges, according to the standard second-order Yee leapfrog algorithm, using a magnetic field (on faces), and optionally a current field. This current field can be a 3-vector or the last three components of a 4-vector.
The yeeAmpereUpdater
takes the lowerBounds
and
upperBounds
parameters of FieldUpdater, as well as
the global region modification parameters and local region
modification parameters. In
addition, yeeAmpereUpdater takes the following parameters:
readFields (required string vector)
A vector of either one or two strings. The first string is the name of magnetic field, and if provided, the second is the name of the current field to add to the result (multiplied by the specified factors).
writeFields (required string vector)
A vector contining a single element, the name of the electric field to update.
useVecUpdater (optional integer, default = false)
If true, the updater will update all three components of the
electric field, beginning with the specified component
.
The updated field must therefore have at least \({\tt
component} + 3\) components.
component (optional integer, default = 0)
The field component to update, or if useVecUpdater
is
true
, the first field component to update.
readFieldCompShifts (optional integer vector, default = [0 1])
This vector must have the same number of elements as
readFields
. It specifies the amount by which to
increment the component indices of the first field and the
(optional) second field. For example, if a magnetic field is
represented by components 3–5 of the field EandB
, then to
calculate the curl of that magnetic field, one would specify
readFields = [EandB]
and readFieldCompShifts =
[3]
. If the second (current) field is not a 4-vector, then it is
proper to set readFieldCompShifts = [0 0]
.
gridBoundary (optional string)
If provided, only components on the interior of the specified
GridBoundary will be updated. The method to define the interior
is given in the interiorness
parameters.
interiorness (optional string, default = cellcenter)
If the gridBoundary
parameter is specified, this is the
method the used to determine whether a component is interior to
the boundary. The behavior depends on the offset
specified in the updated Field. One of:
cellcenter
:If offset = none
, or offset = edge4v
and
component = 0
, then a cell is considered interior if
its node is adjacent to at least one cell with center inside
the boundary.
If offset = edge
, or offset = edge4v
and
component
is not 0
, then a cell is considered
interior if the edge specified by component
is
adjacent to at least one cell with center inside the boundary.
If offset = face
, then a cell is considered
interior if the face specified by component
is
adjacent to at least one cell with center inside the boundary.
If offset = center
, then a cell is considered interior
if its center is inside the boundary.
deymittra
If offset = none
, or offset = edge4v
and
component = 0
, then a cell is considered interior if
all nodes adjacent to (i.e. displaced by a single edge from)
its node are inside the boundary.
If offset = edge
, or offset = edge4v
and
component
is not 0
, then a cell is considered
interior if the edge specified by component
has at
least one adjacent node inside the boundary, and that edge is
not ignored by the Dey-Mittra algorithm given the
dmFrac
parameter specified in the gridBoundary
.
If offset = face
, then a cell is considered
interior if all nodes adjacent to the face specified by
component
are inside the boundary.
This interiorness
option cannot be specified with
offset = center
.
.dmnodal
This interiorness
option is identical to deymittra
.
lowerSkinDepth (optional integer vector)
Specifies the number of skin cells, in each direction, on the
lower end of the local domain. The cells in the skin are updated
before the fields specified as messageFields
in the
UpdateStep or InitialUpdateStep
block are messaged. If not
specified, the skin depth will be determined automatically.
upperSkinDepth (optional integer vector)
Specifies the number of skin cells, in each direction, on the upper end of the local domain. If not specified, the skin depth will be determined automatically.
<FieldUpdater yeeAmpere>
kind = yeeAmpereUpdater
lowerBounds = [NX_BEGIN NY_BEGIN NZ_BEGIN]
upperBounds = [NX_END NY_END NZ_END]
readFields = [yeeB]
writeFields = [yeeE]
useVecUpdater = true
</FieldUpdater>