scal_wind.F
路径
LMDZ.MARS\libf\dynphy_lonlat\phymars\scal_wind.F
所属目录/模块
libf/dynphy_lonlat/phymars
文件定位
scal_wind 是 lon-lat 动力网格上的风场位置转换辅助例程。它把位于标量/源位置的水平风数组 xus、xvs 通过相邻格点平均,转换到 u/v 风点位置 xu、xv。当前唯一源码调用点是 lect_start_archive.F:读取并垂直、水平插值 uold/vold 后,调用 scal_wind(us,vs,unat,vnat),再用 cu/cv 转成协变风 ucov/vcov。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
scal_wind |
subroutine |
1 |
把 xus/xvs 平均到 u/v 风点位置,输出 xu/xv |
依赖的模块
无 USE 模块依赖。
INCLUDE 依赖
| include 文件 |
行号 |
用途 |
dimensions.h |
15 |
提供 iim/jjm/llm 等网格维度 |
paramet.h |
16 |
提供派生维度 iip1/jjp1 等 |
comgeom.h |
17 |
当前例程内未直接引用其中变量;推断为历史/接口一致性依赖 |
调用的关键例程
无外部 CALL。本例程只做数组平均和周期边界赋值。
调用方
| 调用方 |
调用位置 |
用途 |
lect_start_archive.F |
行 1563 |
start_archive 读取阶段,把插值后的 us/vs 转到自然风点 unat/vnat,随后乘 cu/cv 得 ucov/vcov |
输入
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
xus |
参数 |
real(iip1,jjp1,llm) |
与风速一致 |
待转换的纬向风场,定义在输入网格位置 |
xvs |
参数 |
real(iip1,jjp1,llm) |
与风速一致 |
待转换的经向风场,定义在输入网格位置 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
xu |
参数 |
real(iip1,jjp1,llm) |
与 xus 相同 |
平均到 u 风点位置后的纬向风 |
xv |
参数 |
real(iip1,jjm,llm) |
与 xvs 相同 |
平均到 v 风点位置后的经向风 |
共享状态与副作用
- 不读写 module 变量或 common block。
- 不做文件 I/O、日志输出或错误中止。
- 输出数组
xu/xv 被完全重写;xus/xvs 只读。
核心逻辑
- 对每个垂直层
l=1..llm、纬向行 j=1..jjp1:
- 对
i=1..iim,计算 xu(i,j,l)=0.5*(xus(i,j,l)+xus(i+1,j,l))。
- 设置周期边界
xu(iip1,j,l)=xu(1,j,l)。
- 对每个垂直层
l=1..llm、经向行 j=1..jjm、经向列 i=1..iip1:
- 计算
xv(i,j,l)=0.5*(xvs(i,j,l)+xvs(i,j+1,l))。
伪代码
for l in 1..llm:
for j in 1..jjp1:
for i in 1..iim:
xu(i,j,l) = 0.5 * (xus(i,j,l) + xus(i+1,j,l))
xu(iip1,j,l) = xu(1,j,l)
for l in 1..llm:
for j in 1..jjm:
for i in 1..iip1:
xv(i,j,l) = 0.5 * (xvs(i,j,l) + xvs(i,j+1,l))
参与的主题流程
| 主题 |
参与方式 |
| start_archive 初始场读取 |
lect_start_archive 读取风场并插值后,用 scal_wind 生成自然风点风速,再转成协变风 |
| 动力-物理初始化 |
为 newstart 初始化出来的 ucov/vcov 风场提供网格位置转换步骤 |
写法特点
- 固定格式 Fortran,使用
#include 引入网格维度。
- 无
INTENT 标注,接口语义需从赋值方向判断:xus/xvs 只读,xu/xv 写入。
- 纬向风
xu 显式设置经向周期边界;经向风 xv 不设置 j=jjp1 行,因为维度为 jjm。
comgeom.h 被 include 但本例程未直接引用其变量,可能是历史保留。
复现要点
xus 的第一维必须至少包含 iip1=iim+1,因为计算 xu(i) 会读取 xus(i+1)。
xvs 的第二维必须至少包含 jjp1=jjm+1,因为计算 xv(j) 会读取 xvs(j+1)。
- 调用方在
lect_start_archive 中随后执行 ucov=unat*cu、vcov=vnat*cv;scal_wind 本身不做 metric 系数缩放。
待确认
comgeom.h 在本例程中的实际必要性待确认;源码中未直接使用其变量。
相关页面