Source code for simudo.physics.problem_data
import pint
from cached_property import cached_property
from ..fem import FunctionSpaceCache, FunctionSubspaceRegistry
from ..util import NameDict, SetattrInitMixin
from .optical import Optical
from .poisson_drift_diffusion import PoissonDriftDiffusion
__all__ = ['ProblemData']
[docs]class ProblemData(SetattrInitMixin):
'''
Parameters
----------
goal: str
Represents the goal of this problem. Must be
``"local charge neutrality"``, ``"thermal equilibrium"``,
or ``"full"`` (representing full coupled solution).
unit_registry: :py:class:`pint.UnitRegistry`
Unit registry to use.
mesh_data: :py:class:`~.mesh_data.MeshData`
Mesh data to use by default in
:py:class:`~.poisson_drift_diffusion.PoissonDriftDiffusion` and
:py:class:`~.optical.Optical`.
Attributes
----------
pdd: :py:class:`~.poisson_drift_diffusion.PoissonDriftDiffusion`
Poisson and electronic transport.
optical: :py:class:`~.optical.Optical`
Optics.
'''
@cached_property
def pdd(self):
return PoissonDriftDiffusion(
problem_data=self)
@cached_property
def optical(self):
return Optical(problem_data=self)
@cached_property
def function_space_cache(self):
return FunctionSpaceCache()
@cached_property
def function_subspace_registry(self):
return FunctionSubspaceRegistry()
@property
def goal_abbreviated(self):
'''return abbreviated goal, for logging tag purposes'''
goal = self.goal
if goal == 'local charge neutrality':
return 'ntrl'
elif goal == 'thermal equilibrium':
return 'thmq'
elif goal == 'full':
return goal
else:
raise ValueError('goal')