🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
IrbemAPI.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/StringView.hpp"
25#include <mutex>
26#include <array>
27#include <string>
28#include <vector>
29
30AST_NAMESPACE_BEGIN
31
42class AST_WEATHER_API IrbemAPI
43{
44public:
45 enum FuncIndex {
46 kIrbemFortranVersion, kGetIrbemNtimeMax,
47 kMakeLstar, kGetField,
48 kFlyInAfrlCrres, kGetCrresFlux, kNumFunctions
49 };
50 using FuncArray = std::array<void*, kNumFunctions>;
51
53 static IrbemAPI* Instance();
54
55 IrbemAPI() = default;
56
58 explicit IrbemAPI(bool shouldLoad);
59
60 ~IrbemAPI();
61
65 errc_t load(StringView libPath);
66
70 errc_t tryload(const std::vector<std::string>& libPaths);
71
73 errc_t unload();
74
76 bool isLoaded() const { return library_ != nullptr; }
77
78public:
79 // ---- 纯常量查询,不加锁 ----
80
84 errc_t irbem_fortran_version1(int* version);
85
90 errc_t get_irbem_ntime_max1(int* ntime_max);
91
92 // ---- 涉及 COMMON 块共享状态,内部加锁 ----
93
118 errc_t make_lstar1(int ntime, int kext, const std::array<int, 5>& options, int sysaxes,
119 const int* iyear, const int* idoy, const double* UT,
120 const double* x1, const double* x2, const double* x3,
121 const double* maginput,
122 double* Lm, double* Lstar, double* Blocal,
123 double* Bmin, double* J, double* MLT);
124
138 errc_t get_field1(int kext, const std::array<int, 5>& options, int sysaxes,
139 int iyear, int idoy, double UT,
140 double x1, double x2, double x3,
141 const double* maginput,
142 double Bgeo[3], double& B);
143
175 errc_t fly_in_afrl_crres1(int ntime, int sysaxes,
176 int whichm, int whatf, int nene,
177 const double* energy,
178 const int* iyear, const int* idoy, const double* UT,
179 const double* x1, const double* x2, const double* x3,
180 const double* Ap15, double* flux,
181 StringView ascii_path);
182
204 errc_t get_crres_flux(int ntime, int whichm, int whatf,
205 int nene, const double* energy,
206 const double* BBo, const double* L, const double* Ap15,
207 double* flux, StringView ascii_path);
208
209protected:
210 A_DISABLE_COPY(IrbemAPI);
211
212 void* library_{nullptr};
213 FuncArray functions_{};
214 std::mutex mutex_{};
215};
216
219AST_NAMESPACE_END
IRBEM API 包装类
定义 IrbemAPI.hpp:43
bool isLoaded() const
检查库是否已加载
定义 IrbemAPI.hpp:76