15 self, namespace, output, subdirectory, template_prefix, output_path
17 if self.
d[
"POLYNOMIAL_TYPE"] ==
"legendre":
19 wGPN, xGPN = MathUtils.getGaussLegendre(self.
d[
"NUMBER_OF_DOF"])
20 elif self.
d[
"POLYNOMIAL_TYPE"] ==
"lobatto":
22 wGPN, xGPN = MathUtils.getGaussLobatto(self.
d[
"NUMBER_OF_DOF"])
26 "Quadrature type " + self.
d[
"POLYNOMIAL_TYPE"] +
" not supported."
29 padSize = self.
d[
"NUMBER_OF_DOF_PADDED"] - self.
d[
"NUMBER_OF_DOF"]
30 self.
d[
"nDofPad_seq"] = range(self.
d[
"NUMBER_OF_DOF_PADDED"])
31 self.
d[
"nDofPadTimesnDof_seq"] = range(
32 self.
d[
"NUMBER_OF_DOF_PADDED"] * self.
d[
"NUMBER_OF_DOF"]
37 FLCoeff, _ = MathUtils.baseFunc1d(
38 0.0, xGPN, self.
d[
"NUMBER_OF_DOF"]
40 FRCoeff, _ = MathUtils.baseFunc1d(1.0, xGPN, self.
d[
"NUMBER_OF_DOF"])
41 self.
d[
"FLCoeff"] = MathUtils.vectorPad(FLCoeff, padSize)
42 self.
d[
"FRCoeff"] = MathUtils.vectorPad(FRCoeff, padSize)
49 Kxi = MathUtils.assembleStiffnessMatrix(xGPN, wGPN, self.
d[
"NUMBER_OF_DOF"])
50 self.
d[
"Kxi"] = MathUtils.matrixPadAndFlatten_ColMajor(Kxi, padSize)
51 self.
d[
"Kxi_T"] = MathUtils.matrixPadAndFlatten_RowMajor(
56 iK1 = MathUtils.matrixInverse(
57 MathUtils.assembleK1(Kxi, xGPN, self.
d[
"NUMBER_OF_DOF"])
59 self.
d[
"iK1_T"] = MathUtils.matrixPadAndFlatten_RowMajor(
64 MM = MathUtils.assembleMassMatrix(xGPN, wGPN, self.
d[
"NUMBER_OF_DOF"])
65 dudx = MathUtils.assembleDiscreteDerivativeOperator(MM, Kxi)
66 self.
d[
"dudx"] = MathUtils.matrixPadAndFlatten_ColMajor(dudx, padSize)
67 self.
d[
"dudx_T"] = MathUtils.matrixPadAndFlatten_RowMajor(
72 fineGridProjector1d_0 = MathUtils.assembleFineGridProjector1d(
73 xGPN, 0, self.
d[
"NUMBER_OF_DOF"]
75 fineGridProjector1d_1 = MathUtils.assembleFineGridProjector1d(
76 xGPN, 1, self.
d[
"NUMBER_OF_DOF"]
78 fineGridProjector1d_2 = MathUtils.assembleFineGridProjector1d(
79 xGPN, 2, self.
d[
"NUMBER_OF_DOF"]
81 self.
d[
"fineGridProjector1d_0"] = MathUtils.matrixPadAndFlatten_ColMajor(
82 fineGridProjector1d_0, padSize
84 self.
d[
"fineGridProjector1d_1"] = MathUtils.matrixPadAndFlatten_ColMajor(
85 fineGridProjector1d_1, padSize
87 self.
d[
"fineGridProjector1d_2"] = MathUtils.matrixPadAndFlatten_ColMajor(
88 fineGridProjector1d_2, padSize
92 for i
in range(self.
d[
"NUMBER_OF_DOF"]):
93 for j
in range(self.
d[
"NUMBER_OF_DOF"]):
94 fineGridProjector1d_0[i][j] *= wGPN[j] / wGPN[i] / 3.0
95 fineGridProjector1d_1[i][j] *= wGPN[j] / wGPN[i] / 3.0
96 fineGridProjector1d_2[i][j] *= wGPN[j] / wGPN[i] / 3.0
98 "fineGridProjector1d_T_weighted_0"
99 ] = MathUtils.matrixPadAndFlatten_RowMajor(fineGridProjector1d_0, padSize)
101 "fineGridProjector1d_T_weighted_1"
102 ] = MathUtils.matrixPadAndFlatten_RowMajor(fineGridProjector1d_1, padSize)
104 "fineGridProjector1d_T_weighted_2"
105 ] = MathUtils.matrixPadAndFlatten_RowMajor(fineGridProjector1d_2, padSize)
108 headfile_template=template_prefix +
"DGMatrices.template.h",
109 cppfile_template=template_prefix +
"DGMatrices.template.cpp",
110 classname=output_path +
"/DGMatrices",
112 subdirectory=subdirectory +
".",
114 default_overwrite=
True,
115 apply_iteratively=
True,
117 output.add(generated_kernels)
118 output.makefile.add_h_file(output_path +
"/DGMatrices.h", generated=
True)
119 output.makefile.add_cpp_file(output_path +
"/DGMatrices.cpp", generated=
True)