WSF
WsfOrbitalDynamics.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 2020 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 WSFORBITALDYNAMICS_HPP
13#define WSFORBITALDYNAMICS_HPP
14
15#include <vector>
16
17class UtCalendar;
18#include "UtCloneablePtr.hpp"
19#include "UtECI_Conversion.hpp"
20#include "UtEarth.hpp"
21class UtInput;
22#include "UtLLAPos.hpp"
23#include "UtVec3.hpp"
24
26#include "WsfObject.hpp"
28class WsfScenario;
29class WsfSimulation;
30
32{
33public:
34 explicit WsfOrbitalDynamics(const WsfScenario& aScenario);
36 ~WsfOrbitalDynamics() override = default;
37
39
40 WsfOrbitalDynamics* Clone() const override;
41 bool ProcessInput(UtInput& aInput) override;
42
43 const char* GetScriptClassName() const override { return "WsfOrbitalDynamics"; }
44
45 UtVec3d ComputeAcceleration(double aMass, const UtCalendar& aTime, const UtVec3d& aPosition, const UtVec3d& aVelocity) const;
46
47 bool Initialize(const WsfSimulation* aSimulationPtr,
48 const WsfIntegratingPropagator& aPropagator,
49 const UtCalendar& aInitialTime);
50
51 const WsfIntegratingPropagator* GetPropagator() const { return mPropagatorPtr; }
52
53 UtVec3d GetWCS_PositionFromECI(const UtVec3d& aPositionECI) const;
54 UtVec3d GetECI_AccelerationFromWCS(const UtVec3d& aAccelerationWCS) const;
55 UtVec3d GetWCS_VelocityFromECI(const UtVec3d& aPositionECI, const UtVec3d& aVelocityECI) const;
56 UtLLAPos GetLLA_FromWCS(const UtVec3d& aPositionWCS) const;
57 void UpdateConverterTime(const UtCalendar& aTime) const;
58
59 size_t GetNumTerms() const { return mTerms.size(); }
60
61 void AddTerm(std::unique_ptr<WsfOrbitalDynamicsTerm> aTermPtr);
62 const WsfOrbitalDynamicsTerm* GetTerm(size_t aIndex) const;
63
64 template<class T>
65 std::vector<T*> GetTerms() const
66 {
67 std::vector<T*> terms;
68 for (const auto& term : mTerms)
69 {
70 T* termT = dynamic_cast<T*>(term.get());
71 if (termT)
72 {
73 terms.push_back(termT);
74 }
75 }
76 return terms;
77 }
78
79 bool RemoveTerm(size_t aIndex);
80
81 void GetTimeConstants(UtCalendar& aTime) const;
82
83 const WsfScenario& GetScenario() const { return mScenario; }
84 const WsfSimulation* GetSimulation() const { return mSimulationPtr; }
85
86protected:
87 mutable UtECI_Conversion mConverter{UtCalendar(), ut::EarthEGM96()};
88 mutable UtCalendar mInitialEpoch{};
89 mutable bool mEpochSet{false};
90
91private:
92 const WsfScenario& mScenario;
93 const WsfSimulation* mSimulationPtr{nullptr};
94 std::vector<UtCloneablePtr<WsfOrbitalDynamicsTerm>> mTerms{};
95 const WsfIntegratingPropagator* mPropagatorPtr{nullptr};
96
97 // These are set during Initialize so that terms needing accurate timing
98 // can have a UtCalendar's time constants updated if it matters.
99 double mDeltaUT1{0.0};
100 int mDeltaAT{32};
101};
102
103#endif // WSFORBITALDYNAMICS_HPP
Definition WsfIntegratingPropagator.hpp:37
WsfObject()
This is the constructor for the WsfObject class.
Definition WsfObject.cpp:88
Definition WsfOrbitalDynamicsTerm.hpp:32
bool Initialize(const WsfSimulation *aSimulationPtr, const WsfIntegratingPropagator &aPropagator, const UtCalendar &aInitialTime)
Definition WsfOrbitalDynamics.cpp:96
~WsfOrbitalDynamics() override=default
UtLLAPos GetLLA_FromWCS(const UtVec3d &aPositionWCS) const
Definition WsfOrbitalDynamics.cpp:127
const WsfIntegratingPropagator * GetPropagator() const
Definition WsfOrbitalDynamics.hpp:51
UtECI_Conversion mConverter
Definition WsfOrbitalDynamics.hpp:87
const WsfSimulation * GetSimulation() const
Definition WsfOrbitalDynamics.hpp:84
bool mEpochSet
Definition WsfOrbitalDynamics.hpp:89
std::vector< T * > GetTerms() const
Definition WsfOrbitalDynamics.hpp:65
WsfOrbitalDynamics(const WsfScenario &aScenario)
Definition WsfOrbitalDynamics.cpp:24
UtVec3d GetWCS_PositionFromECI(const UtVec3d &aPositionECI) const
Definition WsfOrbitalDynamics.cpp:112
UtVec3d GetECI_AccelerationFromWCS(const UtVec3d &aAccelerationWCS) const
Definition WsfOrbitalDynamics.cpp:117
size_t GetNumTerms() const
Definition WsfOrbitalDynamics.hpp:59
const WsfScenario & GetScenario() const
Definition WsfOrbitalDynamics.hpp:83
void AddTerm(std::unique_ptr< WsfOrbitalDynamicsTerm > aTermPtr)
Add a term to this set of dynamics.
Definition WsfOrbitalDynamics.cpp:151
WsfOrbitalDynamics & operator=(const WsfOrbitalDynamics &aOther)=delete
bool ProcessInput(UtInput &aInput) override
Definition WsfOrbitalDynamics.cpp:42
void GetTimeConstants(UtCalendar &aTime) const
Definition WsfOrbitalDynamics.cpp:184
WsfOrbitalDynamics * Clone() const override
Definition WsfOrbitalDynamics.cpp:37
const WsfOrbitalDynamicsTerm * GetTerm(size_t aIndex) const
Definition WsfOrbitalDynamics.cpp:160
UtVec3d ComputeAcceleration(double aMass, const UtCalendar &aTime, const UtVec3d &aPosition, const UtVec3d &aVelocity) const
Definition WsfOrbitalDynamics.cpp:83
bool RemoveTerm(size_t aIndex)
Definition WsfOrbitalDynamics.cpp:174
const char * GetScriptClassName() const override
Definition WsfOrbitalDynamics.hpp:43
void UpdateConverterTime(const UtCalendar &aTime) const
Definition WsfOrbitalDynamics.cpp:136
UtVec3d GetWCS_VelocityFromECI(const UtVec3d &aPositionECI, const UtVec3d &aVelocityECI) const
Definition WsfOrbitalDynamics.cpp:122
UtCalendar mInitialEpoch
Definition WsfOrbitalDynamics.hpp:88
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Copyrights Multiple, All Rights Reserved