OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i25smse.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!|| i25sms0e ../engine/source/interfaces/int25/i25smse.F
25!||--- called by ------------------------------------------------------
26!|| i25for3e ../engine/source/interfaces/int25/i25for3e.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../engine/source/output/message/message.F
29!|| arret ../engine/source/system/arret.F
30!||--- uses -----------------------------------------------------
31!|| message_mod ../engine/share/message_module/message_mod.F
32!|| tri7box ../engine/share/modules/tri7box.F
33!||====================================================================
34 SUBROUTINE i25sms0e(JLT ,CS_LOC ,N1 ,N2 ,M1 ,
35 2 M2 ,HS1 ,HS2 ,HM1 ,HM2 ,
36 3 STIF ,NIN ,NOINT ,MSKYI_SMS ,ISKYI_SMS,
37 4 NSMS ,K1 ,K2 ,K3 ,K4 ,
38 5 C1 ,C2 ,C3 ,C4 ,NRTS ,
39 6 IBM )
40C-----------------------------------------------
41C M o d u l e s
42C-----------------------------------------------
43 USE tri7box
44 USE message_mod
45C-----------------------------------------------
46C I m p l i c i t T y p e s
47C-----------------------------------------------
48#include "implicit_f.inc"
49#include "comlock.inc"
50C-----------------------------------------------
51C C o m m o n B l o c k s
52C-----------------------------------------------
53#include "parit_c.inc"
54#include "task_c.inc"
55#include "sms_c.inc"
56C-----------------------------------------------
57C D u m m y A r g u m e n t s
58C-----------------------------------------------
59 INTEGER JLT, NIN, NOINT, CS_LOC(*),
60 . N1(*), N2(*), M1(*), M2(*),
61 . NSMS(*), ISKYI_SMS(LSKYI_SMS,*), NRTS, IBM(*)
62 my_real
63 . HS1(*),HS2(*),HM1(*),HM2(*),STIF(*), MSKYI_SMS(*),
64 . k1(*), k2(*), k3(*), k4(*),
65 . c1(*), c2(*), c3(*), c4(*)
66C-----------------------------------------------
67C L o c a l V a r i a b l e s
68C-----------------------------------------------
69 INTEGER I, IG, NISKYL1, NISKYL, NN
70 my_real
71 . MAS1, MAS2, MAS3, MAS4, DTS
72C
73 NISKYL1 = 0
74 DO i=1,jlt
75 IF(nsms(i)==0.OR.stif(i)==zero) cycle
76 IF (hm1(i)/=zero) niskyl1 = niskyl1 + 2
77 IF (hm2(i)/=zero) niskyl1 = niskyl1 + 2
78 ENDDO
79#include "lockon.inc"
80 niskyl = nisky_sms
81 nisky_sms = nisky_sms + niskyl1
82#include "lockoff.inc"
83C
84 IF (niskyl+niskyl1 > lskyi_sms) THEN
85 CALL ancmsg(msgid=26,anmode=aninfo)
86 CALL arret(2)
87 ENDIF
88C
89 DO i=1,jlt
90 IF(nsms(i)==0.OR.stif(i)==zero) cycle
91C
92 IF(nsms(i)>0)THEN
93 dts = dtmins/dtfacs
94 ELSE
95 dts = dtmins_int/dtfacs_int
96 END IF
97C
98 mas1= half * dts * ( dts * k1(i) + c1(i) )
99 mas2= half * dts * ( dts * k2(i) + c2(i) )
100 mas3= half * dts * ( dts * k3(i) + c3(i) )
101 mas4= half * dts * ( dts * k4(i) + c4(i) )
102C
103 IF(ibm(i)>=0)THEN
104C Assembling twice the force if the other segment supporting the main edge
105C lies onto the same domain
106 IF(cs_loc(i)<=nrts) THEN
107 IF(hm1(i)/=zero)THEN
108 niskyl=niskyl+1
109 mskyi_sms(niskyl)=two*max(mas1,mas3)
110 iskyi_sms(niskyl,1)=n1(i)
111 iskyi_sms(niskyl,2)=m1(i)
112 iskyi_sms(niskyl,3)=ispmd+1
113 niskyl=niskyl+1
114 mskyi_sms(niskyl)=two*max(mas2,mas3)
115 iskyi_sms(niskyl,1)=n2(i)
116 iskyi_sms(niskyl,2)=m1(i)
117 iskyi_sms(niskyl,3)=ispmd+1
118 END IF
119 IF(hm2(i)/=zero)THEN
120 niskyl=niskyl+1
121 mskyi_sms(niskyl)=two*max(mas1,mas4)
122 iskyi_sms(niskyl,1)=n1(i)
123 iskyi_sms(niskyl,2)=m2(i)
124 iskyi_sms(niskyl,3)=ispmd+1
125 niskyl=niskyl+1
126 mskyi_sms(niskyl)=two*max(mas2,mas4)
127 iskyi_sms(niskyl,1)=n2(i)
128 iskyi_sms(niskyl,2)=m2(i)
129 iskyi_sms(niskyl,3)=ispmd+1
130 END IF
131 ELSE
132 IF(hm1(i)/=zero)THEN
133 niskyl=niskyl+1
134 mskyi_sms(niskyl)=two*max(mas1,mas3)
135 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
136 iskyi_sms(niskyl,2)=m1(i)
137 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
138 niskyl=niskyl+1
139 mskyi_sms(niskyl)=two*max(mas2,mas3)
140 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
141 iskyi_sms(niskyl,2)=m1(i)
142 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
143 END IF
144 IF(hm2(i)/=zero)THEN
145 niskyl=niskyl+1
146 mskyi_sms(niskyl)=two*max(mas1,mas4)
147 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
148 iskyi_sms(niskyl,2)=m2(i)
149 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
150 niskyl=niskyl+1
151 mskyi_sms(niskyl)=two*max(mas2,mas4)
152 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
153 iskyi_sms(niskyl,2)=m2(i)
154 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
155 END IF
156 END IF
157 ELSE ! IF(IBM(I)>=0)THEN
158 IF(cs_loc(i)<=nrts) THEN
159 IF(hm1(i)/=zero)THEN
160 niskyl=niskyl+1
161 mskyi_sms(niskyl)=max(mas1,mas3)
162 iskyi_sms(niskyl,1)=n1(i)
163 iskyi_sms(niskyl,2)=m1(i)
164 iskyi_sms(niskyl,3)=ispmd+1
165 niskyl=niskyl+1
166 mskyi_sms(niskyl)=max(mas2,mas3)
167 iskyi_sms(niskyl,1)=n2(i)
168 iskyi_sms(niskyl,2)=m1(i)
169 iskyi_sms(niskyl,3)=ispmd+1
170 END IF
171 IF(hm2(i)/=zero)THEN
172 niskyl=niskyl+1
173 mskyi_sms(niskyl)=max(mas1,mas4)
174 iskyi_sms(niskyl,1)=n1(i)
175 iskyi_sms(niskyl,2)=m2(i)
176 iskyi_sms(niskyl,3)=ispmd+1
177 niskyl=niskyl+1
178 mskyi_sms(niskyl)=max(mas2,mas4)
179 iskyi_sms(niskyl,1)=n2(i)
180 iskyi_sms(niskyl,2)=m2(i)
181 iskyi_sms(niskyl,3)=ispmd+1
182 END IF
183 ELSE
184 IF(hm1(i)/=zero)THEN
185 niskyl=niskyl+1
186 mskyi_sms(niskyl)=max(mas1,mas3)
187 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
188 iskyi_sms(niskyl,2)=m1(i)
189 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
190 niskyl=niskyl+1
191 mskyi_sms(niskyl)=max(mas2,mas3)
192 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
193 iskyi_sms(niskyl,2)=m1(i)
194 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
195 END IF
196 IF(hm2(i)/=zero)THEN
197 niskyl=niskyl+1
198 mskyi_sms(niskyl)=max(mas1,mas4)
199 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
200 iskyi_sms(niskyl,2)=m2(i)
201 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
202 niskyl=niskyl+1
203 mskyi_sms(niskyl)=max(mas2,mas4)
204 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
205 iskyi_sms(niskyl,2)=m2(i)
206 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
207 END IF
208 END IF
209 END IF
210 ENDDO
211C
212 RETURN
213 END
214!||====================================================================
215!|| i25sms2e ../engine/source/interfaces/int25/i25smse.F
216!||--- called by ------------------------------------------------------
217!|| i25for3e ../engine/source/interfaces/int25/i25for3e.F
218!||--- calls -----------------------------------------------------
219!|| ancmsg ../engine/source/output/message/message.F
220!|| arret ../engine/source/system/arret.F
221!||--- uses -----------------------------------------------------
222!|| message_mod ../engine/share/message_module/message_mod.F
223!|| tri7box ../engine/share/modules/tri7box.F
224!||====================================================================
225 SUBROUTINE i25sms2e(JLT ,CS_LOC ,N1 ,N2 ,M1 ,
226 2 M2 ,HS1 ,HS2 ,HM1 ,HM2 ,
227 3 STIF ,NIN ,NOINT ,MSKYI_SMS ,ISKYI_SMS,
228 4 NSMS ,K1 ,K2 ,K3 ,K4 ,
229 5 C1 ,C2 ,C3 ,C4 ,NRTS ,
230 6 IBM , EDGE_ID)
231C-----------------------------------------------
232C M o d u l e s
233C-----------------------------------------------
234 USE tri7box
235 USE message_mod
236C-----------------------------------------------
237C I m p l i c i t T y p e s
238C-----------------------------------------------
239#include "implicit_f.inc"
240#include "comlock.inc"
241C-----------------------------------------------
242C G l o b a l P a r a m e t e r s
243C-----------------------------------------------
244#include "mvsiz_p.inc"
245C-----------------------------------------------
246C C o m m o n B l o c k s
247C-----------------------------------------------
248#include "parit_c.inc"
249#include "task_c.inc"
250#include "sms_c.inc"
251C-----------------------------------------------
252C D u m m y A r g u m e n t s
253C-----------------------------------------------
254 INTEGER JLT, NIN, NOINT, CS_LOC(*),
255 . N1(*), N2(*), M1(*), M2(*),
256 . NSMS(*), ISKYI_SMS(LSKYI_SMS,*), NRTS, IBM(*)
257 my_real
258 . HS1(*),HS2(*),HM1(*),HM2(*),STIF(*), MSKYI_SMS(*),
259 . K1(*), K2(*), K3(*), K4(*),
260 . C1(*), C2(*), C3(*), C4(*)
261 INTEGER, INTENT(IN) :: EDGE_ID(4*MVSIZ,2)
262C-----------------------------------------------
263C L o c a l V a r i a b l e s
264C-----------------------------------------------
265 INTEGER I, IG, NISKYL1, NISKYL, NN
266 my_real
267 . mas1, mas2, mas3, mas4, dts
268C
269C
270 niskyl1 = 0
271 DO i=1,jlt
272 IF(nsms(i)==0.OR.stif(i)==zero) cycle
273 IF (hm1(i)/=zero) niskyl1 = niskyl1 + 2
274 IF (hm2(i)/=zero) niskyl1 = niskyl1 + 2
275 IF (hm1(i)/=zero.AND.ibm(i)>=0) niskyl1 = niskyl1 + 2
276 IF (hm2(i)/=zero.AND.ibm(i)>=0) niskyl1 = niskyl1 + 2
277 ENDDO
278#include "lockon.inc"
279 niskyl = nisky_sms
280 nisky_sms = nisky_sms + niskyl1
281#include "lockoff.inc"
282C
283 IF (niskyl+niskyl1 > lskyi_sms) THEN
284 CALL ancmsg(msgid=26,anmode=aninfo)
285 CALL arret(2)
286 ENDIF
287C
288 DO i=1,jlt
289 IF(nsms(i)==0.OR.stif(i)==zero) cycle
290C
291 IF(nsms(i)>0)THEN
292 dts = dtmins/dtfacs
293 ELSE
294 dts = dtmins_int/dtfacs_int
295 END IF
296C
297 mas1= half * dts * ( dts * k1(i) + c1(i) )
298 mas2= half * dts * ( dts * k2(i) + c2(i) )
299 mas3= half * dts * ( dts * k3(i) + c3(i) )
300 mas4= half * dts * ( dts * k4(i) + c4(i) )
301C
302 IF(cs_loc(i)<=nrts) THEN
303 IF(hm1(i)/=zero)THEN
304 niskyl=niskyl+1
305 mskyi_sms(niskyl)=max(mas1,mas3)
306 iskyi_sms(niskyl,1)=n1(i)
307 iskyi_sms(niskyl,2)=m1(i)
308 iskyi_sms(niskyl,3)=ispmd+1
309 niskyl=niskyl+1
310 mskyi_sms(niskyl)=max(mas2,mas3)
311 iskyi_sms(niskyl,1)=n2(i)
312 iskyi_sms(niskyl,2)=m1(i)
313 iskyi_sms(niskyl,3)=ispmd+1
314 END IF
315 IF(hm1(i)/=zero.AND.ibm(i)>=0)THEN
316 niskyl=niskyl+1
317 mskyi_sms(niskyl)=max(mas1,mas3)
318 iskyi_sms(niskyl,1)=n1(i)
319 iskyi_sms(niskyl,2)=m1(i)
320 iskyi_sms(niskyl,3)=ispmd+1
321 niskyl=niskyl+1
322 mskyi_sms(niskyl)=max(mas2,mas3)
323 iskyi_sms(niskyl,1)=n2(i)
324 iskyi_sms(niskyl,2)=m1(i)
325 iskyi_sms(niskyl,3)=ispmd+1
326 END IF
327 IF(hm2(i)/=zero)THEN
328 niskyl=niskyl+1
329 mskyi_sms(niskyl)=max(mas1,mas4)
330 iskyi_sms(niskyl,1)=n1(i)
331 iskyi_sms(niskyl,2)=m2(i)
332 iskyi_sms(niskyl,3)=ispmd+1
333 niskyl=niskyl+1
334 mskyi_sms(niskyl)=max(mas2,mas4)
335 iskyi_sms(niskyl,1)=n2(i)
336 iskyi_sms(niskyl,2)=m2(i)
337 iskyi_sms(niskyl,3)=ispmd+1
338 END IF
339 IF(hm2(i)/=zero.AND.ibm(i)>=0)THEN
340 niskyl=niskyl+1
341 mskyi_sms(niskyl)=max(mas1,mas4)
342 iskyi_sms(niskyl,1)=n1(i)
343 iskyi_sms(niskyl,2)=m2(i)
344 iskyi_sms(niskyl,3)=ispmd+1
345 niskyl=niskyl+1
346 mskyi_sms(niskyl)=max(mas2,mas4)
347 iskyi_sms(niskyl,1)=n2(i)
348 iskyi_sms(niskyl,2)=m2(i)
349 iskyi_sms(niskyl,3)=ispmd+1
350 END IF
351 ELSE
352 IF(hm1(i)/=zero)THEN
353 niskyl=niskyl+1
354 mskyi_sms(niskyl)=max(mas1,mas3)
355 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
356 iskyi_sms(niskyl,2)=m1(i)
357 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
358 niskyl=niskyl+1
359 mskyi_sms(niskyl)=max(mas2,mas3)
360 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
361 iskyi_sms(niskyl,2)=m1(i)
362 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
363 END IF
364 IF(hm1(i)/=zero.AND.ibm(i)>=0)THEN
365 niskyl=niskyl+1
366 mskyi_sms(niskyl)=max(mas1,mas3)
367 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
368 iskyi_sms(niskyl,2)=m1(i)
369 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
370 niskyl=niskyl+1
371 mskyi_sms(niskyl)=max(mas2,mas3)
372 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
373 iskyi_sms(niskyl,2)=m1(i)
374 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
375 END IF
376 IF(hm2(i)/=zero)THEN
377 niskyl=niskyl+1
378 mskyi_sms(niskyl)=max(mas1,mas4)
379 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
380 iskyi_sms(niskyl,2)=m2(i)
381 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
382 niskyl=niskyl+1
383 mskyi_sms(niskyl)=max(mas2,mas4)
384 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
385 iskyi_sms(niskyl,2)=m2(i)
386 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
387 END IF
388 IF(hm2(i)/=zero.AND.ibm(i)>=0)THEN
389 niskyl=niskyl+1
390 mskyi_sms(niskyl)=max(mas1,mas4)
391 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n1(i))
392 iskyi_sms(niskyl,2)=m2(i)
393 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n1(i))
394 niskyl=niskyl+1
395 mskyi_sms(niskyl)=max(mas2,mas4)
396 iskyi_sms(niskyl,1)=nodamsfie(nin)%P(n2(i))
397 iskyi_sms(niskyl,2)=m2(i)
398 iskyi_sms(niskyl,3)=procamsfie(nin)%P(n2(i))
399 END IF
400 END IF
401 ENDDO
402C
403 RETURN
404 END
405C
subroutine i25sms0e(jlt, cs_loc, n1, n2, m1, m2, hs1, hs2, hm1, hm2, stif, nin, noint, mskyi_sms, iskyi_sms, nsms, k1, k2, k3, k4, c1, c2, c3, c4, nrts, ibm)
Definition i25smse.F:40
subroutine i25sms2e(jlt, cs_loc, n1, n2, m1, m2, hs1, hs2, hm1, hm2, stif, nin, noint, mskyi_sms, iskyi_sms, nsms, k1, k2, k3, k4, c1, c2, c3, c4, nrts, ibm, edge_id)
Definition i25smse.F:231
#define max(a, b)
Definition macros.h:21
type(int_pointer), dimension(:), allocatable procamsfie
Definition tri7box.F:440
type(int_pointer), dimension(:), allocatable nodamsfie
Definition tri7box.F:440
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889
subroutine arret(nn)
Definition arret.F:87