Ignore:
Timestamp:
Jun 4, 2007, 4:13:10 PM (17 years ago)
Author:
Laurent Fairhead
Message:

Merge entre la version V3_conv et le HEAD
YM, JG, LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/dyn3dpar/gradiv2_p.F

    r630 r764  
    1       SUBROUTINE gradiv2_p(klevel, xcov, ycov, ld, gdx, gdy )
     1      SUBROUTINE gradiv2_p(klevel, xcov, ycov, ld, gdx_out, gdy_out )
    22c
    33c     P. Le Van
     
    2727      INTEGER klevel
    2828      REAL  xcov( ip1jmp1,klevel ), ycov( ip1jm,klevel )
    29       REAL   gdx( ip1jmp1,klevel ),  gdy( ip1jm,klevel )
     29      REAL,SAVE ::  gdx( ip1jmp1,llm ),  gdy( ip1jm,llm )
     30      REAL   gdx_out( ip1jmp1,klevel ), gdy_out( ip1jm,klevel )
    3031c
    3132c     ........       variables locales       .........
    3233c
    33       REAL div(ip1jmp1,llm)
     34      REAL,SAVE :: div(ip1jmp1,llm)
    3435      REAL signe, nugrads
    3536      INTEGER l,ij,iter,ld
     
    3839c    ........................................................
    3940c
    40       EXTERNAL   SCOPY, divergf, grad, laplacien_gam, filtreg
    4141c
    4242c      CALL SCOPY( ip1jmp1 * klevel, xcov, 1, gdx, 1 )
     
    4545      ijb=ij_begin
    4646      ije=ij_end
    47       gdx(ijb:ije,1:klevel)=xcov(ijb:ije,1:klevel)
    48 
     47     
     48c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     49      DO   l = 1, klevel
     50        gdx(ijb:ije,l)=xcov(ijb:ije,l)
     51      ENDDO
     52c$OMP END DO NOWAIT     
    4953     
    5054      ijb=ij_begin
    5155      ije=ij_end
    5256      if(pole_sud) ije=ij_end-iip1
    53       gdy(ijb:ije,1:klevel)=ycov(ijb:ije,1:klevel)
    54      
     57
     58c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
     59      DO   l = 1, klevel
     60        gdy(ijb:ije,l)=ycov(ijb:ije,l)
     61      ENDDO
     62c$OMP END DO NOWAIT
     63
     64c$OMP BARRIER
     65c$OMP MASTER     
    5566      call suspend_timer(timer_dissip)
    5667      call exchange_Hallo(gdy,ip1jm,llm,1,0)
    5768      call resume_timer(timer_dissip)
     69c$OMP END MASTER
     70c$OMP BARRIER
    5871c
    5972c
     
    6780
    6881      IF( ld.GT.1 )   THEN
    69        
     82c$OMP BARRIER
     83c$OMP MASTER       
    7084        call suspend_timer(timer_dissip)
    7185        call exchange_Hallo(div,ip1jmp1,llm,1,1)
    7286        call resume_timer(timer_dissip)
    73        
     87c$OMP END MASTER       
     88c$OMP BARRIER
    7489        CALL laplacien_p ( klevel, div,  div     )
    7590
     
    7893
    7994        DO iter = 1, ld -2
     95c$OMP BARRIER
     96c$OMP MASTER
    8097         call suspend_timer(timer_dissip)
    8198         call exchange_Hallo(div,ip1jmp1,llm,1,1)
    8299         call resume_timer(timer_dissip)
     100c$OMP END MASTER
     101c$OMP BARRIER
    83102         CALL laplacien_gam ( klevel,cuvscvgam1,cvuscugam1,unsair_gam1,
    84103     *                       unsapolnga1, unsapolsga1,  div, div       )
     
    92111       CALL filtreg_p( div   ,jjb,jje, jjp1, klevel, 2, 1, .TRUE., 1 )
    93112c       call exchange_Hallo(div,ip1jmp1,llm,0,1)
    94        
     113c$OMP BARRIER
     114c$OMP MASTER       
    95115        call suspend_timer(timer_dissip)
    96116        call exchange_Hallo(div,ip1jmp1,llm,1,1)
    97117        call resume_timer(timer_dissip)
    98 
     118c$OMP END MASTER
     119c$OMP BARRIER
    99120c       call write_field3d_p('div4',reshape(div,(/iip1,jjp1,llm/)))
    100121       CALL  grad_p  ( klevel,  div,   gdx,  gdy             )
     
    104125      ije=ij_end
    105126         
    106      
     127c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
    107128       DO   l = 1, klevel
    108129         
    109130         if (pole_sud) ije=ij_end
    110131         DO  ij = ijb, ije
    111           gdx( ij,l ) = gdx( ij,l ) * nugrads
     132          gdx_out( ij,l ) = gdx( ij,l ) * nugrads
    112133         ENDDO
    113134         
    114135         if (pole_sud) ije=ij_end-iip1
    115136         DO  ij = ijb, ije
    116           gdy( ij,l ) = gdy( ij,l ) * nugrads
     137          gdy_out( ij,l ) = gdy( ij,l ) * nugrads
    117138         ENDDO
    118139       
    119140       ENDDO
     141c$OMP END DO NOWAIT
    120142c
    121143       RETURN
Note: See TracChangeset for help on using the changeset viewer.