OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sfor_visn8.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!|| sfor_visn8 ../engine/source/elements/solid/solide/sfor_visn8.F
25!||--- called by ------------------------------------------------------
26!|| s8for_distor ../engine/source/elements/solid/solide/s8for_distor.F
27!||====================================================================
28 SUBROUTINE sfor_visn8(VC , FLD, TOL_V, IFC1,
29 4 VX1, VX2, VX3, VX4,
30 5 VX5, VX6, VX7, VX8,
31 6 VY1, VY2, VY3, VY4,
32 7 VY5, VY6, VY7, VY8,
33 8 VZ1, VZ2, VZ3, VZ4,
34 9 VZ5, VZ6, VZ7, VZ8,
35 . FOR_T1, FOR_T2, FOR_T3, FOR_T4,
36 . FOR_T5, FOR_T6, FOR_T7, FOR_T8,
37 . IFCTL, STIF , MU , NEL ,
38 . E_DISTOR, DT1 )
39C-----------------------------------------------
40C I m p l i c i t T y p e s
41C-----------------------------------------------
42#include "implicit_f.inc"
43C-----------------------------------------------
44C G l o b a l P a r a m e t e r s
45C-----------------------------------------------
46#include "mvsiz_p.inc"
47C-----------------------------------------------
48C D u m m y A r g u m e n t s
49C-----------------------------------------------
50 INTEGER, INTENT (IN) :: NEL
51 INTEGER, INTENT (OUT) :: IFCTL
52 INTEGER, DIMENSION(MVSIZ),INTENT (INOUT) :: IFC1
53 my_real, DIMENSION(MVSIZ), INTENT (INOUT) :: STIF
54 my_real, DIMENSION(MVSIZ), INTENT (IN) :: FLD ,
55 4 VX1, VX2, VX3, VX4,
56 5 VX5, VX6, VX7, VX8,
57 6 VY1, VY2, VY3, VY4,
58 7 VY5, VY6, VY7, VY8,
59 8 VZ1, VZ2, VZ3, VZ4,
60 9 vz5, vz6, vz7, vz8
61 my_real, DIMENSION(MVSIZ,3), INTENT (IN) :: vc
62 my_real, DIMENSION(MVSIZ,3), INTENT (INOUT) ::
63 . for_t1, for_t2, for_t3, for_t4,
64 . for_t5, for_t6, for_t7, for_t8
65 my_real, INTENT (IN) :: tol_v,mu,dt1
66 my_real, DIMENSION(NEL), INTENT(INOUT) :: e_distor
67C-----------------------------------------------
68C C o m m o n B l o c k s
69C-----------------------------------------------
70C-----------------------------------------------
71C L o c a l V a r i a b l e s
72C-----------------------------------------------
73 INTEGER I,J,IFCONT
74C 12
75 my_real
76 . vre(6),vxc,vyc,vzc,fx,fy,fz,fac,vnj(8),vl,tol_v2,
77 . vxmax,vymax,vzmax,v2max,vc2,lam_min,lam_min2,lam_max
78C----------------------------
79 tol_v2 = tol_v*tol_v
80 ifctl = 0
81 ifcont = 1 ! no more for contact condition due to P/on issue
82 DO i=1,nel
83 vc2 = vc(i,1)*vc(i,1)+vc(i,2)*vc(i,2)+vc(i,3)*vc(i,3)
84 IF (vc2 <em20.OR.stif(i)==zero) cycle
85 vl = tol_v2*vc2
86 vnj(1) = vx1(i)*vx1(i) + vy1(i)*vy1(i) + vz1(i)*vz1(i)
87 vnj(2) = vx2(i)*vx2(i) + vy2(i)*vy2(i) + vz2(i)*vz2(i)
88 vnj(3) = vx3(i)*vx3(i) + vy3(i)*vy3(i) + vz3(i)*vz3(i)
89 vnj(4) = vx4(i)*vx4(i) + vy4(i)*vy4(i) + vz4(i)*vz4(i)
90 vnj(5) = vx5(i)*vx5(i) + vy5(i)*vy5(i) + vz5(i)*vz5(i)
91 vnj(6) = vx6(i)*vx6(i) + vy6(i)*vy6(i) + vz6(i)*vz6(i)
92 vnj(7) = vx7(i)*vx7(i) + vy7(i)*vy7(i) + vz7(i)*vz7(i)
93 vnj(8) = vx8(i)*vx8(i) + vy8(i)*vy8(i) + vz8(i)*vz8(i)
94 v2max = max(vnj(1),vnj(2),vnj(3),vnj(4))
95 v2max = max(v2max,vnj(5),vnj(6),vnj(7),vnj(8))
96 IF (v2max > vl) ifc1(i) = 1
97 IF (ifc1(i) > 0) ifctl=1
98! IF (V2MAX > FOUR*VC2) IFCONT=1
99 END DO
100C
101 IF (ifctl==1) THEN
102 fac = one + two*mu
103 DO i=1,nel
104 IF (ifc1(i)==0) cycle
105 for_t1(i,1) = for_t1(i,1) - fld(i)*(vx1(i)-vc(i,1))
106 for_t1(i,2) = for_t1(i,2) - fld(i)*(vy1(i)-vc(i,2))
107 for_t1(i,3) = for_t1(i,3) - fld(i)*(vz1(i)-vc(i,3))
108 for_t2(i,1) = for_t2(i,1) - fld(i)*(vx2(i)-vc(i,1))
109 for_t2(i,2) = for_t2(i,2) - fld(i)*(vy2(i)-vc(i,2))
110 for_t2(i,3) = for_t2(i,3) - fld(i)*(vz2(i)-vc(i,3))
111 for_t3(i,1) = for_t3(i,1) - fld(i)*(vx3(i)-vc(i,1))
112 for_t3(i,2) = for_t3(i,2) - fld(i)*(vy3(i)-vc(i,2))
113 for_t3(i,3) = for_t3(i,3) - fld(i)*(vz3(i)-vc(i,3))
114 for_t4(i,1) = for_t4(i,1) - fld(i)*(vx4(i)-vc(i,1))
115 for_t4(i,2) = for_t4(i,2) - fld(i)*(vy4(i)-vc(i,2))
116 for_t4(i,3) = for_t4(i,3) - fld(i)*(vz4(i)-vc(i,3))
117 for_t5(i,1) = for_t5(i,1) - fld(i)*(vx5(i)-vc(i,1))
118 for_t5(i,2) = for_t5(i,2) - fld(i)*(vy5(i)-vc(i,2))
119 for_t5(i,3) = for_t5(i,3) - fld(i)*(vz5(i)-vc(i,3))
120 for_t6(i,1) = for_t6(i,1) - fld(i)*(vx6(i)-vc(i,1))
121 for_t6(i,2) = for_t6(i,2) - fld(i)*(vy6(i)-vc(i,2))
122 for_t6(i,3) = for_t6(i,3) - fld(i)*(vz6(i)-vc(i,3))
123 for_t7(i,1) = for_t7(i,1) - fld(i)*(vx7(i)-vc(i,1))
124 for_t7(i,2) = for_t7(i,2) - fld(i)*(vy7(i)-vc(i,2))
125 for_t7(i,3) = for_t7(i,3) - fld(i)*(vz7(i)-vc(i,3))
126 for_t8(i,1) = for_t8(i,1) - fld(i)*(vx8(i)-vc(i,1))
127 for_t8(i,2) = for_t8(i,2) - fld(i)*(vy8(i)-vc(i,2))
128 for_t8(i,3) = for_t8(i,3) - fld(i)*(vz8(i)-vc(i,3))
129 stif(i) = fac*stif(i)
130 e_distor(i)=e_distor(i) -dt1*(for_t1(i,1)*(vx1(i)-vc(i,1))+
131 . for_t1(i,2)*(vy1(i)-vc(i,2))+
132 . for_t1(i,3)*(vz1(i)-vc(i,3))+
133 . for_t2(i,1)*(vx2(i)-vc(i,1))+
134 . for_t2(i,2)*(vy2(i)-vc(i,2))+
135 . for_t2(i,3)*(vz2(i)-vc(i,3))+
136 . for_t3(i,1)*(vx3(i)-vc(i,1))+
137 . for_t3(i,2)*(vy3(i)-vc(i,2))+
138 . for_t3(i,3)*(vz3(i)-vc(i,3))+
139 . for_t4(i,1)*(vx4(i)-vc(i,1))+
140 . for_t4(i,2)*(vy4(i)-vc(i,2))+
141 . for_t4(i,3)*(vz4(i)-vc(i,3))+
142 . for_t5(i,1)*(vx5(i)-vc(i,1))+
143 . for_t5(i,2)*(vy5(i)-vc(i,2))+
144 . for_t5(i,3)*(vz5(i)-vc(i,3))+
145 . for_t6(i,1)*(vx6(i)-vc(i,1))+
146 . for_t6(i,2)*(vy6(i)-vc(i,2))+
147 . for_t6(i,3)*(vz6(i)-vc(i,3))+
148 . for_t7(i,1)*(vx7(i)-vc(i,1))+
149 . for_t7(i,2)*(vy7(i)-vc(i,2))+
150 . for_t7(i,3)*(vz7(i)-vc(i,3))+
151 . for_t8(i,1)*(vx8(i)-vc(i,1))+
152 . for_t8(i,2)*(vy8(i)-vc(i,2))+
153 . for_t8(i,3)*(vz8(i)-vc(i,3)))
154 ENDDO
155 END IF
156!
157 ifctl = ifcont ! used for self-contact compute less strict : 2 times
158C
159 RETURN
160 END
#define max(a, b)
Definition macros.h:21
subroutine sfor_visn8(vc, fld, tol_v, ifc1, vx1, vx2, vx3, vx4, vx5, vx6, vx7, vx8, vy1, vy2, vy3, vy4, vy5, vy6, vy7, vy8, vz1, vz2, vz3, vz4, vz5, vz6, vz7, vz8, for_t1, for_t2, for_t3, for_t4, for_t5, for_t6, for_t7, for_t8, ifctl, stif, mu, nel, e_distor, dt1)
Definition sfor_visn8.F:39