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
|