multiUpdater (1d, 2d, 3d)

The multiUpdater references several updaters and uses them to perform an explicit time-integration. The multiUpdater typically used to advance systems of the form:

\[\notag \begin{align} \frac{\partial \mathbf{q}}{\partial t} + \nabla\cdot\left[ \mathcal{F} \left( \mathbf{w} \right) \right] = \mathcal{S} \left( \mathbf{w}\right) \end{align}\]

Time integration schemes currently supported by multiUpdater include 1st, 2nd and 3rd order Runge-Kutta, subcycling and 1st, 2nd order accurate Super Time Step methods.

The multiUpdater updater accepts the parameters required by Updater.

The operations performed by the multiUpdater are specified using the UpdateStep and UpdateSequence pattern used for the main USim input file. Note that only the loop attribute for the UpdateSequence is used by the multiUpdater and that the attribute “operation = integrate” must be specified in the final UpdateStep in the loop in order for USim to perform the time integration.

The time integration scheme used by the multiUpdater is specified by the use of a Time Integrator block.

Data

in (string vector, required)
Input 1 to N are input nodalArrays to be used in the updaters specified in the UpdateStep.
out (string vector, required)
Output 1 to N are output nodalArrays resulting from the integration UpdateStep.

Sub-Blocks

TimeIntegrator

Time Integrator Currently only one time integration scheme can be specified.

Time integration schemes currently supported by multiUpdater include 1st, 2nd and 3rd order Runge-Kutta, subcycling and 1st, 2nd order accurate Super Time Step methods.

UpdateSequence
UpdateSequence This block is used to set the sequence of update steps
UpdateStep
UpdateStep The steps used in the update

Example

The code block below demonstrates the use of a multiUpdater to solve a multi-species fluid problem with collision operators and boundary conditions:

<Updater rkUpdater>
  kind = multiUpdater1d
  onGrid = domain

  in = [q, q1, q2, q3]
  out = [qnew, qnew1, qnew2, qnew3]

  <TimeIntegrator rkIntegrator>
    kind = rungeKutta1d
    ongrid = domain
    scheme = third
  </TimeIntegrator>

  <UpdateSequence sequence>
    loop = [boundaries,hyper]
  </UpdateSequence>

  <UpdateStep boundaries>
     updaters = [openBoundaries, openBoundaries1, openBoundaries2, openBoundaries3]
     syncVars = [q, q1, q2, q3]
  </UpdateStep>

  <UpdateStep hyper>
     operation = "integrate"
     updaters = [\
              computeN1, computeN2, computeN3, \
              computeT1, computeT2, computeT3, \
              computeV1, computeV2, computeV3, \
              collisionFrequency, \
              momentumSource, energySource,\
              hyper, hyper1, hyper2, hyper3, \
              addThermalRelaxation1, addThermalRelaxation2, addThermalRelaxation3 \
                ]
     syncVars = [qnew, qnew1, qnew2, qnew3]
  </UpdateStep>

</Updater>