euvheat.F90

路径

LMDZ.MARS\libf\aeronomars\euvheat.F90

所属目录/模块

libf\aeronomars

文件定位

euvheat.F90 定义 euvheat_mod,提供热层 EUV 吸收加热例程 euvheat。它在 thermosphere_modcalleuv 分支下逐格点调用:先用输入温度/示踪物及其当前倾向外推到时间步末,再把质量混合比转换成数密度矩阵 rm,调用 hrtherm 得到每层总光吸收 jtot,最后用 callkeys_mod::euveffcpnew/rnew/pplay/ztjtot 换算为温度倾向 pdteuv

该文件处在 thermosphere_mod -> euvheat -> hrtherm -> jthermcalc_e107 链路中;thermosphere_mod 随后把 pdteuv 累加回 pdt,且热传导 conduction 会看到已包含 EUV 的预测温度。

定义的符号

符号 类型 行号 作用
euvheat_mod module 1(END MODULE 454) 包装 EUV 加热例程
euvheat subroutine 7(END SUBROUTINE 452) 计算 EUV 加热温度倾向 pdteuv(ngrid,nlayer)
i_co2..i_n2 integer parameters 86-102 热层化学/EUV 物种槽位,源码要求与 chemthermos.F90hrtherm.F 等保持一致
nespeuv,euvmod,rm,g_*,firstcall saved local state 63, 66, 67, 123-143, 145 首次调用缓存物种数、EUV 模式、数密度矩阵和 GCM tracer 索引

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod igcm_co2, igcm_co, igcm_o, igcm_o1d, igcm_o2, igcm_h, igcm_h2, igcm_oh, igcm_ho2, igcm_h2o2, igcm_h2o_vap, igcm_o3, igcm_n2, igcm_n, igcm_no, igcm_no2, igcm_n2d, mmol 读取 GCM tracer 索引和摩尔质量,用于检查必须物种并把质量混合比转为数密度 traceur.def 中具体 tracer 顺序由 tracer_mod/initracer 路径决定
conc_mod rnew, cpnew 用比气体常数和定压比热计算密度与 K/s 温度倾向 -
hrtherm_mod hrtherm 计算每层总光吸收 jtot -
callkeys_mod euveff EUV 加热效率,参与 pdteuv 换算 其配置读取在 conf_phys,本页只记录消费点

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
hrtherm hrtherm_mod / hrtherm.F 430 按太阳天顶角、日期、温度和数密度计算 jtot(nlayer);夜间返回 0

输入

输入 来源 类型/维度 单位 含义
ngrid,nlayer,nq thermosphere_mod integer - 水平格点数、层数、tracer 数
pt thermosphere_mod real (ngrid,nlayer) K 当前温度
pdt thermosphere_mod real (ngrid,nlayer) K/s 已有温度倾向,用于外推 zt=pt+pdt*ptimestep
pplev,pplay thermosphere_mod real (ngrid,nlayer+1) / (ngrid,nlayer) Pa 界面/层中压力;pplev 传入但本例程不直接使用
zzlay thermosphere_mod real (ngrid,nlayer) m 层中高度,转为 km 传给 hrtherm
mu0 thermosphere_mod real (ngrid) - 太阳天顶角余弦,转换为角度 zenit
ptimestep thermosphere_mod real s 物理时间步
zday thermosphere_mod real sol 自 Ls=0 起的日期,传给 hrtherm
pq,pdq thermosphere_mod real (ngrid,nlayer,nq) kg/kg_air, kg/kg_air/s 当前 tracer 质量混合比及倾向,用于外推 zq=pq+pdq*ptimestep
rnew,cpnew conc_mod real (ngrid,nlayer) J/kg/K, J/kg/K 比气体常数和定压比热
euveff callkeys_mod real - EUV 加热效率
mmol tracer_mod real (nq) g/mol 或源码约定 各 tracer 摩尔质量,用于数密度换算

输出

输出 去向 类型/维度 单位 含义
pdteuv thermosphere_mod real (ngrid,nlayer) K/s EUV 加热温度倾向;thermosphere_mod 第 86 行把它累加进 pdt

共享状态与副作用

核心逻辑

  1. 首次调用初始化(第 150-359 行):读取 GCM tracer 索引,按源码硬编码物种槽位检查必需物种;默认 euvmod=0,O3 存在后设为 1,NO 存在后设为 2 并启用 N 族检查;按 euvmod 校验 nespeuv 为 11/12/17。
  2. 构造时间步末局地状态(第 364-392 行):对参与物种做 zq=pq+pdq*ptimestep;温度做 zt=pt+pdt*ptimestep。若 euvmod 越界则打印并 stop
  3. 逐格点准备辐射输入(第 395-428 行):zenit=acos(mu0)*180/pi;密度 dens=pplay/(rnew*zt)/1.66e-21;把各物种质量混合比除以 mmol 后填入 rm(l,i_*);高度 zzlay 转为 km,温度拷贝到 tx
  4. 调用光吸收核(第 430 行):call hrtherm(ig,nlayer,euvmod,rm,nespeuv,tx,zlocal,zenit,zday,jtot),得到每层 jtot。夜间置零由 hrtherm 内部处理。
  5. 换算温度倾向(第 440-442 行):pdteuv=euveff*jtot/10/(cpnew*pplay/(rnew*zt))。源码注释说明太阳距离修正不在这里乘,因为 flujo.F 中的太阳通量已修正。

伪代码

euvheat(...):
  if firstcall:
    read required tracer indexes from tracer_mod
    stop if mandatory C/O/H/O3 species are missing
    if NO exists:
      euvmod=2 and require N2/N/NO2/N2D
    else:
      euvmod=1 after mandatory O3 check
    check nespeuv count; allocate rm(nlayer,nespeuv); firstcall=false

  for each layer and grid:
    zq(selected tracers) = pq + pdq*ptimestep
    zt = pt + pdt*ptimestep

  for each grid column:
    zenit = acos(mu0)*180/pi
    for each layer:
      dens = pplay/(rnew*zt)/1.66e-21
      rm(:, selected species) = zq*density/mmol
      tx = zt
      zlocal = zzlay/1000
    call hrtherm(..., rm, tx, zlocal, zenit, zday, jtot)
    for each layer:
      pdteuv = euveff*jtot/10/(cpnew*pplay/(rnew*zt))

参与的主题流程

主题 参与方式
热层 EUV 加热 thermosphere_modcalleuv 下调用本例程,本例程输出 zdteuv/pdteuv 并由调用方累加到温度倾向
热层化学/光吸收 使用与 chemthermos.F90hrtherm.F 一致的物种槽位,向 hrthermjthermcalc_e107 链路提供数密度输入
热层过程耦合顺序 thermosphere_mod 先累加 EUV 倾向,再进入 callconduct 热传导、callmolvis 分子黏性和 callmoldiff 分子扩散路径

写法特点

复现要点

待确认

相关页面