4from .AbstractLimiterActionSet
import AbstractLimiterActionSet
7import peano4.solversteps
10from .kernels
import check_troubledness
13 TemplateVerifyTroubledness =
"""
14 if ( {{PREDICATE}} ) {
15 const double timeStamp = fineGridCell{{REGULAR_SOLVER_NAME}}CellLabel.getTimeStamp();
16 const double timeStepSize = fineGridCell{{REGULAR_SOLVER_NAME}}CellLabel.getTimeStepSize();
18 bool isUnTroubled = true;
20 auto* luh = fineGridCell{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}.value;
23 isUnTroubled &= kernels::{{SOLVER_NAME}}::isPhysicallyAdmissible(
24 repositories::{{SOLVER_INSTANCE}},
28 timeStamp+timeStepSize
33 constexpr int numberOfObservables = repositories::{{SOLVER_INSTANCE}}.NumberOfDMPObservables;
34 double boundaryMinPerVariables[2*Dimensions*numberOfObservables];
35 double boundaryMaxPerVariables[2*Dimensions*numberOfObservables];
37 for (int d=0; d<Dimensions; d++) {
38 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value, numberOfObservables, &boundaryMinPerVariables[d*numberOfObservables]);
39 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+Dimensions).value+numberOfObservables, numberOfObservables, &boundaryMinPerVariables[(d+Dimensions)*numberOfObservables]);
41 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value+2*numberOfObservables, numberOfObservables, &boundaryMaxPerVariables[d*numberOfObservables]);
42 std::copy_n(fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+Dimensions).value+3*numberOfObservables, numberOfObservables, &boundaryMaxPerVariables[(d+Dimensions)*numberOfObservables]);
45 isUnTroubled &= kernels::{{SOLVER_NAME}}::discreteMaximumPrincipleAndMinAndMaxSearch(
46 repositories::{{SOLVER_INSTANCE}},
48 repositories::{{SOLVER_INSTANCE}}.RelaxationParameter, //const double relaxationParameter
49 repositories::{{SOLVER_INSTANCE}}.DifferencesScaling, //const double differenceScaling
50 boundaryMinPerVariables,
51 boundaryMaxPerVariables
56 repositories::{{SOLVER_INSTANCE}}.addTroubledCell();
57 fineGridCell{{SOLVER_NAME}}CellLabel.setTroubled_Marker(celldata::{{SOLVER_NAME}}CellLabel::Troubled_Marker::TROUBLED);
58 for(int d=0; d<2*Dimensions; d++){
59 fineGridFaces{{SOLVER_NAME}}FaceLabel(d).setTroubled_Marker(facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::TROUBLED);
63 fineGridCell{{LIMITER_SOLVER_NAME}}CellLabel.setTimeStamp(timeStamp);
64 fineGridCell{{LIMITER_SOLVER_NAME}}CellLabel.setTimeStepSize(timeStepSize);
66 fineGridCell{{LIMITER_SOLVER_NAME}}CellLabel.setHasUpdated(true);
70 def __init__(self, solver, guard, use_PAC=False, use_DMP=False):
71 super(VerifyTroubledness,self).
__init__(solver)
79 if operation_name==peano4.solversteps.ActionSet.OPERATION_TOUCH_CELL_LAST_TIME:
81 self.
_solver._init_dictionary_with_default_parameters(d)
82 self.
_solver.add_entries_to_text_replacement_dictionary(d)
83 d[
"PREDICATE" ] = self.
guard
92 return __name__.replace(
".py",
"").replace(
".",
"_")
get_action_set_name(self)
Return unique action set name.
get_body_of_operation(self, operation_name)
Return actual C++ code snippets to be inserted into C++ code.
str TemplateVerifyTroubledness
get_includes(self)
Return include statements that you need.
__init__(self, solver, guard, use_PAC=False, use_DMP=False)