WSF
WsfOrbitalConjunctionAssessment.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 2017 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 WSFORBITALCONJUNCTIONASSESSMENT_HPP
13#define WSFORBITALCONJUNCTIONASSESSMENT_HPP
14
15#include "UtCalendar.hpp"
16class UtCovariance;
17#include "UtException.hpp"
18#include "UtOrbitalPropagatorBase.hpp"
19#include "UtSpline.hpp"
20#include "UtVec3.hpp"
21#include "WsfLocalTrack.hpp"
22
25{
26 std::string mPrimary;
27 std::string mSecondary;
28 double mMinTime;
29 double mStartTime;
30 double mEndTime;
34};
35
38{
39public:
52
60
62 double aPrimarySize,
63 WsfLocalTrack& aSecondary,
64 double aSecondarySize,
65 const Options& aOptions,
66 const UtOrbitalPropagatorBase* aPropPtr);
67
79
81 bool ReachedFinalTime() const { return mStatus == Status::cREACHED_FINAL_TIME; }
82
85
87 double DefaultVariance() const { return mOptions.mDefaultVariance; }
88
90 double DefaultObjectRadius() const { return mOptions.mDefaultObjectRadius; }
91
92private:
94 struct Kinematics
95 {
96 UtVec3d mPosition;
97 UtVec3d mVelocity;
98 UtVec3d mAcceleration;
99 };
100
102 struct State
103 {
104 double DistanceFunction() const;
105 double DistanceFunctionPrime() const;
106 double DistanceFunctionPrimePrime() const;
107 UtVec3d RelativePosition() const;
108 UtVec3d RelativeVelocity() const;
109 UtVec3d RelativeAcceleration() const;
110
111 double mTime;
112 Kinematics mPrimary;
113 Kinematics mSecondary;
114 };
115
116 class Encounter
117 {
118 public:
119 Encounter();
120
122 void Reset();
123
125 void Compute(const State& aCurr,
126 const State& aNext,
127 double aCombinedRadius,
128 const UtCovariance& aCombinedCovariance,
129 double aScaleFactor);
130
132 bool HasCloseEncounter() const { return mRecord.mStartTime < mRecord.mEndTime; }
133
135 WsfOrbitalConjunctionRecord GetRecord() const { return mRecord; }
136
137 private:
138 void ComputeProbability(const UtInterpolatingPolynomial<UtVec3d, 5>& aPath, double aCombinedRadius);
139 void ComputeEncounterTimes(const UtInterpolatingPolynomial<UtVec3d, 5>& aPath,
140 double aCurrTime,
141 double aNextTime,
142 double aMinTime,
143 UtCovariance& aCombinedCovariance);
144 static double RecomputeMinTime(const UtInterpolatingPolynomial<UtVec3d, 5>& aFunction,
145 double aLowRange,
146 double aHighRange);
147
160 template<typename Callable>
161 static double ContractTowardRoot(Callable aFunction, double aFixed, double aLimit)
162 {
163 if (aFunction(aFixed) >= 0.0)
164 {
165 return aLimit;
166 }
167 double delta = (aLimit - aFixed) / 2.0;
168 double xTest = aFixed + delta;
169 while (aFunction(xTest) > 0.0)
170 {
171 delta /= 2.0;
172 xTest = aFixed + delta;
173 }
174 return xTest + 2.0 * delta;
175 }
176
177 WsfOrbitalConjunctionRecord mRecord;
178 };
179
181 class Object
182 {
183 public:
184 Object(WsfLocalTrack& aTrack, double aSize, const UtOrbitalPropagatorBase* aPropPtr);
185
187 double EstimateTimeStep(double aTime, double aRadians);
188
190 double Periapsis() const;
191
193 double Apoapsis() const;
194
196 double Size() const;
197
199 UtCovariance Covariance(double aTime) const;
200
202 Kinematics Propagate(double aTime);
203
205 void SetConjunctionAssessment(const WsfOrbitalConjunctionAssessment* aConjPtr);
206
208 std::string GetName() const;
209
210 private:
211 double OrbitRadiusSquared(double aTime);
212 double Eccentricity() const;
213 double SemiMajorAxis() const;
214 double MeanMotion() const;
215 void UpdatePropagator(double aTime);
216
217 WsfLocalTrack& mTrack;
218 UtCalendar mSimStartTime;
219 double mSize;
220 std::unique_ptr<UtOrbitalPropagatorBase> mPropPtr;
221 const WsfOrbitalConjunctionAssessment* mConjPtr;
222 };
223
224 bool FastFilter();
225 void PredictNextState();
226 double FindMinimum();
227 double ComputeNextTime();
228
229 Object mPrimary;
230 Object mSecondary;
231
232 Options mOptions;
233
234 State mCurrent;
235 State mNext;
236
237 Status mStatus;
238 Encounter mEncounter;
239};
240
241#endif // WSFORBITALCONJUNCTIONASSESSMENT_HPP
Definition WsfLocalTrack.hpp:32
WsfOrbitalConjunctionAssessment(WsfLocalTrack &aPrimary, double aPrimarySize, WsfLocalTrack &aSecondary, double aSecondarySize, const Options &aOptions, const UtOrbitalPropagatorBase *aPropPtr)
Definition WsfOrbitalConjunctionAssessment.cpp:31
Status
This indicates if a conjunction has been found.
Definition WsfOrbitalConjunctionAssessment.hpp:55
@ cREACHED_FINAL_TIME
Definition WsfOrbitalConjunctionAssessment.hpp:58
@ cCONJUNCTION_FOUND
Definition WsfOrbitalConjunctionAssessment.hpp:57
@ cNO_CONJUNCTION
Definition WsfOrbitalConjunctionAssessment.hpp:56
WsfOrbitalConjunctionRecord CurrentConjunction() const
Returns the current conjunction.
Definition WsfOrbitalConjunctionAssessment.cpp:91
double DefaultVariance() const
Return the default variance set when this object was constructed.
Definition WsfOrbitalConjunctionAssessment.hpp:87
bool ReachedFinalTime() const
Returns if the assessment has reached the end of the evaluation interval.
Definition WsfOrbitalConjunctionAssessment.hpp:81
double DefaultObjectRadius() const
Return the default object radius set when this object was constructed.
Definition WsfOrbitalConjunctionAssessment.hpp:90
Status FindNext()
Definition WsfOrbitalConjunctionAssessment.cpp:58
Definition Options.hpp:21
Specifies the options to use when performing the analysis.
Definition WsfOrbitalConjunctionAssessment.hpp:42
double mCutRadius
Definition WsfOrbitalConjunctionAssessment.hpp:43
double mDefaultObjectRadius
The time over which to search for close approaches.
Definition WsfOrbitalConjunctionAssessment.hpp:49
double mStepRadians
The distance cut in the periapsis-apoapsis fast cut.
Definition WsfOrbitalConjunctionAssessment.hpp:44
double mInitialSearchTime
exclusion zone.
Definition WsfOrbitalConjunctionAssessment.hpp:47
double mExclusionFactor
The step size in degrees to take during prediction.
Definition WsfOrbitalConjunctionAssessment.hpp:45
double mDefaultVariance
The default object radius.
Definition WsfOrbitalConjunctionAssessment.hpp:50
double mFinalSearchTime
The initial search time.
Definition WsfOrbitalConjunctionAssessment.hpp:48
The data recorded when a possible conjunction is predicted.
Definition WsfOrbitalConjunctionAssessment.hpp:25
double mRelativeVelocity
The predicted miss distance between the two objects.
Definition WsfOrbitalConjunctionAssessment.hpp:33
double mMinTime
A string identifier for the secondary object.
Definition WsfOrbitalConjunctionAssessment.hpp:28
double mMissDistance
The worst-case probability estimate for a conjunction to occur.
Definition WsfOrbitalConjunctionAssessment.hpp:32
std::string mPrimary
Definition WsfOrbitalConjunctionAssessment.hpp:26
double mEndTime
The start time of the encounter.
Definition WsfOrbitalConjunctionAssessment.hpp:30
std::string mSecondary
A string identifier for the primary object.
Definition WsfOrbitalConjunctionAssessment.hpp:27
double mMaxProbability
The end time of the encounter.
Definition WsfOrbitalConjunctionAssessment.hpp:31
double mStartTime
The time of closest approach.
Definition WsfOrbitalConjunctionAssessment.hpp:29
Copyrights Multiple, All Rights Reserved