4from .AbstractLimiterActionSet
import AbstractLimiterActionSet
6import peano4.solversteps
9 TemplateSaveNewCellData =
"""
10 if ( {{PREDICATE}} ) {
13 //resetting local min and max
14 constexpr int numberOfObservables = repositories::{{SOLVER_INSTANCE}}.NumberOfDMPObservables;
15 double localMinPerVariables[numberOfObservables], localMaxPerVariables[numberOfObservables];
17 kernels::{{SOLVER_NAME}}::findCellLocalMinAndMax(
18 repositories::{{SOLVER_INSTANCE}},
19 fineGridCell{{REGULAR_SOLVER_UNKNOWN_IDENTIFIER}}_old.value,
20 localMinPerVariables, localMaxPerVariables
23 for(int d=0; d<Dimensions; d++){
24 //Projection of cell local min and max
25 std::copy_n(localMinPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value+numberOfObservables);
26 std::copy_n(localMinPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+Dimensions).value);
27 std::copy_n(localMaxPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d).value+3*numberOfObservables);
28 std::copy_n(localMaxPerVariables, numberOfObservables, fineGridFaces{{SOLVER_NAME}}Q_min_and_max(d+Dimensions).value+2*numberOfObservables);
32 {% if RESET_TROUBLED_MARKERS %}
33 //resetting troubled markers
34 fineGridCell{{SOLVER_NAME}}CellLabel.setTroubled_Marker(celldata::{{SOLVER_NAME}}CellLabel::Troubled_Marker::REGULAR);
35 for(int d=0; d<2*Dimensions; d++){
36 fineGridFaces{{SOLVER_NAME}}FaceLabel(d).setTroubled_Marker(facedata::{{SOLVER_NAME}}FaceLabel::Troubled_Marker::REGULAR);
40 {% if TRAMSMIT_CELL_TIMESTAMPS %}
41 //set timestamp for both cells to be the max of the two possible timestamps
42 const double timeStamp = std::max(
43 fineGridCell{{LIMITER_SOLVER_NAME}}CellLabel.getTimeStamp(),
44 fineGridCell{{REGULAR_SOLVER_NAME}}CellLabel.getTimeStamp()
46 fineGridCell{{LIMITER_SOLVER_NAME}}CellLabel.setTimeStamp(timeStamp);
47 fineGridCell{{REGULAR_SOLVER_NAME}}CellLabel.setTimeStamp(timeStamp);
52 def __init__(self, solver, guard, use_DMP=False, reset_troubled_markers=False, transmit_cell_timestamps=False):
53 super(SaveNewCellData, self).
__init__(solver)
61 if operation_name==peano4.solversteps.ActionSet.OPERATION_TOUCH_CELL_FIRST_TIME:
63 self.
_solver._init_dictionary_with_default_parameters(d)
64 self.
_solver.add_entries_to_text_replacement_dictionary(d)
65 d[
"PREDICATE" ] = self.
guard
73 return __name__.replace(
".py",
"").replace(
".",
"_")
__init__(self, solver, guard, use_DMP=False, reset_troubled_markers=False, transmit_cell_timestamps=False)
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 TemplateSaveNewCellData
_transmit_cell_timestamps
get_includes(self)
Return include statements that you need.