OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
intstamp_ass.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| intstamp_ass ../engine/source/interfaces/int21/intstamp_ass.F
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| spmd_glob_dpsum9 ../engine/source/mpi/interfaces/spmd_th.F
29!|| spmd_glob_dsum9 ../engine/source/mpi/interfaces/spmd_th.F
30!|| spmd_rbcast ../engine/source/mpi/generic/spmd_rbcast.F
31!||--- uses -----------------------------------------------------
32!|| intstamp_mod ../engine/share/modules/intstamp_mod.F
33!||====================================================================
34 SUBROUTINE intstamp_ass(
35 1 INTSTAMP,MS ,IN ,A ,AR ,
36 2 STIFN ,STIFR ,WEIGHT ,WFEXT)
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
242 END
subroutine intstamp_ass(intstamp, ms, in, a, ar, stifn, stifr, weight, wfext)
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