source: LMDZ5/branches/testing/libf/dyn3dpar/qminimum_p.F @ 5434

Last change on this file since 5434 was 2641, checked in by Laurent Fairhead, 8 years ago

Merged trunk changes r2593:2640 into testing branch

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.0 KB
RevLine 
[630]1      SUBROUTINE qminimum_p( q,nq,deltap )
[1864]2      USE parallel_lmdz
[630]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"
10c
11      INTEGER nq
12      REAL q(ip1jmp1,llm,nq), deltap(ip1jmp1,llm)
13c
14      INTEGER iq_vap, iq_liq
15      PARAMETER ( iq_vap = 1 ) ! indice pour l'eau vapeur
16      PARAMETER ( iq_liq = 2 ) ! indice pour l'eau liquide
17      REAL seuil_vap, seuil_liq
18      PARAMETER ( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur
19      PARAMETER ( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide
20c
21c  NB. ....( Il est souhaitable mais non obligatoire que les valeurs des
22c            parametres seuil_vap, seuil_liq soient pareilles a celles
23c            qui  sont utilisees dans la routine    ADDFI       )
24c     .................................................................
25c
26      INTEGER i, k, iq
27      REAL zx_defau, zx_abc, zx_pump(ip1jmp1), pompe
28c
29      REAL SSUM
30      EXTERNAL SSUM
31c
32      INTEGER imprim
33      SAVE imprim
34      DATA imprim /0/
[985]35c$OMP THREADPRIVATE(imprim)
[630]36      INTEGER ijb,ije
[985]37      INTEGER Index_pump(ip1jmp1)
38      INTEGER nb_pump
[630]39c
40c Quand l'eau liquide est trop petite (ou negative), on prend
41c l'eau vapeur de la meme couche et la convertit en eau liquide
42c (sans changer la temperature !)
43c
[985]44
[630]45      ijb=ij_begin
46      ije=ij_end
[985]47
48c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
[630]49      DO 1000 k = 1, llm
50      DO 1040 i = ijb, ije
[1146]51            if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then
52               q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq
53               q(i,k,iq_liq) = seuil_liq
54            endif
[630]55 1040 CONTINUE
56 1000 CONTINUE
[985]57c$OMP END DO NOWAIT
58c$OMP BARRIER
59c --->  SYNCHRO OPENMP ICI
60
[630]61c
62c Quand l'eau vapeur est trop faible (ou negative), on complete
63c le defaut en prennant de l'eau vapeur de la couche au-dessous.
64c
65      iq = iq_vap
66c
67      DO k = llm, 2, -1
68ccc      zx_abc = dpres(k) / dpres(k-1)
[985]69c$OMP DO SCHEDULE(STATIC)
[630]70      DO i = ijb, ije
[1146]71         if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then
72            q(i,k-1,iq) =  q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) *
73     &           deltap(i,k) / deltap(i,k-1)
74            q(i,k,iq)   =  seuil_vap 
75         endif
[630]76      ENDDO
[985]77c$OMP END DO NOWAIT
[630]78      ENDDO
[985]79c$OMP BARRIER
[630]80c
81c Quand il s'agit de la premiere couche au-dessus du sol, on
82c doit imprimer un message d'avertissement (saturation possible).
83c
[985]84      nb_pump=0
85c$OMP DO SCHEDULE(STATIC)
[630]86      DO i = ijb, ije
87         zx_pump(i) = AMAX1( 0.0, seuil_vap - q(i,1,iq) )
88         q(i,1,iq)  = AMAX1( q(i,1,iq), seuil_vap )
[985]89         IF (zx_pump(i) > 0.0) THEN
90            nb_pump = nb_pump+1
91            Index_pump(nb_pump)=i
92         ENDIF
[630]93      ENDDO
[985]94c$OMP END DO 
95!      pompe = SSUM(ije-ijb+1,zx_pump(ijb),1)
96
97      IF (imprim.LE.100 .AND. nb_pump .GT. 0 ) THEN
98         PRINT *, 'ATT!:on pompe de l eau au sol'
99         DO i = 1, nb_pump
[630]100               imprim = imprim + 1
[985]101               PRINT*,'  en ',index_pump(i),zx_pump(index_pump(i))
[630]102         ENDDO
103      ENDIF
104c
105      RETURN
106      END
Note: See TracBrowser for help on using the repository browser.