Source code for festim.exports.surface_flux
import ufl
from dolfinx import fem
from festim.exports.surface_quantity import SurfaceQuantity
[docs]
class SurfaceFlux(SurfaceQuantity):
"""Computes the flux of a field on a given surface
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:
see `festim.SurfaceQuantity`
"""
@property
def title(self):
return f"{self.field.name} flux surface {self.surface.id}"
[docs]
def compute(self, ds):
"""Computes the value of the flux at the surface
Args:
ds (ufl.Measure): surface measure of the model
"""
# obtain mesh normal from field
# if case multispecies, solution is an index, use sub_function_space
if isinstance(self.field.solution, ufl.indexed.Indexed):
mesh = self.field.sub_function_space.mesh
else:
mesh = self.field.solution.function_space.mesh
n = ufl.FacetNormal(mesh)
self.value = fem.assemble_scalar(
fem.form(
-self.D
* ufl.dot(ufl.grad(self.field.solution), n)
* ds(self.surface.id)
)
)
self.data.append(self.value)