OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
r2r_getdata.F File Reference
#include "implicit_f.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "com06_c.inc"
#include "com08_c.inc"
#include "param_c.inc"
#include "scr05_c.inc"
#include "task_c.inc"
#include "rad2r_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine r2r_getdata (iexlnk, igrnod, x, v, vr, a, ar, ms, in, xdp, dx, r2r_on, dd_r2r, weight, iad_elem, fr_elem, stifn, stifr, dd_r2r_elem, sdd_r2r_elem, nloc_dmg, wfext, wfext_md)
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)
subroutine r2r_sendkine (iexlnk, igrnod, ms, in)

Function/Subroutine Documentation

◆ get_displ_spmd()

subroutine get_displ_spmd ( integer idp,
integer nng,
integer, dimension(*) grnod,
x,
integer, dimension(*) dd_r2r,
integer nglob,
integer, dimension(*) weight,
integer, dimension(2,*) iad_elem,
integer, dimension(*) fr_elem,
integer iex )

Definition at line 291 of file r2r_getdata.F.

294C-----------------------------------------------
295C I m p l i c i t T y p e s
296C-----------------------------------------------
297#include "implicit_f.inc"
298C-----------------------------------------------
299C C o m m o n B l o c k s
300C-----------------------------------------------
301#include "com01_c.inc"
302#include "task_c.inc"
303C-----------------------------------------------
304C D u m m y A r g u m e n t s
305C-----------------------------------------------
306 INTEGER IDP, NNG, NGLOB,IEX,GRNOD(*),
307 . WEIGHT(*), DD_R2R(*), IAD_ELEM(2,*), FR_ELEM(*)
308C REAL
309 my_real
310 . x(3,*)
311C-----------------------------------------------
312C L o c a l V a r i a b l e s
313C-----------------------------------------------
314 INTEGER LRBUF
315 my_real
316 . bufr1(3,nglob)
317C
318C******************************************************************************C
319 IF(ispmd==0)
320 . CALL get_displ_spmd_c(idp,nglob,bufr1)
321 lrbuf = 2*4*iad_elem(1,nspmd+1)-iad_elem(1,1)+2*nspmd
322 CALL spmd_r2r_rset3(x ,nng ,grnod,dd_r2r,weight,
323 . bufr1,iad_elem,fr_elem,lrbuf,iex)
324
325C-----------------------------------------------------------------
326 RETURN
#define my_real
Definition cppsort.cpp:32
void get_displ_spmd_c(int *idp, int *nng, my_real_c *bufr)
Definition rad2rad_c.c:2030
subroutine spmd_r2r_rset3(a, nng, grnod, dd_r2r, weight, bufr, iad_elem, fr_elem, lrbuf, iex)
Definition spmd_r2r.F:942

◆ get_force_spmd()

subroutine get_force_spmd ( integer idp,
integer nng,
integer, dimension(*) grnod,
wf,
wm,
wf2,
wm2,
v,
vr,
a,
ar,
ms,
in,
integer, dimension(*) dd_r2r,
integer nglob,
integer, dimension(*) weight,
integer, dimension(2,*) iad_elem,
integer, dimension(*) fr_elem,
integer nb,
integer iex,
integer typ,
integer flag_rot,
integer nbd )

Definition at line 212 of file r2r_getdata.F.

