8 // reset cell and face labels for limiting
9 fineGridCell{{SOLVER_NAME}}CellLabel.setTroubled_Marker(celldata::{{SOLVER_NAME}}CellLabel::Troubled_Marker::ADER);
11 for(int d=0; d<DIMENSIONS; d++){
12 fineGridFaces{{SOLVER_NAME}}FaceLabel(d).setTroubled_Marker(facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::ADER);
13 fineGridFaces{{SOLVER_NAME}}FaceLabel(d+DIMENSIONS).setTroubled_Marker(facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::ADER);
19 constexpr int numberOfObservables = repositories::{{SOLVER_INSTANCE}}.NumberOfDMPObservables;
20 double localMinPerVariables[numberOfObservables], localMaxPerVariables[numberOfObservables];
21 generated::kernels::limiter::findCellLocalMinAndMax(
22 fineGridCell{{SOLVER_NAME}}Q_old.value,
23 repositories::{{SOLVER_INSTANCE}},
24 localMinPerVariables, localMaxPerVariables
27 for(int d=0; d<DIMENSIONS; d++){
28 //Projection of cell local min and max
29 std::copy_n(localMinPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value+numberOfObservables);
30 std::copy_n(localMinPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+DIMENSIONS).value);
31 std::copy_n(localMaxPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value+3*numberOfObservables);
32 std::copy_n(localMaxPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+DIMENSIONS).value+2*numberOfObservables);
38 isUnTroubled &= generated::kernels::limiter::isPhysicallyAdmissible(
40 repositories::{{SOLVER_INSTANCE}},
43 timeStamp+timeStepSize
47 constexpr int numberOfObservables = repositories::{{SOLVER_INSTANCE}}.NumberOfDMPObservables;
48 double boundaryMinPerVariables[2*DIMENSIONS*numberOfObservables];
49 double boundaryMaxPerVariables[2*DIMENSIONS*numberOfObservables];
51 for(int d=0; d<DIMENSIONS; d++){
52 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value, numberOfObservables, &boundaryMinPerVariables[d*numberOfObservables]);
53 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+DIMENSIONS).value+numberOfObservables, numberOfObservables, &boundaryMinPerVariables[(d+DIMENSIONS)*numberOfObservables]);
55 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value+2*numberOfObservables, numberOfObservables, &boundaryMaxPerVariables[d*numberOfObservables]);
56 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+DIMENSIONS).value+3*numberOfObservables, numberOfObservables, &boundaryMaxPerVariables[(d+DIMENSIONS)*numberOfObservables]);
59 isUnTroubled &= generated::kernels::limiter::discreteMaximumPrincipleAndMinAndMaxSearch(
61 repositories::{{SOLVER_INSTANCE}},
62 repositories::{{SOLVER_INSTANCE}}.RelaxationParameter, //const double relaxationParameter
63 repositories::{{SOLVER_INSTANCE}}.DifferencesScaling, //const double differenceScaling
64 boundaryMinPerVariables,
65 boundaryMaxPerVariables
68 template_set_troubled_markers =
"""
70 repositories::{{SOLVER_INSTANCE}}.addTroubledCell();
71 fineGridCell{{SOLVER_NAME}}CellLabel.setTroubled_Marker(celldata::{{SOLVER_NAME}}CellLabel::Troubled_Marker::TROUBLED);
72 for(int d=0; d<2*DIMENSIONS; d++){
73 fineGridFaces{{SOLVER_NAME}}FaceLabel(d).setTroubled_Marker(facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::TROUBLED);
77 fineGridCell{{SOLVER_NAME}}CellLabel.setTroubled_Marker(celldata::{{SOLVER_NAME}}CellLabel::Troubled_Marker::REGULAR);
78 for(int d=0; d<2*DIMENSIONS; d++){
79 fineGridFaces{{SOLVER_NAME}}FaceLabel(d).setTroubled_Marker(facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::REGULAR);
85 bool isUnTroubled = true;
86 """ + (templatePAC
if usePAC
else "")
87 + (template_DMP
if useDMP
else "")
88 + (template_set_troubled_markers
if useTroubledMarkers
else "")
def reset_troubled_markers()
def check_troubledness(usePAC, useDMP, useTroubledMarkers)
def compute_local_min_and_max_and_project()