wind_scal.F

路径

LMDZ.MARS\libf\dynphy_lonlat\phymars\wind_scal.F

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

wind_scal 是 lon-lat 动力网格上的风场位置转换辅助例程。它把输入的 zonal/meridional 风或质量通量 pbaru/pbarv 平均回标量格点数组 us/vs:zonal 分量沿经向相邻点平均并设置周期边界,meridional 分量沿纬向相邻点平均并把南北极行置零。当前源码调用方是 start2archive,用于把 covnat 生成的自然风 un/vn 转为可写入 start_archive.nc 的标量格点风 us/vs

定义的符号

符号 类型 行号 作用
wind_scal subroutine 1 pbaru/pbarv 平均到标量格点,输出 us/vs

依赖的模块

USE 模块依赖。

include 依赖

include 用途
dimensions.h 提供 iim/jjm/llm 等基本维度。
paramet.h 提供 ip1jmp1/ip1jm/iip1/iip2/jjp1 等派生维度。
comgeom.h 本例程未直接引用其中变量;可能为历史接口保留。

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
SCOPY BLAS/外部向量拷贝例程 行 31 us(iip1,j,l) 周期边界列复制到 us(1,j,l),步长为 iip1

调用方

调用方 调用位置 作用
start2archive start2archive.F:277 covnat(llm,ucov,vcov,un,vn) 后调用 wind_scal(un,vn,us,vs),把自然风转换到标量格点并写入 archive。

输入

输入 来源 类型/维度 单位 含义
pbaru 参数 REAL(ip1jmp1,llm) 与风速或通量一致 zonal 分量输入,start2archive 中为自然风 un
pbarv 参数 REAL(ip1jm,llm) 与风速或通量一致 meridional 分量输入,start2archive 中为自然风 vn

输出

输出 去向 类型/维度 单位 含义
us 参数 REAL(ip1jmp1,llm) pbaru 相同 标量格点上的 zonal 风。
vs 参数 REAL(ip1jmp1,llm) pbarv 相同 标量格点上的 meridional 风,南北极行置零。

共享状态与副作用

核心逻辑

  1. 对每个垂直层 l=1..llm,对线性索引 ij=2..ip1jmp1,计算 us(ij,l)=0.5*(pbaru(ij,l)+pbaru(ij-1,l))
  2. 调用 SCOPY(jjp1*llm,us(iip1,1),iip1,us(1,1),iip1),把每一纬圈最后一个经向点复制到第一个经向点,保证周期边界。
  3. 对每个垂直层,在线性索引 ij=iip2..ip1jm 上计算 vs(ij,l)=0.5*(pbarv(ij,l)+pbarv(ij-iip1,l)),即沿纬向相邻 v 点平均。
  4. 对每个垂直层和 ij=1..iip1,将第一行 vs(ij,l) 与最后一行 vs(ip1jm+ij,l) 设为 0。

伪代码

for l in 1..llm:
    for ij in 2..ip1jmp1:
        us(ij,l) = 0.5 * (pbaru(ij,l) + pbaru(ij-1,l))
copy us(iip1,j,l) to us(1,j,l) for all j,l

for l in 1..llm:
    for ij in iip2..ip1jm:
        vs(ij,l) = 0.5 * (pbarv(ij,l) + pbarv(ij-iip1,l))
    for i in 1..iip1:
        vs(i,l) = 0
        vs(ip1jm+i,l) = 0

参与的主题流程

主题 参与方式
start/startfi 到 start_archive 转换 start2archive 写 archive 前,用本例程把自然风转为标量格点风变量 u/v
风场位置转换 scal_wind 方向相反:scal_wind 从标量/源位置平均到 u/v 风点,本例程从 u/v 自然风位置平均回标量格点。

写法特点

复现要点

待确认

相关页面