180
181
182
183
184
185
186 ! dummy arguments description:
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201 USE my_alloc_mod
204
205
206
207#include "implicit_f.inc"
208
209
210
211 TYPE(USER_WINDOWS_),INTENT(IN) :: USER_WINDOWS
212 INTEGER,DIMENSION(1:NUMNOD),INTENT(IN) :: NODLOCAL
213 INTEGER ,INTENT(IN) :: P,NSPMD,NUMNOD,NUMNOD_L
214
215
216
217 INTEGER,DIMENSION(:),ALLOCATABLE::FR_USERWI_L
218 INTEGER,DIMENSION(:),ALLOCATABLE::IAD_USERW,,USERNODS_L
219 INTEGER,DIMENSION(:),ALLOCATABLE::PLIST
220 INTEGER I,II,J
221 INTEGER SFR_USERWI_L,SPLIST,NP,K
222 my_real,
DIMENSION(:),
ALLOCATABLE :: dum_sav
223
224
225
226 INTEGER NLOCAL
228
229 CALL write_i_c(user_windows%HAS_USER_WINDOW,1)
230 IF(user_windows%HAS_USER_WINDOW /= 0 ) THEN
231
232 IF (p == 1)THEN
233
234
235
236 CALL my_alloc(iad_userw,nspmd+1)
237 CALL my_alloc(plist,nspmd)
238 iad_userw(1:nspmd+1)=0
239
240 DO ii=1,user_windows%N_USERNODS
241 i = user_windows%USERNODS(ii)
243 DO j=1,splist
244 np = plist(j)
245 IF(np /= 1)THEN
246 iad_userw(np+1)=iad_userw(np+1)+1
247 ENDIF
248 ENDDO
249 ENDDO
250
251 iad_userw(1)=1
252 DO np=2,nspmd+1
253 iad_userw(np)=iad_userw(np) + iad_userw(np-1)
254 ENDDO
255 sfr_userwi_l = iad_userw(nspmd+1)-1
256 CALL my_alloc(fr_userwi_l,sfr_userwi_l)
257 CALL my_alloc(iad_userw2,nspmd+1)
258 iad_userw2(1:nspmd+1) = iad_userw(1:nspmd+1)
259
260 DO ii=1,user_windows%N_USERNODS
261 i = user_windows%USERNODS(ii)
263 DO j=1,splist
264 np = plist(j)
265 k = iad_userw2(np)
266 fr_userwi_l(k) = nodlocal(k)
267 iad_userw2(np) = iad_userw2(np) + 1
268 ENDDO
269 ENDDO
270
271
272
273 CALL my_alloc(usernods_l,user_windows%N_USERNODS)
274 DO i=1,user_windows%N_USERNODS
275 usernods_l(i) = nodlocal(user_windows%USERNODS(i))
276 ENDDO
277
278
279
280
285 CALL write_i_c(user_windows%N_USERNODS,1)
286 CALL write_i_c(user_windows%IUSER,user_windows%S_IUSER)
287 CALL write_db(user_windows%USREINT,1)
288 CALL write_db(user_windows%USER,user_windows%S_USER)
289 CALL write_i_c(usernods_l,user_windows%N_USERNODS)
290
294
295 IF(ALLOCATED(usernods_l)) DEALLOCATE(usernods_l)
296 IF(ALLOCATED(iad_userw)) DEALLOCATE(iad_userw)
297 IF(ALLOCATED(fr_userwi_l)) DEALLOCATE(fr_userwi_l)
298
299
300 ALLOCATE(dum_sav(3*numnod_l))
301 dum_sav(1:3*numnod_l)=zero
304 DEALLOCATE(dum_sav)
305
306 ELSE
307 CALL my_alloc(fr_userwi_l,user_windows%N_USERNODS)
308 fr_userwi_l(1:user_windows%N_USERNODS)=0
309 sfr_userwi_l = 0
310 DO ii=1,user_windows%N_USERNODS
311
312 i = user_windows%USERNODS(ii)
314 sfr_userwi_l = sfr_userwi_l +1
315 fr_userwi_l(sfr_userwi_l) = nodlocal(i)
316 ENDIF
317
318 ENDDO
319
320
321
322
325 IF(ALLOCATED(fr_userwi_l)) DEALLOCATE(fr_userwi_l)
326
327 ENDIF
328 ENDIF
329
330
subroutine write_db(a, n)
void write_i_c(int *w, int *len)