From 5233c4d1e65525f9962d95208982373252ce2ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de> Date: Thu, 15 Dec 2016 15:40:06 +0100 Subject: [PATCH] FastDGGridOperator in driver --- python/dune/perftool/options.py | 1 + python/dune/perftool/pdelab/driver.py | 40 +++++++++++++++++----- test/poisson/CMakeLists.txt | 2 +- test/poisson/poisson_dg_quadrilateral.mini | 5 ++- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py index d1ed4850..4cb6e8e8 100644 --- a/python/dune/perftool/options.py +++ b/python/dune/perftool/options.py @@ -42,6 +42,7 @@ def get_form_compiler_arguments(): parser.add_argument("--timer", action="store_true", help="measure times") parser.add_argument("--opcounter", action="store_true", default=False, help="Count operations. Should only be used with yaspgrid. Timer should be set.") parser.add_argument("--project-basedir", type=str, help="The base (build) directory of the dune-perftool project") + parser.add_argument("--fasfdg", action="store_false", help="Use FastDGGridOperator from PDELab.") # TODO at some point this help description should be updated parser.add_argument("--sumfact", action="store_true", help="Use sumfactorization") parser.add_argument("--vectorize-quad", action="store_true", help="whether to generate code with explicit vectorization") diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py index 336eb60c..a2d8aa35 100644 --- a/python/dune/perftool/pdelab/driver.py +++ b/python/dune/perftool/pdelab/driver.py @@ -346,14 +346,34 @@ def name_fem(expr): @preamble -def typedef_vectorbackend(name): +def define_blocksize(name, expr): + assert isDG(expr) + assert isQuadrilateral(expr) + dimension = name_dimension() + degree = expr._degree + return "static const int {} = Dune::QkStuff::QkSize<{}, {}>::value;".format(name, degree, dimension) + + +def name_blocksize(expr): + name = "blocksize" + define_blocksize(name, expr) + return name + + +@preamble +def typedef_vectorbackend(name, expr): include_file("dune/pdelab/backend/istl.hh", filetag="driver") - return "using {} = Dune::PDELab::istl::VectorBackend<Dune::PDELab::istl::Blocking::none, 1>;".format(name) + if get_option("fastdg"): + blocksize = name_blocksize(expr) + return "using {} = Dune::PDELab::istl::VectorBackend<Dune::PDELab::istl::Blocking::fixed, {}>;".format(name, blocksize) + else: + return "using {} = Dune::PDELab::istl::VectorBackend<Dune::PDELab::istl::Blocking::none, 1>;".format(name) -def type_vectorbackend(): - typedef_vectorbackend("VectorBackend") - return "VectorBackend" +def type_vectorbackend(expr): + name = "VectorBackend" + typedef_vectorbackend(name, expr) + return name def type_orderingtag(): @@ -497,7 +517,7 @@ def name_assembled_constraints(expr): @preamble def typedef_gfs(element, dirichlet, name): - vb = type_vectorbackend() + vb = type_vectorbackend(element) from ufl import FiniteElement, MixedElement, VectorElement, EnrichedElement, RestrictedElement, TensorElement if isinstance(element, FiniteElement): gv = type_leafview() @@ -670,8 +690,12 @@ def typedef_gridoperator(name, formdata): mb = type_matrixbackend() df = type_domainfield() r = type_range() - include_file("dune/pdelab/gridoperator/gridoperator.hh", filetag="driver") - return "using {} = Dune::PDELab::GridOperator<{}, {}, {}, {}, {}, {}, {}, {}, {}>;".format(name, ugfs, vgfs, lop, mb, df, r, r, ucc, vcc) + if get_option("fastdg"): + include_file("dune/pdelab/gridoperator/fastdg.hh", filetag="driver") + return "using {} = Dune::PDELab::FastDGGridOperator<{}, {}, {}, {}, {}, {}, {}, {}, {}>;".format(name, ugfs, vgfs, lop, mb, df, r, r, ucc, vcc) + else: + include_file("dune/pdelab/gridoperator/gridoperator.hh", filetag="driver") + return "using {} = Dune::PDELab::GridOperator<{}, {}, {}, {}, {}, {}, {}, {}, {}>;".format(name, ugfs, vgfs, lop, mb, df, r, r, ucc, vcc) def type_gridoperator(formdata): diff --git a/test/poisson/CMakeLists.txt b/test/poisson/CMakeLists.txt index 932fdafb..844fdce8 100644 --- a/test/poisson/CMakeLists.txt +++ b/test/poisson/CMakeLists.txt @@ -54,7 +54,7 @@ dune_add_formcompiler_system_test(UFLFILE opcount_poisson_dg.ufl INIFILE opcount_poisson_dg_symdiff.mini ) -# 3. Poisson Test Case: DG, f + pure dirichlet +# 9. Poisson Test Case: DG quadrilaterals dune_add_formcompiler_system_test(UFLFILE poisson_dg_quadrilateral.ufl BASENAME poisson_dg_quadrilateral INIFILE poisson_dg_quadrilateral.mini diff --git a/test/poisson/poisson_dg_quadrilateral.mini b/test/poisson/poisson_dg_quadrilateral.mini index 2cb4d1d2..39905846 100644 --- a/test/poisson/poisson_dg_quadrilateral.mini +++ b/test/poisson/poisson_dg_quadrilateral.mini @@ -1,5 +1,7 @@ __name = poisson_dg_quadrilateral_{__exec_suffix} -__exec_suffix = numdiff, symdiff | expand num +__exec_suffix = {__exec_symdiff}_{__exec_fastdg} +__exec_symdiff = numdiff, symdiff |expand num +__exec_fastdg = fastdg, standarddg | expand fastdg extension = 1.0 1.0 cells = 32 32 @@ -12,3 +14,4 @@ extension = vtu numerical_jacobian = 1, 0 | expand num exact_solution_expression = g compare_l2errorsquared = 2e-5 +fastdg = 1, 0 | expand fastdg -- GitLab