- Timestamp:
- Feb 9, 2000, 11:25:04 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ.3.3/trunk/libf/phylmd/clmain.F
r2 r39 122 122 cAA REAL yflxsrf(klon,nbtr) 123 123 c 124 LOGICAL contreg 125 PARAMETER (contreg=.TRUE.) 126 c 124 127 LOGICAL ok_nonloc 125 128 PARAMETER (ok_nonloc=.FALSE.) … … 272 275 . yts, yrugos, yu, yv, yt, yq, 273 276 . ycoefm, ycoefh) 277 CALL coefkz2(nsrf, knon, paprs, pplay,t, 278 . ycoefm0, ycoefh0) 279 DO k = 1, klev 280 DO i = 1, knon 281 ycoefm(i,k) = MAX(ycoefm(i,k),ycoefm0(i,k)) 282 ycoefh(i,k) = MAX(ycoefh(i,k),ycoefh0(i,k)) 283 ENDDO 284 ENDDO 274 285 c 275 286 c parametrisation non-locale: … … 289 300 ENDDO 290 301 ELSE 302 IF (.NOT.contreg) THEN 303 DO k = 2, klev 304 DO i = 1, knon 305 ygamq(i,k) = 0.0 306 ygamt(i,k) = 0.0 307 ENDDO 308 ENDDO 309 ELSE 291 310 DO k = 3, klev 292 311 DO i = 1, knon … … 299 318 ygamt(i,2) = -2.5E-03 300 319 ENDDO 320 ENDIF 301 321 ENDIF 302 322 c … … 873 893 PARAMETER (clam=160.0) 874 894 REAL ratqs ! largeur de distribution de vapeur d'eau 875 PARAMETER (ratqs=0. 2)895 PARAMETER (ratqs=0.05) 876 896 LOGICAL richum ! utilise le nombre de Richardson humide 877 897 PARAMETER (richum=.TRUE.) … … 881 901 PARAMETER (prandtl=0.4) 882 902 REAL kstable ! diffusion minimale (situation stable) 883 PARAMETER (kstable=1.0e- 06)903 PARAMETER (kstable=1.0e-10) 884 904 REAL mixlen ! constante controlant longueur de melange 885 905 PARAMETER (mixlen=35.0) … … 950 970 c Prescrire la valeur de contre-gradient 951 971 c 952 IF ( contreg) THEN972 IF (.NOT.contreg) THEN 953 973 DO k = 2, klev 954 974 gamt(k) = 0.0 … … 1131 1151 RETURN 1132 1152 END 1153 SUBROUTINE coefkz2(nsrf, knon, paprs, pplay,t, 1154 . pcfm, pcfh) 1155 IMPLICIT none 1156 c====================================================================== 1157 c J'introduit un peu de diffusion sauf dans les endroits 1158 c ou une forte inversion est presente 1159 c On peut dire qu'il represente la convection peu profonde 1160 c 1161 c Arguments: 1162 c nsrf-----input-I- indicateur de la nature du sol 1163 c knon-----input-I- nombre de points a traiter 1164 c paprs----input-R- pression a chaque intercouche (en Pa) 1165 c pplay----input-R- pression au milieu de chaque couche (en Pa) 1166 c t--------input-R- temperature (K) 1167 c 1168 c pcfm-----output-R- coefficients a calculer (vitesse) 1169 c pcfh-----output-R- coefficients a calculer (chaleur et humidite) 1170 c====================================================================== 1171 #include "dimensions.h" 1172 #include "dimphy.h" 1173 #include "YOMCST.h" 1174 #include "indicesol.h" 1175 c 1176 c Arguments: 1177 c 1178 INTEGER knon, nsrf 1179 REAL paprs(klon,klev+1), pplay(klon,klev) 1180 REAL t(klon,klev) 1181 c 1182 REAL pcfm(klon,klev), pcfh(klon,klev) 1183 c 1184 c Quelques constantes et options: 1185 c 1186 REAL prandtl 1187 PARAMETER (prandtl=0.4) 1188 REAL kstable 1189 PARAMETER (kstable=0.002) 1190 ccc PARAMETER (kstable=0.001) 1191 REAL mixlen ! constante controlant longueur de melange 1192 PARAMETER (mixlen=35.0) 1193 REAL seuil ! au-dela l'inversion est consideree trop faible 1194 PARAMETER (seuil=-0.02) 1195 ccc PARAMETER (seuil=-0.04) 1196 ccc PARAMETER (seuil=-0.06) 1197 ccc PARAMETER (seuil=-0.09) 1198 c 1199 c Variables locales: 1200 c 1201 INTEGER i, k, invb(klon) 1202 REAL zl2(klon) 1203 REAL zdthmin(klon), zdthdp 1204 c 1205 c Initialiser les sorties 1206 c 1207 DO k = 1, klev 1208 DO i = 1, knon 1209 pcfm(i,k) = 0.0 1210 pcfh(i,k) = 0.0 1211 ENDDO 1212 ENDDO 1213 c 1214 c Chercher la zone d'inversion forte 1215 c 1216 DO i = 1, klon 1217 invb(i) = klev 1218 zdthmin(i)=0.0 1219 ENDDO 1220 DO k = 2, klev/2-1 1221 DO i = 1, klon 1222 zdthdp = (t(i,k)-t(i,k+1))/(pplay(i,k)-pplay(i,k+1)) 1223 . - RD * 0.5*(t(i,k)+t(i,k+1))/RCPD/paprs(i,k+1) 1224 zdthdp = zdthdp * 100.0 1225 IF (pplay(i,k).GT.0.8*paprs(i,1) .AND. 1226 . zdthdp.LT.zdthmin(i) ) THEN 1227 zdthmin(i) = zdthdp 1228 invb(i) = k 1229 ENDIF 1230 ENDDO 1231 ENDDO 1232 c 1233 c Introduire une diffusion: 1234 c 1235 DO k = 2, klev 1236 DO i = 1, knon 1237 IF ( (nsrf.NE.is_oce) .OR. ! si ce n'est pas sur l'ocean 1238 . (invb(i).EQ.klev) .OR. ! s'il n'y a pas d'inversion 1239 . (zdthmin(i).GT.seuil) )THEN ! si l'inversion est trop faible 1240 zl2(i)=(mixlen*MAX(0.0,(paprs(i,k)-paprs(i,klev+1)) 1241 . /(paprs(i,2)-paprs(i,klev+1)) ))**2 1242 pcfm(i,k)= zl2(i)* kstable 1243 pcfh(i,k) = pcfm(i,k) /prandtl ! h et m different 1244 ENDIF 1245 ENDDO 1246 ENDDO 1247 c 1248 RETURN 1249 END 1133 1250 SUBROUTINE calbeta(dtime,indice,snow,qsol, 1134 1251 . vbeta,vcal,vdif) … … 1146 1263 #include "indicesol.h" 1147 1264 REAL tau_gl ! temps de relaxation pour la glace de mer 1148 PARAMETER (tau_gl=86400.0*30.0) 1265 ccc PARAMETER (tau_gl=86400.0*30.0) 1266 PARAMETER (tau_gl=86400.0*5.0) 1149 1267 REAL mx_eau_sol 1150 1268 PARAMETER (mx_eau_sol=150.0) … … 1178 1296 IF (snow(i,is_sic) .GT. 0.0) vcal(i) = calsno 1179 1297 vbeta(i) = 1.0 1180 ccc vdif(i) = 1.0/tau_gl ! c'etait une erreur 1181 vdif(i) = calice/tau_gl 1298 vdif(i) = 1.0/tau_gl 1299 ccc vdif(i) = calice/tau_gl ! c'etait une erreur 1182 1300 ENDDO 1183 1301 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.