diff --git a/python/dumux/assembly/__init__.py b/python/dumux/assembly/__init__.py index b09a7f4776d16f4e0d24f348e2622fce60537ba5..b9e9ddcd3a9c3fdedf863ddd3c9c2050974744cf 100644 --- a/python/dumux/assembly/__init__.py +++ b/python/dumux/assembly/__init__.py @@ -1,19 +1,39 @@ +"""Classes and function related to the assembly of linear systems""" + from dune.generator.generator import SimpleGenerator from dune.common.hashit import hashIt +from dumux.wrapping import cppWrapperCreator, cppWrapperClassAlias + + +@cppWrapperCreator +def _createFVAssembler(*, problem, gridVariables, model, diffMethod="numeric", isImplicit=True): + """ + Create an FVAssembler object + Args: + problem: A problem instance (boundary & initial conditions) + gridVariables: A grid variable instance (primary & secondary variables defined on a grid) + model: A DuMux model configuration instance + diffMethod (str): The method to compute derivatives of the residual (numeric or analytic) + isImplicit (bool): If the time discretization method is implicit or explicit -def FVAssembler(*, problem, gridVariables, model, diffMethod="numeric", isImplicit=True): + Returns: + An assembler object (Python-bindings of the corresponding C++ type) - TypeTag = model.getTypeTag() + Usage: + assembler = FVAssembler( + problem=problem, gridVariables=gridVars, model=model, diffMethod=diffMethod + ) + """ if diffMethod == "numeric": - dm = "Dumux::DiffMethod::numeric" + cppDiffMethod = "Dumux::DiffMethod::numeric" elif diffMethod == "analytic": - dm = "Dumux::DiffMethod::analytic" + cppDiffMethod = "Dumux::DiffMethod::analytic" else: raise ValueError(f"Unknown diffMethod {diffMethod}") - assemblerType = f"Dumux::FVAssembler<{TypeTag}, {dm}, {int(isImplicit)}>" + assemblerType = f"Dumux::FVAssembler<{model.cppType}, {cppDiffMethod}, {int(isImplicit)}>" includes = ( problem._includes + problem.gridGeometry()._includes + ["dumux/assembly/fvassembler.hh"] ) @@ -26,6 +46,11 @@ def FVAssembler(*, problem, gridVariables, model, diffMethod="numeric", isImplic assemblerType, moduleName, holder="std::shared_ptr", - preamble=model.getProperties(), + preamble=model.cppHeader, ) return module.FVAssembler(problem, problem.gridGeometry(), gridVariables) + + +@cppWrapperClassAlias(creator=_createFVAssembler) +class FVAssembler: + """Class alias used to instantiate an FVAssembler"""