Peano
Loading...
Searching...
No Matches
Quadrature.py
Go to the documentation of this file.
1# This file is part of the ExaHyPE2 project. For conditions of distribution and
2# use, please see the copyright notice at www.peano-framework.org
3from copy import deepcopy
4
5import peano4.output
6
7from exahype2.solvers.MathUtils import MathUtils
8
9
10class Quadrature(object):
11 def __init__(self, dictionary):
12 self.d = deepcopy(dictionary)
13
15 self, namespace, output, subdirectory, template_prefix, output_path
16 ):
17 if self.d["POLYNOMIAL_TYPE"] == "legendre":
18 QuadratureWeights, QuadratureNodes = MathUtils.getGaussLegendre(
19 self.d["NUMBER_OF_DOF"]
20 )
21 OtherQuadratureWeights, OtherQuadratureNodes = MathUtils.getGaussLobatto(
22 self.d["NUMBER_OF_DOF"]
23 )
24 elif self.d["POLYNOMIAL_TYPE"] == "lobatto":
25 QuadratureWeights, QuadratureNodes = MathUtils.getGaussLobatto(
26 self.d["NUMBER_OF_DOF"]
27 )
28 OtherQuadratureWeights, OtherQuadratureNodes = MathUtils.getGaussLobatto(
29 self.d["NUMBER_OF_DOF"]
30 )
31 QuadratureNodes = QuadratureNodes[::-1]
32 else:
33 raise ValueError(
34 "Quadrature type " + self.d["POLYNOMIAL_TYPE"] + " not supported."
35 )
36
37 self.d["QuadratureWeights"], self.d["QuadratureNodes"] = (
38 QuadratureWeights,
39 QuadratureNodes,
40 )
41 self.d["quadrature_seq"] = range(self.d["NUMBER_OF_DOF"])
42
43 l_padSize = self.d["NUMBER_OF_DOF_PADDED"] - self.d["NUMBER_OF_DOF"]
44 uh2lob = MathUtils.assembleQuadratureConversion(
45 QuadratureNodes, OtherQuadratureNodes, self.d["NUMBER_OF_DOF"]
46 )
47 self.d["uh2lob"] = MathUtils.matrixPadAndFlatten_ColMajor(uh2lob, l_padSize)
48 self.d["uh2lobSize"] = len(self.d["uh2lob"])
49 self.d["uh2lob_seq"] = range(self.d["uh2lobSize"])
50
51 l_padSize = self.d["NUMBER_OF_DOF_PADDED"] - self.d["NUMBER_OF_DOF"]
52 dg2fv = MathUtils.assembleDGToFV(
53 QuadratureNodes,
54 QuadratureWeights,
55 self.d["NUMBER_OF_DOF"],
56 self.d["NUMBER_OF_DOF_LIMITER"],
57 )
58 self.d["dg2fv"] = MathUtils.matrixPadAndFlatten_ColMajor(dg2fv, l_padSize)
59 self.d["dg2fvSize"] = len(self.d["dg2fv"])
60 self.d["dg2fv_seq"] = range(self.d["dg2fvSize"])
61
62 l_padSize = (
63 self.d["NUMBER_OF_DOF_LIMITER_PADDED"] - self.d["NUMBER_OF_DOF_LIMITER"]
64 )
65 fv2dg = MathUtils.assembleFVToDG(
66 dg2fv,
67 QuadratureWeights,
68 self.d["NUMBER_OF_DOF"],
69 self.d["NUMBER_OF_DOF_LIMITER"],
70 )
71 self.d["fv2dg"] = MathUtils.matrixPadAndFlatten_ColMajor(fv2dg, l_padSize)
72 self.d["fv2dgSize"] = len(self.d["fv2dg"])
73 self.d["fv2dg_seq"] = range(self.d["fv2dgSize"])
74
76 headfile_template=template_prefix + "Quadrature.template.h",
77 cppfile_template=template_prefix + "Quadrature.template.cpp",
78 classname=output_path + "/Quadrature",
79 namespace=namespace,
80 subdirectory=subdirectory + ".",
81 dictionary=self.d,
82 default_overwrite=True,
83 apply_iteratively=True,
84 )
85 output.add(generated_kernels)
86 output.makefile.add_h_file(output_path + "/Quadrature.h", generated=True)
87 output.makefile.add_cpp_file(output_path + "/Quadrature.cpp", generated=True)
generate_kernels(self, namespace, output, subdirectory, template_prefix, output_path)
Definition Quadrature.py:16