SpECTRE  v2025.08.19
ScalarSelfForce::Events::ObserveSelfForce< ArraySectionIdTag > Class Template Reference

Observe the self-force at the position of the scalar charge. More...

#include <ObserveSelfForce.hpp>

Public Types

using options = tmpl::list<>
 
using compute_tags_for_observation_box = tmpl::list<>
 
using return_tags = tmpl::list<>
 
using argument_tags = tmpl::list<::Tags::ObservationBox >
 
using BackgroundTag = elliptic::Tags::Background< elliptic::analytic_data::Background >
 
using observation_registration_tags = tmpl::list<::Tags::DataBox >
 
using is_ready_argument_tags = tmpl::list<>
 

Public Member Functions

 ObserveSelfForce (CkMigrateMessage *msg)
 
 WRAPPED_PUPable_decl_template (ObserveSelfForce)
 
template<typename ComputeTagsList , typename DataBoxType , typename Metavariables , typename ParallelComponent >
void operator() (const ObservationBox< ComputeTagsList, DataBoxType > &box, Parallel::GlobalCache< Metavariables > &cache, const ElementId< 2 > &element_id, const ParallelComponent *const, const ObservationValue &observation_value) const
 
template<typename DbTagsList >
std::optional< std::pair< observers::TypeOfObservation, observers::ObservationKey > > get_observation_type_and_key_for_registration (const db::DataBox< DbTagsList > &box) const
 
template<typename Metavariables , typename ArrayIndex , typename Component >
bool is_ready (Parallel::GlobalCache< Metavariables > &, const ArrayIndex &, const Component *const) const
 
bool needs_evolved_variables () const override
 Whether the event uses anything depending on the evolved_variables. If this returns false, anything depending on the evolved variables may have an incorrect value when the event is run. More...
 
- Public Member Functions inherited from Event
 Event (CkMigrateMessage *msg)
 
 WRAPPED_PUPable_abstract (Event)
 
template<typename ComputeTagsList , typename DataBoxType , typename Metavariables , typename ArrayIndex , typename ComponentPointer >
void run (const gsl::not_null< ObservationBox< ComputeTagsList, DataBoxType > * > box, Parallel::GlobalCache< Metavariables > &cache, const ArrayIndex &array_index, const ComponentPointer, const ObservationValue &observation_value) const
 
template<typename DbTags , typename Metavariables , typename ArrayIndex , typename ComponentPointer >
bool is_ready (const db::DataBox< DbTags > &box, Parallel::GlobalCache< Metavariables > &cache, const ArrayIndex &array_index, const ComponentPointer) const
 
virtual bool needs_evolved_variables () const =0
 Whether the event uses anything depending on the evolved_variables. If this returns false, anything depending on the evolved variables may have an incorrect value when the event is run. More...
 

Static Public Attributes

static constexpr Options::String help
 

Detailed Description

template<typename ArraySectionIdTag = void>
class ScalarSelfForce::Events::ObserveSelfForce< ArraySectionIdTag >

Observe the self-force at the position of the scalar charge.

Details

This event interpolates the scalar m-mode field and its derivatives to the position of the scalar charge (puncture) and computes the m-mode contribution to the self-force acting on the charge. The self-force is then written to a reduction file.

The self-force is computed in the Boyer-Lindquist r and theta coordinates (for scalar charge \(q=1\)) following Eq. (3.10) in [158] :

\begin{align} F_r^m &= \partial_r (\Psi_m^R / r) = \frac{1}{r \alpha} \partial_{r_*} \Psi_m^R - \frac{1}{r^2} \Psi_m^R \\ F_\theta^m &= \partial_\theta (\Psi_m^R / r) = -\frac{1}{r} \partial_{\cos\theta} \Psi_m^R \end{align}

with \(\alpha = 1 - 2 M r / (r^2 + a^2)\). For modes \(m > 0\) the self-force includes an additional factor of 2 and a complex rotation by \(m \Delta\phi = \frac{m a}{r_+ - r_-}\ln\frac{r - r_+}{r - r_-}\).

These contributions can be summed over all m-modes (in postprocessing) to form the total self-force \(F_\mu^\mathrm{self} = \sum_m F_\mu^m\), where the sum is truncated at some maximum m-mode number.

Member Function Documentation

◆ needs_evolved_variables()

template<typename ArraySectionIdTag = void>
bool ScalarSelfForce::Events::ObserveSelfForce< ArraySectionIdTag >::needs_evolved_variables ( ) const
inlineoverridevirtual

Whether the event uses anything depending on the evolved_variables. If this returns false, anything depending on the evolved variables may have an incorrect value when the event is run.

Implements Event.

Member Data Documentation

◆ help

template<typename ArraySectionIdTag = void>
constexpr Options::String ScalarSelfForce::Events::ObserveSelfForce< ArraySectionIdTag >::help
staticconstexpr
Initial value:
=
"Observe the self-force at the position of the scalar charge."

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