Source code for festim.exports.derived_quantities.derived_quantity
from festim import Export
[docs]
class DerivedQuantity(Export):
"""
Parent class of all derived quantities
Args:
field (str, int): the field ("solute", 0, 1, "T", "retention")
Attributes:
field (str, int): the field ("solute", 0, 1, "T", "retention")
title (str): the title of the derived quantity
show_units (bool): show the units in the title in the derived quantities
file
function (fenics.Function): the solution function of
the field
dx (fenics.Measure): the measure of the volume
ds (fenics.Measure): the measure of the surface
n (fenics.Function): the normal vector
D (fenics.Function): the diffusion coefficient
S (fenics.Function): the source term
thermal_cond (fenics.Function): the thermal conductivity
Q (fenics.Function): the heat source term
data (list): the data of the derived quantity
t (list): the time values of the data
allowed_meshes (list): the allowed meshes for the derived quantity
"""
def __init__(self, field) -> None:
super().__init__(field=field)
self.dx = None
self.ds = None
self.n = None
self.D = None
self.S = None
self.thermal_cond = None
self.Q = None
self.T = None
self.data = []
self.t = []
self.show_units = True
@property
def allowed_meshes(self):
# by default, all meshes are allowed
# override this method if that's not the case
return ["cartesian", "cylindrical", "spherical"]
[docs]
class VolumeQuantity(DerivedQuantity):
"""DerivedQuantity relative to a volume
Args:
field (str, int): the field ("solute", 0, 1, "T", "retention")
volume (int): the volume id
"""
def __init__(self, field: str or int, volume: int) -> None:
super().__init__(field)
self.volume = volume
@property
def volume(self):
return self._volume
@volume.setter
def volume(self, value):
if not isinstance(value, int) or isinstance(value, bool):
raise TypeError("volume should be an int")
self._volume = value
[docs]
class SurfaceQuantity(DerivedQuantity):
"""DerivedQuantity relative to a surface
Args:
field (str, int): the field ("solute", 0, 1, "T", "retention")
surface (int): the surface id
"""
def __init__(self, field: str or int, surface: int) -> None:
super().__init__(field)
self.surface = surface
@property
def surface(self):
return self._surface
@surface.setter
def surface(self, value):
if not isinstance(value, int) or isinstance(value, bool):
raise TypeError("surface should be an int")
self._surface = value