From d7fde2f64ce4af0c3045fee164701f0fc1e8351e Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Tue, 23 Feb 2016 12:05:04 +0100 Subject: [PATCH] introduce an include_file function that adds the tags --- python/dune/perftool/generation/generators.py | 7 ++++ python/dune/perftool/pdelab/driver.py | 41 +++++++++---------- python/dune/perftool/pdelab/localoperator.py | 21 ++++------ 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/python/dune/perftool/generation/generators.py b/python/dune/perftool/generation/generators.py index debe8a1a..5da34171 100644 --- a/python/dune/perftool/generation/generators.py +++ b/python/dune/perftool/generation/generators.py @@ -3,3 +3,10 @@ Define some generators based on the caching mechanism that are commonly needed for code generation """ +from dune.perftool.generation import generator_factory + + +def include_file(include, filetag="operator"): + from cgen import Include + gen = generator_factory(on_store=lambda i: Include(i), item_tags=(filetag, "include"), no_deco=True) + return gen(include) \ No newline at end of file diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py index d3fa4b8c..7069b30d 100644 --- a/python/dune/perftool/pdelab/driver.py +++ b/python/dune/perftool/pdelab/driver.py @@ -6,12 +6,9 @@ Currently, these are hardcoded as strings. It would be possible to switch these to cgen expression. OTOH, there is not much to be gained there. """ -from dune.perftool.generation import generator_factory +from dune.perftool.generation import generator_factory, include_file from dune.perftool.pdelab import dune_symbol -from cgen import Include - -driver_include = generator_factory(on_store=lambda i: Include(i), item_tags=("driver", "include"), no_deco=True) driver_preamble = generator_factory(item_tags=("driver", "preamble"), counted=True) # Have a global variable with the entire form data. This allows functions that depend @@ -73,8 +70,8 @@ def name_inifile(): @driver_preamble def parse_initree(varname): - driver_include("dune/common/parametertree.hh") - driver_include("dune/common/parametertreeparser.hh") + include_file("dune/common/parametertree.hh", filetag="driver") + include_file("dune/common/parametertreeparser.hh", filetag="driver") filename = name_inifile() return ["Dune::ParameterTree initree;", "Dune::ParameterTreeParser::readINITree({}, {});".format(filename, varname)] @@ -102,11 +99,11 @@ def typedef_grid(name): dim = name_dimension() if any(_form.cell().cellname() in x for x in ["vertex", "interval", "quadrilateral", "hexalateral"]): gridt = "Dune::YaspGrid<{}>".format(dim) - driver_include("dune/grid/yaspgrid.hh") + include_file("dune/grid/yaspgrid.hh", filetag="driver") else: if any(_form.cell().cellname() in x for x in ["triangle", "tetrahedron"]): gridt = "Dune::UGGrid<{}>".format(dim) - driver_include("dune/grid/uggrid.hh") + include_file("dune/grid/uggrid.hh", filetag="driver") else: raise ValueError("Cant match your geometry with a DUNE grid. Please report bug.") return "typedef {} {};".format(gridt, name) @@ -120,7 +117,7 @@ def type_grid(): @driver_preamble def define_grid(name): - driver_include("dune/testtools/gridconstruction.hh") + include_file("dune/testtools/gridconstruction.hh", filetag="driver") ini = name_initree() _type = type_grid() return ["IniGridFactory<{}> factory({});".format(_type, ini), @@ -160,7 +157,7 @@ def name_leafview(): @driver_preamble def typedef_vtkwriter(name): - driver_include("dune/grid/io/file/vtk/subsamplingvtkwriter.hh") + include_file("dune/grid/io/file/vtk/subsamplingvtkwriter.hh", filetag="driver") gv = type_leafview() return "typedef Dune::SubsamplingVTKWriter<{}> {};".format(gv, name) @@ -226,10 +223,10 @@ def typedef_fem(expr, name): df = type_domainfield() r = type_range() if isPk(expr): - driver_include("dune/pdelab/finiteelementmap/pkfem.hh") + include_file("dune/pdelab/finiteelementmap/pkfem.hh", filetag="driver") return "typedef Dune::PDELab::PkLocalFiniteElementMap<{}, {}, {}, {}> {};".format(gv, df, r, expr._degree, name) if isQk(generator._kwargs['expr']): - driver_include("dune/pdelab/finiteelementmap/qkfem.hh") + include_file("dune/pdelab/finiteelementmap/qkfem.hh", filetag="driver") return "typedef Dune::PDELab::QkLocalFiniteElementMap<{}, {}, {}, {}> {};".format(gv, df, r, expr._degree, name) raise NotImplementedError("FEM not implemented in dune-perftool") @@ -257,7 +254,7 @@ def name_fem(expr): @driver_preamble def typedef_vectorbackend(name): - driver_include("dune/pdelab/backend/istlvectorbackend.hh") + include_file("dune/pdelab/backend/istlvectorbackend.hh", filetag="driver") return "typedef Dune::PDELab::ISTLVectorBackend<Dune::PDELab::ISTLParameters::no_blocking, 1> {};".format(name) @@ -274,7 +271,7 @@ def type_orderingtag(): @driver_preamble def typedef_constraintsassembler(name): - driver_include("dune/pdelab/constraints/conforming.hh") + include_file("dune/pdelab/constraints/conforming.hh", filetag="driver") return "typedef Dune::PDELab::ConformingDirichletConstraints {};".format(name) @@ -325,7 +322,7 @@ def typedef_gfs(expr, name): args = ", ".join(type_gfs(e) for e in expr._sub_elements) return "typedef Dune::PDELab::CompositeGridFunctionSpace<{}, {}, {}> {}".format(vb, ot, args, name) if isinstance(expr, VectorElement): - driver_include("dune/pdelab/gridfunctionspace/vectorgridfunctionspace.hh") + include_file("dune/pdelab/gridfunctionspace/vectorgridfunctionspace.hh", filetag="driver") gv = type_leafview() fem = type_fem(expr._sub_elements[0]) dim = name_dimension() @@ -393,7 +390,7 @@ def name_dofestimate(): @driver_preamble def typedef_matrixbackend(name): - driver_include("dune/pdelab/backend/istl/bcrsmatrixbackend.hh") + include_file("dune/pdelab/backend/istl/bcrsmatrixbackend.hh", filetag="driver") return "typedef Dune::PDELab::istl::BCRSMatrixBackend<> {};".format(name) @@ -445,7 +442,7 @@ def typedef_localoperator(name): # params = type_parameters() # return "typedef LocalOperator<{}> {};".format(params, name) from dune.perftool.options import get_option - driver_include(get_option('operator_file')) + include_file(get_option('operator_file'), filetag="driver") return "// Here in the future: typedef for the local operator with parameter class as template parameter" @@ -479,7 +476,7 @@ def typedef_gridoperator(name): mb = type_matrixbackend() df = type_domainfield() r = type_range() - driver_include("dune/pdelab/gridoperator/gridoperator.hh") + include_file("dune/pdelab/gridoperator/gridoperator.hh", filetag="driver") return "typedef Dune::PDELab::GridOperator<{}, {}, {}, {}, {}, {}, {}, {}, {}> {};".format(ugfs, vgfs, lop, mb, df, r, r, ucc, vcc, name) @@ -534,7 +531,7 @@ def name_vector(): @driver_preamble def typedef_linearsolver(name): - driver_include("dune/pdelab/backend/istlsolverbackend.hh") + include_file("dune/pdelab/backend/istlsolverbackend.hh", filetag="driver") return "typedef Dune::PDELab::ISTLBackend_SEQ_UMFPack {};".format(name) @@ -570,7 +567,7 @@ def name_reduction(): @dune_symbol def typedef_stationarylinearproblemsolver(name): - driver_include("dune/pdelab/stationary/linearproblem.hh") + include_file("dune/pdelab/stationary/linearproblem.hh", filetag="driver") gotype = type_gridoperator() lstype = type_linearsolver() xtype = type_vector() @@ -614,7 +611,7 @@ def dune_solve(): @driver_preamble def define_vtkfile(name): ini = name_initree() - driver_include("string") + include_file("string", filetag="driver") return "std::string {} = {}.get<std::string>(\"vtk.filename\", \"output\");".format(name, ini) @@ -626,7 +623,7 @@ def name_vtkfile(): @driver_preamble def vtkoutput(): - driver_include("dune/pdelab/gridfunctionspace/vtk.hh") + include_file("dune/pdelab/gridfunctionspace/vtk.hh", filetag="driver") vtkwriter = name_vtkwriter() gfs = name_gfs(_form.coefficients()[0].element()) vec = name_vector() diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 444d9381..49d5eda0 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -1,16 +1,13 @@ from __future__ import absolute_import from dune.perftool.options import get_option -from dune.perftool.generation import generator_factory +from dune.perftool.generation import generator_factory, include_file from dune.perftool.pdelab import dune_symbol from dune.perftool.cgen.clazz import BaseClass, ClassMember -from cgen import Include - from pytools import memoize # Define the generators used in-here -operator_include = generator_factory(item_tags=("include", "operator"), on_store=lambda i: Include(i), no_deco=True) public_base_class = generator_factory(item_tags=("baseclass", "operator"), on_store=lambda n: BaseClass(n), counted=True, no_deco=True) @@ -34,14 +31,14 @@ def constructor_parameter(_type, name): @dune_symbol def name_initree_constructor(): - operator_include('dune/common/parametertree.hh') + include_file('dune/common/parametertree.hh', filetag="operator") constructor_parameter("const Dune::ParameterTree&", "iniParams") return "iniParams" @dune_symbol def name_initree_member(): - operator_include('dune/common/parametertree.hh') + include_file('dune/common/parametertree.hh', filetag="operator") define_private_member("const Dune::ParameterTree&", "_iniParams") in_constructor = name_initree_constructor() initializer_list("_iniParams", [in_constructor]) @@ -173,11 +170,11 @@ def generate_localoperator_kernels(form): delete_cache() # Manage includes and base classes that we always need - operator_include('dune/pdelab/gridfunctionspace/gridfunctionspaceutilities.hh') - operator_include('dune/pdelab/localoperator/idefault.hh') - operator_include('dune/pdelab/localoperator/flags.hh') - operator_include('dune/pdelab/localoperator/pattern.hh') - operator_include('dune/geometry/quadraturerules.hh') + include_file('dune/pdelab/gridfunctionspace/gridfunctionspaceutilities.hh', filetag="operator") + include_file('dune/pdelab/localoperator/idefault.hh', filetag="operator") + include_file('dune/pdelab/localoperator/flags.hh', filetag="operator") + include_file('dune/pdelab/localoperator/pattern.hh', filetag="operator") + include_file('dune/geometry/quadraturerules.hh', filetag="operator") public_base_class('Dune::PDELab::LocalOperatorDefaultFlags') @@ -192,7 +189,7 @@ def generate_localoperator_kernels(form): # Generate the necessary jacobian methods from dune.perftool.options import get_option if get_option("numerical_jacobian"): - operator_include("dune/pdelab/localoperator/defaultimp.hh") + include_file("dune/pdelab/localoperator/defaultimp.hh", filetag="operator") else: from ufl import derivative from ufl.algorithms import expand_derivatives -- GitLab