GCC Code Coverage Report


Directory: ./
File: phy_common/mod_phys_lmdz_omp_data.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 35 37 94.6%
Branches: 10 18 55.6%

Line Branch Exec Source
1 !
2 !$Id: mod_phys_lmdz_omp_data.F90 3435 2019-01-22 15:21:59Z fairhead $
3 !
4 MODULE mod_phys_lmdz_omp_data
5
6 INTEGER,SAVE :: omp_size
7 INTEGER,SAVE :: omp_rank
8 LOGICAL,SAVE :: is_omp_root
9 LOGICAL,SAVE :: is_omp_master ! alias of is_omp_root
10 LOGICAL,SAVE :: is_using_omp
11 LOGICAL,SAVE :: is_north_pole_phy, is_south_pole_phy
12
13 INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_nb
14 INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_begin
15 INTEGER,SAVE,DIMENSION(:),ALLOCATABLE :: klon_omp_para_end
16
17 INTEGER,SAVE :: klon_omp
18 INTEGER,SAVE :: klon_omp_begin
19 INTEGER,SAVE :: klon_omp_end
20 !$OMP THREADPRIVATE(omp_rank,klon_omp,is_omp_root,is_omp_master,klon_omp_begin,klon_omp_end)
21 !$OMP THREADPRIVATE(is_north_pole_phy, is_south_pole_phy)
22
23 CONTAINS
24
25 1 SUBROUTINE Init_phys_lmdz_omp_data(klon_mpi)
26 USE dimphy
27 USE mod_phys_lmdz_mpi_data, ONLY : is_north_pole_dyn, is_south_pole_dyn
28 IMPLICIT NONE
29 INTEGER, INTENT(in) :: klon_mpi
30
31 INTEGER :: i
32
33 CHARACTER (LEN=20) :: modname='Init_phys_lmdz_omp_data'
34 CHARACTER (LEN=80) :: abort_message
35
36
37
38 1 is_using_omp=.FALSE.
39 1 omp_size=1
40 1 omp_rank=0
41
42 is_omp_root=.FALSE.
43 !$OMP MASTER
44 IF (omp_rank==0) THEN
45 1 is_omp_root=.TRUE.
46 ELSE
47 abort_message = 'ANORMAL : OMP_MASTER /= 0'
48 CALL abort_physic (modname,abort_message,1)
49 ENDIF
50 !$OMP END MASTER
51 1 is_omp_master=is_omp_root
52
53 !$OMP MASTER
54
55
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
1 ALLOCATE(klon_omp_para_nb(0:omp_size-1))
56
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
1 ALLOCATE(klon_omp_para_begin(0:omp_size-1))
57
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
1 ALLOCATE(klon_omp_para_end(0:omp_size-1))
58
59
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 DO i=0,omp_size-1
60 1 klon_omp_para_nb(i)=klon_mpi/omp_size
61 1 IF (i<MOD(klon_mpi,omp_size)) klon_omp_para_nb(i)=klon_omp_para_nb(i)+1
62 ENDDO
63
64 1 klon_omp_para_begin(0) = 1
65 1 klon_omp_para_end(0) = klon_omp_para_nb(0)
66
67 DO i=1,omp_size-1
68 klon_omp_para_begin(i)=klon_omp_para_end(i-1)+1
69 klon_omp_para_end(i)=klon_omp_para_begin(i)+klon_omp_para_nb(i)-1
70 ENDDO
71 !$OMP END MASTER
72 !$OMP BARRIER
73
74
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if ((is_north_pole_dyn) .AND. (omp_rank == 0 )) then
75 1 is_north_pole_phy = .TRUE.
76 else
77 is_north_pole_phy = .FALSE.
78 endif
79
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if ((is_south_pole_dyn) .AND. (omp_rank == omp_size-1)) then
80 1 is_south_pole_phy = .TRUE.
81 else
82 is_south_pole_phy = .FALSE.
83 endif
84
85 1 klon_omp=klon_omp_para_nb(omp_rank)
86 1 klon_omp_begin=klon_omp_para_begin(omp_rank)
87 1 klon_omp_end=klon_omp_para_end(omp_rank)
88
89 1 CALL Print_module_data
90
91 1 END SUBROUTINE Init_phys_lmdz_omp_data
92
93 1 SUBROUTINE Print_module_data
94 USE print_control_mod, ONLY: lunout
95 IMPLICIT NONE
96 ! INCLUDE "iniprint.h"
97
98 !$OMP CRITICAL
99 1 WRITE(lunout,*)'--------> TASK ',omp_rank
100 1 WRITE(lunout,*)'omp_size =',omp_size
101 1 WRITE(lunout,*)'omp_rank =',omp_rank
102 1 WRITE(lunout,*)'is_omp_root =',is_omp_root
103 1 WRITE(lunout,*)'klon_omp_para_nb =',klon_omp_para_nb
104 1 WRITE(lunout,*)'klon_omp_para_begin =',klon_omp_para_begin
105 1 WRITE(lunout,*)'klon_omp_para_end =',klon_omp_para_end
106 1 WRITE(lunout,*)'klon_omp =',klon_omp
107 1 WRITE(lunout,*)'klon_omp_begin =',klon_omp_begin
108 1 WRITE(lunout,*)'klon_omp_end =',klon_omp_end
109 !$OMP END CRITICAL
110
111 1 END SUBROUTINE Print_module_data
112 END MODULE mod_phys_lmdz_omp_data
113