InitVolAvgLorentzInvEpsCrossDev

InitVolAvgLorentzInvEpsCrossDev

Works with XSimBase license.

MultiField updater that calculates the volume-averaged Lorentz dielectric tensors for arbitrary dielectric boundaries. The linear Lorentz model parameters are automatically determined by this updater by providing sample permittivities over a range of frequencies for any frequency-dependent dielectric function.

Two 6-component fields are filled; the first is the dielectric response at infinite frequency, and the second is the strength of the Lorentz resonance. This updater should be run as an InitialUpdateStep, and the 6-component fields are then used by applyVolAvgInvEpsCrossDev and VolAvgLorentzJCrossDev updaters.

InitVolAvgLorentzInvEpsCrossDev Parameters

The initVolAvgInvEpsCrossDev updater takes the lowerBounds and upperBounds parameters of Field Slab updaters, as well as the following parameters:

writeFields (required list of strings)

List of field names in the following order: the 6-component inverse epsilon field at infinite frequency, and the 6-component Lorentz strength field.

resonantFreq (required float)

Resonant frequency of Lorentz model in Hz.

DispersiveDielectricShape sub-block (required sub-blocks)

Any number of these blocks can be provided, but there must be at least one block named background. DispersiveDielectricShape blocks that are not the background block must have a gridBoundary string attribute giving the name of a GridBoundaryCrossDev block.

Every DispersiveDielectricShape sub-block should contain the same number of Permittivity sub-blocks. There should be one Permittivity block for every sample frequency. Each Permittivity block takes 2 attributes:

  • permittivity: A list of floats describing the relative permittivity tensor. The list can have 1, 3, or 6 elements for isotropic, anisotropic (grid-aligned), and anisotropic (non-grid-aligned) dielectrics, respectively. In the anisotropic non-grid-aligned case, the ordering is \([\varepsilon_{xx},\varepsilon_{yy},\varepsilon_{zz},\varepsilon_{yz},\varepsilon_{zx},\varepsilon_{xy}]\). For the other cases, omit elements from the end of the list as appropriate.

  • frequency: A float. The frequency (in Hz) at which the given permittivity applies. Sample frequencies must be same across all DispersiveDielectricShape blocks in this updater.

InitVolAvgLorentzInvEpsCrossDev Usage Notes

The Lorentz algorithm models dielectrics with the following frequency-dependent form:

\[\varepsilon(\omega) = \varepsilon_{\infty} + \frac{A}{\omega_0^2-\omega^2}\]

Even if the true dielectric function that is to be simulated does not have this form for all frequencies, it is often the case that a limited frequency range is well-approximated by the Lorentz model. Many applications need to simulate waves in only a narrow frequency range (e.g. a single mode in a dielectric waveguide), in which case the Lorentz model can be an excellent fit.

The Lorentz model has 3 parameters, \(\varepsilon_{\infty}\), \(A\), and \(\omega_0\). For accuracy, the resonant frequency, \(\omega_0\) must be the same everywhere in the simulation. This is a limitation only when simulating multiple dispersive dielectric objects with dramatically different dielectric functions. There is no issue when the resonances of all dielectrics in a simulation are well above the working frequency, or when simulating a dispersive dielectric in a non-dispersive background. The \(\omega_0\) parameter is selected by the user.

The remaining parameters, \(\varepsilon_{\infty}\) and \(A\), are determined automatically via a least-squares fit of the Lorentz model (with \(\omega_0\) provided by the user) to a set of permittivity samples at various frequencies. That is, for dielectric functions \(\varepsilon_1(\omega)\), \(\varepsilon_2(\omega)\), etc., each associated with either the background or an object, the user provides the values:

  • \(\varepsilon_1(\omega_1)\), \(\varepsilon_1(\omega_2)\), …

  • \(\varepsilon_2(\omega_1)\), \(\varepsilon_2(\omega_2)\), …

and this updater figures out the best \(\varepsilon_{\infty}\) and \(A\) in the least-squares sense.

Maxwell’s equations with Lorentz dielectrics may be written as

\[\begin{split}\frac{d\mathbf{B}}{dt} &= -\nabla\times\mathbf{E} \\ \frac{d\mathbf{D}}{dt} &= c^2 \nabla\times\mathbf{B}-\frac{1}{\varepsilon_0}( \mathbf{J}^{\rm pol} + \mathbf{J}^{\rm src}) \\ \mathbf{E} &= \varepsilon_{\infty}^{-1} \mathbf{D} \\ \frac{d\mathbf{P}}{dt} &= \frac{1}{\varepsilon_0} \mathbf{J}^{\rm pol} \\ \frac{d\mathbf{J}^{\rm pol}}{dt} &= \varepsilon_0 ( A \mathbf{E} - \omega_0^2 \mathbf{P})\end{split}\]

The first two equations are Faraday’s and Ampere’s laws, respectively; these are implemented using the compCurlCrossDev updater or the Dey-Mittra counterparts if the simulation contains perfectly-conducting boundaries (e.g. DeyMittraAmpereCrossDev). Note also the sum of polarization and source currents in Ampere’s law; this superposition can be carried out a number of ways (e.g. using twoFieldOpCrossDev to sum fields JPol and JSrc into a J field).

The last three equations are implemented using special updaters, for convenience and to ensure 2nd-order error in grid cells cut by the boundaries of dielectric objects. This updater, InitVolAvgLorentzInvEpsCrossDev, initializes GridFields that represent the \(\varepsilon_{\infty}^{-1}\) and \(A\) operators found in the third and fifth equation.

Example InitVolAvgLorentzInvEpsCrossDev block

<FieldUpdater initLorentz>
  kind = initVolAvgLorentzInvEpsCrossDev
  lowerBounds = [0 0 0]
  upperBounds = [$NX+1$ $NY+1$ $NZ+1$]
  writeFields = [InvEpsInf A]
  resonantFreq = Si_RESFREQ
  <DispersiveDielectricShape background>
    <Permittivity bg1>
      permittivity = [1.]
      frequency = Si_FREQ1
    </Permittivity>
    <Permittivity bg2>
      permittivity = [1.]
      frequency = Si_FREQ2
    </Permittivity>
  </DispersiveDielectricShape>
  <DispersiveDielectricShape fiber>
    gridBoundary = fiberBoundary
    <Permittivity fiber1>
      permittivity = [Si_EPS1]
      frequency = Si_FREQ1
    </Permittivity>
    <Permittivity fiber2>
      permittivity = [Si_EPS2]
      frequency = Si_FREQ2
    </Permittivity>
  </DispersiveDielectricShape>
</FieldUpdater>

Notes

InitVolAvgLorentzInvEpsCrossDev

History

InitVolAvgLorentzInvEpsCrossDev was introduced in XSim 1.0.