callkeys_mod.F90
路径
LMDZ.MARS\libf\phymars\callkeys_mod.F90
所属目录 / 模块
libf\phymars
文件定位
callkeys_mod.F90 定义 callkeys_mod 模块(第 1 行),集中保存物理包运行时开关、少量辐射/尘埃参数和水循环/CO2 云控制量。该文件本身没有子程序、函数、use 依赖或文件 I/O;它的职责是声明 SAVE 模块变量,并把几乎全部变量声明为 OpenMP THREADPRIVATE,供 conf_phys.F、restart/初始化路径和各物理过程模块读写。
从源码看,callkeys_mod 不是默认值定义页。除 integer,parameter :: swrtype=2(第 109 行)外,其余变量只在本模块中声明存储;常见默认值和 callphys.def 覆盖路径在 conf_phys.F 中完成,例如 conf_phys.F 第 54-79 行导入本模块变量,第 201-203 行读取 iaervar,第 230-354 行读取核心物理开关,第 532-545 行读取尘埃注入参数,第 706-755 行读取水/CO2 云开关,第 1160-1186 行读取高层大气开关。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
callkeys_mod |
module | 1 | 物理包运行时开关与共享参数模块。 |
startphy_file |
logical saved module variable | 5 | 控制是否读取物理 start 文件路径;被 phyetat0_mod 等初始化路径读取。 |
callrad, calldifv, calladj, callcond, callsoil |
logical saved module variables | 8 | 主物理过程开关:辐射、垂直扩散、干对流调整、CO2 凝结、土壤。 |
season, diurnal, calllott, calllott_nonoro |
logical saved module variables | 10 | 季节/日变化、地形与非地形重力波相关开关。 |
callnirco2, callnlte, callthermos, callconduct |
logical saved module variables | 12 | 近红外 CO2、NLTE、热层和热传导路径开关。 |
calleuv, callmolvis, callmoldiff, thermochem |
logical saved module variables | 14 | EUV、分子黏性、分子扩散和热层化学开关。 |
calltherm, callrichsl, callslope, tituscap |
logical saved module variables | 16 | 热羽流、近地层 Richardson/稳定度、坡面、Titus/TES 极冠覆盖开关。 |
callyamada4, callatke, callemis, gwd_convective_source |
logical saved module variables | 18-20 | PBL/TKE、地表发射率反射项和重力波源相关开关。 |
semi, fixed_euv_value, euveff, tke_heat_flux |
real saved module variables | 23-31 | 半隐式辐射权重、EUV 强迫和 TKE 热通量参数。 |
coeff_injection, ti_injection, tf_injection, coeff_detrainment, CLFfixval |
real saved module variables | 32-40 | 尘埃注入时窗/系数、rocket dust 脱轨系数、固定云分数值。 |
iaervar, iradia, ilwd, ilwb, ilwn, solvarmod, solvaryear, dustinjection |
integer saved module variables | 43-58 | 尘埃场景选择、辐射调用/长波更新频率、太阳 EUV 变化模式和尘埃注入方案号。 |
rayleigh, scavenging, rdstorm, topflows, dust_coagulation |
logical saved module variables | 60-68 | 短波瑞利散射、水冰洗脱、rocket dust、山顶尘流和尘埃凝并开关。 |
water, activice, microphys, supersat, sedimentation, CLFvarying |
logical saved module variables | 70-97 | 水循环、水冰辐射活性、微物理、过饱和、沉降和水云次网格云分数开关。 |
surfaceice_tifeedback, poreice_tifeedback, latentheat_surfwater |
logical saved module variables | 72-84 | 地表/孔隙冰热惯量反馈和地表水潜热反馈开关。 |
co2clouds, co2useh2o, meteo_flux, CLFvaryingCO2, satindexco2, activeco2ice, spantCO2 |
logical/integer saved module variables | 87-93 | CO2 云、H2O-CCN 混入、流星尘核、CO2 云分数/饱和指数、辐射活性 CO2 冰和 CO2 时间跨度控制。 |
hdo, hdofrac |
logical saved module variables | 99-101 | HDO 同位素及凝结分馏开关。 |
photochem, nltemodel, nircorr |
logical/integer saved module variables | 103-107 | 光化学、NLTE 模型选择和近红外修正模式。 |
dustiropacity, dustrefir |
character/real saved module variables | 104-107 | 尘埃红外不透明度配置字符串和尘埃红外参考波长。 |
swrtype |
integer parameter | 109 | 短波辐射方案选择常量;源码注释为 1: Fouquart, 2: Toon,本文件固定为 2。 |
依赖的模块
本文件没有 use 语句。
| use 模块 | only 列表 | 用途 | 待确认 |
|---|---|---|---|
| 无 | 无 | callkeys_mod 只声明共享变量,不依赖其他模块。 |
否 |
调用的关键例程
本文件没有 call 语句,也没有定义可被调用的例程。
| 被调用例程 | 所在模块 / 文件 | 调用位置 | 作用 |
|---|---|---|---|
| 无 | 无 | 无 | 本模块只提供共享状态。 |
输入
| 输入 | 来源 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
callphys.def.* 键值 |
conf_phys.F 通过 getin_p 写入 |
scalar logical/integer/real/character | 混合 | 运行时物理开关和参数来源;本文件不直接读取 def。 |
| restart / 初始化状态 | phyetat0_mod、phyredem、物理初始化链 |
saved module variables | 混合 | 部分开关决定 start/restart 字段是否读取或写出。 |
编译期常量 swrtype=2 |
本文件第 109 行 | integer parameter | - | 默认短波辐射传输类型,当前源码固定为 Toon。 |
输出
| 输出 | 去向 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
| 模块变量 | physiq_mod.F、callradite_mod.F、vdifc_mod.F、云/尘埃/CO2/高层大气模块 |
saved scalars | 混合 | 控制各物理分支是否执行以及关键参数取值。 |
dustiropacity, dustrefir |
suaer、辐射/尘埃路径 |
character/real | m 或配置字符串 | 选择尘埃红外光学参考设置。 |
iaervar, dustinjection, swrtype |
read_dust_scenario_mod、aeropacity_mod、尘埃注入/缩放路径 |
integer | - | 选择尘埃场景文件、注入方案和短波方案修正。 |
共享状态与副作用
- 本模块的核心副作用是提供全局可见的
SAVE状态。多数变量紧跟!$OMP THREADPRIVATE(...)指令,使 OpenMP 线程各自持有一份配置状态。 conf_phys.F是主要写入者:它从callphys.def风格配置读取并覆盖默认值,再写入这些模块变量。- 许多物理模块只读其中一小组变量,例如
watercloud_mod.F读取activice/microphys/supersat/hdo/scavenging/CLFvarying,updatereffrad_mod.F读取water/activice/microphys/rdstorm/topflows/co2clouds/activeco2ice/co2useh2o,vdif_cd_mod.F90读取callrichsl/callatke,read_dust_scenario_mod.F90读取iaervar/dustinjection/swrtype。 - 复现风险:如果并行初始化路径没有在每个 OpenMP 线程上正确传播这些
THREADPRIVATE值,后续物理分支可能在线程间不一致。
核心逻辑
- 声明
callkeys_mod模块并启用IMPLICIT NONE。 - 按物理主题声明
logical,save、real,save、integer,save和一个character(len=100),save状态变量。 - 紧随变量声明为 OpenMP
THREADPRIVATE,保证并行线程私有副本。 - 在文件尾部定义唯一编译期常量
swrtype=2,注明短波方案1=Fouquart, 2=Toon。
伪代码
module callkeys_mod:
declare saved logical switches for physics branches
mark each switch group threadprivate
declare saved real/integer/character runtime parameters
mark each parameter group threadprivate
define swrtype = 2
end module
参与的主题流程
| 主题 | 参与方式 |
|---|---|
| 辐射 | callrad、iradia、ilw*、rayleigh、swrtype、dustrefir、callnirco2、callnlte 等控制辐射频率、短波方案、气溶胶光学和 NLTE/NIR 路径。 |
| 尘埃循环 | iaervar、dustinjection、coeff_injection、ti_injection、tf_injection、rdstorm、topflows、dust_coagulation 等控制尘埃场景、注入、storm/top dust 和凝并路径。 |
| 水循环 | water、activice、microphys、supersat、scavenging、CLFvarying、latentheat_surfwater、surfaceice_tifeedback、poreice_tifeedback 等控制水汽/水冰、微物理、沉降洗脱和地表反馈路径。 |
| CO2 循环 | callcond、co2clouds、co2useh2o、meteo_flux、CLFvaryingCO2、satindexco2、activeco2ice 等控制 CO2 凝结、CO2 云微物理和 CO2 冰辐射路径。 |
| 边界层 / 湍流 / 坡面 | calldifv、callrichsl、callyamada4、callatke、tke_heat_flux、callslope 控制垂直扩散、稳定度函数、Yamada4/ATKE 和坡面路径。 |
| 高层大气 / 热层 | callthermos、callconduct、calleuv、callmolvis、callmoldiff、thermochem 控制热层传导、EUV、分子黏性/扩散和热层化学路径。 |
写法特点
- 这是纯状态模块,没有初始化例程;读者不能只看本文件判断运行默认值。
- 变量按历史功能追加排列,而不是按严格子系统拆成多个模块;因此同一模块被辐射、尘埃、水、CO2、PBL、高层大气和 restart 路径共同使用。
- 大量
THREADPRIVATE指令是复现关键点。串行复现只需关注变量值;OpenMP 复现还要关注每个线程的变量副本何时被初始化。
复现要点
- 复现实验配置时,应同时记录
callphys.def.*、conf_phys.F中的默认值/互斥检查,以及本模块的THREADPRIVATE状态。 swrtype在当前源码中是parameter,不是运行时getin_p开关;短波方案默认固定为 Toon,旧 Fouquart 路径依赖源码改动或历史分支。callkeys_mod只保存开关;具体数组维度、tracer 索引、辐射表和云微物理常数仍在各自模块中定义。- 若某个 downstream 页面说“来自 callkeys_mod”,应进一步查
conf_phys.F或对应 def 样例确认默认值和合法组合。
待确认
semi源码注释为! ?!?,本文件无法说明其物理含义;需结合conf_phys.F和长波半隐式路径确认。- 除
swrtype=2外,所有变量默认值不在本文件中定义;本页只记录声明位置和用途,不把conf_phys.F的默认值重写为本模块事实。
相关页面
- radiation 主题
- dust-cycle 主题
- water-cycle 主题
- co2-cycle 主题
- suaer - 读取
dustrefir作为尘埃类气溶胶红外参考波长。 - updatereffrad_mod - 读取水冰、CO2 冰、stormdust/topdust 分支开关。
- read_dust_scenario_mod - 读取
iaervar、dustinjection和swrtype。 - compute_dtau_mod - 读取尘埃注入时窗和系数。
- vdif_cd_mod - 读取
callrichsl和callatke。 - conf_phys - 主要写入本模块变量的配置入口,记录默认值、
getin_p读取路径和依赖校验。