OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
rivet0.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!|| rivet0 ../starter/source/elements/reader/rivet0.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_rivet ../starter/source/elements/reader/hm_read_rivet.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| kinset ../starter/source/constraints/general/kinset.F
30!||--- uses -----------------------------------------------------
31!|| message_mod ../starter/share/message_module/message_mod.F
32!||====================================================================
33 SUBROUTINE rivet0(V,VR,MS,IN,IXRI,RIVET,GEO,ITAB,IKINE)
34 USE message_mod
35C
36C-----------------------------------------------
37C I m p l i c i t T y p e s
38C-----------------------------------------------
39#include "implicit_f.inc"
40C-----------------------------------------------
41C C o m m o n B l o c k s
42C-----------------------------------------------
43#include "param_c.inc"
44#include "com04_c.inc"
45C-----------------------------------------------
46C D u m m y A r g u m e n t s
47C-----------------------------------------------
48 INTEGER IXRI(4,*), ITAB(*), IKINE(*)
49C REAL
51 . v(3,*), vr(3,*), ms(*), in(*), rivet(nrivf,*),
52 . geo(npropg,*)
53C-----------------------------------------------
54C L o c a l V a r i a b l e s
55C-----------------------------------------------
56 INTEGER I, J, IGL, IG, IROT, K1, K2, IGTYP, IKINE1(3*NUMNOD)
57C REAL
59 . xm, xin
60C
61 DO i=1,3*numnod
62 ikine1(i) = 0
63 ENDDO
64C
65 DO 100 i=1,nrivet
66 rivet(1,i) = one
67 ig=ixri(1,i)
68C
69 irot=geo(4,ig)
70 k1=ixri(2,i)
71 k2=ixri(3,i)
72 xm=(ms(k1)+ms(k2))
73 igtyp=geo(12,ig)
74 IF (igtyp/=5) THEN
75C WRITE(ISTDO,*)' ** ERROR/RIVET PROPERTY SET'
76C WRITE(IOUT,1000)IGTYP
77C 1000 FORMAT(//,' ** ERROR WRONG RIVET PROPERTY SET IDENTIFIER :',
78C . I5,//)
79C IERR=IERR+1
80 CALL ancmsg(msgid=46,
81 . msgtype=msgerror,
82 . anmode=aninfo_blind_1,
83 . i1=ixri(4,i),
84 . i2=igtyp)
85 ENDIF
86 IF(ms(k1)<1.e-15.OR.ms(k2)<1.e-15) THEN
87C WRITE(ISTDO,*)' ** ERROR/RIVET OR SPOTWELD DEFINITION'
88C WRITE(IOUT,2000)IXRI(4,I)
89C 2000 FORMAT(//,' ** ERROR:ONE OR BOTH OF THE TWO NODES OF RIVET :'
90C . ,I5,/,'HAVE A NULL MASS',
91C . ' (MAY BE SECND NODE(S) OF A RIGID BODY)',//)
92C IERR=IERR+1
93C IF(MS(K1)<1.E-15.AND.MS(K2)<1.E-15) CALL ARRET(2)
94 IF(ms(k1)<em15.AND.ms(k2)<em15) THEN
95 CALL ancmsg(msgid=47,
96 . msgtype=msgerror,
97 . anmode=aninfo,
98 . i1=ixri(4,i))
99 END IF
100 CALL ancmsg(msgid=47,
101 . msgtype=msgerror,
102 . anmode=aninfo_blind_1,
103 . i1=ixri(4,i))
104 ENDIF
105 v(1,k1)=(v(1,k1)*ms(k1)+v(1,k2)*ms(k2))/xm
106 v(2,k1)=(v(2,k1)*ms(k1)+v(2,k2)*ms(k2))/xm
107 v(3,k1)=(v(3,k1)*ms(k1)+v(3,k2)*ms(k2))/xm
108 v(1,k2)=v(1,k1)
109 v(2,k2)=v(2,k1)
110 v(3,k2)=v(3,k1)
111 CALL kinset(32,itab(k1),ikine(k1),1,0,ikine1(k1))
112 CALL kinset(32,itab(k1),ikine(k1),2,0,ikine1(k1))
113 CALL kinset(32,itab(k1),ikine(k1),3,0,ikine1(k1))
114 CALL kinset(32,itab(k2),ikine(k2),1,0,ikine1(k2))
115 CALL kinset(32,itab(k2),ikine(k2),2,0,ikine1(k2))
116 CALL kinset(32,itab(k2),ikine(k2),3,0,ikine1(k2))
117 IF(irot==1)THEN
118 CALL kinset(32,itab(k1),ikine(k1),4,0,ikine1(k1))
119 CALL kinset(32,itab(k1),ikine(k1),5,0,ikine1(k1))
120 CALL kinset(32,itab(k1),ikine(k1),6,0,ikine1(k1))
121 CALL kinset(32,itab(k2),ikine(k2),4,0,ikine1(k2))
122 CALL kinset(32,itab(k2),ikine(k2),5,0,ikine1(k2))
123 CALL kinset(32,itab(k2),ikine(k2),6,0,ikine1(k2))
124 IF(in(k1)<em15.AND.in(k2)<em15) THEN
125C WRITE(ISTDO,*)' ** ERROR/RIVET OR SPOTWELD DEFINITION'
126C WRITE(IOUT,3000)IXRI(4,I)
127C 3000 FORMAT(//,' ** ERROR:ONE BOTH OF THE TWO NODES OF RIVET :'
128C . ,I5,/,'HAVE A NULL INERTIA',
129C . ' (MAY BE NODES OF 8 NODES SOLIDS)',//)
130C IERR=IERR+1
131C CALL ARRET(2)
132 CALL ancmsg(msgid=48,
133 . msgtype=msgerror,
134 . anmode=aninfo,
135 . i1=ixri(4,i))
136 ENDIF
137 xin=(in(k1)+in(k2))
138 vr(1,k1)=(vr(1,k1)*in(k1)+vr(1,k2)*in(k2))/xin
139 vr(2,k1)=(vr(2,k1)*in(k1)+vr(2,k2)*in(k2))/xin
140 vr(3,k1)=(vr(3,k1)*in(k1)+vr(3,k2)*in(k2))/xin
141 vr(1,k2)=vr(1,k1)
142 vr(2,k2)=vr(2,k1)
143 vr(3,k2)=vr(3,k1)
144 ENDIF
145 100 CONTINUE
146C
147 RETURN
148 END
#define my_real
Definition cppsort.cpp:32
subroutine kinset(ik, node, ikine, idir, isk, ikine1)
Definition kinset.F:57
subroutine rivet0(v, vr, ms, in, ixri, rivet, geo, itab, ikine)
Definition rivet0.F:34
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