Changeset 3800
- Timestamp:
- Jan 15, 2021, 6:10:56 PM (4 years ago)
- Location:
- LMDZ6/trunk/libf
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3d_common/infotrac.F90
-
Property
svn:keywords
set to
Id
r3666 r3800 32 32 INTEGER, ALLOCATABLE, DIMENSION(:,:), SAVE :: iqfils 33 33 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: iqpere 34 REAL :: qperemin,masseqmin,ratiomin ! MVals et CRisi 35 PARAMETER (qperemin=1e-16,masseqmin=1e-16,ratiomin=1e-16) ! MVals 34 36 35 37 ! conv_flg(it)=0 : convection desactivated for tracer number it -
Property
svn:keywords
set to
-
LMDZ6/trunk/libf/dyn3dmem/qminimum_loc.F
-
Property
svn:keywords
set to
Id
r2600 r3800 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE qminimum_loc( q,nqtot,deltap ) 2 5 USE parallel_lmdz 3 USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif 6 USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif, & 7 & ratiomin,qperemin ! CRisi 23nov2020 4 8 IMPLICIT none 5 9 c … … 49 53 c 50 54 51 !write( *,*) 'qminimum 52: entree'55 !write(lunout,*) 'qminimum 52: entree' 52 56 if (ok_iso_verif) then 53 57 call check_isotopes(q,ij_begin,ij_end,'qminimum 52') … … 60 64 q_follow(ijb:ije,:,1:2)=q(ijb:ije,:,1:2) 61 65 62 !write( *,*) 'qminimum 57'66 !write(lunout,*) 'qminimum 57' 63 67 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 64 68 DO 1000 k = 1, llm … … 85 89 c le defaut en prennant de l'eau vapeur de la couche au-dessous. 86 90 c 87 !write( *,*) 'qminimum 81'91 !write(lunout,*) 'qminimum 81' 88 92 iq = iq_vap 89 93 c … … 113 117 c doit imprimer un message d'avertissement (saturation possible). 114 118 c 115 !write( *,*) 'qminimum 106'119 !write(lunout,*) 'qminimum 106' 116 120 nb_pump=0 117 121 c$OMP DO SCHEDULE(STATIC) … … 135 139 ENDIF 136 140 137 !write( *,*) 'qminimum 128'141 !write(lunout,*) 'qminimum 128' 138 142 if (ok_isotopes) then 143 !write(lunout,*) 'qminimum 140' 139 144 ! CRisi: traiter de même les traceurs d'eau 140 145 ! Mais il faut les prendre à l'envers pour essayer de conserver la … … 144 149 ! rien ici et on croise les doigts pour que ça ne soit pas trop 145 150 ! génant 151 ! en fait, si, c'est genant quand les isotopes doivent eux même transporter des 152 ! traceurs -> apporter aussi un peu d'isotopes... Combien? 153 ! Essayer tnat/2 = -500 permil? C'est déjà mieux que -1000 154 ! permil... 155 ! pb: que faire pour les traceurs? 156 c$OMP DO SCHEDULE(STATIC) 146 157 DO i = ijb, ije 147 158 if (zx_pump(i).gt.0.0) then … … 149 160 endif !if (zx_pump(i).gt.0.0) then 150 161 enddo !DO i = ijb, ije 162 c$OMP END DO 151 163 152 164 ! 2) transfert de vap vers les couches plus hautes 153 !write( *,*) 'qminimum 139'165 !write(lunout,*) 'qminimum 158' 154 166 do k=2,llm 167 c$OMP DO SCHEDULE(STATIC) 155 168 DO i = ijb, ije 156 169 if (zx_defau_diag(i,k,iq_vap).gt.0.0) then 157 ! on ajoute la vapeur en k 158 do ixt=1,ntraciso 170 ! on ajoute la vapeur en k 171 ! write(lunout,*) 'i,k,q_follow(i,k-1,iq_vap)=', 172 ! : i,k,q_follow(i,k-1,iq_vap) 173 if (q_follow(i,k-1,iq_vap).lt.qperemin) then 174 write(lunout,*) 'tmp qmin: on stoppe' 175 write(lunout,*) 'zx_pump(i)=',zx_pump(i) 176 write(lunout,*) 'q_follow(i,:,iq_vap)=', 177 : q_follow(i,:,iq_vap) 178 write(lunout,*) 'k=',k 179 call abort_gcm("qminimum","not enough vapor",1) 180 endif 181 do ixt=1,ntraciso 182 ! write(lunout,*) 'qmin 168: ixt=',ixt 183 ! write(lunout,*) 'q(i,k,iqiso(ixt,iq_vap)=', 184 ! : q(i,k,iqiso(ixt,iq_vap)) 185 ! write(lunout,*) 'zx_defau_diag(i,k,iq_vap)=', 186 ! : zx_defau_diag(i,k,iq_vap) 187 ! write(lunout,*) 'q(i,k-1,iqiso(ixt,iq_vap)=', 188 ! : q(i,k-1,iqiso(ixt,iq_vap)) 189 159 190 q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap)) 160 191 : +zx_defau_diag(i,k,iq_vap) … … 207 238 endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then 208 239 enddo !DO i = 1, ip1jmp1 209 enddo !do k=2,llm 240 c$OMP END DO 241 enddo !do k=2,llm 210 242 211 243 if (ok_iso_verif) then … … 217 249 !write(*,*) 'qminimum 164' 218 250 do k=1,llm 251 c$OMP DO SCHEDULE(STATIC) 219 252 DO i = ijb, ije 220 253 if (zx_defau_diag(i,k,iq_liq).gt.0.0) then … … 235 268 : -zx_defau_diag(i,k,iq_liq) 236 269 endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then 237 enddo !DO i = 1, ip1jmp1 270 enddo !DO i = ijb, ije 271 c$OMP END DO 238 272 enddo !do k=2,llm 239 273 -
Property
svn:keywords
set to
-
LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F
-
Property
svn:keywords
set to
Id
r3435 r3800 14 14 c -------------------------------------------------------------------- 15 15 USE parallel_lmdz 16 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 16 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi & 17 & qperemin,masseqmin,ratiomin ! MVals et CRisi 17 18 IMPLICIT NONE 18 19 c … … 329 330 ! Il faut faire ça avant d'avoir mis à jour q et masse 330 331 331 !write(*,*) 'vlsplt 326: iq,ijb_x,nqfils(iq)=',iq,ijb_x,nqfils(iq) 332 333 if (nqfils(iq).gt.0) then 332 if (nqfils(iq).gt.0) then 334 333 do ifils=1,nqdesc(iq) 334 !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020 335 ! attention: comme Ratio est utilisé comme q dans l'appel 336 ! recursif, il doit contenir à lui seul tous les indices de tous 337 ! les descendants! 335 338 iq2=iqfils(ifils,iq) 336 339 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) … … 339 342 ! On a besoin de q et masse seulement entre ijb et ije. On ne 340 343 ! les calcule donc que de ijb à ije 341 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 342 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 344 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 345 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin) 346 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020 347 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 348 else 349 Ratio(ij,l,iq2)=ratiomin 350 endif 343 351 enddo 344 352 enddo … … 352 360 ! end CRisi 353 361 354 !write(*,*) 'vlsplt 360: iq,ijb_x=',iq,ijb_x355 362 356 363 c calcul des tENDances … … 358 365 DO l=1,llm 359 366 DO ij=ijb+1,ije 360 new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l) 367 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 368 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),masseqmin) 361 369 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ 362 370 & u_mq(ij-1,l)-u_mq(ij,l)) … … 371 379 ENDDO 372 380 c$OMP END DO NOWAIT 373 !write(*,*) 'vlsplt 380: iq,ijb_x=',iq,ijb_x374 381 375 382 ! retablir les fils en rapport de melange par rapport a l'air: … … 378 385 if (nqfils(iq).gt.0) then 379 386 do ifils=1,nqdesc(iq) 387 !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020 380 388 iq2=iqfils(ifils,iq) 381 389 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) … … 414 422 c -------------------------------------------------------------------- 415 423 USE parallel_lmdz 416 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 424 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi & 425 & qperemin,masseqmin,ratiomin ! MVals et CRisi 417 426 USE comconst_mod, ONLY: pi 418 427 IMPLICIT NONE … … 468 477 DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./ 469 478 INTEGER ijb,ije 479 INTEGER ijbm,ijem 470 480 471 481 ijb=ij_begin-2*iip1 … … 726 736 ijb=ij_begin-2*iip1 727 737 ije=ij_end+2*iip1 738 ijbm=ij_begin-iip1 739 ijem=ij_end+iip1 728 740 if (pole_nord) ijb=ij_begin 729 if (pole_sud) ije=ij_end 730 741 if (pole_sud) ije=ij_end 742 if (pole_nord) ijbm=ij_begin 743 if (pole_sud) ijem=ij_end 744 731 745 if (nqfils(iq).gt.0) then 732 746 do ifils=1,nqdesc(iq) 747 !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020 733 748 iq2=iqfils(ifils,iq) 734 749 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 735 750 DO l=1,llm 751 ! modif des bornes: CRisi 16 nov 2020 752 ! d'abord masse avec bornes corrigées 753 DO ij=ijbm,ijem 754 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 755 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin) 756 enddo !DO ij=ijbm,ijem 757 758 ! ensuite Ratio avec anciennes bornes 736 759 DO ij=ijb,ije 737 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 738 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 739 enddo 740 enddo 760 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 761 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020 762 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 763 else 764 Ratio(ij,l,iq2)=ratiomin 765 endif 766 enddo !DO ij=ijbm,ijem 767 enddo !DO l=1,llm 741 768 c$OMP END DO NOWAIT 742 769 enddo !do ifils=1,nqdesc(iq) … … 868 895 USE parallel_lmdz 869 896 USE vlz_mod 870 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 897 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi & 898 & qperemin,masseqmin,ratiomin ! MVals et CRisi 899 871 900 IMPLICIT NONE 872 901 c … … 1084 1113 lorig(ij,l)=lorig(ij,l)-1 1085 1114 ENDIF 1115 ! CRisi 24nov2020: ajout d'un message d'erreur clair au lieu d'un plantage 1116 ! pour seg fault 1117 if (lorig(ij,l).eq.0) then 1118 call abort_gcm("vlz in vlsplt_loc", 1119 : "unfixable violation of CFL",1) 1120 endif 1086 1121 morig(ij,l)=masse(ij,lorig(ij,l),iq) 1087 1122 qorig(ij,l)=q(ij,lorig(ij,l),iq) … … 1127 1162 if (nqfils(iq).gt.0) then 1128 1163 do ifils=1,nqdesc(iq) 1164 !do ifils=1,nqfils(iq) ! modif C Risi 22 nov 2020 1129 1165 iq2=iqfils(ifils,iq) 1130 1166 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1131 1167 DO l=1,llm 1132 1168 DO ij=ijb,ije 1133 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 1134 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 1169 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 1170 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin) 1171 if (q(ij,l,iq).gt.qperemin) then 1172 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 1173 else 1174 Ratio(ij,l,iq2)=ratiomin 1175 endif 1135 1176 !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015 1136 1177 w(ij,l,iq2)=wq(ij,l,iq) -
Property
svn:keywords
set to
-
LMDZ6/trunk/libf/dyn3dmem/vlspltqs_loc.F
-
Property
svn:keywords
set to
Id
r2603 r3800 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE vlxqs_loc(q,pente_max,masse,u_m,qsat,ijb_x,ije_x,iq) 2 5 c … … 9 12 c -------------------------------------------------------------------- 10 13 USE parallel_lmdz 11 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 14 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi & 15 & qperemin,masseqmin,ratiomin ! MVals et CRisi 12 16 IMPLICIT NONE 13 17 c … … 342 346 DO l=1,llm 343 347 DO ij=ijb,ije 344 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 345 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 348 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 349 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin) 350 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020 351 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 352 else 353 Ratio(ij,l,iq2)=ratiomin 354 endif 346 355 enddo 347 356 enddo … … 362 371 DO l=1,llm 363 372 DO ij=ijb+1,ije 364 new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l) 373 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 374 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),masseqmin) 365 375 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ 366 376 & u_mq(ij-1,l)-u_mq(ij,l)) … … 416 426 c -------------------------------------------------------------------- 417 427 USE parallel_lmdz 418 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 428 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi & 429 & qperemin,masseqmin,ratiomin ! MVals et CRisi 419 430 USE comconst_mod, ONLY: pi 420 431 IMPLICIT NONE … … 423 434 include "paramet.h" 424 435 include "comgeom.h" 436 include "iniprint.h" 425 437 c 426 438 c … … 464 476 DATA first/.true./ 465 477 INTEGER ijb,ije 478 INTEGER ijbm,ijem 466 479 467 480 ijb=ij_begin-2*iip1 … … 724 737 ijb=ij_begin-2*iip1 725 738 ije=ij_end+2*iip1 739 ijbm=ij_begin-iip1 740 ijem=ij_end+iip1 726 741 if (pole_nord) ijb=ij_begin 727 742 if (pole_sud) ije=ij_end 728 743 if (pole_nord) ijbm=ij_begin 744 if (pole_sud) ijem=ij_end 745 746 !write(lunout,*) 'vlspltqs 737: iq,ijb,ije=',iq,ijb,ije 747 !write(lunout,*) 'ij_begin,ij_end=',ij_begin,ij_end 748 !write(lunout,*) 'pole_nord,pole_sud=',pole_nord,pole_sud 729 749 if (nqfils(iq).gt.0) then 730 750 do ifils=1,nqdesc(iq) … … 732 752 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 733 753 DO l=1,llm 754 ! modif des bornes: CRisi 16 nov 2020 755 ! d'abord masse avec bornes corrigées 756 DO ij=ijbm,ijem 757 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 758 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin) 759 enddo !DO ij=ijbm,ijem 760 761 ! ensuite Ratio avec anciennes bornes 734 762 DO ij=ijb,ije 735 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 736 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 737 enddo 738 enddo 763 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 764 !write(lunout,*) 'ij,l,q(ij,l,iq)=',ij,l,q(ij,l,iq) 765 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020 766 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 767 else 768 Ratio(ij,l,iq2)=ratiomin 769 endif 770 enddo !DO ij=ijbm,ijem 771 enddo !DO l=1,llm 739 772 c$OMP END DO NOWAIT 740 773 enddo !do ifils=1,nqdesc(iq) 741 774 do ifils=1,nqfils(iq) 742 775 iq2=iqfils(ifils,iq) 776 !write(lunout,*) 'vly: appel recursiv vly iq2=',iq2 743 777 call vly_loc(Ratio,pente_max,masse,qbyv,iq2) 744 778 enddo !do ifils=1,nqfils(iq) -
Property
svn:keywords
set to
Note: See TracChangeset
for help on using the changeset viewer.