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

Annotation of /trunk/dyn3d/qminimum.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 40 - (hide 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 guez 40 SUBROUTINE qminimum(q, nq, deltap)
2 guez 3
3 guez 40 ! 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