217C----6------------------------------------------
218C I m p l i c i t T y p e s
219C-----------------------------------------------
220#include "implicit_f.inc"
221C-----------------------------------------------
222C C o m m o n B l o c k s
223C-----------------------------------------------
224#include "com01_c.inc"
225#include "task_c.inc"
226C-----------------------------------------------
227C D u m m y A r g u m e n t s
228C-----------------------------------------------
229 INTEGER IDP, NNG, NGLOB, GRNOD(*),IEX,NB,TYP,FLAG_ROT,
230 . WEIGHT(*), DD_R2R(*), IAD_ELEM(2,*), FR_ELEM(*),NBD
231C REAL
232 my_real
233 . v(3,*),vr(3,*),a(3,*),ar(3,*),ms(*),in(*),
234 . wf, wm, wf2, wm2
235C-----------------------------------------------
236C L o c a l V a r i a b l e s
237C-----------------------------------------------
238 INTEGER LRBUF,i
239 my_real
240 . bufr1(3,nglob),bufr2(3,nglob),
241 . bufr3(3,nglob),bufr4(3,nglob),wtmp(4)
242 INTEGER POP0,POP1,RATE
243 my_real
244 . pop2,pop3,secs
245C
246C******************************************************************************C
247
248 IF(ispmd==0) THEN
249 CALL get_force_spmd_c(idp,nbd,bufr1,bufr2,bufr3,bufr4,typ,iex,nglob)
250 ENDIF
251 lrbuf = 2*4*(iad_elem(1,nspmd+1)-iad_elem(1,1))+2*nspmd
252
253 IF (typ/=7) THEN
254 IF(flag_rot /= 0)THEN
255 IF(typ<4)THEN
256 CALL spmd_r2r_rset3(vr ,nng ,grnod,dd_r2r,weight,
257 . bufr4,iad_elem,fr_elem,lrbuf,iex)
258 ENDIF
259 CALL spmd_r2r_rset3b(ar ,nng ,grnod,dd_r2r,weight,
260 . bufr2,iad_elem,fr_elem,lrbuf, in, vr, wm, wm2,iex)
261 END IF
262
263 CALL spmd_r2r_rset3b(a ,nng ,grnod,dd_r2r,weight,
264 . bufr1,iad_elem,fr_elem,lrbuf, ms, v, wf, wf2,iex)
265 IF(typ<4)THEN
266 CALL spmd_r2r_rset3(v ,nng ,grnod,dd_r2r,weight,
267 . bufr3,iad_elem,fr_elem,lrbuf,iex)
268 ENDIF
269
270 wtmp(1) = wf
271 wtmp(2) = wf2
272 wtmp(3) = wm
273 wtmp(4) = wm2
274 wf = wtmp(1)
275 wf2 = wtmp(2)
276 wm = wtmp(3)
277 wm2 = wtmp(4)
278 ENDIF
279C-----------------------------------------------------------------
280 RETURN
void get_force_spmd_c(int *idp, int *nng, my_real_c *bufr1, my_real_c *bufr2, my_real_c *bufr3, my_real_c *bufr4, int *typ, int *iex, int *nglob)
Definition rad2rad_c.c:1892
subroutine spmd_r2r_rset3b(a, nng, grnod, dd_r2r, weight, bufr, iad_elem, fr_elem, lrbuf, ms, v, wf, wf2, iex)
Definition spmd_r2r.F:1040

◆ r2r_getdata()

subroutine r2r_getdata ( integer, dimension(nr2r,nr2rlnk) iexlnk,
type (group_), dimension(ngrnod), target igrnod,
x,
v,
vr,
a,
ar,
ms,
in,
double precision, dimension(3,*) xdp,
dx,
integer r2r_on,
integer, dimension(nspmd+1,*) dd_r2r,
integer, dimension(*) weight,
integer, dimension(2,*) iad_elem,
integer, dimension(*) fr_elem,
stifn,
stifr,
integer, dimension(*) dd_r2r_elem,
integer sdd_r2r_elem,
type(nlocal_str_), intent(in), target nloc_dmg,
double precision, intent(inout) wfext,
double precision, intent(inout) wfext_md )
Parameters
[in,out]wfext_mdspecific to r2r method

Definition at line 41 of file r2r_getdata.F.

