36 USE ebcs_mod
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "com08_c.inc"
46#include "scr11_c.inc"
47
48
49
50 INTEGER ,NOD,ISEG(NSEG),LISTE(NOD),IRECT(4,NSEG)
52 . a(3,*),x(3,*),v(3,*),la(3,nod),
53 . vo(nod),po(nod),fv(*),ms(*),stifn(*)
54 TYPE(t_ebcs_tab), TARGET, INTENT(IN) :: EBCS_TAB
55 INTEGER, INTENT(IN) :: IEBCS
56 TYPE(t_segvar) :: SEGVAR
57
58
59
60 INTEGER IPRES,IRHO,I,IS,KSEG,N1,N2,N3,N4,NG1,NG2,NG3,NG4,
61 . N,IENER
63 . orient,pres,rho,c,lcar,r1,r2,roc,alp,fac,
64 . x13,y13,z13,x24,y24,z24,nx,ny,nz,s,
65 . roou,enou,vmx,vmy,vmz,fluxi,fluxo,vn,pn,du,dp,p,
66 . ener,dpdv
67 CLASS(t_ebcs), POINTER :: EBCS
68
69
70 ebcs => ebcs_tab%tab(iebcs)%poly
71 c = zero
72 lcar = zero
73 ener = zero
74 pres = zero
75 rho = zero
76 r1 = zero
77 r2 = zero
78 ipres = 0
79 irho = 0
80 iener = 0
81 SELECT TYPE (ebcs)
82 TYPE IS (t_ebcs_pres)
83 ipres=ebcs%ipres
84 irho=ebcs%irho
85 iener=ebcs%iener
86 IF(ipres>0)THEN
87 pres=ebcs%pres*fv(ipres)
88 ELSE
89 pres=ebcs%pres
90 ENDIF
91 IF(irho>0)THEN
92 rho=ebcs%rho*fv(irho)
93 ELSE
94 rho=ebcs%rho
95 ENDIF
96 IF(iener>0)THEN
97 ener=ebcs%ener*fv(iener)
98 ELSE
99 ener=ebcs%ener
100 ENDIF
101 c=ebcs%c
102 lcar=ebcs%lcar
103 r1=ebcs%r1
104 r2=ebcs%r2
105 TYPE IS (t_ebcs_valvin)
106 ipres=ebcs%ipres
107 irho=ebcs%irho
108 iener=ebcs%iener
109 IF(ipres>0)THEN
110 pres=ebcs%pres*fv(ipres)
111 ELSE
112 pres=ebcs%pres
113 ENDIF
114 IF(irho>0)THEN
115 rho=ebcs%rho*fv(irho)
116 ELSE
117 rho=ebcs%rho
118 ENDIF
119 IF(iener>0)THEN
120 ener=ebcs%ener*fv(iener)
121 ELSE
122 ener=ebcs%ener
123 ENDIF
124 c=ebcs%c
125 lcar=ebcs%lcar
126 r1=ebcs%r1
127 r2=ebcs%r2
128 TYPE IS (t_ebcs_valvout)
129 ipres=ebcs%ipres
130 irho=ebcs%irho
131 iener=ebcs%iener
132 IF(ipres>0)THEN
133 pres=ebcs%pres*fv(ipres)
134 ELSE
135 pres=ebcs%pres
136 ENDIF
137 IF(irho>0)THEN
138 rho=ebcs%rho*fv(irho)
139 ELSE
140 rho=ebcs%rho
141 ENDIF
142 IF(iener>0)THEN
143 ener=ebcs%ener*fv(iener)
144 ELSE
145 ener=ebcs%ener
146 ENDIF
147 c=ebcs%c
148 lcar=ebcs%lcar
149 r1=ebcs%r1
150 r2=ebcs%r2
151 END SELECT
152
153 roc=rho*c
154
155
156
157 alp=zero
158 IF (lcar>0)alp=c*dt1/lcar
159
160 DO i=1,nod
161 la(1,i)=zero
162 la(2,i)=zero
163 la(3,i)=zero
164 ENDDO
165 DO is=1,nseg
166 kseg=abs(iseg(is))
167 orient=float(iseg(is)/kseg)
168 n1=irect(1,is)
169 n2=irect(2,is)
170 n3=irect(3,is)
171 n4=irect(4,is)
172 IF(n4==0 .OR. n4==n3) THEN
173 fac=one_over_6*orient
174 n4=n3
175 ELSE
176 fac=one_over_8*orient
177 ENDIF
178
179 ng1=liste(n1)
180 ng2=liste(n2)
181 ng3=liste(n3)
182 ng4=liste(n4)
183 x13=x(1,ng3)-x(1,ng1)
184 y13=x(2,ng3)-x(2,ng1)
185 z13=x(3,ng3)-x(3,ng1)
186 x24
187 y24=x(2,ng4)-x(2,ng2)
188 z24=x(3,ng4)-x(3,ng2)
189
190 nx=(y13*z24-z13*y24)*fac
191 ny=(z13*x24-x13*z24)*fac
192 nz=(x13*y24-y13*x24)*fac
193
194 la(1,n1)=la(1,n1)+nx
195 la(2,n1)=la(2,n1)+ny
196 la(3,n1)=la(3,n1)+nz
197 la(1,n2)=la(1,n2)+nx
198 la(2,n2)=la(2,n2)+ny
199 la(3,n2)=la(3,n2)+nz
200 la(1,n3)=la(1,n3)+nx
201 la(2,n3)=la(2,n3)+ny
202 la(3,n3)=la(3,n3)+nz
203
204 vmx=v(1,ng1)+v(1,ng2)+v(1,ng3)
205 vmy=v(2,ng1)+v(2,ng2)+v(2,ng3)
206 vmz=v(3,ng1)+v(3,ng2)+v(3,ng3)
207 IF(n4/=n3) THEN
208 la(1,n4)=la(1,n4)+nx
209 la(2,n4)=la(2,n4)+ny
210 la(3,n4)=la(3,n4)+nz
211 vmx=vmx+v(1,ng4)
212 vmy=vmy+v(2,ng4)
213 vmz=vmz+v(3,ng4)
214 ENDIF
215
216
217
218 roou = segvar%RHO(kseg)
219 enou = segvar%EINT(kseg)
220
221 fluxo=(vmx*nx+vmy*ny+vmz*nz)*dt1
222 fluxi=
min(fluxo,zero)
223 fluxo=
max(fluxo,zero)
224 dmf=dmf-fluxo*roou-fluxi*rho
225 def=def-fluxo*enou-fluxi*ener
226
227
228
229 segvar%RHO(kseg)=rho
230 segvar%EINT(kseg)=ener
231 ENDDO
232
233 DO i=1,nod
234 n=liste(i)
235 s=sqrt(la(1,i)**2+la(2,i)**2+la(3,i)**2)
236 vn=(v(1,n)*la(1,i)+v(2,n)*la(2,i)+v(3,n)*la(3,i))/s
237
238 pn=pres+r1*vn+r2*vn*abs(vn)
239 dpdv=roc+r1+two*r2*abs(vn)
240
241
242 IF(vn<0)THEN
243 pn=pn-half*rho*vn**2
244 dpdv=dpdv-rho*vn
245 ENDIF
246
247 IF(tt>0)THEN
248 du=roc*(vn-vo(i))
249 ELSE
250 du=zero
251 po(i)=pn
252 ENDIF
253 dp=alp*(pn-po(i))
254
255 vo(i)=vn
256 p=po(i)+dp+du
257 IF(c==zero)p=pn
258
259
260 a(1,n)=a(1,n)-p*la(1,i)
261 a(2,n)=a(2,n)-p*la(2,i)
262 a(3,n)=a(3,n)-p*la(3,i)
263
264 def=def-half*(po(i)+p)*dt1*vn*s
265 po(i)=p
266 stifn(n)=stifn(n)+(two*(s*dpdv)**2)/ms(n)
267
268 ENDDO
269
270 RETURN