爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4190|回复: 13

[求助] 老师发了个FORTRAN程序给我,可是看不懂。

[复制链接]

新浪微博达人勋

发表于 2015-5-1 21:45:42 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-1 21:45:58 | 显示全部楼层
学渣真是看哭了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-2 06:34:49 | 显示全部楼层
不至于吧  这明显是处理WRF-ArwPost的dat文件    本科生做论文吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-2 07:24:06 | 显示全部楼层
学习了!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-5-2 08:59:17 | 显示全部楼层
这么简单的程序…
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-2 10:01:53 | 显示全部楼层
火_旦 发表于 2015-5-2 06:34
不至于吧  这明显是处理WRF-ArwPost的dat文件    本科生做论文吗?

是的,fortran已经忘得差不多了。。从这个文件可以看出处理出的dat文件的格式么?因为dat数据也已经给我了。所以我在思考给我fortran程序目的在哪里
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-2 12:52:26 | 显示全部楼层
谢谢楼主分享,学习了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-4 17:24:37 | 显示全部楼层
谢谢楼主分享,学习了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-5 10:40:41 | 显示全部楼层
学渣真的也是看哭。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-5 20:39:05 | 显示全部楼层
火_旦 发表于 2015-5-2 06:34
不至于吧  这明显是处理WRF-ArwPost的dat文件    本科生做论文吗?

大神问件事儿噢。。。我写出来的so2.txt等等一系列,显示的数字都是1.2834267E-22等等特别小或者特别大的科学计数的数字。。那是我的程序出问题?还是dat文件有问题?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表