/[lmdze]/trunk/libf/phylmd/Conflx/flxini.f90
ViewVC logotype

Diff of /trunk/libf/phylmd/Conflx/flxini.f90

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

revision 70 by guez, Mon Jun 24 15:39:52 2013 UTC revision 71 by guez, Mon Jul 8 18:12:18 2013 UTC
# Line 4  module flxini_m Line 4  module flxini_m
4    
5  contains  contains
6    
7    SUBROUTINE flxini(pten, pqen, pqsen, pgeo, paph, pgeoh, ptenh, pqenh, &    SUBROUTINE flxini(ten, pqen, pqsen, pgeo, paph, pgeoh, ptenh, pqenh, &
8         pqsenh, ptu, pqu, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, pmfu, pmfus, &         pqsenh, ptu, pqu, ptd, pqd, mfd, pmfds, pmfdq, pdmfdp, mfu, mfus, &
9         pmfuq, pdmfup, pdpmel, plu, plude, klab,pen_u, pde_u, pen_d, pde_d)         mfuq, pdmfup, pdpmel, plu, plude, klab, pen_u, pde_u, pen_d, pde_d)
10    
11      ! This routine interpolates large-scale fields of T,q etc. to half      ! This routine interpolates large-scale fields of T, q etc. to
12      ! levels (i.e. grid for massflux scheme), and initializes values      ! half levels (i. e. grid for massflux scheme), and initializes
13      ! for updrafts.      ! values for updrafts.
14    
15      USE dimphy, ONLY: klev, klon      USE dimphy, ONLY: klev, klon
16      use flxadjtq_m, only: flxadjtq      use flxadjtq_m, only: flxadjtq
17      USE suphec_m, ONLY: rcpd      USE suphec_m, ONLY: rcpd
18    
19      REAL, intent(in):: pten(klon,klev)   ! temperature (environnement)      REAL, intent(in):: ten(klon, klev) ! temperature (environnement)
20      REAL, intent(in):: pqen(klon,klev)   ! humidite (environnement)      REAL, intent(in):: pqen(klon, klev) ! humidite (environnement)
21      REAL, intent(in):: pqsen(klon,klev)  ! humidite saturante (environnement)      REAL, intent(in):: pqsen(klon, klev) ! humidite saturante (environnement)
22      REAL, intent(in):: pgeo(klon,klev)   ! geopotentiel (g * metre)      REAL, intent(in):: pgeo(klon, klev) ! geopotentiel (g * metre)
23      REAL pgeoh(klon,klev)  ! geopotentiel aux demi-niveaux      REAL paph(klon, klev+1) ! pression aux demi-niveaux
24      REAL paph(klon,klev+1) ! pression aux demi-niveaux      REAL pgeoh(klon, klev) ! geopotentiel aux demi-niveaux
25      REAL ptenh(klon,klev)  ! temperature aux demi-niveaux      REAL ptenh(klon, klev) ! temperature aux demi-niveaux
26      REAL pqenh(klon,klev)  ! humidite aux demi-niveaux      REAL pqenh(klon, klev) ! humidite aux demi-niveaux
27      REAL pqsenh(klon,klev) ! humidite saturante aux demi-niveaux      REAL pqsenh(klon, klev) ! humidite saturante aux demi-niveaux
28      !      REAL ptu(klon, klev) ! temperature du panache ascendant
29      REAL ptu(klon,klev)    ! temperature du panache ascendant (p-a)      REAL pqu(klon, klev) ! humidite du panache ascendant
30      REAL pqu(klon,klev)    ! humidite du p-a      REAL ptd(klon, klev) ! temperature du panache descendant
31      REAL plu(klon,klev)    ! eau liquide du p-a      REAL pqd(klon, klev) ! humidite du panache descendant
32      REAL pmfu(klon,klev)   ! flux de masse du p-a      REAL, intent(out):: mfd(klon, klev) ! flux de masse du panache descendant
33      REAL pmfus(klon,klev)  ! flux de l'energie seche dans le p-a      REAL pmfds(klon, klev) ! flux de l'energie seche dans le panache descendant
34      REAL pmfuq(klon,klev)  ! flux de l'humidite dans le p-a      REAL pmfdq(klon, klev) ! flux de l'humidite dans le panache descendant
35      REAL pdmfup(klon,klev) ! quantite de l'eau precipitee dans p-a      REAL pdmfdp(klon, klev) ! quantite de precipitation dans panache descendant
36      REAL plude(klon,klev)  ! quantite de l'eau liquide jetee du      REAL, intent(out):: mfu(klon, klev) ! flux de masse du panache ascendant
37      !                              p-a a l'environnement      REAL mfus(klon, klev) ! flux de l'energie seche dans le panache ascendant
38      REAL pdpmel(klon,klev) ! quantite de neige fondue      REAL mfuq(klon, klev) ! flux de l'humidite dans le panache ascendant
39      !  
40      REAL ptd(klon,klev)    ! temperature du panache descendant (p-d)      REAL pdmfup(klon, klev)
41      REAL pqd(klon,klev)    ! humidite du p-d      ! quantite de l'eau precipitee dans panache ascendant
42      REAL pmfd(klon,klev)   ! flux de masse du p-d  
43      REAL pmfds(klon,klev)  ! flux de l'energie seche dans le p-d      REAL pdpmel(klon, klev) ! quantite de neige fondue
44      REAL pmfdq(klon,klev)  ! flux de l'humidite dans le p-d      REAL plu(klon, klev) ! eau liquide du panache ascendant
45      REAL pdmfdp(klon,klev) ! quantite de precipitation dans p-d  
46      !      REAL plude(klon, klev)
47      REAL pen_u(klon,klev) ! quantite de masse entrainee pour p-a      ! quantite de l'eau liquide jetee du panache ascendant a l'environnement
48      REAL pde_u(klon,klev) ! quantite de masse detrainee pour p-a  
49      REAL pen_d(klon,klev) ! quantite de masse entrainee pour p-d      INTEGER klab(klon, klev)
50      REAL pde_d(klon,klev) ! quantite de masse detrainee pour p-d      REAL pen_u(klon, klev) ! quantite de masse entrainee pour panache ascendant
51      !      REAL pde_u(klon, klev) ! quantite de masse detrainee pour panache ascendant
52      INTEGER  klab(klon,klev)      REAL pen_d(klon, klev) ! quantite de masse entrainee pour panache descendant
53      LOGICAL  llflag(klon)      REAL pde_d(klon, klev) ! quantite de masse detrainee pour panache descendant
54    
55        ! Local:
56        LOGICAL llflag(klon)
57      INTEGER k, i, icall      INTEGER k, i, icall
58      REAL zzs      REAL zzs
59    
60      !----------------------------------------------------------------------      !----------------------------------------------------------------------
61      ! SPECIFY LARGE SCALE PARAMETERS AT HALF LEVELS  
62      ! ADJUST TEMPERATURE FIELDS IF STATICLY UNSTABLE      ! Specify large scale parameters at half levels. Adjust
63      !----------------------------------------------------------------------      ! temperature fields if statically unstable.
64      DO  k = 2, klev  
65         !      DO k = 2, klev
66         DO i = 1, klon         DO i = 1, klon
67            pgeoh(i,k)=pgeo(i,k)+(pgeo(i,k-1)-pgeo(i,k))*0.5            pgeoh(i, k)=pgeo(i, k)+(pgeo(i, k-1)-pgeo(i, k))*0.5
68            ptenh(i,k)=(MAX(RCPD*pten(i,k-1)+pgeo(i,k-1), &            ptenh(i, k)=(MAX(RCPD*ten(i, k-1)+pgeo(i, k-1), &
69                 RCPD*pten(i,k)+pgeo(i,k))-pgeoh(i,k))/RCPD                 RCPD*ten(i, k)+pgeo(i, k))-pgeoh(i, k))/RCPD
70            pqsenh(i,k)=pqsen(i,k-1)            pqsenh(i, k)=pqsen(i, k-1)
71            llflag(i)=.TRUE.            llflag(i)=.TRUE.
72         ENDDO         ENDDO
73         !  
74         icall=0         icall=0
75         CALL flxadjtq(paph(1,k),ptenh(1,k),pqsenh(1,k),llflag,icall)         CALL flxadjtq(paph(1, k), ptenh(1, k), pqsenh(1, k), llflag, icall)
76         !  
77         DO i = 1, klon         DO i = 1, klon
78            pqenh(i,k)=MIN(pqen(i,k-1),pqsen(i,k-1)) &            pqenh(i, k)=MIN(pqen(i, k-1), pqsen(i, k-1)) &
79                 +(pqsenh(i,k)-pqsen(i,k-1))                 +(pqsenh(i, k)-pqsen(i, k-1))
80            pqenh(i,k)=MAX(pqenh(i,k),0.)            pqenh(i, k)=MAX(pqenh(i, k), 0.)
81         ENDDO         ENDDO
        !  
