SpECTRE  v2024.04.12
SelfStart::Actions::Initialize< System > Struct Template Reference

Prepares the evolution for time-stepper self-starting. More...

#include <SelfStartActions.hpp>

Public Types

using simple_tags = typename StoreInitialValues< tmpl::push_back< detail::vars_to_save< System >, ::Tags::TimeStep, ::Tags::Next<::Tags::TimeStep > > >::simple_tags
 

Static Public Member Functions

template<typename DbTags , typename... InboxTags, typename Metavariables , typename ArrayIndex , typename ActionList , typename ParallelComponent >
static Parallel::iterable_action_return_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 System>
struct SelfStart::Actions::Initialize< System >

Prepares the evolution for time-stepper self-starting.

Stores the initial values of the variables and time step and sets an appropriate step for self-starting.

Details

The self-start procedure must take place within one slab, and we want to avoid the end of the slab so that we don't have to deal with another action advancing the slab on us. There will be problems if the main evolution tries to evaluate at a time that the self-start procedure used before the self-start version falls out of the history, so we have to make sure that does not happen. We can't do that by making sure our steps are large enough to keep ahead because of the slab restriction, so instead we have to make the self-start step smaller to ensure no collisions. The easiest way to do that is to fit the entire procedure before the first real step, so we pick an initialization time step of \(\Delta t/(N+1)\), for \(\Delta t\) the initial evolution time step and \(N\) the number of history points to be generated.

The original Tags::TimeStep and Tags::Next<Tags::TimeStep> are temporarily stored separately during the self-start procedure, and restored to their original values at the conclusion of the self-start procedure in preparation for the main evolution, so that the initial time steps during the evolution are appropriately set according to Initialization phase values.

Uses:

DataBox changes:

  • Adds:
    • SelfStart::Tags::InitialValue<Tags::TimeStep>
    • SelfStart::Tags::InitialValue<variables_tag>
    • SelfStart::Tags::InitialValue<primitive_variables_tag> if the system has primitives
  • Removes: nothing
  • Modifies: Tags::TimeStep

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