/[lmdze]/trunk/Sources/phylmd/CV30_routines/cv30_prelim.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/CV30_routines/cv30_prelim.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/Sources/phylmd/CV3_routines/cv3_prelim.f revision 134 by guez, Wed Apr 29 15:47:56 2015 UTC trunk/Sources/phylmd/CV30_routines/cv30_prelim.f revision 201 by guez, Mon Jun 6 17:42:15 2016 UTC
# Line 1  Line 1 
1  module cv3_prelim_m  module cv30_prelim_m
2    
3    implicit none    implicit none
4    
5  contains  contains
6    
7    SUBROUTINE cv3_prelim(len, nd, ndp1, t, q, p, ph, lv, cpn, tv, gz, h, hm, th)    SUBROUTINE cv30_prelim(t1, q1, p1, ph1, lv1, cpn1, tv1, gz1, h1, hm1, th1)
8    
9      USE cv3_param_m, ONLY: nl      USE cv30_param_m, ONLY: nl
10      USE cvthermo, ONLY: cl, clmcpv, cpd, cpv, eps, lv0, rrd, rrv      USE cv_thermo_m, ONLY: clmcpv, eps
11        USE dimphy, ONLY: klev, klon
12        use SUPHEC_M, only: rcw, rlvtt, rcpd, rcpv, rd, rv
13    
14      ! Calculate arrays of geopotential, heat capacity and static energy      ! Calculate arrays of geopotential, heat capacity and static energy
15    
16      integer, intent(in):: len, nd, ndp1      real, intent(in):: t1(:, :) ! (klon, klev) temperature, in K
17      real, intent(in):: t(len, nd)      real, intent(in):: q1(:, :) ! (klon, klev) specific humidity
18      real, intent(in):: q(len, nd)      real, intent(in):: p1(:, :) ! (klon, klev) full level pressure, in hPa
19      real, intent(in):: p(len, nd), ph(len, ndp1)      real, intent(in):: ph1(:, :) ! (klon, klev + 1) half level pressure, in hPa
20    
21      ! outputs:      ! outputs:
22      real lv(len, nd), cpn(len, nd), tv(len, nd)  
23      real gz(len, nd), h(len, nd), hm(len, nd)      real, intent(out):: lv1(:, :) ! (klon, nl)
24      real th(len, nd)      ! specific latent heat of vaporization of water, in J kg-1
25        
26        real, intent(out):: cpn1(:, :) ! (klon, nl)
27        ! specific heat capacity at constant pressure of humid air, in J K-1 kg-1
28    
29        real tv1(:, :) ! (klon, klev)
30        real gz1(klon, klev), h1(klon, klev), hm1(klon, klev)
31        real, intent(out):: th1(:, :) ! (klon, nl) potential temperature, in K
32    
33      ! Local:      ! Local:
34      integer k, i      integer k, i
35      real rdcp      real kappa
36      real tvx, tvy      real tvx, tvy
37      real cpx(len, nd)      real cpx(klon, klev)
38    
39      !--------------------------------------------------------------      !--------------------------------------------------------------
40    
41      do k=1, nl      do k = 1, nl
42         do i=1, len         do i = 1, klon
43            lv(i, k)= lv0-clmcpv*(t(i, k)-273.15)            lv1(i, k) =  rlvtt - clmcpv * (t1(i, k) - 273.15)
44            cpn(i, k)=cpd*(1.0-q(i, k)) + cpv*q(i, k)            cpn1(i, k) = rcpd * (1. - q1(i, k)) + rcpv * q1(i, k)
45            cpx(i, k)=cpd*(1.0-q(i, k)) + cl*q(i, k)            cpx(i, k) = rcpd * (1. - q1(i, k)) + rcw * q1(i, k)
46            tv(i, k)=t(i, k)*(1.0 + q(i, k)/eps-q(i, k))            tv1(i, k) = t1(i, k) * (1. + q1(i, k) / eps - q1(i, k))
47            rdcp=(rrd*(1.-q(i, k)) + q(i, k)*rrv)/cpn(i, k)            kappa = (rd * (1. - q1(i, k)) + q1(i, k) * rv) / cpn1(i, k)
48            th(i, k)=t(i, k)*(1000.0/p(i, k))**rdcp            th1(i, k) = t1(i, k) * (1000. / p1(i, k))**kappa
49         end do         end do
50      end do      end do
51    
52      ! gz = phi at the full levels (same as p).      ! gz1 = phi at the full levels (same as p1).
53    
54      do i=1, len      do i = 1, klon
55         gz(i, 1)=0.0         gz1(i, 1) = 0.
56      end do      end do
57    
58      do k=2, nl      do k = 2, nl
59         do i=1, len         do i = 1, klon
60            tvx=t(i, k)*(1. + q(i, k)/eps-q(i, k))            tvx = t1(i, k) * (1. + q1(i, k) / eps - q1(i, k))
61            tvy=t(i, k-1)*(1. + q(i, k-1)/eps-q(i, k-1))            tvy = t1(i, k - 1) * (1. + q1(i, k - 1) / eps - q1(i, k - 1))
62            gz(i, k)=gz(i, k-1) + 0.5*rrd*(tvx + tvy) &            gz1(i, k) = gz1(i, k - 1) + 0.5 * rd * (tvx + tvy) &
63                 *(p(i, k-1)-p(i, k))/ph(i, k)                 * (p1(i, k - 1) - p1(i, k)) / ph1(i, k)
64         end do         end do
65      end do      end do
66    
67      ! h = phi + cpT (dry static energy).      ! h1 = phi + cpT (dry static energy).
68      ! hm = phi + cp(T-Tbase) + Lq      ! hm1 = phi + cp(T1 - Tbase) + Lq
69    
70      do k=1, nl      do k = 1, nl
71         do i=1, len         do i = 1, klon
72            h(i, k)=gz(i, k) + cpn(i, k)*t(i, k)            h1(i, k) = gz1(i, k) + cpn1(i, k) * t1(i, k)
73            hm(i, k)=gz(i, k) + cpx(i, k)*(t(i, k)-t(i, 1)) + lv(i, k)*q(i, k)            hm1(i, k) = gz1(i, k) + cpx(i, k) * (t1(i, k) - t1(i, 1)) &
74                   + lv1(i, k) * q1(i, k)
75         end do         end do
76      end do      end do
77    
78    end SUBROUTINE cv3_prelim    end SUBROUTINE cv30_prelim
79    
80  end module cv3_prelim_m  end module cv30_prelim_m

Legend:
Removed from v.134  
changed lines
  Added in v.201

  ViewVC Help
Powered by ViewVC 1.1.21