OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
rbyfor.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "com08_c.inc"
#include "param_c.inc"
#include "task_c.inc"
#include "timeri_c.inc"
#include "intstamp_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine rbyfor (timers, rby, a, ar, x, vr, fsav, in, stifn, stifr, fani, lpby, npby, weight, ms, v, igrsurf, bufsf, icodr, iskew, skew, kind, iad_rby, fr_rby6, rby6, irbkin_l, nrbykin_l, nativ_sms, dimfb, fbsav6, stabsen, tabsensor, nodreac, fthreac, cptreac, dampr, sdamp, damp, ndamp_vrel, id_damp_vrel, igrnod, tagslv_rby, iparit, wfext, ndamp_vrel_rbyg, size_rby6_c, rby6_c)

Function/Subroutine Documentation

◆ rbyfor()

subroutine rbyfor ( type(timer_), intent(inout) timers,
rby,
a,
ar,
x,
vr,
fsav,
in,
stifn,
stifr,
fani,
integer, dimension(*) lpby,
integer, dimension(nnpby,*) npby,
integer, dimension(*) weight,
ms,
v,
type (surf_), dimension(nsurf) igrsurf,
bufsf,
integer, dimension(*) icodr,
integer, dimension(*) iskew,
skew,
integer, dimension(nrbykin) kind,
integer, dimension(*) iad_rby,
integer, dimension(*) fr_rby6,
double precision, dimension(8,6,nrbykin) rby6,
integer, dimension(*) irbkin_l,
integer nrbykin_l,
integer, dimension(*) nativ_sms,
integer dimfb,
double precision, dimension(12,6,dimfb) fbsav6,
integer stabsen,
integer, dimension(*) tabsensor,
integer, dimension(*) nodreac,
fthreac,
integer cptreac,
dimension(nrdamp,ndamp), intent(inout) dampr,
integer, intent(in) sdamp,
dimension(sdamp), intent(inout) damp,
integer, intent(in) ndamp_vrel,
integer, dimension(ndamp_vrel), intent(in) id_damp_vrel,
type(group_), dimension(ngrnod), intent(in) igrnod,
integer, dimension(numnod), intent(in) tagslv_rby,
integer, intent(in) iparit,
double precision wfext,
integer ndamp_vrel_rbyg,
integer size_rby6_c,
double precision, dimension(2,6,size_rby6_c) rby6_c )

Definition at line 42 of file rbyfor.F.

