Source code for festim.exports.derived_quantities.minimum_volume
from festim import VolumeQuantity
import fenics as f
import numpy as np
[docs]
class MinimumVolume(VolumeQuantity):
"""
Computes the minimum value of a field in a given volume
Args:
field (str, int): the field ("solute", 0, 1, "T", "retention")
surface (int): the surface id
Attributes:
field (str, int): the field ("solute", 0, 1, "T", "retention")
surface (int): the surface id
title (str): the title of the derived quantity
show_units (bool): show the units in the title in the derived quantities
file
function (dolfin.function.function.Function): the solution function for
the field
.. note::
Units are in H/m3 for hydrogen concentration and K for temperature
"""
def __init__(self, field, volume) -> None:
super().__init__(field=field, volume=volume)
@property
def export_unit(self):
if self.field == "T":
return "K"
else:
return "H m-3"
@property
def title(self):
quantity_title = f"Minimum {self.field} volume {self.volume}"
if self.show_units:
return quantity_title + f" ({self.export_unit})"
else:
return quantity_title
[docs]
def compute(self, volume_markers):
"""Minimum of f over subdomains cells marked with self.volume"""
V = self.function.function_space()
dm = V.dofmap()
subd_dofs = np.unique(
np.hstack(
[
dm.cell_dofs(c.index())
for c in f.SubsetIterator(volume_markers, self.volume)
]
)
)
return np.min(self.function.vector().get_local()[subd_dofs])