Changeset 4171 for LMDZ6/branches/LMDZ-ECRAD/libf/dyn3dmem/qminimum_loc.F
- Timestamp:
- Jun 17, 2022, 4:24:49 PM (2 years ago)
- Location:
- LMDZ6/branches/LMDZ-ECRAD
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ-ECRAD
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ-ECRAD/libf/dyn3dmem/qminimum_loc.F
r3801 r4171 4 4 SUBROUTINE qminimum_loc( q,nqtot,deltap ) 5 5 USE parallel_lmdz 6 USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif, & 7 & ratiomin,qperemin ! CRisi 23nov2020 6 USE infotrac, ONLY: niso, ntiso, iqIsoPha, tracers, 7 & isoCheck, min_qParent 8 USE strings_mod, ONLY: strIdx 9 USE readTracFiles_mod, ONLY: addPhase 8 10 IMPLICIT none 9 11 c … … 18 20 REAL q(ijb_u:ije_u,llm,nqtot), deltap(ijb_u:ije_u,llm) 19 21 c 20 INTEGER iq_vap, iq_liq 21 PARAMETER ( iq_vap = 1 ) ! indice pour l'eau vapeur 22 PARAMETER ( iq_liq = 2 ) ! indice pour l'eau liquide 23 REAL seuil_vap, seuil_liq 24 PARAMETER ( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur 25 PARAMETER ( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide 22 LOGICAL, SAVE :: first=.TRUE. 23 INTEGER, SAVE :: iq_vap, iq_liq ! indices pour l'eau vapeur/liquide 24 c$OMP THREADPRIVATE(iq_vap, iq_liq, first) 25 REAL, PARAMETER :: seuil_vap = 1.0e-10 ! seuil pour l'eau vapeur 26 REAL, PARAMETER :: seuil_liq = 1.0e-11 ! seuil pour l'eau liquide 26 27 c 27 28 c NB. ....( Il est souhaitable mais non obligatoire que les valeurs des … … 54 55 c 55 56 56 !write(lunout,*) 'qminimum 52: entree' 57 if (ok_iso_verif) then 58 call check_isotopes(q,ij_begin,ij_end,'qminimum 52') 59 endif !if (ok_iso_verif) then 57 !write(lunout,*) 'qminimum 52: entree' 58 IF(first) THEN 59 iq_vap = strIdx(tracers(:)%name, addPhase('H2O', 'g')) 60 iq_liq = strIdx(tracers(:)%name, addPhase('H2O', 'l')) 61 first = .FALSE. 62 END IF 63 call check_isotopes(q,ij_begin,ij_end,'qminimum 52') 60 64 61 65 ijb=ij_begin … … 71 75 if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then 72 76 73 if (ok_isotopes) then 74 zx_defau_diag(i,k,iq_liq)=AMAX1 77 if (niso > 0) zx_defau_diag(i,k,iq_liq)=AMAX1 75 78 : ( seuil_liq - q(i,k,iq_liq), 0.0 ) 76 endif !if (ok_isotopes) then77 79 78 80 q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq … … 100 102 if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then 101 103 102 if (ok_isotopes) then 103 zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 ) 104 endif !if (ok_isotopes) then 104 if (niso > 0) 105 & zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 ) 105 106 106 107 q(i,k-1,iq) = q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) * … … 141 142 142 143 !write(lunout,*) 'qminimum 128' 143 if ( ok_isotopes) then144 if (niso > 0) then 144 145 !write(lunout,*) 'qminimum 140' 145 146 ! CRisi: traiter de même les traceurs d'eau … … 172 173 ! write(lunout,*) 'i,k,q_follow(i,k-1,iq_vap)=', 173 174 ! : i,k,q_follow(i,k-1,iq_vap) 174 if (q_follow(i,k-1,iq_vap).lt. qperemin) then175 if (q_follow(i,k-1,iq_vap).lt.min_qParent) then 175 176 write(lunout,*) 'tmp qmin: on stoppe' 176 177 write(lunout,*) 'zx_pump(i)=',zx_pump(i) … … 180 181 call abort_gcm("qminimum","not enough vapor",1) 181 182 endif 182 do ixt=1,nt raciso183 do ixt=1,ntiso 183 184 ! write(lunout,*) 'qmin 168: ixt=',ixt 184 ! write(lunout,*) 'q(i,k,iq iso(ixt,iq_vap)=',185 ! : q(i,k,iq iso(ixt,iq_vap))185 ! write(lunout,*) 'q(i,k,iqIsoPha(ixt,iq_vap)=', 186 ! : q(i,k,iqIsoPha(ixt,iq_vap)) 186 187 ! write(lunout,*) 'zx_defau_diag(i,k,iq_vap)=', 187 188 ! : zx_defau_diag(i,k,iq_vap) 188 ! write(lunout,*) 'q(i,k-1,iq iso(ixt,iq_vap)=',189 ! : q(i,k-1,iq iso(ixt,iq_vap))190 191 q(i,k,iq iso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))192 : 193 : *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)189 ! write(lunout,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap)=', 190 ! : q(i,k-1,iqIsoPha(ixt,iq_vap)) 191 192 q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap)) 193 : +zx_defau_diag(i,k,iq_vap) 194 : *q(i,k-1,iqIsoPha(ixt,iq_vap))/q_follow(i,k-1,iq_vap) 194 195 195 if ( ok_iso_verif) then196 if (iso_verif_noNaN_nostop(q(i,k,iqiso(ixt,iq_vap)),196 if (isoCheck) then 197 if(iso_verif_noNaN_nostop(q(i,k,iqIsoPha(ixt,iq_vap)), 197 198 : 'qminimum 155').eq.1) then 198 199 write(*,*) 'i,k,ixt=',i,k,ixt 199 200 write(*,*) 'q_follow(i,k-1,iq_vap)=', 200 201 : q_follow(i,k-1,iq_vap) 201 write(*,*) 'q(i,k,iq iso(ixt,iq_vap))=',202 : q(i,k,iq iso(ixt,iq_vap))202 write(*,*) 'q(i,k,iqIsoPha(ixt,iq_vap))=', 203 : q(i,k,iqIsoPha(ixt,iq_vap)) 203 204 write(*,*) 'zx_defau_diag(i,k,iq_vap)=', 204 205 : zx_defau_diag(i,k,iq_vap) 205 write(*,*) 'q(i,k-1,iq iso(ixt,iq_vap))=',206 : q(i,k-1,iq iso(ixt,iq_vap))206 write(*,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap))=', 207 : q(i,k-1,iqIsoPha(ixt,iq_vap)) 207 208 stop 208 209 endif … … 210 211 211 212 ! et on la retranche en k-1 212 q(i,k-1,iqiso(ixt,iq_vap))=q(i,k-1,iqiso(ixt,iq_vap)) 213 q(i,k-1,iqIsoPha(ixt,iq_vap)) = 214 : q(i,k-1,iqIsoPha(ixt,iq_vap)) 213 215 : -zx_defau_diag(i,k,iq_vap) 214 216 : *deltap(i,k)/deltap(i,k-1) 215 : *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap) 216 217 if (ok_iso_verif) then 218 if (iso_verif_noNaN_nostop(q(i,k-1,iqiso(ixt,iq_vap)), 217 : *q(i,k-1,iqIsoPha(ixt,iq_vap)) 218 : /q_follow(i,k-1,iq_vap) 219 220 if (isoCheck) then 221 if (iso_verif_noNaN_nostop( 222 : q(i,k-1,iqIsoPha(ixt,iq_vap)), 219 223 : 'qminimum 175').eq.1) then 220 224 write(*,*) 'k,i,ixt=',k,i,ixt 221 225 write(*,*) 'q_follow(i,k-1,iq_vap)=', 222 226 : q_follow(i,k-1,iq_vap) 223 write(*,*) 'q(i,k,iq iso(ixt,iq_vap))=',224 : q(i,k,iq iso(ixt,iq_vap))227 write(*,*) 'q(i,k,iqIsoPha(ixt,iq_vap))=', 228 : q(i,k,iqIsoPha(ixt,iq_vap)) 225 229 write(*,*) 'zx_defau_diag(i,k,iq_vap)=', 226 230 : zx_defau_diag(i,k,iq_vap) 227 write(*,*) 'q(i,k-1,iq iso(ixt,iq_vap))=',228 : q(i,k-1,iq iso(ixt,iq_vap))231 write(*,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap))=', 232 : q(i,k-1,iqIsoPha(ixt,iq_vap)) 229 233 stop 230 234 endif … … 242 246 enddo !do k=2,llm 243 247 244 if (ok_iso_verif) then 245 call check_isotopes(q,ijb,ije,'qminimum 168') 246 endif !if (ok_iso_verif) then 248 call check_isotopes(q,ijb,ije,'qminimum 168') 247 249 248 250 … … 255 257 256 258 ! on ajoute eau liquide en k en k 257 do ixt=1,nt raciso258 q(i,k,iq iso(ixt,iq_liq))=q(i,k,iqiso(ixt,iq_liq))259 do ixt=1,ntiso 260 q(i,k,iqIsoPha(ixt,iq_liq))=q(i,k,iqIsoPha(ixt,iq_liq)) 259 261 : +zx_defau_diag(i,k,iq_liq) 260 : *q(i,k,iq iso(ixt,iq_vap))/q_follow(i,k,iq_vap)262 : *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap) 261 263 ! et on la retranche à la vapeur en k 262 q(i,k,iq iso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))264 q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap)) 263 265 : -zx_defau_diag(i,k,iq_liq) 264 : *q(i,k,iq iso(ixt,iq_vap))/q_follow(i,k,iq_vap)266 : *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap) 265 267 enddo !do ixt=1,niso 266 268 q_follow(i,k,iq_liq)= q_follow(i,k,iq_liq) … … 273 275 enddo !do k=2,llm 274 276 275 if (ok_iso_verif) then 276 call check_isotopes(q,ijb,ije,'qminimum 197') 277 endif !if (ok_iso_verif) then 278 279 endif !if (ok_isotopes) then 277 call check_isotopes(q,ijb,ije,'qminimum 197') 278 279 endif !if (niso > 0) then 280 280 !write(*,*) 'qminimum 188' 281 281 c
Note: See TracChangeset
for help on using the changeset viewer.