# 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 子项目配置 **支持的编译选项:** ```bash cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TLUSTY=ON \ -DBUILD_SYNSPEC=ON \ -DBUILD_TESTS=OFF \ -DENABLE_LARGE_MODEL=ON ``` ### 6. 构建脚本 ✓ 创建了用户友好的构建脚本 `build.sh`: ```bash ./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. **数值验证** ```bash # 对比新旧版本输出 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) ### 中优先级 4. **代码优化** - 处理 EQUIVALENCE 语句 - 优化大型数组内存布局 - 考虑使用派生类型封装相关变量 5. **文档完善** - 补充子程序接口文档 - 创建开发者指南 - 添加代码示例 6. **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 块转换示例 **原始代码:** ```fortran COMMON /BASNUM/ NATOM, NION, NLEVEL, NDEPTH, NFREQ ``` **转换后:** ```fortran MODULE basics_module INTEGER :: NATOM, NION, NLEVEL, NDEPTH, NFREQ END MODULE basics_module ``` **使用方式:** ```fortran 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*