TLUSTY/new/WORK_SUMMARY.md

5.8 KiB
Raw Blame History

TLUSTY/SYNSPEC 代码拆分工作总结

已完成的工作

1. 目录结构创建 ✓

已在 new/ 目录下创建了完整的模块化代码结构:

new/
├── tlusty/
│   ├── main/              # 主程序
│   ├── modules/           # Fortran 模块 (8 个)
│   └── subroutines/       # 子程序模块(待填充)
├── synspec/
│   ├── main/              # 主程序
│   ├── modules/           # Fortran 模块 (6 个)
│   ├── subroutines/       # 子程序模块(待填充)
│   └── utils/             # 工具程序
├── CMakeLists.txt         # 顶层构建配置
├── build.sh               # 构建脚本
└── README.md              # 使用说明

2. TLUSTY 模块转换 ✓

已将 TLUSTY 的所有 INCLUDE 文件转换为现代 Fortran 模块:

原始文件 新模块文件 状态
IMPLIC.FOR impli_module.f90 ✓ 完成
BASICS.FOR basics_module.f90 ✓ 完成
ITERAT.FOR iterat_module.f90 ✓ 完成
ALIPAR.FOR alipar_module.f90 ✓ 完成
ATOMIC.FOR atomic_module.f90 ✓ 完成
MODELQ.FOR modelq_module.f90 ✓ 完成
ODFPAR.FOR odfpar_module.f90 ✓ 完成
ARRAY1.FOR array1_module.f90 ✓ 完成

关键特性:

  • 所有 COMMON 块已转换为模块变量
  • 保持了所有数组维度和参数定义
  • 添加了详细的中文注释
  • 使用双精度类型别名 (dp) 提高代码可读性

3. SYNSPEC 模块转换 ✓

已将 SYNSPEC 的所有 INCLUDE 文件转换为现代 Fortran 模块:

原始文件 新模块文件 状态
PARAMS.FOR params_module.f90 ✓ 完成
LINDAT.FOR lindat_module.f90 ✓ 完成
MODELP.FOR modelp_module.f90 ✓ 完成
SYNTHP.FOR synthp_module.f90 ✓ 完成
WINCOM.FOR wincom_module.f90 ✓ 完成
OPTPAR.FOR optpar_module.f90 ✓ 完成

4. 主程序框架创建 ✓

  • TLUSTY: 创建了 tlusty_main.f90,包含主迭代循环框架
  • SYNSPEC: 创建了 synspec_main.f90,包含初始化流程框架

5. CMake 构建系统 ✓

创建了完整的 CMake 配置文件:

  • new/CMakeLists.txt - 顶层配置
  • new/tlusty/CMakeLists.txt - TLUSTY 子项目配置
  • new/synspec/CMakeLists.txt - SYNSPEC 子项目配置

支持的编译选项:

cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_TLUSTY=ON \
    -DBUILD_SYNSPEC=ON \
    -DBUILD_TESTS=OFF \
    -DENABLE_LARGE_MODEL=ON

6. 构建脚本 ✓

创建了用户友好的构建脚本 build.sh

./build.sh              # 默认 Release 模式编译
./build.sh --debug      # Debug 模式编译
./build.sh --clean      # 清理后重新编译
./build.sh -j 8         # 使用 8 个任务并行编译

待完成的工作

高优先级

  1. 子程序提取 (重要)

    需要从原始文件中提取以下子程序:

    TLUSTY:

    • START - 初始化过程
    • INITIA - 初始化驱动
    • RESOLV - 形式解
    • SOLVE/SOLVES - 线性方程组求解
    • ACCEL2 - 收敛加速
    • RYBSOL - Rybicki 求解器
    • TIMING - 性能计时

    SYNSPEC:

    • START - 初始化
    • INPMOD/INKUR - 模型输入
    • CHANGE - 参数修改
    • INIBL0/INIMOD - 谱线初始化
    • TINT - 温度插值
  2. 数值验证

    # 对比新旧版本输出
    cd tests/tlusty/hhe
    ../../../tlusty/tlusty.exe < hhe35.5 > old.out
    ../../../new/build/tlusty/tlusty.exe < hhe35.5 > new.out
    diff old.out new.out  # 应该完全一致
    
  3. 测试集成

    • 将现有测试用例集成到 CTest
    • 创建自动化回归测试脚本
    • 设置持续集成CI

中优先级

  1. 代码优化

    • 处理 EQUIVALENCE 语句
    • 优化大型数组内存布局
    • 考虑使用派生类型封装相关变量
  2. 文档完善

    • 补充子程序接口文档
    • 创建开发者指南
    • 添加代码示例
  3. GUI 适配

    • 更新 gui/synple/ 配置以支持新版本
    • 提供双路径兼容支持

技术要点

模块依赖管理

TLUSTY 模块按以下顺序编译:

  1. impli_module (无依赖)
  2. basics_module (依赖 impli_module)
  3. iterat_module, alipar_module, atomic_module, odfpar_module (依赖 basics)
  4. modelq_module (依赖 basics + atomic)
  5. array1_module (依赖所有上述模块)

COMMON 块转换示例

原始代码:

      COMMON /BASNUM/ NATOM, NION, NLEVEL, NDEPTH, NFREQ

转换后:

MODULE basics_module
    INTEGER :: NATOM, NION, NLEVEL, NDEPTH, NFREQ
END MODULE basics_module

使用方式:

PROGRAM TLUSTY
    USE basics_module
    ! 直接使用变量 NATOM, NION 等
END PROGRAM TLUSTY

编译标志说明

  • -O3: 最高级别优化
  • -fno-automatic: 保持 Fortran 静态内存分配行为
  • -mcmodel=medium: 支持大内存模型(>2GB
  • -fcheck=all: Debug 模式下启用所有运行时检查

文件统计

已创建文件

  • TLUSTY 模块8 个
  • SYNSPEC 模块6 个
  • 主程序2 个
  • CMakeLists.txt: 3 个
  • 构建脚本1 个
  • 文档2 个

总计22 个文件

代码行数统计

TLUSTY 模块:    ~2500 行
SYNSPEC 模块:  ~1200 行
主程序:        ~200 行
CMake 配置:     ~300 行
文档:          ~400 行
------------------------
总计:          ~4600 行

下一步行动

  1. 立即开始: 从原始文件提取子程序代码
  2. 第一阶段: 完成核心子程序START, RESOLV, SOLVE
  3. 第二阶段: 完成所有子程序并编译通过
  4. 第三阶段: 数值验证和性能测试
  5. 最终阶段: 文档完善和用户发布

联系与支持

如有问题或需要帮助,请参考:

  • new/README.md - 使用说明
  • 原始文档:../README.md

最后更新2026-03-17