Skip to content
Snippets Groups Projects
Commit 632c5925 authored by Marcel Koch's avatar Marcel Koch
Browse files

Sets right type for DG LocalBasis in the default case

parent 49daa7ff
No related branches found
No related tags found
No related merge requests found
......@@ -5,14 +5,46 @@ from dune.perftool.generation import (backend,
temporary_variable,
globalarg,
class_member,
initializer_list)
initializer_list,
include_file,)
from dune.perftool.tools import get_pymbolic_basename
from dune.perftool.pdelab.basis import (declare_cache_temporary,
name_localbasis_cache,
type_localbasis
)
from dune.perftool.pdelab.driver import (basetype_range,
isPk,
isQk)
from dune.perftool.pdelab.geometry import world_dimension
from dune.perftool.pdelab.quadrature import pymbolic_quadrature_position_in_cell
from dune.perftool.pdelab.spaces import type_gfs
@backend(interface="typedef_localbasis", name="blockstructured")
@class_member(classtag="operator")
def typedef_localbasis(element, name):
df = "typename {}::Traits::GridView::ctype".format(type_gfs(element))
r = basetype_range()
dim = world_dimension()
if isPk(element):
if dim == 1:
include_file("dune/localfunctions/lagrange/pk1d/pk1dlocalbasis.hh", filetag="operatorfile")
basis_type = "Pk1DLocalBasis<{}, {}, {}>".format(df, r, element._degree)
elif dim == 2:
include_file("dune/localfunctions/lagrange/pk2d/pk2dlocalbasis.hh", filetag="operatorfile")
basis_type = "Pk2DLocalBasis<{}, {}, {}>".format(df, r, element._degree)
elif dim == 3:
include_file("dune/localfunctions/lagrange/pk3d/pk3dlocalbasis.hh", filetag="operatorfile")
basis_type = "Pk3DLocalBasis<{}, {}, {}>".format(df, r, element._degree)
else:
raise NotImplementedError("P{} in {}D is not implemented".format(element._degree, dim))
elif isQk(element):
include_file("dune/localfunctions/lagrange/qk/qklocalbasis.hh", filetag="operatorfile")
basis_type = "QkLocalBasis<{}, {}, {}, {}>".format(df, r, element._degree, dim)
else:
raise NotImplementedError("Element type not known in code generation")
return "using {} = Dune::{};".format(name, basis_type)
@backend(interface="evaluate_basis", name="blockstructured")
......
......@@ -23,39 +23,18 @@ from dune.perftool.tools import (get_pymbolic_basename,
)
from dune.perftool.pdelab.driver import FEM_name_mangling
from dune.perftool.pdelab.restriction import restricted_name
from dune.perftool.pdelab.driver import (type_domainfield,
basetype_range,
isPk,
isQk,)
from dune.perftool.pdelab.driver import (isPk,
isQk,
isDG)
from pymbolic.primitives import Product, Subscript, Variable
import pymbolic.primitives as prim
from loopy import Reduction
@backend(interface="typedef_localbasis")
@class_member(classtag="operator")
def typedef_localbasis(element, name):
df = "typename {}::Traits::GridView::ctype".format(type_gfs(element))
r = basetype_range()
dim = world_dimension()
if isPk(element):
if dim == 1:
include_file("dune/localfunctions/lagrange/pk1d/pk1dlocalbasis.hh", filetag="operatorfile")
basis_type = "Pk1DLocalBasis<{}, {}, {}>".format(df, r, element._degree)
elif dim == 2:
include_file("dune/localfunctions/lagrange/pk2d/pk2dlocalbasis.hh", filetag="operatorfile")
basis_type = "Pk2DLocalBasis<{}, {}, {}>".format(df, r, element._degree)
elif dim == 3:
include_file("dune/localfunctions/lagrange/pk3d/pk3dlocalbasis.hh", filetag="operatorfile")
basis_type = "Pk3DLocalBasis<{}, {}, {}>".format(df, r, element._degree)
else:
raise NotImplementedError("P{} in {}D is not implemented".format(element._degree, dim))
elif isQk(element):
include_file("dune/localfunctions/lagrange/qk/qklocalbasis.hh", filetag="operatorfile")
basis_type = "QkLocalBasis<{}, {}, {}, {}>".format(df, r, element._degree, dim)
#TODO add dg support
else:
raise NotImplementedError("Element type not known in code generation")
return "using {} = Dune::{};".format(name, basis_type)
basis_type = "{}::Traits::FiniteElementMap::Traits::FiniteElementType::Traits::LocalBasisType".format(type_gfs(element))
return "using {} = typename {};".format(name, basis_type)
def type_localbasis(element):
......@@ -63,9 +42,11 @@ def type_localbasis(element):
name = "P{}_LocalBasis".format(element._degree)
elif isQk(element):
name = "Q{}_LocalBasis".format(element._degree)
elif isDG(element):
name = "DG{}_LocalBasis".format(element._degree)
else:
raise NotImplementedError("Element type not known in code generation")
typedef_localbasis(element, name)
get_backend("typedef_localbasis", selector=option_switch("blockstructured"))(element, name)
return name
......
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