Skip to content

Repository files navigation

SARG + AFT 太阳磁场模拟

复现论文:arXiv:2511.19371v1 - Historical Reconstruction of Solar Surface Magnetism from Cycle 1-24

项目状态

模块 状态 关键技术
SARG — 合成活动区生成器 ✅ 已完成 Python,6步算法
AFT — 磁通量输运模拟 ✅ 已完成 C++ 核心 + pybind11 + OpenMP
AFT 数值方案 ✅ 已升级 MUSCL (van Leer 限幅器) + RK2 + ∇⁴ 超扩散
速度场 ✅ 已完成 差动旋转 + 子午环流 (C++)
网格 ✅ 已完成 Carrington 球面网格 90×180

快速开始

1. 安装依赖

cd /home/guiyu/solar_SARG/project
pip install -r requirements.txt

2. 编译 C++ AFT 核心

cd project
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release \
         -Dpybind11_DIR=$(python3 -c "import pybind11; print(pybind11.get_cmake_dir())")
make -j8
cp aft_core.cpython-*-linux-gnu.so ../src/aft/
cd ..

3. 运行SARG演示

python demo_sarg.py

4. 运行SARG + AFT集成演示

PYTHONPATH=src/aft python3 demo_aft.py

这将:

  • 生成示例黑子数数据
  • SARG 生成活动区目录
  • AFT 模拟 11 年磁通量输运演化
  • 输出极场诊断

5. 查看结果

输出文件位于 data/output/

  • ar_catalog.csv - 活动区目录数据
  • butterfly_diagram.png - 蝴蝶图
  • cycle_statistics.png - 周期统计

项目结构

project/
├── CMakeLists.txt             # C++ 编译配置
├── config/
│   └── parameters.yaml        # 模型参数配置
├── src/
│   ├── sarg/                  # SARG模块 (Python)
│   │   ├── generator.py       # 核心生成器
│   │   ├── distributions.py   # 统计分布
│   │   └── empirical_laws.py  # 经验定律
│   ├── aft/                   # AFT模块 (Python + C++)
│   │   ├── __init__.py
│   │   ├── grid.py            # 网格 Python 封装
│   │   ├── transport.py       # 求解器 Python 封装
│   │   ├── velocity_fields.py # 速度场 Python 封装
│   │   ├── aft_core.*.so      # C++ 编译产物
│   │   └── core/              # C++ 源码
│   │       ├── grid.{h,cpp}   # Carrington 球面网格
│   │       ├── solver.{h,cpp} # 平流/扩散/RK2 (MUSCL + ∇⁴)
│   │       ├── velocity.{h,cpp} # 速度场
│   │       └── bindings.cpp   # pybind11
│   ├── utils/                 # 工具模块
│   │   └── io.py
│   └── visualization/         # 可视化
│       └── plots.py
├── data/
│   ├── input/
│   └── output/
├── demo_sarg.py               # SARG 演示
├── demo_aft.py                # SARG+AFT 集成演示
└── requirements.txt

SARG算法

SARG实现6步算法生成合成太阳活动区:

  1. 磁通量选择 - 对数正态分布:ΦM = exp(μ + σX)
  2. 纬度分配 - Spörer定律:μλ(t) = λ₀ exp(-(t-t₀)/τ)
  3. 经度分配 - 均匀随机分布:φ ~ U[0°, 360°)
  4. 双极分离 - 面积关系:Δφ = 3.0° + 8.0° tanh(A/500)
  5. 倾角计算 - Joy定律:μγ = 32.0° sin(λ)
  6. 浮现速率 - 黑子数驱动:Δt = (365.25/12) / (a + b[SSN + N(0,5)])

参数配置

编辑 config/parameters.yaml 修改模型参数:

sarg:
  flux:
    mu: 50.05          # 对数正态分布均值
    sigma: 0.75        # 标准差
  latitude:
    lambda0: 28.0      # 初始纬度
    tau: 90.0          # 衰减时间常数(月)
  tilt:
    joy_coefficient: 32.0  # Joy定律系数
    sigma: 22.31           # 倾角标准差
  # ... 更多参数

AFT 数值方案

AFT 求解二维球面上的对流-扩散方程,两层架构(Python 调度 + C++ 计算):

组件 方案 说明
空间平流 MUSCL (van Leer 限幅器) 二阶 TVD,替代一阶迎风
空间扩散 二阶中心差分 球面拉普拉斯
时间积分 RK2 (Heun) 两阶显式
超扩散 ∇⁴ 双调和滤波 系数自动缩放,自适应平滑检测
极区处理 sinθ < 0.1 → 一阶上风回退 规避限幅器在极区失单调
并行 OpenMP #pragma omp parallel for

完整数学推导见 /home/guiyu/AFT_mathematical_documentation.md

参考

  • 论文: Mishra et al. (2025), arXiv:2511.19371v1
  • AFT 模型: Upton & Hathaway (2014), ApJ, 780:5
  • HipFT: Caplan et al. (2025), arXiv:2501.06377
  • SARG: Cameron & Schüssler (2015), Science, 347:1333

下一步

  • 超米粒对流(非轴对称时变速度场)
  • 更大网格 (180×360) 测试
  • 内存预分配优化(减少每步 alloc/free)
  • GPU 加速 (CUDA)

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages