WRF的一些细节过程与技术

Updated on Nov 9, 2017


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)