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