This commit is contained in:
fmq
2026-03-21 16:23:35 +08:00
parent f286ddacfe
commit 497e62e13c
35 changed files with 10781 additions and 364 deletions
+266
View File
@@ -339,9 +339,263 @@ impl VoiPar {
}
}
// ============================================================================
// ATOMAS - 原子质量额外存储
// ============================================================================
/// 原子质量额外存储。
/// 对应 COMMON /ATOMAS/
#[derive(Debug, Clone)]
pub struct AtoMas {
pub amas: Vec<f64>,
}
impl Default for AtoMas {
fn default() -> Self {
Self {
amas: vec![0.0; 100],
}
}
}
// ============================================================================
// TOPCS - 截面拟合参数
// ============================================================================
/// 截面拟合参数。
/// 对应 COMMON /TOPCS/
#[derive(Debug, Clone)]
pub struct TopCs {
pub ctop: Vec<Vec<f64>>,
pub xtop: Vec<Vec<f64>>,
}
impl Default for TopCs {
fn default() -> Self {
Self {
ctop: vec![vec![0.0; MCROSS]; MFIT],
xtop: vec![vec![0.0; MCROSS]; MFIT],
}
}
}
// ============================================================================
// TABCOL - 碰撞率表
// ============================================================================
/// 碰撞率表。
/// 对应 COMMON /TABCOL/
#[derive(Debug, Clone)]
pub struct TabCol {
pub ctemp: Vec<Vec<Vec<f64>>>,
pub crate_data: Vec<Vec<Vec<f64>>>,
}
impl Default for TabCol {
fn default() -> Self {
Self {
ctemp: vec![vec![vec![0.0; MCORAT]; MCFIT]; MXTCOL],
crate_data: vec![vec![vec![0.0; MCORAT]; MCFIT]; MXTCOL],
}
}
}
// ============================================================================
// TRACOR - 跃迁修正
// ============================================================================
/// 跃迁修正标志。
/// 对应 COMMON /TRACOR/
#[derive(Debug, Clone)]
pub struct TraCor {
pub lexp: Vec<i32>,
pub lali: Vec<i32>,
}
impl Default for TraCor {
fn default() -> Self {
Self {
lexp: vec![0; MTRANS],
lali: vec![0; MTRANS],
}
}
}
// ============================================================================
// TRAALI - ALI 跃迁标志
// ============================================================================
/// ALI 跃迁标志。
/// 对应 COMMON /TRAALI/
#[derive(Debug, Clone, Default)]
pub struct TraAli {
pub nffix: i32,
pub ifsub: i32,
pub iflev: i32,
}
// ============================================================================
// AUXIND - 辅助索引
// ============================================================================
/// 辅助索引。
/// 对应 COMMON /AUXIND/
#[derive(Debug, Clone, Default)]
pub struct AuxInd {
pub iath: i32,
pub iathe: i32,
pub ielh: i32,
pub ielhm: i32,
pub ielhe1: i32,
pub ielhe2: i32,
}
// ============================================================================
// IONFIL - 离子文件映射
// ============================================================================
/// 离子文件映射。
/// 对应 COMMON /IONFIL/
#[derive(Debug, Clone)]
pub struct IonFil {
pub fidata: Vec<String>,
pub fiodf1: Vec<String>,
pub fiodf2: Vec<String>,
pub fibfcs: Vec<String>,
}
impl Default for IonFil {
fn default() -> Self {
Self {
fidata: vec![String::new(); MION],
fiodf1: vec![String::new(); MION],
fiodf2: vec![String::new(); MION],
fibfcs: vec![String::new(); MION],
}
}
}
// ============================================================================
// IONDAT - 离子数据索引
// ============================================================================
/// 离子数据索引。
/// 对应 COMMON /IONDAT/
#[derive(Debug, Clone)]
pub struct IonDat {
pub iati: Vec<i32>,
pub izi: Vec<i32>,
pub nlevs: Vec<i32>,
pub nllim: Vec<i32>,
}
impl Default for IonDat {
fn default() -> Self {
Self {
iati: vec![0; MION],
izi: vec![0; MION],
nlevs: vec![0; MION],
nllim: vec![0; MION],
}
}
}
// ============================================================================
// OSCHYD - 氢振子强度额外存储
// ============================================================================
/// 氢振子强度额外存储。
/// 对应 COMMON /OSCHYD/
#[derive(Debug, Clone)]
pub struct OscHyd {
pub osh: [[f64; 20]; 20],
}
impl Default for OscHyd {
fn default() -> Self {
Self {
osh: [[0.0; 20]; 20],
}
}
}
// ============================================================================
// PRINTP - 能级打印控制
// ============================================================================
/// 能级打印控制。
/// 对应 COMMON /PRINTP/
#[derive(Debug, Clone)]
pub struct PrintP {
pub npgpop: i32,
pub iipr: Vec<Vec<i32>>,
pub typlev: Vec<String>,
pub typion: Vec<String>,
}
impl Default for PrintP {
fn default() -> Self {
let mpag = MLEVEL / 6 + 1;
Self {
npgpop: 0,
iipr: vec![vec![0; mpag]; 6],
typlev: vec![String::new(); MLEVEL],
typion: vec![String::new(); MION],
}
}
}
// ============================================================================
// TABMAX - 最大频率
// ============================================================================
/// 最大频率。
/// 对应 COMMON /TABMAX/
#[derive(Debug, Clone, Default)]
pub struct TabMax {
pub frtabm: f64,
}
// ============================================================================
// PRDPAR - PRD 参数
// ============================================================================
/// PRD (部分频率重分布) 参数。
/// 对应 COMMON /PRDPAR/
#[derive(Debug, Clone)]
pub struct PrdPar {
pub doptr: Vec<Vec<f64>>,
pub coher: Vec<Vec<f64>>,
pub pjbar: Vec<Vec<f64>>,
pub rjbar: Vec<Vec<f64>>,
pub xpdiv: f64,
pub iprd: Vec<i32>,
pub itrtot: Vec<i32>,
pub ntrprd: i32,
pub ifprd: i32,
}
impl Default for PrdPar {
fn default() -> Self {
const MTRPRD: usize = 5;
Self {
doptr: vec![vec![0.0; MDEPTH]; MTRPRD],
coher: vec![vec![0.0; MDEPTH]; MTRPRD],
pjbar: vec![vec![0.0; MDEPTH]; MTRPRD],
rjbar: vec![vec![0.0; MDEPTH]; MTRPRD],
xpdiv: 0.0,
iprd: vec![0; MTRANS],
itrtot: vec![0; MTRPRD],
ntrprd: 0,
ifprd: 0,
}
}
}
// ============================================================================
// HECRAT - 氦碰撞速率
// ============================================================================
// ============================================================================
/// 氦碰撞速率系数。
/// 对应 COMMON /HECRAT/
@@ -366,6 +620,18 @@ pub struct AtomicData {
pub phoset: PhoSet,
pub voipar: VoiPar,
pub hecrat: HeCrat,
pub atopas: AtoMas,
pub topcs: TopCs,
pub tabcol: TabCol,
pub tracor: TraCor,
pub traali: TraAli,
pub auxind: AuxInd,
pub ionfil: IonFil,
pub iondat: IonDat,
pub oschyd: OscHyd,
pub printp: PrintP,
pub tabmax: TabMax,
pub prdpar: PrdPar,
}
impl AtomicData {
+172
View File
@@ -94,6 +94,20 @@ impl Default for BasNum {
}
}
// ============================================================================
// CENTRL - 中心点参数
// ============================================================================
/// 中心点参数。
/// 对应 COMMON /CENTRL/
#[derive(Debug, Clone, Default)]
pub struct Centrl {
/// 中心平面几何距离
pub znd: f64,
/// Z 修正迭代控制
pub ifz0: i32,
}
// ============================================================================
// INPPAR - 输入参数
// ============================================================================
@@ -246,6 +260,128 @@ pub struct ConKey {
pub idconz: i32,
}
// ============================================================================
// FIXDEN - 固定密度标志
// ============================================================================
/// 固定密度标志。
/// 对应 COMMON /FIXDEN/
#[derive(Debug, Clone, Default)]
pub struct FixDen {
pub ifixde: i32,
}
// ============================================================================
// INVINT - 逆积分参数
// ============================================================================
/// 逆积分参数。
/// 对应 COMMON /INVINT/
#[derive(Debug, Clone)]
pub struct InvInt {
pub xi2: Vec<f64>,
pub xi3: Vec<f64>,
}
impl Default for InvInt {
fn default() -> Self {
Self {
xi2: vec![0.0; NLMX],
xi3: vec![0.0; NLMX],
}
}
}
// ============================================================================
// OPCKEY - 不透明度控制键
// ============================================================================
/// 不透明度控制键。
/// 对应 COMMON /OPCKEY/
#[derive(Debug, Clone, Default)]
pub struct OpcKey {
pub ncon: i32,
pub iophl1: i32,
pub iophl2: i32,
pub iphe2c: i32,
pub ifmoff: i32,
}
// ============================================================================
// PSILIM - Ψ 限制参数
// ============================================================================
/// Ψ 限制参数。
/// 对应 COMMON /PSILIM/
#[derive(Debug, Clone, Default)]
pub struct PsiLim {
pub dpsilg: f64,
pub dpsilt: f64,
pub dpsiln: f64,
pub dpsild: f64,
}
// ============================================================================
// COMITE - 迭代控制键
// ============================================================================
/// 迭代控制参数。
/// 对应 COMMON /COMITE/
#[derive(Debug, Clone, Default)]
pub struct Comite {
pub ncfor1: i32,
pub ncfor2: i32,
pub nccoup: i32,
pub ncitot: i32,
pub ncfull: i32,
}
// ============================================================================
// MLCONS - 混合长度常数
// ============================================================================
/// 混合长度常数。
/// 对应 COMMON /MLCONS/
#[derive(Debug, Clone, Default)]
pub struct MlCons {
pub aconml: f64,
pub bconml: f64,
pub cconml: f64,
}
// ============================================================================
// TAURSL - 光学深度表
// ============================================================================
/// 光学深度表。
/// 对应 COMMON /TAURSL/
#[derive(Debug, Clone)]
pub struct TaurSl {
pub taurs: Vec<f64>,
}
impl Default for TaurSl {
fn default() -> Self {
Self {
taurs: vec![0.0; MDEPTH],
}
}
}
// ============================================================================
// IPRKEY - 打印键
// ============================================================================
/// 打印键。
/// 对应 COMMON /IPRKEY/
#[derive(Debug, Clone, Default)]
pub struct IprKey {
pub iprybh: i32,
pub ipelch: i32,
pub ipeldo: i32,
pub ipconf: i32,
}
// ============================================================================
// OPCPAR - 额外不透明度控制
// ============================================================================
@@ -254,6 +390,7 @@ pub struct ConKey {
/// 对应 COMMON /OPCPAR/
#[derive(Debug, Clone, Default)]
pub struct OpcPar {
pub iopadd: i32,
pub iophmi: i32, // H⁻
pub ioph2p: i32, // H₂⁺
pub iophem: i32, // He⁻
@@ -384,6 +521,31 @@ impl Default for Comptn {
}
}
// ============================================================================
// COMPTI - Compton 散射控制参数
// ============================================================================
/// Compton 散射控制参数。
/// 对应 COMMON /COMPTI/
#[derive(Debug, Clone, Default)]
pub struct Compti {
pub nedd: i32,
pub nsti: i32,
pub islab: i32,
pub ilbc: i32,
pub icompt: i32,
pub icomst: i32,
pub icomde: i32,
pub icombc: i32,
pub icmdra: i32,
pub knish: i32,
pub itcomp: i32,
pub icomve: i32,
pub icomrt: i32,
pub ichcoo: i32,
pub icomgr: i32,
}
// ============================================================================
// 综合配置结构
// ============================================================================
@@ -401,6 +563,16 @@ pub struct TlustyConfig {
pub prints: Prints,
pub angles: Angles,
pub comptn: Comptn,
pub centrl: Centrl,
pub compti: Compti,
pub opckey: OpcKey,
pub invint: InvInt,
pub fixden: FixDen,
pub psilim: PsiLim,
pub comite: Comite,
pub mlcons: MlCons,
pub taursl: TaurSl,
pub iprkey: IprKey,
}
impl TlustyConfig {
+40
View File
@@ -20,6 +20,8 @@ pub const MTRANS: usize = 21000;
pub const MDEPTH: usize = 100;
/// 最大频率点数
pub const MFREQ: usize = 135000;
/// 最大频率点数 + 1
pub const MFREQ1: usize = MFREQ; // 根据 BASICS.FOR: MFREQ1 = MFREQ
/// 工作频率数组大小
pub const MFREQP: usize = 220000;
/// 连续谱频率点数
@@ -66,6 +68,40 @@ pub const MTRAN3: usize = 1;
pub const MCROSS: usize = MLEVEL + 5;
/// 束缚-自由跃迁数
pub const MBF: usize = MLEVEL;
/// Gomez 氢不透明度表频率大小
pub const MFHTAB: usize = 1000;
/// Gomez 氢不透明度表温度大小
pub const MTABTH: usize = 10;
/// Gomez 氢不透明度表电子密度大小
pub const MTABEH: usize = 10;
/// 碰撞率表温度点数
pub const MXTCOL: usize = 3;
/// 碰撞率表拟合点数
pub const MCFIT: usize = 10;
/// 碰撞率表跃迁点数
pub const MCORAT: usize = MTRANS;
/// 不透明度表温度大小
pub const MTABT: usize = 21;
/// 不透明度表密度大小
pub const MTABR: usize = 19;
/// 不透明度表频率大小
pub const MFRTAB: usize = 125000;
// ODF 相关
/// ODF 频率点数
pub const MFODF: usize = 180;
/// ODF 热点数
pub const MHOD: usize = 3;
/// ODF 深度维度
pub const MDODF: usize = 3;
/// ODF 库能级数
pub const MKULEV: usize = 7000;
/// ODF 谱线数
pub const MLINE: usize = 1140000;
/// ODF 截面点数
pub const MCFE: usize = 7824000;
/// ODF 频率范围
pub const MFRO: usize = MFREQL;
// ============================================================================
// 物理常数 (CGS 单位)
@@ -93,6 +129,10 @@ pub const PI4H: f64 = 1.8966e27;
pub const PCK: f64 = 4.19168946e-10;
/// 氢原子质量 (g)
pub const HMASS: f64 = 1.67333e-24;
/// 康普顿散射常数 XCON
pub const XCON: f64 = 8.0935e-21;
/// 康普顿散射常数 YCON
pub const YCON: f64 = 1.68638e-10;
// ============================================================================
// 数学常数
+1 -1
View File
@@ -188,7 +188,7 @@ pub struct ChnAd {
/// Lambda 计数
pub nlamt: i32,
/// 导数标志
pubilder: i32,
pub ilder: i32,
/// BPOP 标志
pub ibpope: i32,
}
+1369 -27
View File
File diff suppressed because it is too large Load Diff
+2 -19
View File
@@ -4,25 +4,6 @@
use super::constants::*;
// ============================================================================
// ODF 维度参数
// ============================================================================
/// ODF 频率点数
pub const MFODF: usize = 180;
/// ODF 热点数
pub const MHOD: usize = 3;
/// ODF 频率范围
pub const MFRO: usize = MFREQL;
/// ODF 深度维度
pub const MDODF: usize = 3;
/// Kurucz 能级数
pub const MKULEV: usize = 7000;
/// 谱线数
pub const MLINE: usize = 1140000;
/// Fe 系数数
pub const MCFE: usize = 7824000;
// ============================================================================
// ODFION - ODF 离子控制
// ============================================================================
@@ -411,6 +392,7 @@ pub struct OdfData {
pub odfctr: OdfCtr,
pub odffrq: OdfFrq,
pub odfmod: OdfMod,
pub odfstk: OdfStk,
pub splcom: SplCom,
pub opalim: OpaLim,
pub oplimt: OpLimT,
@@ -424,6 +406,7 @@ impl OdfData {
odfctr: OdfCtr::new(),
odffrq: OdfFrq::new(),
odfmod: OdfMod::new(),
odfstk: OdfStk::new(NLMX),
..Default::default()
}
}