Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <pup.h> 7 : 8 : #include "Utilities/Serialization/CharmPupable.hpp" 9 : 10 : namespace elliptic::analytic_data { 11 : /*! 12 : * \brief Subclasses supply variable-independent background data for an elliptic 13 : * solve. 14 : * 15 : * Examples for background fields are a background metric, associated curvature 16 : * quantities, matter sources such as a mass-density in the XCTS equations, or 17 : * just a source function \f$f(x)\f$ in a Poisson equation \f$\Delta u = 18 : * f(x)\f$. 19 : * 20 : * Subclasses must define the following compile-time interface: 21 : * 22 : * - They are option-creatable. 23 : * - They define a `variables` function that provides the fixed-sources in the 24 : * elliptic equations (see `elliptic::protocols::FirstOrderSystem`). The 25 : * function must have this signature: 26 : * 27 : * \snippet Test_InitializeFixedSources.cpp background_vars_fct 28 : * 29 : * It must support being called with a `tmpl::list` of all system-variable 30 : * tags prefixed with `::Tags::FixedSource`. 31 : * - They define a `variables` function that provides data for all background 32 : * quantities, if any are listed in the `background_fields` of the system (see 33 : * `elliptic::protocols::FirstOrderSystem`). The function must have this 34 : * signature: 35 : * 36 : * \snippet Test_SubdomainOperator.cpp background_vars_fct_derivs 37 : * 38 : * It must support being called with a `tmpl::list` of all background tags. It 39 : * may use the `mesh` and `inv_jacobian` to compute numerical derivatives. 40 : */ 41 1 : class Background : public virtual PUP::able { 42 : protected: 43 0 : Background() = default; 44 : 45 : public: 46 0 : ~Background() override = default; 47 : 48 : /// \cond 49 : explicit Background(CkMigrateMessage* msg) : PUP::able(msg) {} 50 : WRAPPED_PUPable_abstract(Background); 51 : /// \endcond 52 : }; 53 : } // namespace elliptic::analytic_data