source: LMDZ4/trunk/libf/dyn3dpar/qminimum_p.F @ 801

Last change on this file since 801 was 630, checked in by Laurent Fairhead, 20 years ago

Import d'une version parallele de la dynamique YM
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1      SUBROUTINE qminimum_p( q,nq,deltap )
2      USE parallel
3      IMPLICIT none
4c
5c  -- Objet : Traiter les valeurs trop petites (meme negatives)
6c             pour l'eau vapeur et l'eau liquide
7c
8#include "dimensions.h"
9#include "paramet.h"
10#include "comvert.h"
11c
12      INTEGER nq
13      REAL q(ip1jmp1,llm,nq), deltap(ip1jmp1,llm)
14c
15      INTEGER iq_vap, iq_liq
16      PARAMETER ( iq_vap = 1 ) ! indice pour l'eau vapeur
17      PARAMETER ( iq_liq = 2 ) ! indice pour l'eau liquide
18      REAL seuil_vap, seuil_liq
19      PARAMETER ( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur
20      PARAMETER ( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide
21c
22c  NB. ....( Il est souhaitable mais non obligatoire que les valeurs des
23c            parametres seuil_vap, seuil_liq soient pareilles a celles
24c            qui  sont utilisees dans la routine    ADDFI       )
25c     .................................................................
26c
27      INTEGER i, k, iq
28      REAL zx_defau, zx_abc, zx_pump(ip1jmp1), pompe
29c
30      REAL SSUM
31      EXTERNAL SSUM
32c
33      INTEGER imprim
34      SAVE imprim
35      DATA imprim /0/
36      INTEGER ijb,ije
37c
38c Quand l'eau liquide est trop petite (ou negative), on prend
39c l'eau vapeur de la meme couche et la convertit en eau liquide
40c (sans changer la temperature !)
41c
42      ijb=ij_begin
43      ije=ij_end
44     
45      DO 1000 k = 1, llm
46      DO 1040 i = ijb, ije
47            zx_defau      = AMAX1( seuil_liq - q(i,k,iq_liq), 0.0 )
48            q(i,k,iq_vap) = q(i,k,iq_vap) - zx_defau
49            q(i,k,iq_liq) = q(i,k,iq_liq) + zx_defau
50 1040 CONTINUE
51 1000 CONTINUE
52c
53c Quand l'eau vapeur est trop faible (ou negative), on complete
54c le defaut en prennant de l'eau vapeur de la couche au-dessous.
55c
56      iq = iq_vap
57c
58      DO k = llm, 2, -1
59ccc      zx_abc = dpres(k) / dpres(k-1)
60      DO i = ijb, ije
61         zx_abc = deltap(i,k)/deltap(i,k-1)
62         zx_defau    = AMAX1( seuil_vap - q(i,k,iq), 0.0 )
63         q(i,k-1,iq) =  q(i,k-1,iq) - zx_defau * zx_abc
64         q(i,k,iq)   =  q(i,k,iq)   + zx_defau 
65      ENDDO
66      ENDDO
67c
68c Quand il s'agit de la premiere couche au-dessus du sol, on
69c doit imprimer un message d'avertissement (saturation possible).
70c
71      DO i = ijb, ije
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(ije-ijb+1,zx_pump(ijb),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 = ijb, ije
79            IF (zx_pump(i).GT.0.0) THEN
80               imprim = imprim + 1
81               PRINT*,'  en ',i,zx_pump(i)
82            ENDIF
83         ENDDO
84      ENDIF
85c
86      RETURN
87      END
Note: See TracBrowser for help on using the repository browser.