OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
inimom_fvm.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!|| inimom_fvm ../starter/source/elements/solid/solide/inimom_fvm.F
25!||--- called by ------------------------------------------------------
26!|| sinit3 ../starter/source/elements/solid/solide/sinit3.F
27!||--- calls -----------------------------------------------------
28!|| finter ../starter/source/tools/curve/finter.F
29!||--- uses -----------------------------------------------------
30!||====================================================================
31 SUBROUTINE inimom_fvm(
32 . V , RHO, VOL , MOM ,IXS ,
33 . IPM, MAT, IPARG1, NPF ,TF ,
34 . PM , SSP, SIG , NEL
35 . )
36C-----------------------------------------------
37C M o d u l e s
38C-----------------------------------------------
39 USE alefvm_mod
40C-----------------------------------------------
41C I m p l i c i t T y p e s
42C-----------------------------------------------
43#include "implicit_f.inc"
44C-----------------------------------------------
45C G l o b a l P a r a m e t e r s
46C-----------------------------------------------
47#include "mvsiz_p.inc"
48C-----------------------------------------------
49C C o m m o n B l o c k s
50C-----------------------------------------------
51#include "vect01_c.inc"
52#include "param_c.inc"
53#include "inter22.inc"
54C-----------------------------------------------
55C D u m m y A r g u m e n t s
56C-----------------------------------------------
57 INTEGER :: NEL
58 my_real :: V(3,*) , RHO(*) , VOL(*) , MOM(NEL,3) , TF(*) , PM(NPROPM,*) , SSP(*), SIG(NEL,6)
59 INTEGER :: IXS(NIXS,*), IPM(NPROPMI,*), MAT(MVSIZ), IPARG1(NPARG), NPF(*)
60C-----------------------------------------------
61C D e s c r i p t i o n
62C-----------------------------------------------
63C
64C +------------+------------+ -----> v2(1:3) => q2(1:3) = RHO*V/4 * v2(1:3)
65C | | |
66C | | V/4 |
67C | q1 | RHO |
68C | | q2(1:3) |
69C | | |
70C +------------+------------+ q_elem(1:3) = sum( qi ,i=1..4)
71C | | | ______________________________
72C | | |
73C | q4 | q3 |
74C | | |
75C | | |
76C +------------+------------+
77C
78C ACONVE()
79C Warning : rho * vel [in] ---------> rho*V * vel [out]
80C Here rho*vel are stored.
81C
82C-----------------------------------------------
83C L o c a l V a r i a b l e s
84C-----------------------------------------------
85 INTEGER :: I, J, II, IALEFVM_FLG,IALEL,IVxFUN, IVyFUN, IVzFUN, MX, MLW, ITYP
86 my_real :: SUBVOL, Vcell(3), Vnod(3,8),
87 . VX1(MVSIZ), VX2(MVSIZ), VX3(MVSIZ), VX4(MVSIZ), VX5(MVSIZ), VX6(MVSIZ), VX7(MVSIZ), VX8(MVSIZ),
88 . VY1(MVSIZ), VY2(MVSIZ), VY3(MVSIZ), VY4(MVSIZ), VY5(MVSIZ), VY6(MVSIZ), VY7(MVSIZ), VY8(MVSIZ),
89 . vz1(mvsiz), vz2(mvsiz), vz3(mvsiz), vz4(mvsiz), vz5(mvsiz), vz6(mvsiz), vz7(mvsiz), vz8(mvsiz),
90 . vx0 , vy0 , vz0,
91 . vx , vy , vz ,
92 . dydx , t0
93 my_real,EXTERNAL :: finter
94C-----------------------------------------------
95C P r e - C o n d i t i o n s
96C-----------------------------------------------
97C Check activation flag for FVM momentum
98
99 ialel = iparg1(7)+iparg1(11)
100 IF(ialel == 0)RETURN
101 IF(alefvm_param%IEnabled==0)RETURN !global unplug if option not present in input file
102
103C-----------------------------------------------
104C S o u r c e L i n e s
105C-----------------------------------------------
106
107 !-----------------------------------------
108 ! IF DEFINED /ALE/SOLVER/
109 !-----------------------------------------
110 !automatic FVM SOLVER for ALE
111 IF(int22>0)THEN
112 IF(alefvm_param%ISOLVER<=1) THEN
113 alefvm_param%ISOLVER=5
114 IF(alefvm_param%IPRINT_1==0)THEN
115 !print *, "** WARNING INT22 : UNDEFINED /ALE/SOLVER CARD"
116 !print *, " ENABLING IT AUTOMATICALLY WITH IMOM_VEL=5"
117 alefvm_param%IPRINT_1 = 1
118 ENDIF
119 ELSEIF(alefvm_param%ISOLVER/=5)THEN
120 alefvm_param%ISOLVER=5
121 IF(alefvm_param%IPRINT_2==0)THEN
122 print *, "** warning int22 : /ale/solver card"
123 print *, " recommended VALUE is imom_vel=5"
124 ALEFVM_Param%IPRINT_2 = 1
125 ENDIF
126 ENDIF
127 ENDIF
128
129 IF(ALEFVM_Param%ISOLVER>0)THEN
130 IPM(251,MAT(1)) = ALEFVM_Param%ISOLVER
131 ! 0: Default = 1 expect if /ALE/MAT or /EULER/MAT has IFROM flag defined.
132 ! 1 : FEM
133 ! 2 : FVM U average
134 ! 3 : FVM rho.U average
135 ! 4 : FVM rho.c.U average
136 ! 5 : Godunov Acoustic
137 ! 6 : experimental
138 ENDIF
139
140
141 MLW = IPARG1(1)
142 !-----------------------------------------
143
144 !-----------------------------------------
145 IF(MLW /= 11) THEN
146
147 DO I=LFT,LLT
148 II = I+NFT
149 !---nod-1
150 VX1(I) = V(1,IXS(2,II))
151 VY1(I) = V(2,IXS(2,II))
152 VZ1(I) = V(3,IXS(2,II))
153 !---nod-2
154 VX2(I) = V(1,IXS(3,II))
155 VY2(I) = V(2,IXS(3,II))
156 VZ2(I) = V(3,IXS(3,II))
157 !---nod-3
158 VX3(I) = V(1,IXS(4,II))
159 VY3(I) = V(2,IXS(4,II))
160 VZ3(I) = V(3,IXS(4,II))
161 !---nod-4
162 VX4(I) = V(1,IXS(5,II))
163 VY4(I) = V(2,IXS(5,II))
164 VZ4(I) = V(3,IXS(5,II))
165 !---nod-5
166 VX5(I) = V(1,IXS(6,II))
167 VY5(I) = V(2,IXS(6,II))
168 VZ5(I) = V(3,IXS(6,II))
169 !---nod-6
170 VX6(I) = V(1,IXS(7,II))
171 VY6(I) = V(2,IXS(7,II))
172 VZ6(I) = V(3,IXS(7,II))
173 !---nod-7
174 VX7(I) = V(1,IXS(8,II))
175 VY7(I) = V(2,IXS(8,II))
176 VZ7(I) = V(3,IXS(8,II))
177 !---nod-8
178 VX8(I) = V(1,IXS(9,II))
179 VY8(I) = V(2,IXS(9,II))
180 VZ8(I) = V(3,IXS(9,II))
181 !---cell_velocity---!
182 Vcell(1) = ONE_OVER_8 * (VX1(I)+VX2(I)+VX3(I)+VX4(I)+VX5(I)+VX6(I)+VX7(I)+VX8(I))
183 Vcell(2) = ONE_OVER_8 * (VY1(I)+VY2(I)+VY3(I)+VY4(I)+VY5(I)+VY6(I)+VY7(I)+VY8(I))
184 Vcell(3) = ONE_OVER_8 * (VZ1(I)+VZ2(I)+VZ3(I)+VZ4(I)+VZ5(I)+VZ6(I)+VZ7(I)+VZ8(I))
185 !---momentum---!
186 !MOM(I,1:3) = RHO(I) * Vcell(1:3)
187 !rho*VOL* VEL in aconve. VEL is needed before for FLUXES
188 MOM(I,1) = Vcell(1)*RHO(I)
189 MOM(I,2) = Vcell(2)*RHO(I)
190 MOM(I,3) = Vcell(3)*RHO(I)
191 ENDDO
192
193 !write(*,*) "momentum from inimom_fvm.f"
194 DO I=LFT,LLT
195 II = I+NFT
196 ALEFVM_Buffer%FCELL(1,II) = MOM(I,1)
197 ALEFVM_Buffer%FCELL(2,II) = MOM(I,2)
198 ALEFVM_Buffer%FCELL(3,II) = MOM(I,3)
199 ALEFVM_Buffer%FCELL(4,II) = RHO(I)
200 ALEFVM_Buffer%FCELL(5,II) = SSP(I)
201 ALEFVM_Buffer%FCELL(6,II) = -THIRD*(SIG(I,1)+SIG(I,2)+SIG(I,3))
202 ENDDO
203
204 !-----------------------------------------
205 ! MATERIAL BOUNDARY : IMPOSED
206 !-----------------------------------------
207 ELSE
208
209 !MLW = 11
210 MX = MAT(LFT)
211 IVxFUN = IPM(18,MX)
212 IVyFUN = IPM(19,MX)
213 IVzFUN = IPM(20,MX)
214 ITYP = PM(50,MX)
215 Vx0 = PM(101,MX)
216 Vy0 = PM(102,MX)
217 Vz0 = PM(103,MX)
218
219 IF(ITYP == 2)THEN
220 T0 = ZERO
221
222 IF(IVxFUN>0)THEN
223 Vx = Vx0*FINTER(IVxFUN,T0,NPF,TF,DYDX)
224 ELSE
225 Vx = Vx0
226 ENDIF
227
228 IF(IVyFUN>0)THEN
229 Vy = Vy0*FINTER(IVyFUN,T0,NPF,TF,DYDX)
230 ELSE
231 Vy = Vy0
232 ENDIF
233
234 IF(IVzFUN>0)THEN
235 Vz = Vz0*FINTER(IVzFUN,T0,NPF,TF,DYDX)
236 ELSE
237 Vz = Vz0
238 ENDIF
239
240 DO I=LFT,LLT
241 II = I+NFT
242 MOM(I,1) = Vx*RHO(I)
243 MOM(I,2) = Vy*RHO(I)
244 MOM(I,3) = Vz*RHO(I)
245 ALEFVM_Buffer%FCELL(1,II) = MOM(I,1)
246 ALEFVM_Buffer%FCELL(2,II) = MOM(I,2)
247 ALEFVM_Buffer%FCELL(3,II) = MOM(I,3)
248 ALEFVM_Buffer%FCELL(4,II) = RHO(I)
249 ALEFVM_Buffer%FCELL(5,II) = SSP(I)
250 ALEFVM_Buffer%FCELL(6,II) = -THIRD*(SIG(I,1)+SIG(I,2)+SIG(I,3))
251 ENDDO
252 ELSEIF(ITYP == 3)THEN
253 T0 = ZERO
254 Vx=ZERO
255 Vy=ZERO
256 Vz=ZERO
257 DO I=LFT,LLT
258 II = I+NFT
259 MOM(I,1) = Vx*RHO(I)
260 MOM(I,2) = Vy*RHO(I)
261 MOM(I,3) = Vz*RHO(I)
262 ALEFVM_Buffer%FCELL(1,II) = MOM(I,1)
263 ALEFVM_Buffer%FCELL(2,II) = MOM(I,2)
264 ALEFVM_Buffer%FCELL(3,II) = MOM(I,3)
265 ALEFVM_Buffer%FCELL(4,II) = RHO(I)
266 ALEFVM_Buffer%FCELL(5,II) = SSP(I)
267 ALEFVM_Buffer%FCELL(6,II) = -THIRD*(SIG(I,1)+SIG(I,2)+SIG(I,3))
268 ENDDO
269 ENDIF
270
271 ENDIF
272
273
274C-----------------------------------------------
275 RETURN
276 END
subroutine inimom_fvm(v, rho, vol, mom, ixs, ipm, mat, iparg1, npf, tf, pm, ssp, sig, nel)
Definition inimom_fvm.F:36
type(alefvm_param_), target alefvm_param
Definition alefvm_mod.F:121