Skip to content
Snippets Groups Projects
Commit be6bbb5e authored by Dominic Kempf's avatar Dominic Kempf
Browse files

Implement volumes through jacobian determinants for axiparallel grids

parent 1a52b2d4
No related branches found
No related tags found
No related merge requests found
...@@ -14,8 +14,8 @@ from dune.perftool.pdelab.basis import (pymbolic_basis, ...@@ -14,8 +14,8 @@ from dune.perftool.pdelab.basis import (pymbolic_basis,
pymbolic_reference_gradient, pymbolic_reference_gradient,
) )
from dune.perftool.pdelab.geometry import (component_iname, from dune.perftool.pdelab.geometry import (component_iname,
name_cell_volume, pymbolic_cell_volume,
name_facet_area, pymbolic_facet_area,
pymbolic_facet_jacobian_determinant, pymbolic_facet_jacobian_determinant,
pymbolic_jacobian_determinant, pymbolic_jacobian_determinant,
pymbolic_jacobian_inverse_transposed, pymbolic_jacobian_inverse_transposed,
...@@ -143,11 +143,11 @@ class PDELabInterface(object): ...@@ -143,11 +143,11 @@ class PDELabInterface(object):
def pymbolic_unit_outer_normal(self): def pymbolic_unit_outer_normal(self):
return pymbolic_unit_outer_normal() return pymbolic_unit_outer_normal()
def name_cell_volume(self, restriction): def pymbolic_cell_volume(self, restriction):
return name_cell_volume(restriction) return pymbolic_cell_volume(restriction)
def name_facet_area(self): def pymbolic_facet_area(self):
return name_facet_area() return pymbolic_facet_area()
# #
# Quadrature related generator functions # Quadrature related generator functions
......
...@@ -472,10 +472,13 @@ def define_cell_volume(name, restriction): ...@@ -472,10 +472,13 @@ def define_cell_volume(name, restriction):
return "auto {} = {}.volume();".format(name, geo) return "auto {} = {}.volume();".format(name, geo)
def name_cell_volume(restriction): def pymbolic_cell_volume(restriction):
name = restricted_name("volume", restriction) if get_option("constant_transformation_matrix"):
define_cell_volume(name, restriction) return pymbolic_jacobian_determinant()
return name else:
name = restricted_name("volume", restriction)
define_cell_volume(name, restriction)
return prim.Variable(name)
@preamble @preamble
...@@ -485,7 +488,10 @@ def define_facet_area(name): ...@@ -485,7 +488,10 @@ def define_facet_area(name):
return "auto {} = {}.volume();".format(name, geo) return "auto {} = {}.volume();".format(name, geo)
def name_facet_area(): def pymbolic_facet_area():
name = "area" if get_option("constant_transformation_matrix"):
define_facet_area(name) return pymbolic_facet_jacobian_determinant()
return name else:
name = "area"
define_facet_area(name)
return prim.Variable(name)
...@@ -91,3 +91,7 @@ class SumFactInterface(PDELabInterface): ...@@ -91,3 +91,7 @@ class SumFactInterface(PDELabInterface):
def pymbolic_facet_jacobian_determinant(self): def pymbolic_facet_jacobian_determinant(self):
from dune.perftool.sumfact.geometry import pymbolic_facet_jacobian_determinant from dune.perftool.sumfact.geometry import pymbolic_facet_jacobian_determinant
return pymbolic_facet_jacobian_determinant() return pymbolic_facet_jacobian_determinant()
def pymbolic_facet_area(self):
from dune.perftool.sumfact.geometry import pymbolic_facet_area
return pymbolic_facet_area()
...@@ -253,3 +253,11 @@ def define_constant_facet_jacobian_determinant_eval(name): ...@@ -253,3 +253,11 @@ def define_constant_facet_jacobian_determinant_eval(name):
instruction(code="\n".join(code), instruction(code="\n".join(code),
kernel="operator", kernel="operator",
) )
def pymbolic_facet_area():
if get_option("constant_transformation_matrix"):
return pymbolic_facet_jacobian_determinant()
else:
from dune.perftool.pdelab.geometry import pymbolic_facet_area as _norm
return _norm()
...@@ -452,10 +452,10 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker): ...@@ -452,10 +452,10 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker):
if self.measure == 'exterior_facet': if self.measure == 'exterior_facet':
restriction = Restriction.NEGATIVE restriction = Restriction.NEGATIVE
return prim.Variable(self.interface.name_cell_volume(restriction)) return self.interface.pymbolic_cell_volume(restriction)
def facet_area(self, o): def facet_area(self, o):
return prim.Variable(self.interface.name_facet_area()) return self.interface.pymbolic_facet_area()
# #
# Equality/Hashability of the visitor # Equality/Hashability of the visitor
......
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