47
48
49
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "com01_c.inc"
61#include "com04_c.inc"
62#include "com06_c.inc"
63#include "com08_c.inc"
64#include "param_c.inc"
65#include "scr05_c.inc"
66#include "task_c.inc"
67#include "rad2r_c.inc"
68
69
70
71 INTEGER R2R_ON
72 INTEGER IEXLNK(NR2R,NR2RLNK),
73 . WEIGHT(*), DD_R2R(NSPMD+1,*), IAD_ELEM(2,*), FR_ELEM(*),
74 . (*),SDD_R2R_ELEM
75 my_real x(3,*),v(3,*),vr(3,*),a(3,*),ar(3,*),ms(*),in(*),stifn(*),stifr(*),dx(3,*)
76
77 DOUBLE PRECISION XDP(3,*)
78 TYPE (GROUP_) , TARGET, DIMENSION(NGRNOD) :: IGRNOD
79 TYPE(NLOCAL_STR_), TARGET, INTENT(IN) :: NLOC_DMG
80 DOUBLE PRECISION, INTENT(INOUT) :: WFEXT
81 DOUBLE PRECISION, INTENT(INOUT) :: WFEXT_MD
82
83
84
85 INTEGER I, IEX, IDP, IDG, NNG, NB,NGLOB,LENR,SIZE,BID
86 INTEGER NBD,NL_FLAG,SBUF_SIZE,RBUF_SIZE,PSP
87 my_real wf, wm, wf2, wm2, wfb, wmb, wf2b, wm2b,ann,vnn,arn,vrn
88 INTEGER, DIMENSION(:), POINTER :: GRNOD
89 my_real,
POINTER,
DIMENSION(:) :: msnl,fnl
90
91 wf = zero
92 wm = zero
93 wf2= zero
94 wm2= zero
95 nl_flag = 0
96
97 IF ((r2r_siu==1).OR.(nspmd==1)) THEN
98
99 DO iex = 1, nr2rlnk
100 idg = iexlnk(1,iex)
101 idp = iexlnk(2,iex)
102 nng = igrnod(idg)%NENTITY
103 grnod => igrnod(idg)%ENTITY
104
105 IF (
nllnk(iex)==1)
THEN
106
107 nl_flag = 1
108 msnl => nloc_dmg%MASS(1:nloc_dmg%L_NLOC)
109 fnl => nloc_dmg%FNL(1:nloc_dmg%L_NLOC,1)
111 . iex)
112 ELSE
114 . wf2 ,wm2 ,v ,vr ,a ,ar ,
115 . ms ,in ,x ,xdp ,dx ,
typlnk(iex),
116 .
kinlnk(iex),weight ,iex ,iresp, wfext)
117 ENDIF
118
119 IF (r2r_on == 1) THEN
121 ENDIF
122 END DO
123
124
125 IF (nspmd>1) THEN
126 IF (sdd_r2r_elem>0) THEN
127 IF (nl_flag == 0) THEN
128 SIZE = 3+flag_kine + iroddl*(3+flag_kine)
129 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
131 2 iad_elem,fr_elem,SIZE , wf, wf2,
132 3 lenr ,dd_r2r,dd_r2r_elem,weight,flag_kine)
133 ELSE
134 SIZE = 3+flag_kine + iroddl*(3+flag_kine)
135 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
139 2 in,iad_elem,fr_elem,SIZE ,
140 3 sbuf_size,rbuf_size,wf, wf2,dd_r2r,
141 4 dd_r2r_elem,weight,flag_kine,nloc_dmg)
142 ENDIF
143 ENDIF
146 END IF
147
148 ELSE
149
150 DO iex = 1, nr2rlnk
151 idg = iexlnk(1,iex)
152 idp = iexlnk(2,iex)
153 nng = igrnod(idg)%NENTITY
154 grnod => igrnod(idg)%ENTITY
155
156 wfb = zero
157 wmb = zero
158 wf2b= zero
159 wm2b= zero
160
161 IF (ispmd==0) THEN
162 nglob=dd_r2r(nspmd+1,iex)+
dbno(iex)
164 ELSE
165 nglob=nng
166 nb = 0
167 ENDIF
168
170 nbd = dd_r2r(nspmd+1,iex)
171
173 1 idp ,nng ,grnod,wfb,wmb ,
174 2 wf2b ,wm2b ,v ,vr,a ,
175 3 ar ,ms ,in,dd_r2r(1,iex),nglob,
176 4 weight ,iad_elem,fr_elem,nb,iex,
typlnk(iex),
rotlnk(iex),nbd)
177
178 wf = wf + wfb
179 wm = wm + wmb
180 wf2 = wf2 + wf2b
181 wm2 = wm2 + wm2b
182 IF (r2r_on == 1) THEN
184 1 idp,nng ,grnod,x ,dd_r2r(1,iex),
185 2 nglob,weight ,iad_elem,fr_elem,iex)
186
187 ENDIF
188 END DO
189
190 END IF
191
192
193 IF(ispmd==0) THEN
194 wfext_md = wfext_md + r2rfx1 + (wf + wm) * dt1
195 r2rfx1 = wf + wm
196 r2rfx2 = wf2 + wm2
197 END IF
198
199
200 RETURN
integer, dimension(:), allocatable nllnk
integer, dimension(:), allocatable nbdof_nl
integer, dimension(:), allocatable rotlnk
integer, dimension(:), allocatable iadd_nl
integer, dimension(2) dd_r2r_nl
integer, dimension(:), allocatable typlnk
integer, dimension(:), allocatable kinlnk
integer, dimension(:), allocatable dbno
subroutine get_force_spmd(idp, nng, grnod, wf, wm, wf2, wm2, v, vr, a, ar, ms, in, dd_r2r, nglob, weight, iad_elem, fr_elem, nb, iex, typ, flag_rot, nbd)
subroutine get_displ_spmd(idp, nng, grnod, x, dd_r2r, nglob, weight, iad_elem, fr_elem, iex)
void get_force_c(int *idp, int *nng, int *nodbuf, my_real_c *wf, my_real_c *wm, my_real_c *wf2, my_real_c *wm2, my_real_c *v, my_real_c *vr, my_real_c *fx, my_real_c *fr, my_real_c *ms, my_real_c *in, my_real_c *x, double *xdp, my_real_c *dx, int *typ, int *kin, int *wgt, int *iex, int *iresp, double *tfext)
void get_displ_c(int *idp, int *nng, int *nodbuf, my_real_c *x)
void get_force_nl_c(int *idp, int *nng, int *iadd_nl, my_real_c *fx, my_real_c *ms, int *iex)
subroutine spmd_exch_r2r_nl(a, ar, v, vr, ms, in, iad_elem, fr_elem, size, sbuf_size, rbuf_size, wf, wf2, dd_r2r, dd_r2r_elem, weight, flag, nloc_dmg)
subroutine spmd_exch_work(wf, wf2)
subroutine spmd_exch_r2r_2(a, ar, v, vr, ms, in, iad_elem, fr_elem, size, wf, wf2, lenr, dd_r2r, dd_r2r_elem, weight, flag)