phaseShiftVecUpdater

phaseShiftVecUpdater

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

A phaseShiftVecUpdater is a MultiField updater that treats the two specified fields as the real and imaginary components of a single complex field, and applies a phase shift. Thus, if \(\mathbf{F}\) and \(\mathbf{G}\) are the fields and \(\phi\) is the phase shift, the operation is

\[\begin{split}\begin{bmatrix}\mathbf{F} \\ \mathbf{G} \end{bmatrix} \mapsto \begin{bmatrix} \mathbf{F}\cos\phi - \mathbf{G}\sin\phi \\ \mathbf{F}\sin\phi + \mathbf{G}\cos\phi \end{bmatrix}.\end{split}\]

Therefore, if \(\mathbf{E} = \mathbf{F} + i\mathbf{G}\), then the operation is \(\mathbf{E}\mapsto e^{i\phi}\mathbf{E}\).

This updater is useful for applying a phase shift across a periodic boundary to enforce a specific Bloch wavevector in a system with a periodic geometry.

phaseShiftVecUpdater Parameters

The phaseShiftVecUpdater takes the lowerBounds and upperBounds parameters of FieldUpdater, as well as the local region modification parameters. In addition, phaseShiftVecUpdater takes the following parameters:

minDim (optional integer, default = 1)

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

writeFields (required string vector)

The two fields to update. The first is the real part of the complex field (corresponding to \(\mathbf{F}\) above) and the second is the imaginary part (\(\mathbf{G}\)).

phase (required float)

The phase to use in the phase shift transformation, corresponding to \(\phi\) in the description above.

Example phaseShiftVecUpdater Block

<FieldUpdater leftPhaseShift_E>
  kind = phaseShiftVecUpdater
  lowerBounds = [-1   0   0]
  upperBounds = [ 0  NY  NZ]
  cellsToUpdateBelowDomain = [1 1 1]
  cellsToUpdateAboveDomain = [1 1 1]
  writeFields = [elecField elecFieldI]
  phase = -X_PHASE
</FieldUpdater>