35
36
37
39 use element_mod , only : nixq
40
41
42
43#include "implicit_f.inc"
44
45
46
47#include "mvsiz_p.inc"
48
49
50
51#include "com01_c.inc"
52#include "com04_c.inc"
53#include "vect01_c.inc"
54#include "param_c.inc"
55
56
57
58 INTEGER IXQ(NIXQ,NUMELQ), ITRIMAT,IFLG,IAD2
59 my_real pm(npropm,nummat), flux(4,*), flu1(*),ddvol(*),qmv(8,*), x(3,numnod)
60 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
61
62
63
64 INTEGER I,J,II,MAT(MVSIZ)
65 my_real reduc,qmv5,qmv6,qmv7,qmv8,
66 . flux1(mvsiz), flux2(mvsiz), flux3(mvsiz), flux4(mvsiz),
67 . upwl(4,mvsiz), r1, r2, r3, r4
68
69 DO i=lft,llt
70 flux1(i) = flux(1,i)
71 flux2(i) = flux(2,i)
72 flux3(i) = flux(3,i)
73 flux4(i) = flux(4,i)
74 ENDDO
75
76 DO i=lft,llt
77 ii=i+nft
78 mat(i)=ixq(1,ii)
79 ENDDO
80
81
82
83 DO j=1,4
84 DO i=lft,llt
85 upwl(j,i)=pm(16,mat(i))
86 ENDDO
87 ENDDO
88
89
90
91
92
93 DO i=lft,llt
94 iad2 = ale_connect%ee_connect%iad_connect(i + nft)
95 reduc=pm(92,mat(i))
96 ii=ale_connect%ee_connect%connected(iad2 + 1 - 1)
97 IF(ii == 0)THEN
98 flux1(i)=flux1(i)*reduc
99 ENDIF
100
101 ii=ale_connect%ee_connect%connected(iad2 + 2 - 1)
102 IF(ii == 0)THEN
103 flux2(i)=flux2(i)*reduc
104 ENDIF
105
106 ii=ale_connect%ee_connect%connected(iad2 + 3 - 1)
107 IF(ii == 0)THEN
108 flux3(i)=flux3(i)*reduc
109 ENDIF
110
111 ii=ale_connect%ee_connect%connected(iad2 + 4 - 1)
112 IF(ii == 0)THEN
113 flux4(i)=flux4(i)*reduc
114 ENDIF
115
116 ENDDO
117
118 IF(iflg == 1)THEN
119 IF (n2d == 1) THEN
120
121 DO i=lft,llt
122 ii = i + nft
123 flux(1,i) = flux1(i)-upwl(1,i)*abs(flux1(i))
124 flux(2,i) = flux2(i)-upwl(2,i)*abs(flux2(i))
125 flux(3,i) = flux3(i)-upwl(3,i)*abs(flux3(i))
126 flux(4,i) = flux4(i)-upwl(4,i)*abs(flux4(i))
127
128
129 qmv(5,i) = flux1(i)+upwl(1,i)*abs(flux1(i))
130 qmv(6,i) = flux2(i)+upwl(2,i)*abs(flux2(i))
131 qmv(7,i) = flux3(i)+upwl(3,i)*abs(flux3(i))
132 qmv(8,i) = flux4(i)+upwl(4,i)*abs(flux4(i))
133
134 flu1(i) = qmv(5,i) + qmv(6,i) + qmv(7,i) + qmv(8,i)
135
136 r1 = half * (x(2, ixq(2, ii)) + x(2, ixq(3, ii)))
137 r2 = half * (x(2, ixq(3, ii)) + x(2, ixq(4, ii)))
138 r3 = half * (x(2, ixq(4, ii)) + x(2, ixq(5, ii)))
139 r4 = half * (x(2, ixq(5, ii)) + x(2, ixq(2, ii)))
140
141
142 IF (r1 /= zero) qmv(5,i) = qmv(5,i) / r1
143 IF (r2 /= zero) qmv(6,i) = qmv(6,i) / r2
144 IF (r3 /= zero) qmv(7,i) = qmv(7,i) / r3
145 IF (r4 /= zero) qmv(8,i) = qmv(8,i) / r4
146 ENDDO
147 ELSE
148 DO i=lft,llt
149 flux(1,i) = flux1(i)-upwl(1,i)*abs(flux1(i))
150 flux(2,i) = flux2(i)-upwl(2,i)*abs(flux2(i))
151 flux(3,i) = flux3(i)-upwl(3,i)*abs(flux3(i))
152 flux(4,i) = flux4(i)-upwl(4,i)*abs(flux4(i))
153
154 qmv(5,i) = flux1(i)+upwl(1,i)*abs(flux1(i))
155 qmv(6,i) = flux2(i)+upwl(2,i)*abs(flux2(i))
156 qmv(7,i) = flux3(i)+upwl(3,i)*abs(flux3(i))
157 qmv(8,i) = flux4(i)+upwl(4,i)*abs(flux4(i))
158
159 flu1(i) = qmv(5,i) + qmv(6,i) + qmv(7,i) + qmv(8,i)
160 ENDDO
161 ENDIF
162 ELSE
163 DO i=lft,llt
164 flux(1,i) = flux1(i)-upwl(1,i)*abs(flux1(i))
165 flux(2,i) = flux2(i)-upwl(2,i)*abs(flux2(i))
166 flux(3,i) = flux3(i)-upwl(3,i)*abs(flux3(i))
167 flux(4,i) = flux4(i)-upwl(4,i)*abs(flux4(i))
168
169 qmv5 = flux1(i)+upwl(1,i)*abs(flux1(i))
170 qmv6 = flux2(i)+upwl(2,i)*abs(flux2(i
171 qmv7 = flux3(i)+upwl
172 qmv8 = flux4(i)+upwl(4,i)*abs(flux4(i))
173
174 flu1(i) = qmv5 + qmv6 + qmv7 + qmv8
175 ENDDO
176 END IF
177
178 IF(itrimat > 0)THEN
179 DO i=lft,llt
180 ddvol(i)=half * ( flu1(i)+flux(1,i)+flux(2,i)+flux(3,i)+flux(4,i) )
181 ENDDO
182 ENDIF
183
184 RETURN