source: dynamico_lmdz/aquaplanet/LMDZ5/libf/phylmd/mod_phys_lmdz_para.F90 @ 3817

Last change on this file since 3817 was 3817, checked in by millour, 10 years ago

Further cleanup and removal of references to iniprint.h.
Also added bench testcase 48x36x19.
EM

File size: 2.9 KB
Line 
1!
2!$Header$
3!
4MODULE mod_phys_lmdz_para
5  USE mod_phys_lmdz_transfert_para
6  USE mod_phys_lmdz_mpi_data
7  USE mod_phys_lmdz_omp_data
8   
9  INTEGER,SAVE :: klon_loc
10  LOGICAL,SAVE :: is_sequential
11  LOGICAL,SAVE :: is_parallel
12  LOGICAL,SAVE :: is_master
13 
14!$OMP THREADPRIVATE(klon_loc,is_master)
15 
16CONTAINS
17
18  SUBROUTINE Init_phys_lmdz_para(iim,jjp1,nb_proc,distrib,communicator)
19  IMPLICIT NONE
20    INTEGER,INTENT(in) :: iim
21    INTEGER,INTENT(in) :: jjp1
22    INTEGER,INTENT(in) :: nb_proc
23    INTEGER,INTENT(in) :: distrib(0:nb_proc-1)
24    INTEGER,INTENT(in) :: communicator
25
26    CALL Init_phys_lmdz_mpi_data(iim,jjp1,nb_proc,distrib,communicator)
27!$OMP PARALLEL
28    CALL Init_phys_lmdz_omp_data(klon_mpi)
29    klon_loc=klon_omp
30    IF (is_mpi_root .AND. is_omp_root) THEN
31       is_master=.TRUE.
32     ELSE
33       is_master=.FALSE.
34     ENDIF
35     CALL Test_transfert
36!$OMP END PARALLEL   
37     IF (is_using_mpi .OR. is_using_omp) THEN
38       is_sequential=.FALSE.
39       is_parallel=.TRUE.
40     ELSE
41       is_sequential=.TRUE.
42       is_parallel=.FALSE.
43     ENDIF
44     
45  END SUBROUTINE Init_phys_lmdz_para
46
47  SUBROUTINE Test_transfert
48  USE mod_grid_phy_lmdz
49  USE inifis_mod, ONLY: lunout
50  IMPLICIT NONE
51 
52    REAL :: Test_Field1d_glo(klon_glo,nbp_lev)
53    REAL :: tmp1d_glo(klon_glo,nbp_lev)
54    REAL :: Test_Field2d_glo(nbp_lon,nbp_lat,nbp_lev)
55    REAL :: tmp2d_glo(nbp_lon,nbp_lat,nbp_lev)
56    REAL :: Test_Field1d_loc(klon_loc,nbp_lev)
57    REAL :: Test_Field2d_loc(nbp_lon,jj_nb,nbp_lev)
58    REAL :: CheckSum
59   
60    INTEGER :: i,l
61 
62    Test_Field1d_glo = 0.
63    Test_Field2d_glo = 0.
64    Test_Field1d_loc = 0.
65    Test_Field2d_loc = 0.
66 
67    IF (is_mpi_root) THEN
68!$OMP MASTER
69      DO l=1,nbp_lev
70        DO i=1,klon_glo
71!          Test_Field1d_glo(i,l)=MOD(i,10)+10*(l-1)
72           Test_Field1d_glo(i,l)=1
73        ENDDO
74      ENDDO
75!$OMP END MASTER 
76    ENDIF
77 
78    CALL Scatter(Test_Field1d_glo,Test_Field1d_loc)
79    CALL Gather(Test_Field1d_loc,tmp1d_glo)
80 
81    IF (is_mpi_root) THEN
82!$OMP MASTER 
83      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
84      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
85!$OMP END MASTER
86    ENDIF
87   
88    CALL grid1dTo2d_glo(Test_Field1d_glo,Test_Field2d_glo)
89    CALL scatter2D(Test_Field2d_glo,Test_Field1d_loc)
90    CALL gather2d(Test_Field1d_loc,Test_Field2d_glo)
91    CALL grid2dTo1d_glo(Test_Field2d_glo,tmp1d_glo)
92
93    IF (is_mpi_root) THEN
94!$OMP MASTER 
95      Checksum=sum(Test_Field1d_glo-tmp1d_glo)
96      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
97!$OMP END MASTER
98    ENDIF
99
100    CALL bcast(Test_Field1d_glo)
101    CALL reduce_sum(Test_Field1d_glo,tmp1d_glo)
102
103    IF (is_mpi_root) THEN
104!$OMP MASTER 
105      Checksum=sum(Test_Field1d_glo*omp_size*mpi_size-tmp1d_glo)
106      WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
107!$OMP END MASTER
108    ENDIF
109   
110     
111   END SUBROUTINE Test_transfert
112 
113END MODULE mod_phys_lmdz_para
114   
Note: See TracBrowser for help on using the repository browser.