Ignore:
Timestamp:
01/09/14 09:56:11 (10 years ago)
Author:
ymipsl
Message:

Add new openMP parallelism based on distribution of domains on threads. There is no more limitation of number of threads by MPI process.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/check_conserve.f90

    r172 r186  
    1010  PUBLIC init_check_conserve, check_conserve  
    1111    REAL(rstd),SAVE:: mtot0,ztot0,etot0,ang0,stot0,rmsv0 
     12!$OMP THREADPRIVATE(mtot0,ztot0,etot0,ang0,stot0,rmsv0) 
    1213    REAL(rstd),SAVE:: etot,ang,stot,rmsv 
     14!$OMP THREADPRIVATE(etot,ang,stot,rmsv) 
    1315    REAL(rstd),SAVE:: ztot 
    14          
     16!$OMP THREADPRIVATE(ztot)        
    1517      
    1618CONTAINS  
     
    5355 
    5456    DO ind=1,ndomain  
     57      IF (.NOT. assigned_domain(ind)) CYCLE 
    5558      CALL swap_dimensions(ind) 
    5659      CALL swap_geometry(ind) 
     
    6770 
    6871    IF (is_mpi_root) THEN  
    69         
     72!$OMP MASTER        
    7073       IF ( it == 0  ) Then  
    7174          ztot0 = ztot 
     
    8790       WRITE(*,4000)mtot,rmsdpdt,etot,ztot,stot,rmsv,ang 
    8891        
    89 4000   FORMAT(10x,'masse',4x,'rmsdpdt',7x,'energie',2x,'enstrophie'  & 
    90             ,2x,'entropie',3x,'rmsv',4x,'mt.ang',/,'GLOB  '                & 
     924000   FORMAT(10x,'masse',5x,'rmsdpdt',5x,'energie',5x,'enstrophie'  & 
     93            ,5x,'entropie',5x,'rmsv',5x,'mt.ang',/,'GLOB  '                & 
    9194            ,e10.3,e13.6,5e10.3/)      
    92        close(134)  
     95       close(134) 
     96!$OMP END MASTER  
    9397    END IF 
    9498  END SUBROUTINE check_conserve 
     
    99103  USE mpi_mod 
    100104  USE mpipara 
     105  USE transfert_omp_mod 
    101106  USE icosa 
    102107  IMPLICIT NONE 
     
    108113    INTEGER :: ind,i,j,ij   
    109114    REAL :: mloc, rmsloc 
     115    REAL :: mloc_mpi, rmsloc_mpi 
    110116 
    111117    mloc=0.0; rmsloc=0.0 
    112118    DO ind=1,ndomain 
     119      IF (.NOT. assigned_domain(ind)) CYCLE 
    113120      CALL swap_dimensions(ind) 
    114121      CALL swap_geometry(ind) 
     
    127134 
    128135    IF (using_mpi) THEN 
    129       CALL MPI_REDUCE(mloc, mtot, 1, MPI_REAL8, MPI_SUM, 0, comm_icosa, ierr) 
    130       CALL MPI_REDUCE(rmsloc, rmsdpdt, 1, MPI_REAL8, MPI_SUM, 0, comm_icosa, ierr) 
     136        CALL reduce_sum_omp(mloc, mloc_mpi) 
     137        CALL reduce_sum_omp(rmsloc, rmsloc_mpi) 
     138!$OMP MASTER     
     139      CALL MPI_REDUCE(mloc_mpi, mtot, 1, MPI_REAL8, MPI_SUM, 0, comm_icosa, ierr) 
     140      CALL MPI_REDUCE(rmsloc_mpi, rmsdpdt, 1, MPI_REAL8, MPI_SUM, 0, comm_icosa, ierr) 
     141!$OMP END MASTER 
     142    ELSE 
     143       
    131144    ENDIF 
    132145     
     
    153166 
    154167    DO ind=1,ndomain  
     168      IF (.NOT. assigned_domain(ind)) CYCLE 
    155169      CALL swap_dimensions(ind) 
    156170      CALL swap_geometry(ind) 
     
    260274 
    261275     DO ind=1,ndomain  
     276       IF (.NOT. assigned_domain(ind)) CYCLE 
    262277       CALL swap_dimensions(ind) 
    263278       CALL swap_geometry(ind) 
Note: See TracChangeset for help on using the changeset viewer.