爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
12
返回列表 发新帖
楼主: baobaoniou2006

[求助] 求fortran 计算整层水汽通量的程序

[复制链接]

新浪微博达人勋

发表于 2017-4-17 20:51:27 | 显示全部楼层
同求啊,好纠结
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-20 10:59:25 | 显示全部楼层
grads就能算了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-24 16:34:46 | 显示全部楼层
同求同求同求
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-24 16:39:30 | 显示全部楼层
grads就能算了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-25 11:36:26 | 显示全部楼层
哪位大佬写一下啊求助啊啊啊{:eb302:}{:eb302:}{:eb302:}{:eb302:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-5 23:51:34 | 显示全部楼层
all.f90文档

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-5-5 23:51:59 | 显示全部楼层
grads 用vint
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 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

代码:该程序只有水汽通量计算,散度涡度读取部分程序可去
  1. program main
  2.   integer,parameter::nx=121,ny=37,nm=12,nz=6,nye=30
  3.   !deltaphi 经度间距  deltalam 纬度间距  a 地球半径
  4.   real,parameter::pi=3.14,deltaphi=2.5,deltalam=2.5,a=6371*10**3,g=9.8
  5.   !i_ '程序中数据维数  cc 高空第cc层,与cc0配合使用
  6.   integer ix,iy,iz,im,iye
  7.   real a0
  8.   character cc0(2)*4
  9.   data cc0/'850','700'/
  10.   real::cc(6)=(/1000,925,850,700,600,500/)
  11.   
  12.   ! u u风量   v v风量
  13.   ! T 温度   Td 露点  T_Td 温度露点差
  14.   ! e 实际水汽压  q 比湿
  15.   ! qu 水汽通量x分量   qv 水汽通量y分量
  16.   real u(nx,ny,nz,nm,nye),v(nx,ny,nz,nm,nye)
  17.   real q(nx,ny,nz,nm,nye)
  18.   
  19.   real qu(nx,ny,nz,nm,nye),qv(nx,ny,nz,nm,nye)
  20.   real quz(nx,ny,nz,nm),qvz(nx,ny,nz,nm)
  21.   real qua(nx,ny,nm),qva(nx,ny,nm),pu
  22.   real slp(nx,ny,nm,nye),slpz(nx,ny,nye)
  23.   !div_q 水汽通量散度  div_qu qu带来的散度  div_qv qv带来的散度  div_qr 曲率项
  24.   !vor_q 水汽通量涡度  vor_qu qu带来的涡度  vor_qv qv带来的涡度  vor_qr 曲率项
  25.   !lon 经度  lat 纬度
  26.   !deltax 经向距离间距  deltay 纬向距离间距)
  27.   real::div_q(nx,ny,nz,nm,nye)=-9.99e+33,vor_q(nx,ny,nz,nm,nye)=-9.99e+33
  28.   real::div_qa(nx,ny,nm,nye)=-9.99e+33,vor_qa(nx,ny,nm,nye)=-9.99e+33
  29.   real div_qu,div_qv,div_qr
  30.   real vor_qu,vor_qv,vor_qr
  31.   
  32.   real::lon(121)=(/((ix-1)*2.5+60,ix=1,nx)/),lat(37)=(/((iy-1)*2.5-10,iy=1,ny)/)
  33.   open(10,file='E:\datiao2\part4circulation\vaportrans\qV3.grd',form='binary')
  34.    do iye=1,30
  35.        do im=1,12
  36.        do iz=1,nz
  37.       read(10) ((qu(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
  38.        end do
  39.        do iz=1,nz
  40.       read(10) ((qv(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
  41.        end do
  42.        end do
  43.    enddo
  44.    close(10)
  45.    open(11,file='E:\datiao2\part4circulation\vaportrans\divvor_q8.grd',form='binary')
  46.    do iye=1,30
  47.      do im=1,12
  48.       do iz=1,nz
  49.       read(11) ((div_q(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
  50.       end do
  51.       do iz=1,nz
  52.       read(11) ((vor_q(ix,iy,iz,im,iye),ix=1,nx),iy=1,ny)
  53.       end do
  54.      end do
  55.    enddo
  56.    close(11)
  57.    div_q=div_q/10**8
  58.    vor_q=vor_q/10**8
  59.   open(12,file='E:\datiao2\part4circulation\vaportrans\slp.mon.mean.grd',form='binary')
  60.     read(12) a0
  61.   do iye=1,30
  62.      do im=1,12
  63.        read(12) ((slp(ix,iy,im,iye),ix=1,nx),iy=1,ny)
  64.      enddo
  65.   enddo
  66.   write(*,*) slp(1,1,1,1)
  67.   do ix=1,nx
  68.       do iy=1,ny
  69.           do iz=1,nz
  70.               do im=1,nm
  71.                   quz(ix,iy,iz,im)=sum(qu(ix,iy,iz,im,:))/nye
  72.                   qvz(ix,iy,iz,im)=sum(qv(ix,iy,iz,im,:))/nye
  73.                   slpz(ix,iy,im)=sum(slp(ix,iy,im,:))/nye
  74.               enddo
  75.           enddo
  76.       enddo
  77.   enddo
  78.   
  79.   
  80.       do im=1,nm
  81.           do iz=1,nz-1
  82.               do iy=1,ny
  83.                   do ix=1,nx
  84.                       if(iz==1.and.slpz(ix,iy,im)>1000) then
  85.                          pu=quz(ix,iy,iz,im)*(slpz(ix,iy,im)-cc(iz))*100
  86.                       else if(iz>1) then
  87.                           pu=quz(ix,iy,iz,im)*(cc(iz-1)-cc(iz))*100
  88.                       endif
  89.                       qua(ix,iy,im)=qua(ix,iy,im)+pu
  90.                   enddo
  91.               enddo
  92.           enddo
  93.       enddo
  94.   write(*,*) qua(:,:,1)

  95.       do im=1,nm
  96.           do iz=1,nz
  97.               do iy=1,ny
  98.                   do ix=1,nx
  99.                       if(iz==1.and.slpz(ix,iy,im)>1000) then
  100.                          pu=qvz(ix,iy,iz,im)*(slpz(ix,iy,im)-cc(iz))*100
  101.                       else if(iz>1) then
  102.                           pu=qvz(ix,iy,iz,im)*(cc(iz-1)-cc(iz))*100
  103.                       endif
  104.                       qva(ix,iy,im)=qva(ix,iy,im)+pu
  105.                   enddo
  106.               enddo
  107.           enddo
  108.       enddo

  109.   write(*,*) qva(:,:,1)
  110.   open(10,file='E:\datiao2\part4circulation\vaportrans\quva.grd',form='binary')
  111.        do im=1,12
  112.       write(10) ((qua(ix,iy,im),ix=1,nx),iy=1,ny)
  113.       write(10) ((qva(ix,iy,im),ix=1,nx),iy=1,ny)
  114.        end do
  115.    close(10)
  116.     end
  117.    


只积分到500hPa这个程序,无计算散度的,散度依然用到的是grads画出的

图的填充都是水汽通量散度,矢量箭头为水汽通量


图1.Fortran计算(ec.png)

图1.Fortran计算(ec.png)

图2.grads的vint

图2.grads的vint
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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