epetraUpdater

epetraUpdater

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}\]

epetraUpdater Parameters

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

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 readFields, a component; the jth component of this vector is used for the jth readFields specified.

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 field in writeFields, a component; the jth component of this vector is used for the jth writeFields specified.

problemType (optional string, default = multiply)

One of either multiply or solve. The update is either that one starts with \(x\) and gets \(b\) (multiply) or one starts with \(b\) and gets \(x\) (solve), with \(x\) and \(b\) as described above. If multiply, the readFields should describe \(x\) and if solve, the readFields should describe \(b\).

readFactors (optional float vector)

Vector describing the factors by which to multiply the readFields prior to any updating. The vector can be any length; if the vector has fewer elements than the number of readFields, or is not specified, the values of the multiplicative factors default to 1.

writeFactors (optional float vector)

Vector describing the factors by which to multiply the writeFields prior to writing. The vector can be any length; if the vector has fewer elements than the number of writeFields, or is not specified, the values of the multiplicative factors default to 1.

maxIters (optional integer, default = 100)

maximum number of iterations to take for convergence to the desired residual.

solver (required string)

One of:

  • cg
  • gmres
  • cgs
  • tfqmr
  • bicgstab

These are the iterative solvers (and one direct sovler) available in Aztec that can be used for solving a linear system of equations. Please refer to the Trilinos documentation for further details.

scaling (optional string, default = none)

One of:

  • none
  • Jacobi
  • row_sum
  • sym_diag
  • sym_row_sum

Please refer to the Trilinos documentation for further details on these scalers.

precond (optional string, default = dom_decomp_ilu)

One of:

  • ml
  • dom_decomp_ilu
  • dom_decomp_ilut
  • neumann
  • ls
  • jacobi

Please refer to the Trilinos documentation for further details on these preconditioners.

output (optional string, default = none)

Desired level of output messages; one of:

  • all
  • none
  • warnings
  • last
  • brieflast
desiredResid (optional float, default = 1.e-9)

The desired residual.

diagFac (real, default = 1)

This should be the value equivalent to the diagonal value on the matrix. diagFac is used to scale the equation.

mlThreshold (optional float, default = 0)

Use only when pre-conditioner is ml: weight at which the multi-level preconditioner considers two nodes to be connected. Weight is important when the problem involves cells with large aspect ratios.

boundaryAtBottomInComponentDir (optional integer vector, default = [])

If true, the boundary is at the bottom in the component direction. E.g., do not put in a stencil for Vx along the IX=0 plane, as that will be filled in by boundary conditions.

boundaryAtBottomInNonComponentDir (optional integer vector, default = [])

If true, the boundary is at the bottom in the non-component directions. E.g., do not put in a stencil for Vy and Vz along the IY=IZ=0 planes, as they will be filled in by boundary conditions.

boundaryAtTopInComponentDir (optional integer vector, default = [])

If true, the boundary is at the top in the component direction. E.g., do not put in a stencil for Vx along the IX=0 plane, as that will be filled in by boundary conditions.

boundaryAtTopInNonComponentDir (optional integer vector, default = [])

If true, the boundary is at the top in the non-component directions. E.g., do not put in a stencil for Vy and Vz along the IY=IZ=0 planes, as they will be filled in by boundary conditions.

MatrixFiller (required parameter block)

To define the matrix \(A\), you must use a matrixFiller block. At least one matrixFiller block is required for the epetraUpdater. matrixFiller parameters include:

kind (required string) – one of:

  • interior
  • cutcell
StencilElement (required parameter block):
The MatrixFiller block also must contain at least one StencilElement block. StencilElement defines the non-zero values in a row of the matrix, and is described in StencilElement.

Example epetraUpdater Block

<FieldUpdater eyUpdate>

  kind = epetraUpdater
  problemType = multiply
  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]
  boundaryAtBottomInComponentDir = [0]
  boundaryAtBottomInNonComponentDir = [1]
  boundaryAtTopInComponentDir = [1]
  boundaryAtTopInNonComponentDir = [1]

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

</FieldUpdater>