OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
m11vs3.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!|| m11vs3 ../engine/source/materials/mat/mat011/m11vs3.F
25!||--- called by ------------------------------------------------------
26!|| m11law ../engine/source/materials/mat/mat011/m11law.F
27!||--- uses -----------------------------------------------------
28!|| ale_connectivity_mod ../common_source/modules/ale/ale_connectivity_mod.F
29!|| alefvm_mod ../common_source/modules/ale/alefvm_mod.F
30!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
31!||====================================================================
32 SUBROUTINE m11vs3(PM , IPARG, IXS , ALE_CONNECT , ELBUF_TAB , V ,
33 2 X , DVP , VN , W , VEL , VD2,
34 3 VDX , VDY , VDZ , MAT , RHOV , PV ,
35 4 EIV , REV , RKV , TV ,
36 5 SSP_EQ, VxV , VyV , VzV , IALEFVM_FLG,
37 6 Vx , Vy , Vz , MOM , RHO ,VOL ,
38 7 XmomV , YmomV, ZmomV, BUFVOIS, NEL )
39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
42 USE elbufdef_mod
43 USE alefvm_mod
45C-----------------------------------------------
46C I m p l i c i t T y p e s
47C-----------------------------------------------
48#include "implicit_f.inc"
49C-----------------------------------------------
50C G l o b a l P a r a m e t e r s
51C-----------------------------------------------
52#include "mvsiz_p.inc"
53C-----------------------------------------------
54C C o m m o n B l o c k s
55C-----------------------------------------------
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "com08_c.inc"
59#include "vect01_c.inc"
60#include "param_c.inc"
61C-----------------------------------------------
62C D u m m y A r g u m e n t s
63C-----------------------------------------------
64 INTEGER IPARG(NPARG,*), IXS(NIXS,*), MAT(*),IALEFVM_FLG,NEL
65 my_real ::
66 . PM(NPROPM,*), V(3,*),X(3,*),DVP(*),VN(MVSIZ),W(3,*),
67 . VEL(MVSIZ),VD2(MVSIZ),VDX(MVSIZ) , VDY(MVSIZ) , VDZ(MVSIZ),
68 . RHOV(MVSIZ), PV(MVSIZ), EIV(MVSIZ), REV(MVSIZ), RKV(MVSIZ),
69 . TV(MVSIZ), BUFVOIS(6,*),SSP_EQ(*), VxV(MVSIZ), VyV(MVSIZ),
70 . vzv(mvsiz),vx(mvsiz),vy(mvsiz),vz(mvsiz),
71 . mom(nel,3),rho(mvsiz),vol(mvsiz),
72 . xmomv(mvsiz), ymomv(mvsiz), zmomv(mvsiz)
73 TYPE (ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
74 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
75C-----------------------------------------------
76C L o c a l V a r i a b l e s
77C-----------------------------------------------
78 INTEGER I, II,JJ(3), J, IVOI, ML, N, KTY, KLT, MFT, IS,
79 . inod, ix1, ix2, ix3, ix4, mt,k,kk(6),iad2
80 INTEGER ICF(4,6)
81 my_real
82 . X13, Y13, Z13, X24, Y24, Z24, XN, YN, ZN, FAC, VN1, VN2,
83 . VN3, VN4, VX1, VX2, VX3, VX4, VY1, VY2, VY3, VY4,
84 . vz1, vz2, vz3, vz4, massv, mass
85 TYPE(g_bufel_) ,POINTER :: GBUF
86 LOGICAL :: bFOUND
87C-----------------------------------------------
88 DATA icf/1,4,3,2,3,4,8,7,5,6,7,8,1,2,6,5,2,3,7,6,1,5,8,4/
89C-----------------------------------------------
90 mt = mat(1)
91 DO i=1,nel
92 ii=i+nft
93!
94 iad2 = ale_connect%ee_connect%iad_connect(ii)
95 DO j=1,3
96 jj(j) = nel*(j-1)
97 ENDDO
98!
99 !
100 ! SEARCH ADJACENT ELEMENT (MTN /= 11). (HYPOTHESIS : THIS ADJ ELEM IS SUPPOSED TO BE UNIQUE)
101 !
102 DO j=1,6
103 ivoi=ale_connect%ee_connect%connected(iad2 + j - 1)
104 ml=11
105 IF(ivoi/=0)ml=nint(pm(19,ixs(1,ivoi)))
106 IF(ml/=11)EXIT
107 ENDDO
108 IF(ml /= 11)THEN
109 !
110 ! ADJACENT VALUES
111 !
112 IF(ivoi<=numels)THEN
113 !
114 ! LOCAL ADJACENT ELEM : REFER TO GBUF%
115 !
116 bfound = .false.
117 DO n=1,ngroup
118 kty = iparg(5,n)
119 klt = iparg(2,n)
120 mft = iparg(3,n)
121 IF (kty==1 .AND. ivoi<=klt+mft)THEN
122 bfound = .true.
123 EXIT
124 ENDIF
125 ENDDO
126 IF(.NOT.bfound)cycle !next I
127 gbuf => elbuf_tab(n)%GBUF
128 !PRESSURE
129 is = ivoi-mft-1
130!
131 DO k=1,6
132 kk(k) = klt*(k-1)
133 ENDDO
134!
135 pv(i) = -third*(gbuf%SIG(kk(1)+is+1)+
136 . gbuf%SIG(kk(2)+is+1)+
137 . gbuf%SIG(kk(3)+is+1))
138 !ENERGY
139 eiv(i) = gbuf%EINT(is+1)
140 !DENSITY
141 rhov(i) = gbuf%RHO(is+1)
142 !TURBULENCY
143 IF (jtur>0)THEN
144 rkv(i) = gbuf%RK(is+1)
145 rev(i) = gbuf%RE(is+1)
146 ENDIF
147 IF (gbuf%G_TEMP > 0) THEN
148 tv(i) = gbuf%TEMP(is+1) ! The adjacent cell must have an allocated temperature; otherwise, TV is set to T0 as initialized.
149 END IF
150 !MOMENTUM
151 IF(alefvm_param%IEnabled==1)THEN
152 !USE INPUT VALUE, NOT THIS!
153 is = ivoi-mft
154 massv = rhov(i)*gbuf%VOL(is)
155 vxv(i) = gbuf%MOM(jj(1) + is)/massv
156 vyv(i) = gbuf%MOM(jj(2) + is)/massv
157 vzv(i) = gbuf%MOM(jj(3) + is)/massv
158 xmomv(i) = gbuf%MOM(jj(1) + is)
159 ymomv(i) = gbuf%MOM(jj(2) + is)
160 zmomv(i) = gbuf%MOM(jj(3) + is)
161 ENDIF
162 ELSE
163 !
164 ! SPMD case : FOR REMOTE ADJACENT ELEM REFER TO BUFVOIS (filled in ALEMAIN)
165 !
166 is = ivoi-numels
167 pv(i) = bufvois(01,is)
168 eiv(i) = bufvois(02,is)
169 rhov(i) = bufvois(03,is)
170 rkv(i) = bufvois(04,is)
171 tv(i) = bufvois(05,is)
172 rev(i) = bufvois(06,is)
173 !VxV(I) = BUFVOIS(07,IS)
174 !VyV(I) = BUFVOIS(08,IS)
175 !VzV(I) = BUFVOIS(09,IS)
176 !XmomV(I) = BUFVOIS(10,IS)
177 !YmomV(I) = BUFVOIS(11,IS)
178 !ZmomV(I) = BUFVOIS(12,IS)
179 ENDIF
180
181 !
182 ! FACE VELOCITY
183 !
184 ix1=ixs(icf(1,j)+1,ii)
185 ix2=ixs(icf(2,j)+1,ii)
186 ix3=ixs(icf(3,j)+1,ii)
187 ix4=ixs(icf(4,j)+1,ii)
188 x13=x(1,ix3)-x(1,ix1)
189 y13=x(2,ix3)-x(2,ix1)
190 z13=x(3,ix3)-x(3,ix1)
191 x24=x(1,ix4)-x(1,ix2)
192 y24=x(2,ix4)-x(2,ix2)
193 z24=x(3,ix4)-x(3,ix2)
194 xn=-y13*z24+z13*y24
195 yn=-z13*x24+x13*z24
196 zn=-x13*y24+y13*x24
197 fac=one/sqrt(xn**2+yn**2+zn**2)
198 xn = xn*fac
199 yn = yn*fac
200 zn = zn*fac
201
202 !
203 ! STANDARD FEM FOR MOMENTUM (VELOCITY ON NODES)
204 !
205 IF(ialefvm_flg <= 1)THEN
206 !
207 ! SUPG&ITG
208 !
209 vdx(i)=fourth*(v(1,ix1)+v(1,ix2)+v(1,ix3)+v(1,ix4))
210 vdy(i)=fourth*(v(2,ix1)+v(2,ix2)+v(2,ix3)+v(2,ix4))
211 vdz(i)=fourth*(v(3,ix1)+v(3,ix2)+v(3,ix3)+v(3,ix4))
212 IF(jale>0)THEN
213 vdx(i)=vdx(i)-fourth*(w(1,ix1)+w(1,ix2)+w(1,ix3)+w(1,ix4))
214 vdy(i)=vdy(i)-fourth*(w(2,ix1)+w(2,ix2)+w(2,ix3)+w(2,ix4))
215 vdz(i)=vdz(i)-fourth*(w(3,ix1)+w(3,ix2)+w(3,ix3)+w(3,ix4))
216 ENDIF
217 vd2(i)=vdx(i)**2+vdy(i)**2+vdz(i)**2
218 IF(vdx(i)*xn+vdy(i)*yn+vdz(i)*zn <=zero)THEN
219 vdx(i)=zero
220 vdy(i)=zero
221 vdz(i)=zero
222 ENDIF
223 !
224 ! NON REFLECTING BOUNDARY : VN et DVP
225 !
226 inod=nint(pm(51,mt))
227 IF(inod>=1)THEN
228 vn(i)=v(1,inod)*xn+v(2,inod)*yn+v(3,inod)*zn
229 dvp(i)=zero
230 ELSE
231 vn1=v(1,ix1)*xn+v(2,ix1)*yn+v(3,ix1)*zn
232 vn2=v(1,ix2)*xn+v(2,ix2)*yn+v(3,ix2)*zn
233 vn3=v(1,ix3)*xn+v(2,ix3)*yn+v(3,ix3)*zn
234 vn4=v(1,ix4)*xn+v(2,ix4)*yn+v(3,ix4)*zn
235 vel(i)=(min(vn1,vn2,vn3,vn4))**2
236 vn(i)=fourth*(vn1+vn2+vn3+vn4)
237 IF(vn(i)>=zero)vel(i)=zero
238 vx1=v(1,ix1)-vn1*xn
239 vy1=v(2,ix1)-vn1*yn
240 vz1=v(3,ix1)-vn1*zn
241 vx2=v(1,ix2)-vn2*xn
242 vy2=v(2,ix2)-vn2*yn
243 vz2=v(3,ix2)-vn2*zn
244 vx3=v(1,ix3)-vn3*xn
245 vy3=v(2,ix3)-vn3*yn
246 vz3=v(3,ix3)-vn3*zn
247 vx4=v(1,ix4)-vn4*xn
248 vy4=v(2,ix4)-vn4*yn
249 vz4=v(3,ix4)-vn4*zn
250 x13=x13+(vx3-vx1)*dt1
251 y13=y13+(vy3-vy1)*dt1
252 z13=z13+(vz3-vz1)*dt1
253 x24=x24+(vx4-vx2)*dt1
254 y24=y24+(vy4-vy2)*dt1
255 z24=z24+(vz4-vz2)*dt1
256 xn=-y13*z24+z13*y24
257 yn=-z13*x24+x13*z24
258 zn=-x13*y24+y13*x24
259 dvp(i)=fac*sqrt(xn**2+yn**2+zn**2)-one
260 ENDIF
261 !
262 ! SWITCH TO FVM FOR MOMENTUM (VELOCITY ON CELL CENTROID)
263 !
264 ELSE ! => (IALEFVM_FLG >= 2)
265
266 vdx(i) = half * (vx(i) + vxv(i))
267 vdy(i) = half * (vy(i) + vyv(i))
268 vdz(i) = half * (vz(i) + vzv(i))
269 vd2(i) = vdx(i)**2 + vdy(i)**2 + vdz(i)**2
270 IF(vdx(i)*xn + vdy(i)*yn + vdz(i)*zn <= zero)THEN
271 vdx(i) = zero
272 vdy(i) = zero
273 vdz(i) = zero
274 ENDIF
275
276 !
277 ! NON REFLECTING BOUNDARY : VN et DVP
278 !
279 inod=nint(pm(51,mt))
280 IF(inod>=1)THEN
281 vn(i) = v(1,inod)*xn+v(2,inod)*yn+v(3,inod)*zn
282 dvp(i) = zero
283 ELSE
284 vn(i) = vdx(i)*xn + vdy(i)*yn + vdz(i)*zn
285 vel(i) = vn(i)**2
286 IF(vn(i)>=zero)vel(i)=zero
287 dvp(i) = zero !NOT YET CALCULATED : USUALLY NOT USED : EXPERIMENTAL FORMULATION
288 ENDIF
289
290
291 endif! IF(IALEFVM_FLG <= 1)THEN
292
293 else! => ML==11
294 vdx(i) = zero
295 vdy(i) = zero
296 vdz(i) = zero
297 vd2(i) = zero
298 vn(i) = zero
299 dvp(i) = zero
300 pv(i) = zero
301 eiv(i) = zero
302 rhov(i) = zero
303 rkv(i) = zero
304 tv(i) = zero
305 rev(i) = zero
306 vxv(i) = zero
307 vyv(i) = zero
308 vzv(i) = zero
309 xmomv(i) = zero
310 ymomv(i) = zero
311 zmomv(i) = zero
312
313 ENDIF
314
315 ENDDO !next I
316C-----------
317 RETURN
318 END
subroutine m11vs3(pm, iparg, ixs, ale_connect, elbuf_tab, v, x, dvp, vn, w, vel, vd2, vdx, vdy, vdz, mat, rhov, pv, eiv, rev, rkv, tv, ssp_eq, vxv, vyv, vzv, ialefvm_flg, vx, vy, vz, mom, rho, vol, xmomv, ymomv, zmomv, bufvois, nel)
Definition m11vs3.F:39
#define min(a, b)
Definition macros.h:20
type(alefvm_param_), target alefvm_param
Definition alefvm_mod.F:121