249
250
251
254
255
256
257#include "implicit_f.inc"
258
259
260
261#include "scr17_c.inc"
262#include "com04_c.inc"
263#include "r2r_c.inc"
264
265
266
267 INTEGER NGR,LEN_IA,LENIGR,PROC,
268 . FRONTB_R2R(SFRONTB_R2R,*),NUMNOD_L
269 INTEGER, DIMENSION(*), INTENT(IN) :: NODLOCAL
270
271 TYPE (GROUP_) , DIMENSION(NGR) :: IGR
272
273
274
275
276
277! and =0
if the element is not on
the current domain
278
279
280
281
282! INTEGER NLOCAL
283
284
285
286
287 INTEGER I,J,ID,IGU,NOD,NNOD,GRTYPE,TRI,GRPGRP,LEVEL,R2R_ALL,
288 . ,L_GROUP,ERR,ITITLE3(LTITR),NNOD_LOC(),
289 . IGU1,IGU2
291 CHARACTER(LEN=NCHARTITLE) :: TITR
292 INTEGER, ALLOCATABLE, DIMENSION (:) :: IGROUP_L
293
294 DO igu=1,ngr
295 titr = igr(igu)%TITLE
296 CALL fretitl(titr,ititle3,ltitr)
298 ENDDO
299 len_ia = len_ia + ngr
300
301 err = 0
302 ALLOCATE (igroup_l(lenigr), stat=err)
303 igroup_l(1:lenigr) = 0
304
305 DO igu=1,ngr
306 nnod = igr(igu)%NENTITY
307 nnod_loc(igu) = 0
308 DO j=1,nnod
309 nod = igr(igu)%ENTITY(j)
310 IF (nod > 0) THEN
311
312 IF ((nsubdom>0).AND.(iddom==0)) THEN
313 IF (frontb_r2r(nod,proc+1)==igu) THEN
314 cycle
315 ELSEIF (frontb_r2r(nod,proc+1) > ngrnod) THEN
316 code = frontb_r2r(nod,proc+1)/ngrnod
317 igu1 = nint(code)
318 igu2 = frontb_r2r(nod,proc+1) - igu1*ngrnod
319 IF ((igu==igu1).OR.(igu==igu2)) cycle
320 ENDIF
321 ENDIF
322
323 IF( nodlocal(nod)/=0.AND.nodlocal(nod)<=numnod_l ) nnod_loc(igu) = nnod_loc(igu) + 1
324 ENDIF
325 ENDDO
326 ENDDO
327
328 l_group = 0
329
330 DO igu=1,ngr
332 nnod = igr(igu)%NENTITY
333 grtype = igr(igu)%GRTYPE
334 tri = igr(igu)%SORTED
335 grpgrp = igr(igu)%GRPGRP
336 level = igr(igu)%LEVEL
337 titr = igr(igu)%TITLE
338 r2r_all = igr(igu)%R2R_ALL
339 r2r_share= igr(igu)%R2R_SHARE
340 igroup_l(l_group+1) =
id
341 l_group = l_group+1
342 igroup_l(l_group+1) = nnod_loc(igu)
343 l_group = l_group+1
344 igroup_l(l_group+1) = grtype
345 l_group = l_group+1
346 igroup_l(l_group+1) = tri
347 l_group = l_group+1
348 igroup_l(l_group+1) = grpgrp
349 l_group = l_group+1
350 igroup_l(l_group+1) = level
351 l_group = l_group+1
352
353
354 igroup_l(l_group+1) = r2r_all
355 l_group = l_group+1
356 igroup_l(l_group+1) = r2r_share
357 l_group = l_group+1
358
359
360
361 DO j=1,nnod
362 nod = igr(igu)%ENTITY(j)
363 IF (nod > 0) THEN
364
365 IF ((nsubdom>0).AND.(iddom==0)) THEN
366 IF (frontb_r2r(nod,proc+1)==igu) THEN
367 cycle
368 ELSEIF (frontb_r2r(nod,proc+1) > ngrnod) THEN
369 code = frontb_r2r(nod,proc+1)/ngrnod
370 igu1 = nint(code)
371 igu2 = frontb_r2r(nod,proc+1) - igu1*ngrnod
372 IF ((igu==igu1).OR.(igu==igu2)) cycle
373 ENDIF
374 ENDIF
375
376 IF( nodlocal(nod)/=0.AND.nodlocal(nod)<=numnod_l ) THEN
377 igroup_l(l_group+1) = nodlocal(nod)
378 l_group = l_group+1
379 ENDIF
380 ENDIF
381 ENDDO
382 ENDDO
383
385
386 DEALLOCATE (igroup_l)
387
388 len_ia = len_ia + l_group
389
390 RETURN
if(complex_arithmetic) id
end diagonal values have been computed in the(sparse) matrix id.SOL