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

Contents of /trunk/libf/dyn3d/qminimum.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (show annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 2 months ago) by guez
File size: 2719 byte(s)
Initial import
1 !
2 ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/qminimum.F,v 1.1.1.1 2004/05/19 12:53:05 lmdzadmin Exp $
3 !
4 SUBROUTINE qminimum( q,nq,deltap )
5
6 use dimens_m
7 use paramet_m
8 use comvert
9 IMPLICIT none
10 c
11 c -- Objet : Traiter les valeurs trop petites (meme negatives)
12 c pour l'eau vapeur et l'eau liquide
13 c
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 zx_defau = AMAX1( seuil_liq - q(i,k,iq_liq), 0.0 )
46 q(i,k,iq_vap) = q(i,k,iq_vap) - zx_defau
47 q(i,k,iq_liq) = q(i,k,iq_liq) + zx_defau
48 1040 CONTINUE
49 1000 CONTINUE
50 c
51 c Quand l'eau vapeur est trop faible (ou negative), on complete
52 c le defaut en prennant de l'eau vapeur de la couche au-dessous.
53 c
54 iq = iq_vap
55 c
56 DO k = llm, 2, -1
57 ccc zx_abc = dpres(k) / dpres(k-1)
58 DO i = 1, ip1jmp1
59 zx_abc = deltap(i,k)/deltap(i,k-1)
60 zx_defau = AMAX1( seuil_vap - q(i,k,iq), 0.0 )
61 q(i,k-1,iq) = q(i,k-1,iq) - zx_defau * zx_abc
62 q(i,k,iq) = q(i,k,iq) + zx_defau
63 ENDDO
64 ENDDO
65 c
66 c Quand il s'agit de la premiere couche au-dessus du sol, on
67 c doit imprimer un message d'avertissement (saturation possible).
68 c
69 DO i = 1, ip1jmp1
70 zx_pump(i) = AMAX1( 0.0, seuil_vap - q(i,1,iq) )
71 q(i,1,iq) = AMAX1( q(i,1,iq), seuil_vap )
72 ENDDO
73 pompe = SSUM(ip1jmp1,zx_pump,1)
74 IF (imprim.LE.500 .AND. pompe.GT.0.0) THEN
75 WRITE(6,'(1x,"ATT!:on pompe de l eau au sol",e15.7)') pompe
76 DO i = 1, ip1jmp1
77 IF (zx_pump(i).GT.0.0) THEN
78 imprim = imprim + 1
79 CC PRINT*,'QMINIMUM: en ',i,zx_pump(i)
80 ENDIF
81 ENDDO
82 ENDIF
83 c
84 RETURN
85 END

  ViewVC Help
Powered by ViewVC 1.1.21