4 from .AbstractLimiterActionSet
import AbstractLimiterActionSet
6 import peano4.solversteps
9 TemplateCopyFaceData =
"""
10 if ( {{PREDICATE}} ) {
12 constexpr int RegularSolverPoints = {{REGULAR_SOLVER_ORDER}} + 1;
13 constexpr int LimiterSolverPoints = {{LIMITER_SOLVER_ORDER}} + 1;
15 constexpr int NumberOfVariables = repositories::{{REGULAR_SOLVER_INSTANCE}}.NumberOfUnknowns;
16 constexpr int NumberOfParameters = repositories::{{REGULAR_SOLVER_INSTANCE}}.NumberOfAuxiliaryVariables;
19 constexpr int RegularFaceSize = RegularSolverPoints;
20 constexpr int LimiterFaceSize = LimiterSolverPoints;
22 constexpr int RegularFaceSize = RegularSolverPoints*RegularSolverPoints;
23 constexpr int LimiterFaceSize = LimiterSolverPoints*LimiterSolverPoints;
26 constexpr int FluxElementsPerFace = RegularFaceSize * NumberOfVariables;
27 constexpr int BasisElementsPerFace = RegularFaceSize * (NumberOfVariables + NumberOfParameters);
29 constexpr int FluxElementsPerFace2 = LimiterFaceSize * NumberOfVariables;
30 constexpr int BasisElementsPerFace2 = LimiterFaceSize * (NumberOfVariables + NumberOfParameters);
32 if(fineGridCell{{SOLVER_NAME}}CellLabel.getTroubled_Marker()==celldata::{{SOLVER_NAME}}CellLabel::Troubled_Marker::REGULAR){
33 for(int d=0; d<DIMENSIONS; d++){
34 if( fineGridFaces{{SOLVER_NAME}}FaceLabel(d).getTroubled_Marker()==facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::TROUBLED ){
35 //Regular face to Limiter
36 // Projected solution estimations
37 kernels::{{SOLVER_NAME}}::regularToLimiterFace(
38 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d).value+BasisElementsPerFace,
39 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d).value+BasisElementsPerFace2,
40 NumberOfVariables+NumberOfParameters
42 // Projected flux estimations
43 kernels::{{SOLVER_NAME}}::regularToLimiterFace(
44 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d).value+FluxElementsPerFace,
45 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d).value+FluxElementsPerFace2,
50 if( fineGridFaces{{SOLVER_NAME}}FaceLabel(d+DIMENSIONS).getTroubled_Marker()==facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::TROUBLED ){
51 //Regular face to Limiter
52 // Projected solution estimations
53 kernels::{{SOLVER_NAME}}::regularToLimiterFace(
54 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d+DIMENSIONS).value,
55 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d+DIMENSIONS).value,
56 NumberOfVariables+NumberOfParameters
58 // Projected flux estimations
59 kernels::{{SOLVER_NAME}}::regularToLimiterFace(
60 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d+DIMENSIONS).value,
61 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d+DIMENSIONS).value,
68 if(fineGridCell{{SOLVER_NAME}}CellLabel.getTroubled_Marker()==celldata::{{SOLVER_NAME}}CellLabel::Troubled_Marker::TROUBLED){
69 for(int d=0; d<DIMENSIONS; d++){
71 // Projected solution estimations
72 kernels::{{SOLVER_NAME}}::limiterToRegularFace(
73 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d).value+BasisElementsPerFace2,
74 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d).value+BasisElementsPerFace,
75 NumberOfVariables+NumberOfParameters
77 // Projected flux estimations
78 kernels::{{SOLVER_NAME}}::limiterToRegularFace(
79 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d).value+FluxElementsPerFace2,
80 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d).value+FluxElementsPerFace,
84 // Projected solution estimations
85 kernels::{{SOLVER_NAME}}::limiterToRegularFace(
86 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d+DIMENSIONS).value,
87 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}Estimates(d+DIMENSIONS).value,
88 NumberOfVariables+NumberOfParameters
90 // Projected flux estimations
91 kernels::{{SOLVER_NAME}}::limiterToRegularFace(
92 fineGridFaces{{LIMITER_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d+DIMENSIONS).value,
93 fineGridFaces{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}FluxEstimates(d+DIMENSIONS).value,
148 super(SolveRiemannProblem,self).
__init__(solver)
153 if operation_name==peano4.solversteps.ActionSet.OPERATION_TOUCH_CELL_LAST_TIME:
155 self.
_solver_solver._init_dictionary_with_default_parameters(d)
156 self.
_solver_solver.add_entries_to_text_replacement_dictionary(d)
157 d[
"PREDICATE"] = self.
guardguard
163 return __name__.replace(
".py",
"").replace(
".",
"_")
166 return ( super( SolveRiemannProblem, self).
get_includes()
168 #include "kernels/""" + self.
_solver_solver._name +
"""/Limiter.h"
def get_action_set_name(self)
string TemplateCopyFaceData
def get_body_of_operation(self, operation_name)
def __init__(self, solver, guard)