caldyn0.F
路径
LMDZ.MARS\libf\dynphy_lonlat\phymars\caldyn0.F
所属目录/模块
libf/dynphy_lonlat/phymars
文件定位
lon-lat GCM 动力倾向计算例程;由 newstart.F 调用,按顺序调用 13 个 EXTERNAL 子过程完成协变/反变风转换、气压计算、空气质量、质量通量、质量辐合、垂直速度、位涡、动能、Bernoulli 函数等,最终调 sortvarc0 输出诊断。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
caldyn0 |
subroutine | 1 | 动力倾向计算调度;依次调 13 个 EXTERNAL 子过程 |
依赖的模块
| use 模块 | only 列表 | 用途 | 待确认 |
|---|---|---|---|
comvert_mod |
ap, bp |
垂直 sigma-混合坐标参数,用于 pression 计算气压场 |
无 |
头文件
| 头文件 | 用途 |
|---|---|
dimensions.h |
网格维度参数(ip1jmp1, ip1jm, llm, llmp1, iip1, jjp1) |
paramet.h |
物理常量(constang 科氏参数等) |
comgeom.h |
几何参数(airesurg 格点面积等) |
调用的关键例程
| 被调用例程 | 所在模块/文件 | 调用位置 | 作用 |
|---|---|---|---|
covcont |
EXTERNAL | 行 60 | 协变→反变风分量转换 |
pression |
EXTERNAL | 行 61 | 由 ap, bp, ps 计算气压场 p |
psextbar |
EXTERNAL | 行 62 | 提取地表气压水平平均 psexbarxy |
massdair |
EXTERNAL | 行 63 | 计算空气质量 masse |
massbar |
EXTERNAL | 行 64 | 计算质量加权水平平均 massebx, masseby |
massbarxy |
EXTERNAL | 行 65 | 计算质量加权 xy 平均 massebxy |
flumass |
EXTERNAL | 行 66 | 计算质量通量 pbaru, pbarv |
convmass |
EXTERNAL | 行 67 | 计算质量辐合 convm |
vitvert |
EXTERNAL | 行 73 | 计算垂直速度 w |
tourpot |
EXTERNAL | 行 74 | 计算位涡 vorpot |
enercin |
EXTERNAL | 行 75 | 计算动能 ecin |
bernoui |
EXTERNAL | 行 76 | 计算 Bernoulli 函数 bern = phi + ecin |
sortvarc0 |
EXTERNAL | 行 84 | 输出/整理诊断变量 |
输入
| 输入 | 来源 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
itau |
newstart |
integer |
— | 时间步编号 |
ucov |
newstart |
real (ip1jmp1, llm) |
m/s | 协变纬向风 |
vcov |
newstart |
real (ip1jm, llm) |
m/s | 协变经向风 |
teta |
newstart |
real (ip1jmp1, llm) |
K | 位温 |
ps |
newstart |
real (ip1jmp1) |
Pa | 地表气压 |
masse |
newstart |
real (ip1jmp1, llm) |
kg | 空气质量(输入/输出) |
pk |
newstart |
real (iip1, jjp1, llm) |
— | Exner 函数 |
phis |
newstart |
real (ip1jmp1) |
m²/s² | 地表位势 |
time |
newstart |
real |
s | 模拟时间 |
输出(内部计算,传给 sortvarc0)
| 输出 | 去向 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
phi |
sortvarc0 |
real (ip1jmp1, llm) |
m²/s² | 位势 |
w |
sortvarc0 |
real (ip1jmp1, llm) |
Pa/s | 垂直速度 |
pbaru |
sortvarc0 |
real (ip1jmp1, llm) |
— | 纬向质量通量 |
pbarv |
sortvarc0 |
real (ip1jm, llm) |
— | 经向质量通量 |
vorpot |
sortvarc0 |
real (ip1jm, llm) |
s⁻¹ | 位涡 |
bern |
sortvarc0 |
real (ip1jmp1, llm) |
m²/s² | Bernoulli 函数 |
dp |
sortvarc0 |
real (ip1jmp1) |
Pa | 底层质量辐合/面积 |
共享状态与副作用
- 通过头文件
comgeom.h读取airesurg(格点面积)和constang(科氏参数)。 - 通过
comvert_mod::ap, bp读取垂直坐标参数。 EXTERNAL子过程(advect,traceur等)通过EXTERNAL声明但部分未在本例程体中直接调用。
核心逻辑
风分量转换(行 60):
covcont把协变风ucov, vcov转换为反变风ucont, vcont。气压与质量计算(行 61-66):
pression由ap, bp, ps算气压p;psextbar提取地表气压水平平均;massdair计算空气质量;massbar/massbarxy计算质量加权水平平均;flumass计算质量通量。质量辐合与底层气压倾向(行 67-71):
convmass计算质量辐合convm,底层dp = convm(1)/airesurg。垂直速度、位涡、动能、Bernoulli(行 73-76):依次计算
w,vorpot,ecin,bern = phi + ecin。绝对涡度(行 78-82):
ang = ucov + constang(相对涡度 + 科氏参数)。诊断输出(行 84-85):
sortvarc0收集所有诊断变量输出。
伪代码
covcont(ucov, vcov) -> ucont, vcont
pression(ap, bp, ps) -> p
psextbar(ps) -> psexbarxy
massdair(p) -> masse
massbar(masse) -> massebx, masseby
massbarxy(masse) -> massebxy
flumass(massebx, masseby, vcont, ucont) -> pbaru, pbarv
convmass(pbaru, pbarv) -> convm
for each grid point ij:
dp(ij) = convm(ij, 1) / airesurg(ij)
vitvert(convm) -> w
tourpot(vcov, ucov, massebxy) -> vorpot
enercin(vcov, ucov, vcont, ucont) -> ecin
bernoui(phi, ecin) -> bern
for each (ij, l):
ang(ij, l) = ucov(ij, l) + constang(ij)
sortvarc0(itau, ucov, teta, ps, masse, pk, phis, vorpot, phi, bern, dp, time, vcov)
参与的主题流程
| 主题 | 参与方式 |
|---|---|
| 动力核心 | 计算 lon-lat GCM 动力倾向;由 newstart 在时间循环中调用 |
写法特点
- 固定格式 Fortran(
.F),续行符$。 - 独立子程序(非 module),通过
EXTERNAL声明引用 13 个子过程。 - 使用头文件(
dimensions.h,paramet.h,comgeom.h)定义网格和物理常量。 - 部分
EXTERNAL声明(advect,traceur)在例程体中未被直接调用,可能为遗留声明。 - 数组维度由头文件宏定义(
ip1jmp1,ip1jm,llm等)。
复现要点
- 需要
comvert_mod::ap, bp已初始化。 - 需要头文件提供正确的网格维度参数。
newstart.F行 2005 为唯一调用方。- 所有
EXTERNAL子过程需在同一链接中可用。 sortvarc0负责最终诊断输出,需确认其具体行为。
待确认
EXTERNAL声明中的advect和traceur是否曾在本例程中被调用或仅为遗留声明。sortvarc0的具体输出行为(诊断文件/XIOS)。massbar和massbarxy的精确差异。- 与 GCM 动力核心(
dynzon或dissip)的关系。
相关页面
- newstart:调用方,写出
restart.nc前调用本例程计算动力辅助量 - dynphy_lonlat/index