OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ale51_upwind2.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!|| ale51_upwind2 ../engine/source/ale/ale51/ale51_upwind2.F
25!||--- called by ------------------------------------------------------
26!|| afluxt ../engine/source/ale/ale51/afluxt.F
27!|| ale51_finish ../engine/source/ale/ale51/ale51_finish.F
28!|| ale51_init ../engine/source/ale/ale51/ale51_init.F
29!||--- uses -----------------------------------------------------
30!|| ale_connectivity_mod ../common_source/modules/ale/ale_connectivity_mod.F
31!||====================================================================
32 SUBROUTINE ale51_upwind2(PM,X,IXQ,FLUX,FLU1,ALE_CONNECT,
33 . ITRIMAT,DDVOL,QMV,IFLG)
34C-----------------------------------------------
35C M o d u l e s
36C-----------------------------------------------
38C-----------------------------------------------
39C I m p l i c i t T y p e s
40C-----------------------------------------------
41#include "implicit_f.inc"
42C-----------------------------------------------
43C G l o b a l P a r a m e t e r s
44C-----------------------------------------------
45#include "mvsiz_p.inc"
46C-----------------------------------------------
47C C o m m o n B l o c k s
48C-----------------------------------------------
49#include "com01_c.inc"
50#include "com04_c.inc"
51#include "vect01_c.inc"
52#include "param_c.inc"
53C-----------------------------------------------
54C D u m m y A r g u m e n t s
55C-----------------------------------------------
56 INTEGER IXQ(NIXQ,NUMELQ), ITRIMAT,IFLG,IAD2
57 my_real pm(npropm,nummat), flux(4,*), flu1(*),ddvol(*),qmv(8,*), x(3,numnod)
58 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
59C-----------------------------------------------
60C L o c a l V a r i a b l e s
61C-----------------------------------------------
62 INTEGER I,J,II,MAT(MVSIZ)
63 my_real reduc,qmv5,qmv6,qmv7,qmv8,
64 . flux1(mvsiz), flux2(mvsiz), flux3(mvsiz), flux4(mvsiz),
65 . upwl(4,mvsiz), r1, r2, r3, r4
66C-----------------------------------------------
67 DO i=lft,llt
68 flux1(i) = flux(1,i)
69 flux2(i) = flux(2,i)
70 flux3(i) = flux(3,i)
71 flux4(i) = flux(4,i)
72 ENDDO
73C-----------------------------------------------
74 DO i=lft,llt
75 ii=i+nft
76 mat(i)=ixq(1,ii)
77 ENDDO
78C-----------------------------------------------
79C UPWIND
80C-----------------------------------------------
81 DO j=1,4
82 DO i=lft,llt
83 upwl(j,i)=pm(16,mat(i))
84 ENDDO
85 ENDDO
86C
87 !======================================================!
88 ! BOUNDARY FACE : no volume flux by default !
89 ! slip wall bc !
90 !======================================================!
91 DO i=lft,llt
92 iad2 = ale_connect%ee_connect%iad_connect(i + nft)
93 reduc=pm(92,mat(i))
94 ii=ale_connect%ee_connect%connected(iad2 + 1 - 1)
95 IF(ii == 0)THEN
96 flux1(i)=flux1(i)*reduc
97 ENDIF
98C
99 ii=ale_connect%ee_connect%connected(iad2 + 2 - 1)
100 IF(ii == 0)THEN
101 flux2(i)=flux2(i)*reduc
102 ENDIF
103C
104 ii=ale_connect%ee_connect%connected(iad2 + 3 - 1)
105 IF(ii == 0)THEN
106 flux3(i)=flux3(i)*reduc
107 ENDIF
108C
109 ii=ale_connect%ee_connect%connected(iad2 + 4 - 1)
110 IF(ii == 0)THEN
111 flux4(i)=flux4(i)*reduc
112 ENDIF
113C
114 ENDDO
115C
116 IF(iflg == 1)THEN
117 IF (n2d == 1) THEN
118 !!! Planar integration of momentum when 2D axi
119 DO i=lft,llt
120 ii = i + nft
121 flux(1,i) = flux1(i)-upwl(1,i)*abs(flux1(i))
122 flux(2,i) = flux2(i)-upwl(2,i)*abs(flux2(i))
123 flux(3,i) = flux3(i)-upwl(3,i)*abs(flux3(i))
124 flux(4,i) = flux4(i)-upwl(4,i)*abs(flux4(i))
125C
126 !!! Divide by mean radius
127 qmv(5,i) = flux1(i)+upwl(1,i)*abs(flux1(i))
128 qmv(6,i) = flux2(i)+upwl(2,i)*abs(flux2(i))
129 qmv(7,i) = flux3(i)+upwl(3,i)*abs(flux3(i))
130 qmv(8,i) = flux4(i)+upwl(4,i)*abs(flux4(i))
131C
132 flu1(i) = qmv(5,i) + qmv(6,i) + qmv(7,i) + qmv(8,i)
133
134 r1 = half * (x(2, ixq(2, ii)) + x(2, ixq(3, ii)))
135 r2 = half * (x(2, ixq(3, ii)) + x(2, ixq(4, ii)))
136 r3 = half * (x(2, ixq(4, ii)) + x(2, ixq(5, ii)))
137 r4 = half * (x(2, ixq(5, ii)) + x(2, ixq(2, ii)))
138
139 !!! Beware of r=0 axis
140 IF (r1 /= zero) qmv(5,i) = qmv(5,i) / r1
141 IF (r2 /= zero) qmv(6,i) = qmv(6,i) / r2
142 IF (r3 /= zero) qmv(7,i) = qmv(7,i) / r3
143 IF (r4 /= zero) qmv(8,i) = qmv(8,i) / r4
144 ENDDO
145 ELSE
146 DO i=lft,llt
147 flux(1,i) = flux1(i)-upwl(1,i)*abs(flux1(i))
148 flux(2,i) = flux2(i)-upwl(2,i)*abs(flux2(i))
149 flux(3,i) = flux3(i)-upwl(3,i)*abs(flux3(i))
150 flux(4,i) = flux4(i)-upwl(4,i)*abs(flux4(i))
151
152 qmv(5,i) = flux1(i)+upwl(1,i)*abs(flux1(i))
153 qmv(6,i) = flux2(i)+upwl(2,i)*abs(flux2(i))
154 qmv(7,i) = flux3(i)+upwl(3,i)*abs(flux3(i))
155 qmv(8,i) = flux4(i)+upwl(4,i)*abs(flux4(i))
156
157 flu1(i) = qmv(5,i) + qmv(6,i) + qmv(7,i) + qmv(8,i)
158 ENDDO
159 ENDIF
160 ELSE
161 DO i=lft,llt
162 flux(1,i) = flux1(i)-upwl(1,i)*abs(flux1(i))
163 flux(2,i) = flux2(i)-upwl(2,i)*abs(flux2(i))
164 flux(3,i) = flux3(i)-upwl(3,i)*abs(flux3(i))
165 flux(4,i) = flux4(i)-upwl(4,i)*abs(flux4(i))
166
167 qmv5 = flux1(i)+upwl(1,i)*abs(flux1(i))
168 qmv6 = flux2(i)+upwl(2,i)*abs(flux2(i))
169 qmv7 = flux3(i)+upwl(3,i)*abs(flux3(i))
170 qmv8 = flux4(i)+upwl(4,i)*abs(flux4(i))
171
172 flu1(i) = qmv5 + qmv6 + qmv7 + qmv8
173 ENDDO
174 END IF
175C
176 IF(itrimat > 0)THEN
177 DO i=lft,llt
178 ddvol(i)=half * ( flu1(i)+flux(1,i)+flux(2,i)+flux(3,i)+flux(4,i) )
179 ENDDO
180 ENDIF
181C-----------------------------------------------
182 RETURN
183 END
184C
subroutine ale51_upwind2(pm, x, ixq, flux, flu1, ale_connect, itrimat, ddvol, qmv, iflg)
#define my_real
Definition cppsort.cpp:32