phymars 核心物理模块目录
路径
LMDZ.MARS\libf\phymars
职责
phymars 是 LMDZ.MARS 的核心物理模块目录,包含火星大气物理过程的全部实现。该目录主要负责 80km 以下大气层的物理计算,包括辐射、尘埃、水循环、CO2 循环、云、边界层、对流、重力波等过程。
目录内容
共 164 个文件(含子目录 dyn1d),按功能分类如下:
1. 主入口
| 文件 |
作用 |
physiq_mod.F |
物理主入口,包含 physiq() 子例程;按源码顺序调度 firstcall/restart、辐射、尘埃、PBL、热羽流、对流、水循环、CO2 循环、化学、热层、地表/土壤和诊断输出 |
2. 辐射过程
| 文件 |
作用 |
callradite_mod.F |
辐射调用入口,调度气溶胶光学准备、长波 lwmain 和短波 swmain |
lwmain_mod.F |
长波 LTE 辐射主程序;组织 Planck 预处理、CO2/aerosol 吸收量、交换率缓存刷新、通量汇总和半隐式冷却率修正 |
swmain_mod.F |
短波辐射主程序;按 swrtype 调度 Fouquart/Toon 两太阳谱段 solver,缩放上下行短波通量并计算 dtsw |
lwxb.F, lwxd.F, lwxn.F |
长波辐射计算;lwxb.F 负责地面/空间边界交换系数,lwxd.F 负责远距离层间交换系数,lwxn.F 负责相邻层子层积分交换系数 |
lwb.F, lwdiff.F, lwflux.F, lwi.F, lwtt.F, lwu.F, yomlw_h.F90 |
长波辐射辅助;Planck 函数、散射通量、通量/冷却率、半隐式修正、透过率近似、吸收量准备和长波共享缓存 |
swr_toon.F, swr_fouquart.F, swrayleigh.F |
短波辐射算法;Fouquart 连续散射、Toon two-stream 和 Rayleigh 柱光学厚度辅助 |
aeropacity_mod.F |
气溶胶不透明度;逐种气溶胶逐层算可见光光学厚度 |
aeroptproperties.F |
气溶胶光学属性;尺寸分布积分得散射参数 |
blendrad.F |
LTE/NLTE 辐射加热率混合 |
updatereffrad_mod.F |
更新辐射使用的粒子有效半径和有效方差 |
aerave.F, suaer.F90 |
气溶胶光学属性带平均和查找表加载 |
3. 尘埃循环
4. 水循环
5. CO2 循环
6. 边界层与湍流
7. 重力波拖曳
8. 对流
9. 示踪剂系统
10. 初始化
| 文件 |
作用 |
phyetat0_mod.F90 |
物理状态初始化;读取 startfi.nc 或 no-startfi 缺省路径,恢复地表、土壤、坡面、tracer、古气候和 restart 记忆状态 |
phyredem.F90 |
物理 start/restart 写出;写控制表、网格、地表、土壤、tracer、尘埃、古气候和质量修正状态 |
phys_state_var_init_mod.F90 |
物理状态变量初始化;读取 startfi.nc 的 nslope 维度,初始化常数/时间状态,并按 ngrid/nlayer/nq/nslope 分配共享物理数组 |
iniwrite.F |
传统 diagfi / diagmicrofi NetCDF 初始化:定义坐标、垂直层、控制参数、土壤深度、网格面积和地表位势 |
iniwritesoil.F90 |
土壤初始化写入 |
iostart.F90 |
物理重启文件 NetCDF I/O 核心模块;提供 startfi.nc 读取和 restartfi.nc 写入的统一接口,支持并行环境下的数据分发和重排 |
surfini_mod.F90 |
水冰帽初始化;按 icelocationmode 从 surface.nc、预定义表、经纬度、startfi 或热惯量生成 watercaptag/dryness |
surfdat_h.F90 |
地表共享状态模块;保存反照率、地形统计、水冰帽、坡面地表和山顶地形数组,并提供分配/释放例程 |
11. 输出与诊断
12. NLTE(非局部热力学平衡)
| 文件 |
作用 |
nltecool.F |
nltemodel=0/1 的 CO2 15 微米 NLTE cool-to-space 冷却率模块;使用内置 escape function / VMR 表或动态 tracer 成分,直接输出 K/s |
nlte_calc.F |
NLTE 光学厚度、escape probability 和 Curtis-matrix 系数计算;为 nlte_tcool_mod.F 生成 c110/vc110/c121/vc121/taustar* |
nlte_aux.F |
NLTE 辅助例程集合;读取/恢复历史谱线表,提供温度/高度/多维查表、Voigt 等效线宽、escape probability 归一化、LU 求解和平滑工具 |
nlte_commons_h.F90 |
NLTE 15 微米 CO2 共享状态模块;保存谱线常数、查表、主网格/CTS 网格剖面、Curtis matrices、escape probability、碰撞率和历史谱线缓存 |
nlte_paramdef_h.F90 |
NLTE 15 微米 CO2 编译期参数定义;保存网格维度、压力边界、谱带/同位素数量、辐射常数、波数表和同位素混合比 |
nlte_setup.F |
NLTE 15 微米 CO2 运行时表初始化;读取 NLTEDAT 谱线、Tstar/VC、历史谱线表并计算温度相关碰撞速率 |
nlte_tcool_mod.F |
nltemodel=2 的 CO2 15 微米 NLTE 快速冷却率模块;构造 NLTE/CTS 网格、求解 CZA 耦合矩阵、拼接 CTS 顶层冷却率并回插到 GCM 网格 |
nlteparams_h.F90 |
LTE/NLTE 辐射倾向过渡参数;定义 ptrans=0.1 Pa、zw=0.5、pminte=0.4*ptrans 和 zwi=2/zw,供 blendrad 与 nlthermeq 使用 |
nlthermeq.F |
LTE/NLTE 过渡层选择器;用 pminte 和当前层压强剖面计算 yomlw_h::nlaylte,限制 LTE 辐射覆盖层数 |
13. 配置与公共模块
| 文件 |
作用 |
conf_phys.F |
物理配置入口;读取 callphys.def/radia.def,设置 callkeys_mod、尘埃/水/CO2/热层开关,分配气溶胶 scatterer 名称并执行依赖校验 |
callkeys_mod.F90 |
物理包运行时开关与共享参数模块;保存辐射、尘埃、水循环、CO2 云、PBL 和高层大气分支开关 |
def_var.F90 |
NetCDF 变量定义辅助例程;用 NF_FLOAT 创建变量并写 title/units 属性,供 diagfi、微物理诊断、土壤诊断和 archive 输出首次定义变量时调用 |
dimphy.F90 |
本地物理网格维度共享状态;保存 klon/klev/klevp1/klevm1,由 Init_dimphy 初始化并声明为 OpenMP threadprivate |
conc_mod.F90 |
大气混合物热力学属性缓存;保存 mmean/Akknew/cpnew/rnew,由初始化填常数背景并在 photochem 或 callthermos 路径中按 tracer 组成更新 |
comcstfi_h.F90 |
公共物理常数;保存 rad/g/r/cpp/rcp/mugaz/omeg/pi |
comgeomfi_h.F90 |
公共几何三角函数缓存;保存 sinlat/coslat/sinlon/coslon,由初始化路径从物理网格经纬度填充 |
comm_wrf.F90 |
MESOSCALE/WRF 风格输出缓存;保存 HR_SW/HR_LW/TAU_DUST/RDUST/MTOT/ICETOT 等诊断数组 |
comsoil_h.F90 |
公共土壤 |
comtherm_h.F90 |
热羽流模型编译期参数和调参常数;定义 nsplit_thermals、tracer/TKE 输送开关、卷入/脱离/下沉气流/速度方程常数,供 calltherm_interface 和 thermcell_main_mars 读取 |
comsaison_h.F90 |
公共季节和太阳几何共享状态;保存 dist_sol/declin/zls/mu0/fract/local_time,由 physiq 每步写入后供辐射、尘暴、山顶尘流和尘埃注入读取 |
datafile_mod.F90 |
运行时外部数据目录共享模块;保存 datadir 默认路径并由 callphys.def 覆盖,供 CO2 云、极冠反照率、尘埃场景、辐射、化学和初始化读表路径使用 |
comslope_mod.F90 |
斜坡 |
planete_h.F90 |
行星轨道和湍流下限共享状态;保存 aphelie/periheli/year_day/peri_day/obliquit,由 iniorbit 派生 e_elips/p_elips/lsperi,供 solarlong 和 orbite 使用 |
planetwide_mod.F90 |
全行星最大值、最小值和求和规约工具;并行路径通过 gather、master intrinsic 规约和 bcast 得到跨物理网格一致的标量结果。 |
time_phylmdz_mod.F90 |
物理时间共享状态模块;保存 daysec/dtphys/steps_per_sol、运行起止日和诊断/restart 调度标量。 |
turb_mod.F90 |
湍流/PBL 共享状态模块;保存界面层 TKE、surface-layer 速度/温度尺度和热羽流反馈诊断数组。 |
dimradmars_mod.F90 |
辐射维度、气溶胶 scatterer 和光学查找表共享状态 |
yoegwd_h.F90, yomlw_h.F90 |
GWD/LW 头文件;yoegwd_h 保存地形 GW 链共享调参变量,yomlw_h 保存长波 LTE 辐射共享系数和交换率缓存 |
14. 土壤与表面
15. 轨道与太阳
| 文件 |
作用 |
orbite.F |
轨道几何换算;physiq 在 callrad 分支用 zls 调用它,计算 dist_sol 和 declin,供太阳角、辐射通量缩放、近红外 CO2 和坡面/热层路径使用 |
solang.F |
日变化太阳角计算;按经纬度三角缓存、太阳赤纬和时角写出每格点 mu0 与 0/1 日照标志 fract。 |
solarlong.F |
火星日期到太阳经度转换;读取 planete_h 轨道参数,用 Kepler 方程 Newton 解得到 Ls。 |
16. 其他物理
17. dyn1d 子目录
1D 测试模型相关文件,见 dyn1d/index.md。已建页面:
| 文件 |
作用 |
dyn1d/abort_gcm.F |
指向 LMDZ.COMMON/libf/dyn3d/abort_gcm.F 的中止例程路径 stub,供 1D 初始化路径调用 abort_gcm。 |
dyn1d/comconst_mod.F90 |
指向 LMDZ.COMMON/libf/dyn3d_common/comconst_mod.F90 的动力常数模块路径 stub;目标模块保存维度、时间步、行星常数、耗散和顶层 sponge 参数。 |
dyn1d/comvert_mod.F90 |
指向 LMDZ.COMMON/libf/dyn3d_common/comvert_mod.F90 的垂直坐标模块路径 stub;保存 ap/bp/aps/bps、参考压力和伪高度,供 1D 压力层构造。 |
dyn1d/control_mod.F90 |
指向 LMDZ.COMMON/libf/dyn3d_common/control_mod.F90 的公共动力控制状态 stub;保存 3D GCM 日期、步频、输出和模式开关,当前 1D 主程序不直接读取。 |
dyn1d/disvert_noterre.F |
指向 LMDZ.COMMON/libf/dyn3d_common/disvert_noterre.F 的非地球垂直离散例程 stub;读取 esasig.def 或 z2sig.def 生成 hybrid/sigma 压力坐标系数。 |
dyn1d/ener_mod.F90 |
指向 LMDZ.COMMON/libf/dyn3d_common/ener_mod.F90 的公共动力能量诊断状态 stub;保存质量、能量、涡度/熵、角动量和 RMS 诊断量。 |
dyn1d/infotrac.F90 |
指向 LMDZ.COMMON/libf/dyn3d_common/infotrac.F90 的 tracer 元数据模块 stub;dyn1d 初始化用它保存 traceur.def 读取出的 tracer 名和父子关系。 |
dyn1d/init_testphys1d_mod.F90 |
1D testphys1d 初始化主例程;串联配置、traceur.def、restart/profile、垂直坐标、几何、坡面、地表、土壤、tracer 和水控制状态。 |
dyn1d/logic_mod.F90 |
指向 LMDZ.COMMON/libf/dyn3d/logic_mod.F90 的动力逻辑状态 stub;当前 1D 初始化用 hybrid 选择垂直坐标。 |
dyn1d/mod_const_mpi.F90 |
指向 LMDZ.COMMON/libf/dyn3dpar/mod_const_mpi.F90 的并行常量 stub;COMM_LMDZ 在 XIOS 分支传给 1D physics distribution 初始化。 |
dyn1d/mod_interface_dyn_phys.F90 |
指向 LMDZ.COMMON/libf/dynphy_lonlat/mod_interface_dyn_phys.F90 的动力-物理接口 stub;并行分支建立物理列到动力网格 (i,j) 的映射。 |
dyn1d/parallel_lmdz.F90 |
指向 LMDZ.COMMON/libf/dyn3dpar/parallel_lmdz.F90 的并行运行时 stub;testphys1d 调用 init_parallel 初始化 rank/线程状态。 |
dyn1d/profile_temp_mod.F90 |
1D 温度廓线构造模块;提供常温、Savidjari、Lindner、逆温、Seiff、Gaussian 和 profile_temp 文件读取分支。 |
dyn1d/read_profile_mod.F90 |
1D tracer profile 读取模块;读取 profile_<tracer> 的 surface-first 廓线格式,并处理 CO2/HDO/dust 缺文件默认值。 |
dyn1d/serre_mod.F90 |
指向 LMDZ.COMMON/libf/dyn3d_common/serre_mod.F90 的公共动力 zoom/水平网格状态 stub;保存 clon/clat/grossismx/grossismy/dzoomx/dzoomy/taux/tauy 等参数。 |
dyn1d/testphys1d.F90 |
1D 单柱物理测试主程序;检查 run.def/start 文件、调用初始化、写 startfi.nc、逐步调用 physiq 并推进风、温度、表压和 tracer。 |
dyn1d/writerestart1D_mod.F90 |
1D 文本 restart 写出模块;将表压、tracer、风和温度按 start1D.txt 兼容顺序写入 restart1D.txt。 |
与其他目录的关系
| 相关目录 |
关系 |
../aeronomars/ |
调用光化学、热层过程 |
../dynphy_lonlat/ |
被物理调用接口调用 |
../../deftank/ |
读取 callphys.def 配置 |
../../datadir/ |
读取辐射、尘埃等数据 |
关键文件
典型物理调用链
physiq() (physiq_mod.F)
├── callradite() 辐射
│ ├── lwmain() 长波
│ └── swmain() 短波
├── 尘埃lifting dust_param_mod
├── 水循环 watercloud_mod / watersat_mod
├── CO2循环 co2condens_mod / co2cloud_mod
├── 湍流 turb_mod / lmdz_call_atke
├── 重力波 sugwd_mod
├── 对流 convadj_mod / thermcell_main_mars
├── 边界层 vdif_kc / vdifc_mod
└── NLTE nltecool (80km以上)
复现要点
physiq() 是核心入口,需要提供网格、时间步、压力、温度、风场、示踪剂等输入
- 各物理过程通过
callphys.def 开关控制
- 辐射计算需要光学数据文件
- 尘埃 lifting 需要风场和地表参数
- 示踪剂输运依赖于动力核心
细节入口