208
209
210
211
212
213 USE elbufdef_mod
215
216
217
218#include "implicit_f.inc"
219
220
221
222#include "param_c.inc"
223#include "units_c.inc"
224#include "com01_c.inc"
225#include "com04_c.inc"
226#include "com08_c.inc"
227#include "task_c.inc"
228#include "vect01_c.inc"
229
230
231
232 INTEGER IVOLU(*),NVENT,IBAGHOL(NIBHOL,*), FR_MV(*),
233 . NN,IPARG(NPARG,*)
234 INTEGER, INTENT(IN) :: IGROUPC(*), IGROUPTG(*)
236 . rvolu(*),fsav(*),rbaghol(nrbhol,*),normal(3,*)
237 TYPE(ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
238 TYPE (SURF_) , DIMENSION(NSURF) ::
239
240
241
242 INTEGER K,IDEF,KK,PMAIN,
243 . II,IPVENT,NNC,KAD,IPORT,IPORP,IPORA,
244 . IOFF,NG,NEL,ISTRA,IEXPAN,IOK
245
247 . gama, pext, pdef, avent, vol, vinc,
248 . amtot, energy, p, ro,
249 . u, deout, dmout, tvent,
area, pcrit, aoutot,
250 . apvent,aout,flout,de,deri,dtpdefi,dtpdefc,
251 . f1(nn),scalt,scalp,scals
253 . get_u_func
254 EXTERNAL get_u_func
255 DOUBLE PRECISION
256 . FRMV6(6)
258 . DIMENSION(:), POINTER :: offg
259
260 pmain = fr_mv(nspmd+2)
261 idef = ivolu(14)
262 IF(idef>0)GOTO 999
263
264 gama =rvolu(1)
265 pext =rvolu(3)
266 vinc =rvolu(5)
267 vol =rvolu(16)
268 energy =rvolu(13)
269 amtot =rvolu(20)
270 scalt =rvolu(26)
271 scalp =rvolu(27)
272 scals =rvolu(28)
273
274 p =rvolu(12)
276
277 ro = amtot/(vol-vinc)
278 pcrit = p*(two/(gama+one))**(gama/(gama-one))
279
280
281
282 aoutot=zero
283 DO ii = 1, nvent
284 idef = ibaghol(1, ii)
285 ipvent = ibaghol(2, ii)
286
287 pdef = rbaghol(1, ii)
288 dtpdefi= rbaghol(4, ii)
289 dtpdefc= rbaghol(5, ii)
290 avent = rbaghol(2, ii)
291 tvent = rbaghol(3, ii)
292
293 IF(idef<=0.AND.p>pdef+pext.
294 . and.dtpdefc>dtpdefi.
295 . and.vol>0.001*
area**1.5)
THEN
296 idef=abs(idef)
297 IF(ispmd+1==pmain) THEN
298 WRITE(iout,*)
299 . ' *** MONITORED VOLUME MEMBRANE IS DEFLATED ***'
300 WRITE(iout,*)' *** MONITORED VOLUME ',ivolu(1),
301 . ' VENT HOLES MEMBRANE NUMBER ',ii,' ***'
302 WRITE(istdo,*)' *** VENT HOLES MEMBRANE IS DEFLATED ***'
303 ENDIF
304 ENDIF
305 IF(idef<=0 .AND. tt>tvent) THEN
306 idef=abs(idef)
307 IF(ispmd+1==pmain) THEN
308 WRITE(iout,*)
309 . ' *** MONITORED VOLUME VENTING STARTS ***'
310 WRITE(iout,*) ' *** MONITORED VOLUME ',ivolu(
311 . ' VENT HOLES MEMBRANE NUMBER ',ii,' ***'
312 WRITE(istdo,*)' *** VENTING STARTS ***'
313 ENDIF
314 ENDIF
315
316 IF(ipvent/=0)THEN
317
318 IF(idef==1)THEN
319
320 nnc=igrsurf(ipvent)%NSEG
321 DO kk=1,nnc
322 IF(igrsurf(ipvent)%ELTYP(kk)==3)THEN
323
324 k=igrsurf(ipvent)%ELEM(kk)
325 ELSEIF(igrsurf(ipvent)%ELTYP(kk)==7)THEN
326
327 k=igrsurf(ipvent)%ELEM(kk) + numelc
328 ELSE
329
330 k=igrsurf(ipvent)%ELEM(kk) + numelc + numeltg
331 ENDIF
332 f1(kk) = sqrt( normal(1,k)**2+normal(2,k)**2+normal(3,k)**2 )
333 kad=kad+nisx
334 ENDDO
335
336
337 ELSEIF(idef>=2)THEN
338
339 nnc=igrsurf(ipvent)%NSEG
340 DO kk=1,nnc
341 IF(igrsurf(ipvent)%ELTYP(kk)==3)THEN
342
343 k=igrsurf(ipvent)%ELEM(kk)
344 iok = 0
345 ng=igroupc(k)
346 ity=iparg(5,ng)
347 IF(ity==3)THEN
348 iok = 1
349 ENDIF
350 IF (iok == 1) THEN
351 nel =iparg(2,ng)
352 nft =iparg(3,ng)
353 iad =iparg(4,ng)
354 npt =iparg(6,ng)
355 istra =iparg(44,ng)
356 jhbe =iparg(23,ng)
357 iexpan=iparg(49,ng)
358 offg => elbuf_tab(ng)%GBUF%OFF
359 ioff = int(offg(k-nft))
360 ELSE
361 ioff = 1
362 ENDIF
363 ELSEIF(igrsurf(ipvent)%ELTYP(kk)==7)THEN
364
365 k=igrsurf(ipvent)%ELEM(kk)
366 iok = 0
367 ng=igrouptg(k)
368 ity=iparg(5,ng)
369 IF(ity==7)THEN
370 iok = 1
371 ENDIF
372 IF (iok == 1) THEN
373 nel =iparg(2,ng)
374 nft =iparg(3,ng)
375 iad =iparg(4,ng)
376 npt =iparg(6,ng)
377 istra =iparg(44,ng)
378 jhbe =iparg(23,ng)
379 iexpan=iparg(49,ng)
380 offg => elbuf_tab(ng)%GBUF%OFF
381 ioff=int(offg(k-nft))
382 ELSE
383 ioff = 1
384 ENDIF
385 k=k+numelc
386 ELSE
387
388 ioff=1
389 ENDIF
390 IF(ioff==0) THEN
391 f1(kk) = sqrt( normal(1,k)**2+normal(2,k)**2+normal(3,k)**2 )
392 ELSE
393 f1(kk) = zero
394 END IF
395 kad=kad+nisx
396 ENDDO
397
398 ENDIF
399
400
401 IF (idef==1.OR.idef>=2) THEN
402 DO kk = 1, 6
403 frmv6(kk) = zero
404 END DO
406 IF (nspmd>1) THEN
407 IF(fr_mv(ispmd+1)/=0) THEN
409 END IF
410 ENDIF
411 apvent = frmv6(1)+frmv6(2)+frmv6(3)+
412 . frmv6(4)+frmv6(5)+frmv6(6)
413
414 aout = apvent
415 ELSE
416 aout =avent
417 avent=1.0
418 END IF
419 ELSE
420 aout =avent
421 avent=1.0
422 ENDIF
423
424 IF(idef>0 .AND. p>pext.
425 . and.vol>em3*
area**1.5)
THEN
426 iport =ibaghol(3,ii)
427 iporp =ibaghol(4,ii)
428 ipora =ibaghol(5,ii)
429 IF(ipora/=0.AND.ipvent/=0)THEN
430 aout=avent*get_u_func(ipora,aout*scals,deri)
431 ELSE
432 aout=avent*aout
433 ENDIF
434 IF(iport/=0)aout=aout*get_u_func(iport,tt*scalt,deri)
435 IF(iporp/=0)aout=aout*get_u_func(iporp,(p-pext)*scalp,deri)
436 aoutot=aoutot+aout
437 ENDIF
438 ibaghol(1,ii)=idef
439 ENDDO
440
441 IF(aoutot>0.)THEN
442 pext =
max(pext,pcrit)
443 u=two*gama/(gama-one)*p/ro*(one-(pext/p)**((gama-one)/gama))
444 u=sqrt(u)
445 de=(energy/(vol-vinc)+p)*(pext/p)**(one/gama)
446 u=
min(u,(p-pext)*half*(vol-vinc)
447 . /(gama-one)/de/
max(em20,aoutot*dt1))
448 u=
min(u,half*(vol-vinc)/
max(em20,aoutot*dt1))
449 flout=aoutot*u
450 deout=flout*de
451 dmout=flout*ro*(pext/p)**(one/gama)
452 ELSE
453 u=zero
454 deout=zero
455 dmout=zero
456 flout= zero
457 ENDIF
458
459 IF(ispmd+1==pmain) THEN
460 fsav(6)=aoutot
461 fsav(7)=flout/
max(em20,aoutot)
462 ENDIF
463
464 rvolu(22)=rvolu(22) + deout
465 rvolu(24)=rvolu(24) + dmout
466
467 999 CONTINUE
468 RETURN
subroutine sum_6_float(jft, jlt, f, f6, n)
subroutine spmd_exch_fr6(fr, fs6, len)