OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
intstamp_ass.F File Reference
#include "implicit_f.inc"
#include "com01_c.inc"
#include "com08_c.inc"
#include "parit_c.inc"
#include "task_c.inc"
#include "intstamp_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine intstamp_ass (intstamp, ms, in, a, ar, stifn, stifr, weight, wfext)

Function/Subroutine Documentation

◆ intstamp_ass()

subroutine intstamp_ass ( type(intstamp_data), dimension(*) intstamp,
ms,
in,
a,
ar,
stifn,
stifr,
integer, dimension(*) weight,
double precision, intent(inout) wfext )

Definition at line 34 of file intstamp_ass.F.

37C-----------------------------------------------
38C M o d u l e s
39C-----------------------------------------------
40 USE intstamp_mod
41C-----------------------------------------------
42C I m p l i c i t T y p e s
43C-----------------------------------------------
44#include "implicit_f.inc"
45C-----------------------------------------------
46C C o m m o n B l o c k s
47C-----------------------------------------------
48#include "com01_c.inc"
49!#include "com06_c.inc"
50#include "com08_c.inc"
51#include "parit_c.inc"
52#include "task_c.inc"
53#include "intstamp_c.inc"
54C-----------------------------------------------
55C D u m m y A r g u m e n t s
56C-----------------------------------------------
57 INTEGER WEIGHT(*)
58 my_real ms(*), in(*), a(3,*), ar(3,*), stifn(*), stifr(*)
59 TYPE(INTSTAMP_DATA) INTSTAMP(*)
60 DOUBLE PRECISION, INTENT(INOUT) :: WFEXT
61C-----------------------------------------------
62C L o c a l V a r i a b l e s
63C-----------------------------------------------
64 INTEGER NN, MSR, MSRR, INTDAMP, KDIR, K, IROT
65 my_real bufs(8,nintstamp), alpha, vis, mass, inm, stf, str, vx, vy, vz, fvx, fvy, fvz, dt05, dw
66 DOUBLE PRECISION BUFS6(6,8,NINTSTAMP)
67C-----------------------------------------------
68 IF(iparit /= 0)THEN
69 DO nn=1,nintstamp
70 DO k=1,6
71 DO kdir=1,3
72 bufs6(k,kdir,nn)=intstamp(nn)%FC6(k,kdir)
73 END DO
74 bufs6(k,4,nn)=intstamp(nn)%ST6(k)
75 END DO
76C
77C null if irot=0
78 DO k=1,6
79 DO kdir=1,3
80 bufs6(k,kdir+4,nn)=intstamp(nn)%MC6(k,kdir)
81 END DO
82 bufs6(k,8,nn)=intstamp(nn)%STR6(k)
83 END DO
84 END DO
85 IF(nspmd>1)
86 . CALL spmd_glob_dpsum9(bufs6,48*nintstamp)
87 IF(ispmd==0)THEN
88 DO nn=1,nintstamp
89 DO kdir=1,8
90 bufs(kdir,nn)=bufs6(1,kdir,nn)
91 . +bufs6(2,kdir,nn)
92 . +bufs6(3,kdir,nn)
93 . +bufs6(4,kdir,nn)
94 . +bufs6(5,kdir,nn)
95 . +bufs6(6,kdir,nn)
96 END DO
97 END DO
98 END IF
99 IF(nspmd>1)
100 . CALL spmd_rbcast(bufs,bufs,8*nintstamp,1,0,2)
101 DO nn=1,nintstamp
102 DO kdir=1,3
103 intstamp(nn)%FC(kdir)=bufs(kdir,nn)
104 END DO
105 intstamp(nn)%STF=bufs(4,nn)
106 irot=intstamp(nn)%IROT
107 IF(irot/=0)THEN
108 DO kdir=1,3
109 intstamp(nn)%MC(kdir)=bufs(kdir+4,nn)
110 END DO
111 intstamp(nn)%STR=bufs(8,nn)
112 END IF
113 END DO
114 ELSE
115 IF(nspmd>1)THEN
116 DO nn=1,nintstamp
117 DO kdir=1,3
118 bufs(kdir,nn)=intstamp(nn)%FC(kdir)
119 END DO
120 bufs(4,nn)=intstamp(nn)%STF
121C
122C null if irot=0
123 DO kdir=1,3
124 bufs(kdir+4,nn)=intstamp(nn)%MC(kdir)
125 END DO
126 bufs(8,nn)=intstamp(nn)%STR
127 END DO
128 CALL spmd_glob_dsum9(bufs,8*nintstamp)
129 CALL spmd_rbcast(bufs,bufs,8*nintstamp,1,0,2)
130 DO nn=1,nintstamp
131 DO kdir=1,3
132 intstamp(nn)%FC(kdir)=bufs(kdir,nn)
133 END DO
134 intstamp(nn)%STF=bufs(4,nn)
135 irot=intstamp(nn)%IROT
136 IF(irot /= 0)THEN
137C rotations
138 DO kdir=1,3
139 intstamp(nn)%MC(kdir)=bufs(kdir+4,nn)
140 END DO
141 intstamp(nn)%STR=bufs(8,nn)
142 END IF
143 END DO
144 END IF
145 END IF
146C---------------------
147C contact force / Interface => Rbody
148C---------------------
149 DO nn=1,nintstamp
150C
151 irot=intstamp(nn)%IROT
152 msr =intstamp(nn)%MSR
153 DO kdir=1,3
154 a(kdir,msr)=a(kdir,msr)+intstamp(nn)%FC(kdir)
155 END DO
156 IF(irot/=0)THEN
157 DO kdir=1,3
158 ar(kdir,msr)=ar(kdir,msr)+intstamp(nn)%MC(kdir)
159 END DO
160 END IF
161 END DO
162C---------------------
163C damping
164C---------------------
165 dt05=half*dt1
166 DO nn=1,nintstamp
167 msr=intstamp(nn)%MSR
168 intdamp=intstamp(nn)%INTDAMP
169 alpha =intstamp(nn)%DAMP
170 mass =ms(msr)
171 stf =intstamp(nn)%STF
172 vis =alpha*sqrt(four*mass*stf)
173 wfext=wfext + dt05*intstamp(nn)%DW
174 IF(intdamp==0)THEN
175 a(1,msr)=a(1,msr)-vis*intstamp(nn)%V(1)
176 a(2,msr)=a(2,msr)-vis*intstamp(nn)%V(2)
177 a(3,msr)=a(3,msr)-vis*intstamp(nn)%V(3)
178 IF(ispmd==0)THEN
179 dw=-vis*( intstamp(nn)%V(1)*intstamp(nn)%V(1)
180 . +intstamp(nn)%V(2)*intstamp(nn)%V(2)
181 . +intstamp(nn)%V(3)*intstamp(nn)%V(3))
182 wfext=wfext + dt05 * dw
183 END IF
184 ELSE
185 vx=(intstamp(nn)%V(1)-intstamp(intdamp)%V(1))
186 vy=(intstamp(nn)%V(2)-intstamp(intdamp)%V(2))
187 vz=(intstamp(nn)%V(3)-intstamp(intdamp)%V(3))
188 fvx=vis*vx
189 fvy=vis*vy
190 fvz=vis*vz
191 a(1,msr)=a(1,msr)-fvx
192 a(2,msr)=a(2,msr)-fvy
193 a(3,msr)=a(3,msr)-fvz
194 msrr=intstamp(intdamp)%MSR
195 a(1,msrr)=a(1,msrr)+fvx
196 a(2,msrr)=a(2,msrr)+fvy
197 a(3,msrr)=a(3,msrr)+fvz
198 IF(ispmd==0)THEN
199 dw=-two*(fvx*vx+fvy*vy+fvz*vz)
200 wfext=wfext + dt05 * dw
201 END IF
202 END IF
203 irot=intstamp(nn)%IROT
204 IF(irot/=0)THEN
205 alpha=intstamp(nn)%DAMPR
206 inm=in(msr)
207 str =intstamp(nn)%STR
208 vis =alpha*sqrt(four*inm*str)
209 IF(intdamp==0)THEN
210 ar(1,msr)=ar(1,msr)-vis*intstamp(nn)%VR(1)
211 ar(2,msr)=ar(2,msr)-vis*intstamp(nn)%VR(2)
212 ar(3,msr)=ar(3,msr)-vis*intstamp(nn)%VR(3)
213 IF(ispmd==0)THEN
214 dw=-vis*( intstamp(nn)%VR(1)*intstamp(nn)%VR(1)
215 . +intstamp(nn)%VR(2)*intstamp(nn)%VR(2)
216 . +intstamp(nn)%VR(3)*intstamp(nn)%VR(3))
217 wfext=wfext + dt05 * dw
218 END IF
219 ELSE
220 vx=intstamp(nn)%VR(1)-intstamp(intdamp)%VR(1)
221 vy=intstamp(nn)%VR(2)-intstamp(intdamp)%VR(2)
222 vz=intstamp(nn)%VR(3)-intstamp(intdamp)%VR(3)
223 fvx=vis*vx
224 fvy=vis*vy
225 fvz=vis*vz
226 ar(1,msr)=ar(1,msr)-fvx
227 ar(2,msr)=ar(2,msr)-fvy
228 ar(3,msr)=ar(3,msr)-fvz
229 msrr=intstamp(intdamp)%MSR
230 ar(1,msrr)=ar(1,msrr)+fvx
231 ar(2,msrr)=ar(2,msrr)+fvy
232 ar(3,msrr)=ar(3,msrr)+fvz
233 IF(ispmd==0)THEN
234 dw=-two*(fvx*vx+fvy*vy+fvz*vz)
235 wfext=wfext + dt05 * dw
236 END IF
237 END IF
238 END IF
239 ENDDO
240C---------------------
241 RETURN
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
Definition spmd_rbcast.F:62
subroutine spmd_glob_dsum9(v, len)
Definition spmd_th.F:380
subroutine spmd_glob_dpsum9(v, len)
Definition spmd_th.F:437