Changeset 1885 for LMDZ5/trunk


Ignore:
Timestamp:
Oct 4, 2013, 3:35:36 PM (11 years ago)
Author:
Ehouarn Millour
Message:

Make dyn3dpar/bilan_dyn_p.F work in MPI and OpenMP.
EM

Location:
LMDZ5/trunk/libf
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/dyn3d/inigrads.F

    r1606 r1885  
    1313      real xmin,xmax,ymin,ymax
    1414
    15       character file*10,titlel*40
     15      character(len=*),intent(in) :: file
     16      character(len=*),intent(in) :: titlel
    1617
    1718#include "gradsdef.h"
  • LMDZ5/trunk/libf/dyn3dmem/bilan_dyn_loc.F

    r1874 r1885  
    444444!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    445445      DO l=1,llm
    446         masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)+masse(:,jjb:jje,:)
    447         flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)
    448      .                         +flux_u(:,jjb:jje,:)
     446        masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)+masse(:,jjb:jje,l)
     447        flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)
     448     .                         +flux_u(:,jjb:jje,l)
    449449      ENDDO
    450450!$OMP END DO NOWAIT
     
    454454!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    455455      DO l=1,llm
    456        flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)
    457      .                          +flux_v(:,jjb:jje,:)
     456       flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)
     457     .                          +flux_v(:,jjb:jje,l)
    458458      ENDDO
    459459!$OMP END DO NOWAIT
     
    465465!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    466466        DO l=1,llm
    467           Q_cum(:,jjb:jje,:,iQ)=Q_cum(:,jjb:jje,:,iQ)
    468      .                       +Q(:,jjb:jje,:,iQ)*masse(:,jjb:jje,:)
     467          Q_cum(:,jjb:jje,l,iQ)=Q_cum(:,jjb:jje,l,iQ)
     468     .                       +Q(:,jjb:jje,l,iQ)*masse(:,jjb:jje,l)
    469469        ENDDO
    470470!$OMP END DO NOWAIT
  • LMDZ5/trunk/libf/dyn3dmem/inigrads.F

    r1673 r1885  
    1313      real xmin,xmax,ymin,ymax
    1414
    15       character file*10,titlel*40
     15      character(len=*),intent(in) :: file
     16      character(len=*),intent(in) :: titlel
    1617
    1718#include "gradsdef.h"
  • LMDZ5/trunk/libf/dyn3dpar/bilan_dyn_p.F

    r1823 r1885  
    1616      USE mod_hallo
    1717      use misc_mod
    18       use write_field
     18      use write_field_p
    1919      IMPLICIT NONE
    2020
     
    5757c   =======
    5858
    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
    6568
    6669
    6770cym      character*6 nom(nQ)
    6871cym      character*6 unites(nQ)
    69       character*6,save :: nom(nQ)
    70       character*6,save :: unites(nQ)
    71 
    72       character*10 file
     72      character(len=6),save :: nom(nQ)
     73      character(len=6),save :: unites(nQ)
     74
     75      character(len=10) file
    7376      integer ifile
    7477      parameter (ifile=4)
    7578
    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)
    9186
    9287      real ww
    9388
    9489c   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)
    10197
    10298c   champ contenant les scalaires advectés.
    103       real Q(iip1,jjp1,llm,nQ)
     99      real,save :: Q(iip1,jjp1,llm,nQ)
    104100   
    105101c   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
    118112
    119113c   champs de tansport en moyenne zonale
     
    128122      character*10,save :: zunites(ntr,nQ)
    129123
    130       integer iave,itot,immc,itrs,istn
    131       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
    132126      character*3 ctrs(ntr)
    133127      data ctrs/'  ','TOT','MMC','TRS','STN'/
    134128
    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)
    140134
    141135      integer i,j,l,iQ
     
    151145      save fileid
    152146
    153       integer ndex3d(jjm*llm)
     147      integer,save :: ndex3d(jjm*llm)
    154148
    155149C   Variables locales
     
    162156      integer zan, dayref
    163157C
    164       real rlong(jjm),rlatg(jjm)
     158      real,save :: rlong(jjm),rlatg(jjm)
    165159      integer :: jjb,jje,jjn,ijb,ije
    166       type(Request) :: Req
     160      type(Request),SAVE :: Req
     161!$OMP THREADPRIVATE(Req)
    167162
    168163! definition du domaine d'ecriture pour le rebuild
     
    182177c   Initialisation
    183178c=====================================================================
    184       ndex3d=0
    185179      if (adjust) return
    186180     
     
    190184      if (first) then
    191185
     186        ndex3d=0
    192187
    193188        icum=0
     
    202197           WRITE(lunout,*)'dt_cum=',dt_cum
    203198           stop
     199        else
     200          write(lunout,*) "bilan_dyn_p: ncum=",ncum
    204201        endif
    205202
    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
    216214        nom(itemp)='T'
    217215        nom(igeop)='gz'
     
    339337               CALL histend(fileid)
    340338
    341 
     339!$OMP END MASTER
     340!$OMP BARRIER
    342341      endif
    343342
     
    351350   
    352351c   énergie cinétique
    353       ucont(:,jjb:jje,:)=0
     352!      ucont(:,jjb:jje,:)=0
    354353
    355354      call Register_Hallo(ucov,ip1jmp1,llm,1,1,1,1,Req)
    356355      call Register_Hallo(vcov,ip1jm,llm,1,1,1,1,Req)
    357356      call SendRequest(Req)
     357c$OMP BARRIER
    358358      call WaitRequest(Req)
     359c$OMP BARRIER
    359360
    360361      CALL covcont_p(llm,ucov,vcov,ucont,vcont)
     
    362363
    363364c   moment cinétique
     365!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    364366      do l=1,llm
    365367         ang(:,jjb:jje,l)=ucov(:,jjb:jje,l)+constang(:,jjb:jje)
    366368         unat(:,jjb:jje,l)=ucont(:,jjb:jje,l)*cu(:,jjb:jje)
    367369      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
    377383
    378384c=====================================================================
     
    384390         jje=jj_end
    385391
     392!$OMP MASTER
    386393         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
    394408      endif
    395409
     
    402416      jje=jj_end
    403417
     418!$OMP MASTER
    404419      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     
    408431      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
    418450      enddo
    419451
     
    425457c   -----------------
    426458      do iQ=1,nQ
     459!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    427460         do l=1,llm
    428461            do j=jjb,jje
     
    434467            enddo
    435468         enddo
     469!$OMP END DO NOWAIT
    436470      enddo
    437471
     
    442476      enddo
    443477      call SendRequest(Req)
     478!$OMP BARRIER     
    444479      call WaitRequest(Req)
    445      
     480!$OMP BARRIER
     481
    446482      jjb=jj_begin
    447483      jje=jj_end
     
    449485     
    450486      do iQ=1,nQ
     487!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    451488         do l=1,llm
    452489            do j=jjb,jje
     
    457494            enddo
    458495         enddo
     496!$OMP END DO NOWAIT
    459497      enddo
    460498
     
    467505      call Register_Hallo(flux_vQ_cum,ip1jm,llm,2,2,2,2,Req)
    468506      call SendRequest(Req)
     507!$OMP BARRIER     
    469508      call WaitRequest(Req)
     509c$OMP BARRIER
    470510
    471511      call  convflu_p(flux_uQ_cum,flux_vQ_cum,llm*nQ,dQ)
     
    475515      call Register_Hallo(flux_v_cum,ip1jm,llm,2,2,2,2,Req)
    476516      call SendRequest(Req)
     517!$OMP BARRIER     
    477518      call WaitRequest(Req)
     519c$OMP BARRIER
    478520
    479521      call convmas_p(flux_u_cum,flux_v_cum,convm)
    480522      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
    495550      enddo
    496551      IF (prt_level > 5)
     
    505560     . WRITE(lunout,*)'Pas d ecriture'
    506561
     562      jjb=jj_begin
     563      jje=jj_end
     564
    507565c   Normalisation
    508566      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
    512575      zz=1./REAL(ncum)
    513576
    514       jjb=jj_begin
    515       jje=jj_end
    516 
     577!$OMP MASTER
    517578      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         
    522590     
    523591      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
    526598
    527599      jjb=jj_begin
     
    532604c   division de dQ par la masse pour revenir aux bonnes grandeurs
    533605      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
    535611      enddo
    536612 
     
    545621      if (pole_sud) jje=jj_end-1
    546622
    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
    549629
    550630      call Register_Hallo(masse_cum,ip1jmp1,llm,1,1,1,1,Req)
     
    554634
    555635      call SendRequest(Req)
     636!$OMP BARRIER
    556637      call WaitRequest(Req)
     638c$OMP BARRIER
    557639
    558640      call massbar_p(masse_cum,massebx,masseby)
     
    562644      if (pole_sud) jje=jj_end-1
    563645     
     646!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    564647      do l=1,llm
    565648         do j=jjb,jje
     
    571654         enddo
    572655      enddo
     656!$OMP ENDDO
    573657
    574658c     print*,'3OK'
     
    609693      psiQ=0.
    610694      do iQ=1,nQ
    611          zvQtmp=0.
     695!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    612696         do l=1,llm
     697            zvQtmp(:,l)=0.
    613698            do j=jjb,jje
    614699c              print*,'j,l,iQ=',j,l,iQ
     
    633718            enddo
    634719         enddo
     720!$OMP ENDDO NOWAIT
    635721c   fonction de courant meridienne pour la quantite Q
     722!$OMP BARRIER
     723!$OMP MASTER
    636724         do l=llm,1,-1
    637725            do j=jjb,jje
     
    639727            enddo
    640728         enddo
    641       enddo
     729!$OMP END MASTER
     730!$OMP BARRIER
     731      enddo ! of do iQ=1,nQ
    642732
    643733c   fonction de courant pour la circulation meridienne moyenne
     734!$OMP BARRIER
     735!$OMP MASTER
    644736      psi(jjb:jje,:)=0.
    645737      do l=llm,1,-1
     
    649741         enddo
    650742      enddo
     743!$OMP END MASTER
     744!$OMP BARRIER
    651745
    652746c     print*,'4OK'
    653747c   sorties proprement dites
     748!$OMP MASTER     
    654749      if (i_sortie.eq.1) then
    655750      jjb=jj_begin
     
    669764     s                  ,jjn*llm,ndex3d)
    670765      enddo
    671 
    672766      call histwrite(fileid,'masse',itau,zmasse(jjb:jje,1:llm)
    673767     s   ,jjn*llm,ndex3d)
     
    703797         enddo
    704798      enddo
    705 
     799!$OMP END MASTER
     800!$OMP BARRIER
    706801c     on doit pouvoir tracer systematiquement la fonction de courant.
    707802
     
    712807c/////////////////////////////////////////////////////////////////////
    713808c=====================================================================
    714 
    715809      return
    716810      end
  • LMDZ5/trunk/libf/dyn3dpar/inigrads.F

    r1606 r1885  
    1313      real xmin,xmax,ymin,ymax
    1414
    15       character file*10,titlel*40
     15      character(len=*),intent(in) :: file
     16      character(len=*),intent(in) :: titlel
    1617
    1718#include "gradsdef.h"
  • LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F

    r1852 r1885  
    13441344c$OMP BARRIER
    13451345        RETURN
    1346       ENDIF
     1346      ENDIF ! of IF (itau==itaumax)
    13471347     
    13481348      IF ( .NOT.purmats ) THEN
     
    13961396#ifdef CPP_IOIPSL
    13971397             IF (ok_dynzon) THEN
    1398              call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest)
    1399              call SendRequest(TestRequest)
    1400 c$OMP BARRIER
    1401               call WaitRequest(TestRequest)
    1402 c$OMP BARRIER
    1403 c$OMP MASTER
    1404 !              CALL writedynav_p(histaveid, itau,vcov ,
    1405 !     ,                          ucov,teta,pk,phi,q,masse,ps,phis)
    1406 
    1407 c ATTENTION!!! bilan_dyn_p ne marche probablement pas avec OpenMP
    14081398              CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav,
    14091399     ,             ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
    1410 c$OMP END MASTER
    14111400              ENDIF !ok_dynzon
    14121401#endif
     
    16021591#ifdef CPP_IOIPSL
    16031592               IF (ok_dynzon) THEN
    1604 c$OMP BARRIER
    1605                call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest)
    1606                call SendRequest(TestRequest)
    1607 c$OMP BARRIER
    1608                call WaitRequest(TestRequest)
    1609 c$OMP BARRIER
    1610 c$OMP MASTER
    1611 !               CALL writedynav_p(histaveid, itau,vcov ,
    1612 !     ,                          ucov,teta,pk,phi,q,masse,ps,phis)
    16131593               CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav,
    16141594     ,           ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
    1615 c$OMP END MASTER
    16161595               END IF !ok_dynzon
    16171596#endif
Note: See TracChangeset for help on using the changeset viewer.