SpECTRE  2021.08.02
evolution::dg::Actions::ApplyBoundaryCorrections< Metavariables > Struct Template Reference

Computes the boundary corrections and lifts them to the volume. More...

#include <ApplyBoundaryCorrections.hpp>

Public Types

using inbox_tags = tmpl::list< evolution::dg::Tags::BoundaryCorrectionAndGhostCellsInbox< Metavariables::volume_dim > >
 
using const_global_cache_tags = tmpl::list< evolution::Tags::BoundaryCorrection< typename Metavariables::system >, ::dg::Tags::Formulation >
 

Public Member Functions

template<typename DbTagsList , typename... InboxTags>
void receive_global_time_stepping (const gsl::not_null< db::DataBox< DbTagsList > * > box, const gsl::not_null< tuples::TaggedTuple< InboxTags... > * > inboxes) noexcept
 
template<typename DbTagsList , typename... InboxTags>
void receive_local_time_stepping (const gsl::not_null< db::DataBox< DbTagsList > * > box, const gsl::not_null< tuples::TaggedTuple< InboxTags... > * > inboxes) noexcept
 
template<typename DbTagsList , typename... InboxTags>
void complete_time_step (const gsl::not_null< db::DataBox< DbTagsList > * > box) noexcept
 

Static Public Member Functions

template<typename DbTagsList , typename... InboxTags, typename ArrayIndex , typename ActionList , typename ParallelComponent >
static std::tuple< db::DataBox< DbTagsList > &&, Parallel::AlgorithmExecutionapply (db::DataBox< DbTagsList > &box, tuples::TaggedTuple< InboxTags... > &inboxes, const Parallel::GlobalCache< Metavariables > &, const ArrayIndex &, ActionList, const ParallelComponent *const) noexcept
 

Detailed Description

template<typename Metavariables>
struct evolution::dg::Actions::ApplyBoundaryCorrections< Metavariables >

Computes the boundary corrections and lifts them to the volume.

Given the data from both sides of each mortar, computes the boundary correction on each mortar and then lifts it into the volume.

Future additions include:

  • boundary conditions, both through ghost cells and by changing the time derivatives.
  • support local time stepping (shouldn't be very difficult)

When using local time stepping the neighbor sends data at the neighbor's current temporal id. Along with the boundary data, the next temporal id at which the neighbor will send data is also sent. This is equal to the neighbor's Tags::Next<Tags::TimeStepId>. When inserting into the mortar data history, we insert the received temporal id, that is, the current time of the neighbor, along with the boundary correction data.