黄乾

个人信息

Personal information

副教授     硕士生导师
性别:男
主要任职:大气物理系主任
在职信息:在岗
所在单位:大气物理学院
学科:大气科学

办公地点:气象楼1001

教师博客

[模式学习]WRF的一些细节过程与技术
发布时间:2021-07-22  点击次数:



WRF主要模块调用顺序:

读初始场:input_input

物理过程初始化:phy_init

输出第一个时次的history文件

读入其它auxinput文件如wrflowinp

读入侧边界:input_boundary

开始积分


微物理过程调用在solve_em.F

其它物理过程调用在module_first_rk_step_part1.F

物理过程初始化在start_em.F


 


辐射方案中的外强迫情况:

在wrf3.8.1版本中:

1. aerosol.formatted只在RRTMG方案中使用

2. ozone.formatted在RRTMG和CAM方案中均用到

3. mp_physics=28, aer_opt=3 (RRTMG中使用IFA和WFA的直接辐射效应)


RRTMG中气溶胶过程:

1. module_physics_init.F中读入光学厚度数据(0.55um波段,需乘以每层气压厚度dpel才是真正的光学厚度),并进行空间插值,存于aerodm中

2. module_radiation_driver.F中,将aerodm进行时间插值,得到aerodt,再将其进行垂直插值,存于aerod,

并计算了所有物种和所有垂直层总的和aodtot(后面并未使用)

3. module_ra_rrtmg_sw.F中,将aerod赋于ecaer (aer_opt=1情形,iaer=6),并用于计算ztaua(总光学厚度), zasya(总非对称参数), zomga(总单次散射反照率),用于spcvmc_sw子程序计算短波辐射通量zbbfd等,进而用于rrtmg_sw计算swdflx等辐射通量。

4. iaer=10情形下,taua在inatm_sw中计算,由tauaer赋值,上一层来自tauaer3d_sw,更上一层来自tauaer_sw(radiation_driver),上一层来自于calc_aerosol_rrtmg_sw(module_ra_aerosol.F),对于aer_opt=3(mp=28)来说,则为qnwfa和qnifa所计算。


5. 当aer_opt=2时,tauaer是根据auxinput15中输入的aod5502d,angexp2d等进行计算(README.namelist中说从文件5读入,有误)。

6. 读入气溶胶数据的长波辐射效应可能没有考虑。


Solar constant:

phys/module_radiation_driver.F:

SUBROUTINE radconst(XTIME,DECLIN,SOLCON,JULIAN, DEGRAD,DPD )


Ozone:

module_ra_cam_support.F中读取数据ozone.formatted并水平插值(vmr)

cam: module_ra_cam.F中call ozninit, 并进行时间插值和垂直插值,o3vmr用于长波计算,o3mmr用于短波计算


RRTMG方案,module_physics_init.F中call oznini

module_radiation_driver.F中进行时间和垂直插值,o3rad用于长短波计算

o3input=2,读取ozone.formatted



CAM方案中气溶胶:


aerosolc_1: aerosolcp;aerosolc_2: aerosolcn,根据注册表中2个时次生成

num_aerosolc: 根据Registry生成


目前为根据类型给定一固定值的空间分布


 


侧边界中变量的剔除方法:

inc/scalar_indices.inc: scalar_boundary_table( idomain, P_qnwfa ) = .TRUE.

share/wrf_bdyout.f90: IF ( scalar_boundary_table(grid%id, itrace ) ) THEN …

main/real_em.F:

CALL output_input ( id1, grid , config_flags , ierr )

CALL output_boundary ( id, grid , config_flags , ierr )


frame/module_configure.F:

scalar_boundary_table( idomain, P_qnwfa ) = .false.

scalar_boundary_table( idomain, P_qnifa ) = .false.

dfi_scalar_boundary_table( idomain, P_dfi_qnwfa ) = .false.

dfi_scalar_boundary_table( idomain, P_dfi_qnifa ) = .false.


 


修改侧边界及模拟时间最大时长限制:

external/io_netcdf/wrf_io.F90: integer , parameter :: MaxTimes = 10000

external/io_pnetcdf/wrf_io.F90: integer , parameter :: MaxTimes = 10000


 


Registry中input和output文件:

