SpECTRE Documentation Coverage Report
Current view: top level - PointwiseFunctions/AnalyticData/GrMhd/InitialMagneticFields - InitialMagneticField.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 12.5 % 8 1
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            Line data    Source code
       1            0 : // Distributed under the MIT License.
       2              : // See LICENSE.txt for details.
       3              : 
       4              : #pragma once
       5              : 
       6              : #include <memory>
       7              : #include <pup.h>
       8              : 
       9              : #include "DataStructures/Tensor/TypeAliases.hpp"
      10              : #include "Utilities/Serialization/CharmPupable.hpp"
      11              : #include "Utilities/TMPL.hpp"
      12              : 
      13              : /// \cond
      14              : class DataVector;
      15              : 
      16              : namespace gsl {
      17              : template <typename T>
      18              : class not_null;
      19              : }  // namespace gsl
      20              : /// \endcond
      21              : 
      22              : namespace grmhd::AnalyticData {
      23              : 
      24              : /*!
      25              :  * \brief Things related to the initial (seed) magnetic field that can be
      26              :  * superposed on GRMHD initial data.
      27              :  *
      28              :  * In many cases we assign magnetic fields in terms of the vector potential,
      29              :  * which can be computed as
      30              :  *
      31              :  * \f{align*}{
      32              :  *   B^i & = n_a\epsilon^{aijk}\partial_jA_k \\
      33              :  *       & = \frac{1}{\sqrt{\gamma}}[ijk]\partial_j A_k,
      34              :  * \f}
      35              :  *
      36              :  * where \f$[ijk]\f$ is the total anti-symmetric symbol.
      37              :  *
      38              :  * For example, in the Cartesian coordinates,
      39              :  *
      40              :  * \f{align*}{
      41              :  *   B^x & = \frac{1}{\sqrt{\gamma}} (\partial_y A_z - \partial_z A_y), \\
      42              :  *   B^y & = \frac{1}{\sqrt{\gamma}} (\partial_z A_x - \partial_x A_z), \\
      43              :  *   B^z & = \frac{1}{\sqrt{\gamma}} (\partial_x A_y - \partial_y A_x).
      44              :  * \f}
      45              :  *
      46              :  *
      47              :  * \warning The magnetic field classes assume the magnetic field is initialized,
      48              :  * both in size and value, before being passed into the `variables` function.
      49              :  * This is so that multiple magnetic fields can be superposed. Each magnetic
      50              :  * field configuration does a `+=` to make this possible.
      51              :  */
      52              : namespace InitialMagneticFields {
      53              : 
      54              : /*!
      55              :  * \brief The abstract base class for initial magnetic field configurations.
      56              :  *
      57              :  * \warning This assumes the magnetic field is initialized, both in size and
      58              :  * value, before being passed into the `variables` function. This is so that
      59              :  * multiple magnetic fields can be superposed. Each magnetic field
      60              :  * configuration does a `+=` to make this possible.
      61              :  */
      62            1 : class InitialMagneticField : public PUP::able {
      63              :  protected:
      64            0 :   InitialMagneticField() = default;
      65              : 
      66              :  public:
      67            0 :   ~InitialMagneticField() override = default;
      68              : 
      69            0 :   virtual auto get_clone() const -> std::unique_ptr<InitialMagneticField> = 0;
      70              : 
      71            0 :   virtual void variables(
      72              :       gsl::not_null<tnsr::I<DataVector, 3>*> result,
      73              :       const tnsr::I<DataVector, 3>& coords, const Scalar<DataVector>& pressure,
      74              :       const Scalar<DataVector>& sqrt_det_spatial_metric,
      75              :       const tnsr::i<DataVector, 3>& deriv_pressure) const = 0;
      76              : 
      77            0 :   virtual void variables(gsl::not_null<tnsr::I<double, 3>*> result,
      78              :                          const tnsr::I<double, 3>& coords,
      79              :                          const Scalar<double>& pressure,
      80              :                          const Scalar<double>& sqrt_det_spatial_metric,
      81              :                          const tnsr::i<double, 3>& deriv_pressure) const = 0;
      82              : 
      83            0 :   virtual bool is_equal(const InitialMagneticField& rhs) const = 0;
      84              : 
      85              :   /// \cond
      86              :   explicit InitialMagneticField(CkMigrateMessage* msg) : PUP::able(msg) {}
      87              :   WRAPPED_PUPable_abstract(InitialMagneticField);
      88              :   /// \endcond
      89              : };
      90              : 
      91              : }  // namespace InitialMagneticFields
      92              : }  // namespace grmhd::AnalyticData
        

Generated by: LCOV version 2.0-1