39
40
41
42 USE elbufdef_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "mvsiz_p.inc"
53
54
55
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "com08_c.inc"
59#include "vect01_c.inc"
60#include "param_c.inc"
61
62
63
64 INTEGER IPARG(NPARG,*), IXQ(7,*), MAT(*),IALEFVM_FLG,NEL
66 . pm(npropm,*), v(3,*),x(3,*),dvp(*),vn(*),w(3,*),
67 . vel(*),vd2(*),vdy(*),vdz(*),
68 . rhov(*), pv(*), eiv(*), rev(*), rkv(*),
69 . tv(*),vis(*), bufvois(6,*),ssp_eq(*), vxv(mvsiz), vyv(mvsiz), vzv(mvsiz),
70 . vx(mvsiz), vy(mvsiz), vz(mvsiz),mom(nel,3),rho(mvsiz),vol(mvsiz),
71 . xmomv(mvsiz), ymomv(mvsiz), zmomv(mvsiz)
72 TYPE (ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
73 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
74
75
76
77 INTEGER :: I,II,J,(3),IVOI,ML,N,KTY,KLT,MFT,IS,IX1,IX2,
78 . INOD,ICF(2,4),MV,MT,K
79
80 TYPE(G_BUFEL_) ,POINTER :: GBUF
81 LOGICAL :: bFOUND
82
83 DATA icf/1,2,2,3,3,4,4,1/
84
85 mt = mat(1)
86 DO i=1,nel
87 ii=i+nft
88
89 iad2 = ale_connect%ee_connect%iad_connect(ii)
90 DO j=1,3
91 jj(j) = nel*(j-1)
92 ENDDO
93
94 !
95
96
97 DO j=1,4
98 ivoi=ale_connect%ee_connect%connected(iad2 + j - 1)
99 ml=11
100 IF(ivoi/=0)THEN
101 mv=ixq(1,ivoi)
102 ml=nint(pm(19,mv))
103 ENDIF
104 IF(ml/=11)EXIT
105 ENDDO
106 IF(ml/=11)THEN
107
108
109
110 IF(ivoi<=numelq)THEN
111
112
113
114 bfound = .false.
115 DO n=1,ngroup
116 kty = iparg(5,n)
117 klt = iparg(2,n)
118 mft = iparg(3,n)
119 IF (kty==2 .AND. ivoi<=klt+mft)THEN
120 bfound = .true.
121 EXIT
122 ENDIF
123 ENDDO
124 IF(.NOT.bfound)cycle
125 gbuf => elbuf_tab(n)%GBUF
126
127 is = ivoi-mft-1
128
129 DO k=1,6
130 kk(k) = klt*(k-1)
131 ENDDO
132
133 pv(i) = -third*(gbuf%SIG(kk(1)+is+1)+
134 . gbuf%SIG(kk(2)+is+1)+
135 . gbuf%SIG(kk(3)+is+1))
136
137 eiv(i) = gbuf%EINT(is+1)
138
139 rhov(i) = gbuf%RHO(is+1)
140 IF(ml==6 .OR. ml==17)vis(i) =pm(24,mv)*rhov(i)
141
142 IF(jtur>0)THEN
143 rkv(i) = gbuf%RK(is+1)
144 rev(i) = gbuf%RE(is+1)
145 vis(i)=vis(i)+pm(81,mv)*rkv(i)**2/rev(i)
146 ENDIF
147 IF (gbuf%G_TEMP > 0) THEN
148 tv(i) = gbuf%TEMP(is+1)
149 END IF
150
152 is = ivoi-mft
153 massv = rhov(i)*gbuf%VOL(is)
154 vxv(i) = gbuf%MOM(jj(1) + is)/massv
155 vyv(i) = gbuf%MOM(jj(2) + is)/massv
156 vzv(i) = gbuf%MOM(jj(3) + is)/massv
157 xmomv(i) = gbuf%MOM(jj(1) + is)
158 ymomv(i) = gbuf%MOM(jj(2) + is)
159 zmomv(i) = gbuf%MOM(jj(3) + is)
160 ENDIF
161 ELSE
162
163
164
165 is = ivoi-numelq
166 pv(i) =bufvois(1,is)
167 eiv(i) =bufvois(2,is)
168 rhov(i)=bufvois(3,is)
169 IF(ml==6.OR.ml==17) vis(i) =pm(24,mv)*rhov(i)
170 IF(jtur>0)THEN
171 rkv(i) =bufvois(4,is)
172 rev(i) =bufvois(6,is)
173 vis(i) =vis(i)+pm(81,mv)*rkv(i)**2/rev(i)
174 ENDIF
175 tv(i) = bufvois(5,is)
176
177
178
179
180
181
182 ENDIF
183
184
185
186
187
188 ix1 = ixq(icf(1,j)+1,ii)
189 ix2 = ixq(icf(2,j)+1,ii)
190 yn = (x(2,ix2)-x(2,ix1))
191 zn = (x(3,ix2)-x(3,ix1))
192 fac = one/sqrt(yn**2+zn**2)
193 inod = nint(pm(51,mt))
194
195
196
197 IF(ialefvm_flg <= 1)THEN
198
199
200
201 vdy(i)=half*(v(2,ix1)+v(2,ix2))
202 vdz(i)=half*(v(3,ix1)+v(3,ix2))
203 IF(jale>0)THEN
204 vdy(i)=vdy(i)-half*(w(2,ix1)+w(2,ix2))
205 vdz(i)=vdz(i)-half*(w(3,ix1)+w(3,ix2))
206 ENDIF
207 vd2(i)=vdy(i)**2+vdz(i)**2
208 IF(-vdy(i)*zn+vdz(i)*yn<=zero)THEN
209 vdy(i)=zero
210 vdz(i)=zero
211 ENDIF
212
213
214
215 IF(inod>=1)THEN
216 vn(i)=fac*(v(2,inod)*yn+v(3,inod)*zn)
217 dvp(i)=zero
218 ELSE
219 vn1=-v(2,ix1)*zn+v(3,ix1)*yn
220 vn2=-v(2,ix2)*zn+v(3,ix2)*yn
221 vel(i)=(
min(vn1,vn2))**2
222 vn(i)=half*fac*(vn1+vn2)
223 IF(vn(i)>=zero)vel(i)=zero
224 dvy=v(2,ix2)-v(2,ix1)
225 dvz=v(3,ix2)-v(3,ix1)
226 dvp(i)=fac**2*(dvy*yn+dvz*zn)*dt1
227 IF(n2d==1)THEN
228 dvp(i)=dvp(i)+(v(2,ix1)+v(2,ix2))*dt1/(x(2,ix1)+x(2,ix2))
229 ENDIF
230 ENDIF
231
232
233
234
235 ELSE
236 vdy(i) = half * (vy(i) + vyv(i))
237 vdz(i) = half * (vz(i) + vzv(i))
238 vd2(i) = vdy(i)**2 + vdz(i)**2
239 IF(vdy(i)*yn + vdz(i)*zn <= zero)THEN
240 vdy(i) = zero
241 vdz(i) = zero
242 ENDIF
243
244
245
246 inod=nint(pm(51,mt))
247 IF(inod>=1)THEN
248 vn(i) = v(2,inod)*yn+v(3,inod)*zn
249 dvp(i) = zero
250 ELSE
251 vn(i) = vdy(i)*yn + vdz(i)*zn
252 vel(i) = vn(i)**2
253 IF(vn(i)>=zero) vel(i) = zero
254 dvp(i) = zero
255 ENDIF
256 endif
257
258 ELSE
259 vdy(i) = zero
260 vdz(i) = zero
261 vd2(i) = zero
262 vn(i) = zero
263 dvp(i) = zero
264 pv(i) = zero
265 eiv(i) = zero
266 rhov(i) = zero
267 vis(i) = zero
268 rkv(i) = zero
269 tv(i) = zero
270 rev(i) = zero
271 vxv(i) = zero
272 vyv(i) = zero
273 vzv(i) = zero
274 xmomv(i) = zero
275 ymomv(i) = zero
276 zmomv(i) = zero
277 ENDIF
278
279 enddo
280
281 RETURN
type(alefvm_param_), target alefvm_param