Changeset 1300 for trunk/LMDZ.COMMON/libf/dyn3dpar
- Timestamp:
- Jun 25, 2014, 1:19:59 PM (11 years ago)
- Location:
- trunk/LMDZ.COMMON/libf/dyn3dpar
- Files:
-
- 133 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/dyn3dpar/abort_gcm.F
r1019 r1300 1 1 ! 2 ! $Id: abort_gcm.F 1 748 2013-04-24 14:18:40Z emillour$2 ! $Id: abort_gcm.F 1907 2013-11-26 13:10:46Z lguez $ 3 3 ! 4 4 c … … 13 13 #endif 14 14 USE parallel_lmdz 15 16 17 18 15 19 #include "iniprint.h" 16 20 … … 37 41 c$OMP END MASTER 38 42 #endif 43 44 45 39 46 c call histclo(2) 40 47 c call histclo(3) … … 56 63 endif 57 64 END 65 -
trunk/LMDZ.COMMON/libf/dyn3dpar/bilan_dyn_p.F
r1019 r1300 1 1 ! 2 ! $Id: bilan_dyn_p.F 1 403 2010-07-01 09:02:53Z fairhead$2 ! $Id: bilan_dyn_p.F 1907 2013-11-26 13:10:46Z lguez $ 3 3 ! 4 4 SUBROUTINE bilan_dyn_p (ntrac,dt_app,dt_cum, … … 16 16 USE mod_hallo 17 17 use misc_mod 18 use write_field 18 use write_field_p 19 19 IMPLICIT NONE 20 20 … … 57 57 c ======= 58 58 59 integer icum,ncum 60 logical first 61 real zz,zqy,zfactv(jjm,llm) 62 63 integer nQ 64 parameter (nQ=7) 59 integer,save :: icum,ncum 60 !$OMP THREADPRIVATE(icum,ncum) 61 logical,SAVE :: first=.true. 62 !$OMP THREADPRIVATE(first) 63 64 real zz,zqy 65 real,save :: zfactv(jjm,llm) 66 67 integer,parameter :: nQ=7 65 68 66 69 67 70 cym character*6 nom(nQ) 68 71 cym character*6 unites(nQ) 69 character *6,save :: nom(nQ)70 character *6,save :: unites(nQ)71 72 character *10file72 character(len=6),save :: nom(nQ) 73 character(len=6),save :: unites(nQ) 74 75 character(len=10) file 73 76 integer ifile 74 77 parameter (ifile=4) 75 78 76 integer itemp,igeop,iecin,iang,iu,iovap,iun 77 integer i_sortie 78 79 save first,icum,ncum 80 save itemp,igeop,iecin,iang,iu,iovap,iun 81 save i_sortie 82 83 real time 84 integer itau 85 save time,itau 86 data time,itau/0.,0/ 87 88 data first/.true./ 89 data itemp,igeop,iecin,iang,iu,iovap,iun/1,2,3,4,5,6,7/ 90 data i_sortie/1/ 79 integer,PARAMETER :: itemp=1,igeop=2,iecin=3,iang=4,iu=5 80 INTEGER,PARAMETER :: iovap=6,iun=7 81 integer,PARAMETER :: i_sortie=1 82 83 real,SAVE :: time=0. 84 integer,SAVE :: itau=0. 85 !$OMP THREADPRIVATE(time,itau) 91 86 92 87 real ww 93 88 94 89 c variables dynamiques intermédiaires 95 REAL vcont(iip1,jjm,llm),ucont(iip1,jjp1,llm) 96 REAL ang(iip1,jjp1,llm),unat(iip1,jjp1,llm) 97 REAL massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm) 98 REAL vorpot(iip1,jjm,llm) 99 REAL w(iip1,jjp1,llm),ecin(iip1,jjp1,llm),convm(iip1,jjp1,llm) 100 REAL bern(iip1,jjp1,llm) 90 REAL,save :: vcont(iip1,jjm,llm),ucont(iip1,jjp1,llm) 91 REAL,save :: ang(iip1,jjp1,llm),unat(iip1,jjp1,llm) 92 REAL,save :: massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm) 93 REAL,save :: vorpot(iip1,jjm,llm) 94 REAL,save :: w(iip1,jjp1,llm),ecin(iip1,jjp1,llm) 95 REAL,save ::convm(iip1,jjp1,llm) 96 REAL,save :: bern(iip1,jjp1,llm) 101 97 102 98 c champ contenant les scalaires advectés. 103 real Q(iip1,jjp1,llm,nQ)99 real,save :: Q(iip1,jjp1,llm,nQ) 104 100 105 101 c champs cumulés 106 real ps_cum(iip1,jjp1) 107 real masse_cum(iip1,jjp1,llm) 108 real flux_u_cum(iip1,jjp1,llm) 109 real flux_v_cum(iip1,jjm,llm) 110 real Q_cum(iip1,jjp1,llm,nQ) 111 real flux_uQ_cum(iip1,jjp1,llm,nQ) 112 real flux_vQ_cum(iip1,jjm,llm,nQ) 113 real flux_wQ_cum(iip1,jjp1,llm,nQ) 114 real dQ(iip1,jjp1,llm,nQ) 115 116 save ps_cum,masse_cum,flux_u_cum,flux_v_cum 117 save Q_cum,flux_uQ_cum,flux_vQ_cum 102 real,save :: ps_cum(iip1,jjp1) 103 real,save :: masse_cum(iip1,jjp1,llm) 104 real,save :: flux_u_cum(iip1,jjp1,llm) 105 real,save :: flux_v_cum(iip1,jjm,llm) 106 real,save :: Q_cum(iip1,jjp1,llm,nQ) 107 real,save :: flux_uQ_cum(iip1,jjp1,llm,nQ) 108 real,save :: flux_vQ_cum(iip1,jjm,llm,nQ) 109 real,save :: flux_wQ_cum(iip1,jjp1,llm,nQ) 110 real,save :: dQ(iip1,jjp1,llm,nQ) 111 118 112 119 113 c champs de tansport en moyenne zonale … … 128 122 character*10,save :: zunites(ntr,nQ) 129 123 130 integer iave,itot,immc,itrs,istn131 data iave,itot,immc,itrs,istn/1,2,3,4,5/ 124 INTEGER,PARAMETER :: iave=1,itot=2,immc=3,itrs=4,istn=5 125 132 126 character*3 ctrs(ntr) 133 127 data ctrs/' ','TOT','MMC','TRS','STN'/ 134 128 135 real zvQ(jjm,llm,ntr,nQ),zvQtmp(jjm,llm)136 real zavQ(jjm,ntr,nQ),psiQ(jjm,llm+1,nQ)137 real zmasse(jjm,llm),zamasse(jjm)138 139 real zv(jjm,llm),psi(jjm,llm+1)129 real,save :: zvQ(jjm,llm,ntr,nQ),zvQtmp(jjm,llm) 130 real,save :: zavQ(jjm,ntr,nQ),psiQ(jjm,llm+1,nQ) 131 real,save :: zmasse(jjm,llm),zamasse(jjm) 132 133 real,save :: zv(jjm,llm),psi(jjm,llm+1) 140 134 141 135 integer i,j,l,iQ … … 151 145 save fileid 152 146 153 integer ndex3d(jjm*llm)147 integer,save :: ndex3d(jjm*llm) 154 148 155 149 C Variables locales … … 162 156 integer zan, dayref 163 157 C 164 real rlong(jjm),rlatg(jjm)158 real,save :: rlong(jjm),rlatg(jjm) 165 159 integer :: jjb,jje,jjn,ijb,ije 166 type(Request) :: Req 160 type(Request),SAVE :: Req 161 !$OMP THREADPRIVATE(Req) 167 162 168 163 ! definition du domaine d'ecriture pour le rebuild … … 182 177 c Initialisation 183 178 c===================================================================== 184 ndex3d=0185 179 if (adjust) return 186 180 … … 190 184 if (first) then 191 185 186 ndex3d=0 192 187 193 188 icum=0 … … 202 197 WRITE(lunout,*)'dt_cum=',dt_cum 203 198 stop 199 else 200 write(lunout,*) "bilan_dyn_p: ncum=",ncum 204 201 endif 205 202 206 if (i_sortie.eq.1) then 207 file='dynzon' 208 if (mpi_rank==0) then 209 call inigrads(ifile,1 210 s ,0.,180./pi,0.,0.,jjm,rlatv,-90.,90.,180./pi 211 s ,llm,presnivs,1. 212 s ,dt_cum,file,'dyn_zon ') 213 endif 214 endif 215 203 ! if (i_sortie.eq.1) then 204 ! file='dynzon' 205 ! if (mpi_rank==0) then 206 ! call inigrads(ifile,1 207 ! s ,0.,180./pi,0.,0.,jjm,rlatv,-90.,90.,180./pi 208 ! s ,llm,presnivs,1. 209 ! s ,dt_cum,file,'dyn_zon ') 210 ! endif 211 ! endif 212 213 !$OMP MASTER 216 214 nom(itemp)='T' 217 215 nom(igeop)='gz' … … 339 337 CALL histend(fileid) 340 338 341 339 !$OMP END MASTER 340 !$OMP BARRIER 342 341 endif 343 342 … … 351 350 352 351 c énergie cinétique 353 ucont(:,jjb:jje,:)=0352 ! ucont(:,jjb:jje,:)=0 354 353 355 354 call Register_Hallo(ucov,ip1jmp1,llm,1,1,1,1,Req) 356 355 call Register_Hallo(vcov,ip1jm,llm,1,1,1,1,Req) 357 356 call SendRequest(Req) 357 c$OMP BARRIER 358 358 call WaitRequest(Req) 359 c$OMP BARRIER 359 360 360 361 CALL covcont_p(llm,ucov,vcov,ucont,vcont) … … 362 363 363 364 c moment cinétique 365 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 364 366 do l=1,llm 365 367 ang(:,jjb:jje,l)=ucov(:,jjb:jje,l)+constang(:,jjb:jje) 366 368 unat(:,jjb:jje,l)=ucont(:,jjb:jje,l)*cu(:,jjb:jje) 367 369 enddo 368 369 Q(:,jjb:jje,:,itemp)=teta(:,jjb:jje,:)*pk(:,jjb:jje,:)/cpp 370 Q(:,jjb:jje,:,igeop)=phi(:,jjb:jje,:) 371 Q(:,jjb:jje,:,iecin)=ecin(:,jjb:jje,:) 372 Q(:,jjb:jje,:,iang)=ang(:,jjb:jje,:) 373 Q(:,jjb:jje,:,iu)=unat(:,jjb:jje,:) 374 Q(:,jjb:jje,:,iovap)=trac(:,jjb:jje,:,1) 375 Q(:,jjb:jje,:,iun)=1. 376 370 !$OMP END DO 371 372 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 373 DO l=1,llm 374 Q(:,jjb:jje,l,itemp)=teta(:,jjb:jje,l)*pk(:,jjb:jje,l)/cpp 375 Q(:,jjb:jje,l,igeop)=phi(:,jjb:jje,l) 376 Q(:,jjb:jje,l,iecin)=ecin(:,jjb:jje,l) 377 Q(:,jjb:jje,l,iang)=ang(:,jjb:jje,l) 378 Q(:,jjb:jje,l,iu)=unat(:,jjb:jje,l) 379 Q(:,jjb:jje,l,iovap)=trac(:,jjb:jje,l,1) 380 Q(:,jjb:jje,l,iun)=1. 381 ENDDO 382 !$OMP END DO NOWAIT 377 383 378 384 c===================================================================== … … 384 390 jje=jj_end 385 391 392 !$OMP MASTER 386 393 ps_cum(:,jjb:jje)=0. 387 masse_cum(:,jjb:jje,:)=0. 388 flux_u_cum(:,jjb:jje,:)=0. 389 Q_cum(:,jjb:jje,:,:)=0. 390 flux_uQ_cum(:,jjb:jje,:,:)=0. 391 if (pole_sud) jje=jj_end-1 392 flux_v_cum(:,jjb:jje,:)=0. 393 flux_vQ_cum(:,jjb:jje,:,:)=0. 394 !$OMP END MASTER 395 !$OMP BARRIER 396 397 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 398 DO l=1,llm 399 masse_cum(:,jjb:jje,l)=0. 400 flux_u_cum(:,jjb:jje,l)=0. 401 Q_cum(:,jjb:jje,l,:)=0. 402 flux_uQ_cum(:,jjb:jje,l,:)=0. 403 if (pole_sud) jje=jj_end-1 404 flux_v_cum(:,jjb:jje,l)=0. 405 flux_vQ_cum(:,jjb:jje,l,:)=0. 406 ENDDO 407 !$OMP END DO NOWAIT 394 408 endif 395 409 … … 402 416 jje=jj_end 403 417 418 !$OMP MASTER 404 419 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)+ps(:,jjb:jje) 405 masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)+masse(:,jjb:jje,:) 406 flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:) 407 . +flux_u(:,jjb:jje,:) 420 !$OMP END MASTER 421 !$OMP BARRIER 422 423 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 424 DO l=1,llm 425 masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)+masse(:,jjb:jje,l) 426 flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l) 427 . +flux_u(:,jjb:jje,l) 428 ENDDO 429 !$OMP END DO NOWAIT 430 408 431 if (pole_sud) jje=jj_end-1 409 flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:) 410 . +flux_v(:,jjb:jje,:) 411 412 jjb=jj_begin 413 jje=jj_end 414 415 do iQ=1,nQ 416 Q_cum(:,jjb:jje,:,iQ)=Q_cum(:,jjb:jje,:,iQ) 417 . +Q(:,jjb:jje,:,iQ)*masse(:,jjb:jje,:) 432 433 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 434 DO l=1,llm 435 flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l) 436 . +flux_v(:,jjb:jje,l) 437 ENDDO 438 !$OMP END DO NOWAIT 439 440 jjb=jj_begin 441 jje=jj_end 442 443 do iQ=1,nQ 444 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 445 DO l=1,llm 446 Q_cum(:,jjb:jje,l,iQ)=Q_cum(:,jjb:jje,l,iQ) 447 . +Q(:,jjb:jje,l,iQ)*masse(:,jjb:jje,l) 448 ENDDO 449 !$OMP END DO NOWAIT 418 450 enddo 419 451 … … 425 457 c ----------------- 426 458 do iQ=1,nQ 459 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 427 460 do l=1,llm 428 461 do j=jjb,jje … … 434 467 enddo 435 468 enddo 469 !$OMP END DO NOWAIT 436 470 enddo 437 471 … … 442 476 enddo 443 477 call SendRequest(Req) 478 !$OMP BARRIER 444 479 call WaitRequest(Req) 445 480 !$OMP BARRIER 481 446 482 jjb=jj_begin 447 483 jje=jj_end … … 449 485 450 486 do iQ=1,nQ 487 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 451 488 do l=1,llm 452 489 do j=jjb,jje … … 457 494 enddo 458 495 enddo 496 !$OMP END DO NOWAIT 459 497 enddo 460 498 … … 467 505 call Register_Hallo(flux_vQ_cum,ip1jm,llm,2,2,2,2,Req) 468 506 call SendRequest(Req) 507 !$OMP BARRIER 469 508 call WaitRequest(Req) 509 c$OMP BARRIER 470 510 471 511 call convflu_p(flux_uQ_cum,flux_vQ_cum,llm*nQ,dQ) … … 475 515 call Register_Hallo(flux_v_cum,ip1jm,llm,2,2,2,2,Req) 476 516 call SendRequest(Req) 517 !$OMP BARRIER 477 518 call WaitRequest(Req) 519 c$OMP BARRIER 478 520 479 521 call convmas_p(flux_u_cum,flux_v_cum,convm) 480 522 CALL vitvert_p(convm,w) 481 482 jjb=jj_begin 483 jje=jj_end 484 485 do iQ=1,nQ 486 do l=1,llm-1 487 do j=jjb,jje 488 do i=1,iip1 489 ww=-0.5*w(i,j,l+1)*(Q(i,j,l,iQ)+Q(i,j,l+1,iQ)) 490 dQ(i,j,l ,iQ)=dQ(i,j,l ,iQ)-ww 491 dQ(i,j,l+1,iQ)=dQ(i,j,l+1,iQ)+ww 492 enddo 493 enddo 494 enddo 523 !$OMP BARRIER 524 525 jjb=jj_begin 526 jje=jj_end 527 528 do iQ=1,nQ 529 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 530 do l=1,llm 531 IF (l<llm) THEN 532 do j=jjb,jje 533 do i=1,iip1 534 ww=-0.5*w(i,j,l+1)*(Q(i,j,l,iQ)+Q(i,j,l+1,iQ)) 535 dQ(i,j,l ,iQ)=dQ(i,j,l ,iQ)-ww 536 dQ(i,j,l+1,iQ)=dQ(i,j,l+1,iQ)+ww 537 enddo 538 enddo 539 ENDIF 540 IF (l>2) THEN 541 do j=jjb,jje 542 do i=1,iip1 543 ww=-0.5*w(i,j,l)*(Q(i,j,l-1,iQ)+Q(i,j,l,iQ)) 544 dQ(i,j,l,iQ)=dQ(i,j,l,iQ)+ww 545 enddo 546 enddo 547 ENDIF 548 enddo 549 !$OMP ENDDO NOWAIT 495 550 enddo 496 551 IF (prt_level > 5) … … 505 560 . WRITE(lunout,*)'Pas d ecriture' 506 561 562 jjb=jj_begin 563 jje=jj_end 564 507 565 c Normalisation 508 566 do iQ=1,nQ 509 Q_cum(:,jjb:jje,:,iQ)=Q_cum(:,jjb:jje,:,iQ) 510 . /masse_cum(:,jjb:jje,:) 511 enddo 567 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 568 do l=1,llm 569 Q_cum(:,jjb:jje,l,iQ)=Q_cum(:,jjb:jje,l,iQ) 570 . /masse_cum(:,jjb:jje,l) 571 enddo 572 !$OMP ENDDO NOWAIT 573 enddo 574 512 575 zz=1./REAL(ncum) 513 576 514 jjb=jj_begin 515 jje=jj_end 516 577 !$OMP MASTER 517 578 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)*zz 518 masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)*zz 519 flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)*zz 520 flux_uQ_cum(:,jjb:jje,:,:)=flux_uQ_cum(:,jjb:jje,:,:)*zz 521 dQ(:,jjb:jje,:,:)=dQ(:,jjb:jje,:,:)*zz 579 !$OMP END MASTER 580 581 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 582 DO l=1,llm 583 masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)*zz 584 flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)*zz 585 flux_uQ_cum(:,jjb:jje,l,:)=flux_uQ_cum(:,jjb:jje,l,:)*zz 586 dQ(:,jjb:jje,l,:)=dQ(:,jjb:jje,l,:)*zz 587 ENDDO 588 !$OMP ENDDO NOWAIT 589 522 590 523 591 IF (pole_sud) jje=jj_end-1 524 flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)*zz 525 flux_vQ_cum(:,jjb:jje,:,:)=flux_vQ_cum(:,jjb:jje,:,:)*zz 592 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 593 DO l=1,llm 594 flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)*zz 595 flux_vQ_cum(:,jjb:jje,l,:)=flux_vQ_cum(:,jjb:jje,l,:)*zz 596 ENDDO 597 !$OMP ENDDO 526 598 527 599 jjb=jj_begin … … 532 604 c division de dQ par la masse pour revenir aux bonnes grandeurs 533 605 do iQ=1,nQ 534 dQ(:,jjb:jje,:,iQ)=dQ(:,jjb:jje,:,iQ)/masse_cum(:,jjb:jje,:) 606 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 607 DO l=1,llm 608 dQ(:,jjb:jje,l,iQ)=dQ(:,jjb:jje,l,iQ)/masse_cum(:,jjb:jje,l) 609 ENDDO 610 !$OMP ENDDO NOWAIT 535 611 enddo 536 612 … … 545 621 if (pole_sud) jje=jj_end-1 546 622 547 zv(jjb:jje,:)=0. 548 zmasse(jjb:jje,:)=0. 623 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 624 DO l=1,llm 625 zv(jjb:jje,l)=0. 626 zmasse(jjb:jje,l)=0. 627 ENDDO 628 !$OMP ENDDO NOWAIT 549 629 550 630 call Register_Hallo(masse_cum,ip1jmp1,llm,1,1,1,1,Req) … … 554 634 555 635 call SendRequest(Req) 636 !$OMP BARRIER 556 637 call WaitRequest(Req) 638 c$OMP BARRIER 557 639 558 640 call massbar_p(masse_cum,massebx,masseby) … … 562 644 if (pole_sud) jje=jj_end-1 563 645 646 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 564 647 do l=1,llm 565 648 do j=jjb,jje … … 571 654 enddo 572 655 enddo 656 !$OMP ENDDO 573 657 574 658 c print*,'3OK' … … 609 693 psiQ=0. 610 694 do iQ=1,nQ 611 zvQtmp=0. 695 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 612 696 do l=1,llm 697 zvQtmp(:,l)=0. 613 698 do j=jjb,jje 614 699 c print*,'j,l,iQ=',j,l,iQ … … 633 718 enddo 634 719 enddo 720 !$OMP ENDDO NOWAIT 635 721 c fonction de courant meridienne pour la quantite Q 722 !$OMP BARRIER 723 !$OMP MASTER 636 724 do l=llm,1,-1 637 725 do j=jjb,jje … … 639 727 enddo 640 728 enddo 641 enddo 729 !$OMP END MASTER 730 !$OMP BARRIER 731 enddo ! of do iQ=1,nQ 642 732 643 733 c fonction de courant pour la circulation meridienne moyenne 734 !$OMP BARRIER 735 !$OMP MASTER 644 736 psi(jjb:jje,:)=0. 645 737 do l=llm,1,-1 … … 649 741 enddo 650 742 enddo 743 !$OMP END MASTER 744 !$OMP BARRIER 651 745 652 746 c print*,'4OK' 653 747 c sorties proprement dites 748 !$OMP MASTER 654 749 if (i_sortie.eq.1) then 655 750 jjb=jj_begin … … 669 764 s ,jjn*llm,ndex3d) 670 765 enddo 671 672 766 call histwrite(fileid,'masse',itau,zmasse(jjb:jje,1:llm) 673 767 s ,jjn*llm,ndex3d) … … 703 797 enddo 704 798 enddo 705 799 !$OMP END MASTER 800 !$OMP BARRIER 706 801 c on doit pouvoir tracer systematiquement la fonction de courant. 707 802 … … 712 807 c///////////////////////////////////////////////////////////////////// 713 808 c===================================================================== 714 715 809 return 716 810 end 811 -
trunk/LMDZ.COMMON/libf/dyn3dpar/conf_gcm.F
r1189 r1300 15 15 use mod_filtre_fft, ONLY : use_filtre_fft 16 16 use mod_hallo, ONLY : use_mpi_alloc 17 use parallel_lmdz, ONLY : omp_chunk18 17 USE control_mod 19 18 USE infotrac, ONLY : type_trac … … 587 586 use_mpi_alloc=.FALSE. 588 587 CALL getin('use_mpi_alloc',use_mpi_alloc) 589 590 !Config Key = omp_chunk591 !Config Desc = taille des blocs openmp592 !Config Def = 1593 !Config Help = defini la taille des packets d'iteration openmp594 !Config distribuee a chaque tache lors de l'entree dans une595 !Config boucle parallelisee596 597 omp_chunk=1598 CALL getin('omp_chunk',omp_chunk)599 588 600 589 !Config key = ok_strato … … 1016 1005 write(lunout,*)' use_filtre_fft = ', use_filtre_fft 1017 1006 write(lunout,*)' use_mpi_alloc = ', use_mpi_alloc 1018 write(lunout,*)' omp_chunk = ', omp_chunk1019 1007 write(lunout,*)' ok_strato = ', ok_strato 1020 1008 write(lunout,*)' ok_gradsfile = ', ok_gradsfile -
trunk/LMDZ.COMMON/libf/dyn3dpar/gcm.F
r1107 r1300 10 10 #endif 11 11 12 13 #ifdef CPP_XIOS14 ! ug Pour les sorties XIOS15 USE wxios16 #endif17 12 18 13 USE mod_const_mpi, ONLY: init_const_mpi … … 193 188 c Initialisation partie parallele 194 189 c------------------------------------ 190 195 191 CALL init_const_mpi 196 197 192 call init_parallel 198 193 call ini_getparam("out.def") … … 225 220 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 226 221 227 #ifdef CPP_XIOS228 CALL wxios_init("LMDZ")229 #endif230 222 231 223 c … … 362 354 start_time = starttime 363 355 ELSE 364 WRITE(lunout,*)'Je m''arrete' 365 CALL abort 356 call abort_gcm("gcm", "'Je m''arrete'", 1) 366 357 ENDIF 367 358 ENDIF -
trunk/LMDZ.COMMON/libf/dyn3dpar/guide_p_mod.F90
r1019 r1300 91 91 CALL getpar('guide_teta',.false.,guide_teta,'guidage de T par Teta') 92 92 93 CALL getpar('guide_add',.false.,guide_add,'for �age constant?')93 CALL getpar('guide_add',.false.,guide_add,'for�age constant?') 94 94 CALL getpar('guide_zon',.false.,guide_zon,'guidage moy zonale') 95 95 … … 108 108 CALL getpar('guide_BL',.true.,guide_BL,'guidage dans C.Lim') 109 109 110 ! Sauvegarde du for �age110 ! Sauvegarde du for�age 111 111 CALL getpar('guide_sav',.false.,guide_sav,'sauvegarde guidage') 112 112 CALL getpar('iguide_sav',4,iguide_sav,'freq. sauvegarde guidage') … … 155 155 ncidpl=-99 156 156 if (guide_plevs.EQ.1) then 157 if (ncidpl.eq.-99) rcod=nf90_open('apbp.nc',Nf90_NOWRITe, ncidpl) 157 if (ncidpl.eq.-99) then 158 rcod=nf90_open('apbp.nc',Nf90_NOWRITe, ncidpl) 159 if (rcod.NE.NF_NOERR) THEN 160 print *,'Guide: probleme -> pas de fichier apbp.nc' 161 CALL abort_gcm(modname,abort_message,1) 162 endif 163 endif 158 164 elseif (guide_plevs.EQ.2) then 159 if (ncidpl.EQ.-99) rcod=nf90_open('P.nc',Nf90_NOWRITe,ncidpl) 165 if (ncidpl.EQ.-99) then 166 rcod=nf90_open('P.nc',Nf90_NOWRITe,ncidpl) 167 if (rcod.NE.NF_NOERR) THEN 168 print *,'Guide: probleme -> pas de fichier P.nc' 169 CALL abort_gcm(modname,abort_message,1) 170 endif 171 endif 160 172 elseif (guide_u) then 161 if (ncidpl.eq.-99) rcod=nf90_open('u.nc',Nf90_NOWRITe,ncidpl) 173 if (ncidpl.eq.-99) then 174 rcod=nf90_open('u.nc',Nf90_NOWRITe,ncidpl) 175 if (rcod.NE.NF_NOERR) THEN 176 print *,'Guide: probleme -> pas de fichier u.nc' 177 CALL abort_gcm(modname,abort_message,1) 178 endif 179 endif 162 180 elseif (guide_v) then 163 if (ncidpl.eq.-99) rcod=nf90_open('v.nc',nf90_nowrite,ncidpl) 181 if (ncidpl.eq.-99) then 182 rcod=nf90_open('v.nc',nf90_nowrite,ncidpl) 183 if (rcod.NE.NF_NOERR) THEN 184 print *,'Guide: probleme -> pas de fichier v.nc' 185 CALL abort_gcm(modname,abort_message,1) 186 endif 187 endif 164 188 elseif (guide_T) then 165 if (ncidpl.eq.-99) rcod=nf90_open('T.nc',nf90_nowrite,ncidpl) 189 if (ncidpl.eq.-99) then 190 rcod=nf90_open('T.nc',nf90_nowrite,ncidpl) 191 if (rcod.NE.NF_NOERR) THEN 192 print *,'Guide: probleme -> pas de fichier T.nc' 193 CALL abort_gcm(modname,abort_message,1) 194 endif 195 endif 166 196 elseif (guide_Q) then 167 if (ncidpl.eq.-99) rcod=nf90_open('hur.nc',nf90_nowrite, ncidpl) 197 if (ncidpl.eq.-99) then 198 rcod=nf90_open('hur.nc',nf90_nowrite, ncidpl) 199 if (rcod.NE.NF_NOERR) THEN 200 print *,'Guide: probleme -> pas de fichier hur.nc' 201 CALL abort_gcm(modname,abort_message,1) 202 endif 203 endif 168 204 endif 169 205 error=NF_INQ_DIMID(ncidpl,'LEVEL',rid) … … 292 328 !======================================================================= 293 329 SUBROUTINE guide_main(itau,ucov,vcov,teta,q,masse,ps) 294 useparallel_lmdz330 USE parallel_lmdz 295 331 USE control_mod 296 332 … … 1231 1267 INTEGER :: status,rcode 1232 1268 1269 CHARACTER (len = 80) :: abort_message 1270 CHARACTER (len = 20) :: modname = 'guide_read' 1233 1271 ! ----------------------------------------------------------------- 1234 1272 ! Premier appel: initialisation de la lecture des fichiers … … 1241 1279 print *,'Lecture du guidage sur niveaux modele' 1242 1280 rcode = nf90_open('apbp.nc', nf90_nowrite, ncidpl) 1281 IF (rcode.NE.NF_NOERR) THEN 1282 print *,'Guide: probleme -> pas de fichier apbp.nc' 1283 CALL abort_gcm(modname,abort_message,1) 1284 ENDIF 1243 1285 rcode = nf90_inq_varid(ncidpl, 'AP', varidap) 1286 IF (rcode.NE.NF_NOERR) THEN 1287 print *,'Guide: probleme -> pas de variable AP, fichier apbp.nc' 1288 CALL abort_gcm(modname,abort_message,1) 1289 ENDIF 1244 1290 rcode = nf90_inq_varid(ncidpl, 'BP', varidbp) 1291 IF (rcode.NE.NF_NOERR) THEN 1292 print *,'Guide: probleme -> pas de variable BP, fichier apbp.nc' 1293 CALL abort_gcm(modname,abort_message,1) 1294 ENDIF 1245 1295 print*,'ncidpl,varidap',ncidpl,varidap 1246 1296 endif … … 1248 1298 if (guide_plevs.EQ.2) then 1249 1299 rcode = nf90_open('P.nc', nf90_nowrite, ncidp) 1300 IF (rcode.NE.NF_NOERR) THEN 1301 print *,'Guide: probleme -> pas de fichier P.nc' 1302 CALL abort_gcm(modname,abort_message,1) 1303 ENDIF 1250 1304 rcode = nf90_inq_varid(ncidp, 'PRES', varidp) 1305 IF (rcode.NE.NF_NOERR) THEN 1306 print *,'Guide: probleme -> pas de variable PRES, fichier P.nc' 1307 CALL abort_gcm(modname,abort_message,1) 1308 ENDIF 1251 1309 print*,'ncidp,varidp',ncidp,varidp 1252 1310 if (ncidpl.eq.-99) ncidpl=ncidp … … 1255 1313 if (guide_u) then 1256 1314 rcode = nf90_open('u.nc', nf90_nowrite, ncidu) 1315 IF (rcode.NE.NF_NOERR) THEN 1316 print *,'Guide: probleme -> pas de fichier u.nc' 1317 CALL abort_gcm(modname,abort_message,1) 1318 ENDIF 1257 1319 rcode = nf90_inq_varid(ncidu, 'UWND', varidu) 1320 IF (rcode.NE.NF_NOERR) THEN 1321 print *,'Guide: probleme -> pas de variable UWND, fichier u.nc' 1322 CALL abort_gcm(modname,abort_message,1) 1323 ENDIF 1258 1324 print*,'ncidu,varidu',ncidu,varidu 1259 1325 if (ncidpl.eq.-99) ncidpl=ncidu … … 1262 1328 if (guide_v) then 1263 1329 rcode = nf90_open('v.nc', nf90_nowrite, ncidv) 1330 IF (rcode.NE.NF_NOERR) THEN 1331 print *,'Guide: probleme -> pas de fichier v.nc' 1332 CALL abort_gcm(modname,abort_message,1) 1333 ENDIF 1264 1334 rcode = nf90_inq_varid(ncidv, 'VWND', varidv) 1335 IF (rcode.NE.NF_NOERR) THEN 1336 print *,'Guide: probleme -> pas de variable VWND, fichier v.nc' 1337 CALL abort_gcm(modname,abort_message,1) 1338 ENDIF 1265 1339 print*,'ncidv,varidv',ncidv,varidv 1266 1340 if (ncidpl.eq.-99) ncidpl=ncidv … … 1269 1343 if (guide_T) then 1270 1344 rcode = nf90_open('T.nc', nf90_nowrite, ncidt) 1345 IF (rcode.NE.NF_NOERR) THEN 1346 print *,'Guide: probleme -> pas de fichier T.nc' 1347 CALL abort_gcm(modname,abort_message,1) 1348 ENDIF 1271 1349 rcode = nf90_inq_varid(ncidt, 'AIR', varidt) 1350 IF (rcode.NE.NF_NOERR) THEN 1351 print *,'Guide: probleme -> pas de variable AIR, fichier T.nc' 1352 CALL abort_gcm(modname,abort_message,1) 1353 ENDIF 1272 1354 print*,'ncidT,varidT',ncidt,varidt 1273 1355 if (ncidpl.eq.-99) ncidpl=ncidt … … 1276 1358 if (guide_Q) then 1277 1359 rcode = nf90_open('hur.nc', nf90_nowrite, ncidQ) 1360 IF (rcode.NE.NF_NOERR) THEN 1361 print *,'Guide: probleme -> pas de fichier hur.nc' 1362 CALL abort_gcm(modname,abort_message,1) 1363 ENDIF 1278 1364 rcode = nf90_inq_varid(ncidQ, 'RH', varidQ) 1365 IF (rcode.NE.NF_NOERR) THEN 1366 print *,'Guide: probleme -> pas de variable RH, fichier hur.nc' 1367 CALL abort_gcm(modname,abort_message,1) 1368 ENDIF 1279 1369 print*,'ncidQ,varidQ',ncidQ,varidQ 1280 1370 if (ncidpl.eq.-99) ncidpl=ncidQ … … 1283 1373 if ((guide_P).OR.(guide_plevs.EQ.1)) then 1284 1374 rcode = nf90_open('ps.nc', nf90_nowrite, ncidps) 1375 IF (rcode.NE.NF_NOERR) THEN 1376 print *,'Guide: probleme -> pas de fichier ps.nc' 1377 CALL abort_gcm(modname,abort_message,1) 1378 ENDIF 1285 1379 rcode = nf90_inq_varid(ncidps, 'SP', varidps) 1380 IF (rcode.NE.NF_NOERR) THEN 1381 print *,'Guide: probleme -> pas de variable SP, fichier ps.nc' 1382 CALL abort_gcm(modname,abort_message,1) 1383 ENDIF 1286 1384 print*,'ncidps,varidps',ncidps,varidps 1287 1385 endif … … 1434 1532 INTEGER :: i 1435 1533 1534 CHARACTER (len = 80) :: abort_message 1535 CHARACTER (len = 20) :: modname = 'guide_read2D' 1436 1536 ! ----------------------------------------------------------------- 1437 1537 ! Premier appel: initialisation de la lecture des fichiers … … 1442 1542 ! Ap et Bp si niveaux de pression hybrides 1443 1543 if (guide_plevs.EQ.1) then 1444 print *,'Lecture du guidage sur niveaux mod �le'1544 print *,'Lecture du guidage sur niveaux mod�le' 1445 1545 rcode = nf90_open('apbp.nc', nf90_nowrite, ncidpl) 1546 IF (rcode.NE.NF_NOERR) THEN 1547 print *,'Guide: probleme -> pas de fichier apbp.nc' 1548 CALL abort_gcm(modname,abort_message,1) 1549 ENDIF 1446 1550 rcode = nf90_inq_varid(ncidpl, 'AP', varidap) 1551 IF (rcode.NE.NF_NOERR) THEN 1552 print *,'Guide: probleme -> pas de variable AP, fichier apbp.nc' 1553 CALL abort_gcm(modname,abort_message,1) 1554 ENDIF 1447 1555 rcode = nf90_inq_varid(ncidpl, 'BP', varidbp) 1556 IF (rcode.NE.NF_NOERR) THEN 1557 print *,'Guide: probleme -> pas de variable BP, fichier apbp.nc' 1558 CALL abort_gcm(modname,abort_message,1) 1559 ENDIF 1448 1560 print*,'ncidpl,varidap',ncidpl,varidap 1449 1561 endif … … 1451 1563 if (guide_plevs.EQ.2) then 1452 1564 rcode = nf90_open('P.nc', nf90_nowrite, ncidp) 1565 IF (rcode.NE.NF_NOERR) THEN 1566 print *,'Guide: probleme -> pas de fichier P.nc' 1567 CALL abort_gcm(modname,abort_message,1) 1568 ENDIF 1453 1569 rcode = nf90_inq_varid(ncidp, 'PRES', varidp) 1570 IF (rcode.NE.NF_NOERR) THEN 1571 print *,'Guide: probleme -> pas de variable PRES, fichier P.nc' 1572 CALL abort_gcm(modname,abort_message,1) 1573 ENDIF 1454 1574 print*,'ncidp,varidp',ncidp,varidp 1455 1575 if (ncidpl.eq.-99) ncidpl=ncidp … … 1458 1578 if (guide_u) then 1459 1579 rcode = nf90_open('u.nc', nf90_nowrite, ncidu) 1580 IF (rcode.NE.NF_NOERR) THEN 1581 print *,'Guide: probleme -> pas de fichier u.nc' 1582 CALL abort_gcm(modname,abort_message,1) 1583 ENDIF 1460 1584 rcode = nf90_inq_varid(ncidu, 'UWND', varidu) 1585 IF (rcode.NE.NF_NOERR) THEN 1586 print *,'Guide: probleme -> pas de variable UWND, fichier u.nc' 1587 CALL abort_gcm(modname,abort_message,1) 1588 ENDIF 1461 1589 print*,'ncidu,varidu',ncidu,varidu 1462 1590 if (ncidpl.eq.-99) ncidpl=ncidu … … 1465 1593 if (guide_v) then 1466 1594 rcode = nf90_open('v.nc', nf90_nowrite, ncidv) 1595 IF (rcode.NE.NF_NOERR) THEN 1596 print *,'Guide: probleme -> pas de fichier v.nc' 1597 CALL abort_gcm(modname,abort_message,1) 1598 ENDIF 1467 1599 rcode = nf90_inq_varid(ncidv, 'VWND', varidv) 1600 IF (rcode.NE.NF_NOERR) THEN 1601 print *,'Guide: probleme -> pas de variable VWND, fichier v.nc' 1602 CALL abort_gcm(modname,abort_message,1) 1603 ENDIF 1468 1604 print*,'ncidv,varidv',ncidv,varidv 1469 1605 if (ncidpl.eq.-99) ncidpl=ncidv … … 1472 1608 if (guide_T) then 1473 1609 rcode = nf90_open('T.nc', nf90_nowrite, ncidt) 1610 IF (rcode.NE.NF_NOERR) THEN 1611 print *,'Guide: probleme -> pas de fichier T.nc' 1612 CALL abort_gcm(modname,abort_message,1) 1613 ENDIF 1474 1614 rcode = nf90_inq_varid(ncidt, 'AIR', varidt) 1615 IF (rcode.NE.NF_NOERR) THEN 1616 print *,'Guide: probleme -> pas de variable AIR, fichier T.nc' 1617 CALL abort_gcm(modname,abort_message,1) 1618 ENDIF 1475 1619 print*,'ncidT,varidT',ncidt,varidt 1476 1620 if (ncidpl.eq.-99) ncidpl=ncidt … … 1479 1623 if (guide_Q) then 1480 1624 rcode = nf90_open('hur.nc', nf90_nowrite, ncidQ) 1625 IF (rcode.NE.NF_NOERR) THEN 1626 print *,'Guide: probleme -> pas de fichier hur.nc' 1627 CALL abort_gcm(modname,abort_message,1) 1628 ENDIF 1481 1629 rcode = nf90_inq_varid(ncidQ, 'RH', varidQ) 1630 IF (rcode.NE.NF_NOERR) THEN 1631 print *,'Guide: probleme -> pas de variable RH, fichier hur.nc' 1632 CALL abort_gcm(modname,abort_message,1) 1633 ENDIF 1482 1634 print*,'ncidQ,varidQ',ncidQ,varidQ 1483 1635 if (ncidpl.eq.-99) ncidpl=ncidQ … … 1486 1638 if ((guide_P).OR.(guide_plevs.EQ.1)) then 1487 1639 rcode = nf90_open('ps.nc', nf90_nowrite, ncidps) 1640 IF (rcode.NE.NF_NOERR) THEN 1641 print *,'Guide: probleme -> pas de fichier ps.nc' 1642 CALL abort_gcm(modname,abort_message,1) 1643 ENDIF 1488 1644 rcode = nf90_inq_varid(ncidps, 'SP', varidps) 1645 IF (rcode.NE.NF_NOERR) THEN 1646 print *,'Guide: probleme -> pas de variable SP, fichier ps.nc' 1647 CALL abort_gcm(modname,abort_message,1) 1648 ENDIF 1489 1649 print*,'ncidps,varidps',ncidps,varidps 1490 1650 endif … … 1710 1870 #endif 1711 1871 ! -------------------------------------------------------------------- 1712 ! Cr �ation des variables sauvegard�es1872 ! Cr�ation des variables sauvegard�es 1713 1873 ! -------------------------------------------------------------------- 1714 1874 ierr = NF_REDEF(nid) … … 1836 1996 !=========================================================================== 1837 1997 END MODULE guide_p_mod 1998 -
trunk/LMDZ.COMMON/libf/dyn3dpar/leapfrog_p.F
r1190 r1300 29 29 use sponge_mod_p, only: callsponge,mode_sponge,sponge_p 30 30 use comuforc_h 31 32 #ifdef CPP_XIOS33 ! ug Pour les sorties XIOS34 USE wxios35 #endif36 31 37 32 IMPLICIT NONE … … 1545 1540 c$OMP BARRIER 1546 1541 RETURN 1547 ENDIF 1542 ENDIF ! of IF (itau==itaumax) 1548 1543 1549 1544 IF ( .NOT.purmats ) THEN … … 1579 1574 1580 1575 c$OMP MASTER 1581 1582 #ifdef CPP_XIOS1583 !Fermeture propre de XIOS1584 CALL wxios_close()1585 #endif1586 1576 call fin_getparam 1587 1577 call finalize_parallel … … 1604 1594 #ifdef CPP_IOIPSL 1605 1595 IF (ok_dynzon) THEN 1606 call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest) 1607 call SendRequest(TestRequest) 1608 c$OMP BARRIER 1609 call WaitRequest(TestRequest) 1610 c$OMP BARRIER 1611 c$OMP MASTER 1612 ! CALL writedynav_p(histaveid, itau,vcov , 1613 ! , ucov,teta,pk,phi,q,masse,ps,phis) 1614 1615 c ATTENTION!!! bilan_dyn_p ne marche probablement pas avec OpenMP 1616 ! CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1617 ! , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1596 CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1597 , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1618 1598 c les traceurs ne sont pas sortis, trop lourd. 1619 1599 c Peut changer eventuellement si besoin. 1620 CALL bilan_dyn_p(dtvr*iperiod,dtvr*day_step*periodav, 1621 & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov, 1622 & du,dudis,dutop,dufi) 1623 c$OMP END MASTER 1600 ! CALL bilan_dyn_p(dtvr*iperiod,dtvr*day_step*periodav, 1601 ! & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov, 1602 ! & du,dudis,dutop,dufi) 1624 1603 ENDIF !ok_dynzon 1625 1604 #endif … … 1828 1807 #ifdef CPP_IOIPSL 1829 1808 IF (ok_dynzon) THEN 1830 c$OMP BARRIER 1831 call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest) 1832 call SendRequest(TestRequest) 1833 c$OMP BARRIER 1834 call WaitRequest(TestRequest) 1835 c$OMP BARRIER 1836 c$OMP MASTER 1837 ! CALL writedynav_p(histaveid, itau,vcov , 1838 ! , ucov,teta,pk,phi,q,masse,ps,phis) 1839 ! CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1840 ! , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1809 CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1810 , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1841 1811 c les traceurs ne sont pas sortis, trop lourd. 1842 1812 c Peut changer eventuellement si besoin. 1843 CALL bilan_dyn_p(dtvr*iperiod,dtvr*day_step*periodav, 1844 & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov, 1845 & du,dudis,dutop,dufi) 1846 1847 c$OMP END MASTER 1813 ! CALL bilan_dyn_p(dtvr*iperiod,dtvr*day_step*periodav, 1814 ! & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov, 1815 ! & du,dudis,dutop,dufi) 1848 1816 END IF !ok_dynzon 1849 1817 #endif -
trunk/LMDZ.COMMON/libf/dyn3dpar/mod_const_mpi.F90
r979 r1300 3 3 ! 4 4 MODULE mod_const_mpi 5 5 IMPLICIT NONE 6 6 INTEGER,SAVE :: COMM_LMDZ 7 7 INTEGER,SAVE :: MPI_REAL_LMDZ … … 12 12 SUBROUTINE Init_const_mpi 13 13 #ifdef CPP_IOIPSL 14 USE IOIPSL 14 USE IOIPSL, ONLY: getin 15 15 #else 16 16 ! if not using IOIPSL, we still need to use (a local version of) getin 17 USE ioipsl_getincom 17 USE ioipsl_getincom, only: getin 18 18 #endif 19 19 … … 22 22 INCLUDE 'mpif.h' 23 23 #endif 24 24 25 INTEGER :: ierr 25 26 INTEGER :: comp_id … … 51 52 52 53 SUBROUTINE Init_mpi 54 #ifdef CPP_XIOS 55 USE wxios, only: wxios_init 56 #endif 53 57 IMPLICIT NONE 54 58 #ifdef CPP_MPI … … 70 74 COMM_LMDZ=MPI_COMM_WORLD 71 75 MPI_REAL_LMDZ=MPI_REAL8 76 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 77 ! Initialisation de XIOS 78 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 79 #ifdef CPP_XIOS 80 CALL wxios_init("LMDZ", outcom=COMM_LMDZ) 81 #endif 72 82 !$OMP END MASTER 83 #else 84 #ifdef CPP_XIOS 85 !$OMP MASTER 86 CALL wxios_init("LMDZ") 87 !$OMP END MASTER 88 #endif 73 89 #endif 74 90 … … 76 92 77 93 END MODULE mod_const_mpi 94 -
trunk/LMDZ.COMMON/libf/dyn3dpar/parallel_lmdz.F90
r1019 r1300 4 4 module parallel_lmdz 5 5 USE mod_const_mpi 6 #ifdef CPP_IOIPSL 7 use IOIPSL, only: getin 8 #else 9 ! if not using IOIPSL, we still need to use (a local version of) getin 10 use ioipsl_getincom, only: getin 11 #endif 6 12 7 13 LOGICAL,SAVE :: using_mpi=.TRUE. … … 155 161 omp_size=OMP_GET_NUM_THREADS() 156 162 !$OMP END MASTER 163 !$OMP BARRIER 157 164 omp_rank=OMP_GET_THREAD_NUM() 165 166 !Config Key = omp_chunk 167 !Config Desc = taille des blocs openmp 168 !Config Def = 1 169 !Config Help = defini la taille des packets d'it�ration openmp 170 !Config distribue a chaque tache lors de l'entree dans une 171 !Config boucle parallelisee 172 173 !$OMP MASTER 174 omp_chunk=(llm+1)/omp_size 175 IF (MOD(llm+1,omp_size)/=0) omp_chunk=omp_chunk+1 176 CALL getin('omp_chunk',omp_chunk) 177 !$OMP END MASTER 178 !$OMP BARRIER 158 179 #else 159 180 omp_size=1 … … 199 220 200 221 subroutine Finalize_parallel 222 #ifdef CPP_XIOS 223 ! ug Pour les sorties XIOS 224 USE wxios 225 #endif 201 226 #ifdef CPP_COUPLE 202 227 use mod_prism_proto … … 234 259 #endif 235 260 else 261 #ifdef CPP_XIOS 262 !Fermeture propre de XIOS 263 CALL wxios_close() 264 #endif 236 265 #ifdef CPP_MPI 237 266 IF (using_mpi) call MPI_FINALIZE(ierr)
Note: See TracChangeset
for help on using the changeset viewer.