i0: wrfinput

i1: met_em

i2, 3: used

i4: wrflowinp

i5-8, 12-15: chem

i9: wrfsfdda-grid nudging - surface

i10: wrffdda-grid nudging - 3d

i11: obs nudging

i16: IC:CG

17-24: 空闲


h0: wrfout

h1, 5: used

h2: afwa rainfall, afwa_diag_opt=1

h3: wrfxtrm, output_diagnostics = 1

h6: cam…

h22: &diag: z_lev_diag=1

h23: &diag: p_lev_diag=1


 


数组的维度:

ids,ide: domain

ims,ime: memory

ips,ipe: patch

its,ite: tile

im 包含tile+halo (im范围比patch大)

在纯mpi下,每个patch下1个tile时,ip和it是一致的

its=i_start(ij), jts=j_start(ij), 其中ij=1:num_tiles

i: west_east;j: south_north,k: bottom_top


 


时间变量:

ITIMESTEP, DT

xtime, julian, 模式运行当前的时间,已运行分钟数和当前的Julian天

JULYR,JULDAY,GMT: 模式开始运行时的值

GMT Greenwich Mean Time Hour of model start (hour)

JULDAY        the initial day (Julian day)

XTIME         time since simulation start (min)


CALL domain_clock_get( grid, current_time=currentTime, current_timestr=mesg )

CALL WRFU_TimeGet( currentTime, YY=yr, dayOfYear=day, H=hr, M=minute, S=sec, rc=rc)



WRF Error and Warning messages (1-999)

!All i/o package-specific status codes you may want to add must be handled by your package (see below)

! WRF handles these and netCDF messages only

integer, parameter :: WRF_NO_ERR = 0 !no error

integer, parameter :: WRF_WARN_FILE_NF = -1 !file not found, or incomplete

integer, parameter :: WRF_WARN_MD_NF = -2 !metadata not found

integer, parameter :: WRF_WARN_TIME_NF = -3 !timestamp not found

integer, parameter :: WRF_WARN_TIME_EOF = -4 !no more timestamps

integer, parameter :: WRF_WARN_VAR_NF = -5 !variable not found

integer, parameter :: WRF_WARN_VAR_EOF = -6 !no more variables for the current time

integer, parameter :: WRF_WARN_TOO_MANY_FILES = -7 !too many open files

integer, parameter :: WRF_WARN_TYPE_MISMATCH = -8 !data type mismatch

integer, parameter :: WRF_WARN_WRITE_RONLY_FILE = -9 !attempt to write readonly file

integer, parameter :: WRF_WARN_READ_WONLY_FILE = -10 !attempt to read writeonly file

integer, parameter :: WRF_WARN_FILE_NOT_OPENED = -11 !attempt to access unopened file

integer, parameter :: WRF_WARN_2DRYRUNS_1VARIABLE = -12 !attempt to do 2 trainings for 1 variable

integer, parameter :: WRF_WARN_READ_PAST_EOF = -13 !attempt to read past EOF

integer, parameter :: WRF_WARN_BAD_DATA_HANDLE = -14 !bad data handle

integer, parameter :: WRF_WARN_WRTLEN_NE_DRRUNLEN = -15 !write length not equal to training length

integer, parameter :: WRF_WARN_TOO_MANY_DIMS = -16 !more dimensions requested than training

integer, parameter :: WRF_WARN_COUNT_TOO_LONG = -17 !attempt to read more data than exists

integer, parameter :: WRF_WARN_DIMENSION_ERROR = -18 !input dimension inconsistent

integer, parameter :: WRF_WARN_BAD_MEMORYORDER = -19 !input MemoryOrder not recognized

integer, parameter :: WRF_WARN_DIMNAME_REDEFINED = -20 !a dimension name with 2 different lengths

integer, parameter :: WRF_WARN_CHARSTR_GT_LENDATA = -21 !string longer than provided storage

integer, parameter :: WRF_WARN_NOTSUPPORTED = -22 !function not supportable

integer, parameter :: WRF_WARN_NOOP = -23 !package implements this routine as NOOP


 


特定编译选项:

-DNO_LEAP_CALENDAR (无闰年)

-DCLWRFGHG (Ramped greenhouse gases)