爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6424|回复: 8

[源代码] 计算相对湿度的fortran问题

[复制链接]

新浪微博达人勋

发表于 2014-11-5 19:29:18 | 显示全部楼层 |阅读模式

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

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

x
今天有个工作要根据相对湿度计算湿球温度的问题,搜了一下论坛,看到了这个贴子

fortran编程 数组越界问题 编译的是湿球温度迭代算法 谁 帮帮我!!!
http://bbs.06climate.com/forum.p ... 8&fromuid=35781
(出处: 气象家园)


调试运行了一下,结果发现运行结果和实际的相差很大,就根据地面规范附2
  
附录2 湿度参量的计算公式
  
  
 
  
  
  
1、饱和水汽压
  
在一定温度下,空气中的水汽与相毗连的水或冰平面处于相变平衡时湿空气中的水汽压。
  
饱和水汽压采用世界气象组织推荐的戈夫-格雷奇(Goff-Gratch)公式。
  
⑴ 纯水平液面饱和水汽压的计算公式
  
logEW=10.79574(1-T1/T)-5.02800log(T/T1)+1.50475×10-4[1-10-8.2969(T/ T1-1)]+0.42873×10-3(104.76955(1-T1/T)-1)]+0.78614
  
  
式中,EW:纯水平液面饱和水汽压(hPa);T1=273.16K(水的三相点温度);T=273.15+t℃(绝对温度K)。
  
⑵ 纯水平冰面饱和水汽压的计算公式
  
LogEi=-9.09685[T1/(T-1)]-3.56654Log(T1/T)+0.87682[1-  T1/(T-1)]+0.78614
  
式中,Ei:水平冰面饱和水汽压(hPa);T1和T同上。
  
2、水汽压
  
⑴ 用干湿球温度求空气中水汽压的计算公式
  
e=Etw-APh(t-tw)
  
中,e:水汽压(hPa);Etw:湿球温度tw所对应的纯水平液面的饱和水汽压,湿球结冰且湿球温度低于0℃时,为纯水平冰面的饱和水汽压;A:干湿表系数(℃-1),由干湿表类型、通风速度及湿球结冰与否而定,其值见干湿表系数表;Ph:本站气压(hPa);t:干球温度(℃);tW:湿球温度(℃)。
  

  
  
  

  附表2.1 干湿表系数表
  
  
   
   

   
   
   
   
   
   
   
   
   
   
      

      
      
      
干湿表类型及通风速度
      
      

      
      
      
Ai×10-3(℃-1)
      
      

      
      
      
湿球未结冰
      
      

      
      
      
湿球结冰
      
      

      
      
      
通风干湿表(通风速度2.5m/s)
      
      

      
      
      
0.662
      
      

      
      
      
0.584
      
      

      
      
      
球状干湿表(通风速度0.4m/s)
      
      

      
      
      
0.857
      
      

      
      
      
0.756
      
      

      
      
      
柱状干湿表(通风速度0.4m/s)
      
      

      
      
      
0.815
      
      

      
      
      
0.719
      
      

      
      
      
现用百叶箱球状干湿表(通风速度0.8m/s)
      
      

      
      
      
0.7947
      
      

      
      
      
0.7947
      
   
   
  
⑵ 当使用湿敏电容、毛发表或湿度计等直接测得相对湿度时,由相对湿度求水汽压公式
  
   e=U×EW/100
    式中,U:相对湿度(%);e:水汽压(hPa);EW:干球温度t所对应的纯水平液面饱和水汽压(hPa)。
  
3、相对湿度
  
⑴ 使用干湿球温度表测湿时,空气中相对湿度的计算公式
  
     U=(E/EW)×100%
  
式中,U相对湿度(%);E水汽压(hPa);Ew干球温度t所对应的纯水平液面(或冰面)饱和水汽压(hPa)。
  
⑵ 使用毛发湿度表(计)测湿时,空气中相对湿度的计算公式
  
     Y=bo+b1X+b2X2+b3X3
  
