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 |