Materials and Dispersion

Prismo provides comprehensive support for modeling realistic optical materials with frequency-dependent properties.

Material Library

Access pre-defined materials with validated optical properties:

import prismo

# List available materials
materials = prismo.list_materials()
# ['Si', 'SiO2', 'Si3N4', 'Au', 'Ag', 'Al', 'ITO']

# Get a material
silicon = prismo.get_material('Si')
silica = prismo.get_material('SiO2')
gold = prismo.get_material('Au')

# Calculate refractive index
wavelength = 1.55e-6  # 1550 nm
omega = 2 * np.pi * 299792458.0 / wavelength
n = silicon.refractive_index(omega)
print(f"n_Si @ 1550nm = {n.real:.3f}")  # ~3.48

Available Materials

Material

Type

n @ 1550nm

Applications

Si (Silicon)

Lorentz

3.48

Waveguides, modulators

SiO2 (Silica)

Sellmeier

1.44

Cladding, substrates

Si3N4 (Silicon Nitride)

Sellmeier

2.0

Low-loss waveguides

Au (Gold)

Drude

-

Plasmonic devices

Ag (Silver)

Drude

-

Plasmonic devices

Al (Aluminum)

Drude

-

Mirrors, interconnects

ITO

Drude

-

Transparent conductors

Dispersion Models

Lorentz Model

For dielectrics with resonances:

from prismo import LorentzMaterial, LorentzPole

material = LorentzMaterial(
    epsilon_inf=2.0,
    poles=[
        LorentzPole(
            omega_0=2 * np.pi * 200e12,  # Resonance at 200 THz
            delta_epsilon=1.5,            # Oscillator strength
            gamma=1e13,                   # Damping rate
        )
    ],
    name="CustomDielectric"
)

# Add to library
prismo.add_material('MyMaterial', material)

Drude Model

For metals and plasmas:

from prismo import DrudeMaterial

metal = DrudeMaterial(
    epsilon_inf=1.0,
    omega_p=2 * np.pi * 2e15,  # Plasma frequency
    gamma=1e13,                 # Collision frequency
    name="CustomMetal"
)

Debye Model

For dielectric relaxation:

from prismo import DebyeMaterial

material = DebyeMaterial(
    epsilon_inf=2.0,
    epsilon_s=10.0,  # Static permittivity
    tau=1e-12,        # Relaxation time
    name="PolarDielectric"
)

Anisotropic Materials

Uniaxial Materials

Materials with different indices parallel and perpendicular to an axis (e.g., liquid crystals):

# Create uniaxial material
liquid_crystal = prismo.create_uniaxial_material(
    n_ordinary=1.5,
    n_extraordinary=1.7,
    optic_axis='z',
    name="LiquidCrystal"
)

Biaxial Materials

Materials with three different principal indices:

biaxial = prismo.create_biaxial_material(
    nx=2.0,
    ny=2.2,
    nz=2.5,
    name="BiaxialCrystal"
)

Custom Tensor Materials

Full control over permittivity and permeability tensors:

from prismo import TensorMaterial, TensorComponents

# Define permittivity tensor
epsilon = TensorComponents(
    xx=4.0, yy=4.5, zz=5.0,  # Diagonal
    xy=0.1, xz=0.0, yz=0.0    # Off-diagonal
)

material = TensorMaterial(epsilon=epsilon, name="CustomAnisotropic")

Time-Domain Integration

Dispersive materials are automatically integrated in time-domain simulations using the Auxiliary Differential Equation (ADE) method. This happens transparently when you use dispersive materials in your simulation.