Source code for festim.exports.minimum_volume

from mpi4py import MPI

import dolfinx
import numpy as np

from festim.exports.volume_quantity import VolumeQuantity


[docs] class MinimumVolume(VolumeQuantity): """Computes the minimum value of a field in a given volume. Args: field (festim.Species): species for which the minimum volume is computed volume (festim.VolumeSubdomain): volume subdomain filename (str, optional): name of the file to which the minimum volume is exported Attributes: see `festim.VolumeQuantity` """ volume_meshtags: dolfinx.mesh.MeshTags @property def title(self): return f"Minimum {self.field.name} volume {self.volume.id}"
[docs] def compute(self): """Computes the minimum value of solution function within the defined volume subdomain, and appends it to the data list.""" solution = self.field.post_processing_solution entities = self.volume_meshtags.find(self.volume.id) if isinstance(solution, dolfinx.fem.Function): V = solution.function_space else: V = self.field.sub_function_space mesh = V.mesh mesh.topology.create_connectivity(mesh.topology.dim, mesh.topology.dim) dofs = dolfinx.fem.locate_dofs_topological( V=V, entity_dim=mesh.topology.dim, entities=entities ) self.value = mesh.comm.allreduce(np.min(solution.x.array[dofs]), op=MPI.MIN) self.data.append(self.value)