Skip to content
Snippets Groups Projects
Commit 29b025f4 authored by Timo Koch's avatar Timo Koch
Browse files

[python][pmflow] Improve style, add some, use wrapper helpers

parent fe88bce7
No related branches found
No related tags found
1 merge request!2681Feature/python main file
"""Classes and functions related to the porousmedium flow models"""
from dune.generator.generator import SimpleGenerator from dune.generator.generator import SimpleGenerator
from dune.common.hashit import hashIt from dune.common.hashit import hashIt
from dumux.wrapping import cppWrapperCreator, cppWrapperClassAlias
@cppWrapperCreator
def _createPorousMediumFlowProblemDecorator(
gridGeometry, spatialParams, enableInternalDirichletConstraints=False
):
"""A problem decorator generator for Python problems
Usage:
from dumux.common import PorousMediumFlowProblem
@PorousMediumFlowProblem(gridGeometry)
class MyProblem:
...
"""
# A problem decorator generator for Python problems
#
# from dumux.common import PorousMediumFlowProblem
# @PorousMediumFlowProblem(gridGeometry)
# class MyProblem:
# ...
#
def PorousMediumFlowProblem(gridGeometry, spatialParams, enableInternalDirichletConstraints=False):
def createModule(numEq): def createModule(numEq):
priVarType = f"Dune::FieldVector<double, {numEq}>" priVars = f"Dune::FieldVector<double, {numEq}>"
ggType = gridGeometry._typeName ggType = gridGeometry._typeName
spatialParamsType = spatialParams._typeName spType = spatialParams._typeName
enableIntDirConstraint = "true" if enableInternalDirichletConstraints else "false" enableIDC = "true" if enableInternalDirichletConstraints else "false"
problemType = f"Dumux::Python::PorousMediumFlowProblem<{ggType}, {priVarType}, {spatialParamsType}, {enableIntDirConstraint}>" problemType = (
"Dumux::Python::PorousMediumFlowProblem" f"<{ggType}, {priVars}, {spType}, {enableIDC}>"
)
includes = ( includes = (
gridGeometry._includes gridGeometry._includes
+ spatialParams._includes + spatialParams._includes
...@@ -25,22 +36,30 @@ def PorousMediumFlowProblem(gridGeometry, spatialParams, enableInternalDirichlet ...@@ -25,22 +36,30 @@ def PorousMediumFlowProblem(gridGeometry, spatialParams, enableInternalDirichlet
module = generator.load(includes, problemType, moduleName, holder="std::shared_ptr") module = generator.load(includes, problemType, moduleName, holder="std::shared_ptr")
return module return module
def PorousMediumFlowProblemDecorator(Cls): def decoratePorousMediumFlowProblem(cls):
module = createModule(Cls.numEq) module = createModule(cls.numEq)
def createPorousMediumFlowProblem(): def createPorousMediumFlowProblem():
return module.PorousMediumFlowProblem(gridGeometry, spatialParams, Cls()) return module.PorousMediumFlowProblem(gridGeometry, spatialParams, cls())
return createPorousMediumFlowProblem return createPorousMediumFlowProblem
return PorousMediumFlowProblemDecorator return decoratePorousMediumFlowProblem
def PorousMediumFlowVelocityOutput(*, gridVariables): @cppWrapperClassAlias(creator=_createPorousMediumFlowProblemDecorator)
class PorousMediumFlowProblem:
"""A class alias used to create a problem decorator Python problems"""
@cppWrapperCreator
def _createPorousMediumFlowVelocityOutput(*, gridVariables):
"""Create a PorousMediumFlowVelocityOutput"""
includes = gridVariables._includes includes = gridVariables._includes
includes += ["dumux/python/porousmediumflow/velocityoutput.hh", "dumux/io/velocityoutput.hh"] includes += ["dumux/python/porousmediumflow/velocityoutput.hh", "dumux/io/velocityoutput.hh"]
fluxVarsType = ( fluxVarsType = (
f"Dumux::GetPropType<{gridVariables._model.getTypeTag()}, Dumux::Properties::FluxVariables>" f"Dumux::GetPropType<{gridVariables.model.cppType}, Dumux::Properties::FluxVariables>"
) )
typeName = f"Dumux::PorousMediumFlowVelocityOutput<{gridVariables._typeName}, {fluxVarsType}>" typeName = f"Dumux::PorousMediumFlowVelocityOutput<{gridVariables._typeName}, {fluxVarsType}>"
moduleName = "porousmediumflowvelocityoutput_" + hashIt(typeName) moduleName = "porousmediumflowvelocityoutput_" + hashIt(typeName)
...@@ -51,7 +70,12 @@ def PorousMediumFlowVelocityOutput(*, gridVariables): ...@@ -51,7 +70,12 @@ def PorousMediumFlowVelocityOutput(*, gridVariables):
typeName, typeName,
moduleName, moduleName,
holder="std::shared_ptr", holder="std::shared_ptr",
preamble=gridVariables._model.getProperties(), preamble=gridVariables.model.cppHeader,
baseClasses=baseClass, baseClasses=baseClass,
) )
return module.PorousMediumFlowVelocityOutput(gridVariables) return module.PorousMediumFlowVelocityOutput(gridVariables)
@cppWrapperClassAlias(creator=_createPorousMediumFlowVelocityOutput)
class PorousMediumFlowVelocityOutput:
"""A class alias used to create PorousMediumFlowVelocityOutput instances"""
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment