🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
磁场模型

详细描述

包括IGRF、AE8、AP8等相关模型等。

class  ast::IrbemAPI
 

函数

void ast::igrf (double lon, double lat, double height, double year, double &xl, double &bbx)
 
void ast::igrf_field (double lon, double lat, double height, double year, double &bnorth, double &beast, double &bdown, double &babs)
 
void ast::aIGRFField (double lon, double lat, double height, double year, double &bx, double &by, double &bz, double &babs)
 
int ast::igrf13syn (int isv, double date, int itype, double alt, double colat, double elong, double &x, double &y, double &z, double &f)
 
double ast::aep8 (double e, double l, double bb0, int iname)
 
double ast::get_flux (double lon, double lat, double height, double energy, double year, int iname)
 

函数说明

◆ aep8()

AST_WEATHER_CAPI double ast::aep8 ( double e,
double l,
double bb0,
int iname )

计算特定 L 值和磁场强度下的粒子通量

参见
参考实现:https://github.com/nasa/radbelt/blob/main/radbelt/core.f#AEP8
参数
e需要计算通量的能量值 [MeV(兆电子伏特)]
l(McIlwain L 参数),表示磁壳参数。程序内部会将其限制在 ≤15.6
bb0B/B₀,即当地磁场强度与磁赤道磁场强度的比值。若输入小于 1,程序强制设为 1
iname粒子种类与太阳活动水平:
  • 1: e-min(电子,太阳活动极小年)
  • 2: e-max(电子,太阳活动极大年)
  • 3: p-min(质子,太阳活动极小年)
  • 4: p-max(质子,太阳活动极大年)
返回
粒子通量 [cm^-2 s^-1]

◆ get_flux()

AST_WEATHER_CAPI double ast::get_flux ( double lon,
double lat,
double height,
double energy,
double year,
int iname )

计算特定位置和时间处辐射带捕获粒子的通量(参见 aep8.hpp 中的详细文档)

计算特定位置和时间处辐射带捕获粒子的通量

参见
参考实现:https://github.com/nasa/radbelt/blob/main/radbelt/__init__.pyget_flux

内部流程:

  1. 调用 igrf() 将地理坐标转换为磁壳参数 L 和磁场比值 B/B₀
  2. 调用 aep8() 根据 L、B/B₀ 和粒子能量计算积分通量

"辐射带捕获粒子"指的是被地球磁场捕获并束缚在范艾伦辐射带(Van Allen Belts)中的高能带电粒子(主要是电子和质子) 请参见:范艾伦辐射带(Van Allen Belts)

该函数先通过 IGRF 地磁场模型将地理坐标(经度、纬度、高度、年份)转换为 McIlwain L 参数(磁壳参数)和 B/B₀(当地磁场强度与磁赤道磁场强度之比), 再调用 AEP8 辐射带模型计算粒子积分通量。

参数
lon地理经度 [度(°)]
lat地理纬度 [度(°)]
height相对于地球表面的高度 [千米(km)]
energy能量阈值,计算通量时只统计能量 ≥ 该值的粒子 [MeV(兆电子伏特)]
year小数年份(如 2021.1616),用于考虑地球磁场的长期漂移
iname粒子种类与太阳活动水平:
  • 1: e-min(电子,太阳活动极小年)
  • 2: e-max(电子,太阳活动极大年)
  • 3: p-min(质子,太阳活动极小年)
  • 4: p-max(质子,太阳活动极大年)
返回
粒子积分通量 [cm⁻²·s⁻¹]
使用示例:
// 计算南大西洋异常区(45°W, 30°S, 500 km高度)处
// 能量 ≥20 MeV 的质子在太阳活动极大年时的通量
double flux = get_flux(
-45.0, // 经度: 45°W
-30.0, // 纬度: 30°S
500.0, // 高度: 500 km
20.0, // 能量: 20 MeV
2021.1616438356164, // 时间: 2021-03-01
4 // p-max
);
// flux ≈ 2642.5 cm⁻²·s⁻¹
double get_flux(double lon, double lat, double height, double energy, double year, int iname)
计算特定位置和时间处辐射带捕获粒子的通量(参见 aep8.hpp 中的详细文档)
定义 aep8.cpp:237
参见
aep8(), igrf()

◆ igrf()

AST_WEATHER_CAPI void ast::igrf ( double lon,
double lat,
double height,
double year,
double & xl,
double & bbx )

利用 IGRF 地磁场模型计算磁壳参数 L 和磁场比值 B/B₀

通过对底层 Fortran 例程的顺序调用,将地理坐标转换为辐射带建模所需的磁坐标参数。

内部流程:

  1. INITIZE — 从数据文件加载 IGRF 高斯系数
  2. FELDCOF — 根据小数年份插值计算该时刻的地磁场系数和偶极矩 DIMO
  3. FELDG — 计算指定位置的地磁场分量(北向、东向、垂直、总强度 BABS)
  4. SHELLG — 沿磁力线追踪,计算 McIlwain L 参数。返回状态码 ICODE:
    • 1: 正常完成
    • 2: 共轭点不在物理范围内(此时 L 值无意义)
    • 3: 磁壳参数超出精确计算上限,使用近似值
  5. BEQU = DIMO / L³ — 用偶极子近似估计赤道磁场强度
  6. FINDB0 — (仅当 ICODE=1 即正常完成时)迭代求解更精确的赤道磁场 B₀, 以修正偶极子近似的误差。若迭代不收敛,保留偶极子近似值
  7. BBX = BABS / BEQU — 计算当地磁场强度与赤道磁场强度的比值
参见
参考实现:

IGRF(International Geomagnetic Reference Field,国际地磁参考场)是 国际地磁学与高空物理学协会(IAGA)发布的标准地磁场模型。

本函数将地理坐标转换为辐射带建模所需的磁坐标参数, 是连接地理空间与辐射带模型(AE8/AP8)的桥梁。

参数
[in]lon地理经度 [度(°)]
[in]lat地理纬度 [度(°)]
[in]height相对于地球表面的高度 [千米(km)]
[in]year小数年份(如 2021.1616),用于计算地磁场的长期变化(主磁场漂移)
[out]xlMcIlwain L 参数(磁壳参数),无量纲。 表示磁力线在赤道面与地心的距离(以地球半径 R_E 为单位)。 内辐射带典型值 ~1.2–3,外辐射带 ~3–10。
[out]bbxB/B₀,即当地磁场总强度与同 L 值磁赤道处磁场强度的比值。 该值 ≥ 1,是辐射带粒子弹跳运动的控制参数。
注解
函数内部会通过 WorkingDirectory 临时切换当前目录到 IGRF 数据目录, 因为底层 Fortran 例程通过相对路径读取数据文件。
使用示例:
double xl, bbx;
// 计算南大西洋异常区(45°W, 30°S, 500 km, 2021-03-01)的磁坐标
igrf(-45.0, -30.0, 500.0, 2021.1616438356164, xl, bbx);
// xl ≈ 1.4138(L 值,位于内辐射带边缘)
// bbx ≈ 1.7853(磁镜比,粒子在此处接近弹跳镜像点)
void igrf(double lon, double lat, double height, double year, double &xl, double &bbx)
利用 IGRF 地磁场模型计算磁壳参数 L 和磁场比值 B/B₀
定义 igrf.cpp:72
参见
aep8(), get_flux()

◆ igrf13syn()

AST_WEATHER_CAPI int ast::igrf13syn ( int isv,
double date,
int itype,
double alt,
double colat,
double elong,
double & x,
double & y,
double & z,
double & f )

根据IGRF13模型计算磁场分量


igrf13.f文件内igrf13syn函数的C版本,保持函数接口与参数含义一致。

参见
https://www.ncei.noaa.gov/products/international-geomagnetic-reference-field
https://www.ngdc.noaa.gov/IAGA/vmod/igrf13.f
https://ccmc.gsfc.nasa.gov/models/IGRF~13/
https://github.com/space-physics/igrf
参数
[in]isv=0: 计算主磁场值(单位:nT); =1: 计算长期变化率(年变率,单位:nT/年)
[in]date年份,公元纪年,如 2020.0。有效范围:1900.0 至 2030.0; 若 date > 2025.0 会给出警告,表示精度可能降低(因预测模型仅到2025年)
[in]itype=1:大地坐标(海拔高度); =2:地心坐标(地心距离)
[in]alt当 itype=1 时:海拔高度,单位为 km(相对于海平面); 当 itype=2 时:到地心的距离,单位为 km(必须 > 3485 km,即地球内核半径之外)
[in]colat余纬度,单位为度,范围 0° 到 180°; 定义为从北极起算的角度:colat = 90° - 纬度(北纬为正,南纬为负)
[in]elong东经,单位为度,范围 0° 到 360°
[out]x若 isv=0:主磁场北分量,单位 nT; 若 isv=1:北分量的年变率,单位 nT/年
[out]y东向分量(单位同上)
[out]z垂直分量(向下为正,单位同上)
[out]f总强度(仅当 isv=0 时有意义,单位 nT);若 isv=1 则返回无意义的值
返回