82      end DO      end DO
83      !  
84      DO  i = 1, klon      DO i = 1, klon
85         ptenh(i,klev)=(RCPD*pten(i,klev)+pgeo(i,klev)- &         ptenh(i, klev)=(RCPD*ten(i, klev)+pgeo(i, klev)- pgeoh(i, klev))/RCPD
86              pgeoh(i,klev))/RCPD         pqenh(i, klev)=pqen(i, klev)
87         pqenh(i,klev)=pqen(i,klev)         ptenh(i, 1)=ten(i, 1)
88         ptenh(i,1)=pten(i,1)         pqenh(i, 1)=pqen(i, 1)
89         pqenh(i,1)=pqen(i,1)         pgeoh(i, 1)=pgeo(i, 1)
        pgeoh(i,1)=pgeo(i,1)  
90      end DO      end DO
91      !  
92      DO  k = klev-1, 2, -1      DO k = klev-1, 2, -1
93         DO  i = 1, klon         DO i = 1, klon
94            zzs = MAX(RCPD*ptenh(i,k)+pgeoh(i,k), &            zzs = MAX(RCPD*ptenh(i, k)+pgeoh(i, k), &
95                 RCPD*ptenh(i,k+1)+pgeoh(i,k+1))                 RCPD*ptenh(i, k+1)+pgeoh(i, k+1))
96            ptenh(i,k) = (zzs-pgeoh(i,k))/RCPD            ptenh(i, k) = (zzs-pgeoh(i, k))/RCPD
97         end DO         end DO
98      end DO      end DO
99      !  
100      !-----------------------------------------------------------------------      ! Initialize values for updrafts and downdrafts
     ! INITIALIZE VALUES FOR UPDRAFTS AND DOWNDRAFTS  
     !-----------------------------------------------------------------------  