53C-----------------------------------------------
54C M o d u l e s
55C-----------------------------------------------
56 USE timer_mod
57 USE groupdef_mod
58 USE damping_vref_rby_mod
59 USE damping_vref_rby_stiff_mod
60C----6---------------------------------------------------------------7---------8
61C I m p l i c i t T y p e s
62C-----------------------------------------------
63#include "implicit_f.inc"
64#include "comlock.inc"
65C-----------------------------------------------
66C C o m m o n B l o c k s
67C-----------------------------------------------
68#include "com01_c.inc"
69#include "com04_c.inc"
70#include "com08_c.inc"
71#include "param_c.inc"
72#include "task_c.inc"
73#include "timeri_c.inc"
74#include "intstamp_c.inc"
75C-----------------------------------------------------------------
76C D u m m y A r g u m e n t s
77C-----------------------------------------------
78 TYPE(TIMER_), INTENT(inout) :: TIMERS
79 INTEGER ICODR(*),ISKEW(*),WEIGHT(*),LPBY(*),NPBY(NNPBY,*),
80 . KIND(NRBYKIN),FR_RBY6(*),IAD_RBY(*),IRBKIN_L(*),
81 . NRBYKIN_L, NATIV_SMS(*),DIMFB,STABSEN,TABSENSOR(*),
82 . NODREAC(*),CPTREAC,NDAMP_VREL_RBYG,SIZE_RBY6_C
83 my_real rby(nrby,*) ,a(3,*) ,ar(3,*) ,x(3,*) ,vr(3,*),fsav(nthvki,*),
84 . in(*) ,stifn(*),stifr(*),fani(3,*),ms(*),v(3,*) ,
85 . bufsf(*), skew(lskew,*),fthreac(6,*)
86 DOUBLE PRECISION RBY6(8,6,NRBYKIN),RBY6_C(2,6,SIZE_RBY6_C)
87 DOUBLE PRECISION FBSAV6(12,6,DIMFB),RBID(12,6),WFEXT
88 TYPE (SURF_), DIMENSION(NSURF) :: IGRSURF
89 INTEGER ,INTENT(IN) :: NDAMP_VREL,IPARIT,SDAMP
90 INTEGER ,INTENT(IN) :: ID_DAMP_VREL(NDAMP_VREL),TAGSLV_RBY(NUMNOD)
91 my_real, INTENT(INOUT) :: dampr(nrdamp,ndamp),damp(sdamp)
92 TYPE(GROUP_), INTENT(IN) :: IGRNOD(NGRNOD)
93C-----------------------------------------------
94C L o c a l V a r i a b l e s
95C-----------------------------------------------
96 INTEGER J,K,N,KK,N2,ILAGM,
97 . ISU,ADRSRF,IM, L, LSEND, LRECV, NRBDIM,IPARSENS,ISECT,
98 . DIM
99C-------------------------------------
100C INIT RBY6 to ZERO for deactivated Rigid Bodies (non multi-thread)
101C-------------------------------------
102!$OMP SINGLE
103 rbid = zero
104 DO kk=1,nrbykin_l
105 n=irbkin_l(kk)
106 IF(npby(7,n)<=0) THEN
107 DO k = 1, 6
108 rby6(1,k,n) = zero
109 rby6(2,k,n) = zero
110 rby6(3,k,n) = zero
111 rby6(4,k,n) = zero
112 rby6(5,k,n) = zero
113 rby6(6,k,n) = zero
114 rby6(7,k,n) = zero
115 rby6(8,k,n) = zero
116 ENDDO
117 ENDIF
118 ENDDO
119!$OMP END SINGLE
120C-------------------------------------
121C CALCUL FORCE SUPER RIGID BODIES (non multi-thread)
122C-------------------------------------
123
124!$OMP SINGLE
125
126 DO kk=1,nrbykin_l
127 n=irbkin_l(kk)
128 k = kind(n)
129 IF (npby(4,n)/=0) THEN
130 IF(npby(7,n)>0) THEN
131 n2 = ninter+nrwall+n
132C Cumul des Forces / Moments sur la surface :
133C A chaque instant (et a TT=0. dans le Starter),
134C le Rigid Body transmet la position du noeud main
135C a la surface
136C ET
137C Dans l'Interface TYPE 14, Les forces, moments (et rigidites)
138C sont calcules en ce point !!!
139 isu=npby(8,n)
140 IF(ispmd==0.AND.isu/=0) THEN
141 im=npby(1,n)
142 adrsrf=igrsurf(isu)%IAD_BUFR
143 a(1,im) =a(1,im) +bufsf(adrsrf+25)
144 a(2,im) =a(2,im) +bufsf(adrsrf+26)
145 a(3,im) =a(3,im) +bufsf(adrsrf+27)
146 ar(1,im)=ar(1,im)+bufsf(adrsrf+28)
147 ar(2,im)=ar(2,im)+bufsf(adrsrf+29)
148 ar(3,im)=ar(3,im)+bufsf(adrsrf+30)
149 stifn(im)=stifn(im)+bufsf(adrsrf+31)
150 stifr(im)=stifr(im)+bufsf(adrsrf+32)
151C Sortie sur TH des forces d'interface.
152 fsav(10,n2)=fsav(10,n2)+bufsf(adrsrf+25)*dt1
153 fsav(11,n2)=fsav(11,n2)+bufsf(adrsrf+26)*dt1
154 fsav(12,n2)=fsav(12,n2)+bufsf(adrsrf+27)*dt1
155 fsav(13,n2)=fsav(13,n2)+bufsf(adrsrf+28)*dt1
156 fsav(14,n2)=fsav(14,n2)+bufsf(adrsrf+29)*dt1
157 fsav(15,n2)=fsav(15,n2)+bufsf(adrsrf+30)*dt1
158 END IF
159c
160 iparsens=0
161 isect=0
162 IF(stabsen/=0) isect=tabsensor(n+nsect+nintsub+ninter+nrwall+1)-
163 . tabsensor(n+nsect+nintsub+ninter+nrwall)
164 IF(isect/=0) THEN
165 iparsens=1
166 CALL rgbodfp(
167 1 a ,ar ,x ,fsav(1,n2),rby(1,n),
168 2 lpby(k) ,npby(1,n),in ,vr ,stifn ,
169 3 stifr ,fani(1,1+2*(nsect+n-1)),weight,ms ,v ,
170 4 1 ,icodr ,iskew ,skew ,rby6(1,1,n),
171 5 npby(2,n),nativ_sms,fbsav6(1,1,isect) ,iparsens,
172 6 nodreac,fthreac,cptreac,npby(5,n))
173 ELSE
174 CALL rgbodfp(
175 1 a ,ar ,x ,fsav(1,n2),rby(1,n),
176 2 lpby(k) ,npby(1,n),in ,vr ,stifn ,
177 3 stifr ,fani(1,1+2*(nsect+n-1)),weight,ms ,v ,
178 4 1 ,icodr ,iskew ,skew ,rby6(1,1,n),
179 5 npby(2,n),nativ_sms,rbid , iparsens,
180 6 nodreac,fthreac,cptreac,npby(5,n))
181 ENDIF
182 ENDIF
183 ENDIF
184 ENDDO
185
186!$OMP END SINGLE
187
188C-------------------------------------
189C CALCUL FORCE RIGID BODIES CLASSIQUES (multi-thread)
190C-------------------------------------
191
192C-------------------------------------
193C Traitement rigid bodies (sans packet), avec scheduling dynamique
194C-------------------------------------
195
196!$OMP DO SCHEDULE(DYNAMIC,1)
197
198 DO kk=1,nrbykin_l
199 n = irbkin_l(kk)
200 k = kind(n)
201 IF (npby(4,n)==0) THEN
202 IF(npby(7,n)>0) THEN
203 n2 = ninter+nrwall+n
204C Cumul des Forces / Moments sur la surface :
205C A chaque instant (et a TT=0. dans le Starter),
206C le Rigid Body transmet la position du noeud main
207C a la surface
208C ET
209C Dans l'Interface TYPE 14, Les forces, moments (et rigidites)
210C sont calcules en ce point !!!
211 isu=npby(8,n)
212 IF(ispmd==0.AND.isu/=0) THEN
213 im=npby(1,n)
214 adrsrf=igrsurf(isu)%IAD_BUFR
215 a(1,im) =a(1,im) +bufsf(adrsrf+25)
216 a(2,im) =a(2,im) +bufsf(adrsrf+26)
217 a(3,im) =a(3,im) +bufsf(adrsrf+27)
218 ar(1,im)=ar(1,im)+bufsf(adrsrf+28)
219 ar(2,im)=ar(2,im)+bufsf(adrsrf+29)
220 ar(3,im)=ar(3,im)+bufsf(adrsrf+30)
221 stifn(im)=stifn(im)+bufsf(adrsrf+31)
222 stifr(im)=stifr(im)+bufsf(adrsrf+32)
223C Sortie sur TH des forces d'interface.
224 fsav(10,n2)=fsav(10,n2)+bufsf(adrsrf+25)*dt1
225 fsav(11,n2)=fsav(11,n2)+bufsf(adrsrf+26)*dt1
226 fsav(12,n2)=fsav(12,n2)+bufsf(adrsrf+27)*dt1
227 fsav(13,n2)=fsav(13,n2)+bufsf(adrsrf+28)*dt1
228 fsav(14,n2)=fsav(14,n2)+bufsf(adrsrf+29)*dt1
229 fsav(15,n2)=fsav(15,n2)+bufsf(adrsrf+30)*dt1
230 END IF
231c
232 iparsens=0
233 isect=0
234 IF(stabsen/=0) isect=tabsensor(n+nsect+nintsub+ninter+nrwall+1)-
235 . tabsensor(n+nsect+nintsub+ninter+nrwall)
236 IF(isect/=0) THEN
237 iparsens=1
238 CALL rgbodfp(
239 1 a ,ar ,x ,fsav(1,n2),rby(1,n),
240 2 lpby(k) ,npby(1,n) ,in ,vr ,stifn ,
241 3 stifr ,fani(1,1+2*(nsect+n-1)),weight,ms ,v ,
242 4 1 ,icodr ,iskew ,skew ,rby6(1,1,n),
243 5 npby(2,n),nativ_sms,fbsav6(1,1,isect) ,iparsens,
244 6 nodreac,fthreac,cptreac,npby(5,n))
245 ELSE
246 CALL rgbodfp(
247 1 a ,ar ,x ,fsav(1,n2),rby(1,n),
248 2 lpby(k) ,npby(1,n) ,in ,vr ,stifn ,
249 3 stifr ,fani(1,1+2*(nsect+n-1)),weight,ms ,v ,
250 4 1 ,icodr ,iskew ,skew ,rby6(1,1,n),
251 5 npby(2,n),nativ_sms ,rbid ,iparsens ,
252 6 nodreac,fthreac,cptreac,npby(5,n))
253 ENDIF
254 ENDIF
255 ENDIF
256 ENDDO
257
258!$OMP END DO
259
260C-------------------------------------
261C Contribution of damping forces from /DAMP/VREL
262C-------------------------------------
263 IF ((ndamp_vrel_rbyg > 0).AND.(nrbykin_l > 0)) THEN
264!$OMP SINGLE
265 dim = 3+3*iroddl
266 CALL damping_vref_rby(igrnod ,ngrnod ,v ,vr ,a ,
267 . x ,ms ,dampr ,nrdamp ,ndamp ,
268 . ndamp_vrel,iparit ,numnod ,dt1 ,id_damp_vrel,
269 . tt ,nnpby ,nrbykin ,npby ,rby6 ,
270 . rby6_c ,tagslv_rby,weight ,lskew ,numskw ,
271 . dim ,damp ,skew ,wfext ,size_rby6_c)
272!$OMP END SINGLE
273 ENDIF
274
275 IF (nspmd > 1) THEN
276
277!$OMP SINGLE
278
279 IF (imon>0) CALL startime(timers,11)
280C
281C Comm non multi-thread
282C
283C flag to enable/disable all to all communication for RBY.
284 IF(nintstamp == 0) THEN
285 IF (ndamp_vrel_rbyg == 0) THEN
286C routine A2A for Parith/ON computation of A AR STIFN STIFR on main nodes of RB
287 nrbdim=8
288 CALL spmd_exch_a_rb6(nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
289 ELSE
290C routine A2A for Parith/ON computation of A AR STIFN STIFR C CR on main nodes of RB for /DAMP/VREL
291 nrbdim=10
292 CALL spmd_exch_a_rb6_vrel(nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6,
293 . rby6_c,size_rby6_c)
294 ENDIF
295C routine G/S de calcul Parith/ON de A AR STIFN STIFR noeuds main RB
296 ELSE
297 CALL spmd_exch_a_rb6g(npby,rby6)
298 END IF
299
300 IF (imon>0) CALL stoptime(timers,11)
301
302!$OMP END SINGLE
303
304 END IF
305C
306C Traitement fin parith/on multi-thread
307C
308!$OMP DO SCHEDULE(DYNAMIC,1)
309
310 DO kk=1,nrbykin_l
311 n = irbkin_l(kk)
312 k = kind(n)
313 n2 = ninter+nrwall+n
314 IF(npby(7,n)>0) THEN
315c
316 iparsens=0
317 isect=0
318 IF(stabsen/=0) isect=tabsensor(n+nsect+nintsub+ninter+nrwall+1)-
319 . tabsensor(n+nsect+nintsub+ninter+nrwall)
320 IF(isect/=0) THEN
321 iparsens=1
322 CALL rgbodfp(
323 1 a ,ar ,x ,fsav(1,n2),rby(1,n),
324 2 lpby(k) ,npby(1,n),in ,vr ,stifn ,
325 3 stifr ,fani(1,1+2*(nsect+n-1)),weight,ms ,v ,
326 4 2 ,icodr ,iskew ,skew, rby6(1,1,n),
327 5 npby(2,n),nativ_sms,fbsav6(1,1,isect) ,iparsens,
328 6 nodreac,fthreac,cptreac,npby(5,n))
329 ELSE
330 CALL rgbodfp(
331 1 a ,ar ,x ,fsav(1,n2),rby(1,n),
332 2 lpby(k) ,npby(1,n),in ,vr ,stifn ,
333 3 stifr ,fani(1,1+2*(nsect+n-1)),weight,ms ,v ,
334 4 2 ,icodr ,iskew ,skew, rby6(1,1,n),
335 5 npby(2,n),nativ_sms,rbid ,iparsens,
336 6 nodreac,fthreac,cptreac,npby(5,n))
337 ENDIF
338 ENDIF
339 ENDDO
340
341!$OMP END DO
342C
343C-------------------------------------
344C Computation of stability of main node for DAMP/VREL
345C-------------------------------------
346 IF (ndamp_vrel_rbyg > 0) THEN
347!$OMP SINGLE
348 call damping_vref_rby_stiff(numnod,nnpby,nrbykin,nrbykin_l,npby,
349 . rby6_c,ms,in,stifn,stifr,size_rby6_c,
350 . irbkin_l )
351!$OMP END SINGLE
352 ENDIF
353C
354 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine rgbodfp(af, am, x, fs, rby, nod, m, in, vr, stifn, stifr, fopta, weight, ms, v, iflag, icodr, iskew, skew, rbf6, nsn, nativ_sms, fbsav6, iparsens, nodreac, fthreac, cptreac, ispher)
Definition rgbodfp.F:39
subroutine spmd_exch_a_rb6_vrel(nrbdim, iad_rby, fr_rby6, icsize, rby6, rby6_c, size_rby6_c)
subroutine spmd_exch_a_rb6(nrbdim, iad_rby, fr_rby6, icsize, rbf6)
subroutine spmd_exch_a_rb6g(npby, rbf6)
subroutine startime(event, itask)
Definition timer.F:93
subroutine stoptime(event, itask)
Definition timer.F:135