35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "com01_c.inc"
59#include "com04_c.inc"
60
61
62
63 INTEGER :: I,II,NS,LJ,K
64 INTEGER :: J,N,NN,IJK
65 INTEGER :: WEIGHT,M1
66 INTEGER :: P,PROC_NUMBER,NB_NODE
67 INTEGER, DIMENSION(NSPMD) :: PROC_LIST
68 INTEGER, EXTERNAL :: NLOCAL
69 LOGICAL, DIMENSION(:), ALLOCATABLE :: CHECK_MAIN
70 TYPE(joint_main_node), DIMENSION(:), ALLOCATABLE :: MAIN_AND_SECONDARY
71
72
73
74
75
76 k = 0
77 ALLOCATE( check_main(numnod) )
78 check_main(1:numnod) = .false.
79 DO i=1,njoint
80 DO j=1,2
82 check_main(n) = .true.
83 ENDDO
84 ENDDO
85 ALLOCATE( main_and_secondary(numnod) )
86
87 main_and_secondary(1:numnod)%ID_JOINT = 0
88 main_and_secondary(1:numnod)%NB_PROC = 0
89
90 DO i=1,njoint
91 proc_list(1:nspmd) = -1
92 proc_number = 0
95 cyl_join(i)%PROC(1:nspmd)%NB_NODE_WEIGHT = 0
97 DO lj=1,ns
98
99
100 proc_list(1:nspmd) = -1
101 proc_number = 0
104
105
106
107! IF( check_main(nn) ) THEN
108
109
110
111
112
113
114
115
116 DO ii=1,proc_number
117 p = proc_list(ii)
119 IF(.NOT.
ALLOCATED(
cyl_join(i)%PROC(p)%NODE))
ALLOCATE(
cyl_join(i)%PROC(p)%NODE(ns) )
121 weight = 0
122 IF(ii==1) weight = 1
123 IF(.NOT.
ALLOCATED(
cyl_join(i)%PROC(p)%WEIGHT))
ALLOCATE(
cyl_join(i)%PROC(p)%WEIGHT(ns) )
125 IF(weight==1)
cyl_join(i)%PROC(p)%NB_NODE_WEIGHT =
cyl_join(i)%PROC(p)%NB_NODE_WEIGHT + 1
126 ENDDO
127
128 ENDDO
129 k=k+ns+1
130 ENDDO
131
132
133
134
135
136 k = 0
137 DO i=1,njoint
138 proc_list(1:nspmd) = -1
139 proc_number = 0
141 nb_node = 0
142 proc_number = 0
144 proc_list(1:nspmd) = 0
145 DO p=1,nspmd
147 proc_number = proc_number + 1
148 proc_list(proc_number) = p
150
151 DO ijk = 1,2
158 ENDIF
159 ENDDO
161 ENDIF
162
163
164
165
166 ENDDO
167 cyl_join(i)%NUMBER_PROC = proc_number
168 ALLOCATE(
cyl_join(i)%LIST_PROC( proc_number ) )
169 cyl_join(i)%LIST_PROC(1:proc_number) = proc_list(1:proc_number)
170 k=k+ns+1
171 ENDDO
172
173
174
175 DO i=njoint,1,-1
176 proc_list(1:nspmd) = -1
177 proc_number = 0
179 nb_node = 0
180 proc_number = 0
182 proc_list(1:nspmd) = 0
183 DO p=1,nspmd
185 proc_number = proc_number + 1
186 proc_list(proc_number) = p
188
189 DO ijk = 1,2
196 ENDIF
197 ENDDO
199 ENDIF
200
201
202
203
204 ENDDO
205 k=k+ns+1
206 ENDDO
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236 DEALLOCATE( main_and_secondary )
237
238 RETURN
subroutine ifrontplus(n, p)