34
35
36
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "mvsiz_p.inc"
46
47
48
49#include "com01_c.inc"
50#include "com04_c.inc"
51#include "vect01_c.inc"
52#include "param_c.inc"
53
54
55
56 INTEGER IXQ(NIXQ,NUMELQ)
57 my_real pm(npropm,nummat), v(3,numnod), x(3,numnod), flux(4,*), flu1(*), fill(*), dfill(*), vol(*), alph(*)
58 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
59
60
61
62 INTEGER MAT(MVSIZ), NC1(MVSIZ), NC2(MVSIZ), NC3(MVSIZ), NC4(MVSIZ), I,II,J,IAD2
64 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
65 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
66 . n1y(mvsiz), n2y(mvsiz), n3y(mvsiz), n4y(mvsiz), n1z(mvsiz), n2z(mvsiz), n3z(mvsiz), n4z(mvsiz),
67 . flux1(mvsiz), flux2(mvsiz), flux3(mvsiz), flux4(mvsiz),
68 . vy1(mvsiz), vy2(mvsiz), vy3(mvsiz), vy4(mvsiz), vz1(mvsiz), vz2(mvsiz), vz3(mvsiz),
69 . vz4(mvsiz), vdy1(mvsiz), vdy2(mvsiz),
70 . vdy3(mvsiz), vdy4(mvsiz), vdz1(mvsiz), vdz2(mvsiz), vdz3(mvsiz), vdz4(mvsiz), upw(mvsiz),
71 . reduc,upwl(4,mvsiz)
72
73
74
75 mat(1) = 1
76 DO i=lft,llt
77 ii
78 mat(i)=ixq(1,ii)
79 nc1(i)=ixq(2,ii)
80 nc2(i)=ixq(3,ii)
81 nc3(i)=ixq(4,ii)
82 nc4(i)=ixq(5,ii)
83
84 y1(i)=x(2,nc1(i))
85 z1(i)=x(3,nc1(i))
86
87 y2(i)=x(2,nc2(i))
88 z2(i)=x(3,nc2(i))
89
90 y3(i)=x(2,nc3(i))
91 z3(i)=x(3,nc3(i))
92
93 y4(i)=x(2,nc4(i))
94 z4(i)=x(3,nc4(i))
95
96 vdy1(i)=v(2,nc1(i))
97 vdz1(i)=v(3,nc1(i))
98
99 vdy2(i)=v(2,nc2(i))
100 vdz2(i)=v(3,nc2(i))
101
102 vdy3(i)=v(2,nc3(i))
103 vdz3(i)=v(3,nc3(i))
104
105 vdy4(i)=v(2,nc4(i))
106 vdz4(i)=v(3,nc4(i))
107 ENDDO
108
109
110
111 DO i=lft,llt
112 vy1(i)=half*(vdy1(i)+vdy2(i))
113 vy2(i)=half*(vdy2(i)+vdy3(i))
114 vy3(i)=half*(vdy3(i)+vdy4(i))
115 vy4(i)=half*(vdy4(i)+vdy1(i))
116 vz1(i)=half*(vdz1(i)+vdz2(i))
117 vz2(i)=half*(vdz2(i)+vdz3(i))
118 vz3(i)=half*(vdz3(i)+vdz4(i))
119 vz4(i)=half*(vdz4(i)+vdz1(i))
120 ENDDO
121
122
123
124 DO i=lft,llt
125 n1y(i)= (z2(i)-z1(i))
126 n1z(i)=-(y2(i)-y1(i))
127
128 n2y(i)= (z3(i)-z2(i))
129 n2z(i)=-(y3(i)-y2(i))
130
131 n3y(i)= (z4(i)-z3(i))
132 n3z(i)=-(y4(i)-y3(i))
133
134 n4y(i)= (z1(i)-z4(i))
135 n4z(i)=-(y1(i)-y4(i))
136 ENDDO
137 IF(n2d == 1)THEN
138 DO i=lft,llt
139 n1y(i) = n1y(i)*(y1(i)+y2(i))*half
140 n1z(i) = n1z(i)*(y1(i)+y2(i))*half
141 n2y(i) = n2y(i)*(y2(i)+y3(i))*half
142 n2z(i) = n2z(i)*(y2(i)+y3(i))*half
143 n3y(i) = n3y(i)*(y3(i)+y4(i))*half
144 n3z(i) = n3z(i)*(y3(i)+y4(i))*half
145 n4y(i) = n4y(i)*(y1(i)+y4(i))*half
146 n4z(i) = n4z(i)*(y1(i)+y4(i))*half
147 ENDDO
148 ENDIF
149
150
151
152 DO i=lft,llt
153 flux1(i)=(vy1(i)*n1y(i)+vz1(i)*n1z(i))
154 flux2(i)=(vy2(i)*n2y(i)+vz2(i)*n2z(i))
155 flux3(i)=(vy3(i)*n3y(i)+vz3(i)*n3z(i))
156 flux4(i)=(vy4(i)*n4y(i)+vz4(i)*n4z(i))
157 ENDDO
158
159
160
161 IF(nint(pm(19,mat(1))) == 51)THEN
162 DO i=lft,llt
163 flux(1,i)=flux1(i)
164 flux(2,i)=flux2(i)
165 flux(3,i)=flux3(i)
166 flux(4,i)=flux4(i)
167 ENDDO
168 RETURN
169 ENDIF
170
171
172
173 DO j=1,4
174 DO i=lft,llt
175 upwl(j,i) = pm(16,mat(i))
176 ENDDO
177 ENDDO
178
179
180
181
182
183 DO i=lft,llt
184 iad2 = ale_connect%ee_connect%iad_connect(i + nft)
185 reduc=pm(92,mat(i))
186
187 ii=ale_connect%ee_connect%connected(iad2 + 1 - 1)
188 IF(ii == 0)THEN
189 flux1(i)=flux1(i)*reduc
190 ENDIF
191
192 ii=ale_connect%ee_connect%connected(iad2 + 2 - 1)
193 IF(ii == 0)THEN
194 flux2(i)=flux2(i)*reduc
195 ENDIF
196
197 ii=ale_connect%ee_connect%connected(iad2 + 3 - 1)
198 IF(ii == 0)THEN
199 flux3(i)=flux3(i)*reduc
200 ENDIF
201
202 ii=ale_connect%ee_connect%connected(iad2 + 4 - 1)
203 IF(ii == 0)THEN
204 flux4(i)=flux4(i)*reduc
205 ENDIF
206
207 ENDDO
208
209
210
211 IF(jmult/=0)THEN
212 DO i=lft,llt
213 upw(i) =pm(16,mat(i))
214 ENDDO
215 CALL amulf2(fill,dfill,flux,flu1,vol,ale_connect,alph,
216 . flux1, flux2, flux3, flux4, upw,
217 . nc1, nc2, nc3, nc4)
218 ELSE
219 DO i=lft,llt
220 flux(1,i)= flux1(i) - upwl(1,i) * abs(flux1(i))
221 flux(2,i)= flux2(i) - upwl(2,i) * abs(flux2(i))
222 flux(3,i)= flux3(i) - upwl(3,i) * abs(flux3(i))
223 flux(4,i)= flux4(i) - upwl(4,i) * abs(flux4(i))
224 flu1(i) = flux1(i) + upwl(1,i) * abs(flux1(i))
225 . + flux2(i) + upwl(2,i) * abs(flux2(i))
226 . + flux3(i) + upwl(3,i) * abs(flux3(i))
227 . + flux4(i) + upwl(4,i) * abs(flux4(i))
228 ENDDO
229 ENDIF
230
231 RETURN
subroutine amulf2(fill, dfill, flux, flu1, vol, ale_connect, alpv, flux1, flux2, flux3, flux4, upw, nc1, nc2, nc3, nc4)