ORCA 输入文件模型与解析渲染指南¶
本文说明 MolOP 中 ORCA .inp 的结构化读取模型和规范化 writer。ORCA writer 已注册,
可从带坐标的 frame 和显式 ORCA 计算设置构建输入;它不是 source-preserving writer,
不要依赖 orca_raw_preamble / orca_raw_postamble 或 raw round-trip 兼容。
数据层次¶
ORCA 的 $new_job 在文件解析层切分为多个 ORCAInpFileFrame,与 Gaussian --Link1-- 分帧思路一致:
ORCAInpFile
frames: list[ORCAInpFileFrame]
ORCAInpFileFrame
comment_lines
keyword_lines
blocks
geometry
trailing_lines
auxiliary_basis_set
dispersion_correction
has_mixed_basis
output_print_settings
atoms / coords / charge / multiplicity
ORCAInpFileFrame 必须直接承载坐标和主语义字段。geometry 是 frame 的结构化字段来源,而不是额外的 job 包装层。
Frame 字段¶
comment_lines-
保存顶层
#注释,去掉前导#。 keyword_lines-
保存顶层
!关键词行,去掉前导!。frame validator 会把这些行合并到通用keywords字段,并尽量派生method、functional、basis_set。ORCA 辅助基组关键词会写入auxiliary_basis_set,例如def2-SVP/C。ORCA 色散关键词也会写入dispersion_correction,例如D3BJ或D4;当识别到 DFT 泛函时,通用functional字段会附加色散后缀,与 Gaussian 行为一致,例如B3LYP-D3BJ、PBE0-D4。 blocks-
保存顶层
%...块。每个ORCABlock包含:
name:去掉%后的小写块名,例如pal、maxcore、scfraw_header:原始 header 行raw_text:扫描器识别出的原始 block 文本lines:块体行,去掉行尾换行
geometry-
保存 ORCA 几何输入结构。支持
* xyz、* cart、数值型* int/* internal/* gzmt、* xyzfile、* gzmtfile、* pdbfile和%coords中的 Cartesian 坐标。Cartesian 坐标以及可解析的内坐标会同步到 frame 的atoms/coords。 trailing_lines-
保存暂未归类的顶层非空文本,供调试和后续扩展使用。它不是 raw 兼容接口。
dispersion_correction-
从 ORCA
!关键词行识别出的色散校正。该字段是 ORCA 输入 frame 的结构化字段,不是BaseQMInputFrame的通用字段。当同一 frame 识别到 DFT 泛函时,色散会同时作为FUNCTIONAL-DISPERSION后缀补充到通用functional字符串。 has_mixed_basis-
当任一原子行带有
newgto或newauxgto时为true。 output_print_settings-
从
%output块中识别出的Print[ ... ] = ...设置。原始%output块仍保存在blocks和resources_raw。
Geometry 模型¶
ORCAGeometry 字段:
ctype:xyz、cart、cartesian、int、internal、gzmt、xyzfile或gzmtfilecharge/multiplicityunits:例如bohrexternal_path:外部几何文件路径atoms:Cartesian 原子列表internal_coords:可解析的数值内坐标coordinate_parameters:来自%paras的坐标参数point_charges:Q q x y z点电荷source:star或percent_coords
ORCAGeometryAtom 字段:
symbol/atomic_numberx/y/zis_dummy/is_ghostfragment_idfrozenisotopenuclear_chargebasis_set/auxiliary_basis_set:来自原子行上的newgto/newauxgtobasis_overrides:原子级基组覆盖指令列表,保留指令类型、命名基组和 token
解析流程¶
文件解析器:
- 读取
.inp文件文本。 - 在顶层
$new_job处分帧。 - 对每个 frame 调用
ORCAInpFileFrameParser。
frame 解析器:
- 识别
* ...几何段,或%coords ... end几何块。 - 扫描顶层
%块,生成ORCABlock。 - 过滤已被几何段和
%块占用的行。 - 从剩余行提取
#注释和!关键词。 - 组装
ORCAInpFileFrame顶层字段。 - frame validator 派生通用 QM input 字段。
单位与坐标¶
Cartesian 输入默认按 Å 处理。units 为 bohr、a0、au 等时,解析器把坐标和点电荷位置转换为 Å 后写入模型。
xyzfile / gzmtfile / pdbfile 只保留 external_path,不会读取外部文件,也不会伪造
atoms / coords。
渲染合同¶
ORCA file writer 和 frame writer 均已注册。渲染器支持显式 keywords、nprocs、
maxcore、raw 或 mapping 形式的 %block、Cartesian 几何和外部几何引用。
跨格式转换必须显式提供 ORCA keywords。
渲染器输出规范化输入,不承诺保留原始语句顺序、空白、注释位置或 %coords 表示。
内联 int / internal / gzmt 尚不能渲染。完整边界见
ORCA 输入格式页中的 6.1 能力覆盖矩阵。
开发约束¶
- 不新增
jobs包装层;$new_job对应多个 frame。 - 不恢复
orca_raw_preamble/orca_raw_postamble。 - ORCA writer 只承诺规范化渲染;在引入有序 statement 模型前,不声明原文无损 round-trip。
- 程序特有语法优先写入 ORCA 结构化字段和公共 QM 结构化容器,再由
project_common_qm_fields()投影到method、functional、basis_set等兼容字段。 - 新语法应先扩展结构化模型,再扩展 parser;不要把语义藏进 raw 字符串。