Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : #include <memory> 8 : #include <pup.h> 9 : 10 : #include "DataStructures/DataBox/Prefixes.hpp" 11 : #include "DataStructures/TaggedTuple.hpp" 12 : #include "Evolution/Systems/CurvedScalarWave/Tags.hpp" 13 : #include "Options/String.hpp" 14 : #include "PointwiseFunctions/AnalyticData/ScalarTensor/ScalarField/AnalyticData.hpp" 15 : #include "Utilities/MakeWithValue.hpp" 16 : #include "Utilities/Serialization/CharmPupable.hpp" 17 : #include "Utilities/TMPL.hpp" 18 : 19 : namespace ScalarTensor::AnalyticData::ScalarField { 20 : 21 : /*! 22 : * \brief Vanishing profile for the scalar field. 23 : */ 24 : template <size_t Dim> 25 1 : class Zero : public ScalarTensor::AnalyticData::ScalarField::AnalyticData<Dim> { 26 : public: 27 0 : using options = tmpl::list<>; 28 0 : static constexpr Options::String help{ 29 : "The trivial solution, useful as initial guess."}; 30 : 31 0 : using scalar_field_tags = 32 : typename ScalarTensor::AnalyticData::ScalarField::AnalyticData< 33 : Dim>::scalar_field_tags; 34 : 35 0 : Zero() = default; 36 0 : Zero(const Zero&) = default; 37 0 : Zero& operator=(const Zero&) = default; 38 0 : Zero(Zero&&) = default; 39 0 : Zero& operator=(Zero&&) = default; 40 0 : ~Zero() override = default; 41 : std::unique_ptr<ScalarTensor::AnalyticData::ScalarField::AnalyticData<Dim>> 42 0 : get_clone() const override; 43 : 44 : /// \cond 45 : explicit Zero(CkMigrateMessage* m) 46 : : ScalarTensor::AnalyticData::ScalarField::AnalyticData<Dim>(m) {} 47 : using PUP::able::register_constructor; 48 : WRAPPED_PUPable_decl_template(Zero); // NOLINT 49 : /// \endcond 50 : 51 : template <typename... RequestedTags> 52 0 : tuples::TaggedTuple<RequestedTags...> variables( 53 : const tnsr::I<DataVector, Dim>& x, 54 : tmpl::list<RequestedTags...> /*meta*/) const { 55 : static_assert( 56 : tmpl::size<tmpl::list_difference<tmpl::list<RequestedTags...>, 57 : scalar_field_tags>>::value == 0, 58 : "The requested tag is not supported"); 59 : return {make_with_value<typename RequestedTags::type>(x, 0.)...}; 60 : } 61 : 62 : template <size_t SpatialDim> 63 0 : friend bool operator==(const Zero<SpatialDim>& /*lhs*/, 64 : const Zero<SpatialDim>& /*rhs*/); 65 : }; 66 : 67 : template <size_t SpatialDim> 68 0 : bool operator!=(const Zero<SpatialDim>& lhs, const Zero<SpatialDim>& rhs); 69 : 70 : } // namespace ScalarTensor::AnalyticData::ScalarField