scal_wind.F

路径

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

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

scal_wind 是 lon-lat 动力网格上的风场位置转换辅助例程。它把位于标量/源位置的水平风数组 xusxvs 通过相邻格点平均,转换到 u/v 风点位置 xuxv。当前唯一源码调用点是 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/cvucov/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 风点位置后的经向风

共享状态与副作用

核心逻辑

  1. 对每个垂直层 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)
  2. 对每个垂直层 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 风场提供网格位置转换步骤

写法特点

复现要点

待确认

相关页面