Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include "DataStructures/DataBox/Protocols/Mutator.hpp"
7 : #include "Evolution/Systems/Ccz4/FiniteDifference/System.hpp"
8 : #include "Evolution/Systems/Ccz4/FiniteDifference/Tags.hpp"
9 : #include "Evolution/Systems/Ccz4/Tags.hpp"
10 : #include "Utilities/Gsl.hpp"
11 : #include "Utilities/ProtocolHelpers.hpp"
12 : #include "Utilities/TMPL.hpp"
13 :
14 : namespace Ccz4::fd {
15 : /*!
16 : * \brief Mutator to enforce constrained evolution after every time step
17 : *
18 : * Togglable option in input file via option tag defined in Ccz4::fd::Tags.
19 : * If constrained_evolution is true, enforce
20 : * the unit determinant constraint on the conformal spatial metric
21 : * and traceless constraint on the ATilde
22 : */
23 1 : struct EnforceConstrainedEvolution : tt::ConformsTo<db::protocols::Mutator> {
24 0 : static constexpr size_t dim = System::volume_dim;
25 0 : using return_tags = tmpl::list<::Ccz4::Tags::ConformalMetric<DataVector, dim>,
26 : ::Ccz4::Tags::ATilde<DataVector, dim>>;
27 0 : using argument_tags = tmpl::list<::Ccz4::fd::Tags::ConstrainedEvolution>;
28 :
29 0 : static void apply(
30 : gsl::not_null<tnsr::ii<DataVector, dim>*> conformal_spatial_metric,
31 : gsl::not_null<tnsr::ii<DataVector, dim>*> a_tilde,
32 : bool constrained_evolution);
33 : };
34 : } // namespace Ccz4::fd
|