235 lines
5.8 KiB
Markdown
235 lines
5.8 KiB
Markdown
# 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*
|