5.8 KiB
5.8 KiB
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 个任务并行编译
待完成的工作
高优先级
-
子程序提取 (重要)
需要从原始文件中提取以下子程序:
TLUSTY:
- START - 初始化过程
- INITIA - 初始化驱动
- RESOLV - 形式解
- SOLVE/SOLVES - 线性方程组求解
- ACCEL2 - 收敛加速
- RYBSOL - Rybicki 求解器
- TIMING - 性能计时
SYNSPEC:
- START - 初始化
- INPMOD/INKUR - 模型输入
- CHANGE - 参数修改
- INIBL0/INIMOD - 谱线初始化
- TINT - 温度插值
-
数值验证
# 对比新旧版本输出 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 # 应该完全一致 -
测试集成
- 将现有测试用例集成到 CTest
- 创建自动化回归测试脚本
- 设置持续集成(CI)
中优先级
-
代码优化
- 处理 EQUIVALENCE 语句
- 优化大型数组内存布局
- 考虑使用派生类型封装相关变量
-
文档完善
- 补充子程序接口文档
- 创建开发者指南
- 添加代码示例
-
GUI 适配
- 更新
gui/synple/配置以支持新版本 - 提供双路径兼容支持
- 更新
技术要点
模块依赖管理
TLUSTY 模块按以下顺序编译:
- impli_module (无依赖)
- basics_module (依赖 impli_module)
- iterat_module, alipar_module, atomic_module, odfpar_module (依赖 basics)
- modelq_module (依赖 basics + atomic)
- 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 行
下一步行动
- 立即开始: 从原始文件提取子程序代码
- 第一阶段: 完成核心子程序(START, RESOLV, SOLVE)
- 第二阶段: 完成所有子程序并编译通过
- 第三阶段: 数值验证和性能测试
- 最终阶段: 文档完善和用户发布
联系与支持
如有问题或需要帮助,请参考:
new/README.md- 使用说明- 原始文档:
../README.md
最后更新:2026-03-17