MCV影像区交换功能¶
影像区交换功能是MCV并行软件框架核心功能。MCV模式采用空间区域分解的MPI并行实现,带来所谓的影像区(halo)更新需求。为了保证每个进程使用的影像区内数值与邻居进程计算区域一致,必须在计算区域值发生变化后进行影像区更新。
MCV影像区交换功能能够支持全球立方球网格和区域经纬度网格。立方球网格每个面内部的影像区更新与经纬度网格类似,除此之外,立方球网格还需要处理面边界插值和面重叠边一致性需求。
MCV模式并行软件框架开发了以下接口满足不同的影像区交换功能。
| 接口程序 | 用途 |
|---|---|
| bch_scalar | 单个标量影像区交换 |
| bch_vector | 水平向量影像区交换 |
| bch | 动力预报变量影像区交换 |
| bch_moist | 示踪物变量影像区交换 |
| bcorrection | 动力预报变量面重叠区一致性修正 |
| bcorrection_moist | 示踪物面重叠区一致性修正 |
| exchange_patch_halo | 立方球面边界影像区更新 |
接口说明¶
bch_scalar¶
功能:单个标量类型变量的影像区交换。对于MCV全球模式,除了常规影像区更新,包括立方球面边界影像区插值更新处理。
实现接口
subroutine bch_scalar(qt,gl,jm,coord,qh)
type(gloc),intent(in) :: gl
type(jame),intent(in) :: jm
type(cord),intent(in) :: coord
real,dimension(gp%kms:gp%kme,gp%ims:gp%ime,gp%jms:gp%jme,gp%fms:gp%fme) :: qt
type(cell),target,optional,intent(in) :: qh
参数含义:
gl: 立方球网格面边界halo点信息
jm: 坐标雅可比和度量项
coord: 计算网格坐标
qt: 标量类型的影像区交换变量
qh: 可选参数,交换变量对应的参考廓线平均态,如果参数存在表示,表示热力学变量在面边界插值前需要先扣除平均态,使用扰动态进行处理
示例:
call bch_scalar(qs%pv,gl,jm,coord)
bch_vector¶
功能:水平矢量类型变量的影像区交换。对于MCV全球模式,除了常规影像区更新,包括立方球面边界影像区插值更新处理。
实现接口
subroutine bch_vector(qt,gl,jm,coord,using_buffer)
type(gloc),intent(in) :: gl
type(jame),intent(in) :: jm
type(cord),intent(in) :: coord
type(cell),dimension(2),target,intent(inout) :: qt
logical,intent(in), optional :: using_buffer
参数含义:
gl: 立方球网格面边界halo点信息
jm: 坐标雅可比和度量项
coord: 计算网格坐标
qt: 水平矢量分量影像区交换变量,cell派生类型数据
using_buffer: 可选参数,是否使用内部注册缓冲进行交换。如存在且为
.true.,表示qt变量没有经过C-Coupler注册,使用内部注册变量bch_buffer进行影像区交换示例:
call bch_vector(qvec(2:3),gl,jm,coord,using_buffer=.true.)
bch¶
功能:多个变量打包影像区交换。对于MCV全球模式,除了常规影像区更新,包括立方球面边界影像区插值更新处理。
实现接口
subroutine bch(qt,gl,jm,coord,nvar,using_buffer,disable_patch_bound,var_type,qh)
integer,intent(in) :: nvar
type(gloc),intent(in) :: gl
type(jame),intent(in) :: jm
type(cord),intent(in) :: coord
type(cell),dimension(nvar),target,intent(inout) :: qt
logical,intent(in), optional :: using_buffer
logical,intent(in), optional :: disable_patch_bound
integer,intent(in), optional :: var_type
type(cell),dimension(nvar),target,optional,intent(in) :: qh
参数含义:
nvar: 影像区交换变量数目
gl: 立方球网格面边界halo点信息
jm: 坐标雅可比和度量项
coord: 计算网格坐标
qt: 影像区交换变量,cell派生类型数据
using_buffer: 可选参数,是否使用内部注册缓冲进行交换。如存在且为
.true.,表示qt变量没有经过C-Coupler注册,使用内部注册变量bch_buffer进行影像区交换disable_patch_bound: 可选参数,如存在且为
.true.,表示不对立方球面边界进行插值处理var_type: 可选参数,如果参数存在,当值为1时,表示交换变量中第2和3个变量为矢量分量,其它为标量;当值为2时,表示所有交换变量为标量类型
qh: 可选参数,参考廓线平均态,如果参数存在表示,表示热力学变量在面边界插值前需要先扣除平均态,使用绕动态进行处理
示例
call bch(qt,gl,jm,coord,nvar,qh=qh)
call bch(diffq,gl,jm,coord,nvar,using_buffer=.true.,var_type=2)
bch_moist¶
功能:多示踪物类型变量打包影像区交换。对于MCV全球模式,除了常规影像区更新,包括立方球面边界影像区插值更新处理。
实现接口
subroutine bch_moist(qt,q,gl,jm,coord,nvar,ntracer)
integer,intent(in) :: nvar
integer,intent(in) :: ntracer
type(gloc),intent(in) :: gl
type(jame),intent(in) :: jm
type(cord),intent(in) :: coord
type(cell),dimension(nvar),intent(in) :: q
type(cell),dimension(ntracer),intent(inout) :: qt
参数含义:
nvar: 动力预报变量数目
ntracer: 示踪物类型影像区交换变量数目
gl: 立方球网格面边界halo点信息
jm: 坐标雅可比和度量项
coord: 计算网格坐标
qt: 示踪物类型影像区交换变量,cell派生类型数据
q: 动力预报变量,辅助示踪物变量进行影像区交换处理
示例
call bch_moist(qmoist,qt,gl,jm,coord,nvar,ntracer)
bcorrection¶
功能:用于MCV全球立方球网格动力预报变量的面重叠边一致性处理。
实现接口
subroutine bcorrection(qvar,coord,nvar)
integer,intent(in) :: nvar
type(cord),intent(in) :: coord
type(cell),dimension(nvar),intent(inout) :: qvar
参数含义:
nvar: 动力预报变量数目
coord: 计算网格坐标
qvar: 面重叠边一致性处理的预报变量
示例
call bcorrection(rqht,coord,nvar)
bcorrectio_moist¶
功能:用于MCV全球立方球网格示踪物类型变量的面重叠边一致性处理。
实现接口
subroutine bcorrection_moist(qvar,coord,nvar,min_max_label)
integer,intent(in) :: nvar
type(cord),intent(in) :: coord
type(cell),dimension(nvar),intent(inout) :: qvar
integer,intent(in),optional :: min_max_label
参数含义:
nvar:示踪物变量数目
coord: 计算网格坐标
qvar: 面重叠边一致性处理的示踪物变量
min_max_label: 可选参数,缺省面重叠边一致性处理采用代数平均操作,如参数存在,当值为1时表示采用绝对值最小一致性操作;当值为2时表示采用绝对值最大一致性操作。
示例
call bcorrection_moist(qmt,coord,ntracer)
call bcorrection_moist(qmt,coord,ntracer,1)
exchange_patch_halo¶
功能:立方球面边界角落影像区更新。
实现接口
subroutine exchange_patch_halo(qt,nvar)
integer,intent(in) :: nvar
type(cell),dimension(nvar),target,intent(inout) :: qt
参数含义:
nvar: 变量数目
qt: 立方球面边界角落影像区更新变量。
示例
call exchange_patch_halo(qvarp,nvar)