source: trunk/LMDZ.COMMON/libf/dyn3d/qminimum.F @ 1453

Last change on this file since 1453 was 1422, checked in by milmd, 10 years ago

In GENERIC, MARS and COMMON models replace some include files by modules (usefull for decoupling physics with dynamics).

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