diff --git a/python/dune/perftool/pdelab/driver/__init__.py b/python/dune/perftool/pdelab/driver/__init__.py index b441722e89122ae46d552d1efec92a32711bebbf..b5efebf359a42a35cc6acf4bce3e2526a843a362 100644 --- a/python/dune/perftool/pdelab/driver/__init__.py +++ b/python/dune/perftool/pdelab/driver/__init__.py @@ -63,6 +63,10 @@ def get_formdata(): return _driver_data['formdata'] +def get_mass_formdata(): + return _driver_data["mass_formdata"] + + def is_stationary(): return 'mass_form' not in _driver_data diff --git a/python/dune/perftool/pdelab/driver/instationary.py b/python/dune/perftool/pdelab/driver/instationary.py index bf8759e793cfbae9a8e8390122f1acbc75b4a2c2..8b5ebc7ffc5679eb527a954287632b1834046db1 100644 --- a/python/dune/perftool/pdelab/driver/instationary.py +++ b/python/dune/perftool/pdelab/driver/instationary.py @@ -1,11 +1,33 @@ -from dune.perftool.generation import preamble +from dune.perftool.generation import (include_file, + preamble, + ) from dune.perftool.pdelab.driver import (get_formdata, + get_mass_formdata, + get_trial_element, is_linear, + name_initree, + preprocess_leaf_data, ) -from dune.perftool.pdelab.driver.gridoperator import (type_gridoperator,) +from dune.perftool.pdelab.driver.gridfunctionspace import (name_gfs, + type_range, + ) +from dune.perftool.pdelab.driver.gridoperator import (name_gridoperator, + name_parameters, + type_gridoperator,) +from dune.perftool.pdelab.driver.constraints import (name_bctype_function, + name_constraintscontainer, + ) +from dune.perftool.pdelab.driver.interpolate import name_boundary_function from dune.perftool.pdelab.driver.solve import (print_matrix, print_residual, + name_stationarynonlinearproblemsolver, + name_vector, + type_stationarynonlinearproblemssolver, + type_vector, ) +from dune.perftool.pdelab.driver.vtk import (name_vtk_sequence_writer, + visualize_initial_condition, + ) from dune.perftool.options import get_option @@ -28,12 +50,6 @@ def solve_instationary(): print_residual() print_matrix() - from dune.perftool.pdelab.driver.error import compare_dofs, compare_L2_squared - if get_option("exact_solution_expression"): - if get_option("compare_dofs"): - compare_dofs() - if get_option("compare_l2errorsquared"): - compare_L2_squared() @preamble @@ -42,10 +58,11 @@ def time_loop(): formdata = get_formdata() params = name_parameters(formdata) time = name_time() - expr = get_trial_element() - bctype = name_bctype_function(expr) - gfs = name_gfs(expr) - cc = name_constraintscontainer(expr) + element = get_trial_element() + is_dirichlet = preprocess_leaf_data(element, "is_dirichlet") + bctype = name_bctype_function(element, is_dirichlet) + gfs = name_gfs(element, is_dirichlet) + cc = name_constraintscontainer() vector_type = type_vector(formdata) vector = name_vector(formdata) @@ -55,7 +72,8 @@ def time_loop(): osm = name_explicitonestepmethod() apply_call = "{}.apply(time, dt, {}, {}new);".format(osm, vector, vector) else: - boundary = name_boundary_function(expr) + dirichlet = preprocess_leaf_data(element, "dirichlet_expression") + boundary = name_boundary_function(element, dirichlet) osm = name_onestepmethod() apply_call = "{}.apply(time, dt, {}, {}, {}new);".format(osm, vector, boundary, vector) @@ -129,8 +147,8 @@ def name_timesteppingmethod(): @preamble def typedef_instationarygridoperator(name): include_file("dune/pdelab/gridoperator/onestep.hh", filetag="driver") - go_type = type_gridoperator(_driver_data['formdata']) - mass_go_type = type_gridoperator(_driver_data['mass_formdata']) + go_type = type_gridoperator(get_formdata()) + mass_go_type = type_gridoperator(get_mass_formdata()) explicit = get_option('explicit_time_stepping') if explicit: return "using {} = Dune::PDELab::OneStepGridOperator<{},{},false>;".format(name, go_type, mass_go_type) @@ -146,8 +164,8 @@ def type_instationarygridoperator(): @preamble def define_instationarygridoperator(name): igo_type = type_instationarygridoperator() - go = name_gridoperator(_driver_data['formdata']) - mass_go = name_gridoperator(_driver_data['mass_formdata']) + go = name_gridoperator(get_formdata()) + mass_go = name_gridoperator(get_mass_formdata()) return "{} {}({}, {});".format(igo_type, name, go, mass_go) @@ -161,7 +179,7 @@ def typedef_onestepmethod(name): r_type = type_range() igo_type = type_instationarygridoperator() snp_type = type_stationarynonlinearproblemssolver(igo_type) - vector_type = type_vector(_driver_data['formdata']) + vector_type = type_vector(get_formdata()) return "using {} = Dune::PDELab::OneStepMethod<{}, {}, {}, {}, {}>;".format(name, r_type, igo_type, snp_type, vector_type, vector_type) @@ -190,7 +208,7 @@ def typedef_explicitonestepmethod(name): r_type = type_range() igo_type = type_instationarygridoperator() ls_type = type_linearsolver() - vector_type = type_vector(_driver_data['formdata']) + vector_type = type_vector(get_formdata()) return "using {} = Dune::PDELab::ExplicitOneStepMethod<{}, {}, {}, {}>;".format(name, r_type, igo_type, ls_type, vector_type) diff --git a/python/dune/perftool/pdelab/driver/solve.py b/python/dune/perftool/pdelab/driver/solve.py index 0179fe68905f6c1890a517657d345c35b235a845..5abbac27c46deb00169f3787b9283c93db9f94a6 100644 --- a/python/dune/perftool/pdelab/driver/solve.py +++ b/python/dune/perftool/pdelab/driver/solve.py @@ -40,8 +40,8 @@ def dune_solve(): include_file("dune/perftool/matrixfree.hh", filetag="driver") solve = "solveNonlinearMatrixFree({},{});".format(go, x) elif not linear and not matrix_free: - go_type = type_gridoperator(_driver_data['formdata']) - go = name_gridoperator(_driver_data['formdata']) + go_type = type_gridoperator(get_formdata()) + go = name_gridoperator(get_formdata()) snp = name_stationarynonlinearproblemsolver(go_type, go) solve = "{}.apply();".format(snp) @@ -172,7 +172,7 @@ def name_stationarylinearproblemsolver(): def typedef_stationarynonlinearproblemsolver(name, go_type): include_file("dune/pdelab/newton/newton.hh", filetag="driver") ls_type = type_linearsolver() - x_type = type_vector(_driver_data['formdata']) + x_type = type_vector(get_formdata()) return "using {} = Dune::PDELab::Newton<{}, {}, {}>;".format(name, go_type, ls_type, x_type) diff --git a/python/dune/perftool/pdelab/driver/vtk.py b/python/dune/perftool/pdelab/driver/vtk.py index 2d2fa20ad8a157ddbbb2c20ae54dab86923d00ef..71783adcf3b93909aa886c36512df9226373d738 100644 --- a/python/dune/perftool/pdelab/driver/vtk.py +++ b/python/dune/perftool/pdelab/driver/vtk.py @@ -125,7 +125,7 @@ def visualize_initial_condition(): vtkwriter = name_vtk_sequence_writer() element = get_trial_element() define_gfs_names(element) - gfs = name_gfs(element) + gfs = name_trial_gfs() vector = name_vector(get_formdata()) predicate = name_predicate() from dune.perftool.pdelab.driver.instationary import name_time