WSF
WsfJacchiaRobertsAtmosphere.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 WSFJACCHIAROBERTSATMOSPHERE_HPP
13#define WSFJACCHIAROBERTSATMOSPHERE_HPP
14
15#include "wsf_space_export.h"
16
17#include "UtCalendar.hpp"
18#include "UtVec3.hpp"
19#include "WsfAtmosphere.hpp"
20
21namespace wsf
22{
23namespace space
24{
25
29class WSF_SPACE_EXPORT JacchiaRobertsAtmosphere : public Atmosphere
30{
31public:
34 ~JacchiaRobertsAtmosphere() override = default;
35
36 JacchiaRobertsAtmosphere* Clone() const override { return new JacchiaRobertsAtmosphere{*this}; }
37 bool ProcessInput(UtInput& aInput) override;
38
40 double GetAverageSolarFlux() const { return mF107a; }
41
43 double GetSolarFlux() const { return mF107; }
44
46 double GetGeomagneticIndex() const { return mKp; }
47
49 void SetAverageSolarFlux(double aF107a) { mF107a = aF107a; }
50
52 void SetSolarFlux(double aF107) { mF107 = aF107; }
53
55 void SetGeomagneticIndex(double aKp) { mKp = aKp; }
56
57 const char* GetScriptClassName() const override { return "WsfJacchiaRobertsAtmosphere"; }
58
59 double GetDensity(const UtCalendar& aEpoch, const UtLLAPos& aLLA) const override;
60
61 static constexpr const char* cTYPE{"WSF_JACCHIA_ROBERTS_ATMOSPHERE"};
62
63private:
64 double mF107a{150.0};
65 double mF107{150.0};
66 double mKp{0.0};
67
68 // Various intermediate quantities used during density evaluation.
69 mutable double mRoot1{};
70 mutable double mRoot2{};
71 mutable double mX_Root{};
72 mutable double mY_Root{};
73 mutable double mTinfinity{};
74 mutable double mTx{};
75 mutable double mSum{};
76 mutable double mX_Temp{};
77 mutable bool mLowAltWarned{false};
78
79 double GetPolarRadiusKm() const;
80 double GetPolarRadiusKmSquared() const;
81 double JacchiaRoberts(const UtLLAPos& aLLA, const UtCalendar& aEpoch) const;
82 double Exotherm(const UtLLAPos& aLLA, double aSunDec, double aSolarLon) const;
83 double Rho100(double aHeightKm, double aTemperature) const;
84 double Rho125(double aHeightKm, double aTemperature) const;
85 double RhoCorrection(double aHeightKm, double aA1_Time, double aGeoLat) const;
86 double RhoHigh(double aHeightKm, double aTemperature, double aT_500, double aSunDec, double aGeoLat) const;
87 static void Roots(double aA[], int aNa, double aCroots[][2], int aIrl);
88 static void DeflatePolynomial(double aC[], int aN, double aRoot, double aCnew[]);
89};
90
91} // namespace space
92} // namespace wsf
93
94#endif // WSFJACCHIAROBERTSATMOSPHERE_HPP
Atmosphere()
Definition WsfAtmosphere.cpp:25
void SetGeomagneticIndex(double aKp)
Set the geomagnetic index, K_p.
Definition WsfJacchiaRobertsAtmosphere.hpp:55
void SetAverageSolarFlux(double aF107a)
Set the average 10.7 cm solar flux (in 10^-22 W/m^2/Hz).
Definition WsfJacchiaRobertsAtmosphere.hpp:49
~JacchiaRobertsAtmosphere() override=default
JacchiaRobertsAtmosphere * Clone() const override
Definition WsfJacchiaRobertsAtmosphere.hpp:36
double GetSolarFlux() const
Get the 10.7 cm solar flux (in 10^-22 W/m^2/Hz).
Definition WsfJacchiaRobertsAtmosphere.hpp:43
void SetSolarFlux(double aF107)
Set the 10.7 cm solar flux (in 10^-22 W/m^w/Hz).
Definition WsfJacchiaRobertsAtmosphere.hpp:52
JacchiaRobertsAtmosphere(const JacchiaRobertsAtmosphere &aOther)=default
JacchiaRobertsAtmosphere()
Definition WsfJacchiaRobertsAtmosphere.cpp:102
double GetAverageSolarFlux() const
Get the average 10.7 cm solar flux (in 10^-22 W/m^2/Hz).
Definition WsfJacchiaRobertsAtmosphere.hpp:40
static constexpr const char * cTYPE
Definition WsfJacchiaRobertsAtmosphere.hpp:61
double GetGeomagneticIndex() const
Get the geomagnetic index, K_p.
Definition WsfJacchiaRobertsAtmosphere.hpp:46
const char * GetScriptClassName() const override
Definition WsfJacchiaRobertsAtmosphere.hpp:57
Definition WsfAtmosphere.cpp:23
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved