iniphysiq_mod.F90

路径

LMDZ.MARS\libf\dynphy_lonlat\phymars\iniphysiq_mod.F90

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

iniphysiq_mod 是 lon-lat GCM 物理初始化的主入口模块。它封装 iniphysiq 子程序,依次完成几何初始化、物理状态变量分配、几何三角函数缓存填充和物理配置读取,在动力核心启动后为物理包做好全部共享状态准备。

定义的符号

符号 类型 行号 作用
iniphysiq_mod module 1 封装 iniphysiq 子程序的容器模块
iniphysiq subroutine 5 物理初始化主入口:几何→状态变量→三角缓存→配置读取

依赖的模块

use 模块 only 列表 用途 待确认
infotrac nqtot 平流 tracer 总数
temps_mod day_ini, day_end, hour_ini 运行起止日和初始时刻
inigeomphy_mod inigeomphy COMMON 几何初始化(网格分发、面积计算),见 common-dependencies
comgeomfi_h ini_fillgeom 填充 sinlat/coslat/sinlon/coslon 三角缓存
geometry_mod cell_area, longitude, latitude 物理网格面积和经纬度
phys_state_var_init_mod phys_state_var_init 分配并初始化 phymars 共享状态数组
mod_phys_lmdz_para klon_omp OpenMP 子网格列数
conf_phys_mod conf_phys 读取物理配置(callphys.def 等)

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
inigeomphy inigeomphy_mod 行 57 初始化物理网格分发、面积、经纬度(跨 MPI 进程)
phys_state_var_init phys_state_var_init_mod 行 71 分配 phymars 共享状态数组、写入物理常数和轨道参数
ini_fillgeom comgeomfi_h 行 75 latitude/longitude 填充 sinlat/coslat/sinlon/coslon 缓存
conf_phys conf_phys_mod 行 78 读取 callphys.def/run.def 物理配置键并写入共享状态

输入

输入 来源 类型/维度 单位 含义
ii 动力核心 INTEGER 经度方向格点数
jj 动力核心 INTEGER 纬度方向格点数
nlayer 动力核心 INTEGER 垂直层数
nbp MPI 分发 INTEGER 当前 MPI 进程物理列数
communicator MPI INTEGER MPI 通信器
rlatudyn 动力核心 REAL(jj+1) rad U 点纬度
rlatvdyn 动力核心 REAL(jj) rad V 点纬度
rlonudyn 动力核心 REAL(ii+1) rad U 点经度
rlonvdyn 动力核心 REAL(ii+1) rad V 点经度
airedyn 动力核心 REAL(ii+1,jj+1) 动力网格面积
cudyn 动力核心 REAL((ii+1)*(jj+1)) U 协变/反变转换系数
cvdyn 动力核心 REAL((ii+1)*jj) V 协变/反变转换系数
prad 常量 REAL m 行星半径
pg 常量 REAL m/s² 重力加速度
pr 常量 REAL J/(kg·K) 折合气体常数 R/μ
pcpp 常量 REAL J/(kg·K) 定压比热
punjours 常量 REAL s 一个标准日长度
pdayref 运行配置 INTEGER day 参考日
ptimestep 运行配置 REAL s 物理时间步长
iflag_phys 运行配置 INTEGER 物理调用类型标志

输出

输出 去向 类型/维度 单位 含义
共享状态 geometry_mod/comgeomfi_h/phymars 各模块 全部物理初始化状态写入各共享模块

共享状态与副作用

核心逻辑

  1. 通用几何初始化:调用 inigeomphy 把动力核心的网格维度、经纬度、面积和转换系数分发到物理包,建立 geometry_mod 中的 cell_area/longitude/latitude
  2. OpenMP 并行区进入:开启并行区,COPYIN temps_mod 的时间变量。
  3. 物理状态变量初始化:调用 phys_state_var_init,传入 klon_omp/nlayer/nqtot 和时间/物理常数,分配 phymars 所有共享状态数组(地表、土壤、tracer、云、辐射等)。
  4. 几何三角缓存填充:调用 ini_fillgeom,从 latitude/longitude 计算并缓存 sinlat/coslat/sinlon/coslon
  5. 物理配置读取:调用 conf_phys 读取 callphys.def 等配置键,写入各物理开关模块。
  6. OpenMP 并行区结束

伪代码

SUBROUTINE iniphysiq(网格维度, MPI, 经纬度, 面积, 转换系数, 物理常数, 时间步长, ...)
  ! 第一阶段:通用几何初始化(跨 MPI)
  CALL inigeomphy(ii, jj, nlayer, nbp, communicator, 经纬度, 面积, cu/cv)

  ! 第二阶段:OpenMP 并行区
  !$OMP PARALLEL COPYIN(day_ini, day_end, hour_ini)
    CALL phys_state_var_init(klon_omp, nlayer, nqtot, 时间, 物理常数)
    CALL ini_fillgeom(klon_omp, latitude, longitude, cell_area)
    CALL conf_phys(klon_omp, nlayer, nqtot)
  !$OMP END PARALLEL
END SUBROUTINE

参与的主题流程

主题 参与方式
物理初始化 GCM 启动后为物理包分配全部共享状态、填充几何缓存和读取配置
独立物理模式 (nogcm) nogcm.F90 直接调用 iniphysiq 初始化 1D 列模型物理状态
归档输出 start2archive.F 调用 iniphysiq 确保物理网格已初始化后再转换归档

写法特点

复现要点

待确认

相关页面