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 : #include <string>
8 :
9 : #include "ControlSystem/ControlErrors/Size/Info.hpp"
10 : #include "ControlSystem/ControlErrors/Size/State.hpp"
11 : #include "Options/String.hpp"
12 : #include "Utilities/Serialization/CharmPupable.hpp"
13 : #include "Utilities/TMPL.hpp"
14 :
15 : namespace control_system::size::States {
16 0 : class DeltaRNoDrift : public State {
17 : public:
18 0 : using options = tmpl::list<>;
19 0 : static constexpr Options::String help{
20 : "Controls the velocity of the excision surface to maintain a constant "
21 : "separation between the excision surface and the horizon surface. "
22 : "This is a transition from DeltaRDriftInward to DeltaR, and otherwise "
23 : "acts very much like state DeltaR (e.g. it has the same control error). "
24 : "This is state 4 in SpEC."};
25 0 : DeltaRNoDrift() = default;
26 1 : std::string name() const override { return "DeltaRNoDrift"; }
27 1 : size_t number() const override { return 4; }
28 0 : std::unique_ptr<State> get_clone() const override;
29 0 : std::string update(gsl::not_null<Info*> info,
30 : const StateUpdateArgs& update_args,
31 : const CrossingTimeInfo& crossing_time_info) const override;
32 : /// The return value is Q from Eq. 96 of \cite Hemberger2012jz.
33 1 : double control_error(
34 : const Info& info,
35 : const ControlErrorArgs& control_error_args) const override;
36 :
37 0 : WRAPPED_PUPable_decl_template(DeltaRNoDrift); // NOLINT
38 0 : explicit DeltaRNoDrift(CkMigrateMessage* const /*msg*/) {}
39 : };
40 : } // namespace control_system::size::States
|