式中,Y:经毛发湿度表(计)订正后的相对湿度(%);X:毛发湿度表(计)读数(%); bo、b1、b2、b3:回归多项式系数,即毛发湿度表(计)的订正系数。
  


想先用正推的办法算相对湿度,结果算出来 的相对湿度 水汽压 露点等都不对,我的代码如下:


  1. program mian
  2. !声明变量
  3. real::e !水汽压
  4. real::t !干球温度
  5. real::p !本站气压
  6. real,parameter::T1=273.16
  7. real::t0
  8. integer,parameter::N=1500
  9. real::tw(0:n) !湿球温度估算值序列
  10. real::etw,etw_g,etw_s !饱和水汽压
  11. !real,parameter::a=8.15*10**(-4)
  12. real,parameter::A=7.947*10**(-4)
  13. real::ej(0:n) !水汽压的计算值
  14. real::err(0:n) !计算误差
  15. real::ermin !计算误差的最小值

  16. real::u,t_g,t_s,td

  17. !输入变量
  18. write(*,*)"水汽压为"
  19. !read(*,*)e
  20. write(*,*)"干球温度为"
  21. !read(*,*)t
  22. write(*,*)"本站气压为"
  23. !read(*,*)p
  24. e=14.7
  25. t_g=25.5
  26. t_s=17.3
  27. !t_g=26.3
  28. !t_s=18.3
  29. !t_g=31.4
  30. !t_s=19.1
  31. P=998.6

  32. t0=273.15+t_s  !湿球
  33. etw_s=10**(10.79574*(1-T1/t0)-5.02800*log(t0/T1)+1.50475*(10**(-4))*(1-10**((-8.2969*(t0/T1-1))))+0.42873*(10**(-3))*(10**(4.76955*(1-T1/t0))-1)+0.78614)
  34. t0=273.15+t_g  !干球
  35. etw_g=10**(10.79574*(1-T1/t0)-5.02800*log(t0/T1)+1.50475*(10**(-4))*(1-10**((-8.2969*(t0/T1-1))))+0.42873*(10**(-3))*(10**(4.76955*(1-T1/t0))-1)+0.78614)
  36. e=etw_s-A*P*(t_g-t_s)
  37. td=(243.92*log(etw_g/6.1078))/(7.69-log(etw_g/6.1078))

  38. write(*,*)"=======\n湿球ETw="
  39. write(*,*)etw_s
  40. write(*,*)"=======\n干球ETw="
  41. write(*,*)etw_g
  42. write(*,*)"=======\n水汽压e="
  43. write(*,*)e

  44. u=(e/etw_g)*100
  45. write(*,*)"=======\n相对湿度u="
  46. write(*,*)u
  47. write(*,*)"=======\n露点温度="
  48. write(*,*)td

  49. stop
  50. end

各位大神看看哪里出了问题。



shiqiuTemper.f90

1.27 KB, 下载次数: 3, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2014-11-7 11:31:28 | 显示全部楼层
没人关注?自顶一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-11-8 18:30:51 | 显示全部楼层
怎么回事呢?大家对此不感兴趣?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-11-12 10:39:48 | 显示全部楼层
这个东西不是大家不感兴趣,而是太枯燥了。
建议自己再检查一下,逐步print出来,看看到底哪一步出错,可能容易一些。
单单从程序上面看,你能跑出来结果,就说明程序是通的。结果不对,只可能是过程算的不对,比如方程是否写错,参数是否带错,运算过程是否注意到IN规则,等等。把一些过程变量print出来看看,问题应该就能够解决了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-11-12 14:15:11 | 显示全部楼层
现在用的少了,不太记得了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-11-12 19:25:23 | 显示全部楼层
费了N多脑细胞,终于搞定了{:5_275:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-4-11 15:34:46 | 显示全部楼层
关注一下吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-6-25 08:30:11 | 显示全部楼层
请问楼主相对湿度直接*100就行了吗?不用输出百分号?
如果想把相对湿度按照70%这种形式输出来该怎么做呀?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-6-28 20:11:31 | 显示全部楼层
关注一下吧
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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