/[lmdze]/trunk/phylmd/ajsec.f90
ViewVC logotype

Annotation of /trunk/phylmd/ajsec.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 3 months ago) by guez
Original Path: trunk/libf/phylmd/ajsec.f
File size: 3944 byte(s)
Initial import
1 guez 3 !
2     ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/ajsec.F,v 1.1.1.1 2004/05/19 12:53:08 lmdzadmin Exp $
3     !
4     SUBROUTINE ajsec(paprs, pplay, t,q, d_t,d_q)
5     use dimens_m
6     use dimphy
7     use YOMCST
8     IMPLICIT none
9     c======================================================================
10     c Auteur(s): Z.X. Li (LMD/CNRS) date: 19930818
11     c Objet: ajustement sec (adaptation du GCM du LMD)
12     c======================================================================
13     c Arguments:
14     c t-------input-R- Temperature
15     c
16     c d_t-----output-R-Incrementation de la temperature
17     c======================================================================
18     REAL, intent(in):: paprs(klon,klev+1)
19     real pplay(klon,klev)
20     REAL t(klon,klev), q(klon,klev)
21     REAL d_t(klon,klev), d_q(klon,klev)
22     c
23     INTEGER limbas, limhau ! les couches a ajuster
24     ccc PARAMETER (limbas=klev-3, limhau=klev)
25     PARAMETER (limbas=1, limhau=klev)
26     c
27     LOGICAL mixq
28     ccc PARAMETER (mixq=.TRUE.)
29     PARAMETER (mixq=.FALSE.)
30     c
31     REAL zh(klon,klev)
32     REAL zq(klon,klev)
33     REAL zpk(klon,klev)
34     REAL zpkdp(klon,klev)
35     REAL hm, sm, qm
36     LOGICAL modif(klon), down
37     INTEGER i, k, k1, k2
38     c
39     c Initialisation:
40     c
41     DO k = 1, klev
42     DO i = 1, klon
43     d_t(i,k) = 0.0
44     d_q(i,k) = 0.0
45     ENDDO
46     ENDDO
47     c------------------------------------- detection des profils a modifier
48     DO k = limbas, limhau
49     DO i = 1, klon
50     zpk(i,k) = pplay(i,k)**RKAPPA
51     zh(i,k) = RCPD * t(i,k)/ zpk(i,k)
52     zq(i,k) = q(i,k)
53     ENDDO
54     ENDDO
55     c
56     DO k = limbas, limhau
57     DO i = 1, klon
58     zpkdp(i,k) = zpk(i,k) * (paprs(i,k)-paprs(i,k+1))
59     ENDDO
60     ENDDO
61     c
62     DO i = 1, klon
63     modif(i) = .FALSE.
64     ENDDO
65     DO k = limbas+1, limhau
66     DO i = 1, klon
67     IF (.NOT.modif(i)) THEN
68     IF ( zh(i,k).LT.zh(i,k-1) ) modif(i) = .TRUE.
69     ENDIF
70     ENDDO
71     ENDDO
72     c------------------------------------- correction des profils instables
73     DO 1080 i = 1, klon
74     IF (modif(i)) THEN
75     k2 = limbas
76     8000 CONTINUE
77     k2 = k2 + 1
78     IF (k2 .GT. limhau) goto 8001
79     IF (zh(i,k2) .LT. zh(i,k2-1)) THEN
80     k1 = k2 - 1
81     k = k1
82     sm = zpkdp(i,k2)
83     hm = zh(i,k2)
84     qm = zq(i,k2)
85     8020 CONTINUE
86     sm = sm +zpkdp(i,k)
87     hm = hm +zpkdp(i,k) * (zh(i,k)-hm) / sm
88     qm = qm +zpkdp(i,k) * (zq(i,k)-qm) / sm
89     down = .FALSE.
90     IF (k1 .ne. limbas) THEN
91     IF (hm .LT. zh(i,k1-1)) down = .TRUE.
92     ENDIF
93     IF (down) THEN
94     k1 = k1 - 1
95     k = k1
96     ELSE
97     IF ((k2 .EQ. limhau)) GOTO 8021
98     IF ((zh(i,k2+1).GE.hm)) GOTO 8021
99     k2 = k2 + 1
100     k = k2
101     ENDIF
102     GOTO 8020
103     8021 CONTINUE
104     c------------ nouveau profil : constant (valeur moyenne)
105     DO k = k1, k2
106     zh(i,k) = hm
107     zq(i,k) = qm
108     ENDDO
109     k2 = k2 + 1
110     ENDIF
111     GOTO 8000
112     8001 CONTINUE
113     ENDIF
114     1080 CONTINUE
115     c
116     DO k = limbas, limhau
117     DO i = 1, klon
118     d_t(i,k) = zh(i,k)*zpk(i,k)/RCPD - t(i,k)
119     d_q(i,k) = zq(i,k) - q(i,k)
120     ENDDO
121     ENDDO
122     c
123     IF (limbas.GT.1) THEN
124     DO k = 1, limbas-1
125     DO i = 1, klon
126     d_t(i,k) = 0.0
127     d_q(i,k) = 0.0
128     ENDDO
129     ENDDO
130     ENDIF
131     c
132     IF (limhau.LT.klev) THEN
133     DO k = limhau+1, klev
134     DO i = 1, klon
135     d_t(i,k) = 0.0
136     d_q(i,k) = 0.0
137     ENDDO
138     ENDDO
139     ENDIF
140     c
141     IF (.NOT.mixq) THEN
142     DO k = 1, klev
143     DO i = 1, klon
144     d_q(i,k) = 0.0
145     ENDDO
146     ENDDO
147     ENDIF
148     c
149     RETURN
150     END

  ViewVC Help
Powered by ViewVC 1.1.21