annotate gcc/testsuite/gfortran.dg/class_37.f03 @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do compile }
kono
parents:
diff changeset
2 ! { dg-require-visibility "" }
kono
parents:
diff changeset
3 ! Test fix for PR47082, in which an ICE in the ALLOCATE at line 248.
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Contributed by Salvatore Filippone <salvatore.filippone@uniroma2.it>
kono
parents:
diff changeset
6 !
kono
parents:
diff changeset
7 module psb_penv_mod
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 interface psb_init
kono
parents:
diff changeset
10 module procedure psb_init
kono
parents:
diff changeset
11 end interface
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 interface psb_exit
kono
parents:
diff changeset
14 module procedure psb_exit
kono
parents:
diff changeset
15 end interface
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 interface psb_info
kono
parents:
diff changeset
18 module procedure psb_info
kono
parents:
diff changeset
19 end interface
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 integer, private, save :: nctxt=0
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 contains
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 subroutine psb_init(ictxt,np,basectxt,ids)
kono
parents:
diff changeset
29 implicit none
kono
parents:
diff changeset
30 integer, intent(out) :: ictxt
kono
parents:
diff changeset
31 integer, intent(in), optional :: np, basectxt, ids(:)
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 ictxt = nctxt
kono
parents:
diff changeset
35 nctxt = nctxt + 1
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 end subroutine psb_init
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 subroutine psb_exit(ictxt,close)
kono
parents:
diff changeset
40 implicit none
kono
parents:
diff changeset
41 integer, intent(inout) :: ictxt
kono
parents:
diff changeset
42 logical, intent(in), optional :: close
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 nctxt = max(0, nctxt - 1)
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 end subroutine psb_exit
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 subroutine psb_info(ictxt,iam,np)
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 implicit none
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 integer, intent(in) :: ictxt
kono
parents:
diff changeset
54 integer, intent(out) :: iam, np
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 iam = 0
kono
parents:
diff changeset
57 np = 1
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 end subroutine psb_info
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 end module psb_penv_mod
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64
kono
parents:
diff changeset
65 module psb_indx_map_mod
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 type :: psb_indx_map
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 integer :: state = -1
kono
parents:
diff changeset
70 integer :: ictxt = -1
kono
parents:
diff changeset
71 integer :: mpic = -1
kono
parents:
diff changeset
72 integer :: global_rows = -1
kono
parents:
diff changeset
73 integer :: global_cols = -1
kono
parents:
diff changeset
74 integer :: local_rows = -1
kono
parents:
diff changeset
75 integer :: local_cols = -1
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 end type psb_indx_map
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 end module psb_indx_map_mod
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 module psb_gen_block_map_mod
kono
parents:
diff changeset
85 use psb_indx_map_mod
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 type, extends(psb_indx_map) :: psb_gen_block_map
kono
parents:
diff changeset
88 integer :: min_glob_row = -1
kono
parents:
diff changeset
89 integer :: max_glob_row = -1
kono
parents:
diff changeset
90 integer, allocatable :: loc_to_glob(:), srt_l2g(:,:), vnl(:)
kono
parents:
diff changeset
91 contains
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 procedure, pass(idxmap) :: gen_block_map_init => block_init
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 end type psb_gen_block_map
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 private :: block_init
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 contains
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 subroutine block_init(idxmap,ictxt,nl,info)
kono
parents:
diff changeset
102 use psb_penv_mod
kono
parents:
diff changeset
103 implicit none
kono
parents:
diff changeset
104 class(psb_gen_block_map), intent(inout) :: idxmap
kono
parents:
diff changeset
105 integer, intent(in) :: ictxt, nl
kono
parents:
diff changeset
106 integer, intent(out) :: info
kono
parents:
diff changeset
107 ! To be implemented
kono
parents:
diff changeset
108 integer :: iam, np, i, j, ntot
kono
parents:
diff changeset
109 integer, allocatable :: vnl(:)
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 info = 0
kono
parents:
diff changeset
112 call psb_info(ictxt,iam,np)
kono
parents:
diff changeset
113 if (np < 0) then
kono
parents:
diff changeset
114 info = -1
kono
parents:
diff changeset
115 return
kono
parents:
diff changeset
116 end if
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 allocate(vnl(0:np),stat=info)
kono
parents:
diff changeset
119 if (info /= 0) then
kono
parents:
diff changeset
120 info = -2
kono
parents:
diff changeset
121 return
kono
parents:
diff changeset
122 end if
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124 vnl(:) = 0
kono
parents:
diff changeset
125 vnl(iam) = nl
kono
parents:
diff changeset
126 ntot = sum(vnl)
kono
parents:
diff changeset
127 vnl(1:np) = vnl(0:np-1)
kono
parents:
diff changeset
128 vnl(0) = 0
kono
parents:
diff changeset
129 do i=1,np
kono
parents:
diff changeset
130 vnl(i) = vnl(i) + vnl(i-1)
kono
parents:
diff changeset
131 end do
kono
parents:
diff changeset
132 if (ntot /= vnl(np)) then
kono
parents:
diff changeset
133 ! !$ write(0,*) ' Mismatch in block_init ',ntot,vnl(np)
kono
parents:
diff changeset
134 end if
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 idxmap%global_rows = ntot
kono
parents:
diff changeset
137 idxmap%global_cols = ntot
kono
parents:
diff changeset
138 idxmap%local_rows = nl
kono
parents:
diff changeset
139 idxmap%local_cols = nl
kono
parents:
diff changeset
140 idxmap%ictxt = ictxt
kono
parents:
diff changeset
141 idxmap%state = 1
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 idxmap%min_glob_row = vnl(iam)+1
kono
parents:
diff changeset
144 idxmap%max_glob_row = vnl(iam+1)
kono
parents:
diff changeset
145 call move_alloc(vnl,idxmap%vnl)
kono
parents:
diff changeset
146 allocate(idxmap%loc_to_glob(nl),stat=info)
kono
parents:
diff changeset
147 if (info /= 0) then
kono
parents:
diff changeset
148 info = -2
kono
parents:
diff changeset
149 return
kono
parents:
diff changeset
150 end if
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 end subroutine block_init
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 end module psb_gen_block_map_mod
kono
parents:
diff changeset
155
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 module psb_descriptor_type
kono
parents:
diff changeset
158 use psb_indx_map_mod
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 implicit none
kono
parents:
diff changeset
161
kono
parents:
diff changeset
162
kono
parents:
diff changeset
163 type psb_desc_type
kono
parents:
diff changeset
164 integer, allocatable :: matrix_data(:)
kono
parents:
diff changeset
165 integer, allocatable :: halo_index(:)
kono
parents:
diff changeset
166 integer, allocatable :: ext_index(:)
kono
parents:
diff changeset
167 integer, allocatable :: ovrlap_index(:)
kono
parents:
diff changeset
168 integer, allocatable :: ovrlap_elem(:,:)
kono
parents:
diff changeset
169 integer, allocatable :: ovr_mst_idx(:)
kono
parents:
diff changeset
170 integer, allocatable :: bnd_elem(:)
kono
parents:
diff changeset
171 class(psb_indx_map), allocatable :: indxmap
kono
parents:
diff changeset
172 integer, allocatable :: lprm(:)
kono
parents:
diff changeset
173 type(psb_desc_type), pointer :: base_desc => null()
kono
parents:
diff changeset
174 integer, allocatable :: idx_space(:)
kono
parents:
diff changeset
175 end type psb_desc_type
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178 end module psb_descriptor_type
kono
parents:
diff changeset
179
kono
parents:
diff changeset
180 module psb_cd_if_tools_mod
kono
parents:
diff changeset
181
kono
parents:
diff changeset
182 use psb_descriptor_type
kono
parents:
diff changeset
183 use psb_gen_block_map_mod
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 interface psb_cdcpy
kono
parents:
diff changeset
186 subroutine psb_cdcpy(desc_in, desc_out, info)
kono
parents:
diff changeset
187 use psb_descriptor_type
kono
parents:
diff changeset
188
kono
parents:
diff changeset
189 implicit none
kono
parents:
diff changeset
190 !....parameters...
kono
parents:
diff changeset
191
kono
parents:
diff changeset
192 type(psb_desc_type), intent(in) :: desc_in
kono
parents:
diff changeset
193 type(psb_desc_type), intent(out) :: desc_out
kono
parents:
diff changeset
194 integer, intent(out) :: info
kono
parents:
diff changeset
195 end subroutine psb_cdcpy
kono
parents:
diff changeset
196 end interface
kono
parents:
diff changeset
197
kono
parents:
diff changeset
198
kono
parents:
diff changeset
199 end module psb_cd_if_tools_mod
kono
parents:
diff changeset
200
kono
parents:
diff changeset
201 module psb_cd_tools_mod
kono
parents:
diff changeset
202
kono
parents:
diff changeset
203 use psb_cd_if_tools_mod
kono
parents:
diff changeset
204
kono
parents:
diff changeset
205 interface psb_cdall
kono
parents:
diff changeset
206
kono
parents:
diff changeset
207 subroutine psb_cdall(ictxt, desc, info,mg,ng,vg,vl,flag,nl,repl, globalcheck)
kono
parents:
diff changeset
208 use psb_descriptor_type
kono
parents:
diff changeset
209 implicit None
kono
parents:
diff changeset
210 Integer, intent(in) :: mg,ng,ictxt, vg(:), vl(:),nl
kono
parents:
diff changeset
211 integer, intent(in) :: flag
kono
parents:
diff changeset
212 logical, intent(in) :: repl, globalcheck
kono
parents:
diff changeset
213 integer, intent(out) :: info
kono
parents:
diff changeset
214 type(psb_desc_type), intent(out) :: desc
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 optional :: mg,ng,vg,vl,flag,nl,repl, globalcheck
kono
parents:
diff changeset
217 end subroutine psb_cdall
kono
parents:
diff changeset
218
kono
parents:
diff changeset
219 end interface
kono
parents:
diff changeset
220
kono
parents:
diff changeset
221 end module psb_cd_tools_mod
kono
parents:
diff changeset
222 module psb_base_tools_mod
kono
parents:
diff changeset
223 use psb_cd_tools_mod
kono
parents:
diff changeset
224 end module psb_base_tools_mod
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 subroutine psb_cdall(ictxt, desc, info,mg,ng,vg,vl,flag,nl,repl, globalcheck)
kono
parents:
diff changeset
227 use psb_descriptor_type
kono
parents:
diff changeset
228 use psb_gen_block_map_mod
kono
parents:
diff changeset
229 use psb_base_tools_mod, psb_protect_name => psb_cdall
kono
parents:
diff changeset
230 implicit None
kono
parents:
diff changeset
231 Integer, intent(in) :: mg,ng,ictxt, vg(:), vl(:),nl
kono
parents:
diff changeset
232 integer, intent(in) :: flag
kono
parents:
diff changeset
233 logical, intent(in) :: repl, globalcheck
kono
parents:
diff changeset
234 integer, intent(out) :: info
kono
parents:
diff changeset
235 type(psb_desc_type), intent(out) :: desc
kono
parents:
diff changeset
236
kono
parents:
diff changeset
237 optional :: mg,ng,vg,vl,flag,nl,repl, globalcheck
kono
parents:
diff changeset
238 integer :: err_act, n_, flag_, i, me, np, nlp, nnv, lr
kono
parents:
diff changeset
239 integer, allocatable :: itmpsz(:)
kono
parents:
diff changeset
240
kono
parents:
diff changeset
241
kono
parents:
diff changeset
242
kono
parents:
diff changeset
243 info = 0
kono
parents:
diff changeset
244 desc%base_desc => null()
kono
parents:
diff changeset
245 if (allocated(desc%indxmap)) then
kono
parents:
diff changeset
246 write(0,*) 'Allocated on an intent(OUT) var?'
kono
parents:
diff changeset
247 end if
kono
parents:
diff changeset
248
kono
parents:
diff changeset
249 allocate(psb_gen_block_map :: desc%indxmap, stat=info)
kono
parents:
diff changeset
250 if (info == 0) then
kono
parents:
diff changeset
251 select type(aa => desc%indxmap)
kono
parents:
diff changeset
252 type is (psb_gen_block_map)
kono
parents:
diff changeset
253 call aa%gen_block_map_init(ictxt,nl,info)
kono
parents:
diff changeset
254 class default
kono
parents:
diff changeset
255 ! This cannot happen
kono
parents:
diff changeset
256 info = -1
kono
parents:
diff changeset
257 end select
kono
parents:
diff changeset
258 end if
kono
parents:
diff changeset
259
kono
parents:
diff changeset
260 return
kono
parents:
diff changeset
261
kono
parents:
diff changeset
262 end subroutine psb_cdall