Changeset 3852 for LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/vlsplt_loc.F
- Timestamp:
- Feb 22, 2021, 5:28:31 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ-tracers/libf/dyn3dmem/vlsplt_loc.F
r3851 r3852 14 14 c -------------------------------------------------------------------- 15 15 USE parallel_lmdz 16 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils,! CRisi &16 USE infotrac, ONLY : nqtot,tracers, tra, ! CRisi & 17 17 & qperemin,masseqmin,ratiomin ! MVals et CRisi 18 18 IMPLICIT NONE … … 44 44 45 45 REAL Ratio(ijb_u:ije_u,llm,nqtot) ! CRisi 46 INTEGER ifils,iq2 ! CRisi 46 INTEGER ichld,iq2 ! CRisi 47 TYPE(tra), POINTER :: tr 47 48 48 49 Logical extremum … … 54 55 55 56 INTEGER ijb,ije,ijb_x,ije_x 56 57 58 tr => tracers(iq) 59 57 60 !write(*,*) 'vlsplt 58: entree dans vlx_loc, iq,ijb_x=', 58 61 ! & iq,ijb_x … … 330 333 ! Il faut faire ça avant d'avoir mis à jour q et masse 331 334 332 if ( nqfils(iq).gt.0) then333 do i fils=1,nqdesc(iq)334 !do i fils=1,nqfils(iq)! modif C Risi 22nov2020335 if (tr%ndesc > 0) then 336 do ichld=1,tr%ndesc 337 !do ichld=1,tr%nchld ! modif C Risi 22nov2020 335 338 ! attention: comme Ratio est utilisé comme q dans l'appel 336 339 ! recursif, il doit contenir à lui seul tous les indices de tous 337 340 ! les descendants! 338 iq2= iqfils(ifils,iq)341 iq2=tr%idesc(ichld) 339 342 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 340 343 DO l=1,llm … … 352 355 enddo 353 356 c$OMP END DO NOWAIT 354 enddo !do i fils=1,nqdesc(iq)355 do i fils=1,nqfils(iq)356 iq2= iqfils(ifils,iq)357 enddo !do ichld=1,tr%ndesc 358 do ichld=1,tr%nchld 359 iq2=tr%idesc(ichld) 357 360 call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2) 358 enddo !do i fils=1,nqfils(iq)359 endif !if ( nqfils(iq).gt.0) then361 enddo !do ichld=1,tr%nchld 362 endif !if (tr%ndesc > 0) then 360 363 ! end CRisi 361 364 … … 383 386 ! On calcule q entre ijb+1 et ije -> on fait pareil pour ratio 384 387 ! puis on boucle en longitude 385 if ( nqfils(iq).gt.0) then386 do i fils=1,nqdesc(iq)387 !do i fils=1,nqfils(iq)! modif C Risi 22nov2020388 iq2= iqfils(ifils,iq)388 if (tr%ndesc > 0) then 389 do ichld=1,tr%ndesc 390 !do ichld=1,tr%nchld ! modif C Risi 22nov2020 391 iq2=tr%idesc(ichld) 389 392 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 390 393 DO l=1,llm … … 397 400 enddo !DO l=1,llm 398 401 c$OMP END DO NOWAIT 399 enddo !do i fils=1,nqdesc(iq)400 endif !if ( nqfils(iq).gt.0) then402 enddo !do ichld=1,tr%ndesc 403 endif !if (tr%ndesc > 0) then 401 404 402 405 !write(*,*) 'vlsplt 399: iq,ijb_x=',iq,ijb_x … … 422 425 c -------------------------------------------------------------------- 423 426 USE parallel_lmdz 424 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils,! CRisi &427 USE infotrac, ONLY : nqtot, tracers, tra, ! CRisi & 425 428 & qperemin,masseqmin,ratiomin ! MVals et CRisi 426 429 USE comconst_mod, ONLY: pi … … 468 471 469 472 REAL Ratio(ijb_u:ije_u,llm,nqtot) ! CRisi 470 INTEGER ifils,iq2 ! CRisi 473 INTEGER ichld,iq2 ! CRisi 474 TYPE(tra), POINTER :: tr 471 475 c 472 476 c … … 478 482 INTEGER ijb,ije 479 483 INTEGER ijbm,ijem 484 485 tr => tracers(iq) 480 486 481 487 ijb=ij_begin-2*iip1 … … 732 738 ! CRisi: appel récursif de l'advection sur les fils. 733 739 ! Il faut faire ça avant d'avoir mis à jour q et masse 734 !write(*,*) 'vly 689: iq, nqfils(iq)=',iq,nqfils(iq)740 !write(*,*) 'vly 689: iq,tr%nchld=',iq,tr%nchld 735 741 736 742 ijb=ij_begin-2*iip1 … … 743 749 if (pole_sud) ijem=ij_end 744 750 745 if ( nqfils(iq).gt.0) then746 do i fils=1,nqdesc(iq)747 !do i fils=1,nqfils(iq)! modif C Risi 22nov2020748 iq2= iqfils(ifils,iq)751 if (tr%ndesc > 0) then 752 do ichld=1,tr%ndesc 753 !do ichld=1,tr%nchld ! modif C Risi 22nov2020 754 iq2=tr%idesc(ichld) 749 755 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 750 756 DO l=1,llm … … 767 773 enddo !DO l=1,llm 768 774 c$OMP END DO NOWAIT 769 enddo !do i fils=1,nqdesc(iq)770 771 do i fils=1,nqfils(iq)772 iq2= iqfils(ifils,iq)775 enddo !do ichld=1,tr%ndesc 776 777 do ichld=1,tr%nchld 778 iq2=tr%idesc(ichld) 773 779 call vly_loc(Ratio,pente_max,masse,qbyv,iq2) 774 enddo !do i fils=1,nqfils(iq)775 endif !if ( nqfils(iq).gt.0) then780 enddo !do ichld=1,tr%nchld 781 endif !if (tr%ndesc > 0) then 776 782 ! end CRisi 777 783 … … 862 868 ! if (pole_sud) ije=ij_end 863 869 864 if ( nqfils(iq).gt.0) then865 do i fils=1,nqdesc(iq)866 iq2= iqfils(ifils,iq)870 if (tr%ndesc > 0) then 871 do ichld=1,tr%ndesc 872 iq2=tr%idesc(ichld) 867 873 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 868 874 DO l=1,llm … … 872 878 enddo 873 879 c$OMP END DO NOWAIT 874 enddo !do i fils=1,nqdesc(iq)875 endif !if ( nqfils(iq).gt.0) then880 enddo !do ichld=1,tr%ndesc 881 endif !if (tr%ndesc > 0) then 876 882 877 883 … … 895 901 USE parallel_lmdz 896 902 USE vlz_mod 897 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils,! CRisi &903 USE infotrac, ONLY : nqtot, tracers, tra, ! CRisi & 898 904 & qperemin,masseqmin,ratiomin ! MVals et CRisi 899 905 … … 946 952 ! Ces varibles doivent être déclarées en pointer et en save dans 947 953 ! vlz_loc si on veut qu'elles soient vues par tous les threads. 948 INTEGER i fils,iq2 ! CRisi954 INTEGER ichld,iq2 ! CRisi 949 955 950 956 … … 1159 1165 ! CRisi: appel récursif de l'advection sur les fils. 1160 1166 ! Il faut faire ça avant d'avoir mis à jour q et masse 1161 !write(*,*) 'vlsplt 942: iq, nqfils(iq)=',iq,nqfils(iq)1162 if ( nqfils(iq).gt.0) then1163 do i fils=1,nqdesc(iq)1164 !do i fils=1,nqfils(iq)! modif C Risi 22 nov 20201165 iq2= iqfils(ifils,iq)1167 !write(*,*) 'vlsplt 942: iq,tr%nchld=',iq,tr%nchld 1168 if (tr%ndesc > 0) then 1169 do ichld=1,tr%ndesc 1170 !do ichld=1,tr%nchld ! modif C Risi 22 nov 2020 1171 iq2=tr%idesc(ichld) 1166 1172 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1167 1173 DO l=1,llm … … 1179 1185 enddo 1180 1186 c$OMP END DO NOWAIT 1181 enddo !do i fils=1,nqdesc(iq)1187 enddo !do ichld=1,tr%ndesc 1182 1188 c$OMP BARRIER 1183 1189 1184 do i fils=1,nqfils(iq)1185 iq2= iqfils(ifils,iq)1190 do ichld=1,tr%nchld 1191 iq2=tr%idesc(ichld) 1186 1192 call vlz_loc(Ratio,pente_max,masse,w,ijb_x,ije_x,iq2) 1187 enddo !do i fils=1,nqfils(iq)1188 endif !if ( nqfils(iq).gt.0) then1193 enddo !do ichld=1,tr%nchld 1194 endif !if (tr%ndesc > 0) then 1189 1195 ! end CRisi 1190 1196 … … 1207 1213 1208 1214 ! retablir les fils en rapport de melange par rapport a l'air: 1209 if ( nqfils(iq).gt.0) then1210 do i fils=1,nqdesc(iq)1211 iq2= iqfils(ifils,iq)1215 if (tr%ndesc > 0) then 1216 do ichld=1,tr%ndesc 1217 iq2=tr%idesc(ichld) 1212 1218 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1213 1219 DO l=1,llm … … 1217 1223 enddo 1218 1224 c$OMP END DO NOWAIT 1219 enddo !do i fils=1,nqdesc(iq)1220 endif !if ( nqfils(iq).gt.0) then1225 enddo !do ichld=1,tr%ndesc 1226 endif !if (tr%ndesc > 0) then 1221 1227 1222 1228 RETURN
Note: See TracChangeset
for help on using the changeset viewer.