GCC Code Coverage Report


Directory: ./
File: phy_common/mod_phys_lmdz_para.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 10 45 22.2%
Branches: 4 52 7.7%

Line Branch Exec Source
1 !
2 ! $Id: mod_phys_lmdz_para.F90 3465 2019-03-14 09:34:31Z fairhead $
3 !
4 MODULE 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
15 !$OMP THREADPRIVATE(klon_loc,is_master)
16
17 CONTAINS
18
19 1 SUBROUTINE Init_phys_lmdz_para(nbp,nbp_lon,nbp_lat,communicator)
20 IMPLICIT NONE
21 INTEGER,INTENT(in) :: nbp
22 INTEGER,INTENT(in) :: nbp_lon
23 INTEGER,INTENT(in) :: nbp_lat
24 INTEGER,INTENT(in) :: communicator
25
26 1 CALL Init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,communicator)
27 !$OMP PARALLEL
28 1 CALL Init_phys_lmdz_omp_data(klon_mpi)
29 1 klon_loc=klon_omp
30
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 IF (is_mpi_root .AND. is_omp_root) THEN
31 1 is_master=.TRUE.
32 ELSE
33 is_master=.FALSE.
34 ENDIF
35 !ym CALL Test_transfert
36 !$OMP END PARALLEL
37
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 IF (is_using_mpi .OR. is_using_omp) THEN
38 is_sequential=.FALSE.
39 is_parallel=.TRUE.
40 ELSE
41 1 is_sequential=.TRUE.
42 1 is_parallel=.FALSE.
43 ENDIF
44
45
46
47 1 END SUBROUTINE Init_phys_lmdz_para
48
49 SUBROUTINE Test_transfert
50 USE mod_grid_phy_lmdz
51 USE print_control_mod, ONLY: lunout
52 IMPLICIT NONE
53 ! INCLUDE "iniprint.h"
54
55 REAL :: Test_Field1d_glo(klon_glo,nbp_lev)
56 REAL :: tmp1d_glo(klon_glo,nbp_lev)
57 REAL :: Test_Field2d_glo(nbp_lon,nbp_lat,nbp_lev)
58 REAL :: tmp2d_glo(nbp_lon,nbp_lat,nbp_lev)
59 REAL :: Test_Field1d_loc(klon_loc,nbp_lev)
60 REAL :: Test_Field2d_loc(nbp_lon,jj_nb,nbp_lev)
61 REAL :: CheckSum
62
63 INTEGER :: i,l
64
65 Test_Field1d_glo = 0.
66 Test_Field2d_glo = 0.
67 Test_Field1d_loc = 0.
68 Test_Field2d_loc = 0.
69
70 IF (is_mpi_root) THEN
71 !$OMP MASTER
72 DO l=1,nbp_lev
73 DO i=1,klon_glo
74 ! Test_Field1d_glo(i,l)=MOD(i,10)+10*(l-1)
75 Test_Field1d_glo(i,l)=1
76 ENDDO
77 ENDDO
78 !$OMP END MASTER
79 ENDIF
80
81 CALL Scatter(Test_Field1d_glo,Test_Field1d_loc)
82 CALL Gather(Test_Field1d_loc,tmp1d_glo)
83
84 IF (is_mpi_root) THEN
85 !$OMP MASTER
86 Checksum=sum(Test_Field1d_glo-tmp1d_glo)
87 WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
88 !$OMP END MASTER
89 ENDIF
90
91 CALL grid1dTo2d_glo(Test_Field1d_glo,Test_Field2d_glo)
92 CALL scatter2D(Test_Field2d_glo,Test_Field1d_loc)
93 CALL gather2d(Test_Field1d_loc,Test_Field2d_glo)
94 CALL grid2dTo1d_glo(Test_Field2d_glo,tmp1d_glo)
95
96 IF (is_mpi_root) THEN
97 !$OMP MASTER
98 Checksum=sum(Test_Field1d_glo-tmp1d_glo)
99 WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
100 !$OMP END MASTER
101 ENDIF
102
103 CALL bcast(Test_Field1d_glo)
104 CALL reduce_sum(Test_Field1d_glo,tmp1d_glo)
105
106 IF (is_mpi_root) THEN
107 !$OMP MASTER
108 Checksum=sum(Test_Field1d_glo*omp_size*mpi_size-tmp1d_glo)
109 WRITE(lunout,*) "------> Checksum =",Checksum," MUST BE 0"
110 !$OMP END MASTER
111 ENDIF
112
113
114 END SUBROUTINE Test_transfert
115
116 END MODULE mod_phys_lmdz_para
117
118