OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ply_accele.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!|| ply_accele ../engine/source/assembly/ply_accele.F
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| plya ../engine/source/assembly/ply_accele.F
29!||--- uses -----------------------------------------------------
30!|| plyxfem_mod ../engine/share/modules/plyxfem_mod.f
31!||====================================================================
32 SUBROUTINE ply_accele(INOD,MS_LAYER,ZI_LAYER,MS,NODFT,NODLT,
33 . NPLYMAX,NPLYXFE,NDDIM,MSZ2 )
34C-----------------------------------------------
35C M o d u l e s
36C-----------------------------------------------
37 USE plyxfem_mod
38C----6---------------------------------------------------------------7---------8
39C I m p l i c i t T y p e s
40C-----------------------------------------------
41#include "implicit_f.inc"
42C-----------------------------------------------
43C C o m m o n B l o c k s
44C-----------------------------------------------
45#include "com01_c.inc"
46#include "com08_c.inc"
47#include "com06_c.inc"
48#include "comlock.inc"
49C-----------------------------------------------------------------
50C D u m m y A r g u m e n t s
51C-----------------------------------------------
52 INTEGER NODFT,NODLT,NDDIM,NPLYMAX,NPLYXFE,INOD(*)
53C REAL
55 . ms_layer(nplyxfe,*), zi_layer(nplyxfe,*),
56 . ms(*),msz2(*)
57C-----------------------------------------------
58C L o c a l V a r i a b l e s
59C-----------------------------------------------
60 INTEGER
61 . j,k,n,nn,npt
63 . rtmp, fn1,fn2,fn3,fac,msi,fm1,fm2,fm3,iner,
64 . mass,alpha(nddim),f1,f3,f2,mdt1,mdt2,mdt3,
65 . fply, mply,df1,df2,df3,kzi,mass_node,beta
66C----------------------------------------------------
67C
68 alpha = one
69 IF(iplyxfem == 2 ) THEN
70#include "vectorize.inc"
71 DO nn=nodft,nodlt
72 n = inod(nn)
73 f1 = zero
74 f2 = zero
75 f3 = zero
76 mdt1 = zero
77 mdt2 = zero
78 mdt3 = zero
79 IF(n > 0) THEN
80 npt = 0
81C
82 msz2(n)=zero
83 kzi =zero
84 DO j=1,nplymax
85 IF(ms_layer(n,j) > zero) THEN
86 msz2(n) = msz2(n) +
87 . ms_layer(n,j)*zi_layer(n,j)*zi_layer(n,j)
88 kzi=kzi+ply(j)%A(4,n)*zi_layer(n,j)
89 END IF
90 END DO
91 kzi=kzi/msz2(n)
92C
93 mass_node = zero
94 DO j=1,nplymax
95 IF(ms_layer(n,j) > zero) THEN
96 mass_node = mass_node + ms_layer(n,j)
97 ENDIF
98 ENDDO
99 DO j=1,nplymax
100 IF(ms_layer(n,j) > zero) THEN
101 beta = ms(nn)/mass_node
102 fac = one/(dtfacx*dtfacx)
103 mass =fac*dt2*dt2*ply(j)%A(4,n)
104clm . +KZI*MS_LAYER(N,J)*ABS(ZI_LAYER(N,J)))
105 alpha(nn) = max(alpha(nn), mass/ms_layer(n,j)/beta)
106C
107 mdt1 = mdt1 + ply(j)%A(1,n)*zi_layer(n,j)
108 mdt2 = mdt2 + ply(j)%A(2,n)*zi_layer(n,j)
109 mdt3 = mdt3 + ply(j)%A(3,n)*zi_layer(n,j)
110C
111 f1 = f1 + ply(j)%A(1,n)
112 f2 = f2 + ply(j)%A(2,n)
113 f3 = f3 + ply(j)%A(3,n)
114C for fail of ply ! is desactivated for checking
115!to be checked IF(PLY(J)%A(4,N) == ZERO)THEN
116!to be checked PLY(J)%A(4,N) = EP30
117!to be checked PLY(J)%ITAG(N) = 1
118!to be checked ENDIF
119C
120 ENDIF
121 ENDDO
122C corre ction des forces par plies
123 DO j=1,nplymax
124 IF(ms_layer(n,j) > zero) THEN
125 beta = ms(nn)/mass_node
126 fply = beta*ms_layer(n,j)/ms(nn)
127 mply = zi_layer(n,j)*ms_layer(n,j)/msz2(n)
128C
129 ply(j)%A(1,n)= ply(j)%A(1,n) - f1*fply
130 ply(j)%A(2,n)= ply(j)%A(2,n) - f2*fply
131 ply(j)%A(3,n)= ply(j)%A(3,n) - f3*fply
132 ENDIF
133 ENDDO
134 ENDIF
135 ENDDO
136 ELSE !old formulation
137#include "vectorize.inc"
138 DO nn=nodft,nodlt
139 n = inod(nn)
140 f1 = zero
141 f2 = zero
142 f3 = zero
143 mdt1 = zero
144 mdt2 = zero
145 mdt3 = zero
146 IF(n > 0) THEN
147 npt = 0
148C
149 msz2(n)=zero
150 kzi =zero
151 DO j=1,nplymax
152 IF(ms_layer(n,j) > zero) THEN
153 msz2(n) = msz2(n) +
154 . ms_layer(n,j)*zi_layer(n,j)*zi_layer(n,j)
155 kzi=kzi+ply(j)%A(4,n)*zi_layer(n,j)
156 END IF
157 END DO
158 kzi=kzi/msz2(n)
159C
160 DO j=1,nplymax
161 IF(ms_layer(n,j) > zero) THEN
162 fac = one/(dtfacx*dtfacx)
163 mass =fac*dt2*dt2*ply(j)%A(4,n)
164clm . +KZI*MS_LAYER(N,J)*ABS(ZI_LAYER(N,J)))
165 alpha(nn) = max(alpha(nn), mass/ms_layer(n,j) )
166C
167 mdt1 = mdt1 + ply(j)%A(1,n)*zi_layer(n,j)
168 mdt2 = mdt2 + ply(j)%A(2,n)*zi_layer(n,j)
169 mdt3 = mdt3 + ply(j)%A(3,n)*zi_layer(n,j)
170C
171 f1 = f1 + ply(j)%A(1,n)
172 f2 = f2 + ply(j)%A(2,n)
173 f3 = f3 + ply(j)%A(3,n)
174C is desactivated for checking
175!to be checked IF(ply(j)%A(4,n) == zero)THEN
176!to be checked PLY(J)%A(4,N) = EP30
177!to be checked PLY(J)%ITAG(N) = 1
178!to be checked ENDIF
179C
180 ENDIF
181 ENDDO
182C corre ction des forces par plies
183 DO j=1,nplymax
184 IF(ms_layer(n,j) > zero) THEN
185 fply = ms_layer(n,j)/ms(nn)
186 mply = zi_layer(n,j)*ms_layer(n,j)/msz2(n)
187 ply(j)%A(1,n)= ply(j)%A(1,n) - f1*fply - mply*mdt1
188 ply(j)%A(2,n)= ply(j)%A(2,n) - f2*fply - mply*mdt2
189 ply(j)%A(3,n)= ply(j)%A(3,n) - f3*fply - mply*mdt3
190 ENDIF
191 ENDDO
192 ENDIF
193 ENDDO
194 ENDIF ! formulation
195C
196 DO j=1,nplymax
197 CALL plya(j,nodft,nodlt,nplyxfe, inod,alpha,
198 . ms_layer, ply(j)%A(1,1))
199 ENDDO
200C--------------------------------------------
201 RETURN
202 END
203!||====================================================================
204!|| plya ../engine/source/assembly/ply_accele.F
205!||--- called by ------------------------------------------------------
206!|| ply_accele ../engine/source/assembly/ply_accele.F
207!||====================================================================
208 SUBROUTINE plya(J,NODFT,NODLT,NPLYXFE,INOD,ALPHA,MS,A)
209C-----------------------------------------------
210C M o d u l e s
211C-----------------------------------------------
212C----6---------------------------------------------------------------7---------8
213C I m p l i c i t T y p e s
214C-----------------------------------------------
215#include "implicit_f.inc"
216C-----------------------------------------------
217C C o m m o n B l o c k s
218C-----------------------------------------------
219C-----------------------------------------------------------------
220C D u m m y A r g u m e n t s
221C-----------------------------------------------
222 INTEGER NODFT,NODLT,NPLYXFE,INOD(*),J
223C REAL
224 my_real
225 . ms(nplyxfe,*),a(4,*),alpha(*)
226C-----------------------------------------------
227C L o c a l V a r i a b l e s
228C-----------------------------------------------
229 INTEGER K,N,NN
230 my_real
231 . rtmp, fn1,fn2,fn3,fac,msi,fm1,fm2,fm3,iner,
232 . mass,f1,f2,f3
233C----------------------------------------------------
234C
235#include "vectorize.inc"
236 DO nn=nodft,nodlt
237 n = inod(nn)
238 IF(n > 0) THEN
239 IF(ms(n,j) > zero) THEN
240 mass = alpha(nn)*ms(n,j)
241 rtmp = one / mass
242 a(1,n) = a(1,n) * rtmp
243 a(2,n) = a(2,n) * rtmp
244 a(3,n) = a(3,n) * rtmp
245 ELSE
246 a(1,n) = zero
247 a(2,n) = zero
248 a(3,n) = zero
249 a(4,n) = zero
250 ENDIF
251 ENDIF
252 ENDDO
253C
254C--------------------------------------------
255 RETURN
256 END
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
#define max(a, b)
Definition macros.h:21
type(ply_data), dimension(:), allocatable ply
Definition plyxfem_mod.F:91
subroutine plya(j, nodft, nodlt, nplyxfe, inod, alpha, ms, a)
Definition ply_accele.F:209
subroutine ply_accele(inod, ms_layer, zi_layer, ms, nodft, nodlt, nplymax, nplyxfe, nddim, msz2)
Definition ply_accele.F:34