tidy3d.NonlinearSusceptibility#

class NonlinearSusceptibility[source]#

Bases: NonlinearModel

Model for an instantaneous nonlinear chi3 susceptibility. The expression for the instantaneous nonlinear polarization is given below.

Parameters:
  • chi3 (float = 0) – [units = um^2 / V^2]. \(\chi_3\) nonlinear susceptibility.

  • numiters (Optional[PositiveInt] = None) – Deprecated. The old usage nonlinear_spec=model with model.numiters is deprecated and will be removed in a future release. The new usage is nonlinear_spec=NonlinearSpec(models=[model], num_iters=num_iters). Under the new usage, this parameter is ignored, and NonlinearSpec.num_iters is used instead.

Notes

This model uses real time-domain fields, so \(\chi_3\) must be real.

\[P_{NL} = \varepsilon_0 \chi_3 |E|^2 E\]

The nonlinear constitutive relation is solved iteratively; it may not converge for strong nonlinearities. Increasing tidy3d.NonlinearSpec.num_iters can help with convergence.

For complex fields (e.g. when using Bloch boundary conditions), the nonlinearity is applied separately to the real and imaginary parts, so that the above equation holds when both \(E\) and \(P_{NL}\) are replaced by their real or imaginary parts. The nonlinearity is only applied to the real-valued fields since they are the physical fields.

Different field components do not interact nonlinearly. For example, when calculating \(P_{NL, x}\), we approximate \(|E|^2 \approx |E_x|^2\). This approximation is valid when the \(E\) field is predominantly polarized along one of the x, y, or z axes.

Example

>>> nonlinear_susceptibility = NonlinearSusceptibility(chi3=1)

Attributes

chi3#
numiters#