- 积分
- 45254
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-8-28
- 最后登录
- 1970-1-1
|
发表于 2013-3-31 13:06:45
|
显示全部楼层
zmok 发表于 2013-3-31 10:10
我正在用C++写,但不知道如何实现那个公式,您有相关的建议吗?
C++自从学完考完试之后就没再用过了,我都是用fortran的,C++和fortran应该还是有相似之处吧。我有fortran的公式,发上来你看一下吧。
计算比湿
!======== t,td => specific humidity:
DO IT=1,NT
DO IZ=1,NZ
do ix=1,NX
do iy=1,NY
if(temper(ix,iy,iz,it).ge.-15)then
AA=17.2693882
BB=35.86
elseif(temper(ix,iy,iz,it).le.-40)then
AA=21.8745584
BB=7.66
else !!!! ?????????????????????????????????????
AA=21.8745584+(17.2693882-21.8745584)/(-15-(-40.))*(temper(ix,iy,iz,it)-(-40))
BB=7.66+(35.86-7.66)/(-15-(-40.))*(temper(ix,iy,iz,it)-(-40))
endif
EE=6.1078*exp( AA*(temper(ix,iy,iz,it)-ttd(ix,iy,iz,it))/(273.16+(temper(ix,iy,iz,it) &
-ttd(ix,iy,iz,it))-BB) )
q(ix,iy,iz,it)=622.*EE/(P(iz)-0.378*EE)
enddo
enddo
ENDDO
ENDDO
!=====t => T:
temper=temper+273.16
计算水汽通量和水汽通量散度
!############### vapor flux & vapor flux divergence ##################
adq =1.e+36
adqv=1.e+36
qu=1.e+36
qv=1.e+36
DO IT=1,nt
DO IZ=1,nz
DO i=1+1,NX-1
DO j=1+1,NY-1
qv(i,j,iz,it)=q(i,j,iz,it)*v(i,j,iz,it)/9.8
qu(i,j,iz,it)=q(i,j,iz,it)*u(i,j,iz,it)/9.8
adq(i,j,iz,it)=u(i,j,iz,it)*((q(i+1,j,iz,it)-q(i-1,j,iz,it))/(2*R*cos(lat(j))*Delta*pi/180)) + &
v(i,j,iz,it)*((q(i,j+1,iz,it)-q(i,j-1,iz,it))/(2*R*Delta*pi/180))
adqv(i,j,iz,it)=(q(i,j,iz,it)*div(i,j,iz,it)+adq(i,j,iz,it))*1e5/9.8
ENDDO
ENDDO
ENDDO
ENDDO
|
|