Source code for tidy3d.components.heat.monitor
"""Objects that define how data is recorded from simulation."""
from abc import ABC
from typing import Union
import pydantic.v1 as pd
from ..base_sim.monitor import AbstractMonitor
from ..types import ArrayFloat1D
BYTES_REAL = 4
class HeatMonitor(AbstractMonitor, ABC):
"""Abstract base class for heat monitors."""
[docs]
class TemperatureMonitor(HeatMonitor):
"""Temperature monitor."""
unstructured: bool = pd.Field(
False,
title="Unstructured Grid",
description="Return data on the original unstructured grid.",
)
conformal: bool = pd.Field(
False,
title="Conformal Monitor Meshing",
description="If ``True`` the heat simulation mesh will conform to the monitor's geometry. "
"While this can be set for both Cartesian and unstructured monitors, it bears higher "
"significance for the latter ones. Effectively, setting ``conformal = True`` for "
"unstructured monitors (``unstructured = True``) ensures that returned temperature values "
"will not be obtained by interpolation during postprocessing but rather directly "
"transferred from the computational grid.",
)
[docs]
def storage_size(self, num_cells: int, tmesh: ArrayFloat1D) -> int:
"""Size of monitor storage given the number of points after discretization."""
# stores 1 real number per grid cell, per time step, per field
num_steps = self.num_steps(tmesh)
return BYTES_REAL * num_steps * num_cells * len(self.fields)
# types of monitors that are accepted by heat simulation
HeatMonitorType = Union[TemperatureMonitor]