OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
m11vs2.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!|| m11vs2 ../engine/source/materials/mat/mat011/m11vs2.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 m11vs2(PM ,IPARG,IXQ ,ALE_CONNECT ,ELBUF_TAB ,V ,
33 2 X ,DVP ,VN ,W ,VEL ,VD2 ,
34 3 VDY ,VDZ ,VIS ,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,*), IXQ(7,*), MAT(*),IALEFVM_FLG,NEL
65 my_real
66 . PM(NPROPM,*), V(3,*),X(3,*),DVP(*),VN(*),W(3,*),
67 . VEL(*),VD2(*),VDY(*),VDZ(*),
68 . RHOV(*), PV(*), EIV(*), REV(*), RKV(*),
69 . TV(*),VIS(*), BUFVOIS(6,*),SSP_EQ(*), VxV(MVSIZ), VyV(MVSIZ), VzV(MVSIZ),
70 . vx(mvsiz), vy(mvsiz), vz(mvsiz),mom(nel,3),rho(mvsiz),vol(mvsiz),
71 . xmomv(mvsiz), ymomv(mvsiz), zmomv(mvsiz)
72 TYPE (ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
73 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
74C-----------------------------------------------
75C L o c a l V a r i a b l e s
76C-----------------------------------------------
77 INTEGER :: I,II,J,JJ(3),IVOI,ML,N,KTY,KLT,MFT,IS,IX1,IX2,
78 . inod,icf(2,4),mv,mt,k,kk(6),iad2
79 my_real :: yn, zn, fac, vn1, vn2, dvy, dvz, massv, mass
80 TYPE(g_bufel_) ,POINTER :: GBUF
81 LOGICAL :: bFOUND
82C-----------------------------------------------
83 DATA icf/1,2,2,3,3,4,4,1/
84C-----------------------------------------------
85 mt = mat(1)
86 DO i=1,nel
87 ii=i+nft
88!
89 iad2 = ale_connect%ee_connect%iad_connect(ii)
90 DO j=1,3
91 jj(j) = nel*(j-1)
92 ENDDO
93!
94 !
95 ! SEARCH ADJACENT ELEMENT (MTN /= 11). (HYPOTHESIS : THIS ADJ ELEM IS SUPPOSED TO BE UNIQUE)
96 !
97 DO j=1,4
98 ivoi=ale_connect%ee_connect%connected(iad2 + j - 1)
99 ml=11
100 IF(ivoi/=0)THEN
101 mv=ixq(1,ivoi)
102 ml=nint(pm(19,mv))
103 ENDIF
104 IF(ml/=11)EXIT
105 ENDDO
106 IF(ml/=11)THEN
107 !
108 ! ADJACENT VALUES
109 !
110 IF(ivoi<=numelq)THEN
111 !
112 ! LOCAL ADJACENT ELEM : REFER TO GBUF%
113 !
114 bfound = .false.
115 DO n=1,ngroup
116 kty = iparg(5,n)
117 klt = iparg(2,n)
118 mft = iparg(3,n)
119 IF (kty==2 .AND. ivoi<=klt+mft)THEN
120 bfound = .true.
121 EXIT
122 ENDIF
123 ENDDO
124 IF(.NOT.bfound)cycle !next I
125 gbuf => elbuf_tab(n)%GBUF
126 !PRESSURE
127 is = ivoi-mft-1
128!
129 DO k=1,6
130 kk(k) = klt*(k-1)
131 ENDDO
132!
133 pv(i) = -third*(gbuf%SIG(kk(1)+is+1)+
134 . gbuf%SIG(kk(2)+is+1)+
135 . gbuf%SIG(kk(3)+is+1))
136 !ENERGY
137 eiv(i) = gbuf%EINT(is+1)
138 !DENSITY
139 rhov(i) = gbuf%RHO(is+1)
140 IF(ml==6 .OR. ml==17)vis(i) =pm(24,mv)*rhov(i)
141 !TURBULENCY
142 IF(jtur>0)THEN
143 rkv(i) = gbuf%RK(is+1)
144 rev(i) = gbuf%RE(is+1)
145 vis(i)=vis(i)+pm(81,mv)*rkv(i)**2/rev(i)
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 is = ivoi-mft
153 massv = rhov(i)*gbuf%VOL(is)
154 vxv(i) = gbuf%MOM(jj(1) + is)/massv
155 vyv(i) = gbuf%MOM(jj(2) + is)/massv
156 vzv(i) = gbuf%MOM(jj(3) + is)/massv
157 xmomv(i) = gbuf%MOM(jj(1) + is)
158 ymomv(i) = gbuf%MOM(jj(2) + is)
159 zmomv(i) = gbuf%MOM(jj(3) + is)
160 ENDIF
161 ELSE
162 !
163 ! SPMD case : FOR REMOTE ADJACENT ELEM REFER TO BUFVOIS (filled in ALEMAIN)
164 !
165 is = ivoi-numelq
166 pv(i) =bufvois(1,is)
167 eiv(i) =bufvois(2,is)
168 rhov(i)=bufvois(3,is)
169 IF(ml==6.OR.ml==17) vis(i) =pm(24,mv)*rhov(i)
170 IF(jtur>0)THEN
171 rkv(i) =bufvois(4,is)
172 rev(i) =bufvois(6,is)
173 vis(i) =vis(i)+pm(81,mv)*rkv(i)**2/rev(i)
174 ENDIF
175 tv(i) = bufvois(5,is)
176 !VxV(I) = BUFVOIS(07,IS)
177 !VyV(I) = BUFVOIS(08,IS)
178 !VzV(I) = BUFVOIS(09,IS)
179 !XmomV(I) = BUFVOIS(10,IS)
180 !YmomV(I) = BUFVOIS(11,IS)
181 !ZmomV(I) = BUFVOIS(12,IS)
182 ENDIF
183
184
185 !
186 ! FACE VELOCITY
187 !
188 ix1 = ixq(icf(1,j)+1,ii)
189 ix2 = ixq(icf(2,j)+1,ii)
190 yn = (x(2,ix2)-x(2,ix1))
191 zn = (x(3,ix2)-x(3,ix1))
192 fac = one/sqrt(yn**2+zn**2)
193 inod = nint(pm(51,mt))
194 !
195 ! STANDARD FEM FOR MOMENTUM (VELOCITY ON NODES)
196 !
197 IF(ialefvm_flg <= 1)THEN
198 !
199 ! SUPG&ITG
200 !
201 vdy(i)=half*(v(2,ix1)+v(2,ix2))
202 vdz(i)=half*(v(3,ix1)+v(3,ix2))
203 IF(jale>0)THEN
204 vdy(i)=vdy(i)-half*(w(2,ix1)+w(2,ix2))
205 vdz(i)=vdz(i)-half*(w(3,ix1)+w(3,ix2))
206 ENDIF
207 vd2(i)=vdy(i)**2+vdz(i)**2
208 IF(-vdy(i)*zn+vdz(i)*yn<=zero)THEN
209 vdy(i)=zero
210 vdz(i)=zero
211 ENDIF
212 !
213 ! NON REFLECTING BOUNDARY : VN et DVP
214 !
215 IF(inod>=1)THEN
216 vn(i)=fac*(v(2,inod)*yn+v(3,inod)*zn)
217 dvp(i)=zero
218 ELSE
219 vn1=-v(2,ix1)*zn+v(3,ix1)*yn
220 vn2=-v(2,ix2)*zn+v(3,ix2)*yn
221 vel(i)=(min(vn1,vn2))**2
222 vn(i)=half*fac*(vn1+vn2)
223 IF(vn(i)>=zero)vel(i)=zero
224 dvy=v(2,ix2)-v(2,ix1)
225 dvz=v(3,ix2)-v(3,ix1)
226 dvp(i)=fac**2*(dvy*yn+dvz*zn)*dt1
227 IF(n2d==1)THEN
228 dvp(i)=dvp(i)+(v(2,ix1)+v(2,ix2))*dt1/(x(2,ix1)+x(2,ix2))
229 ENDIF
230 ENDIF
231
232 !
233 ! SWITCH TO FVM FOR MOMENTUM (VELOCITY ON CELL CENTROID)
234 !
235 ELSE ! => (IALEFVM_FLG >= 2)
236 vdy(i) = half * (vy(i) + vyv(i))
237 vdz(i) = half * (vz(i) + vzv(i))
238 vd2(i) = vdy(i)**2 + vdz(i)**2
239 IF(vdy(i)*yn + vdz(i)*zn <= zero)THEN
240 vdy(i) = zero
241 vdz(i) = zero
242 ENDIF
243 !
244 ! NON REFLECTING BOUNDARY : VN et DVP
245 !
246 inod=nint(pm(51,mt))
247 IF(inod>=1)THEN
248 vn(i) = v(2,inod)*yn+v(3,inod)*zn
249 dvp(i) = zero
250 ELSE
251 vn(i) = vdy(i)*yn + vdz(i)*zn
252 vel(i) = vn(i)**2
253 IF(vn(i)>=zero) vel(i) = zero
254 dvp(i) = zero !NOT YET CALCULATED : USUALLY NOT USED : EXPERIMENTAL FORMULATION
255 ENDIF
256 endif! IF(IALEFVM_FLG <= 1)THEN
257
258 ELSE
259 vdy(i) = zero
260 vdz(i) = zero
261 vd2(i) = zero
262 vn(i) = zero
263 dvp(i) = zero
264 pv(i) = zero
265 eiv(i) = zero
266 rhov(i) = zero
267 vis(i) = zero
268 rkv(i) = zero
269 tv(i) = zero
270 rev(i) = zero
271 vxv(i) = zero
272 vyv(i) = zero
273 vzv(i) = zero
274 xmomv(i) = zero
275 ymomv(i) = zero
276 zmomv(i) = zero
277 ENDIF
278
279 enddo!next I
280C
281 RETURN
282 END
#define my_real
Definition cppsort.cpp:32
subroutine m11vs2(pm, iparg, ixq, ale_connect, elbuf_tab, v, x, dvp, vn, w, vel, vd2, vdy, vdz, vis, 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 m11vs2.F:39
#define min(a, b)
Definition macros.h:20
type(alefvm_param_), target alefvm_param
Definition alefvm_mod.F:121