/[lmdze]/trunk/libf/phylmd/ajsec.f
ViewVC logotype

Contents of /trunk/libf/phylmd/ajsec.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 38 - (show annotations)
Thu Jan 6 17:52:19 2011 UTC (13 years, 3 months ago) by guez
File size: 3960 byte(s)
Extracted ASCII art from "inigeom" into a separate text file in the
documentation.

"test_disvert" now creates a separate file for layer thicknesses.

Moved variables from module "yomcst" to module "suphec_m" because this
is where those variables are defined. Kept in "yomcst" only parameters
of Earth orbit. Gave the attribute "parameter" to some variables of
module "suphec_m".

Variables of module "yoethf" were defined in procedure "suphec". Moved
these definitions to a new procedure "yoethf" in module "yoethf_m".

1 !
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 SUPHEC_M
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, intent(in):: 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