WSF
WsfNonClassicalOrbitalPropagator.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 2018 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 WSFNONCLASSICALORBITALPROPAGATOR_HPP
13#define WSFNONCLASSICALORBITALPROPAGATOR_HPP
14
15#include "wsf_space_export.h"
16
17#include "UtGoldenSectionSearch.hpp"
18#include "UtMatrix.hpp"
19#include "UtOrbitalState.hpp"
21
23{
24public:
25 explicit WsfNonClassicalOrbitalPropagator(std::unique_ptr<ut::OrbitalState> aInitialOrbitalStatePtr);
28
30
31 std::unique_ptr<UtOrbitalPropagatorBase> GetManeuveringPropagator() const override;
32
33 UtLambertProblem::Result SolveLambertProblem(const ut::CentralBody& aCentralBody,
34 const UtVec3d& aLocationECI_1,
35 const UtVec3d& aLocationECI_2,
36 double aDt,
37 bool aShortWay,
38 bool aAllowHitsEarth,
39 double aConvergenceTolerance = 1.0e-12) const override;
40
41private:
42 class StateVector
43 {
44 public:
45 explicit StateVector(const UtVec3d& aPosition);
46 explicit StateVector(const UtMatrixd& aMatrix);
47
48 StateVector operator-(const StateVector& aOther) const;
49 StateVector operator*(double aScalar) const;
50
51 const UtMatrixd& Vector() const { return mVec; }
52
53 double Component(int aIndex) const;
54
55 static const int cDIMENSION = 3;
56
57 private:
58 UtMatrixd mVec;
59 };
60
61 class SearchVector
62 {
63 public:
64 explicit SearchVector(const UtVec3d& aVelocity);
65 explicit SearchVector(const UtMatrixd& aMatrix);
66 explicit SearchVector(double aFillValue);
67
68 SearchVector& operator+=(const SearchVector& aOther);
69 SearchVector& operator-=(const SearchVector& aOther);
70 SearchVector operator+(const SearchVector& aOther) const;
71 SearchVector operator*(double aScalar) const;
72
73 UtVec3d Velocity() const;
74
75 double Component(int aIndex) const;
76
77 static SearchVector UnitVector(int aIndex, double aValue = 1.0);
78
79 static const int cDIMENSION = 3;
80
81 private:
82 UtMatrixd mVec;
83 };
84
85 class Jacobian
86 {
87 public:
88 Jacobian();
89
90 void SetColumn(int aIndex, const StateVector& aColumn);
91 SearchVector InverseProduct(const StateVector& aState) const;
92
93 static const int cDIMENSION = 3;
94
95 private:
96 UtMatrixd mMat;
97 };
98};
99
100#endif
UtLambertProblem::Result SolveLambertProblem(const ut::CentralBody &aCentralBody, const UtVec3d &aLocationECI_1, const UtVec3d &aLocationECI_2, double aDt, bool aShortWay, bool aAllowHitsEarth, double aConvergenceTolerance=1.0e-12) const override
Definition WsfNonClassicalOrbitalPropagator.cpp:32
~WsfNonClassicalOrbitalPropagator() override=default
WsfNonClassicalOrbitalPropagator(std::unique_ptr< ut::OrbitalState > aInitialOrbitalStatePtr)
Definition WsfNonClassicalOrbitalPropagator.cpp:19
WsfNonClassicalOrbitalPropagator & operator=(const WsfNonClassicalOrbitalPropagator &aOther)=delete
std::unique_ptr< UtOrbitalPropagatorBase > GetManeuveringPropagator() const override
Definition WsfNonClassicalOrbitalPropagator.cpp:24
WsfNonClassicalOrbitalPropagator(const WsfNonClassicalOrbitalPropagator &aOther)=default
A class that provides a complete interface for implementing orbital propagation in derived classes.
Definition WsfOrbitalPropagator.hpp:27
Copyrights Multiple, All Rights Reserved