- 积分
- 2910
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-9-28
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 哈米波波 于 2017-11-19 03:36 编辑
目前看到的都是全球的数据pre+convert_emiss。 有没有把一种污染物的格点数据转成二进制,再转成wrf-chem可用的emission么?convert_emis.F里包含的包含的污染物来源和种类还有格式多样,有没有单一的转化程序?
自问自答吧,自己做的尝试
https://www.acom.ucar.edu/wrf-chem/download.shtml用这里的anthro_emiss貌似可以,不过要把数据转成nc格式,目前尝试的是把数据做成全球的。
之后就参考README文件里的说明进行操作,还是很清楚的,如果./make_anthro不成,可能需要chmod +x make_anthro转化一下,成执行文件,之后添加wrfinput文件,nc格式的排放数据,还有参考mozcart.inp文件,新建自己的anthro_emis.inp文件,如果选择的是diurnal的,之后./anthro_emis < anthro_emis.inp,就会生成wrfchemi_00z_d01...后面还在尝试放到wrf-chem里可不可以run成功。(过程中参考了emission_guide和https://www2.acom.ucar.edu/sites ... WRFchemTutorial.pdf)
把txt转成nc,根据网上的进行了修改http://blog.sina.com.cn/s/blog_03f96e310106iin5.html,生成了三维数据。
program simple_xy_wr
use netcdf
implicit none
! 定义数据文件的名称
character(len = *), parameter :: FILE_NAME = "simple_xy.nc"
character(len = *), parameter :: filepm = "gridtest20152.txt"
character(len = *), parameter :: fileday = "day.txt"
character(len = *), parameter :: filelat = "lat.txt"
character(len = *), parameter :: filelon = "lon.txt"
! 写一个1*161*261的三维数据
integer, parameter :: NDIMS = 3
integer, parameter :: NT =1, NX =161, NY =261
! 当创建netCDF文件的时候变量和维数都有一个对应的ID
integer :: ncid, varid, varid2, varid3,&
varid4, dimids(NDIMS)
integer :: t_dimid, x_dimid, y_dimid
! 要保存到文件的数据数组
real, dimension(:), allocatable :: date
real, dimension(:,:,:), allocatable :: data_out
real, dimension(:), allocatable :: lat
real, dimension(:), allocatable :: lon
real, dimension(:,:,:), allocatable :: datapm
integer t, x, y
! 为数据数组分配内存
allocate(data_out(NY,NX,NT))
allocate(datapm(NY,NX,NT))
allocate(date(NT))
allocate(lat(NX))
allocate(lon(NY))
!读数据
open(1,file=trim(fileday),status='old',action='read')
read(1,*) date
close(1)
!--read emission data
open(2,file=trim(filepm),status='old',action='read')
read (2,*) datapm
do t =1,NT
do x=1,NX
do y=1, NY
data_out(y,x,t) = datapm(y,x,t)
end do
end do
end do
close(2)
open(3,file=trim(filelat),status='old',action='read')
read(3,*) lat
close(3)
open(4,file=trim(filelon),status='old',action='read')
read(4,*) lon
close(4)
! 创建netCDF文件返回文件对应的ID如果存在则覆盖check子程序存 检验执行是否成功
call check( nf90_create(FILE_NAME, NF90_CLOBBER, ncid) )
! 定义维数返回一个对应的ID
call check( nf90_def_dim(ncid, "t", NT, t_dimid) )
call check( nf90_def_dim(ncid, "x", NX, x_dimid) )
call check( nf90_def_dim(ncid, "y", NY, y_dimid) )
! 把上面得到的ID写到一个存放ID的数组里注意在fortran中数组是里 为主存放数据的
dimids = (/ y_dimid, x_dimid, t_dimid /)
! 定义变量返回一个对应的ID
call check( nf90_def_var(ncid, "data", NF90_REAL, dimids, varid) )
call check( nf90_def_var(ncid, "lat", NF90_REAL, x_dimid, varid2) )
call check( nf90_def_var(ncid, "lon", NF90_REAL, y_dimid, varid3) )
call check( nf90_def_var(ncid, "date", NF90_REAL, t_dimid, varid4) )
! 定义完成关闭定义模式
call check( nf90_enddef(ncid) )
! 写入数据
call check( nf90_put_var(ncid, varid, data_out ) )
call check( nf90_put_var(ncid, varid2, lat ) )
call check( nf90_put_var(ncid, varid3, lon ) )
call check( nf90_put_var(ncid, varid4, date ) )
! 关闭文件
call check( nf90_close(ncid) )
!提示写文件成功
print *, "*** SUCCESS writing example file simple_xy.nc! "
contains
subroutine check(status)
integer, intent ( in) :: status
if(status /= nf90_noerr) then
print *, trim(nf90_strerror(status))
stop 2
end if
end subroutine check
end program simple_xy_wr
|
|