.. _base-material: Material Base Class ===================== This is the base class for all other specific material models. .. contents:: :local: :depth: 2 :backlinks: top Overview -------- The :class:`Material ` class provides an abstract interface for all material models used in the electromagnetic solvers. It defines the structure that all material classes must follow, including initialization and permittivity evaluation over specified wavelengths. This class should be subclassed to create specific material models. At a minimum, subclasses must override: - ``__init__`` to initialize material-specific parameters. - ``eps(wavelengths)`` to return the material permittivity at given wavelengths. - ``index(wavelengths)`` to return the material refractive index at given wavelengths. Examples ---------- To define a custom material model, inherit from :class:`Material ` and implement the required methods. Creating a Custom Material Object ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This examples shows how to create a custom material object and override the ``__init__``, ``eps()`` and ``index()`` methods. .. code-block:: python from pyOptiShared.Material import Material import numpy as np class CustomMaterial(Material): def __init__(self, n): super.__init__() self.n = n # Refractive index def eps(self, wavelengths): # Return constant permittivity for all wavelengths return np.full_like(wavelengths, self.n**2, dtype=np.complex64) def index(self, wavelengths): # Return constant permittivity for all wavelengths return np.full_like(wavelengths, self.n, dtype=np.complex64)