Materials
Material, Structure, and material sample types in WiTwin Core
Overview#
WiTwin Core defines the base material and structure types shared across all WiTwin solver packages. These are the same Material and Structure you use in witwin.channel and witwin.maxwell — they are re-exported from witwin.core.
from witwin.core import Box, Material, Structure
wall = Structure(
name="wall",
geometry=Box(position=(0.0, 0.0, 1.5), size=(0.25, 4.0, 3.0)),
material=Material(eps_r=4.0, sigma_e=0.0),
)Material#
Defines the electromagnetic properties of a surface.
Material(eps_r=4.0, mu_r=1.0, sigma_e=0.01, name="concrete")| Parameter | Type | Default | Description |
|---|---|---|---|
eps_r | float | 1.0 | Relative permittivity |
mu_r | float | 1.0 | Relative permeability |
sigma_e | float | 0.0 | Electrical conductivity. Must be >= 0 |
name | str | None | None | Optional material name |
Methods#
material.evaluate_static() — Returns a StaticMaterialSample with eps_r, mu_r, sigma_e.
material.evaluate_at_frequency(frequency) — Returns a FrequencyMaterialSample with complex eps_r accounting for conductivity at the given frequency in Hz.
material.capabilities() — Returns a MaterialCapabilities describing which physical effects are active.
Structure#
Pairs a geometry with a material to create a physical object.
Structure(
name="wall",
geometry=Box(position=(0.0, 0.0, 1.5), size=(0.25, 4.0, 3.0)),
material=Material(eps_r=4.0, sigma_e=0.0),
priority=0,
enabled=True,
)| Parameter | Type | Default | Description |
|---|---|---|---|
geometry | GeometryBase | required | Any geometry primitive |
material | MaterialSpec | required | Material defining EM properties |
name | str | None | None | Unique name. Required by Scene |
priority | int | 0 | Priority for overlapping structures |
enabled | bool | True | Whether this structure is included in simulation |
tags | tuple[str] | () | Optional tags for grouping |
metadata | dict | None | None | Optional metadata |
MaterialCapabilities#
Describes which physical effects are active for a material.
caps = material.capabilities()
print(caps.conductive) # True if sigma_e > 0
print(caps.magnetic) # True if mu_r != 1.0
print(caps.anisotropic) # True if tensor properties are set
print(caps.dispersive) # True if dispersion poles are set| Field | Type | Description |
|---|---|---|
conductive | bool | Material has non-zero conductivity |
magnetic | bool | Material has non-unity permeability |
anisotropic | bool | Material uses tensor properties |
dispersive | bool | Material uses dispersion poles |
StaticMaterialSample#
Returned by material.evaluate_static().
| Field | Description |
|---|---|
eps_r | Relative permittivity (real) |
mu_r | Relative permeability (real) |
sigma_e | Electrical conductivity |
FrequencyMaterialSample#
Returned by material.evaluate_at_frequency(frequency).
| Field | Description |
|---|---|
eps_r | Complex relative permittivity including conductivity loss |
mu_r | Relative permeability |
sigma_e | Electrical conductivity |
MaterialSpec Protocol#
MaterialSpec is the protocol that all material types must satisfy. It requires:
name: str | Nonecapabilities() -> MaterialCapabilitiesevaluate_static() -> StaticMaterialSampleevaluate_at_frequency(frequency) -> FrequencyMaterialSample
Both witwin.core.Material and witwin.maxwell.Material implement this protocol.
Next Steps#
- Scene API — SceneBase reference
- Mitsuba bridge — convert scenes to Mitsuba format