GCC Code Coverage Report


Directory: ./
File: dyn/qminimum.f
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 22 56 39.3%
Branches: 24 60 40.0%

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