Changeset 2296 for trunk/LMDZ.COMMON/libf/dyn3dpar
- Timestamp:
- Apr 24, 2020, 6:55:59 PM (5 years ago)
- Location:
- trunk/LMDZ.COMMON/libf/dyn3dpar
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/dyn3dpar/advtrac_p.F90
r2126 r2296 17 17 USE Vampir 18 18 USE times 19 USE infotrac, ONLY: nqtot, iadv 19 USE infotrac, ONLY: nqtot, iadv, ok_iso_verif 20 20 USE control_mod, ONLY: iapp_tracvl, day_step, planet_type, & 21 21 force_conserv_tracer … … 271 271 272 272 !ym call massbar_p(massem,massebx,masseby) 273 274 273 call vlspltgen_p( q,iadv, 2., massem, wg , & 275 274 pbarug,pbarvg,dtvr,p_tmp,pk_tmp,teta_tmp ) 276 275 276 !write(*,*) 'advtrac 162: apres appel vlspltgen_loc' 277 if (ok_iso_verif) then 278 call check_isotopes(q,1,ip1jmp1,'advtrac 162') 279 endif !if (ok_iso_verif) then 277 280 278 281 !!! ATTENTION !!!! TOUT CE QUI EST ENTRE ICI ET 1234 EST OBSOLETE !!!!!!! … … 291 294 if(iadv(iq).eq.10) THEN 292 295 293 call vlsplt_p(q(1,1,iq),2.,massem,wg,pbarug,pbarvg,dtvr) 296 ! call vlsplt_p(q(1,1,iq),2.,massem,wg,pbarug,pbarvg,dtvr) 297 call vlsplt_p(q,2.,massem,wg,pbarug,pbarvg,dtvr,iq) !MVals 294 298 295 299 ! ---------------------------------------------------------------- -
trunk/LMDZ.COMMON/libf/dyn3dpar/vlsplt_p.F
r1422 r2296 1 SUBROUTINE vlsplt_p(q,pente_max,masse,w,pbaru,pbarv,pdt )1 SUBROUTINE vlsplt_p(q,pente_max,masse,w,pbaru,pbarv,pdt,iq) 2 2 c 3 3 c Auteurs: P.Le Van, F.Hourdin, F.Forget … … 17 17 USE mod_hallo 18 18 USE Vampir 19 USE infotrac, ONLY : nqtot,nqdesc,iqfils ! CRisi 19 20 IMPLICIT NONE 20 21 c … … 28 29 c REAL masse(iip1,jjp1,llm),pente_max 29 30 REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm) 30 REAL q(ip1jmp1,llm) 31 c REAL q(iip1,jjp1,llm) 31 REAL q(ip1jmp1,llm,nqtot) !CRisi: add dimension nqtot 32 32 REAL w(ip1jmp1,llm),pdt 33 INTEGER iq !CRisi 33 34 c 34 35 c Local … … 38 39 INTEGER ijlqmin,iqmin,jqmin,lqmin 39 40 c 40 REAL zm(ip1jmp1,llm ),newmasse41 REAL zm(ip1jmp1,llm,nqtot),newmasse 41 42 REAL mu(ip1jmp1,llm) 42 43 REAL mv(ip1jm,llm) 43 REAL mw(ip1jmp1,llm+1 )44 REAL zq(ip1jmp1,llm ),zz44 REAL mw(ip1jmp1,llm+1,nqtot) 45 REAL zq(ip1jmp1,llm,nqtot),zz 45 46 REAL dqx(ip1jmp1,llm),dqy(ip1jmp1,llm),dqz(ip1jmp1,llm) 46 47 REAL second,temps0,temps1,temps2,temps3 … … 51 52 SAVE temps1,temps2,temps3 52 53 INTEGER iminn,imaxx 54 INTEGER ifils,iq2 ! CRisi 53 55 54 56 REAL qmin,qmax … … 93 95 DO l=1,llm 94 96 DO ij=ijb,ije 95 mw(ij,l )=w(ij,l) * zzw97 mw(ij,l,iq)=w(ij,l) * zzw 96 98 ENDDO 97 99 ENDDO 98 100 99 101 DO ij=ijb,ije 100 mw(ij,llm+1 )=0.102 mw(ij,llm+1,iq)=0. 101 103 ENDDO 102 104 … … 106 108 ijb=ij_begin 107 109 ije=ij_end 108 zq(ijb:ije,: )=q(ijb:ije,:)109 zm(ijb:ije,: )=masse(ijb:ije,:)110 zq(ijb:ije,:,iq)=q(ijb:ije,:,iq) 111 zm(ijb:ije,:,iq)=masse(ijb:ije,:) 110 112 111 113 112 114 c print*,'Entree vlx1' 113 115 c call minmaxq(zq,qmin,qmax,'avant vlx ') 114 call vlx_p(zq,pente_max,zm,mu,ij_begin,ij_begin+2*iip1-1 )115 call vlx_p(zq,pente_max,zm,mu,ij_end-2*iip1+1,ij_end )116 call vlx_p(zq,pente_max,zm,mu,ij_begin,ij_begin+2*iip1-1,iq) 117 call vlx_p(zq,pente_max,zm,mu,ij_end-2*iip1+1,ij_end,iq) 116 118 call VTb(VTHallo) 117 119 call Register_Hallo(zq,ip1jmp1,llm,2,2,2,2,MyRequest1) … … 119 121 call SendRequest(MyRequest1) 120 122 call VTe(VTHallo) 121 call vlx_p(zq,pente_max,zm,mu,ij_begin+2*iip1,ij_end-2*iip1 )123 call vlx_p(zq,pente_max,zm,mu,ij_begin+2*iip1,ij_end-2*iip1,iq) 122 124 c call vlx_p(zq,pente_max,zm,mu,ij_begin,ij_end) 123 125 call VTb(VTHallo) … … 133 135 c call exchange_hallo(zm,ip1jmp1,llm,1,1) 134 136 135 call vly_p(zq,pente_max,zm,mv )137 call vly_p(zq,pente_max,zm,mv,iq) 136 138 c call minmaxq(zq,qmin,qmax,'apres vly1 ') 137 139 c print*,'Sortie vly1' 138 call vlz_p(zq,pente_max,zm,mw,ij_begin,ij_begin+2*iip1-1 )139 call vlz_p(zq,pente_max,zm,mw,ij_end-2*iip1+1,ij_end )140 call vlz_p(zq,pente_max,zm,mw,ij_begin,ij_begin+2*iip1-1,iq) 141 call vlz_p(zq,pente_max,zm,mw,ij_end-2*iip1+1,ij_end,iq) 140 142 call VTb(VTHallo) 141 143 call Register_Hallo(zq,ip1jmp1,llm,2,2,2,2,MyRequest2) … … 143 145 call SendRequest(MyRequest2) 144 146 call VTe(VTHallo) 145 call vlz_p(zq,pente_max,zm,mw,ij_begin+2*iip1,ij_end-2*iip1 )147 call vlz_p(zq,pente_max,zm,mw,ij_begin+2*iip1,ij_end-2*iip1,iq) 146 148 call VTb(VTHallo) 147 149 call WaitRecvRequest(MyRequest2) … … 154 156 155 157 156 call vly_p(zq,pente_max,zm,mv )158 call vly_p(zq,pente_max,zm,mv,iq) 157 159 c call minmaxq(zq,qmin,qmax,'apres vly ') 158 160 159 161 160 call vlx_p(zq,pente_max,zm,mu,ij_begin,ij_end )162 call vlx_p(zq,pente_max,zm,mu,ij_begin,ij_end,iq) 161 163 c call minmaxq(zq,qmin,qmax,'apres vlx2 ') 162 164 … … 167 169 DO l=1,llm 168 170 DO ij=ijb,ije 169 q(ij,l )=zq(ij,l)171 q(ij,l,iq)=zq(ij,l,iq) 170 172 ENDDO 171 173 ENDDO … … 174 176 DO l=1,llm 175 177 DO ij=ijb,ije-iip1+1,iip1 176 q(ij+iim,l)=q(ij,l) 177 ENDDO 178 ENDDO 178 q(ij+iim,l,iq)=q(ij,l,iq) 179 ENDDO 180 ENDDO 181 182 ! CRisi: aussi pour les fils 183 if (nqdesc(iq).gt.0) then 184 do ifils=1,nqdesc(iq) 185 iq2=iqfils(ifils,iq) 186 DO l=1,llm 187 DO ij=ijb,ije 188 q(ij,l,iq2)=zq(ij,l,iq2) 189 ENDDO 190 DO ij=ijb,ije-iip1+1,iip1 191 q(ij+iim,l,iq2)=q(ij,l,iq2) 192 ENDDO 193 ENDDO 194 enddo !do ifils=1,nqdesc(iq) 195 endif ! if (nqdesc(iq).gt.0) then 179 196 180 197 call WaitSendRequest(MyRequest1) … … 185 202 186 203 187 SUBROUTINE vlx_p(q,pente_max,masse,u_m,ijb_x,ije_x)204 RECURSIVE SUBROUTINE vlx_p(q,pente_max,masse,u_m,ijb_x,ije_x,iq) 188 205 189 206 c Auteurs: P.Le Van, F.Hourdin, F.Forget … … 197 214 c -------------------------------------------------------------------- 198 215 USE Parallel_lmdz 216 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 199 217 IMPLICIT NONE 200 218 c … … 205 223 c Arguments: 206 224 c ---------- 207 REAL masse(ip1jmp1,llm ),pente_max225 REAL masse(ip1jmp1,llm,nqtot),pente_max 208 226 REAL u_m( ip1jmp1,llm ),pbarv( iip1,jjm,llm) 209 REAL q(ip1jmp1,llm) 210 REAL w(ip1jmp1,llm) 227 REAL q(ip1jmp1,llm,nqtot) ! CRisi: ajout dimension nqtot 228 !REAL w(ip1jmp1,llm,nqtot) !MVals seems not useful in this case 229 INTEGER iq ! CRisi 211 230 c 212 231 c Local … … 222 241 REAL u_mq(ip1jmp1,llm) 223 242 243 REAL Ratio(ip1jmp1,llm,nqtot) ! CRisi,MVals: Ratio zq(fils)/zq(pere) 244 INTEGER ifils,iq2 ! CRisi,MVals: indices pour les traceurs fils 245 224 246 Logical extremum 225 247 … … 238 260 if (pole_nord.and.ijb==1) ijb=ijb+iip1 239 261 if (pole_sud.and.ije==ip1jmp1) ije=ije-iip1 240 262 241 263 IF (pente_max.gt.-1.e-5) THEN 242 264 c IF (pente_max.gt.10) THEN … … 250 272 251 273 DO ij=ijb,ije-1 252 dxqu(ij)=q(ij+1,l )-q(ij,l)274 dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq) 253 275 c IF(u_m(ij,l).lt.0.) stop'limx n admet pas les U<0' 254 c sigu(ij)=u_m(ij,l)/masse(ij,l )276 c sigu(ij)=u_m(ij,l)/masse(ij,l,iq) 255 277 ENDDO 256 278 DO ij=ijb+iip1-1,ije,iip1 … … 306 328 DO l = 1, llm 307 329 DO ij=ijb,ije-1 308 dxqu(ij)=q(ij+1,l )-q(ij,l)330 dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq) 309 331 ENDDO 310 332 DO ij=ijb+iip1-1,ije,iip1 … … 326 348 c$OMP END DO NOWAIT 327 349 ENDIF ! (pente_max.lt.-1.e-5) 328 329 350 c bouclage de la pente en iip1: 330 351 c ----------------------------- … … 348 369 DO l=1,llm 349 370 DO ij=ijb,ije-1 350 zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l ),351 , 1.+u_m(ij,l)/masse(ij+1,l ),352 , u_m(ij,l ))371 zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l,iq), 372 , 1.+u_m(ij,l)/masse(ij+1,l,iq), 373 , u_m(ij,l,iq)) 353 374 zdum(ij,l)=0.5*zdum(ij,l) 354 375 u_mq(ij,l)=cvmgp( 355 , q(ij,l )+zdum(ij,l)*dxq(ij,l),356 , q(ij+1,l )-zdum(ij,l)*dxq(ij+1,l),376 , q(ij,l,iq)+zdum(ij,l)*dxq(ij,l), 377 , q(ij+1,l,iq)-zdum(ij,l)*dxq(ij+1,l), 357 378 , u_m(ij,l)) 358 379 u_mq(ij,l)=u_m(ij,l)*u_mq(ij,l) … … 367 388 DO l=1,llm 368 389 DO ij=ijb,ije-1 369 c print*,'masse(',ij,')=',masse(ij,l )390 c print*,'masse(',ij,')=',masse(ij,l,iq) 370 391 IF (u_m(ij,l).gt.0.) THEN 371 zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l )372 u_mq(ij,l)=u_m(ij,l)*(q(ij,l )+0.5*zdum(ij,l)*dxq(ij,l))392 zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l,iq) 393 u_mq(ij,l)=u_m(ij,l)*(q(ij,l,iq)+0.5*zdum(ij,l)*dxq(ij,l)) 373 394 ELSE 374 zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l) 375 u_mq(ij,l)=u_m(ij,l)*(q(ij+1,l)-0.5*zdum(ij,l)*dxq(ij+1,l)) 395 zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l,iq) 396 u_mq(ij,l)=u_m(ij,l)*(q(ij+1,l,iq)-0.5*zdum(ij,l) 397 & *dxq(ij+1,l)) 376 398 ENDIF 377 399 ENDDO … … 426 448 c PRINT*,'Nombre de points pour lesquels on advect plus que le' 427 449 c & ,'contenu de la maille : ',n0 450 428 451 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 429 452 DO l=1,llm … … 450 473 i=ijq-(j-1)*iip1 451 474 c accumulation pour les mailles completements advectees 452 do while(zu_m.gt.masse(ijq,l)) 453 u_mq(ij,l)=u_mq(ij,l)+q(ijq,l)*masse(ijq,l) 454 zu_m=zu_m-masse(ijq,l) 475 do while(zu_m.gt.masse(ijq,l,iq)) 476 u_mq(ij,l)=u_mq(ij,l)+q(ijq,l,iq)* 477 & masse(ijq,l,iq) 478 zu_m=zu_m-masse(ijq,l,iq) 455 479 i=mod(i-2+iim,iim)+1 456 480 ijq=(j-1)*iip1+i … … 458 482 c ajout de la maille non completement advectee 459 483 u_mq(ij,l)=u_mq(ij,l)+zu_m* 460 & (q(ijq,l)+0.5*(1.-zu_m/masse(ijq,l))*dxq(ijq,l)) 484 & (q(ijq,l,iq)+0.5*(1.-zu_m/masse(ijq,l,iq)) 485 & *dxq(ijq,l)) 461 486 ELSE 462 487 ijq=ij+1 463 488 i=ijq-(j-1)*iip1 464 489 c accumulation pour les mailles completements advectees 465 do while(-zu_m.gt.masse(ijq,l)) 466 u_mq(ij,l)=u_mq(ij,l)-q(ijq,l)*masse(ijq,l) 467 zu_m=zu_m+masse(ijq,l) 490 do while(-zu_m.gt.masse(ijq,l,iq)) 491 u_mq(ij,l)=u_mq(ij,l)-q(ijq,l,iq) 492 & *masse(ijq,l,iq) 493 zu_m=zu_m+masse(ijq,l,iq) 468 494 i=mod(i,iim)+1 469 495 ijq=(j-1)*iip1+i 470 496 ENDDO 471 497 c ajout de la maille non completement advectee 472 u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l )-473 & 0.5*(1.+zu_m/masse(ijq,l ))*dxq(ijq,l))498 u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l,iq)- 499 & 0.5*(1.+zu_m/masse(ijq,l,iq))*dxq(ijq,l)) 474 500 ENDIF 475 501 ENDDO … … 491 517 c$OMP END DO NOWAIT 492 518 519 ! CRisi: appel récursif de l'advection sur les fils. 520 ! Il faut faire ça avant d'avoir mis à jour q et masse 521 if (nqfils(iq).gt.0) then 522 do ifils=1,nqdesc(iq) 523 iq2=iqfils(ifils,iq) 524 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 525 DO l=1,llm 526 DO ij=ijb,ije 527 ! On a besoin de q et masse seulement entre ijb et ije. On ne 528 ! les calcule donc que de ijb à ije 529 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 530 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),1e-16) 531 if (q(ij,l,iq).gt.1e-16) then 532 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 533 else 534 Ratio(ij,l,iq2)=0. 535 endif 536 enddo 537 enddo 538 c$OMP END DO NOWAIT 539 enddo !do ifils=1,nqdesc(iq) 540 do ifils=1,nqfils(iq) 541 iq2=iqfils(ifils,iq) 542 call vlx_p(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2) 543 enddo !do ifils=1,nqfils(iq) 544 endif !if (nqfils(iq).gt.0) then 545 ! end CRisi 493 546 c calcul des tENDances 494 547 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 495 548 DO l=1,llm 496 549 DO ij=ijb+1,ije 497 new_m=masse(ij,l)+u_m(ij-1,l)-u_m(ij,l) 498 q(ij,l)=(q(ij,l)*masse(ij,l)+ 550 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 551 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),1e-16) 552 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ 499 553 & u_mq(ij-1,l)-u_mq(ij,l)) 500 554 & /new_m 501 masse(ij,l )=new_m555 masse(ij,l,iq)=new_m 502 556 ENDDO 503 557 c ModIF Fred 22 03 96 correction d'un bug (les scopy ci-dessous) 504 558 DO ij=ijb+iip1-1,ije,iip1 505 q(ij-iim,l )=q(ij,l)506 masse(ij-iim,l )=masse(ij,l)559 q(ij-iim,l,iq)=q(ij,l,iq) 560 masse(ij-iim,l,iq)=masse(ij,l,iq) 507 561 ENDDO 508 562 ENDDO … … 511 565 c CALL SCOPY((jjm-1)*llm,masse(iip1+iip1,1),iip1,masse(iip2,1),iip1) 512 566 567 ! retablir les fils en rapport de melange par rapport a l'air: 568 ! On calcule q entre ijb+1 et ije -> on fait pareil pour ratio 569 ! puis on boucle en longitude 570 if (nqfils(iq).gt.0) then 571 do ifils=1,nqdesc(iq) 572 iq2=iqfils(ifils,iq) 573 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 574 DO l=1,llm 575 DO ij=ijb+1,ije 576 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 577 enddo 578 DO ij=ijb+iip1-1,ije,iip1 579 q(ij-iim,l,iq2)=q(ij,l,iq2) 580 enddo ! DO ij=ijb+iip1-1,ije,iip1 581 enddo !DO l=1,llm 582 c$OMP END DO NOWAIT 583 enddo !do ifils=1,nqdesc(iq) 584 endif !if (nqfils(iq).gt.0) then 513 585 514 586 RETURN … … 516 588 517 589 518 SUBROUTINE vly_p(q,pente_max,masse,masse_adv_v)590 RECURSIVE SUBROUTINE vly_p(q,pente_max,masse,masse_adv_v,iq) 519 591 c 520 592 c Auteurs: P.Le Van, F.Hourdin, F.Forget … … 529 601 c -------------------------------------------------------------------- 530 602 USE parallel_lmdz 603 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 531 604 USE comconst_mod, ONLY: pi 532 605 … … 540 613 c Arguments: 541 614 c ---------- 542 REAL masse(ip1jmp1,llm ),pente_max615 REAL masse(ip1jmp1,llm,nqtot),pente_max 543 616 REAL masse_adv_v( ip1jm,llm) 544 REAL q(ip1jmp1,llm), dq( ip1jmp1,llm) 617 REAL q(ip1jmp1,llm,nqtot), dq( ip1jmp1,llm) ! CRisi: ajout dimension nqtot 618 INTEGER iq ! CRisi 545 619 c 546 620 c Local … … 571 645 SAVE airej2,airejjm 572 646 c$OMP THREADPRIVATE(airej2,airejjm) 647 648 REAL Ratio(ip1jmp1,llm,nqtot) ! CRisi,MVals: Ratio zq(fils)/zq(pere) 649 INTEGER ifils,iq2 ! CRisi,MVals: indices pour les traceurs fils 573 650 c 574 651 c … … 613 690 if (pole_nord) then 614 691 DO i = 1, iim 615 airescb(i) = aire(i+ iip1) * q(i+ iip1,l )692 airescb(i) = aire(i+ iip1) * q(i+ iip1,l,iq) 616 693 ENDDO 617 694 qpns = SSUM( iim, airescb ,1 ) / airej2 … … 620 697 if (pole_sud) then 621 698 DO i = 1, iim 622 airesch(i) = aire(i+ ip1jm- iip1) * q(i+ ip1jm- iip1,l )699 airesch(i) = aire(i+ ip1jm- iip1) * q(i+ ip1jm- iip1,l,iq) 623 700 ENDDO 624 701 qpsn = SSUM( iim, airesch ,1 ) / airejjm … … 635 712 636 713 DO ij=ijb,ije 637 dyqv(ij)=q(ij,l )-q(ij+iip1,l)714 dyqv(ij)=q(ij,l,iq)-q(ij+iip1,l,iq) 638 715 adyqv(ij)=abs(dyqv(ij)) 639 716 ENDDO … … 654 731 IF (pole_nord) THEN 655 732 DO ij=1,iip1 656 dyq(ij,l)=qpns-q(ij+iip1,l )733 dyq(ij,l)=qpns-q(ij+iip1,l,iq) 657 734 ENDDO 658 735 … … 676 753 677 754 DO ij=1,iip1 678 dyq(ip1jm+ij,l)=q(ip1jm+ij-iip1,l )-qpsn755 dyq(ip1jm+ij,l)=q(ip1jm+ij-iip1,l,iq)-qpsn 679 756 ENDDO 680 757 … … 812 889 DO ij=ijb,ije 813 890 IF(masse_adv_v(ij,l).gt.0) THEN 814 qbyv(ij,l)=q(ij+iip1,l )+dyq(ij+iip1,l)*815 , 0.5*(1.-masse_adv_v(ij,l)/masse(ij+iip1,l ))891 qbyv(ij,l)=q(ij+iip1,l,iq)+dyq(ij+iip1,l)* 892 , 0.5*(1.-masse_adv_v(ij,l)/masse(ij+iip1,l,iq)) 816 893 ELSE 817 qbyv(ij,l)=q(ij,l )-dyq(ij,l)*818 , 0.5*(1.+masse_adv_v(ij,l)/masse(ij,l ))894 qbyv(ij,l)=q(ij,l,iq)-dyq(ij,l)* 895 , 0.5*(1.+masse_adv_v(ij,l)/masse(ij,l,iq)) 819 896 ENDIF 820 897 qbyv(ij,l)=masse_adv_v(ij,l)*qbyv(ij,l) … … 822 899 ENDDO 823 900 c$OMP END DO NOWAIT 901 902 ! CRisi: appel récursif de l'advection sur les fils. 903 ! Il faut faire ça avant d'avoir mis à jour q et masse 904 !write(*,*) 'vly 689: iq,nqfils(iq)=',iq,nqfils(iq) 905 906 ijb=ij_begin-2*iip1 907 ije=ij_end+2*iip1 908 if (pole_nord) ijb=ij_begin 909 if (pole_sud) ije=ij_end 910 911 if (nqfils(iq).gt.0) then 912 do ifils=1,nqdesc(iq) 913 iq2=iqfils(ifils,iq) 914 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 915 DO l=1,llm 916 DO ij=ijb,ije 917 !masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 918 !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 919 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 920 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),1e-16) 921 if (q(ij,l,iq).gt.1e-16) then 922 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 923 else 924 Ratio(ij,l,iq2)=0. 925 endif 926 enddo 927 enddo 928 c$OMP END DO NOWAIT 929 enddo !do ifils=1,nqdesc(iq) 930 931 do ifils=1,nqfils(iq) 932 iq2=iqfils(ifils,iq) 933 call vly_p(Ratio,pente_max,masse,qbyv,iq2) 934 enddo !do ifils=1,nqfils(iq) 935 endif !if (nqfils(iq).gt.0) then 936 ! end CRisi 824 937 825 938 ijb=ij_begin … … 831 944 DO l=1,llm 832 945 DO ij=ijb,ije 833 newmasse=masse(ij,l )946 newmasse=masse(ij,l,iq) 834 947 & +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l) 835 948 836 q(ij,l )=(q(ij,l)*masse(ij,l)+qbyv(ij,l)-qbyv(ij-iip1,l))837 & /newmasse838 masse(ij,l )=newmasse949 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq) 950 & +qbyv(ij,l)-qbyv(ij-iip1,l))/newmasse 951 masse(ij,l,iq)=newmasse 839 952 ENDDO 840 953 c.-. ancienne version … … 844 957 convpn=SSUM(iim,qbyv(1,l),1) 845 958 convmpn=ssum(iim,masse_adv_v(1,l),1) 846 massepn=ssum(iim,masse(1,l ),1)959 massepn=ssum(iim,masse(1,l,iq),1) 847 960 qpn=0. 848 961 do ij=1,iim 849 qpn=qpn+masse(ij,l )*q(ij,l)962 qpn=qpn+masse(ij,l,iq)*q(ij,l,iq) 850 963 enddo 851 964 qpn=(qpn+convpn)/(massepn+convmpn) 852 965 do ij=1,iip1 853 q(ij,l )=qpn966 q(ij,l,iq)=qpn 854 967 enddo 855 968 endif … … 862 975 convps=-SSUM(iim,qbyv(ip1jm-iim,l),1) 863 976 convmps=-ssum(iim,masse_adv_v(ip1jm-iim,l),1) 864 masseps=ssum(iim, masse(ip1jm+1,l ),1)977 masseps=ssum(iim, masse(ip1jm+1,l,iq),1) 865 978 qps=0. 866 979 do ij = ip1jm+1,ip1jmp1-1 867 qps=qps+masse(ij,l )*q(ij,l)980 qps=qps+masse(ij,l,iq)*q(ij,l,iq) 868 981 enddo 869 982 qps=(qps+convps)/(masseps+convmps) 870 983 do ij=ip1jm+1,ip1jmp1 871 q(ij,l )=qps984 q(ij,l,iq)=qps 872 985 enddo 873 986 endif … … 899 1012 c$OMP END DO NOWAIT 900 1013 1014 ! CRisi: retablir les fils en rapport de melange par rapport a l'air: 1015 ijb=ij_begin 1016 ije=ij_end 1017 ! if (pole_nord) ijb=ij_begin 1018 ! if (pole_sud) ije=ij_end 1019 1020 if (nqfils(iq).gt.0) then 1021 do ifils=1,nqdesc(iq) 1022 iq2=iqfils(ifils,iq) 1023 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1024 DO l=1,llm 1025 DO ij=ijb,ije 1026 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 1027 enddo 1028 enddo 1029 c$OMP END DO NOWAIT 1030 enddo !do ifils=1,nqdesc(iq) 1031 endif !if (nqfils(iq).gt.0) then 1032 901 1033 RETURN 902 1034 END … … 904 1036 905 1037 906 SUBROUTINE vlz_p(q,pente_max,masse,w,ijb_x,ije_x)1038 RECURSIVE SUBROUTINE vlz_p(q,pente_max,masse,w,ijb_x,ije_x,iq) 907 1039 c 908 1040 c Auteurs: P.Le Van, F.Hourdin, F.Forget … … 917 1049 c -------------------------------------------------------------------- 918 1050 USE Parallel_lmdz 1051 USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 919 1052 IMPLICIT NONE 920 1053 c … … 925 1058 c Arguments: 926 1059 c ---------- 927 REAL masse(ip1jmp1,llm),pente_max 928 REAL q(ip1jmp1,llm) 929 REAL w(ip1jmp1,llm+1) 1060 REAL masse(ip1jmp1,llm,nqtot),pente_max 1061 REAL q(ip1jmp1,llm,nqtot) 1062 REAL w(ip1jmp1,llm+1,nqtot) 1063 INTEGER iq 930 1064 c 931 1065 c Local … … 934 1068 INTEGER i,ij,l,j,ii 935 1069 c 936 REAL,SAVE :: wq(ip1jmp1,llm+1) 1070 ! REAL,SAVE :: wq(ip1jmp1,llm+1) 1071 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: wq !MVals 1072 937 1073 REAL newmasse 938 1074 … … 956 1092 c On oriente tout dans le sens de la pression c'est a dire dans le 957 1093 c sens de W 1094 !REAL masseq(ijb_u:ije_u,llm,nqtot),Ratio(ijb_u:ije_u,llm,nqtot) ! CRisi 1095 ! Ces varibles doivent être déclarées en pointer et en save dans 1096 ! vlz_loc si on veut qu'elles soient vues par tous les threads. 1097 !REAL Ratio(ip1jmp1,llm,nqtot) ! CRisi 1098 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: Ratio ! CRisi 1099 INTEGER ifils,iq2 ! CRisi 1100 LOGICAL, SAVE :: first=.TRUE.!MVals 1101 !$OMP THREADPRIVATE(first) 1102 1103 IF (first) THEN !MVals 1104 first=.FALSE. 1105 !$OMP MASTER 1106 ALLOCATE(wq(ip1jmp1,llm+1,nqtot)) !MVals 1107 ALLOCATE(Ratio(ip1jmp1,llm,nqtot)) !MVals 1108 !$OMP END MASTER 1109 !$OMP BARRIER 1110 END IF !MVals 958 1111 959 1112 #ifdef BIDON … … 969 1122 DO l=2,llm 970 1123 DO ij=ijb,ije 971 dzqw(ij,l)=q(ij,l-1 )-q(ij,l)1124 dzqw(ij,l)=q(ij,l-1,iq)-q(ij,l,iq) 972 1125 adzqw(ij,l)=abs(dzqw(ij,l)) 973 1126 ENDDO … … 999 1152 dzq(ij,llm)=0. 1000 1153 ENDDO 1154 ! ALLOCATE(wq(ip1jmp1,llm+1,nqtot)) !MVals 1001 1155 c$OMP END MASTER 1002 1156 c$OMP BARRIER … … 1015 1169 DO l = 1,llm-1 1016 1170 do ij = ijb,ije 1017 IF(w(ij,l+1).gt.0.) THEN 1018 sigw=w(ij,l+1)/masse(ij,l+1) 1019 wq(ij,l+1)=w(ij,l+1)*(q(ij,l+1)+0.5*(1.-sigw)*dzq(ij,l+1)) 1171 IF(w(ij,l+1,iq).gt.0.) THEN 1172 sigw=w(ij,l+1,iq)/masse(ij,l+1,iq) 1173 wq(ij,l+1,iq)=w(ij,l+1,iq)*(q(ij,l+1,iq)+0.5*(1.-sigw) 1174 & *dzq(ij,l+1)) 1020 1175 ELSE 1021 sigw=w(ij,l+1)/masse(ij,l) 1022 wq(ij,l+1)=w(ij,l+1)*(q(ij,l)-0.5*(1.+sigw)*dzq(ij,l)) 1176 sigw=w(ij,l+1,iq)/masse(ij,l,iq) 1177 wq(ij,l+1,iq)=w(ij,l+1,iq)*(q(ij,l,iq)-0.5*(1.+sigw) 1178 & *dzq(ij,l)) 1023 1179 ENDIF 1024 1180 ENDDO … … 1028 1184 c$OMP MASTER 1029 1185 DO ij=ijb,ije 1030 wq(ij,llm+1 )=0.1031 wq(ij,1 )=0.1186 wq(ij,llm+1,iq)=0. 1187 wq(ij,1,iq)=0. 1032 1188 ENDDO 1033 1189 c$OMP END MASTER 1034 1190 c$OMP BARRIER 1035 1191 1192 ! CRisi: appel récursif de l'advection sur les fils. 1193 ! Il faut faire ça avant d'avoir mis à jour q et masse 1194 !write(*,*) 'vlsplt 942: iq,nqfils(iq)=',iq,nqfils(iq) 1195 if (nqfils(iq).gt.0) then 1196 do ifils=1,nqdesc(iq) 1197 iq2=iqfils(ifils,iq) 1198 !print*,"margaux:vlsplt,PERE",iq 1199 !print*,"margaux:vlsplt,FILS",iq2 1200 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1201 DO l=1,llm 1202 DO ij=ijb,ije 1203 !masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq) 1204 !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 1205 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 1206 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),1e-16) 1207 if (q(ij,l,iq).gt.1e-16) then 1208 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 1209 else 1210 Ratio(ij,l,iq2)=0. 1211 endif 1212 !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015 1213 w(ij,l,iq2)=wq(ij,l,iq) 1214 enddo 1215 enddo 1216 c$OMP END DO NOWAIT 1217 enddo !do ifils=1,nqdesc(iq) 1218 c$OMP BARRIER 1219 1220 do ifils=1,nqfils(iq) 1221 iq2=iqfils(ifils,iq) 1222 call vlz_p(Ratio,pente_max,masse,w,ijb_x,ije_x,iq2) 1223 enddo !do ifils=1,nqfils(iq) 1224 endif !if (nqfils(iq).gt.0) then 1225 ! end CRisi 1226 1227 ! CRisi: On rajoute ici une barrière car on veut être sur que tous les 1228 ! wq soient synchronisés 1229 1230 c$OMP BARRIER 1036 1231 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1037 1232 DO l=1,llm 1038 1233 DO ij=ijb,ije 1039 newmasse=masse(ij,l)+w(ij,l+1)-w(ij,l) 1040 q(ij,l)=(q(ij,l)*masse(ij,l)+wq(ij,l+1)-wq(ij,l)) 1041 & /newmasse 1042 masse(ij,l)=newmasse 1043 ENDDO 1044 ENDDO 1045 c$OMP END DO NOWAIT 1046 1234 newmasse=masse(ij,l,iq)+w(ij,l+1,iq)-w(ij,l,iq) 1235 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq) 1236 & +wq(ij,l+1,iq)-wq(ij,l,iq))/newmasse 1237 masse(ij,l,iq)=newmasse 1238 ENDDO 1239 ENDDO 1240 c$OMP END DO NOWAIT 1241 1242 ! retablir les fils en rapport de melange par rapport a l'air: 1243 if (nqfils(iq).gt.0) then 1244 do ifils=1,nqdesc(iq) 1245 iq2=iqfils(ifils,iq) 1246 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1247 DO l=1,llm 1248 DO ij=ijb,ije 1249 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 1250 enddo 1251 enddo 1252 c$OMP END DO NOWAIT 1253 enddo !do ifils=1,nqdesc(iq) 1254 endif !if (nqfils(iq).gt.0) then 1047 1255 1048 1256 RETURN -
trunk/LMDZ.COMMON/libf/dyn3dpar/vlspltgen_p.F
r1422 r2296 26 26 USE Write_Field_p 27 27 USE VAMPIR 28 USE infotrac, ONLY : nqtot 28 USE infotrac, ONLY : nqtot,nqperes,nqdesc,nqfils,iqfils, 29 & ok_iso_verif 29 30 USE comconst_mod, ONLY: cpp 30 31 IMPLICIT NONE … … 53 54 REAL,SAVE :: mu(ip1jmp1,llm) 54 55 REAL,SAVE :: mv(ip1jm,llm) 55 REAL,SAVE :: mw(ip1jmp1,llm+1) 56 !REAL,SAVE :: mw(ip1jmp1,llm+1) 57 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: mw !MVals 56 58 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: zq 57 59 REAL zzpbar, zzw … … 65 67 REAL ptarg,pdelarg,foeew,zdelta 66 68 REAL tempe(ip1jmp1) 67 INTEGER ijb,ije,iq 69 INTEGER ijb,ije,iq,iq2,ifils 68 70 LOGICAL, SAVE :: firstcall=.TRUE. 69 71 !$OMP THREADPRIVATE(firstcall) … … 91 93 !$OMP MASTER 92 94 ALLOCATE(zm(ip1jmp1,llm,nqtot)) 95 ALLOCATE(mw(ip1jmp1,llm+1,nqtot)) !MVals 93 96 ALLOCATE(zq(ip1jmp1,llm,nqtot)) 94 97 !$OMP END MASTER … … 155 158 ije=ij_end 156 159 160 DO iq=1,nqtot 157 161 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 158 162 DO l=1,llm 159 163 DO ij=ijb,ije 160 mw(ij,l )=w(ij,l) * zzw164 mw(ij,l,iq)=w(ij,l) * zzw 161 165 ENDDO 162 166 ENDDO 163 167 c$OMP END DO NOWAIT 164 168 ENDDO 169 170 DO iq=1,nqtot 165 171 c$OMP MASTER 166 172 DO ij=ijb,ije 167 mw(ij,llm+1)=0. 168 ENDDO 169 c$OMP END MASTER 173 mw(ij,llm+1,iq)=0. 174 ENDDO 175 c$OMP END MASTER 176 ENDDO 170 177 171 178 c CALL SCOPY(ijp1llm,q,1,zq,1) … … 184 191 ENDDO 185 192 193 ! verif temporaire 194 ijb=ij_begin 195 ije=ij_end 196 if (ok_iso_verif) then 197 call check_isotopes(zq,ijb,ije,'vlspltgen_loc 197') 198 endif !if (ok_iso_verif) then 186 199 187 200 c$OMP BARRIER 188 DO iq=1,nqtot189 201 ! DO iq=1,nqtot 202 DO iq=1,nqperes ! CRisi: on ne boucle que sur les pères= ceux qui sont transportés directement par l'air 190 203 if(iadv(iq) == 0) then 191 204 … … 193 206 194 207 else if (iadv(iq)==10) then 195 196 #ifdef _ADV_HALO 197 call vlx_p(zq(1,1,iq),pente_max,zm(1,1,iq),mu, 198 & ij_begin,ij_begin+2*iip1-1) 199 call vlx_p(zq(1,1,iq),pente_max,zm(1,1,iq),mu, 200 & ij_end-2*iip1+1,ij_end) 208 #ifdef _ADV_HALO 209 call vlx_p(zq,pente_max,zm,mu, 210 & ij_begin,ij_begin+2*iip1-1,iq) 211 call vlx_p(zq,pente_max,zm,mu, 212 & ij_end-2*iip1+1,ij_end,iq) 201 213 #else 202 call vlx_p(zq (1,1,iq),pente_max,zm(1,1,iq),mu,203 & ij_begin,ij_end )214 call vlx_p(zq,pente_max,zm,mu, 215 & ij_begin,ij_end,iq) 204 216 #endif 205 217 … … 209 221 call Register_Hallo(zq(1,1,iq),ip1jmp1,llm,2,2,2,2,MyRequest1) 210 222 call Register_Hallo(zm(1,1,iq),ip1jmp1,llm,1,1,1,1,MyRequest1) 211 223 ! CRisi 224 do ifils=1,nqdesc(iq) 225 iq2=iqfils(ifils,iq) 226 call Register_Hallo(zq(1,1,iq2),ip1jmp1,llm,2,2,2,2,MyRequest1) 227 call Register_Hallo(zm(1,1,iq2),ip1jmp1,llm,1,1,1,1,MyRequest1) 228 enddo 212 229 c$OMP MASTER 213 230 call VTe(VTHallo) … … 232 249 call Register_Hallo(zq(1,1,iq),ip1jmp1,llm,2,2,2,2,MyRequest1) 233 250 call Register_Hallo(zm(1,1,iq),ip1jmp1,llm,1,1,1,1,MyRequest1) 234 251 !CRisi 252 do ifils=1,nqdesc(iq) 253 iq2=iqfils(ifils,iq) 254 call Register_Hallo(zq(1,1,iq2),ip1jmp1,llm,2,2,2,2,MyRequest1) 255 call Register_Hallo(zm(1,1,iq2),ip1jmp1,llm,1,1,1,1,MyRequest1) 256 enddo 235 257 c$OMP MASTER 236 258 call VTe(VTHallo) … … 242 264 endif 243 265 244 enddo 266 enddo !DO iq=1,nqperes 245 267 246 268 … … 256 278 c$OMP END MASTER 257 279 c$OMP BARRIER 258 do iq=1,nqtot 280 281 ! ! verif temporaire 282 ! ijb=ij_begin-2*iip1 283 ! ije=ij_end+2*iip1 284 ! if (pole_nord) ijb=ij_begin 285 ! if (pole_sud) ije=ij_end 286 if (ok_iso_verif) then 287 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 293') 288 endif !if (ok_iso_verif) then 289 290 ! do iq=1,nqtot 291 do iq=1,nqperes !CRisi 259 292 260 293 if(iadv(iq) == 0) then … … 265 298 266 299 #ifdef _ADV_HALLO 267 call vlx_p(zq (1,1,iq),pente_max,zm(1,1,iq),mu,268 & ij_begin+2*iip1,ij_end-2*iip1 )300 call vlx_p(zq,pente_max,zm,mu, 301 & ij_begin+2*iip1,ij_end-2*iip1,iq) 269 302 #endif 270 303 else if (iadv(iq)==14) then … … 295 328 c$OMP END MASTER 296 329 c$OMP BARRIER 297 298 do iq=1,nqtot 330 331 if (ok_iso_verif) then 332 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 326') 333 endif !if (ok_iso_verif) then 334 if (ok_iso_verif) then 335 ijb=ij_begin-2*iip1 336 ije=ij_end+2*iip1 337 if (pole_nord) ijb=ij_begin 338 if (pole_sud) ije=ij_end 339 call check_isotopes(zq,ijb,ije,'vlspltgen_loc 336') 340 endif !if (ok_iso_verif) then 341 342 ! do iq=1,nqtot 343 do iq=1,nqperes !CRisi 299 344 300 345 if(iadv(iq) == 0) then … … 304 349 else if (iadv(iq)==10) then 305 350 306 call vly_p(zq (1,1,iq),pente_max,zm(1,1,iq),mv)351 call vly_p(zq,pente_max,zm,mv,iq) 307 352 308 353 else if (iadv(iq)==14) then … … 318 363 enddo 319 364 320 321 do iq=1,nqtot 365 if (ok_iso_verif) then 366 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 357') 367 endif !if (ok_iso_verif) then 368 369 ! do iq=1,nqtot 370 do iq=1,nqperes !CRisi 322 371 323 372 if(iadv(iq) == 0) then … … 329 378 c$OMP BARRIER 330 379 #ifdef _ADV_HALLO 331 call vlz_p(zq (1,1,iq),pente_max,zm(1,1,iq),mw,332 & ij_begin,ij_begin+2*iip1-1 )333 call vlz_p(zq (1,1,iq),pente_max,zm(1,1,iq),mw,334 & ij_end-2*iip1+1,ij_end )380 call vlz_p(zq,pente_max,zm,mw, 381 & ij_begin,ij_begin+2*iip1-1,iq) 382 call vlz_p(zq,pente_max,zm,mw, 383 & ij_end-2*iip1+1,ij_end,iq) 335 384 #else 336 call vlz_p(zq (1,1,iq),pente_max,zm(1,1,iq),mw,337 & ij_begin,ij_end )385 call vlz_p(zq,pente_max,zm,mw, 386 & ij_begin,ij_end,iq) 338 387 #endif 339 388 c$OMP BARRIER … … 345 394 call Register_Hallo(zq(1,1,iq),ip1jmp1,llm,2,2,2,2,MyRequest2) 346 395 call Register_Hallo(zm(1,1,iq),ip1jmp1,llm,1,1,1,1,MyRequest2) 347 396 ! CRisi 397 do ifils=1,nqdesc(iq) 398 iq2=iqfils(ifils,iq) 399 call Register_Hallo(zq(1,1,iq2),ip1jmp1,llm,2,2,2,2,MyRequest2) 400 call Register_Hallo(zm(1,1,iq2),ip1jmp1,llm,1,1,1,1,MyRequest2) 401 enddo 348 402 c$OMP MASTER 349 403 call VTe(VTHallo) … … 369 423 c$OMP END MASTER 370 424 371 c$OMP BARRIER 372 do iq=1,nqtot 425 if (ok_iso_verif) then 426 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 429') 427 endif !if (ok_iso_verif) then 428 429 c$OMP BARRIER 430 ! do iq=1,nqtot 431 do iq=1,nqperes !CRisi 373 432 374 433 if(iadv(iq) == 0) then … … 380 439 381 440 #ifdef _ADV_HALLO 382 call vlz_p(zq (1,1,iq),pente_max,zm(1,1,iq),mw,383 & ij_begin+2*iip1,ij_end-2*iip1 )441 call vlz_p(zq,pente_max,zm,mw, 442 & ij_begin+2*iip1,ij_end-2*iip1,iq) 384 443 #endif 385 444 … … 408 467 c$OMP BARRIER 409 468 410 411 do iq=1,nqtot 469 !write(*,*) 'vlspltgen_loc 494' 470 if (ok_iso_verif) then 471 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 461') 472 endif !if (ok_iso_verif) then 473 474 ! do iq=1,nqtot 475 do iq=1,nqperes !CRisi 412 476 413 477 if(iadv(iq) == 0) then … … 417 481 else if (iadv(iq)==10) then 418 482 419 call vly_p(zq (1,1,iq),pente_max,zm(1,1,iq),mv)483 call vly_p(zq,pente_max,zm,mv,iq) 420 484 421 485 else if (iadv(iq)==14) then … … 429 493 endif 430 494 431 enddo 432 433 do iq=1,nqtot 495 enddo !do iq=1,nqperes 496 497 if (ok_iso_verif) then 498 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 493') 499 endif !if (ok_iso_verif) then 500 501 ! do iq=1,nqtot 502 do iq=1,nqperes !CRisi 434 503 435 504 if(iadv(iq) == 0) then … … 439 508 else if (iadv(iq)==10) then 440 509 441 call vlx_p(zq (1,1,iq),pente_max,zm(1,1,iq),mu,442 & ij_begin,ij_end )510 call vlx_p(zq,pente_max,zm,mu, 511 & ij_begin,ij_end,iq) 443 512 444 513 else if (iadv(iq)==14) then … … 453 522 endif 454 523 455 enddo 456 524 enddo !do iq=1,nqperes 525 526 !write(*,*) 'vlspltgen 550: apres derniere serie de call vlx' 527 if (ok_iso_verif) then 528 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 521') 529 endif !if (ok_iso_verif) then 457 530 458 531 ijb=ij_begin … … 483 556 ENDDO 484 557 485 558 if (ok_iso_verif) then 559 call check_isotopes(q,ij_begin,ij_end,'vlspltgen_loc 557') 560 endif !if (ok_iso_verif) then 561 486 562 c$OMP BARRIER 487 563
Note: See TracChangeset
for help on using the changeset viewer.