WSF
WsfSpaceOrbitalPropagatorCondition.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2022 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFSPACEORBITALPROPAGATORCONDITION_HPP
13#define WSFSPACEORBITALPROPAGATORCONDITION_HPP
14
15#include "wsf_space_export.h"
16
17#include <utility>
18
19#include "UtCalendar.hpp"
20class UtInput;
21class UtOrbitalPropagatorBase;
22#include "UtUnitTypes.hpp"
23#include "UtVec3.hpp"
24#include "WsfObject.hpp"
25
26namespace wsf
27{
28namespace space
29{
31
37class WSF_SPACE_EXPORT OrbitalPropagatorCondition : public WsfObject
38{
39public:
40 OrbitalPropagatorCondition* Clone() const override = 0;
41
42 bool ProcessInput(UtInput& aInput) override;
43
45 unsigned GetOrbitNumber() const { return mOrbitNumber; }
46
48 void SetOrbitNumber(unsigned aOrbitNumber) { mOrbitNumber = aOrbitNumber; }
49
56 virtual bool ValidateParameterRanges() const { return true; }
57
68 virtual bool GetTimeToCondition(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const = 0;
69
71 virtual void Accept(OrbitalPropagatorConditionVisitor& aVisitor) = 0;
72
74 virtual std::string GetConditionString() const = 0;
75
76protected:
77 unsigned mOrbitNumber{0};
78};
79
88{
89public:
101 virtual bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const = 0;
102
109 virtual std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const = 0;
110
112 bool GetTimeToCondition(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const final;
113
123 virtual bool HandleSpecialCases(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const
124 {
125 return false;
126 }
127};
128
130class WSF_SPACE_EXPORT NoneCondition : public OrbitalPropagatorCondition
131{
132public:
134
135 NoneCondition* Clone() const override { return new NoneCondition{*this}; }
136
137 bool GetTimeToCondition(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
138
139 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
140
141 std::string GetConditionString() const override { return "NONE"; }
142
143 constexpr static const char* cTYPE{"none"};
144};
145
148{
149public:
151
152 RelativeTimeCondition* Clone() const override { return new RelativeTimeCondition{*this}; }
153
154 bool ProcessInput(UtInput& aInput) override;
155
156 UtTimeValue GetOffsetTime() const { return mOffsetTime; }
157
158 void SetOffsetTime(const UtTimeValue& aOffsetTime) { mOffsetTime = aOffsetTime; }
159
160 bool ValidateParameterRanges() const override;
161
162 bool GetTimeToCondition(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
163
164 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
165
166 std::string GetConditionString() const override { return "AT_RELATIVE_TIME"; }
167
168 constexpr static const char* cTYPE{"relative_time"};
169
170private:
171 UtTimeValue mOffsetTime{};
172};
173
176{
177public:
179
180 PeriapsisCondition* Clone() const override { return new PeriapsisCondition{*this}; }
181
182 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
183
184 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
185
186 bool HandleSpecialCases(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
187
188 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
189
190 std::string GetConditionString() const override { return "AT_PERIAPSIS"; }
191
192 constexpr static const char* cTYPE{"periapsis"};
193};
194
197{
198public:
200
201 ApoapsisCondition* Clone() const override { return new ApoapsisCondition{*this}; }
202
203 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
204
205 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
206
207 bool HandleSpecialCases(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
208
209 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
210
211 std::string GetConditionString() const override { return "AT_APOAPSIS"; }
212
213 constexpr static const char* cTYPE{"apoapsis"};
214};
215
218{
219public:
221
222 AscendingNodeCondition* Clone() const override { return new AscendingNodeCondition{*this}; }
223
224 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
225
226 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
227
228 bool HandleSpecialCases(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
229
230 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
231
232 std::string GetConditionString() const override { return "AT_ASCENDING_NODE"; }
233
234 constexpr static const char* cTYPE{"ascending_node"};
235};
236
239{
240public:
242
243 DescendingNodeCondition* Clone() const override { return new DescendingNodeCondition{*this}; }
244
245 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
246
247 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
248
249 bool HandleSpecialCases(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
250
251 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
252
253 std::string GetConditionString() const override { return "AT_DESCENDING_NODE"; }
254
255 constexpr static const char* cTYPE{"descending_node"};
256};
257
260{
261public:
263
264 EclipseEntryCondition* Clone() const override { return new EclipseEntryCondition{*this}; }
265
266 bool GetTimeToCondition(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
267
268 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
269
270 std::string GetConditionString() const override { return "AT_ECLIPSE_ENTRY"; }
271
272 constexpr static const char* cTYPE{"eclipse_entry"};
273};
274
277{
278public:
280
281 EclipseExitCondition* Clone() const override { return new EclipseExitCondition{*this}; }
282
283 bool GetTimeToCondition(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
284
285 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
286
287 std::string GetConditionString() const override { return "AT_ECLIPSE_EXIT"; }
288
289 constexpr static const char* cTYPE{"eclipse_exit"};
290};
291
293{
294public:
295 RadiusCondition() = default;
296
297 bool ProcessInput(UtInput& aInput) override;
298
299 UtLengthValue GetRadius() const { return mRadius; }
300
301 void SetRadius(const UtLengthValue& aRadius) { mRadius = aRadius; }
302
303 bool ValidateParameterRanges() const override;
304
305protected:
306 UtLengthValue mRadius{};
307};
308
310class WSF_SPACE_EXPORT AscendingRadiusCondition : public RadiusCondition
311{
312public:
314
315 AscendingRadiusCondition* Clone() const override { return new AscendingRadiusCondition{*this}; }
316
317 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
318
319 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
320
321 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
322
323 std::string GetConditionString() const override { return "AT_ASCENDING_RADIUS"; }
324
325 constexpr static const char* cTYPE{"ascending_radius"};
326};
327
329class WSF_SPACE_EXPORT DescendingRadiusCondition : public RadiusCondition
330{
331public:
333
334 DescendingRadiusCondition* Clone() const override { return new DescendingRadiusCondition{*this}; }
335
336 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
337
338 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
339
340 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
341
342 std::string GetConditionString() const override { return "AT_DESCENDING_RADIUS"; }
343
344 constexpr static const char* cTYPE{"descending_radius"};
345};
346
348{
349public:
351
352 double GetRAAN() const { return mRAAN; }
353 double GetInclination() const { return mInclination; }
354
355 void SetRAAN(double aRAAN);
356 void SetInclination(double aInclination);
357
358 void SetIntersectionRAAN_Inclination(double aRAAN, double aInclination);
359
360 bool HandleSpecialCases(const UtOrbitalPropagatorBase& aPropagator, double& aTimeToCondition) const override;
361
362protected:
363 UtVec3d OrbitNormal(double aRAAN, double aInclination) const;
364
365 double mRAAN{0.0};
366 double mInclination{0.0};
367};
368
372{
373public:
375
377
378 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
379
380 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
381
382 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
383
384 std::string GetConditionString() const override { return "AT_NORTHERN_INTERSECTION"; }
385
386 constexpr static const char* cTYPE{"northern_intersection"};
387};
388
392{
393public:
395
397
398 std::pair<bool, double> InitialGuess(const UtOrbitalPropagatorBase& aPropagator) const override;
399
400 bool Objective(UtOrbitalPropagatorBase& aPropagator, const UtCalendar& aBaseEpoch, double aOffsetTime) const override;
401
402 void Accept(OrbitalPropagatorConditionVisitor& aVisitor) override;
403
404 std::string GetConditionString() const override { return "AT_SOUTHERN_INTERSECTION"; }
405
406 constexpr static const char* cTYPE{"southern_intersection"};
407};
408
409} // namespace space
410} // namespace wsf
411
412#endif // WSFSPACEORBITALPROPAGATORCONDITION_HPP
WsfObject()
This is the constructor for the WsfObject class.
Definition WsfObject.cpp:88
void SetType(WsfStringId aType)
Definition WsfObject.cpp:172
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:211
ApoapsisCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:199
ApoapsisCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:201
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:213
AscendingNodeCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:220
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:234
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:232
AscendingNodeCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:222
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:323
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:325
AscendingRadiusCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:313
AscendingRadiusCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:315
DescendingNodeCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:243
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:253
DescendingNodeCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:241
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:255
DescendingRadiusCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:334
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:342
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:344
DescendingRadiusCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:332
EclipseEntryCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:264
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:270
EclipseEntryCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:262
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:272
EclipseExitCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:281
EclipseExitCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:279
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:289
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:287
double mRAAN
Definition WsfSpaceOrbitalPropagatorCondition.hpp:365
double GetRAAN() const
Definition WsfSpaceOrbitalPropagatorCondition.hpp:352
double GetInclination() const
Definition WsfSpaceOrbitalPropagatorCondition.hpp:353
double mInclination
Definition WsfSpaceOrbitalPropagatorCondition.hpp:366
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:141
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:143
NoneCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:135
NoneCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:133
NorthernIntersectionCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:376
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:384
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:386
NorthernIntersectionCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:374
Definition WsfSpaceOrbitalPropagatorConditionVisitor.hpp:22
Definition WsfSpaceOrbitalPropagatorCondition.hpp:38
virtual bool GetTimeToCondition(const UtOrbitalPropagatorBase &aPropagator, double &aTimeToCondition) const =0
OrbitalPropagatorCondition * Clone() const override=0
unsigned mOrbitNumber
Definition WsfSpaceOrbitalPropagatorCondition.hpp:77
virtual bool ValidateParameterRanges() const
Definition WsfSpaceOrbitalPropagatorCondition.hpp:56
bool ProcessInput(UtInput &aInput) override
Definition WsfSpaceOrbitalPropagatorCondition.cpp:34
virtual void Accept(OrbitalPropagatorConditionVisitor &aVisitor)=0
Accept a visitor.
void SetOrbitNumber(unsigned aOrbitNumber)
Set the orbit number.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:48
virtual std::string GetConditionString() const =0
Return the string identifying the condition.
unsigned GetOrbitNumber() const
Return the orbit number.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:45
Definition WsfSpaceOrbitalPropagatorCondition.hpp:88
virtual std::pair< bool, double > InitialGuess(const UtOrbitalPropagatorBase &aPropagator) const =0
virtual bool Objective(UtOrbitalPropagatorBase &aPropagator, const UtCalendar &aBaseEpoch, double aOffsetTime) const =0
bool GetTimeToCondition(const UtOrbitalPropagatorBase &aPropagator, double &aTimeToCondition) const final
This template pattern method performs the search for the time at which the condition obtains.
Definition WsfSpaceOrbitalPropagatorCondition.cpp:48
virtual bool HandleSpecialCases(const UtOrbitalPropagatorBase &aPropagator, double &aTimeToCondition) const
Definition WsfSpaceOrbitalPropagatorCondition.hpp:123
PeriapsisCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:178
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:190
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:192
PeriapsisCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:180
UtLengthValue mRadius
Definition WsfSpaceOrbitalPropagatorCondition.hpp:306
UtLengthValue GetRadius() const
Definition WsfSpaceOrbitalPropagatorCondition.hpp:299
void SetRadius(const UtLengthValue &aRadius)
Definition WsfSpaceOrbitalPropagatorCondition.hpp:301
bool ValidateParameterRanges() const override
Definition WsfSpaceOrbitalPropagatorCondition.cpp:448
bool ProcessInput(UtInput &aInput) override
Definition WsfSpaceOrbitalPropagatorCondition.cpp:441
RelativeTimeCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:150
UtTimeValue GetOffsetTime() const
Definition WsfSpaceOrbitalPropagatorCondition.hpp:156
void SetOffsetTime(const UtTimeValue &aOffsetTime)
Definition WsfSpaceOrbitalPropagatorCondition.hpp:158
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:166
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:168
RelativeTimeCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:152
SouthernIntersectionCondition()
Definition WsfSpaceOrbitalPropagatorCondition.hpp:394
std::string GetConditionString() const override
Return the string identifying the condition.
Definition WsfSpaceOrbitalPropagatorCondition.hpp:404
SouthernIntersectionCondition * Clone() const override
Definition WsfSpaceOrbitalPropagatorCondition.hpp:396
static constexpr const char * cTYPE
Definition WsfSpaceOrbitalPropagatorCondition.hpp:406
Definition WsfAtmosphere.cpp:23
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved