24#include "AstMath/LowerMatrix.hpp"
25#include "AstUtil/StringView.hpp"
26#include "AstCore/TimePoint.hpp"
51 double getGM()
const {
return gm_; }
62 double refDistance_{0};
63 bool normalized_{
false};
64 bool includesPermTide_{
false};
76 double linearRate_{0};
77 double originalCoefficient_{0};
80 bool normalized_{
false};
94 using GravityFieldHead::referenceFrame;
96 using GravityFieldHead::maxDegree_;
97 using GravityFieldHead::maxOrder_;
98 using GravityFieldHead::centralBody_;
99 using GravityFieldHead::model_;
100 using GravityFieldHead::referenceFrame_;
101 using GravityFieldHead::gm_;
102 using GravityFieldHead::refDistance_;
103 using GravityFieldHead::normalized_;
104 using GravityFieldHead::includesPermTide_;
114 void setModelName(
StringView model) { model_ = std::string(model); }
132 bool isValidDegreeOrder(
int degree,
int order)
const;
136 double getGM()
const {
return gm_; }
158 void applyPermanentTideC20Correction(
double k20);
164 double getSnm(
int n,
int m)
const;
170 double getCnm(
int n,
int m)
const;
172 double getSnmNormalized(
int n,
int m)
const;
173 double getCnmNormalized(
int n,
int m)
const;
174 double getSnmUnnormalized(
int n,
int m)
const;
175 double getCnmUnnormalized(
int n,
int m)
const;
178 double getJn(
int n)
const;
194 errc_t load(StringView model,
int maxLoadDegree,
int maxLoadOrder, StringView dirpath=StringView{});
210 GravityField unnormalized()
const;
214 void updateVariations(
const TimePoint& epoch);
219 double& snm(
int n,
int m);
220 double& cnm(
int n,
int m);
222 void initCoeffMatrices();
229inline double &GravityField::snm(
int n,
int m)
231 return sinCoeff_(n,
m);
234inline double &GravityField::cnm(
int n,
int m)
236 return cosCoeff_(n, m);
239inline bool GravityField::isValidDegreeOrder(
int degree,
int order)
const
241 return degree <= this->getMaxDegree() && order <= this->getMaxOrder()
242 && degree >= order && order >= 0 && degree >= 0;
245inline double GravityField::getSnm(
int n,
int m)
const
247 if(A_LIKELY(isValidDegreeOrder(n,
m)))
248 return sinCoeff_(n,
m);
252inline double GravityField::getCnm(
int n,
int m)
const
254 if(A_LIKELY(isValidDegreeOrder(n,
m)))
255 return cosCoeff_(n,
m);
重力场头信息
定义 GravityField.hpp:46
std::string referenceFrame_
重力场的参考系名称:例如月球的重力场参考系 PrincipalAxes_421、PrincipalAxes_403等,默认为天体固连系
定义 GravityField.hpp:60
std::string model_
重力场模型名称
定义 GravityField.hpp:59
std::string centralBody_
中心天体名称
定义 GravityField.hpp:58
const std::string & referenceFrame() const
获取重力场的参考系名称
定义 GravityField.hpp:54
double getGM() const
获取重力场的中心天体引力常数
定义 GravityField.hpp:51
重力场长期变化
定义 GravityField.hpp:69
std::vector< Variation > variations_
长期变化系数列表
定义 GravityField.hpp:82
重力场系数
定义 GravityField.hpp:88
bool isIncludesPermTide() const
是否包含潮汐
定义 GravityField.hpp:148
SecularVariations secularVariations_
重力场长期变化
定义 GravityField.hpp:226
int getMaxOrder() const
获取最大次数
定义 GravityField.hpp:126
SecularVariations & secularVariations()
获取重力场长期变化
定义 GravityField.hpp:217
int getMaxDegree() const
获取最大阶数
定义 GravityField.hpp:123
const GravityFieldHead & getHead() const
获取重力场头信息
定义 GravityField.hpp:109
bool isNormalized() const
是否归一化
定义 GravityField.hpp:144
const std::string & getCentralBodyName() const
获取中心天体名称
定义 GravityField.hpp:118
LowerMatrixd cosCoeff_
Cnm系数
定义 GravityField.hpp:225
const std::string & getModelName() const
获取重力场模型名称
定义 GravityField.hpp:113
double getGM() const
获取中心天体引力常数
定义 GravityField.hpp:136
LowerMatrixd sinCoeff_
Snm系数
定义 GravityField.hpp:224
double getRefDistance() const
获取参考距离
定义 GravityField.hpp:140
绝对时间点
定义 TimePoint.hpp:107
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 aGravityFieldNormalize(GravityField &gf)
归一化重力场
定义 GravityField.cpp:31
void aGravityFieldUnnormalize(GravityField &gf)
反归一化重力场
定义 GravityField.cpp:36