47C-----------------------------------------------
48C M o d u l e s
49C-----------------------------------------------
50 USE rad2r_mod
51 USE groupdef_mod
53C-----------------------------------------------
54C I m p l i c i t T y p e s
55C-----------------------------------------------
56#include "implicit_f.inc"
57C-----------------------------------------------
58C C o m m o n B l o c k s
59C-----------------------------------------------
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"
68C-----------------------------------------------------------------
69C D u m m y A r g u m e n t s
70C-----------------------------------------------
71 INTEGER R2R_ON
72 INTEGER IEXLNK(NR2R,NR2RLNK),
73 . WEIGHT(*), DD_R2R(NSPMD+1,*), IAD_ELEM(2,*), FR_ELEM(*),
74 . DD_R2R_ELEM(*),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 !< specific to r2r method
82C-----------------------------------------------
83C L o c a l V a r i a b l e s
84C-----------------------------------------------
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
90C=======================================================================
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
98C-----------------------------------------------------------------------
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
106C-------Non local coupling interface--------------------------
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)
110 CALL get_force_nl_c(idp ,nbdof_nl(iex) ,iadd_nl ,fnl ,msnl ,
111 . iex)
112 ELSE
113 CALL get_force_c(idp ,nng ,grnod ,wf ,wm ,
114 . wf2 ,wm2 ,v ,vr ,a ,ar ,
115 . ms ,in ,x ,xdp ,dx ,typlnk(iex),
116 . kinlnk(iex),weight ,iex ,iresp, wfext)
117 ENDIF
118C
119 IF (r2r_on == 1) THEN
120 CALL get_displ_c(idp,nng,grnod,x)
121 ENDIF
122 END DO
123
124C----------New rad2rad HMPP - synchro SPMD-----------------------------
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)
130 CALL spmd_exch_r2r_2(a ,ar,v , vr ,ms ,in,
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)
136 sbuf_size = size*lenr + dd_r2r_nl(1)
137 rbuf_size = size*lenr + dd_r2r_nl(2)
138 CALL spmd_exch_r2r_nl(a ,ar,v , vr ,ms ,
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
144 CALL spmd_exch_work(wf, wf2)
145 CALL spmd_exch_work(wm, wm2)
146 END IF
147C
148 ELSE
149C
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
155C-
156 wfb = zero
157 wmb = zero
158 wf2b= zero
159 wm2b= zero
160C-
161 IF (ispmd==0) THEN
162 nglob=dd_r2r(nspmd+1,iex)+dbno(iex)
163 nb = dbno(iex)
164 ELSE
165 nglob=nng
166 nb = 0
167 ENDIF
168C-
169 nb = dbno(iex)
170 nbd = dd_r2r(nspmd+1,iex)
171
172 CALL get_force_spmd(
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)
177C-
178 wf = wf + wfb
179 wm = wm + wmb
180 wf2 = wf2 + wf2b
181 wm2 = wm2 + wm2b
182 IF (r2r_on == 1) THEN
183 CALL get_displ_spmd(
184 1 idp,nng ,grnod,x ,dd_r2r(1,iex),
185 2 nglob,weight ,iad_elem,fr_elem,iex)
186C-
187 ENDIF
188 END DO
189C
190 END IF
191
192C----- Count the work of external process forces
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
198C
199C-----------------------------------------------------------------
200 RETURN
integer, dimension(:), allocatable nllnk
Definition rad2r.F:53
integer, dimension(:), allocatable nbdof_nl
Definition rad2r.F:53
integer, dimension(:), allocatable rotlnk
Definition rad2r.F:53
integer, dimension(:), allocatable iadd_nl
Definition rad2r.F:53
integer, dimension(2) dd_r2r_nl
Definition rad2r.F:64
integer, dimension(:), allocatable typlnk
Definition rad2r.F:53
integer, dimension(:), allocatable kinlnk
Definition rad2r.F:53
integer, dimension(:), allocatable dbno
Definition rad2r.F:53
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)
Definition rad2rad_c.c:1738
void get_displ_c(int *idp, int *nng, int *nodbuf, my_real_c *x)
Definition rad2rad_c.c:1992
void get_force_nl_c(int *idp, int *nng, int *iadd_nl, my_real_c *fx, my_real_c *ms, int *iex)
Definition rad2rad_c.c:1859
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)
Definition spmd_r2r.F:1729
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)
Definition spmd_r2r.F:1361

◆ r2r_sendkine()

subroutine r2r_sendkine ( integer, dimension(nr2r,nr2rlnk) iexlnk,
type (group_), dimension(ngrnod), target igrnod,
ms,
in )

Definition at line 339 of file r2r_getdata.F.

341C-----------------------------------------------
342C M o d u l e s
343C-----------------------------------------------
344 USE rad2r_mod
345 USE groupdef_mod
346C-----------------------------------------------
347C I m p l i c i t T y p e s
348C-----------------------------------------------
349#include "implicit_f.inc"
350C-----------------------------------------------
351C C o m m o n B l o c k s
352C-----------------------------------------------
353#include "com04_c.inc"
354#include "param_c.inc"
355#include "rad2r_c.inc"
356C-----------------------------------------------
357C D u m m y A r g u m e n t s
358C-----------------------------------------------
359 INTEGER IEXLNK(NR2R,NR2RLNK)
360 my_real ms(*),in(*)
361!
362 TYPE (GROUP_) , TARGET, DIMENSION(NGRNOD) :: IGRNOD
363C-----------------------------------------------
364C L o c a l V a r i a b l e s
365C-----------------------------------------------
366 INTEGER I, IEX, IDP, IDG, NNG, OFF
367C
368 INTEGER, DIMENSION(:), POINTER :: GRNOD
369C=======================================================================
370
371 flag_kine = 0
372 off = 0
373
374 IF (r2r_siu==1) THEN
375C----------Send of new mass---------------------------------------
376 DO iex = 1, nr2rlnk
377 idp = iexlnk(2,iex)
378 idg = iexlnk(1,iex)
379 nng = igrnod(idg)%NENTITY
380 grnod => igrnod(idg)%ENTITY
381 IF ((typlnk(iex)==5).AND.(kinlnk(iex)==1)) THEN
382 flag_kine = 1
383 CALL send_mass_kine_c(idp,nng,grnod,ms,in,iex,off)
384 ENDIF
385 off = off + nng
386 END DO
387 ENDIF
388
389C-----------------------------------------------------------------
390 RETURN
void send_mass_kine_c(int *idp, int *nng, int *nodbuf, my_real_c *ms, my_real_c *in, int *iex, int *offset)
Definition rad2rad_c.c:1960