Ignore:
Timestamp:
06/15/16 17:13:33 (8 years ago)
Author:
dumas
Message:

First parallelization instructions with OpenMP tested in debug : exactly the same results | isostasy called only every 50 years

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SOURCES/mix-SIA-L1_mod.f90

    r4 r71  
    5353subroutine mix_SIA_L1 
    5454 
     55!$ USE OMP_LIB 
     56! variables parallelisation openMP 
     57!!$  integer :: rang ,nb_taches 
    5558 
    5659! subroutine qui associe SIA et L1 
     
    5962 
    6063! use module_choix 
    61     if (itracebug.eq.1)  call tracebug(' routine mix_SIA_L1') 
     64if (itracebug.eq.1)  call tracebug(' routine mix_SIA_L1') 
    6265 
    6366debug_3D(:,:,9)=0. 
     
    7376   ! que celles du L1. On garde le L1 comme vitesse basale. 
    7477   ! version utilisee pour les runs MIS11 de Cairns 
    75  
     78        !$OMP PARALLEL 
     79   !$OMP DO 
    7680   do j=2,ny 
    7781      do i=2,nx 
     
    9599      end do 
    96100   end do 
     101   !$OMP END DO 
     102        !$OMP END PARALLEL 
    97103 
    98104else if (i_resolmeca.eq.2) then 
    99105 
    100106! addition systematique 
    101  
     107!       !$OMP PARALLEL PRIVATE(rang,nb_taches) 
     108!       !$ rang=OMP_GET_THREAD_NUM() 
     109!       !$ nb_taches=OMP_GET_NUM_THREADS() 
     110!       !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 
     111        !$OMP PARALLEL 
     112   !$OMP DO 
    102113   do j=2,ny 
    103114      do i=2,nx 
     115! test sur tout le tableau : 
    104116         if (flgzmx(i,j)) then  
    105             debug_3D(i,j,11)=uxflgz(i,j) 
     117!            debug_3D(i,j,11)=uxflgz(i,j) 
    106118            uxbar(i,j)=uxflgz(i,j)+uxdef(i,j)                       ! on ajoute la deform. SIA 
    107119            ubx(i,j) = uxflgz(i,j) 
    108             do k=1,nz 
     120!            do k=1,nz 
     121!               ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz 
     122!            end do 
     123 
     124!            debug_3D(i,j,9)=uxdef(i,j)                    
     125         endif 
     126 
     127         if (flgzmy(i,j)) then  
     128!            debug_3D(i,j,12)=uyflgz(i,j) 
     129            uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA 
     130            uby(i,j) = uyflgz(i,j) 
     131!            do k=1,nz 
     132!               uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz 
     133!            end do 
     134 
     135!            debug_3D(i,j,10)=uydef(i,j)               
     136         endif 
     137      end do 
     138   end do 
     139        !$OMP END DO 
     140        !$OMP END PARALLEL 
     141 
     142! on ne recalcul ux que lorsque uxflgz est modifié soit tous les dtt 
     143        if (isynchro.eq.1) then 
     144!       !$OMP PARALLEL PRIVATE(rang,nb_taches) 
     145!       !$ rang=OMP_GET_THREAD_NUM() 
     146!       !$ nb_taches=OMP_GET_NUM_THREADS() 
     147!       !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 
     148        !$OMP PARALLEL 
     149   !$OMP DO 
     150        do j=2,ny 
     151                do i=2,nx 
     152        if (flgzmx(i,j)) then  
     153                        do k=1,nz 
    109154               ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j)           ! remplace le glissement par uxflgz 
    110155            end do 
    111  
    112             debug_3D(i,j,9)=uxdef(i,j)                    
    113          end if 
    114  
     156         endif 
    115157         if (flgzmy(i,j)) then  
    116             debug_3D(i,j,12)=uyflgz(i,j) 
    117             uybar(i,j)=uyflgz(i,j)+uydef(i,j)                       ! on ajoute la deform. SIA 
    118             uby(i,j) = uyflgz(i,j) 
    119             do k=1,nz 
     158                        do k=1,nz 
    120159               uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j)           ! remplace le glissement par uyflgz 
    121160            end do 
    122  
    123             debug_3D(i,j,10)=uydef(i,j)               
    124          end if 
    125       end do 
    126    end do 
    127  
    128  
     161         endif 
     162       enddo 
     163   enddo 
     164        !$OMP END DO 
     165        !$OMP END PARALLEL  
     166endif 
    129167 
    130168else ! SIA et L1 en 2 zones separe : pas d'action (uxbar est deja remis a uxflgz dans diffusiv) 
Note: See TracChangeset for help on using the changeset viewer.