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