Source code for festim.exports.surface_quantity
import csv
from festim.species import Species
from festim.subdomain.surface_subdomain import SurfaceSubdomain
[docs]
class SurfaceQuantity:
"""Export SurfaceQuantity
Args:
field (festim.Species): species for which the surface flux is computed
surface (festim.SurfaceSubdomain1D): surface subdomain
filename (str, optional): name of the file to which the surface flux is exported
Attributes:
field (festim.Species): species for which the surface flux is computed
surface (festim.SurfaceSubdomain): surface subdomain
filename (str): name of the file to which the surface flux is exported
t (list): list of time values
data (list): list of values of the surface quantity
"""
def __init__(self, field, surface, filename: str | None = None) -> None:
self.field = field
self.surface = surface
self.filename = filename
self.t = []
self.data = []
self._first_time_export = True
@property
def filename(self):
return self._filename
@filename.setter
def filename(self, value):
if value is None:
self._filename = None
elif not isinstance(value, str):
raise TypeError("filename must be of type str")
elif not value.endswith(".csv") and not value.endswith(".txt"):
raise ValueError("filename must end with .csv or .txt")
self._filename = value
@property
def surface(self):
return self._surface
@surface.setter
def surface(self, value):
if not isinstance(value, int | SurfaceSubdomain) or isinstance(value, bool):
raise TypeError("surface should be an int or F.SurfaceSubdomain")
self._surface = value
@property
def field(self):
return self._field
@field.setter
def field(self, value):
# check that field is festim.Species
if not isinstance(value, Species | str):
raise TypeError("field must be of type festim.Species")
self._field = value
[docs]
def write(self, t):
"""If the filename doesnt exist yet, create it and write the header,
then append the time and value to the file"""
if self.filename is not None:
if self._first_time_export:
header = ["t(s)", f"{self.title}"]
with open(self.filename, mode="w+", newline="") as file:
writer = csv.writer(file)
writer.writerow(header)
self._first_time_export = False
with open(self.filename, mode="a", newline="") as file:
writer = csv.writer(file)
writer.writerow([t, self.value])