Changeset 3800 for LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F
- Timestamp:
- Jan 15, 2021, 6:10:56 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.