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 <string> 9 : #include <unordered_map> 10 : #include <vector> 11 : 12 : #include "Domain/CoordinateMaps/CoordinateMap.hpp" 13 : #include "Domain/Creators/TimeDependence/TimeDependence.hpp" 14 : #include "Options/String.hpp" 15 : #include "Utilities/TMPL.hpp" 16 : 17 : /// \cond 18 : namespace domain::FunctionsOfTime { 19 : class FunctionOfTime; 20 : } // namespace domain::FunctionsOfTime 21 : 22 : namespace Frame { 23 : struct Distorted; 24 : struct Grid; 25 : struct Inertial; 26 : } // namespace Frame 27 : /// \endcond 28 : 29 : namespace domain::creators::time_dependence { 30 : /// \brief Make the mesh time independent so that it isn't moving. 31 : /// 32 : /// \warning Calling the `block_maps` functions causes an error because the 33 : /// `None` class should be detected separately and optimizations applied so that 34 : /// the coordinates, Jacobians, etc. are not recomputed. 35 : template <size_t MeshDim> 36 1 : class None final : public TimeDependence<MeshDim> { 37 : public: 38 0 : using maps_list = tmpl::list<>; 39 0 : using options = tmpl::list<>; 40 : 41 0 : static constexpr Options::String help = { 42 : "No time dependence in the in grid."}; 43 : 44 0 : None() = default; 45 0 : ~None() override = default; 46 0 : None(const None&) = default; 47 0 : None(None&&) = default; 48 0 : None& operator=(const None&) = default; 49 0 : None& operator=(None&&) = default; 50 : 51 1 : auto get_clone() const -> std::unique_ptr<TimeDependence<MeshDim>> override; 52 : 53 1 : [[noreturn]] auto block_maps_grid_to_inertial(size_t number_of_blocks) const 54 : -> std::vector<std::unique_ptr<domain::CoordinateMapBase< 55 : Frame::Grid, Frame::Inertial, MeshDim>>> override; 56 : 57 1 : [[noreturn]] auto block_maps_grid_to_distorted(size_t number_of_blocks) const 58 : -> std::vector<std::unique_ptr<domain::CoordinateMapBase< 59 : Frame::Grid, Frame::Distorted, MeshDim>>> override; 60 : 61 1 : [[noreturn]] auto block_maps_distorted_to_inertial(size_t number_of_blocks) 62 : const -> std::vector<std::unique_ptr<domain::CoordinateMapBase< 63 : Frame::Distorted, Frame::Inertial, MeshDim>>> override; 64 : 65 1 : auto functions_of_time(const std::unordered_map<std::string, double>& 66 : initial_expiration_times = {}) const 67 : -> std::unordered_map< 68 : std::string, 69 : std::unique_ptr<domain::FunctionsOfTime::FunctionOfTime>> override; 70 : }; 71 : 72 : template <size_t Dim> 73 0 : bool operator==(const None<Dim>& lhs, const None<Dim>& rhs); 74 : 75 : template <size_t Dim> 76 0 : bool operator!=(const None<Dim>& lhs, const None<Dim>& rhs); 77 : } // namespace domain::creators::time_dependence