70
71
72
77 use element_mod , only : nixc
78
79
80
81#include "implicit_f.inc"
82
83
84
85#include "chara_c.inc"
86#include "com01_c.inc"
87#include "com04_c.inc"
88#include "com06_c.inc"
89#include "com08_c.inc"
90#include "param_c.inc"
91#include "scr18_c.inc"
92#include "scr17_c.inc"
93#include "rad2r_c.inc"
94#include "scr05_c.inc"
95#include "scr03_c.inc"
96#include "task_c.inc"
97#include "sphcom.inc"
98
99
100
101 INTEGER IEXLNK(NR2R,NR2RLNK), ITAB(*),
102 . WEIGHT(*), DD_R2R(NSPMD+1,*), IAD_ELEM(2,*), FR_ELEM(*),
103 . IROOT(100), ADDCNEL(0:*),CNEL(0:*),IXC(NIXC,*),ICODR(*),
104 . IPARG(NPARG,*),ICODT(*),IBFV(*),NPBY(*),DD_R2R_ELEM(*),
105 . SDD_R2R_ELEM,WEIGHT_MD(*),ILENXV,NUMSPH_GLO_R2R,FLG_SPHINOUT_R2R,
106 . IPARI(NPARI,*)
107
108 my_real x(3,*), dx(3,*),ms(*),in(*),rby(*),stifn(*),stifr(*)
109 .
110 DOUBLE PRECISION XDP(3,*)
111
112 TYPE (GROUP_) , TARGET, DIMENSION(NGRNOD) :: IGRNOD
113 TYPE(NLOCAL_STR_), TARGET, INTENT(IN) :: NLOC_DMG
114
115
116
117 INTEGER I, J, IEX, IDP, IDG, NNG, ,NFTC,INFO,ITSK
118 INTEGER NUM_SOCK,SIZE_TAG_RBY,LENR,SIZE
119 INTEGER NN,N,PPID,IDEL_LOC,NSN_GLOB,COMPT
120 INTEGER, DIMENSION(:), ALLOCATABLE :: NDOF_NL
121 CHARACTER*35 ADDR
122
123 INTEGER, DIMENSION(:), POINTER :: GRNOD
124 INTEGER, POINTER, DIMENSION(:) :: IDXI,POSI
125 my_real,
POINTER,
DIMENSION(:) :: msnl
126
127
128
129 info=numels+numelq+numelc
130 nbk = 0
131 size_tag_rby = 0
132 IF((ninter>0).AND.(idtmin(10)/=3).AND.(idtmin(11)/=3).AND.(idtmin(11)/=8)) THEN
133 ilenxv = ilenxv + 2
134 ENDIF
135
136 IF ((r2r_siu==1).OR.(nspmd==1)) THEN
137
138 IF (r2r_siu==1) THEN
139 numsph_glo_r2r = numsph
141 IF ((nsphio>0).AND.(numsph_glo_r2r>0)) flg_sphinout_r2r = 1
142 IF (nspmd>1) THEN
144 flg_sphinout_r2r =
min(1,flg_sphinout_r2r)
145 ENDIF
146 ENDIF
147
148 IF (r2r_siu==1) THEN
149 DO i=1,ninter
150 nsn_glob = ipari(5,i)
152 IF ((nsn_glob==0).AND.(ipari(7,i)==2)) ipari(7,i) = 0
153 END DO
154 ENDIF
155
159 ALLOCATE(
nllnk(nr2rlnk))
162
163 DO i = 1, rootlen
164 iroot(i) = ichar(rootnam(i:i))
165 END DO
166
167 IF (ispmd==0) THEN
170 ENDIF
171
173
174 IF(ispmd==0) THEN
175 DO itsk=2,nthread
177 addr=trim(addr)
179 END DO
180 ELSE
181 DO itsk=1,nthread
182 num_sock = nthread*ispmd+itsk
184 END DO
185 ENDIF
186
188
190
198
199 IF (r2r_siu==1) THEN
200 IF (ispmd==0) THEN
201 DO j=1,10
204 ENDDO
205 ENDIF
206 IF (nspmd>1) THEN
209 ENDIF
210 ENDIF
211
213 ofc=numels+numelq
214
215 DO iex = 1, nr2rlnk
216 idg = iexlnk(1,iex)
217 idp = iexlnk(2,iex)
218 nng = igrnod(idg)%NENTITY
219 nftc = 0
220
221 grnod => igrnod(idg)%ENTITY
222
223 IF (idp>nbk) nbk = idp
224
233 size_tag_rby = size_tag_rby + nng
234 ENDIF
235
236
237 IF ((
typlnk(iex)==5).AND.(main_side==1))
THEN
238 DO nn=1,nng
239 n = igrnod(idg)%ENTITY(nn)
240 weight_md(n) = 0
241 END DO
242 ENDIF
243
247 ENDIF
248
249
250 IF (
nllnk(iex)==1)
THEN
251
252 idxi => nloc_dmg%IDXI(1:numnod)
253 posi => nloc_dmg%POSI(1:nloc_dmg%NNOD+1)
254 compt = 0
255 ALLOCATE(ndof_nl(nng))
256 DO i=1,nng
257 nn = idxi(grnod(i))
258 ndof_nl(i) = posi(nn+1)-posi(nn)
259 compt = compt + ndof_nl(i)
260 ENDDO
263 compt = 0
264 DO i=1,nng
265 nn = idxi(grnod(i))
266 DO j=posi(nn),posi(nn+1)-1
267 compt = compt + 1
269 ENDDO
270 ENDDO
272 DEALLOCATE(ndof_nl)
273
274 IF ((nspmd > 1).AND.(sdd_r2r_elem>0)) THEN
276 DO i=1,nspmd
278 ENDDO
279 DO i=1,nspmd
281 ENDDO
282 ENDIF
283
284 ELSE
285 CALL init_link_c(idp,nng,itab,grnod,x,addcnel,cnel,ixc,
286 . ofc,info,
typlnk(iex),icodt,icodr,ncpri,iroddl,nbk,dx)
287 ENDIF
288
289 END DO
290
292
293
295
298 idel7ng =
max(idel7ng,idel_loc)
299 IF (idel7ng>=1) idel7nok = 1
300
301
302 r2rfx1 = zero
303 r2rfx2 = zero
304 ALLOCATE (
tag_rby(size_tag_rby))
305 DO iex = 1, nr2rlnk
306 idg = iexlnk(1,iex)
307 idp = iexlnk(2,iex)
308 nng = igrnod(idg)%NENTITY
309 grnod => igrnod(idg)%ENTITY
313 ELSEIF (
nllnk(iex)==1)
THEN
314
315 msnl => nloc_dmg%MASS(1:nloc_dmg%L_NLOC)
317 ELSE
319 ENDIF
320 END DO
321
322 IF (tt==zero) THEN
323 DO iex = 1, nr2rlnk
324 idg = iexlnk(1,iex)
325 idp = iexlnk(2,iex)
326 nng = igrnod(idg)%NENTITY
327 grnod => igrnod(idg)%ENTITY
329 CALL get_mass_rby_c(idp,nng,grnod,ms,in,x,npby,nrbody,rby,nnpby,nrby)
330 CALL r2r_rby(nng,itab,grnod,x,ms,in,npby,rby,xdp,1,weight)
331 ELSEIF (
nllnk(iex)==1)
THEN
332
334 ELSE
336 ENDIF
337 END DO
338
339
340 IF (nspmd>1) THEN
341 IF (sdd_r2r_elem>0) THEN
342 SIZE = 3 + iroddl*3
343 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
344
346 1 x ,x ,stifn,stifr ,ms ,
347 2 iad_elem,fr_elem,SIZE ,
348 3 lenr ,dd_r2r,dd_r2r_elem,2)
349
350 SIZE = 1 + iroddl*1
352 1 x ,x ,ms,in ,ms ,
353 2 iad_elem,fr_elem,SIZE ,
354 3 lenr ,dd_r2r,dd_r2r_elem,1)
355
356 SIZE = 28
357 IF (iresp==1) THEN
359 1 npby, rby,
360 2 iad_elem,fr_elem,SIZE ,
361 3 lenr ,dd_r2r,dd_r2r_elem,xdp)
362 ELSE
364 1 npby, rby,
365 2 iad_elem,fr_elem,SIZE ,
366 3 lenr ,dd_r2r,dd_r2r_elem,x)
367 ENDIF
368
369 ENDIF
370 ENDIF
371
372 ENDIF
373
374 ELSE
375
376
378 ALLOCATE(
dbn(nr2rlnk,nspmd),
nbel(nr2rlnk,nspmd))
380 ALLOCATE(
nbeln(nr2rlnk,nspmd))
384 ALLOCATE(
nllnk(nr2rlnk))
385
386
387 DO i = 1, rootlen
388 iroot(i) = ichar(rootnam(i:i))
389 END DO
390
391 IF(ispmd==0) THEN
392
396 1 nthread,nspmd)
397 ENDIF
398
400
401 IF(ispmd==0) THEN
402 DO itsk=2,nthread
404 END DO
405
407 CALL opensem_c(iroot,rootlen,ispmd,nthread,ppid)
408
410
420 ELSE
421
423 DO itsk=1,nthread
424 num_sock = nthread*ispmd+itsk
426 END DO
428 CALL opensem_c(iroot,rootlen,ispmd,nthread,ppid)
429 ENDIF
430
431
432 DO iex = 1, nr2rlnk
433 idg = iexlnk(1,iex)
434 idp = iexlnk(2,iex)
435 nng = igrnod(idg)%NENTITY
436 grnod => igrnod(idg)%ENTITY
437
438 IF (idp>nbk) nbk = idp
439 IF(ispmd==0) THEN
446 ENDIF
447
448 IF(nspmd>1) THEN
453 ENDIF
454
455 IF ((
typlnk(iex)==5).AND.(main_side==1))
THEN
456 DO nn=1,nng
457 n = igrnod(idg)%ENTITY(nn)
458 weight_md(n) = 0
459 END DO
460 ENDIF
461
464 size_tag_rby = size_tag_rby + nng
465 ENDIF
466
468 1 idp ,nng ,itab ,grnod,x,
469 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,addcnel,cnel,ixc
470 3 ofc,iex,info,
typlnk(iex),icodt,icodr,ibfv,dx)
471 END DO
472
473 IF(ispmd==0) THEN
474
476
478
481 idel7ng =
max(idel7ng,idel_loc)
482 END IF
484 IF (idel7ng>=1) idel7nok = 1
485
486
487 r2rfx1 = zero
488 r2rfx2 = zero
489 DO iex = 1, nr2rlnk
490 idg = iexlnk(1,iex)
491 idp = iexlnk(2,iex)
492 nng = igrnod(idg)%NENTITY
493 grnod => igrnod(idg)%ENTITY
496 1 idp,nng,grnod,ms,in,
497 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,
rotlnk(iex))
498 ELSE
499 ALLOCATE (
tag_rby(size_tag_rby))
501 1 idp,nng,grnod,ms,in,
502 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,
rotlnk(iex),
504 ENDIF
506 END DO
507
508 IF (tt==zero) THEN
509 DO iex = 1, nr2rlnk
510 idg = iexlnk(1,iex)
511 idp = iexlnk(2,iex)
512 nng = igrnod(idg)%NENTITY
513 grnod => igrnod(idg)%ENTITY
516 1 idp,nng,grnod,ms ,in ,
517 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,iad_elem,
519 ELSE
521 1 idp,nng,grnod,ms ,in ,
522 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,iad_elem,
523 3 fr_elem,
rotlnk(iex),x,npby,rby,itab,iex,xdp)
524 ENDIF
525 END DO
526 ENDIF
527
528 END IF
529
530 RETURN
integer, dimension(:), allocatable nllnk
integer, dimension(:), allocatable rbylnk
integer, dimension(:,:), allocatable dbn
integer, dimension(:), allocatable nbdof_nl
integer, dimension(:), allocatable socket
integer, dimension(:), allocatable offset
integer, dimension(:), allocatable rotlnk
integer, dimension(:,:), allocatable tbcnel
integer, dimension(:), allocatable tag_rby
integer, dimension(:,:), allocatable nbeln
integer, dimension(:), allocatable iadd_nl
integer, dimension(:,:), allocatable nbel
integer, dimension(2) dd_r2r_nl
integer, dimension(:), allocatable add_rby
integer, dimension(:), allocatable typlnk
double precision, dimension(:,:), allocatable r2r_kine
integer, dimension(:,:), allocatable tbcneldb
integer, dimension(:), allocatable kinlnk
subroutine get_mass_spmd(idp, nng, grnod, ms, in, dd_r2r, nglob, weight, iad_elem, fr_elem, flag_rot)
subroutine get_mass_rby_spmd(idp, nng, grnod, ms, in, dd_r2r, nglob, weight, iad_elem, fr_elem, flag_rot, x, npby, rby, itab, iex, xdp)
subroutine init_link_spmd(idp, nng, itab, grnod, x, dd_r2r, nglob, weight, addcnel, cnel, ixc, ofc, iex, info, typ, icodt, icodr, ibfv, dx)
subroutine send_mass_rby_spmd(idp, nng, grnod, ms, in, dd_r2r, nglob, weight, flag_rot, npby, rby, addr)
subroutine send_mass_spmd(idp, nng, grnod, ms, in, dd_r2r, nglob, weight, flag_rot)
void init_link_c(int *igd, int *nng, int *itab, int *nodbuf, my_real_c *x, int *addcnel, int *cnel, int *ixc, int *ofc, int *info, int *typ, int *cdt, int *cdr, int *print, int *rddl, int *nlink, my_real_c *dx)
void opensem_c(int *iroot, int *len, int *ispmd, int *nthr, int *ppid)
void get_name_c(char *name)
void get_fbuf_c(my_real_c *fbuf, int *len)
void init_link_nl_c(int *igd, int *nng, int *itab, int *nodbuf, my_real_c *x, int *print, my_real_c *dx, int *ndof_nl, int *nb_tot_dof, int *nlnk)
void get_mass_rby_c(int *idp, int *nng, int *nodbuf, my_real_c *ms, my_real_c *in, my_real_c *x, int *npby, int *nrbody, my_real_c *rby, int *nnpby, int *nrby)
void get_mass_c(int *idp, int *nng, int *nodbuf, my_real_c *ms, my_real_c *in)
void init_activ_c(int *activ)
void send_fbuf_c(my_real_c *fbuf, int *len)
void send_sock_init_c(int *iroot, int *len, int *ispmd, int *sd, int *maxproc, int *imach)
void send_ibuf_c(int *ibuf, int *len)
void get_ibuf_c(int *ibuf, int *len)
void send_mass_rby_c(int *idp, int *nng, int *nodbuf, my_real_c *ms, my_real_c *in, int *npby, int *nrbody, my_real_c *rby, int *tag, int *add_rby, int *nnpby, int *nrby)
void send_mass_nl_c(int *idp, int *nng, int *iadd_nl, my_real_c *ms)
void connection_sock_c(int *ispmd, int *sd, char *addr)
void send_mass_c(int *idp, int *nng, int *nodbuf, my_real_c *ms, my_real_c *in)
void openfifo_c(int *iroot, int *len, int *fdw, int *fdr, int *sd, int *ispmd, int *nthr, int *ppid)
subroutine spmd_allglob_isum9(v, len)
subroutine spmd_exch_r2r(a, ar, stifn, stifr, ms, iad_elem, fr_elem, size, lenr, dd_r2r, dd_r2r_elem, flag)
subroutine spmd_r2r_sync(addr)
subroutine spmd_exch_r2r_rby(npby, rby, iad_elem, fr_elem, size, lenr, dd_r2r, dd_r2r_elem, x)