101      DO k = 1, klev      DO k = 1, klev
102         DO i = 1, klon         DO i = 1, klon
103            ptu(i,k) = ptenh(i,k)            ptu(i, k) = ptenh(i, k)
104            pqu(i,k) = pqenh(i,k)            pqu(i, k) = pqenh(i, k)
105            plu(i,k) = 0.            plu(i, k) = 0.
106            pmfu(i,k) = 0.            mfu(i, k) = 0.
107            pmfus(i,k) = 0.            mfus(i, k) = 0.
108            pmfuq(i,k) = 0.            mfuq(i, k) = 0.
109            pdmfup(i,k) = 0.            pdmfup(i, k) = 0.
110            pdpmel(i,k) = 0.            pdpmel(i, k) = 0.
111            plude(i,k) = 0.            plude(i, k) = 0.
112            !            klab(i, k) = 0
113            klab(i,k) = 0            ptd(i, k) = ptenh(i, k)
114            !            pqd(i, k) = pqenh(i, k)
115            ptd(i,k) = ptenh(i,k)            mfd(i, k) = 0.0
116            pqd(i,k) = pqenh(i,k)            pmfds(i, k) = 0.0
117            pmfd(i,k) = 0.0            pmfdq(i, k) = 0.0
118            pmfds(i,k) = 0.0            pdmfdp(i, k) = 0.0
119            pmfdq(i,k) = 0.0            pen_u(i, k) = 0.0
120            pdmfdp(i,k) = 0.0            pde_u(i, k) = 0.0
121            !            pen_d(i, k) = 0.0
122            pen_u(i,k) = 0.0            pde_d(i, k) = 0.0
           pde_u(i,k) = 0.0  
           pen_d(i,k) = 0.0  
           pde_d(i,k) = 0.0  
123         ENDDO         ENDDO
124      ENDDO      ENDDO
125    

Legend:
Removed from v.70  
changed lines
  Added in v.71

  ViewVC Help
Powered by ViewVC 1.1.21