/[lmdze]/trunk/dyn3d/qminimum.f
ViewVC logotype

Contents of /trunk/dyn3d/qminimum.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 40 - (show annotations)
Tue Feb 22 13:49:36 2011 UTC (13 years, 3 months ago) by guez
Original Path: trunk/libf/dyn3d/qminimum.f90
File size: 2341 byte(s)
"alpha" useless, always 0, in "exner_hyb".

1 SUBROUTINE qminimum(q, nq, deltap)
2
3 ! From LMDZ4/libf/dyn3d/qminimum.F, version 1.1.1.1 2004/05/19 12:53:05
4 ! Objet : Traiter les valeurs trop petites (meme negatives) pour
5 ! l'eau vapeur et l'eau liquide
6
7 use dimens_m
8 use paramet_m
9 use comvert
10
11 IMPLICIT none
12
13 INTEGER, intent(in):: nq
14 REAL, intent(inout):: q(ip1jmp1, llm, nq)
15 real, intent(in):: deltap(ip1jmp1, llm)
16
17 INTEGER, PARAMETER:: iq_vap = 1 ! indice pour l'eau vapeur
18 INTEGER, PARAMETER:: iq_liq = 2 ! indice pour l'eau liquide
19
20 REAL, PARAMETER:: seuil_vap = 1e-10 ! seuil pour l'eau vapeur
21 REAL, PARAMETER:: seuil_liq = 1e-11 ! seuil pour l'eau liquide
22 ! Il est souhaitable mais non obligatoire que les valeurs des
23 ! paramètres seuil_vap, seuil_liq soient pareilles à celles qui sont
24 ! utilisées dans la routine ADDFI.
25
26 INTEGER i, k
27 REAL zx_defau, zx_abc, zx_pump(ip1jmp1), pompe
28 INTEGER:: imprim = 0
29
30 !-------------------------------------------------------------------
31
32 ! Quand l'eau liquide est trop petite (ou negative), on prend
33 ! l'eau vapeur de la meme couche et on la convertit en eau liquide
34 ! (sans changer la temperature !)
35 DO k = 1, llm
36 DO i = 1, ip1jmp1
37 zx_defau = MAX(seuil_liq - q(i, k, iq_liq), 0.0)
38 q(i, k, iq_vap) = q(i, k, iq_vap) - zx_defau
39 q(i, k, iq_liq) = q(i, k, iq_liq) + zx_defau
40 end DO
41 end DO
42
43 ! Quand l'eau vapeur est trop faible (ou negative), on complete
44 ! le defaut en prennant de l'eau vapeur de la couche au-dessous.
45 DO k = llm, 2, -1
46 DO i = 1, ip1jmp1
47 zx_abc = deltap(i, k)/deltap(i, k-1)
48 zx_defau = MAX(seuil_vap - q(i, k, iq_vap), 0.0)
49 q(i, k-1, iq_vap) = q(i, k-1, iq_vap) - zx_defau * zx_abc
50 q(i, k, iq_vap) = q(i, k, iq_vap) + zx_defau
51 ENDDO
52 ENDDO
53
54 ! Quand il s'agit de la premiere couche au-dessus du sol, on
55 ! doit imprimer un message d'avertissement (saturation possible).
56
57 DO i = 1, ip1jmp1
58 zx_pump(i) = MAX(0., seuil_vap - q(i, 1, iq_vap))
59 q(i, 1, iq_vap) = MAX(q(i, 1, iq_vap), seuil_vap)
60 ENDDO
61 pompe = SUM(zx_pump)
62 IF (imprim <= 500 .AND. pompe > 0.) THEN
63 print *, "Attention : on pompe de l'eau au sol, pompe = ", pompe
64 DO i = 1, ip1jmp1
65 IF (zx_pump(i) > 0.) THEN
66 imprim = imprim + 1
67 ENDIF
68 ENDDO
69 ENDIF
70
71 END SUBROUTINE qminimum

  ViewVC Help
Powered by ViewVC 1.1.21