source: LMDZ6/trunk/libf/dyn3d/qminimum.F @ 4131

Last change on this file since 4131 was 4124, checked in by dcugnet, 3 years ago

Remove solsym, ok_isotopes (=niso>0), ok_isotrac (=nzone>0)

  • 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: 6.4 KB
Line 
1!
2! $Header$
3!
4      SUBROUTINE qminimum( q,nqtot,deltap )
5
6      USE infotrac, ONLY: niso, ntraciso,iqiso,ok_iso_verif
7      IMPLICIT none
8c
9c  -- Objet : Traiter les valeurs trop petites (meme negatives)
10c             pour l'eau vapeur et l'eau liquide
11c
12      include "dimensions.h"
13      include "paramet.h"
14c
15      INTEGER nqtot
16      REAL q(ip1jmp1,llm,nqtot), deltap(ip1jmp1,llm)
17c
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
24c
25c  NB. ....( Il est souhaitable mais non obligatoire que les valeurs des
26c            parametres seuil_vap, seuil_liq soient pareilles a celles
27c            qui  sont utilisees dans la routine    ADDFI       )
28c     .................................................................
29c
30      INTEGER i, k, iq
31      REAL zx_defau, zx_abc, zx_pump(ip1jmp1), pompe
32
33      real zx_defau_diag(ip1jmp1,llm,2)
34      real q_follow(ip1jmp1,llm,2)
35c
36      REAL SSUM
37c
38      INTEGER imprim
39      SAVE imprim
40      DATA imprim /0/
41      !INTEGER ijb,ije
42      !INTEGER Index_pump(ij_end-ij_begin+1)
43      !INTEGER nb_pump
44      INTEGER ixt
45c
46c Quand l'eau liquide est trop petite (ou negative), on prend
47c l'eau vapeur de la meme couche et la convertit en eau liquide
48c (sans changer la temperature !)
49c
50
51        if (ok_iso_verif) then
52           call check_isotopes_seq(q,ip1jmp1,'qminimum 52')   
53        endif !if (ok_iso_verif) then     
54
55      zx_defau_diag(:,:,:)=0.0
56      q_follow(:,:,1:2)=q(:,:,1:2) 
57      DO 1000 k = 1, llm
58        DO 1040 i = 1, ip1jmp1
59          if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then
60
61              if (niso > 0) zx_defau_diag(i,k,iq_liq)=AMAX1
62     :               ( seuil_liq - q(i,k,iq_liq), 0.0 )
63
64             q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq
65             q(i,k,iq_liq) = seuil_liq
66           endif
67 1040   CONTINUE
68 1000 CONTINUE
69c
70c Quand l'eau vapeur est trop faible (ou negative), on complete
71c le defaut en prennant de l'eau vapeur de la couche au-dessous.
72c
73      iq = iq_vap
74c
75      DO k = llm, 2, -1
76ccc      zx_abc = dpres(k) / dpres(k-1)
77        DO i = 1, ip1jmp1
78          if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then
79
80            if (niso > 0)
81     &        zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 )
82
83            q(i,k-1,iq) =  q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) *
84     &                     deltap(i,k) / deltap(i,k-1)
85            q(i,k,iq)   =  seuil_vap 
86          endif
87        ENDDO
88      ENDDO
89c
90c Quand il s'agit de la premiere couche au-dessus du sol, on
91c doit imprimer un message d'avertissement (saturation possible).
92c
93      DO i = 1, ip1jmp1
94         zx_pump(i) = AMAX1( 0.0, seuil_vap - q(i,1,iq) )
95         q(i,1,iq)  = AMAX1( q(i,1,iq), seuil_vap )
96      ENDDO
97      pompe = SSUM(ip1jmp1,zx_pump,1)
98      IF (imprim.LE.500 .AND. pompe.GT.0.0) THEN
99         WRITE(6,'(1x,"ATT!:on pompe de l eau au sol",e15.7)') pompe
100         DO i = 1, ip1jmp1
101            IF (zx_pump(i).GT.0.0) THEN
102               imprim = imprim + 1
103               PRINT*,'QMINIMUM:  en ',i,zx_pump(i)
104            ENDIF
105         ENDDO
106      ENDIF
107
108      !write(*,*) 'qminimum 128'
109      if (niso > 0) then
110      ! CRisi: traiter de même les traceurs d'eau
111      ! Mais il faut les prendre à l'envers pour essayer de conserver la
112      ! masse.
113      ! 1) pompage dans le sol 
114      ! On suppose que ce pompage se fait sans isotopes -> on ne modifie
115      ! rien ici et on croise les doigts pour que ça ne soit pas trop
116      ! génant
117      DO i = 1,ip1jmp1
118        if (zx_pump(i).gt.0.0) then
119          q_follow(i,1,iq_vap)=q_follow(i,1,iq_vap)+zx_pump(i)
120        endif !if (zx_pump(i).gt.0.0) then
121      enddo !DO i = 1,ip1jmp1
122
123      ! 2) transfert de vap vers les couches plus hautes
124      !write(*,*) 'qminimum 139'
125      do k=2,llm
126        DO i = 1,ip1jmp1
127          if (zx_defau_diag(i,k,iq_vap).gt.0.0) then             
128              ! on ajoute la vapeur en k             
129              do ixt=1,ntraciso
130               q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
131     :              +zx_defau_diag(i,k,iq_vap)
132     :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
133               
134              ! et on la retranche en k-1
135               q(i,k-1,iqiso(ixt,iq_vap))=q(i,k-1,iqiso(ixt,iq_vap))
136     :              -zx_defau_diag(i,k,iq_vap)
137     :              *deltap(i,k)/deltap(i,k-1)
138     :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
139
140              enddo !do ixt=1,niso
141              q_follow(i,k,iq_vap)=   q_follow(i,k,iq_vap)
142     :               +zx_defau_diag(i,k,iq_vap)
143              q_follow(i,k-1,iq_vap)=   q_follow(i,k-1,iq_vap)
144     :               -zx_defau_diag(i,k,iq_vap)
145     :              *deltap(i,k)/deltap(i,k-1)
146          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
147        enddo !DO i = 1, ip1jmp1       
148       enddo !do k=2,llm
149
150        if (ok_iso_verif) then     
151           call check_isotopes_seq(q,ip1jmp1,'qminimum 168')
152        endif !if (ok_iso_verif) then
153       
154     
155        ! 3) transfert d'eau de la vapeur au liquide
156        !write(*,*) 'qminimum 164'
157        do k=1,llm
158        DO i = 1,ip1jmp1
159          if (zx_defau_diag(i,k,iq_liq).gt.0.0) then
160
161              ! on ajoute eau liquide en k en k             
162              do ixt=1,ntraciso
163               q(i,k,iqiso(ixt,iq_liq))=q(i,k,iqiso(ixt,iq_liq))
164     :              +zx_defau_diag(i,k,iq_liq)
165     :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)
166              ! et on la retranche à la vapeur en k
167               q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
168     :              -zx_defau_diag(i,k,iq_liq)
169     :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)   
170              enddo !do ixt=1,niso
171              q_follow(i,k,iq_liq)=   q_follow(i,k,iq_liq)
172     :               +zx_defau_diag(i,k,iq_liq)
173              q_follow(i,k,iq_vap)=   q_follow(i,k,iq_vap)
174     :               -zx_defau_diag(i,k,iq_liq)
175          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
176        enddo !DO i = 1, ip1jmp1
177       enddo !do k=2,llm 
178
179        if (ok_iso_verif) then
180           call check_isotopes_seq(q,ip1jmp1,'qminimum 197')
181        endif !if (ok_iso_verif) then
182
183      endif !if (niso > 0) then
184      !write(*,*) 'qminimum 188'
185     
186c
187      RETURN
188      END
Note: See TracBrowser for help on using the repository browser.