File indexing completed on 2018-03-02 18:40:22 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
7274bff031 Andr*0001 #include "FIZHI_OPTIONS.h"
3768927683 Andr*0002 subroutine rayleigh(myid,pres,pkap,pekap,zsurf,u,v,t,s,im,jm,lm,
0003 . bi,bj,rfu,rfv,rft)
7274bff031 Andr*0004
0005
0006
740d8136ce Andr*0007
7274bff031 Andr*0008
0009
3768927683 Andr*0010
0011
7274bff031 Andr*0012
3768927683 Andr*0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
7274bff031 Andr*0024
0025
3768927683 Andr*0026
0027
0028
0029
7274bff031 Andr*0030
0031
0032
0033 implicit none
0034
0035 integer myid,im,jm,lm,bi,bj
aa1b3f6aa7 Andr*0036 _RL zsurf(im,jm),pres(im,jm,lm),pkap(im,jm,lm)
0037 _RL pekap(im,jm,lm+1)
3768927683 Andr*0038 _RL u(im,jm,lm),v(im,jm,lm),t(im,jm,lm),s(im,jm,lm)
0039 _RL rfu(im,jm,lm),rfv(im,jm,lm),rft(im,jm,lm)
7274bff031 Andr*0040
0041 integer i,j,L
3768927683 Andr*0042 _RL rf(im,jm,lm)
0043 _RL z(im,jm,lm)
0044 _RL dz(im,jm,lm)
740d8136ce Andr*0045 _RL cpog, cpinv, virtcon, getcon, dampcoef
8b150b4af9 Andr*0046 #ifdef ALLOW_DIAGNOSTICS
0047 logical diagnostics_is_on
0048 external diagnostics_is_on
0049 _RL tmpdiag(im,jm)
0050 #endif
7274bff031 Andr*0051
0052
3768927683 Andr*0053
7274bff031 Andr*0054
0055
3768927683 Andr*0056 cpog = getcon('CP')/getcon('GRAVITY')
7274bff031 Andr*0057 cpinv = 1.0/getcon('CP')
3768927683 Andr*0058 virtcon = getcon('VIRTCON')
740d8136ce Andr*0059 dampcoef = 2./3.
7274bff031 Andr*0060
0061 do L=1,lm
3768927683 Andr*0062 do j=1,jm
0063 do i=1,im
0064 dz(i,j,L) = cpog * (pekap(i,j,L+1)-pekap(i,j,L)) * t(i,j,L) *
0065 . (1.+virtcon*s(i,j,L))
0066 enddo
0067 enddo
7274bff031 Andr*0068 enddo
0069
0070 do j=1,jm
0071 do i=1,im
3768927683 Andr*0072 z(i,j,lm) = zsurf(i,j) + 0.5 * dz(i,j,lm)
7274bff031 Andr*0073 enddo
0074 enddo
0075
3768927683 Andr*0076 do L=lm-1,1,-1
0077 do j=1,jm
0078 do i=1,im
0079 z(i,j,L) = z(i,j,L+1) + 0.5 * (dz(i,j,L)+dz(i,j,L+1))
0080 enddo
0081 enddo
7274bff031 Andr*0082 enddo
3768927683 Andr*0083
0084 do L=1,lm
0085 do j=1,jm
0086 do i=1,im
8d9e124bb0 Andr*0087 rf(i,j,L) = dampcoef*(1+tanh((z(i,j,L)-50000.)/5000.))/86400.
3768927683 Andr*0088 rfu(i,j,L) = - rf(i,j,L) * u(i,j,L)
0089 rfv(i,j,L) = - rf(i,j,L) * v(i,j,L)
0090 rft(i,j,L) = -(u(i,j,L)*rfu(i,j,L) + v(i,j,L)*rfv(i,j,L) )*cpinv
0091 . /pkap(i,j,L)
0092 enddo
0093 enddo
7274bff031 Andr*0094 enddo
0095
3768927683 Andr*0096 #ifdef ALLOW_DIAGNOSTICS
0097 do L=1,lm
8b150b4af9 Andr*0098
0099 if(diagnostics_is_on('RFU ',myid) ) then
3768927683 Andr*0100 do j=1,jm
0101 do i=1,im
8b150b4af9 Andr*0102 tmpdiag(i,j) = rfu(i,j,L)*86400
3768927683 Andr*0103 enddo
0104 enddo
1486b197e2 Andr*0105
8b150b4af9 Andr*0106 endif
3768927683 Andr*0107
8b150b4af9 Andr*0108 if(diagnostics_is_on('RFV ',myid) ) then
3768927683 Andr*0109 do j=1,jm
0110 do i=1,im
8b150b4af9 Andr*0111 tmpdiag(i,j) = rfv(i,j,L)*86400
3768927683 Andr*0112 enddo
0113 enddo
1486b197e2 Andr*0114
8b150b4af9 Andr*0115 endif
3768927683 Andr*0116
8b150b4af9 Andr*0117 if(diagnostics_is_on('RFT ',myid) ) then
3768927683 Andr*0118 do j=1,jm
0119 do i=1,im
8b150b4af9 Andr*0120 tmpdiag(i,j) = rft(i,j,L)*86400
3768927683 Andr*0121 enddo
0122 enddo
1486b197e2 Andr*0123
3768927683 Andr*0124 endif
8b150b4af9 Andr*0125
0126 enddo
3768927683 Andr*0127 #endif
7274bff031 Andr*0128
0129 return
0130 end