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
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! proc_list_2(1:nspmd) = 0
222
223
224
225
227
228
229
230
231
232
233
234
235
236 DEALLOCATE( main_and_secondary )
237
238 RETURN
subroutine ifrontplus(n, p)