SpECTRE  v2024.04.12
evolution::dg::ApplyBoundaryCorrections< LocalTimeStepping, System, VolumeDim, DenseOutput > Struct Template Reference

Apply corrections from boundary communication. More...

#include <ApplyBoundaryCorrections.hpp>

Public Types

using system = System
 
using variables_tag = typename system::variables_tag
 
using dt_variables_tag = db::add_tag_prefix<::Tags::dt, variables_tag >
 
using DtVariables = typename dt_variables_tag::type
 
using volume_tags_for_dg_boundary_terms = tmpl::remove_duplicates< tmpl::flatten< tmpl::transform< typename system::boundary_correction_base::creatable_classes, detail::get_dg_boundary_terms< tmpl::_1 > > > >
 
using TimeStepperType = tmpl::conditional_t< local_time_stepping, LtsTimeStepper, TimeStepper >
 
using tag_to_update = tmpl::conditional_t< local_time_stepping, variables_tag, dt_variables_tag >
 
using mortar_data_tag = tmpl::conditional_t< local_time_stepping, evolution::dg::Tags::MortarDataHistory< volume_dim, DtVariables >, evolution::dg::Tags::MortarData< volume_dim > >
 
using MortarDataType = tmpl::conditional_t< DenseOutput, const typename mortar_data_tag::type, typename mortar_data_tag::type >
 
using return_tags = tmpl::conditional_t< DenseOutput, tmpl::list< tag_to_update >, tmpl::list< tag_to_update, mortar_data_tag > >
 
using argument_tags = tmpl::append< tmpl::flatten< tmpl::list< tmpl::conditional_t< DenseOutput, mortar_data_tag, tmpl::list<> >, domain::Tags::Mesh< volume_dim >, Tags::MortarMesh< volume_dim >, Tags::MortarSize< volume_dim >, ::dg::Tags::Formulation, evolution::dg::Tags::NormalCovectorAndMagnitude< volume_dim >, ::Tags::TimeStepper< TimeStepperType >, evolution::Tags::BoundaryCorrection< system >, tmpl::conditional_t< DenseOutput, ::Tags::Time, ::Tags::TimeStep >, tmpl::conditional_t< local_time_stepping, tmpl::list<>, domain::Tags::DetInvJacobian< Frame::ElementLogical, Frame::Inertial > > > >, volume_tags_for_dg_boundary_terms >
 

Static Public Member Functions

template<typename... VolumeArgs>
static void apply (const gsl::not_null< typename tag_to_update::type * > vars_to_update, const gsl::not_null< MortarDataType * > mortar_data, const Mesh< volume_dim > &volume_mesh, const typename Tags::MortarMesh< volume_dim >::type &mortar_meshes, const typename Tags::MortarSize< volume_dim >::type &mortar_sizes, const ::dg::Formulation dg_formulation, const DirectionMap< volume_dim, std::optional< Variables< tmpl::list< evolution::dg::Tags::MagnitudeOfNormal, evolution::dg::Tags::NormalCovector< volume_dim > > > > > &face_normal_covector_and_magnitude, const TimeStepperType &time_stepper, const typename system::boundary_correction_base &boundary_correction, const TimeDelta &time_step, const Scalar< DataVector > &gts_det_inv_jacobian, const VolumeArgs &... volume_args)
 
template<typename... VolumeArgs>
static void apply (const gsl::not_null< typename tag_to_update::type * > vars_to_update, const gsl::not_null< MortarDataType * > mortar_data, const Mesh< volume_dim > &volume_mesh, const typename Tags::MortarMesh< volume_dim >::type &mortar_meshes, const typename Tags::MortarSize< volume_dim >::type &mortar_sizes, const ::dg::Formulation dg_formulation, const DirectionMap< volume_dim, std::optional< Variables< tmpl::list< evolution::dg::Tags::MagnitudeOfNormal, evolution::dg::Tags::NormalCovector< volume_dim > > > > > &face_normal_covector_and_magnitude, const TimeStepperType &time_stepper, const typename system::boundary_correction_base &boundary_correction, const TimeDelta &time_step, const VolumeArgs &... volume_args)
 
template<typename... VolumeArgs>
static void apply (const gsl::not_null< typename variables_tag::type * > vars_to_update, const MortarDataType &mortar_data, const Mesh< volume_dim > &volume_mesh, const typename Tags::MortarMesh< volume_dim >::type &mortar_meshes, const typename Tags::MortarSize< volume_dim >::type &mortar_sizes, const ::dg::Formulation dg_formulation, const DirectionMap< volume_dim, std::optional< Variables< tmpl::list< evolution::dg::Tags::MagnitudeOfNormal, evolution::dg::Tags::NormalCovector< volume_dim > > > > > &face_normal_covector_and_magnitude, const LtsTimeStepper &time_stepper, const typename system::boundary_correction_base &boundary_correction, const double dense_output_time, const VolumeArgs &... volume_args)
 
template<typename DbTagsList , typename... InboxTags, typename Metavariables , typename ArrayIndex , typename ParallelComponent >
static bool is_ready (const gsl::not_null< db::DataBox< DbTagsList > * > box, const gsl::not_null< tuples::TaggedTuple< InboxTags... > * > inboxes, Parallel::GlobalCache< Metavariables > &, const ArrayIndex &, const ParallelComponent *const)
 

Static Public Attributes

static constexpr bool local_time_stepping = LocalTimeStepping
 
static constexpr size_t volume_dim = VolumeDim
 

Detailed Description

template<bool LocalTimeStepping, typename System, size_t VolumeDim, bool DenseOutput>
struct evolution::dg::ApplyBoundaryCorrections< LocalTimeStepping, System, VolumeDim, DenseOutput >

Apply corrections from boundary communication.

If LocalTimeStepping is false, updates the derivative of the variables, which should be done before taking a time step. If LocalTimeStepping is true, updates the variables themselves, which should be done after the volume update.

Setting DenseOutput to true receives data required for output at Tags::Time instead of performing a full step. This is only used for local time-stepping.


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