Peano
Loading...
Searching...
No Matches
SolveRiemannProblem2D.py
Go to the documentation of this file.
1def solveRiemannProblemX(faceCentre: "const tarch::la::Vector<Dimensions,double>&", cellSize: "const tarch::la::Vector<Dimensions,double>&", t: "double", dt: "double", faceData : "const double* __restrict__", solution: "double* __restrict__") -> "void":
2 input = FaceDataBlock([[0, NumberOfUnknowns + NumberOfAuxiliaryVariables], [0, 2], [0, DGOrder + 1], [0, 1]], "faceData", "const double")
3 output = FaceDataBlock([[0, NumberOfUnknowns], [0, 2], [0, DGOrder + 1], [0, 1]], "solution")
4 output = 0.0
5
6 dsl_t = Float("t")
7 dsl_dt = Float("dt")
8 dsl_faceCentre = Vector("faceCentre")
9 dsl_cellSize = Vector("cellSize")
10 quadrature_positions = FaceDataBlock([[0, 1], [0, 1], [0, DGOrder + 1], [0, 1]], eval("getQuadraturePointInFace", index, dsl_faceCentre, dsl_cellSize, DGOrder, 0, "SolverType::QuadraturePoints1d"), "tarch::la::Vector<2, double>")
11
12 deltaQ = input[:, 1, :] - input[:, 0, :]
13 averageQ = 0.5 * (input[:, 1, :] + input[:, 0, :])
14
15 leftEigenvalues = FaceDataBlock([[0, 1], [0, 1], [0, DGOrder + 1], [0, 1]], eval("maxEigenvalue", input[:, 0, :], quadrature_positions, dsl_t, dsl_dt, 0))
16 rightEigenvalues = FaceDataBlock([[0, 1], [0, 1], [0, DGOrder + 1], [0, 1]], eval("maxEigenvalue", input[:, 1, :], quadrature_positions, dsl_t, dsl_dt, 0))
17 maxEigenvalues = max(leftEigenvalues, rightEigenvalues)
18
19 output[:, 0, :] = output[:, 0, :] - 0.5 * maxEigenvalues * deltaQ
20 output[:, 1, :] = output[:, 1, :] - 0.5 * maxEigenvalues * deltaQ
21
22 if EvaluateFlux:
23 fluxLeft = FaceDataBlock([[0, NumberOfUnknowns], [0, 1], [0, DGOrder + 1], [0, 1]], eval("flux", input[:, 0, :], quadrature_positions, dsl_t, dsl_dt, 0))
24 fluxRight = FaceDataBlock([[0, NumberOfUnknowns], [0, 1], [0, DGOrder + 1], [0, 1]], eval("flux", input[:, 1, :], quadrature_positions, dsl_t, dsl_dt, 0))
25 output[:, 0, :] = output[:, 0, :] + 0.5 * (fluxLeft + fluxRight)
26 output[:, 1, :] = output[:, 1, :] + 0.5 * (fluxLeft + fluxRight)
27
28 if EvaluateNonconservativeProduct:
29 ncp = FaceDataBlock([[0, NumberOfUnknowns], [0, 1], [0, DGOrder + 1], [0, 1]], eval("nonconservativeProduct", averageQ, deltaQ, quadrature_positions, dsl_t, dsl_dt, 0))
30 output[:, 0, :] = output[:, 0, :] + 0.5 * ncp
31 output[:, 1, :] = output[:, 1, :] - 0.5 * ncp
32
33
34def solveRiemannProblemY(faceCentre: "const tarch::la::Vector<Dimensions,double>&", cellSize: "const tarch::la::Vector<Dimensions,double>&", t: "double", dt: "double", faceData : "const double* __restrict__", solution: "double* __restrict__") -> "void":
35 input = FaceDataBlock([[0, NumberOfUnknowns + NumberOfAuxiliaryVariables], [0, DGOrder + 1], [0, 2], [0, 1]], "faceData", "const double")
36 output = FaceDataBlock([[0, NumberOfUnknowns], [0, DGOrder + 1], [0, 2], [0, 1]], "solution")
37 output = 0.0
38
39 dsl_t = Float("t")
40 dsl_dt = Float("dt")
41 dsl_faceCentre = Vector("faceCentre")
42 dsl_cellSize = Vector("cellSize")
43 quadrature_positions = FaceDataBlock([[0, 1], [0, DGOrder + 1], [0, 1], [0, 1]], eval("getQuadraturePointInFace", index, dsl_faceCentre, dsl_cellSize, DGOrder, 0, "SolverType::QuadraturePoints1d"), "tarch::la::Vector<2, double>")
44
45 deltaQ = input[:, :, 1] - input[:, :, 0]
46 averageQ = 0.5 * (input[:, :, 1] + input[:, :, 0])
47
48 bottomEigenvalues = FaceDataBlock([[0, 1], [0, DGOrder + 1], [0, 1], [0, 1]], eval("maxEigenvalue", input[:, :, 0], quadrature_positions, dsl_t, dsl_dt, 1))
49 topEigenvalues = FaceDataBlock([[0, 1], [0, DGOrder + 1], [0, 1], [0, 1]], eval("maxEigenvalue", input[:, :, 1], quadrature_positions, dsl_t, dsl_dt, 1))
50 maxEigenvalues = max(bottomEigenvalues, topEigenvalues)
51
52 output[:, :, 0] = output[:, :, 0] - 0.5 * maxEigenvalues * deltaQ
53 output[:, :, 1] = output[:, :, 1] - 0.5 * maxEigenvalues * deltaQ
54
55 if EvaluateFlux:
56 fluxBottom = FaceDataBlock([[0, NumberOfUnknowns], [0, DGOrder + 1], [0, 1], [0, 1]], eval("flux", input[:, :, 0], quadrature_positions, dsl_t, dsl_dt, 1))
57 fluxTop = FaceDataBlock([[0, NumberOfUnknowns], [0, DGOrder + 1], [0, 1], [0, 1]], eval("flux", input[:, :, 1], quadrature_positions, dsl_t, dsl_dt, 1))
58 output[:, :, 0] = output[:, :, 0] + 0.5 * (fluxBottom + fluxTop)
59 output[:, :, 1] = output[:, :, 1] + 0.5 * (fluxBottom + fluxTop)
60
61 if EvaluateNonconservativeProduct:
62 ncp = FaceDataBlock([[0, NumberOfUnknowns], [0, DGOrder + 1], [0, 1], [0, 1]], eval("nonconservativeProduct", averageQ, deltaQ, quadrature_positions, dsl_t, dsl_dt, 1))
63 output[:, :, 0] = output[:, :, 0] + 0.5 * ncp
64 output[:, :, 1] = output[:, :, 1] - 0.5 * ncp