- 积分
- 1228
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-6-17
- 最后登录
- 1970-1-1
|
发表于 2020-2-16 18:33:58
|
显示全部楼层
2020,拜蝙蝠所赐,以及不停的用Fortran和grads,写了这个代码,只是量值在某些地区略微有些不对,在定量研究上可能是需要改进的,不是很麻烦的话建议用grads与ncl等好了。
写在前面:
1.各位科研党,经过多张图计算,可以不必计算整层水汽通量,只画850hPa就好了,首先水汽输送都集中在低层,850hPa的图与整层的图在亚洲东部除量级不同外长的和双胞胎一样,而且画图也只是一个辅助你说明的东西,本人个人认为还是少点事只画850好
本人参照南信大PPT以及http://bbs.06climate.com/forum.p ... B%B2%E3%CB%AE%C6%FB
水汽通量单位相关http://bbs.06climate.com/forum.p ... 0&fromuid=44552
代码:该程序只有水汽通量计算,散度涡度读取部分程序可去
- program main
- integer,parameter::nx=121,ny=37,nm=12,nz=6,nye=30
- !deltaphi 经度间距 deltalam 纬度间距 a 地球半径
- real,parameter::pi=3.14,deltaphi=2.5,deltalam=2.5,a=6371*10**3,g=9.8
- !i_ '程序中数据维数 cc 高空第cc层,与cc0配合使用
- integer ix,iy,iz,im,iye
- real a0
- character cc0(2)*4
- data cc0/'850','700'/
- real::cc(6)=(/1000,925,850,700,600,500/)
-
- ! u u风量 v v风量
- ! T 温度 Td 露点 T_Td 温度露点差
- ! e 实际水汽压 q 比湿
- ! qu 水汽通量x分量 qv 水汽通量y分量
- real u(nx,ny,nz,nm,nye),v(nx,ny,nz,nm,nye)
- real q(nx,ny,nz,nm,nye)
-
- real qu(nx,ny,nz,nm,nye),qv(nx,ny,nz,nm,nye)
- real quz(nx,ny,nz,nm),qvz(nx,ny,nz,nm)
- real qua(nx,ny,nm),qva(nx,ny,nm),pu
- real slp(nx,ny,nm,nye),slpz(nx,ny,nye)
- !div_q 水汽通量散度 div_qu qu带来的散度 div_qv qv带来的散度 div_qr 曲率项
- !vor_q 水汽通量涡度 vor_qu qu带来的涡度 vor_qv qv带来的涡度 vor_qr 曲率项
- !lon 经度 lat 纬度
- !deltax 经向距离间距 deltay 纬向距离间距)
- real::div_q(nx,ny,nz,nm,nye)=-9.99e+33,vor_q(nx,ny,nz,nm,nye)=-9.99e+33
- real::div_qa(nx,ny,nm,nye)=-9.99e+33,vor_qa(nx,ny,nm,nye)=-9.99e+33
- real div_qu,div_qv,div_qr
- real vor_qu,vor_qv,vor_qr
-
- real::lon(121)=(/((ix-1)*2.5+60,ix=1,nx)/),lat(37)=(/((iy-1)*2.5-10,iy=1,ny)/)
- open(10,file='E:\datiao2\part4circulation\vaportrans\qV3.grd',form='binary')
- do iye=1,30
- do im=1,12
- do iz=1,nz
- read(10) ((qu(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
- end do
- do iz=1,nz
- read(10) ((qv(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
- end do
- end do
- enddo
- close(10)
- open(11,file='E:\datiao2\part4circulation\vaportrans\divvor_q8.grd',form='binary')
- do iye=1,30
- do im=1,12
- do iz=1,nz
- read(11) ((div_q(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
- end do
- do iz=1,nz
- read(11) ((vor_q(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
- end do
- end do
- enddo
- close(11)
- div_q=div_q/10**8
- vor_q=vor_q/10**8
- open(12,file='E:\datiao2\part4circulation\vaportrans\slp.mon.mean.grd',form='binary')
- read(12) a0
- do iye=1,30
- do im=1,12
- read(12) ((slp(ix,iy,im,iye),ix=1,nx),iy=1,ny)
- enddo
- enddo
- write(*,*) slp(1,1,1,1)
- do ix=1,nx
- do iy=1,ny
- do iz=1,nz
- do im=1,nm
- quz(ix,iy,iz,im)=sum(qu(ix,iy,iz,im,:))/nye
- qvz(ix,iy,iz,im)=sum(qv(ix,iy,iz,im,:))/nye
- slpz(ix,iy,im)=sum(slp(ix,iy,im,:))/nye
- enddo
- enddo
- enddo
- enddo
-
-
- do im=1,nm
- do iz=1,nz-1
- do iy=1,ny
- do ix=1,nx
- if(iz==1.and.slpz(ix,iy,im)>1000) then
- pu=quz(ix,iy,iz,im)*(slpz(ix,iy,im)-cc(iz))*100
- else if(iz>1) then
- pu=quz(ix,iy,iz,im)*(cc(iz-1)-cc(iz))*100
- endif
- qua(ix,iy,im)=qua(ix,iy,im)+pu
- enddo
- enddo
- enddo
- enddo
- write(*,*) qua(:,:,1)
- do im=1,nm
- do iz=1,nz
- do iy=1,ny
- do ix=1,nx
- if(iz==1.and.slpz(ix,iy,im)>1000) then
- pu=qvz(ix,iy,iz,im)*(slpz(ix,iy,im)-cc(iz))*100
- else if(iz>1) then
- pu=qvz(ix,iy,iz,im)*(cc(iz-1)-cc(iz))*100
- endif
- qva(ix,iy,im)=qva(ix,iy,im)+pu
- enddo
- enddo
- enddo
- enddo
- write(*,*) qva(:,:,1)
- open(10,file='E:\datiao2\part4circulation\vaportrans\quva.grd',form='binary')
- do im=1,12
- write(10) ((qua(ix,iy,im),ix=1,nx),iy=1,ny)
- write(10) ((qva(ix,iy,im),ix=1,nx),iy=1,ny)
- end do
- close(10)
- end
-
只积分到500hPa这个程序,无计算散度的,散度依然用到的是grads画出的
图的填充都是水汽通量散度,矢量箭头为水汽通量
|
-
图1.Fortran计算(ec.png)
-
图2.grads的vint
|