登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有人告诉我这个程序的目的是干什么的么???
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
|