Source code for festim.boundary_conditions.dirichlets.custom_dc

from festim import DirichletBC, BoundaryConditionExpression
import fenics as f
import sympy as sp


[docs] class CustomDirichlet(DirichletBC): """ Subclass of DirichletBC allowing the use of a user-defined function. Args: surfaces (list or int): the surfaces of the BC function (callable): the custom function field (int, optional): the field the boundary condition is applied to. Defaults to 0. Example:: def fun(T, solute, param1): return 2*T + solute - param1 my_bc = CustomDirichlet( surfaces=[1, 2], function=fun, param1=2*festim.x + festim.t ) """ def __init__(self, surfaces, function, field=0, **prms) -> None: super().__init__(surfaces, field=field, value=None) self.function = function self.prms = prms self.convert_prms()
[docs] def create_expression(self, T): value_BC = BoundaryConditionExpression( T, self.function, **self.prms, ) self.expression = value_BC self.sub_expressions = self.prms.values()
[docs] def convert_prms(self): """Creates Expressions or Constant for all parameters""" for key, value in self.prms.items(): if isinstance(value, (int, float)): self.prms[key] = f.Constant(value) else: self.prms[key] = f.Expression(sp.printing.ccode(value), t=0, degree=1)