| .. | ||
| ALIPAR.FOR | ||
| ARRAY1.FOR | ||
| ATOMIC.FOR | ||
| BASICS.FOR | ||
| IMPLIC.FOR | ||
| ITERAT.FOR | ||
| MODELQ.FOR | ||
| ODFPAR.FOR | ||
| README_functions.md | ||
| README.md | ||
| tlusty208.f | ||
TLUSTY 208 - 非局部热动力平衡(Non-LTE)恒星大气模型程序
TLUSTY是一个通用的恒星大气和吸积盘非局部热动力平衡(Non-LTE)模型计算程序。该程序基于FORTRAN语言开发,可用于计算恒星大气和吸积盘的物理特性和辐射场。
程序概述
TLUSTY是一种用于计算恒星大气和吸积盘模型的通用代码。程序使用混合的完全线性化/加速Lambda迭代(CL/ALI)方法来求解辐射转移和统计平衡方程组。
主要源文件结构
主程序文件:tlusty208.f
这是程序的主要源代码文件,包含程序入口点和主要计算流程。主要模块包括:
-
PROGRAM TLUSTY: 主程序入口点,实现主要计算流程控制- 输入:读取基本参数
- 初始化:调用START和初始化例程
- 迭代循环:交替调用RESOLV(形式解)和SOLVE/SOLVES/RYBSOL(线性方程求解)
- 输出:计算完成后输出结果
-
SUBROUTINE START: 一般输入和初始化过程- 读取主要输入参数
- 调用INITIA进行详细初始化
- 调用COMSET设置公共变量
- 调用PRDINI初始化部分辐射场
-
SUBROUTINE INITIA: 输入和初始化驱动程序- 读取基本输入参数(温度、重力等)
- 设置频率点和权重
- 初始化湍流速度
- 调用STATE读取原子参数
- 设置显式离子、能级和跃迁参数
-
SUBROUTINE RESOLV: 辐射转移方程的形式解- 执行形式解步骤,计算辐射场
- 计算辐射转移和相关导数
- 处理连续辐射和谱线辐射
- 更新粒子数密度和温度
-
SUBROUTINE ACCEL2: 用于加速收敛的程序- 实现Ng加速或其他收敛加速技术
- 加速迭代过程的收敛速度
-
SUBROUTINE SOLVE/SOLVES: 线性化方程的解法- 求解统计平衡方程和辐射转移方程
- 计算能级布居数的修正值
- 大矩阵方法(SOLVE)和小矩阵方法(SOLVES)
-
SUBROUTINE RYBSOL: 替代解法- 提供另一种线性方程组求解方法
- 适用于特定条件下的计算
-
BLOCK DATA: 初始化氢原子振子强度数据- 为所有可能的氢原子跃迁提供振子强度值
- 数据存储在
OSH数组中供程序使用
-
SUBROUTINE STATE: 原子和离子状态数据读取- 读取原子质量、丰度等参数
- 设置元素的电离状态信息
- 计算原子占据概率和布居数
-
SUBROUTINE COMSET: 设置通用参数- 初始化各种通用变量和数组
- 设置各种物理过程的控制参数
- 为计算过程准备必要的公共数据
-
SUBROUTINE TABINI: 不透明度表初始化- 读取预先计算的不透明度数据
- 设置不透明度表的温度和密度网格
- 准备插值所需的参数
-
SUBROUTINE INPDIS: 吸积盘特定参数输入- 读取吸积盘特定的物理参数
- 设置盘几何形状和物理条件
- 计算初始的盘结构模型
包含文件
这些文件定义了程序中使用的公共变量、数组和参数:
IMPLIC.FOR
包含基本的变量类型定义:
IMPLICIT REAL*8 (A-H,O-Z), LOGICAL*1 (L)
所有的变量默认为双精度实数,逻辑变量为单字节。
BASICS.FOR
定义程序中使用的基本参数和常量:
- 数组维度的最大值参数:
MATOM(99): 显式原子的最大数量MION(170): 显式离子的最大数量MLEVEL(1134): 显式能级的最大数量MDEPTH(100): 深度点的最大数量MFREQ(135000): 频率点的最大数量
- 物理常数:
H(6.6256D-27): Planck常数BOLK(1.38054D-16): Boltzmann常数EH(2.17853041D-11): 氢原子电离能CAS(2.997925D18): 光速(Å/s)
- 主要公共变量块:
/BASNUM/: 基本数值参数(原子数、离子数、能级数等)/INPPAR/: 输入参数(有效温度、重力等)/RUNKEY/: 运行控制参数/CONKEY/: 收敛控制参数/PRINTS/: 打印控制参数/OPCKEY/: 不透明度计算控制/OPCPAR/: 额外不透明度参数/ANGLES/: 角度点和权重/COMPTN/: 康普顿散射相关参数/MLCONS/: 混合长度对流参数
ITERAT.FOR
包含与迭代过程相关的参数和变量:
- 迭代参数(最大迭代次数、Lambda迭代控制)
MITER(200): 最大迭代次数MLAMBD(100): 最大Lambda迭代次数
- 迭代控制公共变量块:
/LAMBDA/: Lambda迭代参数/CHNMAT/: 矩阵变化参数/ACCEL/: 加速方法控制/ACCLP/: 加速参数/ACCLT/: 温度加速控制/CHNAD/: 变化大小监控
ALIPAR.FOR
包含加速Lambda迭代(ALI)方法的参数:
/FIXALP/: 固定ALI参数ABSO,EMIS,SCAT: 吸收、发射和散射系数REIT,REIN,REIM: 辐射场相关导数REIP: 能级布居数相关导数HEIT,HEIN,HEIM: 预处理算子APT,APN: 近似Lambda算子APP: 近似算子矩阵- 与加速Lambda迭代相关的其他变量
ATOMIC.FOR
包含原子数据和参数:
/ATOPAR/: 原子参数AMASS: 原子质量ABUND: 元素丰度NUMAT: 原子数量N0A,NKA: 能级索引
/IONPAR/: 离子参数FF: 能级因子CHARG2: 电荷平方NFIRST,NLAST: 能级索引范围IZ: 离子电荷IUPSUM: 上能级总和控制
/LEVPAR/: 能级参数ENION: 电离能G: 统计权重NQUANT: 量子数IATM,IEL: 原子和电离属性ILK: 能级耦合
/TRAPAR/: 跃迁参数FR0: 跃迁频率OSC0: 振子强度CPAR: 碰撞参数ILOW,IUP: 下能级和上能级ITRA: 跃迁索引
/OSCHYD/: 氢原子振子强度数据OSH: 氢原子振子强度表
MODELQ.FOR
包含模型物理量和状态变量:
/MODPAR/: 模型参数DM: 柱质量TEMP: 温度ELEC: 电子密度DENS: 总密度ZD: 深度THETAV: 粘滞温度参数VISCD: 粘滞系数
/LEVPOP/: 能级布居数POPUL: 能级布居数BFAC: 偏离因子POPINV: 逆布居数POP: 临时布居数USUM: 分配函数
/TURBUL/: 湍流速度VTURB: 湍流速度VTURBS: 湍流速度(表面值)VTB: 全局湍流速度参数
/TOTRAD/: 总辐射场RAD: 平均辐射场FHD: 辐射通量FAK: 角因子EXTRAD: 外部辐射
/FRQALL/: 频率点和权重FREQ: 频率点W: 频率权重PROF: 轮廓函数WCH: 频率通道
/HYDPRF/: 氢原子Stark加宽PRFHYD: 氢轮廓数据WLHYD: 波长点XTLEM: 温度网格XNELEM: 电子密度网格
ODFPAR.FOR
包含不透明度分布函数(ODF)参数:
- ODF参数维度定义:
MFODF(180): ODF频率点最大数MHOD(3): ODF函数最大数MKULEV(7000): Kurucz能级最大数MLINE(1140000): 谱线最大数
/ODFION/: ODF离子参数INODF1,INODF2: ODF单元号INBFCS: 连续谱截面单元号IKOBS: ODF观测值
/ODFCTR/: ODF控制参数FRODF: ODF频率NFRODF: 频率数量INDODF: 能级索引
/SPLCOM/: 样条插值参数SIGFE: 铁谱线数据FRS1,FRS2: 频率范围DXNU: 频率步长
ARRAY1.FOR
包含主要工作数组的定义:
- 线性方程组系数矩阵:
A,B,C,E: 线性方程组系数矩阵VECL,Y1,Y2: 向量和解向量PSI0,PSIM,PSIP: 状态向量
- 辐射场数组:
RAD0,RADM,RADP: 辐射场FK0,FKM,FKP: 角矩ABSO0,ABSOM,ABSOP: 吸收系数EMIS0,EMISM,EMISP: 发射系数SCAT0,SCATM,SCATP: 散射系数
- 导数数组:
DABT0,DABTM,DABTP: 吸收温度导数DEMN0,DEMNM,DEMNP: 发射数密度导数DRCH0,DRCHM,DRCHP: 色散关系温度导数
输入参数
READ(IBUFF,) TEFF,GRAV READ(IBUFF,) XMSTAR,XMDOT,RSTAR,RELDST READ(IBUFF,) LTE,LTGREY READ(IBUFF,) FINSTD READ(IBUFF,) NFREAD READ(IBUFF,,END=20,ERR=20) IATII,IZII,NLEVSI,ILASTI,ILVLIN,NONSTD,TYPIOI,FILEI READ(IBUFF,) IUPSUM(ION),ICUP(ION),MODEFF,NFF READ(IBUFF,) INODF1(ION),INODF2(ION),FIODF1(ION),FIODF2(ION),FIBFCS(ION) READ(IBUFF,) (ALBE(I),I=1,NFREQ) READ(IBUFF,) (ALBE(I),I=1,NFREQ) READ(IBUFF,) ALCON0,ALCHE2,ALLIN0 READ(IBUFF,) NUMMOD READ(IBUFF,) IJ1,IJ2,ALB read(ibuff,'(a80)') dum READ(IBUFF,) MA,ABN,MODPF0 READ(IBUFF,) (ABNDD(I,ID),ID=1,ND) READ(IBUFF,) IOLD,MODE,NXTOLD,ISINEW,ISIOLD,NXTSIO,REL READ(IBUFF,) TAU1,TAU2,TAUL READ(IBUFF,) (TAU0(I),I=1,ND) READ(IBUFF,,ERR=90) IL1,IU1,IM1,IP1 READ(IBUFF,,ERR=100) ALLIM1 READ(IBUFF,,ERR=190) IL1,IU1,IM1,IP1 READ(IBUFF,,ERR=200,END=200) ABLIM1,ABLIM2,ABLIM3 READ(IBUFF,) TAU1 READ(IBUFF,) TDIV READ(IBUFF,) TAU0(ND) READ(IBUFF,) TDIV READ(IBUFF,*) TAU0(1),TAU0(ND)
关键计算模块详解
光谱线处理模块
-
谱线形成:
SUBROUTINE LINEOP: 计算谱线不透明度- 输入:频率、温度、电子密度、能级布居数
- 计算:谱线轮廓函数、吸收系数、发射系数
- 输出:谱线贡献到总不透明度
SUBROUTINE LTEOPA: 处理LTE情况下的谱线不透明度- 使用玻尔兹曼分布计算能级布居数
- 计算基于LTE条件的谱线吸收系数
-
谱线轮廓:
SUBROUTINE VOIGT: 计算Voigt轮廓函数- 输入:阻尼参数、离线心距离
- 计算:Voigt函数值
- 考虑自然加宽、碰撞加宽和Doppler加宽
SUBROUTINE STARK: 计算Stark加宽轮廓- 处理电场对谱线的影响
- 计算氢谱线的Stark加宽
连续谱处理模块
-
连续不透明度:
SUBROUTINE OPASUM: 计算总连续不透明度- 汇总各种连续吸收过程
- 计算散射贡献
- 组合谱线和连续谱不透明度
SUBROUTINE HYDCON: 计算氢连续不透明度- 考虑氢原子的光电离和自由-自由吸收
- 处理负氢离子的贡献
-
散射过程:
SUBROUTINE ELSCET: 计算电子散射- 计算汤姆逊散射截面
- 考虑电子速度分布的影响
SUBROUTINE RAYSET: 计算瑞利散射- 处理中性氢和氦的瑞利散射
- 计算频率依赖的散射截面
辐射转移求解模块
-
形式解:
SUBROUTINE FEAUT: 短特征法求解- 沿特征线积分辐射转移方程
- 计算平均辐射场和辐射通量
- 处理各向异性辐射场
SUBROUTINE ELIMIN: 消去法求解- 进行前向消去和后向替代
- 解带状矩阵系统
-
Lambda迭代:
SUBROUTINE LAMBDA: 执行Lambda操作- 将源函数转换为平均辐射场
- 应用近似Lambda算子加速收敛
- 处理多频率点的耦合
统计平衡求解模块
-
能级布居数计算:
SUBROUTINE NLTEBS: 计算非LTE布居数- 组装统计平衡方程
- 考虑所有辐射和碰撞过程
- 求解非线性方程组
SUBROUTINE LTEPOP: 计算LTE布居数- 基于Saha-Boltzmann方程
- 考虑分配函数
- 计算电离分数
-
线性化求解:
SUBROUTINE MATRIX: 组装线性方程组- 建立统计平衡方程的线性化版本
- 包含辐射转移方程的贡献
- 处理温度、电子密度和布居数的线性关系
SUBROUTINE GAUSSJ: 高斯-约当消元法- 求解大型线性方程组
- 执行矩阵求逆操作
- 计算布居数的修正值
物理过程计算模块
-
碰撞过程:
SUBROUTINE COLRAT: 计算碰撞速率- 考虑电子碰撞激发
- 处理电子碰撞电离
- 计算温度依赖的碰撞截面
SUBROUTINE COLCHG: 更新碰撞速率- 响应温度或电子密度的变化
- 重新计算碰撞系数
-
辐射过程:
SUBROUTINE RADTRS: 计算辐射跃迁速率- 计算吸收和受激发射速率
- 处理自发发射
- 考虑光电离和复合过程
SUBROUTINE PHOTCS: 计算光电离截面- 基于原子数据计算截面
- 处理频率依赖关系
- 考虑共振结构
吸积盘特性模块
-
盘结构:
SUBROUTINE VERTST: 计算垂直结构- 处理流体静力学平衡
- 考虑辐射压力
- 计算垂直温度和密度分布
SUBROUTINE VISCUS: 处理粘滞加热- 计算α粘滞参数的影响
- 考虑粘滞加热对温度的贡献
- 计算能量平衡
-
盘辐射:
SUBROUTINE DISKRT: 盘辐射转移- 考虑盘几何形状对辐射场的影响
- 处理中心辐射源的贡献
- 计算盘表面辐射通量
主要计算流程
-
初始化阶段:
- 读取输入参数(有效温度、重力加速度等)
- 设置频率点和权重
- 读取原子数据和初始化原子参数
- 初始化深度点和物理状态变量
- 初始化辐射场
-
主迭代循环:
- 形式解步骤(
RESOLV):- 解辐射转移方程
- 计算辐射场
- 更新物理条件(温度、电子密度等)
- 加速收敛(
ACCEL2):- 应用加速技术提高收敛速度
- 线性化方程求解(
SOLVE/SOLVES/RYBSOL):- 组装线性方程组
- 求解统计平衡方程
- 更新能级布居数
- 检查收敛条件
- 形式解步骤(
-
结果输出:
- 输出最终的模型大气结构(温度、密度、电子密度等)
- 输出各原子和离子的能级布居数
- 输出辐射场和谱线强度
- 输出最终的恒星光谱或吸积盘谱
物理处理详情
非LTE处理
- 统计平衡方程:
- 考虑所有辐射跃迁和碰撞跃迁
- 包括连续谱跃迁(光电离、复合)和谱线跃迁
- 考虑碰撞电离和复合过程
- 能级布居数计算:
- 使用线性化方法求解统计平衡方程
- 考虑所有相关的跃迁过程
- 包括复杂原子模型的多能级系统
辐射转移处理
- 连续谱辐射转移:
- 考虑光电离和自由-自由吸收
- 包括散射过程(电子散射、Rayleigh散射等)
- 考虑负氢离子的吸收和发射
- 谱线辐射转移:
- 详细的谱线轮廓(Voigt轮廓、Stark加宽等)
- 考虑线重叠效应
- 使用部分再分配函数(PRD)处理共振线
- 加速Lambda迭代:
- 提高辐射转移方程求解的收敛速度
- 使用算子分裂技术
- 使用近似Lambda算子
原子物理处理
- 原子数据:
- 能级能量和统计权重
- 辐射跃迁概率和振子强度
- 光电离截面
- 碰撞截面和速率
- 线轮廓:
- Doppler加宽(热运动和微湍流)
- 自然加宽
- Stark加宽(电场效应)
- van der Waals加宽(中性粒子碰撞)
吸积盘模型特性
- 垂直结构:
- 基于α-粘滞盘模型
- 考虑辐射压力和自引力
- 计算垂直于盘平面的结构
- 辐射场:
- 考虑盘内部的辐射和中心辐射源的贡献
- 处理非各向同性辐射场
- 考虑盘的几何形状对辐射场的影响
输入参数
对于恒星大气:
TEFF: 有效温度,定义恒星的总辐射通量GRAV: 重力加速度(log g),定义恒星表面引力强度
对于吸积盘:
XMSTAR: 中心天体质量,通常以太阳质量为单位XMDOT: 吸积率,定义物质流入率RSTAR: 恒星半径RELDST: 相对于中心天体的距离
物理模型控制参数:
LTE: 局部热动力平衡标志(0表示非LTE,1表示LTE)LTGREY: 灰大气标志(控制是否使用灰大气近似)NFREAD: 读取的连续谱频率点数量VTB: 微湍流速度,影响谱线宽度
原子和离子参数:
IATII,IZII: 原子序数和离子电荷NLEVSI: 能级数量ILASTI: 最后一个能级的标识ILVLIN: 跃迁上限
输出结果
程序输出恒星大气或吸积盘的详细模型,包括:
-
物理结构:
- 温度分布:
TEMP(ID)在各深度点的温度 - 密度分布:
DENS(ID)在各深度点的密度 - 电子密度分布:
ELEC(ID)在各深度点的电子密度 - 气体和辐射压力:
PTOTAL,PRADT
- 温度分布:
-
原子过程:
- 各种原子和离子的能级布居数:
POPUL(I,ID) - 离子化分数
- 原子和分子密度
- 各种原子和离子的能级布居数:
-
辐射场:
- 平均辐射场:
RAD(IJ,ID) - 辐射通量:
FLUX(IJ) - 各向异性因子
- 平均辐射场:
-
谱线特性:
- 谱线轮廓
- 等值宽度
- 谱线吸收系数
程序文件依赖关系
tlusty208.f
|
├── IMPLIC.FOR - 包含变量类型定义
|
├── BASICS.FOR - 基本参数和常量定义
|
├── ITERAT.FOR - 迭代控制参数
|
├── ALIPAR.FOR - ALI方法参数
|
├── ATOMIC.FOR - 原子数据参数
|
├── MODELQ.FOR - 模型物理量参数
|
├── ODFPAR.FOR - ODF参数
|
└── ARRAY1.FOR - 工作数组定义
运行说明
要运行TLUSTY,需要准备适当的输入文件,然后执行编译后的可执行文件。
编译程序
程序使用FORTRAN77/90编译器编译,编译命令类似:
gfortran -o tlusty.exe tlusty208.f
准备输入文件
需要准备以下输入文件:
- 主要控制文件:包含模型参数、计算控制参数
- 原子数据文件:包含能级和跃迁数据
- 不透明度数据文件(如果使用)
运行程序
执行编译后的程序:
./tlusty.exe < input_file
注意事项
- 确保输入参数在程序定义的范围内
- 对于复杂原子的非LTE计算,收敛可能较困难
- 复杂模型的计算可能需要较长时间
理论背景
TLUSTY基于以下理论框架:
- 辐射转移理论
- 统计平衡原理
- 非LTE原子物理学
- 恒星大气和吸积盘物理
程序通过求解耦合的辐射转移和统计平衡方程组来计算自洽的恒星大气或吸积盘模型,考虑了详细的原子物理过程、辐射场和各种物理条件的相互作用。