65 2 MS ,IN ,DD_R2R,WEIGHT ,IAD_ELEM,
66 3 FR_ELEM,ADDCNEL,CNEL,IXC,IPARG,ICODT,ICODR,
67 4 IBFV,DX,RBY,NPBY,XDP,STIFN,STIFR,DD_R2R_ELEM,
68 5 SDD_R2R_ELEM,WEIGHT_MD,ILENXV,NUMSPH_GLO_R2R,
69 6 FLG_SPHINOUT_R2R,IPARI,NLOC_DMG)
80#include "implicit_f.inc"
100 INTEGER IEXLNK(NR2R,NR2RLNK), ITAB(*),
101 . WEIGHT(*), DD_R2R(NSPMD+1,*), IAD_ELEM(2,*), FR_ELEM(*),
102 . IROOT(100), ADDCNEL(0:*),CNEL(0:*),IXC(NIXC,*),ICODR(*),
103 . IPARG(NPARG,*),ICODT(*),IBFV(*),NPBY(*),DD_R2R_ELEM(*),
104 . SDD_R2R_ELEM,WEIGHT_MD(*),ILENXV,NUMSPH_GLO_R2R,FLG_SPHINOUT_R2R,
107 my_real x(3,*), dx(3,*),ms(*),in(*),rby(*),stifn(*),stifr(*)
109 DOUBLE PRECISION XDP(3,*)
111 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
116 INTEGER I, J, IEX, IDP, IDG, NNG, OFC,NFTC,,TYP,ITSK
117 INTEGER OMP_GET_THREAD_NUM,NUM_SOCK,SIZE_TAG_RBY,LENR,
118 INTEGER NN,N,SUM,PPID,IDEL_LOC,NSN_GLOB,COMPT
119 INTEGER,
DIMENSION(:)ALLOCATABLE
122 INTEGER,
DIMENSION(:),
POINTER ::
123 INTEGER,
POINTER,
DIMENSION(:) :: IDXI,POSI
124 my_real,
POINTER,
DIMENSION(:) :: msnl
128 info=numels+numelq+numelc
131 IF((ninter>0).AND.(idtmin(10)/=3).AND.(idtmin(11)/=3).AND.(idtmin(11)/=8))
THEN
135 IF ((r2r_siu==1).OR.(nspmd==1))
THEN
138 numsph_glo_r2r = numsph
140 IF ((nsphio>0).AND.(numsph_glo_r2r>0)) flg_sphinout_r2r = 1
143 flg_sphinout_r2r =
min(1,flg_sphinout_r2r)
151 IF ((nsn_glob==0).AND.(ipari(7,i)==2)) ipari(7,i) = 0
158 ALLOCATE(
nllnk(nr2rlnk))
163 iroot(i) = ichar(rootnam(i:i))
181 num_sock = nthread*ispmd+itsk
217 nng = igrnod(idg)%NENTITY
220 grnod => igrnod(idg)%ENTITY
222 IF (idp>nbk) nbk = idp
232 size_tag_rby = size_tag_rby + nng
236 IF ((
typlnk(iex)==5).AND.(main_side==1))
THEN
238 n = igrnod(idg)%ENTITY(nn)
249 IF (
nllnk(iex)==1)
THEN
251 idxi => nloc_dmg%IDXI(1:numnod)
252 posi => nloc_dmg%POSI(1:nloc_dmg%NNOD+1)
254 ALLOCATE(ndof_nl(nng))
257 ndof_nl(i) = posi(nn+1)-posi(nn)
258 compt = compt + ndof_nl(i)
265 DO j=posi(nn),posi(nn+1)-1
273 IF ((nspmd > 1).AND.(sdd_r2r_elem>0))
THEN
284 CALL init_link_c(idp,nng,itab,grnod,x,addcnel,cnel,ixc,
285 . ofc,info,
typlnk(iex),icodt,icodr,ncpri,iroddl,nbk,dx)
297 idel7ng =
max(idel7ng,idel_loc)
298 IF (idel7ng>=1) idel7nok = 1
303 ALLOCATE (
tag_rby(size_tag_rby))
307 nng = igrnod(idg)%NENTITY
308 grnod => igrnod(idg)%ENTITY
312 ELSEIF (
nllnk(iex)==1)
THEN
314 msnl => nloc_dmg%MASS(1:nloc_dmg%L_NLOC)
325 nng = igrnod(idg)%NENTITY
326 grnod => igrnod(idg)%ENTITY
328 CALL get_mass_rby_c(idp,nng,grnod,ms,in,x,npby,nrbody,rby,nnpby,nrby)
329 CALL r2r_rby(nng,itab,grnod,x,ms,in,npby,rby,xdp,1,weight)
330 ELSEIF (
nllnk(iex)==1)
THEN
340 IF (sdd_r2r_elem>0)
THEN
342 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
345 1 x ,x ,stifn,stifr ,ms ,
346 2 iad_elem,fr_elem,
SIZE ,
347 3 lenr ,dd_r2r,dd_r2r_elem,2)
352 2 iad_elem,fr_elem,
SIZE ,
353 3 lenr ,dd_r2r,dd_r2r_elem,1)
359 2 iad_elem,fr_elem,
SIZE ,
360 3 lenr ,dd_r2r,dd_r2r_elem,xdp)
364 2 iad_elem,fr_elem
SIZE ,
365 3 lenr ,dd_r2r,dd_r2r_elem,x)
377 ALLOCATE(
dbn(nr2rlnk,nspmd),
nbel(nr2rlnk,nspmd))
379 ALLOCATE(
nbeln(nr2rlnk,nspmd))
383 ALLOCATE(
nllnk(nr2rlnk))
387 iroot(i) = ichar(rootnam(i:i))
406 CALL opensem_c(iroot,rootlen,ispmd,nthread,ppid)
423 num_sock = nthread*ispmd+itsk
427 CALL opensem_c(iroot,rootlen,ispmd,nthread,ppid)
434 nng = igrnod(idg)%NENTITY
435 grnod => igrnod(idg)%ENTITY
437 IF (idp>nbk) nbk = idp
454 IF ((
typlnk(iex)==5).AND.(main_side==1))
THEN
456 n = igrnod(idg)%ENTITY(nn)
463 size_tag_rby = size_tag_rby + nng
467 1 idp ,nng ,itab ,grnod,x,
468 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,addcnel,cnel,ixc,
469 3 ofc,iex,info,
typlnk(iex),icodt,icodr,ibfv,dx)
480 idel7ng =
max(idel7ng,idel_loc)
483 IF (idel7ng>=1) idel7nok = 1
491 nng = igrnod(idg)%NENTITY
492 grnod => igrnod(idg)%ENTITY
495 1 idp,nng,grnod,ms,in,
496 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,
rotlnk(iex))
498 ALLOCATE (
tag_rby(size_tag_rby))
500 1 idp,nng,grnod,ms,in,
501 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,
rotlnk(iex),
511 nng = igrnod(idg)%NENTITY
512 grnod => igrnod(idg)%ENTITY
515 1 idp,nng,grnod,ms ,in ,
516 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,iad_elem,
520 1 idp,nng,grnod,ms ,in ,
521 2 dd_r2r(1,iex),dd_r2r(nspmd+1,iex),weight,iad_elem,
522 3 fr_elem,
rotlnk(iex),x,npby,rby,itab,iex,xdp)
547 1 IDP ,NNG ,ITAB ,GRNOD,X,
548 2 DD_R2R,NGLOB,WEIGHT,ADDCNEL,CNEL,IXC,OFC,IEX,INFO,TYP,
549 3 ICODT,ICODR,IBFV,DX)
557#include "implicit_f.inc"
561#include "com01_c.inc"
562#include "com04_c.inc"
563#include "param_c.inc"
564#include "rad2r_c.inc"
569 INTEGER IDP, NNG, NGLOB,ITAB(*), GRNOD(*),
570 . WEIGHT(*), DD_R2R(*),OFC,
571 . ADDCNEL(0:*),CNEL(0:*),IXC(NIXC,*),IEX,
572 . INFO,TYP,ICODT(*),ICODR(*),IBFV(NIFV,*)
578 INTEGER IBUF(NGLOB),TLEL,LEL(9*),LELNBNOD(9*NNG),TLELN,
579 . LELNOD(9*NNG),NBELEM(NNG),CNELEM(9*NNG),IBUFNONBEL(NGLOB),
580 . TCNEL,TCNELDB,NNGDB,N,K,J,DBNBUF(NSPMD),DDBUF(NSPMD),
581 . bcs(nglob),ibufbcs(nglob),i
582 INTEGER,
ALLOCATABLE :: IBUFEL(:),IBUFELNBNOD(:),IBUFELNOD(:),
583 . IBUFCNEL(:),CNELEMDB(:),DBIBUF(:),DBIBUFNONBEL(:),
585 my_real BUFR(3,NGLOB),BUFR2(3,NGLOB)
605 IF (iroddl==1) bcs(k) = bcs(k) + icodr(n)
621 ALLOCATE(cnelemdb(9*nngdb))
623 . ofc,tlel,lel,lelnbnod,tleln,lelnod,nbelem,tcnel,cnelem,
624 . weight,tcneldb,cnelemdb,info,typ,nglob)
639 bufr(j,i)= bufr2(j,i)-bufr(j,i)
645 ALLOCATE(dbibuf(nngdb))
647 ALLOCATE(dbibuf(
dbno(iex)))
654 ALLOCATE(ibufel(tlel),ibufelnbnod(tlel),ibufelnod(tleln))
655 ALLOCATE(ibufcnel(tcnel),dbibufnonbel(nngdb))
656 ALLOCATE(ibufcneldb(tcneldb))
660 ALLOCATE(dbibufnonbel(
dbno(iex)))
671 CALL spmd_r2r_iget(nbelem,nng,grnod,dd_r2r,weight,ibufnonbel,0)
678 . dbibufnonbel,iex,dbnbuf,ddbuf,0)
685 . dbnbuf,ddbuf,bufr,
tcnelt(iex),ibufnonbel,ibufcnel,
687 . ibufelnod,
tcneltdb(iex),ibufcneldb,dbibufnonbel,typ,
688 . ibufbcs,ncpri,iroddl,nbk,nr2rlnk,iex)
694 DEALLOCATE(ibufel,ibufelnbnod,ibufelnod,ibufcnel,cnelemdb)
695 DEALLOCATE(dbibufnonbel,ibufcneldb)
710 1 IDP ,NNG ,GRNOD, MS, IN,
711 2 DD_R2R ,NGLOB ,WEIGHT ,FLAG_ROT )
715#include "implicit_f.inc"
719#include "com01_c.inc"
724 INTEGER IDP, NNG, NGLOB, GRNOD(*),WEIGHT(*), DD_R2R(*),FLAG_ROT
729 my_real BUFR1(NGLOB), BUFR2(NGLOB)
732 CALL SPMD_R2R_RGET(MS,NNG,GRNOD,DD_R2R,WEIGHT,BUFR1)
734 CALL spmd_r2r_rget(in,nng,grnod,dd_r2r,weight,bufr2)
751 1 IDP ,NNG ,GRNOD,MS ,IN,DD_R2R ,
752 2 NGLOB ,WEIGHT ,IAD_ELEM,FR_ELEM,FLAG_ROT)
756#include "implicit_f.inc"
760#include "com01_c.inc"
765 INTEGER IDP, NNG, NGLOB,
767 . WEIGHT(*), DD_R2R(*), IAD_ELEM(2,*), FR_ELEM(*)
773 my_real BUFR1(NGLOB), BUFR2(NGLOB)
780 . bufr1,iad_elem,fr_elem,lrbuf )
781 IF(flag_rot /= 0)
THEN
783 . bufr2,iad_elem,fr_elem,lrbuf )
801 1 IDP ,NNG ,GRNOD, MS, IN,
802 2 DD_R2R ,NGLOB ,WEIGHT ,FLAG_ROT,
811#include "implicit_f.inc"
815#include "com01_c.inc"
816#include "com04_c.inc"
817#include "param_c.inc"
822 INTEGER IDP, NNG, NGLOB,GRNOD(*),
823 . WEIGHT(*), DD_R2R(*),FLAG_ROT,
826 . MS(*), IN(*), RBY(NRBY,*)
830 INTEGER I,J,IDRBY(NNG),N,IBUF(NGLOB),BUFR3(NGLOB)
832 . BUFR1(NGLOB),BUFR2(NGLOB),BUFR4(NGLOB),
836 CALL SPMD_R2R_RGET(MS,NNG,GRNOD,DD_R2R,WEIGHT,BUFR1)
838 CALL spmd_r2r_rget(in,nng,grnod,dd_r2r,weight,bufr2)
845 IF ((n==npby(nnpby*(j-1)+1)).AND.(n>0))
THEN
859 bufr3(i)= npby(nnpby*(n-1)+3)
862 bufr5(9*(i-1)+j)= rby(16+j,n)
867 . bufr4,bufr5,flag_rot)
885 1 IDP ,NNG ,GRNOD,MS ,IN,DD_R2R ,
886 2 NGLOB ,WEIGHT ,IAD_ELEM,FR_ELEM,FLAG_ROT,
887 3 X,NPBY,RBY,ITAB,IEX,XDP)
891#include "implicit_f.inc"
895#include "com01_c.inc"
896#include "com04_c.inc"
897#include "param_c.inc"
899#include "scr05_c.inc"
903 INTEGER IDP, NNG, NGLOB,
904 . GRNOD(*),FLAG_ROT,IEX,
907 my_real MS(*), IN(*), X(3,*), RBY(NRBY,*)
912 INTEGER LRBUF,I,N,J,IDRBY(NNG),IBUF(NGLOB),IBUF2(NGLOB),
915 . BUFR1(NGLOB),BUFR2(NGLOB),BUFR3(3*NGLOB),BUFR4(9*NGLOB),
925 IF ((n==npby(nnpby*(j-1)+1)).AND.(n>0)) idrby(i) = j
939 rby_x(j,n)=bufr3(3*(i-1)+j)
942 rby(16+j,n)=bufr4(9*(i-1)+j)
946 CALL r2r_rby(nglob,ibuf2,ibuf,bufr3,bufr1,bufr2,npby,rby,
953 IF(ispmd==0) n = ibuf(i)
964 IF ((n==npby(nnpby*(j-1)+1)).AND.(n>0)) id_rb = j
966 x(1,n) = rby_x(1,id_rb)
967 x(2,n) = rby_x(2,id_rb)
968 x(3,n) = rby_x(3,id_rb)
975 ms(n) = rby(14,id_rb)
976 in(n) =
min(rby(10,id_rb),rby(11,id_rb),rby(12,id_rb))
991 SUBROUTINE r2r_rby(NNOD,ITAB,IBUF,X,MS,IN,NPBY,RBY,XDP,NPROC,
996#include "implicit_f.inc"
1000#include "com04_c.inc"
1001#include "param_c.inc"
1002#include "units_c.inc"
1003#include "scr05_c.inc"
1007 INTEGER NNOD,IBUF(*),NPBY(*),ITAB(*),NPROC,WEIGHT(*)
1008 my_real MS(*), IN(*), X(*), RBY(NRBY,*)
1009 DOUBLE PRECISION XDP(3,*)
1013 INTEGER I,J,K,N,ID,NOD,W,TAG(NRBODY)
1014 my_real RBYL(NRBY),XIIN
1024 IF (n==npby(nnpby*(j-1)+1)) id = j
1031 rbyl(j)=rby(16+j,id)
1034 CALL inepri(rbyl(10),rbyl)
1036 IF (npby(nnpby*(id-1)+5)==1)
THEN
1037 xiin = (rbyl(10)+rbyl(11)+rbyl(12))* third
1047 IF (nproc<2) in(n) =
min(rbyl(10),rbyl(11),rbyl(12))
1055 IF (weight(n)==1)
WRITE(iout,1000)
1057 IF ((iresp==1).AND.(nproc==1))
THEN
1059 xdp(1,n)=x(3*(n-1)+1)
1060 xdp(2,n)=x(3*(n-1)+2)
1061 xdp(3,n)=x(3*(n-1)+3)
1063 IF (weight(n)==1)
THEN
1064 IF (npby(nnpby*(id-1)+5)==1)
THEN
1066 WRITE(iout,1100) id,nod,x(3*(n-1)+1),x(3*(n-1)+2),x(3*(n-1)+3),
1070 . x(3*(n-1)+2),x(3*(n-1)+3),2*ms(n)
1071 WRITE(iout,1300) 2*rby(17,id),2*rby(21,id),2*rby(25,id),
1072 . 2*rby(18,id),2*rby(22,id),2*rby(19,id)
1074 WRITE(iout,1200) 2*rby(10,id),2*rby(11,id),2*rby(12,id)
10821000
FORMAT(/40h multidomains -> rigid body assemblage )
10831100
FORMAT(5x,
'RIGID BODY ID',i10
1084 . /10x,
'PRIMARY NODE ',i10
1085 . /10x,
'NEW X,Y,Z ',1p3g14.7
1086 . /10x,
'NEW MASS ',1g14.7)
10871300
FORMAT(10x,
'NEW INERTIA xx yy zz ',3g14.7
1088 . /10x,
'NEW INERTIA xy yz zx ',3g14.7)
10891200
FORMAT(10x,
'PRINCIPAL INERTIA',1p3g20.13,/)
integer, dimension(:), allocatable nllnk
integer, dimension(:), allocatable rbylnk
integer, dimension(:,:), allocatable dbn
integer, dimension(:), allocatable nbdof_nl
integer, dimension(:), allocatable tcnelt
integer, dimension(:), allocatable socket
integer, dimension(:), allocatable tcneltdb
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 nbeltn_r2r
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 nbelt_r2r
integer, dimension(:,:), allocatable tbcneldb
integer, dimension(:), allocatable kinlnk
integer, dimension(:), allocatable dbno
subroutine r2r_rby(nnod, itab, ibuf, x, ms, in, npby, rby, xdp, nproc, weight)
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 r2r_init(iexlnk, itab, igrnod, x, ms, in, dd_r2r, weight, iad_elem, fr_elem, addcnel, cnel, ixc, iparg, icodt, icodr, ibfv, dx, rby, npby, xdp, stifn, stifr, dd_r2r_elem, sdd_r2r_elem, weight_md, ilenxv, numsph_glo_r2r, flg_sphinout_r2r, ipari, nloc_dmg)
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 send_mass_spmd_c(int *idp, int *nng, my_real_c *buf1, my_real_c *buf2, int *iroddl)
void get_mass_rby_spmd_c(int *idp, int *nng, my_real_c *buf1, my_real_c *buf2, my_real_c *buf3, my_real_c *buf4)
void init_link_spmd_c(int *igd, int *nng, int *dbnod, int *nbproc, int *ibuf, int *dbibuf, int *dbnbuf, int *ddbuf, my_real_c *rbuf, int *dim, int *ibufnb, int *ibufcnel, int *nbel, int *dimel, int *ibufel, int *ibufelnbnod, int *ibufelnod, int *dimb, int *ibufcneldb, int *ibufnbeldb, int *typ, int *bcs, int *print, int *rddl, int *nl, int *nlnk, int *iex)
void send_mass_rby_spmd_c(int *idp, int *nng, my_real_c *buf1, my_real_c *buf2, int *buf3, my_real_c *buf4, my_real_c *buf5, int *iroddl)
void init_buf_spmd_c(int *igd, int *nng, int *itab, int *nodbuf, my_real_c *x, int *addcnel, int *cnel, int *ixc, int *ofc, int *tlel, int *lel, int *lelnb, int *tleln, int *leln, int *nbelem, int *tcnel, int *cnelem2, int *wgt, int *tcneldb, int *cnelemdb, int *info, int *typ, int *nglob)
void init_activ_c(int *activ)
void send_fbuf_c(my_real_c *fbuf, int *len)
void get_mass_spmd_c(int *idp, int *nng, my_real_c *buf1, my_real_c *buf2)
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_ibcast(tabi, tabr, n1, n2, from, add)
subroutine spmd_r2r_iget4(itab, nng, grnod, dd_r2r, weight, ibuf, iex, dbnbuf, ddbuf, flag)
subroutine spmd_r2r_rget3(x, nng, grnod, dd_r2r, weight, bufr)
subroutine spmd_exch_r2r(a, ar, stifn, stifr, ms, iad_elem, fr_elem, size, lenr, dd_r2r, dd_r2r_elem, flag)
subroutine spmd_r2r_rset4(m, nng, grnod, dd_r2r, weight, bufr, iad_elem, fr_elem, lrbuf)
subroutine spmd_r2r_iget2(itab, nng, iex, ibuf, flag)
subroutine spmd_r2r_iget(itab, nng, grnod, dd_r2r, weight, ibuf, 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)
subroutine spmd_r2r_idef(nng, grnod, weight, iex, tlel, tleln, tcnel, tcneldb)
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
subroutine inepri(xi, bm)