WSF
WsfIntegratingPropagator.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 WSFINTEGRATINGPROPAGATOR_HPP
13#define WSFINTEGRATINGPROPAGATOR_HPP
14
15#include <algorithm>
16#include <limits>
17#include <memory>
18#include <vector>
19
20#include "UtCalendar.hpp"
21#include "UtCloneablePtr.hpp"
22class UtInput;
23#include "UtMath.hpp"
24#include "UtOrbitalState.hpp"
25#include "UtVec3.hpp"
30class WsfScenario;
31class WsfSimulation;
33
34#include "wsf_space_export.h"
35
37{
38public:
39 explicit WsfIntegratingPropagator(const WsfScenario& aScenario);
43
46
48
49 WsfIntegratingPropagator* Clone() const override;
50 bool Initialize(const UtCalendar& aInitialTime) override;
51 bool InitializeDynamics(const WsfSimulation* aSimulationPtr, const UtCalendar& aInitialTime);
52 bool ProcessInput(UtInput& aInput) override;
53 void SetSpaceMover(WsfSpaceMoverBase* aMoverPtr) override;
54
55 double GetDynamicalMass() const;
56
57 std::unique_ptr<WsfOrbitalDynamics> GetOrbitalDynamicsClone() const;
58 bool SetOrbitalDynamics(std::unique_ptr<WsfOrbitalDynamics> aDynamicsPtr);
59 std::unique_ptr<WsfOrbitalIntegrator> GetOrbitalIntegratorClone() const;
60 bool SetOrbitalIntegrator(std::unique_ptr<WsfOrbitalIntegrator> aIntegratorPtr);
61
63 {
64 public:
65 virtual ~MassProvider() = default;
66
67 virtual double GetMass() const = 0;
68 virtual std::unique_ptr<MassProvider> Decay() const = 0;
69 };
70
71protected:
72 void Propagate(const UtCalendar& aTime) override;
73 void UpdateOrbitalState() override;
74 bool HyperbolicPropagationAllowed() const override { return true; }
75
76private:
77 class AdvancingHandle
78 {
79 public:
80 explicit AdvancingHandle(WsfIntegratingPropagator& aProp)
81 : mProp(aProp)
82 {
83 aProp.mAdvancing = true;
84 }
85
86 ~AdvancingHandle() { mProp.mAdvancing = false; }
87
88 private:
90 };
91
92 bool IsAdvancing() const { return mAdvancing; }
93
94 const WsfScenario& mScenario;
95 ut::OrbitalState mPropagatedOrbitalState;
96 UtCloneablePtr<WsfOrbitalIntegrator> mIntegratorPtr{nullptr};
97 UtCloneablePtr<WsfOrbitalDynamics> mDynamicsPtr{nullptr};
98 std::unique_ptr<MassProvider> mMassProvider{nullptr};
99 bool mAccelerationValid{false};
100 bool mKinematicInput{false};
101 bool mAdvancing{false};
102};
103
104#endif // WSFINTEGRATINGPROPAGATOR_HPP
Definition WsfIntegratingPropagator.hpp:63
virtual double GetMass() const =0
virtual std::unique_ptr< MassProvider > Decay() const =0
Definition WsfIntegratingPropagator.hpp:37
WsfIntegratingPropagator * Clone() const override
Definition WsfIntegratingPropagator.cpp:233
WsfIntegratingPropagator & operator=(const WsfIntegratingPropagator &aOther)=delete
bool SetOrbitalDynamics(std::unique_ptr< WsfOrbitalDynamics > aDynamicsPtr)
Definition WsfIntegratingPropagator.cpp:429
double GetDynamicalMass() const
Definition WsfIntegratingPropagator.cpp:394
void Propagate(const UtCalendar &aTime) override
Definition WsfIntegratingPropagator.cpp:399
std::unique_ptr< WsfOrbitalDynamics > GetOrbitalDynamicsClone() const
Definition WsfIntegratingPropagator.cpp:419
bool Initialize(const UtCalendar &aInitialTime) override
Definition WsfIntegratingPropagator.cpp:238
WsfIntegratingPropagator & operator=(WsfIntegratingPropagator &&aOther)=delete
WsfIntegratingPropagator(const WsfScenario &aScenario)
Definition WsfIntegratingPropagator.cpp:191
bool SetOrbitalIntegrator(std::unique_ptr< WsfOrbitalIntegrator > aIntegratorPtr)
Definition WsfIntegratingPropagator.cpp:462
WsfIntegratingPropagator(WsfIntegratingPropagator &&aOther)=delete
bool InitializeDynamics(const WsfSimulation *aSimulationPtr, const UtCalendar &aInitialTime)
Definition WsfIntegratingPropagator.cpp:270
void UpdateOrbitalState() override
Definition WsfIntegratingPropagator.cpp:474
bool HyperbolicPropagationAllowed() const override
Definition WsfIntegratingPropagator.hpp:74
std::unique_ptr< WsfOrbitalIntegrator > GetOrbitalIntegratorClone() const
Definition WsfIntegratingPropagator.cpp:452
static WsfOrbitalPropagatorTypes::FactoryPtr ObjectFactory(WsfScenario &aScenario)
Definition WsfIntegratingPropagator.cpp:221
bool ProcessInput(UtInput &aInput) override
Definition WsfIntegratingPropagator.cpp:297
void SetSpaceMover(WsfSpaceMoverBase *aMoverPtr) override
Definition WsfIntegratingPropagator.cpp:359
~WsfIntegratingPropagator() override
Definition WsfIntegratingPropagator.cpp:219
WsfNonClassicalOrbitalPropagator(std::unique_ptr< ut::OrbitalState > aInitialOrbitalStatePtr)
Definition WsfNonClassicalOrbitalPropagator.cpp:19
std::function< std::unique_ptr< UtOrbitalPropagatorBase >(const std::string &)> FactoryPtr
Definition WsfOrbitalPropagatorTypes.hpp:35
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
Definition WsfSpaceMoverBase.hpp:70
Copyrights Multiple, All Rights Reserved