SpECTRE  v2022.05.05
evolution::dg::subcell::Actions::TciAndRollback< TciMutator > Struct Template Reference

Run the troubled-cell indicator on the candidate solution and perform the time step rollback if needed. More...

#include <TciAndRollback.hpp>

Static Public Member Functions

template<typename DbTags , typename... InboxTags, typename Metavariables , typename ArrayIndex , typename ActionList , typename ParallelComponent , size_t Dim = Metavariables::volume_dim>
static std::tuple< db::DataBox< DbTags > &&, bool, size_t > apply (db::DataBox< DbTags > &box, const tuples::TaggedTuple< InboxTags... > &, const Parallel::GlobalCache< Metavariables > &, const ArrayIndex &, const ActionList, const ParallelComponent *const)

Detailed Description

template<typename TciMutator>
struct evolution::dg::subcell::Actions::TciAndRollback< TciMutator >

Run the troubled-cell indicator on the candidate solution and perform the time step rollback if needed.

Interior cells are marked as troubled if subcell_options.always_use_subcells() is true, or if either the RDMP troubled-cell indicator (TCI) or the TciMutator reports the cell is troubled. Exterior cells are marked as troubled only if Metavariables::SubcellOptions::subcell_enabled_at_external_boundary is true.

The troubled-cell indicator (TCI) given by the mutator TciMutator can mutate tags in the DataBox, but should do so cautiously. The main reason that this is a mutator is because primitive variables, such as the pressure, are used to check if the solution is physical. In the relativistic case, even just whether or not the primitive variables can be recovered is used as a condition. Note that the evolved variables are projected to the subcells before the TCI is called, and so Tags::Inactive<variables_tag> can be used to retrieve the candidate solution on the subcell (e.g. for an RDMP TCI).

After rollback, the subcell scheme must project the DG boundary corrections \(G\) to the subcells for the scheme to be conservative. The subcell actions know if a rollback was done because the local mortar data would already be computed.

The documentation for this struct was generated from the following file: