WSF
WsfMoonMonopoleTerm.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 WSFMOONMONOPOLETERM_HPP
13#define WSFMOONMONOPOLETERM_HPP
14
15#include <memory>
16
18
19class UtInput;
20#include "UtCloneablePtr.hpp"
21#include "UtMoon.hpp"
22#include "UtSpline.hpp"
23#include "UtVec3.hpp"
24#include "WsfDE_FileHandle.hpp"
25
27{
28public:
30 WsfMoonMonopoleTerm(const WsfMoonMonopoleTerm& aOther) = default;
31 ~WsfMoonMonopoleTerm() override = default;
32
33 WsfMoonMonopoleTerm* Clone() const override { return new WsfMoonMonopoleTerm{*this}; }
34
35 const char* GetScriptClassName() const override { return "WsfMoonMonopoleTerm"; }
36
37 bool ProcessInput(UtInput& aInput) override;
38
39 UtVec3d ComputeAcceleration(double aMass,
40 const UtCalendar& aTime,
41 const UtVec3d& aPosition,
42 const UtVec3d& aVelocity) const override;
43
44 std::string GetTermType() const override { return cTYPE; }
45
46 bool Initialize(const WsfOrbitalDynamics& aDynamics) override;
47
48 double GetGravitationalParameter() const { return mGravitationalParameter; }
49 void SetGravitationalParameter(double aMu) { mGravitationalParameter = aMu; }
50
51 double GetInterpolationInterval() const { return mMoonPosition.GetInterval(); }
52 void SetInterpolationInterval(double aInterval) { mMoonPosition.SetInterval(aInterval); }
53
54 constexpr static const char* cTYPE{"moon_monopole"};
55
56 UtVec3d GetMoonPositionECI(const UtCalendar& aTime) const;
57
58private:
59 enum DataSource
60 {
61 cDEFAULT,
62 cDE_FILE
63 };
64
65 class MoonPositionHelper
66 {
67 public:
68 MoonPositionHelper();
69
70 double GetInterval() const { return mInterval; }
71 void SetInterval(double aInterval) { mInterval = aInterval; }
72
73 const UtCalendar& GetBaseTime() const { return mBaseTime; }
74 void SetBaseTime(const UtCalendar& aBaseTime) { mBaseTime = aBaseTime; }
75
76 UtVec3d GetPosition(const UtCalendar& aTime) const;
77
78 private:
79 void ComputeSpline() const;
80 double RedoSpline(const UtCalendar& aTime) const;
81
82 double mInterval{600.0};
83 mutable UtCalendar mBaseTime{};
84 mutable UtVec3d mF0{};
85 mutable UtVec3d mF1{};
86 mutable UtVec3d mF2{};
87 mutable UtVec3d mF3{};
88 mutable UtInterpolatingPolynomial<UtVec3d, 3> mSpline{{0.0, 0.0, 0.0, 0.0}, 0.0};
89 };
90
91 double mGravitationalParameter{UtMoon::cGRAVITATIONAL_PARAMETER};
92 DataSource mDataSource{cDEFAULT};
93 MoonPositionHelper mMoonPosition{};
94 std::string mDataFileName{};
95 ut::CloneablePtr<WsfDE_FileHandle> mDataFile{nullptr};
96};
97
98#endif // WSFMOONMONOPOLETERM_HPP
bool ProcessInput(UtInput &aInput) override
Definition WsfMoonMonopoleTerm.cpp:22
const char * GetScriptClassName() const override
Definition WsfMoonMonopoleTerm.hpp:35
void SetInterpolationInterval(double aInterval)
Definition WsfMoonMonopoleTerm.hpp:52
double GetInterpolationInterval() const
Definition WsfMoonMonopoleTerm.hpp:51
WsfMoonMonopoleTerm * Clone() const override
Definition WsfMoonMonopoleTerm.hpp:33
static constexpr const char * cTYPE
Definition WsfMoonMonopoleTerm.hpp:54
WsfMoonMonopoleTerm()=default
bool Initialize(const WsfOrbitalDynamics &aDynamics) override
Definition WsfMoonMonopoleTerm.cpp:108
~WsfMoonMonopoleTerm() override=default
WsfMoonMonopoleTerm(const WsfMoonMonopoleTerm &aOther)=default
double GetGravitationalParameter() const
Definition WsfMoonMonopoleTerm.hpp:48
UtVec3d GetMoonPositionECI(const UtCalendar &aTime) const
Definition WsfMoonMonopoleTerm.cpp:117
void SetGravitationalParameter(double aMu)
Definition WsfMoonMonopoleTerm.hpp:49
std::string GetTermType() const override
Return a string indicating the type of term.
Definition WsfMoonMonopoleTerm.hpp:44
UtVec3d ComputeAcceleration(double aMass, const UtCalendar &aTime, const UtVec3d &aPosition, const UtVec3d &aVelocity) const override
Definition WsfMoonMonopoleTerm.cpp:65
WsfOrbitalDynamicsTerm()
Definition WsfOrbitalDynamicsTerm.hpp:34
Definition WsfOrbitalDynamics.hpp:32
Copyrights Multiple, All Rights Reserved