TLUSTY/new/WORK_SUMMARY.md

235 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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*