My Project
 All Classes Files Functions Variables Macros
qminimum.F
Go to the documentation of this file.
1 !
2 ! $Header$
3 !
4  SUBROUTINE qminimum( q,nq,deltap )
5 
6  IMPLICIT none
7 c
8 c -- Objet : Traiter les valeurs trop petites (meme negatives)
9 c pour l'eau vapeur et l'eau liquide
10 c
11 #include "dimensions.h"
12 #include "paramet.h"
13 #include "comvert.h"
14 c
15  INTEGER nq
16  REAL q(ip1jmp1,llm,nq), deltap(ip1jmp1,llm)
17 c
18  INTEGER iq_vap, iq_liq
19  parameter( iq_vap = 1 ) ! indice pour l'eau vapeur
20  parameter( iq_liq = 2 ) ! indice pour l'eau liquide
21  REAL seuil_vap, seuil_liq
22  parameter( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur
23  parameter( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide
24 c
25 c NB. ....( Il est souhaitable mais non obligatoire que les valeurs des
26 c parametres seuil_vap, seuil_liq soient pareilles a celles
27 c qui sont utilisees dans la routine ADDFI )
28 c .................................................................
29 c
30  INTEGER i, k, iq
31  REAL zx_defau, zx_abc, zx_pump(ip1jmp1), pompe
32 c
33  REAL ssum
34 c
35  INTEGER imprim
36  SAVE imprim
37  DATA imprim /0/
38 c
39 c Quand l'eau liquide est trop petite (ou negative), on prend
40 c l'eau vapeur de la meme couche et la convertit en eau liquide
41 c (sans changer la temperature !)
42 c
43  DO 1000 k = 1, llm
44  DO 1040 i = 1, ip1jmp1
45  if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then
46  q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq
47  q(i,k,iq_liq) = seuil_liq
48  endif
49  1040 CONTINUE
50  1000 CONTINUE
51 c
52 c Quand l'eau vapeur est trop faible (ou negative), on complete
53 c le defaut en prennant de l'eau vapeur de la couche au-dessous.
54 c
55  iq = iq_vap
56 c
57  DO k = llm, 2, -1
58 ccc zx_abc = dpres(k) / dpres(k-1)
59  DO i = 1, ip1jmp1
60  if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then
61  q(i,k-1,iq) = q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) *
62  & deltap(i,k) / deltap(i,k-1)
63  q(i,k,iq) = seuil_vap
64  endif
65  ENDDO
66  ENDDO
67 c
68 c Quand il s'agit de la premiere couche au-dessus du sol, on
69 c doit imprimer un message d'avertissement (saturation possible).
70 c
71  DO i = 1, ip1jmp1
72  zx_pump(i) = amax1( 0.0, seuil_vap - q(i,1,iq) )
73  q(i,1,iq) = amax1( q(i,1,iq), seuil_vap )
74  ENDDO
75  pompe = ssum(ip1jmp1,zx_pump,1)
76  IF (imprim.LE.500 .AND. pompe.GT.0.0) THEN
77  WRITE(6,'(1x,"ATT!:on pompe de l eau au sol",e15.7)') pompe
78  DO i = 1, ip1jmp1
79  IF (zx_pump(i).GT.0.0) THEN
80  imprim = imprim + 1
81  print*,'QMINIMUM: en ',i,zx_pump(i)
82  ENDIF
83  ENDDO
84  ENDIF
85 c
86  RETURN
87  END