🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
GravityField.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstMath/LowerMatrix.hpp"
25#include "AstUtil/StringView.hpp"
26#include <string>
27
28AST_NAMESPACE_BEGIN
29
30class GravityField;
31class BKVParser;
32
35void aGravityFieldNormalize(GravityField& gf);
36
39void aGravityFieldUnnormalize(GravityField& gf);
40
43class AST_CORE_API GravityFieldHead
44{
45public:
46 errc_t load(StringView filepath, StringView dirpath=StringView());
47 double getGM() const { return gm_; }
48protected:
49 int maxDegree_{0};
50 int maxOrder_{0};
51 std::string centralBody_;
52 std::string model_;
53 double gm_{0};
54 double refDistance_{0};
55 bool normalized_{false};
56 bool includesPermTide_{false};
57};
58
59
62class AST_CORE_API GravityField: protected GravityFieldHead
63{
64public:
66 ~GravityField() = default;
67
68 using GravityFieldHead::maxDegree_;
69 using GravityFieldHead::maxOrder_;
70 using GravityFieldHead::centralBody_;
71 using GravityFieldHead::model_;
72 using GravityFieldHead::gm_;
73 using GravityFieldHead::refDistance_;
74 using GravityFieldHead::normalized_;
75 using GravityFieldHead::includesPermTide_;
76
77
80 const GravityFieldHead& getHead() const { return *this; }
81
84 const std::string& getModelName() const { return model_; }
85 void setModelName(StringView model) { model_ = std::string(model); }
86
89 const std::string& getCentralBodyName() const { return centralBody_; }
90
94 int getMaxDegree() const { return maxDegree_; }
97 int getMaxOrder() const { return maxOrder_; }
98
103 bool isValidDegreeOrder(int degree, int order) const;
104
107 double getGM() const { return gm_; }
108
111 double getRefDistance() const { return refDistance_; }
112
115 bool isNormalized() const { return normalized_; }
116
119 bool isIncludesPermTide() const { return includesPermTide_; }
120
125 double getSnm(int n, int m) const;
126
131 double getCnm(int n, int m) const;
132
133 double getSnmNormalized(int n, int m) const;
134 double getCnmNormalized(int n, int m) const;
135 double getSnmUnnormalized(int n, int m) const;
136 double getCnmUnnormalized(int n, int m) const;
137
139 double getJn(int n) const;
140
145 errc_t load(StringView model, StringView dirpath=StringView{});
146
153 errc_t load(StringView model, int maxLoadDegree, int maxLoadOrder, StringView dirpath=StringView{});
154
156 void normalize();
157
159 void unnormalize() ;
160
163 GravityField normalized() const;
164
167 GravityField unnormalized() const;
168
169public:
170 double& snm(int n, int m);
171 double& cnm(int n, int m);
173 void initCoeffMatrices();
174protected:
175
178};
179
180inline double &GravityField::snm(int n, int m)
181{
182 return sinCoeff_(n, m);
183}
184
185inline double &GravityField::cnm(int n, int m)
186{
187 return cosCoeff_(n, m);
188}
189
190inline bool GravityField::isValidDegreeOrder(int degree, int order) const
191{
192 return degree <= this->getMaxDegree() && order <= this->getMaxOrder()
193 && degree >= order && order >= 0 && degree >= 0;
194}
195
196inline double GravityField::getSnm(int n, int m) const
197{
198 if(A_LIKELY(isValidDegreeOrder(n, m)))
199 return sinCoeff_(n, m);
200 return 0;
201}
202
203inline double GravityField::getCnm(int n, int m) const
204{
205 if(A_LIKELY(isValidDegreeOrder(n, m)))
206 return cosCoeff_(n, m);
207 return 0;
208}
209
210
211AST_NAMESPACE_END
Unit m
定义 Unit.cpp:416
重力场头信息
定义 GravityField.hpp:44
std::string model_
重力场模型名称
定义 GravityField.hpp:52
std::string centralBody_
中心天体名称
定义 GravityField.hpp:51
重力场系数
定义 GravityField.hpp:63
bool isIncludesPermTide() const
是否包含潮汐
定义 GravityField.hpp:119
int getMaxOrder() const
获取最大次数
定义 GravityField.hpp:97
int getMaxDegree() const
获取最大阶数
定义 GravityField.hpp:94
const GravityFieldHead & getHead() const
获取重力场头信息
定义 GravityField.hpp:80
bool isNormalized() const
是否归一化
定义 GravityField.hpp:115
const std::string & getCentralBodyName() const
获取中心天体名称
定义 GravityField.hpp:89
LowerMatrixd cosCoeff_
Cnm系数
定义 GravityField.hpp:177
const std::string & getModelName() const
获取重力场模型名称
定义 GravityField.hpp:84
double getGM() const
获取中心天体重力常数
定义 GravityField.hpp:107
LowerMatrixd sinCoeff_
Snm系数
定义 GravityField.hpp:176
double getRefDistance() const
获取参考距离
定义 GravityField.hpp:111
auto normalized(const Vector &vec) -> typename std::enable_if<!std::is_pointer< Vector >::value, Vector >::type
normalized
定义 MathOperator.hpp:352
double normalize(double *vec, size_t N)
normalize
定义 MathOperator.hpp:306
void aGravityFieldUnnormalize(GravityField &gf)
反归一化重力场
定义 GravityField.cpp:34
void aGravityFieldNormalize(GravityField &gf)
归一化重力场
定义 GravityField.cpp:29