WSF
WsfOrbitalLaunchComputer.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 2016 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 WSFORBITALLAUNCHCOMPUTER_HPP
13#define WSFORBITALLAUNCHCOMPUTER_HPP
14
15#include "wsf_mil_export.h"
16
17#include <list>
18
19class UtCalendar;
20namespace ut
21{
22class CentralBody;
23}
24class UtInput;
25#include "UtLog.hpp"
26#include "WsfLaunchComputer.hpp"
27
29class WSF_MIL_EXPORT WsfOrbitalLaunchComputer : public WsfLaunchComputer
30{
31public:
33 static std::string BaseTypeName() { return "WSF_ORBITAL_LAUNCH_COMPUTER"; }
34
37 ~WsfOrbitalLaunchComputer() override = default;
39
41
42 WsfLaunchComputer* Clone() const override;
43 const char* GetScriptClassName() const override;
44 bool ProcessInput(UtInput& aInput) override;
45 bool Initialize(double aSimTime, WsfWeapon* aWeaponPtr) override;
47
49
50 double EstimatedTimeToIntercept(double aSimTime, const WsfTrack& aTrack, double aLaunchDelayTime) override;
52
54
55 bool ComputeLEO_Insertion(double aSimTime, double aAltitude, double aInclination);
57
60
61 double GetLaunchHeading() const { return mLastResult.mLaunchHeading; }
62 // GetLoftAngle is in the base class
63 double GetInclination() const { return mLastResult.mInclination; }
64 double GetInsertionTimeOfFlight() const { return mLastResult.mTimeOfFlight; }
66 {
67 return WsfGeoPoint(mLastResult.mLat, mLastResult.mLon, mLastResult.mAlt);
68 }
69 double GetInsertionSpeed() const { return mLastResult.mSpeedECI; }
70 double GetInsertionSpeedFixed() const { return mLastResult.mSpeedFixed; }
71 double GetInsertionHeading() const { return mLastResult.mHeading; }
72 double GetInsertionPitch() const { return mLastResult.mFlightPathAngle; }
73 double GetInsertionResidualDeltaV() const { return mLastResult.mResidualDeltaV; }
74 double GetInsertionFuelRemaining() const { return mLastResult.mFuelRemaining; }
75 double GetInsertionTimeRemaining() const { return mLastResult.mTimeRemaining; }
76 void GetOrbitalElements(double aResults[6]) const;
78
80 class WSF_MIL_EXPORT Orbit
81 {
82 public:
83 Orbit();
84
86
87 double mLaunchHeading; // radians
88 double mLoftAngle; // radians
90
92 double mInclination; // radians
94
96 double mTimeOfFlight; // seconds
97 double mLat; // decimal degrees
98 double mLon; // decimal degrees
99 double mAlt; // meters
100 double mSpeedECI; // meters/second
101 double mSpeedFixed; // meters/second
102 double mHeading; // radians
103 double mFlightPathAngle; // radians
104 double mResidualDeltaV; // meters/second
105 double mFuelRemaining; // kilograms
106 double mTimeRemaining; // seconds
108
109 void Print(ut::log::MessageStream& aOut) const;
110 };
111
112 using OrbitList = std::list<Orbit>;
113 using OrbitListIter = std::list<Orbit>::const_iterator;
114
115 static bool ReadOrbits(const std::string& aFileName, std::list<Orbit>& aOrbits);
116
117 static bool WriteOrbits(WsfArticulatedPart* aSystemPtr, const std::string& aFileName, const std::list<Orbit>& aOrbits);
118
119 static void ComputeOrbitalElements(const ut::CentralBody& aCentralBody,
120 double aResults[6],
121 const Orbit& aOrbit,
122 UtCalendar& aCalendar);
123
124 static void ComputeOrbitalElements(const ut::CentralBody& aCentralBody,
125 double aResults[6],
126 const double aLocECI[3],
127 const double aVelECI[3],
128 UtCalendar& aCalendar);
129
130protected:
131 // Because the base class tries to do too much...
132 bool InitializeTTIData() override { return true; }
133
139
140 void InterpolateOrbits(Orbit& aResult, const Orbit& aOrbit1, const Orbit& aOrbit2, Variable aFunction, double aValue) const;
141
142 bool InterpolateAlongLaunchHeading(Orbit& aResult, OrbitListIter aBestIter, double aAltitude) const;
143
144private:
145 std::string mLEO_DataFileName;
146 std::list<Orbit> mLEO_Data;
147
148 Orbit mLastResult;
149};
150
151#endif
Definition WsfArticulatedPart.hpp:36
Definition WsfGeoPoint.hpp:29
const char * GetScriptClassName() const override
Definition WsfLaunchComputer.cpp:525
WsfLaunchComputer()
Definition WsfLaunchComputer.cpp:44
virtual double EstimatedTimeToIntercept(double aSimTime, const WsfTrack &aTrack, double aLaunchDelayTime)
Definition WsfLaunchComputer.cpp:749
WsfLaunchComputer * Clone() const override
Definition WsfLaunchComputer.cpp:518
bool ProcessInput(UtInput &aInput) override
Definition WsfLaunchComputer.cpp:171
virtual bool Initialize(double aSimTime, WsfWeapon *aWeaponPtr)
Definition WsfLaunchComputer.cpp:393
Define the data for a particular orbit.
Definition WsfOrbitalLaunchComputer.hpp:81
double mTimeOfFlight
Definition WsfOrbitalLaunchComputer.hpp:96
double mLoftAngle
Definition WsfOrbitalLaunchComputer.hpp:88
double mHeading
Definition WsfOrbitalLaunchComputer.hpp:102
double mSpeedFixed
Definition WsfOrbitalLaunchComputer.hpp:101
double mAlt
Definition WsfOrbitalLaunchComputer.hpp:99
Orbit()
Definition WsfOrbitalLaunchComputer.cpp:579
double mFlightPathAngle
Definition WsfOrbitalLaunchComputer.hpp:103
double mResidualDeltaV
Definition WsfOrbitalLaunchComputer.hpp:104
double mLat
Definition WsfOrbitalLaunchComputer.hpp:97
double mInclination
Definition WsfOrbitalLaunchComputer.hpp:92
double mSpeedECI
Definition WsfOrbitalLaunchComputer.hpp:100
double mTimeRemaining
Definition WsfOrbitalLaunchComputer.hpp:106
double mLon
Definition WsfOrbitalLaunchComputer.hpp:98
void Print(ut::log::MessageStream &aOut) const
Definition WsfOrbitalLaunchComputer.cpp:598
double mLaunchHeading
Definition WsfOrbitalLaunchComputer.hpp:87
double mFuelRemaining
Definition WsfOrbitalLaunchComputer.hpp:105
A launch computer implementation for launch-to-orbit.
Definition WsfOrbitalLaunchComputer.hpp:30
static std::string BaseTypeName()
The basic type name (needed by weapon_tools and launch computer processor).
Definition WsfOrbitalLaunchComputer.hpp:33
WsfOrbitalLaunchComputer()
Definition WsfOrbitalLaunchComputer.cpp:38
static bool ReadOrbits(const std::string &aFileName, std::list< Orbit > &aOrbits)
Definition WsfOrbitalLaunchComputer.cpp:313
double GetInclination() const
Definition WsfOrbitalLaunchComputer.hpp:63
WsfOrbitalLaunchComputer(const WsfOrbitalLaunchComputer &aSrc)=default
static void ComputeOrbitalElements(const ut::CentralBody &aCentralBody, double aResults[6], const Orbit &aOrbit, UtCalendar &aCalendar)
Definition WsfOrbitalLaunchComputer.cpp:267
Variable
Definition WsfOrbitalLaunchComputer.hpp:135
@ cALTITUDE
Definition WsfOrbitalLaunchComputer.hpp:136
@ cINCLINATION
Definition WsfOrbitalLaunchComputer.hpp:137
double GetLaunchHeading() const
Definition WsfOrbitalLaunchComputer.hpp:61
double GetInsertionHeading() const
Definition WsfOrbitalLaunchComputer.hpp:71
static bool WriteOrbits(WsfArticulatedPart *aSystemPtr, const std::string &aFileName, const std::list< Orbit > &aOrbits)
Definition WsfOrbitalLaunchComputer.cpp:357
bool ComputeLEO_Insertion(double aSimTime, double aAltitude, double aInclination)
Definition WsfOrbitalLaunchComputer.cpp:103
double GetInsertionPitch() const
Definition WsfOrbitalLaunchComputer.hpp:72
WsfOrbitalLaunchComputer & operator=(const WsfOrbitalLaunchComputer &)=delete
double GetInsertionSpeed() const
Definition WsfOrbitalLaunchComputer.hpp:69
double GetInsertionTimeRemaining() const
Definition WsfOrbitalLaunchComputer.hpp:75
double GetInsertionFuelRemaining() const
Definition WsfOrbitalLaunchComputer.hpp:74
double GetInsertionResidualDeltaV() const
Definition WsfOrbitalLaunchComputer.hpp:73
std::list< Orbit > OrbitList
Definition WsfOrbitalLaunchComputer.hpp:112
double GetInsertionSpeedFixed() const
Definition WsfOrbitalLaunchComputer.hpp:70
std::list< Orbit >::const_iterator OrbitListIter
Definition WsfOrbitalLaunchComputer.hpp:113
~WsfOrbitalLaunchComputer() override=default
double GetInsertionTimeOfFlight() const
Definition WsfOrbitalLaunchComputer.hpp:64
bool InitializeTTIData() override
Definition WsfOrbitalLaunchComputer.hpp:132
WsfGeoPoint GetInsertionLocation() const
Definition WsfOrbitalLaunchComputer.hpp:65
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfWeapon.hpp:63
Definition WsfSensorErrorModel.hpp:21
Copyrights Multiple, All Rights Reserved