没有,但是同时给了我一个FOTRAN文件、可是完全看不懂
program read_arwpost
! compile with ifort -132 -convert big_endian -o read_arwpost.exe read_arwpost.f90
implicit none
integer,parameter:: nx=80,ny=80,nz=29,nt=769
real,parameter :: satm=101325., o3mw=48., so2mw=64., no2mw=46., nomw=30.
real,parameter :: vcons=2.996
real,allocatable :: T2(:,:),psfc(:,:),rh2(:,:),RAINC(:,:),RAINNC(:,:),u10m(:,:),v10m(:,:)
real,allocatable :: tc(:,:,:),pressure(:,:,:),rh(:,:,:),umet(:,:,:),vmet(:,:,:)
real,allocatable :: so4(:,:,:),nh4(:,:,:),no3(:,:,:),vocs(:,:,:), &
soaa(:,:,:),soab(:,:,:),oc(:,:,:),ec(:,:,:),soila(:,:,:)
real,allocatable :: so2(:,:,:),no2(:,:,:),no(:,:,:),o3(:,:,:),nh3(:,:,:),co(:,:,:), &
pm25(:,:,:),pm10(:,:,:)
real,allocatable :: ppm2ugm(:,:,:),bext(:,:,:),vis(:,:,:)
real,allocatable :: so4ave(:,:),nh4ave(:,:),no3ave(:,:),ecave(:,:),so2ave(:,:), &
no2ave(:,:),noave(:,:),pm25ave(:,:),pm10ave(:,:),visave(:,:)
integer :: i,j,k,t,irec,jrec
allocate(T2(nx,ny))
allocate(psfc(nx,ny))
allocate(rh2(nx,ny))
allocate(RAINC(nx,ny))
allocate(RAINNC(nx,ny))
allocate(u10m(nx,ny))
allocate(v10m(nx,ny))
allocate(tc(nx,ny,nz))
allocate(pressure(nx,ny,nz))
allocate(rh(nx,ny,nz))
allocate(umet(nx,ny,nz))
allocate(vmet(nx,ny,nz))
allocate(so4(nx,ny,nz))
allocate(nh4(nx,ny,nz))
allocate(no3(nx,ny,nz))
allocate(vocs(nx,ny,nz))
allocate(soaa(nx,ny,nz))
allocate(soab(nx,ny,nz))
allocate(oc(nx,ny,nz))
allocate(ec(nx,ny,nz))
allocate(soila(nx,ny,nz))
allocate(so2(nx,ny,nz))
allocate(no2(nx,ny,nz))
allocate(no(nx,ny,nz))
allocate(o3(nx,ny,nz))
allocate(nh3(nx,ny,nz))
allocate(co(nx,ny,nz))
allocate(pm25(nx,ny,nz))
allocate(pm10(nx,ny,nz))
allocate(ppm2ugm(nx,ny,nz))
allocate(bext(nx,ny,nz))
allocate(vis(nx,ny,nz))
allocate(so2ave(nx,ny))
allocate(no2ave(nx,ny))
allocate(noave(nx,ny))
allocate(so4ave(nx,ny))
allocate(nh4ave(nx,ny))
allocate(no3ave(nx,ny))
allocate(ecave(nx,ny))
allocate(pm25ave(nx,ny))
allocate(pm10ave(nx,ny))
allocate(visave(nx,ny))
ppm2ugm = 0.
irec = 0
jrec = 0
open(12,file='./result/2016_res.dat',form='unformatted',access='direct',recl=nx*ny)
open(88,file='2016_ncl.dat',form='unformatted',access='direct',recl=nx*ny)
open(21,file='so2.txt')
open(31,file='no2.txt')
open(41,file='o3.txt')
open(51,file='pm25.txt')
open(61,file='pm10.txt')
open(71,file='vis.txt')
open(81,file='no.txt')
do t=1,nt
print*,t
jrec=jrec+1
read(12,rec=jrec)((T2(i,j),i=1,nx),j=1,ny)
jrec=jrec+1
read(12,rec=jrec)((psfc(i,j),i=1,nx),j=1,ny)
jrec=jrec+1
read(12,rec=jrec)((RAINC(i,j),i=1,nx),j=1,ny)
jrec=jrec+1
read(12,rec=jrec)((RAINNC(i,j),i=1,nx),j=1,ny)
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((pm25(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((pm10(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((so2(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((no2(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((no(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((o3(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((nh3(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((co(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((vocs(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((so4(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((nh4(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((no3(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((soaa(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((soab(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((oc(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((ec(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((soila(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((pressure(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((tc(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((rh(i,j,k),i=1,nx),j=1,ny)
enddo
jrec=jrec+1
read(12,rec=jrec)((rh2(i,j),i=1,nx),j=1,ny)
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((umet(i,j,k),i=1,nx),j=1,ny)
enddo
do k=1,nz
jrec=jrec+1
read(12,rec=jrec)((vmet(i,j,k),i=1,nx),j=1,ny)
enddo
jrec=jrec+1
read(12,rec=jrec)((u10m(i,j),i=1,nx),j=1,ny)
jrec=jrec+1
read(12,rec=jrec)((v10m(i,j),i=1,nx),j=1,ny)
! change gas unit from ppmv to ug*m-3
ppm2ugm = pressure*1.e5/(satm*0.0821*(tc+273.15))
! so2=(so2*pressure*100.*so2mw)*1000./(satm*0.0821*(tc+273.15))
! no2=(no2*pressure*100.*no2mw)*1000./(satm*0.0821*(tc+273.15))
! no =(no *pressure*100.*nomw )*1000./(satm*0.0821*(tc+273.15))
! o3 =(o3 *pressure*100.*o3mw )*1000./(satm*0.0821*(tc+273.15))
so2=so2*so2mw*ppm2ugm
no2=no2*no2mw*ppm2ugm
no =no *nomw *ppm2ugm
o3 =o3 *o3mw*ppm2ugm
! compute visibility
! v=2.996/Bext ! or use 3.912 Chow et al. 2002
! Bext=0.003*f(RH)*{[SO4]+[NO3]+[NH4]}+0.004*[OM]+0.01*BC+0.0006*Coarse+0.001*Soil+A
! sulfate,nitrate,ammonia,organic matter,black carbon,coarse particle,
! soil-derive aerosols unit is ug/m3
! A=0.01 is a constant represents the scattering of clean air
bext=0.003*rh*(so4+no3+nh4)+0.004*(soaa+soab+oc)+0.01*ec &
+0.0006*(pm10-pm25)+0.001*soila+0.01
vis=2.996/bext
! compute monthly average concentration
if(t>=17 .and. t<=nt-8)then
so2ave (:,:) = so2ave (:,:) + so2 (:,:,1)
no2ave (:,:) = no2ave (:,:) + no2 (:,:,1)
noave (:,:) = noave (:,:) + no (:,:,1)
so4ave (:,:) = so4ave (:,:) + so4 (:,:,1)
nh4ave (:,:) = nh4ave (:,:) + nh4 (:,:,1)
no3ave (:,:) = no3ave (:,:) + no3 (:,:,1)
ecave (:,:) = ecave (:,:) + ec (:,:,1)
pm25ave(:,:) = pm25ave(:,:) + pm25(:,:,1)
pm10ave(:,:) = pm10ave(:,:) + pm10(:,:,1)
visave (:,:) = visave (:,:) + vis (:,:,1)
endif
! print*,T2(:,:)-273.15
! print*,o3(:,:,1)*1000.
! print*,v10m(:,:)
write(21,*)so2 (34,38,1)
write(31,*)no2 (34,38,1)
write(41,*)o3 (34,38,1)
write(51,*)pm25(34,38,1)
write(61,*)pm10(34,38,1)
write(71,*)vis (34,38,1)
write(81,*)no (34,38,1)
enddo
close(12)
so2ave = so2ave /745.
no2ave = no2ave /745.
noave = noave /745.
so4ave = so4ave /745.
nh4ave = nh4ave /745.
no3ave = no3ave /745.
ecave = ecave /745.
pm25ave = pm25ave /745.
pm10ave = pm10ave /745.
visave = visave /745.
! write the average results for ncl
irec=irec+1
write(88,rec=irec)((so2ave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((no2ave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((noave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((so4ave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((nh4ave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((no3ave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((ecave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((pm25ave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((pm10ave(i,j),i=1,nx),j=1,ny)
irec=irec+1
write(88,rec=irec)((visave(i,j),i=1,nx),j=1,ny)
close(88)
end program |