Changeset 1250 for LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar
- Timestamp:
- Oct 29, 2009, 2:55:23 PM (15 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar
- Files:
-
- 1 added
- 1 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/calfis_p.F
r1231 r1250 158 158 REAL,ALLOCATABLE,SAVE :: pcvgt(:,:), pcvgq(:,:,:) 159 159 c 160 c REAL,ALLOCATABLE,SAVE :: pvervel(:,:)161 c162 160 REAL,ALLOCATABLE,SAVE :: zdufi(:,:),zdvfi(:,:) 163 161 REAL,ALLOCATABLE,SAVE :: zdtfi(:,:),zdqfi(:,:,:) … … 175 173 REAL,ALLOCATABLE,SAVE :: ztfi_omp(:,:) 176 174 REAL,ALLOCATABLE,SAVE :: zqfi_omp(:,:,:) 177 c REAL,ALLOCATABLE,SAVE :: pvervel_omp(:,:)178 175 REAL,ALLOCATABLE,SAVE :: zdufi_omp(:,:) 179 176 REAL,ALLOCATABLE,SAVE :: zdvfi_omp(:,:) … … 252 249 ALLOCATE(pcvgu(klon,llm), pcvgv(klon,llm)) 253 250 ALLOCATE(pcvgt(klon,llm), pcvgq(klon,llm,2)) 254 c ALLOCATE(pvervel(klon,llm))255 251 ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm)) 256 252 ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nqtot)) … … 278 274 279 275 c$OMP MASTER 276 !CDIR ON_ADB(index_i) 277 !CDIR ON_ADB(index_j) 280 278 do ig0=1,klon 281 279 i=index_i(ig0) … … 300 298 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 301 299 DO l = 1, llmp1 300 !CDIR ON_ADB(index_i) 301 !CDIR ON_ADB(index_j) 302 302 do ig0=1,klon 303 303 i=index_i(ig0) … … 314 314 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 315 315 DO l=1,llm 316 316 !CDIR ON_ADB(index_i) 317 !CDIR ON_ADB(index_j) 317 318 do ig0=1,klon 318 319 i=index_i(ig0) … … 321 322 zplay(ig0,l) = preff * pksurcp ** unskap 322 323 ztfi(ig0,l) = pteta(i,j,l) * pksurcp 323 c pcvgt(ig0,l) = pdteta(i,j,l) * pksurcp / pmasse(i,j,l)324 324 enddo 325 325 … … 335 335 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 336 336 DO l=1,llm 337 !CDIR ON_ADB(index_i) 338 !CDIR ON_ADB(index_j) 337 339 do ig0=1,klon 338 340 i=index_i(ig0) … … 344 346 ENDDO 345 347 346 c convergence dynamique pour les traceurs "EAU"347 ! Earth-specific treatment of first 2 tracers (water)348 if (planet_type=="earth") then349 DO iq=1,2350 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)351 DO l=1,llm352 do ig0=1,klon353 i=index_i(ig0)354 j=index_j(ig0)355 c pcvgq(ig0,l,iq) = pdq(i,j,l,iq) / pmasse(i,j,l)356 enddo357 ENDDO358 c$OMP END DO NOWAIT359 ENDDO360 endif ! of if (planet_type=="earth")361 362 348 363 349 c Geopotentiel calcule par rapport a la surface locale: … … 378 364 c$OMP END DO NOWAIT 379 365 380 c .... Calcul de la vitesse verticale ( en Pa*m*s ou Kg/s ) ....381 c JG : ancien calcule de omega utilise dans physiq.F. Maintenant le flux382 c de masse est calclue dans advtrac_p.F383 c384 cc$OMP DO SCHEDULE(STATIC,OMP_CHUNK)385 c DO l=1,llm386 c do ig0=1,klon387 c i=index_i(ig0)388 c j=index_j(ig0)389 c pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j)390 c enddo391 c if (is_north_pole) pvervel(1,l)=pw(1,1,l)*g /apoln392 c if (is_south_pole) pvervel(klon,l)=pw(1,jjp1,l)*g/apols393 c ENDDO394 cc$OMP END DO NOWAIT395 366 396 367 c … … 406 377 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 407 378 DO l=1,llm 379 !CDIR ON_ADB(index_i) 380 !CDIR ON_ADB(index_j) 381 !CDIR SPARSE 408 382 do ig0=kstart,kend 409 383 i=index_i(ig0) … … 412 386 zufi(ig0,l)= 0.5 *( pucov(iim,j,l)/cu(iim,j) 413 387 $ + pucov(1,j,l)/cu(1,j) ) 414 c pcvgu(ig0,l)= 0.5*( pducov(iim,j,l)/cu(iim,j)415 c $ + pducov(1,j,l)/cu(1,j) )416 388 else 417 389 zufi(ig0,l)= 0.5*( pucov(i-1,j,l)/cu(i-1,j) 418 390 $ + pucov(i,j,l)/cu(i,j) ) 419 c pcvgu(ig0,l)= 0.5*( pducov(i-1,j,l)/cu(i-1,j)420 c $ + pducov(i,j,l)/cu(i,j) )421 391 endif 422 392 enddo 423 393 ENDDO 424 394 c$OMP END DO NOWAIT 395 425 396 c 46.champ v: 426 397 c ----------- 398 427 399 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 428 400 DO l=1,llm 401 !CDIR ON_ADB(index_i) 402 !CDIR ON_ADB(index_j) 429 403 DO ig0=kstart,kend 430 404 i=index_i(ig0) … … 433 407 $ + pvcov(i,j,l)/cv(i,j) ) 434 408 435 c pcvgv(ig0+i,l)= 0.5 * ( pdvcov(i,j-1,l)/cv(i,j-1)436 c $ + pdvcov(i,j,l)/cv(i,j) )437 409 ENDDO 438 410 ENDDO … … 449 421 450 422 z1(1) =(rlonu(1)-rlonu(iim)+2.*pi)*pvcov(1,1,l)/cv(1,1) 451 c z1bis(1)=(rlonu(1)-rlonu(iim)+2.*pi)*pdvcov(1,1,l)/cv(1,1)452 423 DO i=2,iim 453 424 z1(i) =(rlonu(i)-rlonu(i-1))*pvcov(i,1,l)/cv(i,1) 454 c z1bis(i)=(rlonu(i)-rlonu(i-1))*pdvcov(i,1,l)/cv(i,1)455 425 ENDDO 456 426 457 427 DO i=1,iim 458 428 zcos(i) = COS(rlonv(i))*z1(i) 459 c zcosbis(i)= COS(rlonv(i))*z1bis(i)460 429 zsin(i) = SIN(rlonv(i))*z1(i) 461 c zsinbis(i)= SIN(rlonv(i))*z1bis(i)462 430 ENDDO 463 431 464 432 zufi(1,l) = SSUM(iim,zcos,1)/pi 465 c pcvgu(1,l) = SSUM(iim,zcosbis,1)/pi466 433 zvfi(1,l) = SSUM(iim,zsin,1)/pi 467 c pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi468 434 469 435 ENDDO … … 482 448 483 449 z1(1) =(rlonu(1)-rlonu(iim)+2.*pi)*pvcov(1,jjm,l)/cv(1,jjm) 484 c z1bis(1)=(rlonu(1)-rlonu(iim)+2.*pi)*pdvcov(1,jjm,l)/cv(1,jjm)485 450 DO i=2,iim 486 z1(i) =(rlonu(i)-rlonu(i-1))*pvcov(i,jjm,l)/cv(i,jjm) 487 c z1bis(i)=(rlonu(i)-rlonu(i-1))*pdvcov(i,jjm,l)/cv(i,jjm) 451 z1(i) =(rlonu(i)-rlonu(i-1))*pvcov(i,jjm,l)/cv(i,jjm) 488 452 ENDDO 489 453 490 454 DO i=1,iim 491 455 zcos(i) = COS(rlonv(i))*z1(i) 492 c zcosbis(i) = COS(rlonv(i))*z1bis(i)493 456 zsin(i) = SIN(rlonv(i))*z1(i) 494 c zsinbis(i) = SIN(rlonv(i))*z1bis(i)495 457 ENDDO 496 458 497 459 zufi(klon,l) = SSUM(iim,zcos,1)/pi 498 c pcvgu(klon,l) = SSUM(iim,zcosbis,1)/pi499 460 zvfi(klon,l) = SSUM(iim,zsin,1)/pi 500 c pcvgv(klon,l) = SSUM(iim,zsinbis,1)/pi501 502 461 ENDDO 503 462 c$OMP END DO NOWAIT … … 506 465 507 466 IF (is_sequential) THEN 508 if (planet_type=="earth") then509 #ifdef CPP_EARTH510 467 c 511 468 cIM calcul PV a teta=350, 380, 405K … … 514 471 $ ntetaSTD,rtetaSTD,PVteta) 515 472 c 516 #endif517 endif518 473 ENDIF 519 474 … … 525 480 c --------------------- 526 481 527 cc$OMP PARALLEL DEFAULT(NONE)528 cc$OMP+ PRIVATE(i,l,offset,iq)529 cc$OMP+ SHARED(klon_omp_nb,nqtot,klon_omp_begin,530 cc$OMP+ debut,lafin,rdayvrai,heure,dtphys,zplev,zplay,531 cc$OMP+ zphi,zphis,presnivs,clesphy0,zufi,zvfi,ztfi,532 cc$OMP+ zqfi,pvervel,zdufi,zdvfi,zdtfi,zdqfi,zdpsrf)533 534 c PRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp,535 c c$OMP+ presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,536 c c$OMP+ zqfi_omp,pvervel_omp,zdufi_omp,zdvfi_omp,537 c c$OMP+ zdtfi_omp,zdqfi_omp,zdpsrf_omp)538 482 539 483 c$OMP BARRIER … … 550 494 allocate(ztfi_omp(klon,llm)) 551 495 allocate(zqfi_omp(klon,llm,nqtot)) 552 c allocate(pvervel_omp(klon,llm))553 496 allocate(zdufi_omp(klon,llm)) 554 497 allocate(zdvfi_omp(klon,llm)) … … 617 560 enddo 618 561 619 c do l=1,llm620 c do i=1,klon621 c pvervel_omp(i,l)=pvervel(offset+i,l)622 c enddo623 c enddo624 625 562 do l=1,llm 626 563 do i=1,klon … … 660 597 661 598 c$OMP BARRIER 662 cym call WriteField_phy_p('zdtfi_omp',zdtfi_omp(:,:),llm)663 599 664 600 if (planet_type=="earth") then … … 681 617 . ztfi_omp, 682 618 . zqfi_omp, 683 c . pvervel_omp,684 619 c#ifdef INCA 685 620 . flxwfi_omp, … … 695 630 #endif 696 631 endif !of if (planet_type=="earth") 697 698 cym call WriteField_phy_p('zdtfi_omp',zdtfi_omp(:,:),llm)699 700 632 c$OMP BARRIER 701 633 … … 753 685 enddo 754 686 enddo 755 756 c do l=1,llm757 c do i=1,klon758 c pvervel(offset+i,l)=pvervel_omp(i,l)759 c enddo760 c enddo761 687 762 688 do l=1,llm … … 791 717 792 718 793 cc$OMP END PARALLEL794 719 klon=klon_mpi 795 720 500 CONTINUE … … 797 722 798 723 c$OMP MASTER 799 cym call WriteField_phy('zdtfi',zdtfi(:,:),llm)800 724 call stop_timer(timer_physic) 801 725 c$OMP END MASTER … … 913 837 DO l=1,llm 914 838 915 !!cdir NODEP 839 !CDIR ON_ADB(index_i) 840 !CDIR ON_ADB(index_j) 841 !cdir NODEP 916 842 do ig0=kstart,kend 917 843 i=index_i(ig0) … … 975 901 976 902 C 977 903 !cdir NODEP 978 904 DO iq=1,nqtot 979 905 iiq=niadv(iq) 980 906 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 981 907 DO l=1,llm 982 983 !!cdir NODEP 908 !CDIR ON_ADB(index_i) 909 !CDIR ON_ADB(index_j) 910 !cdir NODEP 984 911 DO ig0=kstart,kend 985 912 i=index_i(ig0) … … 1009 936 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1010 937 DO l=1,llm 1011 !!cdir NODEP 938 !CDIR ON_ADB(index_i) 939 !CDIR ON_ADB(index_j) 940 !cdir NODEP 1012 941 do ig0=kstart,kend 1013 942 i=index_i(ig0) … … 1052 981 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1053 982 DO l=1,llm 1054 !!cdir NODEP 983 !CDIR ON_ADB(index_i) 984 !CDIR ON_ADB(index_j) 985 !cdir NODEP 1055 986 do ig0=kstart,kend 1056 987 i=index_i(ig0) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/cray.F
r774 r1250 13 13 real sx((n-1)*incx+1),sy((n-1)*incy+1) 14 14 c 15 if (incx.eq.1.and.incy.eq.1) then 16 do 10 i=1,n 17 sy(i)=sx(i) 18 10 continue 19 else 15 20 iy=1 16 21 ix=1 17 do 1 0i=1,n22 do 11 i=1,n 18 23 sy(iy)=sx(ix) 19 24 ix=ix+incx 20 25 iy=iy+incy 21 10 continue 26 11 continue 27 endif 22 28 c 23 29 return … … 32 38 c 33 39 ssum=0. 40 if (incx.eq.1) then 41 do 10 i=1,n 42 ssum=ssum+sx(i) 43 10 continue 44 else 34 45 ix=1 35 do 1 0i=1,n46 do 11 i=1,n 36 47 ssum=ssum+sx(ix) 37 48 ix=ix+incx 38 10 continue 49 11 continue 50 endif 39 51 c 40 52 return -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/groupeun_p.F
r1087 r1250 1 1 SUBROUTINE groupeun_p(jjmax,llmax,jjb,jje,q) 2 2 USE parallel 3 USE Write_Field_p 3 4 IMPLICIT NONE 4 5 … … 17 18 REAL airecs,qs 18 19 19 INTEGER i,j,l,ig, j1,j2,i0,jd20 INTEGER i,j,l,ig,ig2,j1,j2,i0,jd 20 21 21 22 c--------------------------------------------------------------------c … … 37 38 LOGICAL, SAVE :: first = .TRUE. 38 39 !$OMP THREADPRIVATE(first) 40 INTEGER,SAVE :: i_index(iim,ngroup) 41 INTEGER :: offset 42 REAL :: qsum(iim/ngroup) 39 43 40 44 IF (first) THEN … … 54 58 j_start = MAX(jjb, j1-jd) 55 59 j_finish = MIN(jje, j2-jd) 56 DO j=j_start, j_finish 57 DO i0=1,iim,2**(ngroup-ig+1) 58 qn=0. 59 DO i=i0,i0+2**(ngroup-ig+1)-1 60 qn=qn+q(i,j,l) 61 ENDDO 62 DO i=i0,i0+2**(ngroup-ig+1)-1 63 q(i,j,l)=qn*airen_tab(i,j,jd) 64 ENDDO 60 DO ig2=1,ngroup-ig+1 61 offset=2**(ig2-1) 62 DO j=j_start, j_finish 63 !CDIR NODEP 64 !CDIR ON_ADB(q) 65 DO i0=1,iim,2**ig2 66 q(i0,j,l)=q(i0,j,l)+q(i0+offset,j,l) 67 ENDDO 68 ENDDO 69 ENDDO 70 71 DO j=j_start, j_finish 72 !CDIR NODEP 73 !CDIR ON_ADB(q) 74 DO i=1,iim 75 q(i,j,l)=q(i-MOD(i-1,2**(ngroup-ig+1)),j,l) 76 ENDDO 77 ENDDO 78 79 DO j=j_start, j_finish 80 !CDIR ON_ADB(airen_tab) 81 !CDIR ON_ADB(q) 82 DO i=1,iim 83 q(i,j,l)=q(i,j,l)*airen_tab(i,j,jd) 65 84 ENDDO 66 85 q(iip1,j,l)=q(1,j,l) 67 86 ENDDO 68 87 69 88 !c Concerne le pole sud 70 89 j_start = MAX(1+jjp1-jje-jd, j1-jd) 71 90 j_finish = MIN(1+jjp1-jjb-jd, j2-jd) 72 DO j=j_start, j_finish 73 DO i0=1,iim,2**(ngroup-ig+1) 74 qs=0. 75 DO i=i0,i0+2**(ngroup-ig+1)-1 76 qs=qs+q(i,jjp1-j+1-jd,l) 77 ENDDO 78 DO i=i0,i0+2**(ngroup-ig+1)-1 79 q(i,jjp1-j+1-jd,l)=qs*aires_tab(i,jjp1-j+1,jd) 80 ENDDO 91 DO ig2=1,ngroup-ig+1 92 offset=2**(ig2-1) 93 DO j=j_start, j_finish 94 !CDIR NODEP 95 !CDIR ON_ADB(q) 96 DO i0=1,iim,2**ig2 97 q(i0,jjp1-j+1-jd,l)= q(i0,jjp1-j+1-jd,l) 98 & +q(i0+offset,jjp1-j+1-jd,l) 99 ENDDO 100 ENDDO 101 ENDDO 102 103 104 DO j=j_start, j_finish 105 !CDIR NODEP 106 !CDIR ON_ADB(q) 107 DO i=1,iim 108 q(i,jjp1-j+1-jd,l)=q(i-MOD(i-1,2**(ngroup-ig+1)), 109 & jjp1-j+1-jd,l) 110 ENDDO 111 ENDDO 112 113 DO j=j_start, j_finish 114 !CDIR ON_ADB(aires_tab) 115 !CDIR ON_ADB(q) 116 DO i=1,iim 117 q(i,jjp1-j+1-jd,l)=q(i,jjp1-j+1-jd,l)* 118 & aires_tab(i,jjp1-j+1,jd) 81 119 ENDDO 82 120 q(iip1,jjp1-j+1-jd,l)=q(1,jjp1-j+1-jd,l) 83 121 ENDDO 122 84 123 85 124 j1=j2+1 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/leapfrog_p.F
r1247 r1250 327 327 c$OMP MASTER 328 328 ItCount=ItCount+1 329 if (MOD(ItCount,1 )==1) then329 if (MOD(ItCount,12)==0) then 330 330 debug=.true. 331 331 else
Note: See TracChangeset
for help on using the changeset viewer.