TLUSTY/README.md
2026-07-21 22:13:53 +08:00

546 lines
21 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.

# Tlusty208 和 Synspec54 安装与使用指南
## 1. 简介
Tlusty 和 Synspec 是用于计算恒星大气模型和合成光谱的软件包。本指南涵盖安装、配置、编译、测试及 Python 工具 **Synple** 的使用。
## 2. 下载与安装
### 2.1 下载文件
#### 主文件:
```bash
wget https://www.as.arizona.edu/~hubeny/tlusty208-package/tl208-s54.tar.gz
```
#### 可选文件(根据需求选择):
1. **线列表**(原子、分子谱线数据):
```bash
wget https://www.as.arizona.edu/~hubeny/tlusty208-package/linelist.tar.gz
```
2. **铁数据**(用于金属线空白模型):
```bash
wget https://www.as.arizona.edu/~hubeny/tlusty208-package/irondata.tar.gz
```
3. **消光表**(预计算的消光数据):
```bash
wget https://www.as.arizona.edu/~hubeny/tlusty208-package/optables.tar.gz
```
### 2.2 解压文件
```bash
tar xvfz tl208-s54.tar.gz
tar xvfz linelist.tar.gz # 若需要线列表
tar xvfz irondata.tar.gz # 若需要铁数据
tar xvfz optables.tar.gz # 若需要消光表
```
### 2.3 目录结构
解压后生成的目录结构如下:
```
tl208-s54/
├── tlusty/ # Tlusty 源代码
├── synspec/ # Synspec 源代码
├── data/ # 原子数据、分子数据等
├── tests/ # 测试案例
│ ├── tlusty/ # Tlusty 测试
│ └── synspec/ # Synspec 测试
└── gui/ # 图形界面程序
```
## 3. 环境变量配置
### 3.1 设置主目录变量
```bash
# tcsh
setenv TL208 ~/tlusty208-package
setenv LINELIST $T208/linelist
setenv IRON $TL208/irondata
setenv OPTABLES $TL208/optables
# bash
export TL208=~/tlusty208-package
export LINELIST=$TL208/linelist
export IRON=$TL208/irondata
export OPTABLES=$TL208/optables
```
### 3.2 编译线列表转换工具
```bash
cd $LINELIST/linelist
gfortran -o list2bin.exe list2bin.f
./Bin # 生成二进制线列表文件gfATO.bin 等)
```
### 3.3 链接额外数据
进入 `data` 目录并运行链接线表:
```bash
cd $TL208/tl208-s54/data
./Linklist # 链接线列表(需设置 LINELIST 环境变量)
./Linkiron # 链接铁数据(需设置 IRON 环境变量)
./Linkopta # 链接消光表(需设置 OPTABLES 环境变量)
```
## 4. 编译程序
### 4.1 编译 Tlusty
```bash
cd $TL208/tl208-s54/tlusty
gfortran -fno-automatic -O3 -o tlusty.exe tlusty208.f
# 若内存不足,添加参数:
gfortran -fno-automatic -mcmodel=large -O3 -o tlusty.exe tlusty208.f
```
### 4.2 编译 Synspec
```bash
cd $TL208/tl208-s54/synspec
gfortran -fno-automatic -O3 -o synspec.exe synspec54.f
# 若内存不足,添加参数:
gfortran -fno-automatic -mcmodel=large -o synspec.exe synspec54.f
```
## 5. 测试案例
### 5.1 Tlusty 测试案例
首先计算一个 LTE 模型,然后仅使用连续谱的 NLTE 模型NLTC最后是包含谱线的 NLTE 模型NLTL
```bash
# 运行所有测试案例
cd $TL208/tests/tlusty
./Runtest
#或进入子目录运行单个测试案例
cd $TL208/tests/tlusty/hhe
./R1
```
#### 测试子目录说明:
- **hhe**H-He 非局部热动平衡NLTE模型
- **bstar**B 型星金属线空白模型
- **cwd**DA 白矮星模型
- **disk**:吸积盘垂直结构模型
- **optab**:使用消光表的测试
---
### 5.2 Synspec 测试案例
```bash
cd $TL208/tests/synspec
./Runtest # 运行原子光谱测试
cd optab
./R1 # 生成消光表 optab11_7f.dat
```
#### 测试子目录说明:
- **hhe**H-He 模型的合成光谱
- **bstar**B 型星模型的合成光谱
- **kurucz**Kurucz 模型的合成光谱
- **optab**:消光表生成与验证
## 6. 文件说明
### 6.1 Tlusty
#### 6.1.1 输入文件
- fort.1:基本控制文件,仅包含一个数字,指定是否计算恒星大气或吸积盘模型。如果这个数字是 0或者文件完全缺失则计算恒星大气模型。否则计算盘的垂直结构。
- file.5:主要控制数据。这是一个简短的文件,只包含最重要的参数和其他文件的文件名。
- fort.8:如果计算不是从零开始(使用 LTE-灰模型),则是一个起始大气模型
以下是关于 `.5 文件` 的输入说明的 Markdown 格式整理:
---
##### `.5` 文件说明
`.5` 文件是 Tlusty 和 Synspec 程序的标准输入文件,用于定义模型参数和计算设置。以下是其内容的详细说明:
---
###### 1. 第一行输入(核心参数)
####### 恒星大气模式:
```plaintext
TEFF GRAV
```
- **TEFF**有效温度单位K
- **GRAV**表面重力加速度的对数单位cm/s²`log g`
####### 吸积盘模式:
```plaintext
XMSTAR XMDOT RSTAR RELDST
```
######## XMSTAR中心天体质量
- **XMSTAR > 0**:经典恒星模型。
- 质量单位g或太阳质量M☉
- **XMSTAR < 0**黑洞模型广义相对论修正)。
- 黑洞质量为 `abs(XMSTAR)`单位同上
- `RSTAR` 表示黑洞自旋几何单位0 为史瓦西黑洞0.998 为极大自旋 Kerr 黑洞)。
- **XMSTAR = 0**:独立盘模型,不依赖中心天体:
- 后续三个参数为 `TEFF`, `QGRAV`, `DMTOT`见下文)。
######## 其他参数(当 XMSTAR > 0 时):
- **XMDOT**吸积率单位g/s M☉/)。
- **RSTAR**
- **经典恒星**恒星半径单位厘米或 R☉)。
- **黑洞**黑洞自旋参数几何单位)。
- **RELDST**
- 盘环相对于参考半径的相对距离
- 经典模型`R/R*`R*为恒星半径)。
- 黑洞模型`R/Rg`Rg为引力半径`Rg = GM/c²`)。
######## 当 XMSTAR = 0 时:
```plaintext
TEFF QGRAV DMTOT
```
- **TEFF**有效温度单位K)。
- **QGRAV**重力加速度比例系数 `Q`满足 `g = Q/z`
- **DMTOT**盘面柱密度单位g)。
---
###### 2. 第二行输入(模型类型)
```plaintext
LTE LTGRAY
```
- **LTE**逻辑值表示是否计算局部热力学平衡LTE模型
- `.TRUE.`计算 LTE 模型
- `.FALSE.`计算非局部热力学平衡NLTE模型
- **LTGRAY**逻辑值表示是否计算 LTE 灰辐射初始模型
- `.TRUE.`计算 LTE 灰辐射模型作为初始近似
- `.FALSE.`不计算需提供初始模型文件`fort.8`)。
---
###### 3. 第三行输入(关键词参数文件)
```plaintext
FINSTD
```
- **FINSTD**字符串指定包含关键词参数的文件名
- `FINSTD = ''`空字符串使用默认参数
- 否则读取指定文件中的自定义参数 `FINSTD = 'my_params.param'`)。
---
###### 4. 第四行输入(频率点设置)
```plaintext
NFREAD
```
- **NFREAD**控制频率点的设置方式
- **NFREAD > 0**:程序自动设置连续区频率点,具体行为由关键词参数(如 `FRCMAX`, `FRCMIN`, `NFTAIL`)控制。
- **NFREAD < 0**对数等间距设置频率点范围为 `FRCMIN` `FRCMAX`总点数为 `abs(NFREAD)`
###### 4.2 第二块:化学物种选择及基本数据
######## **NATOMS**
- **含义**最高原子序数的元素显式或非显式处理)。
- **取值范围**
- **NATOMS < 0**绝对值表示最高原子序数且所有元素的分区函数均通过 Opacity Project 离子分数表计算忽略 MODPF 参数)。
- **NATOMS = 0**:无显式原子,仅适用于使用完整预计算不透明度和状态方程表(`IOPTAB = -2`的情况
- **NATOMS > 0**:正常模式,指定最高原子序数。
######## **每个元素的参数(共 NATOMS 条记录)**
每条记录包含 **MODE, ABN, MODPF**按原子序数顺序排列H、He、Li、Be 等)。
######### **MODE**
- **含义**:元素的处理模式。
- `0`:忽略该元素。
- `1`:隐式处理(不参与不透明度计算,但参与总粒子数和电荷平衡的 LTE 计算)。
- `2`:显式处理(显式考虑选定能级和离子化阶段的非局部热平衡)。
######### **ABN**
- **含义**:元素的丰度设置。
- `0`使用太阳丰度Grevesse & Sauval 1998
- `ABN < 0`:非太阳丰度,绝对值表示太阳丰度的倍数(例如 `-0.1` 表示 1/10 太阳丰度,`-5` 表示 5 倍太阳丰度)。
- `ABN > 0`:非太阳丰度,以相对参考物种(默认为氢)的比值表示(`N(elem)/N(ref)`)。
- `ABN > 10^6`:深度依赖丰度,后续需提供 `ND` 行数据,每行对应一个深度点的丰度值(相对于氢)。
######### **MODPF**
- **含义**:分区函数的计算模式。
- `0`:标准计算(参考 Paper II §2.7)。
- `MODPF > 0`:通过 Opacity Project 离子分数表计算。
- `MODPF < 0`:用户自定义公式(需在子程序 `PFSPEC` 中实现,见 §14.4)。
###### 4.3 第三块:显式离子
每个离子的输入记录包含以下参数:
1. **IATII**:元素的原子序数(如 1 表示氢2 表示氦)。
2. **IZII**电离态0 表示中性1 表示一次电离,依此类推)。
3. **NLEVS**:显式考虑的能级数。
4. **ILAST**:指示是否为最高电离态:
- `0`:非最高电离态,需后续输入更高电离态。
- `ILAST > 0`:最高电离态。
- `ILAST = 1`:自动分配基态统计权重。
- `ILAST ≠ 1`:手动指定基态统计权重。
- `ILAST < 0`:结束显式离子输入块。
5. **ILVLIN**:控制跃迁处理:
- `ILVLIN = 2`:所有基态跃迁计入详细辐射平衡,其余忽略。
- `ILVLIN > NLEVS`:所有跃迁计入详细辐射平衡。
6. **NONSTD**:非标准参数或超线文件:
- `0`:无额外参数。
- `NONSTD > 0`:需额外输入非标准参数(已过时)。
- `NONSTD < 0`:需输入超线文件名(见下文)。
7. **TYPION**:离子标识(如 `'He 2'` 表示 He+)。
8. **FILEI**:原子数据文件名(如 `'data/h1.dat'`)。
### 特殊参数(当 `NONSTD < 0` 时)
需额外输入以下参数:
- **INODF1, INODF2**Opacity Distribution Function (ODF) 文件的单位号(设为 0 以禁用旧功能)。
- **FIODF1, FIODF2**ODF 文件名(仅在旧模式下使用)。
- **FIBFCS**:超线光电离截面文件名(需设置 `IFANCY` 为 50-99 启用)。
#### 6.1.2 输出文件
- file.6:标准输出
- file.7:紧缩模型
- file.9:收敛日志
- file.14:辐射通量 $F_\lamda$
- file.69:时间日志
### 6.2 Synspec
#### 6.2.1输入文件
- fort.1:基本控制文件,仅包含一个数字,指定是处理恒星大气模型还是吸积盘模型。如果这个数字是 0或者文件完全缺失则认为是恒星大气模型否则认为是盘模型的一个环。
- file.5:主控制数据,与用于 tlusty 生成合成光谱所计算模型大气的数据完全相同。
- file.8:输入大气模型 - 通常为之前计算的 tlusty 模型;更具体地说,来自 tlusty 的file.7输出,但也可以是 Kurucz 模型。
- fort.19:原子线列表,基于 Kurucz 线列表。
- fort.55:用于计算合成光谱的附加输入参数。
- fort.56:指定相对于输入模型大气的化学丰度变化的可选文件。对于 LTE 模型或对于在合成光谱运行中考虑的化学丰度与构建输入模型大气时使用的化学丰度相同的 NLTE 模型,不需要此文件。
- fort.57:超能级的能量带。只有当输入模型大气是 NLTE 金属线屏蔽模型,并且用超能级和超线来处理铁峰元素的能级结构时,才需要此文件。
---
##### `fort.55` 文件参数说明
`fort.55``synspec` 程序的输入控制文件,用于定义合成光谱的计算模式、参数和选项。以下是其参数的详细说明:
---
###### 1. 文件结构
参数按以下顺序读取(自由格式,空格分隔):
```plaintext
imode idstd iprin
inmod intrpl ichang ichemc
iophli nunalp nunbet nungam nunbal
ifreq inlte icontl inlist ifhe2
ihydpr ihe1pr ihe2pr
alam0 alast cutof0 cutofs relop space
nmlist, (iunitm(i),i=1,nmlist)
vtb
nmu0 ang0 iflux
```
###### 2. 参数详解
####### **基础模式参数**
| 参数名 | 含义 | 取值说明 |
| ----------- | ----------------------------------------------------- | ------------------------------------------------------------ |
| **`imode`** | 运行模式选择: | - `0`:正常合成光谱<br>- `1`:仅计算少数谱线(已废弃)<br>- `2`仅计算连续谱含H和He II谱线<br>- `10`:含分子谱线的合成光谱<br>- `-1`:铁幕模式(仅计算特定深度的不透明度) |
| **`idstd`** | “标准深度”索引(近似满足 `T ≈ (2/3) T_eff` 的深度点) | 通常设为 `(2/3) × N_D``N_D` 为模型深度点总数)。仅影响谱线选择参数 `relop`。 |
| **`iprin`** | 输出信息级别(已废弃) | `>0` 增加输出信息,但很少使用。 |
---
####### **输入模型参数**
| 参数名 | 含义 | 取值说明 |
| ------------ | ------------------------ | ------------------------------------------------------------ |
| **`inmod`** | 输入模型类型: | - `0`Kurucz 模型<br>- `1`Tlusty 模型<br>- `2`:吸积盘模型 |
| **`intrpl`** | 模型插值选项(很少使用) | 默认设为 `0`。 |
| **`ichang`** | 模型修改选项(很少使用) | 默认设为 `0`。 |
| **`ichemc`** | 元素丰度修改标志: | `≠0` 时需提供 `fort.56` 文件定义丰度变化。 |
---
####### **谱线与不透明度参数**
| 参数名 | 含义 | 取值说明 |
| ------------ | ----------------------- | ---------------------------------- |
| **`iophli`** | Lα 线远翼处理(已废弃) | 建议设为 `0`。 |
| **`nunalp`** | 是否考虑 Lα 卫星线: | `≠0` 时需提供 `laquasi.dat` 文件。 |
| **`nunbet`** | 是否考虑 Lβ 卫星线: | `≠0` 时需提供 `lbquasi.dat` 文件。 |
| **`nungam`** | 是否考虑 Lγ 卫星线: | `≠0` 时需提供 `lgquasi.dat` 文件。 |
| **`nunbal`** | 是否考虑 Hα 卫星线: | `≠0` 时需提供 `lhquasi.dat` 文件。 |
---
####### **求解器与不透明度控制**
| 参数名 | 含义 | 取值说明 |
| ------------ | ------------------------ | ------------------------------------------------------------ |
| **`ifreq`** | 辐射转移方程求解器选择: | - `<10`DFE 方案<br>- `≥10`Feautrier 方案<br>- 默认 `1`DFE。 |
| **`inlte`** | NLTE 处理标志: | - `0`:强制 LTE 计算<br>- `>0`:指定电离边缘能级的 NLTE 处理模式(值 `1``2`)。 |
| **`icontl`** | 连续谱处理选项(已废弃) | 默认设为 `0`。 |
| **`inlist`** | 行列表处理选项(已废弃) | 默认设为 `0`。 |
| **`ifhe2`** | He II 处理方式: | `≠0` 时将 He II 视为氢类离子。 |
---
####### **谱线轮廓参数**
| 参数名 | 含义 | 取值说明 |
| ------------ | ------------------------ | --------------------------------- |
| **`ihydpr`** | 氢谱线轮廓特殊处理: | `≠0` 时需提供 `hydprf.dat` 文件。 |
| **`ihe1pr`** | He I 谱线轮廓特殊处理: | `≠0` 时需提供 `he1prf.dat` 文件。 |
| **`ihe2pr`** | He II 谱线轮廓特殊处理: | `≠0` 时需提供 `he2prf.dat` 文件。 |
---
####### **波长范围与分辨率**
| 参数名 | 含义 | 取值说明 |
| ------------ | ---------------------- | ------------------------------------------------------------ |
| **`alam0`** | 起始波长(Å) | 例如 `1000.0`。 |
| **`alast`** | 终止波长(Å) | - 若 `alast < 0`:所有波长按真空波长处理<br>- 默认 `>2000 Å` 时按空气波长处理。 |
| **`cutof0`** | 线不透明度截断参数: | 仅保留中心不透明度超过 `cutof0` 的谱线(除 H 和 He II。 |
| **`cutofs`** | 保留参数(无实际作用) | 默认设为 `0`。 |
| **`relop`** | 线截断阈值: | 若谱线中心不透明度与标准深度的连续谱不透明度比值 `< relop`,则忽略该线。 |
| **`space`** | 波长间隔控制参数: | 最大波长间隔为 `space × (alam0 + alast)/(2λ)`,其中 `λ` 为波长中点。 |
---
####### **分子线列表与湍流速度**
| 参数名 | 含义 | 取值说明 |
| --------------- | -------------------------------------------- | ------------------------------------------------- |
| **`nmlist`** | 额外分子线列表数量 | 若 `nmlist=0`,则无需后续参数。 |
| **`iunitm(i)`** | 额外分子线列表的文件单元号(共 `nmlist` 个) | 例如 `20`、`21` 对应 `gfMOL.dat``gfTiO.dat`。 |
---
####### **强度输出参数**
| 参数名 | 含义 | 取值说明 |
| ----------- | ---------------------------- | ------------------------------------------------------------ |
| **`vtb`** | 湍流速度km/s | 若未指定,则使用 Tlusty 输入中的值。 |
| **`nmu0`** | 角分布点数: | - `nmu0=0`:仅计算总通量<br>- `>0`:计算 `I_ν(μ)``μ` 在 `ang0``1` 间等间距分布。 |
| **`ang0`** | 最小角度余弦值(`μ = cosθ` | 例如 `0.0` 对应垂直方向。 |
| **`iflux`** | 强度计算标志: | `1`:启用 `I_ν(μ)` 计算。 |
---
###### 3. 示例输入
```plaintext
0 10 0
1 0 0 0
0 0 0 0 0
1 0 0 0 0
0 0 0
1000.0 2000.0 1.0e-5 0.0 1.0e-3 0.5
0
0.0
0 0.0 0
```
---
###### 4. 注意事项
1. **省略参数**:若无需最后三行(`vtb`, `nmu0`, `ang0`, `iflux`),则设 `nmlist=0``vtb` 采用 Tlusty 输入值。
2. **过时参数**`icontl`, `inlist`, `iophli` 建议设为默认值。
3. **文件依赖**:若启用卫星线或特殊轮廓,需提供对应数据文件(如 `laquasi.dat`, `hydprf.dat` 等)。
4. **波长单位**`alam0` 和 `alast` 默认按空气波长处理(`λ > 2000 Å`)。
---
#### 6.2.2输出文件
- file.6:标准输出文件。它包含计算日志,仅在出现问题时才重要。
- fort.7:存储最终合成光谱的通量数据。**λ**:波长和 **H_λ**埃丁顿通量Eddington flux
- fort.17:存储无谱线的纯连续谱通量数据。**λ**:波长和**H_cont**:连续谱通量(排除所有谱线贡献)
- fort.12:谱线标识表,列出所有被选中的谱线及其参数,便于谱线识别。
- fort.16:部分等效宽度列表,记录各谱线或谱区的等效宽度Equivalent Width, EW
###### 文件用途总结
| 文件名 | 描述 | 典型用途 |
| --------- | ---------------------------- | -------------------- |
| `fort.6` | 计算日志文件 | 调试和错误诊断 |
| `fort.7` | 合成光谱(包含谱线和连续谱) | 光谱分析、可视化 |
| `fort.17` | 纯连续谱通量 | 分离谱线和连续谱贡献 |
| `fort.12` | 谱线标识表 | 谱线识别和属性查询 |
| `fort.16` | 谱线等效宽度列表 | 定量评估谱线强度 |
## 7. Synple Python 包
Synple 是 Tlusty/Synspec 的 Python 封装工具,支持批量计算和分布式任务。
### 7.1 安装
```bash
git clone https://github.com/callendeprieto/synple.git
cd synple
pip install .
```
### 7.2 使用示例
```python
from synple import Synspec
# 创建 Synspec 对象
syn = Synspec(model="path/to/model.atm", linelist="gfATO.bin")
# 计算光谱
spectrum = syn.compute_spectrum(wavelength_range=[5000, 6000])
```
---
## 8. 常见问题
### 8.1 内存不足
- **问题**:编译时出现内存错误。
- **解决**
```bash
gfortran -fno-automatic -mcmodel=large -O3 -o tlusty.exe tlusty208.f
```
### 8.2 环境变量未设置
- **问题**:运行时提示文件找不到。
- **解决**:确保 `TL208`、`LINELIST` 等变量已正确设置。
### 8.3 线列表未转换
- **问题**Synspec 运行时无输出。
- **解决**:确保已运行 `./Bin` 生成二进制线列表。
---
## 9. 参考资料
- **文档原文**[2104.02829v1.pdf](https://arxiv.org/pdf/2104.02829v1.pdf)
- **代码仓库**[Synple Python 包](https://github.com/callendeprieto/synple)
```
此文档包含完整的安装、编译、测试和使用说明,涵盖 Tlusty、Synspec 以及 Python 工具 Synple 的使用。如需进一步调整或补充细节,请告知具体需求。
```