linearApplyUpdater

linearApplyUpdater

Works with VSimBase, VSimEM, VSimPD, VSimPA, and VSimMD licenses.

Multifield updater that works by defining a matrix relationship, \(Ax=b\), between two vectors, \(x\) and \(b\), and the matrix \(A\), e.g.,

\[\begin{split}\left[{\begin{array}{cc}A_{00}&A_{01}\\A_{10}&A_{11}\\\end{array}}\right]\left[{\begin{array}{cc}F_{1}\\G_{1}\\\end{array}}\right]=\left[\begin{array}{cc}F_{2}\\G_{2}\\\end{array}\right].\end{split}\]

linearApplyUpdater Parameters

The linearApplyUpdater takes the lowerBounds and upperBounds parameters of FieldUpdater, as well as the following parameters:

minDim (optional integer, default = 1)

If the dimension of the simulation is less than minDim, this updater will not be applied.

readFields (required string vector)

A vector containing the names of fields to read. If multiple components of a field are read, then the field name must be repeated once for each component.

readComponents (required integer vector)

For each readField, a component; references to the jth readField will use the component specified in the jth element of this vector.

writeFields (required string vector)

A vector containing the names of fields to update. If multiple components of a field are written, then the field name must be repeated once for each component.

writeComponents (required integer vector)

For each writeField, a component; references to the jth writeField will use the component specified in the jth element of this vector.

writeEquationToFile (optional integer, default = 0 (false))

The matrix \(A\), left-hand side vector \(x\), and (after solution) unknown vector \(b\), will be written out in MatrixMarket format when set to true.

matrixfiller (required parameter block)

To define the matrix A, you must use a MatrixFiller block. At least one MatrixFiller block is required for the linearApplyUpdater.

vectorwriter (required parameter block)

To define the left-hand side vector x, you must use a VectorWriter block. At least one VectorWriter block is required for the linearApplyUpdater.

vectorreader (required parameter block)

To access the unknown vector b, you must use a VectorReader block. At least one VectorReader block is required for the linearApplyUpdater.

Example linearApplyUpdater Block

<FieldUpdater eyUpdate>

  kind = linearApplyUpdater
  lowerBounds = [0 0 0]
  upperBounds = [NX NY NZ]
  readFields = [edgeElec faceMag faceMag]
  readComponents = [1 2 0] # 0 = Ey, 1 = Bz, 2 = Bx
  writeFields = [edgeElec]
  writeComponents = [1]

  <MatrixFiller eyupmat>
    kind = interior
    <StencilElement eyey>
      value = 1.
      minDim = 0
      cellOffset = [0 0 0]
      rowFieldIndex = 0
      columnFieldIndex = 0
    </StencilElement>
    <StencilElement eybxup>
    ...
    </StencilElement>
    ...
  </MatrixFiller>

  <VectorWriter eyuplhs>
    kind = fieldVectorWriter
    minDim = 0
    readField = faceMag
    readComponent = 2
    lowerBounds = [0 0 0]
    upperBounds = [NX NY NZ]
    component = 1
  </VectorWriter>

  <VectorReader eyupunk>
    kind = fieldVectorReader
    minDim = 0
    writeField = edgeElec
    writeComponent = 1
    lowerBounds = [0 0 0]
    upperBounds = [NX NY NZ]
  </VectorReader>

</FieldUpdater>