45 . NOD2SP ,IPARTSP ,ITAB ,X ,
46 . MFI ,LWASPIO ,ITABM1 ,UNITAB ,
47 . LSUBMODEL,RTRANS ,NRTRANS )
61#include "implicit_f.inc"
73 INTEGER ISPHIO(NISPHIO,*), IPART(LIPART1,*),
74 . NOD2SP(*),IPARTSP(*),
75 . ITAB(*),MFI,LWASPIO,ITABM1(*)
76 INTEGER,
INTENT(IN) :: NRTRANS
79 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
80 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
81 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
82 my_real,
DIMENSION(NTRANSF,NRTRANS),
INTENT(IN) :: rtrans
86 INTEGER I, N, ID, J, IDS, IDPRT, IPRT, INOD, ICEL,
88 . MFITMP, IVAD, LVAD, ITYPE, IDSURF, IFTEMP,
89 . ifvits,ifdens, ifpres, ifener,skip,
90 . iad,in1,in2,in3,in4, iun,nbox,nboy,nboz,nband,sub_id
92 CHARACTER(LEN=NCHARTITLE) :: TITR
93 CHARACTER(LEN=NCHARKEY) :: KEY
95 . bid,rhoin,pin,ein,dist,
96 . x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4,
97 . x12,y12,z12,x13,y13,z13,nn,nx,ny,nz,
98 . dbucs,xbmin,ybmin,zbmin,xbmax,ybmax,zbmax,
99 . pinfini,carl,xx(9),fcut,
100 . rhoin_unit,pin_unit,ein_unit,xl(3)
101 LOGICAL IS_AVAILABLE,FOUND
103 DATA MESS/
'SPH INLET/OUTLET DEFINITION '/
155 is_available = .false.
168 IF (nsubdom > 0)
THEN
178 . option_titr = titr,
179 . submodel_id = sub_id)
185 CALL hm_get_intv(
'Itype' ,itype ,is_available,lsubmodel)
186 CALL hm_get_intv(
'pid' ,idprt ,is_available,lsubmodel)
187 CALL hm_get_intv(
'SURF_ID' ,idsurf ,is_available,lsubmodel)
188 CALL hm_get_floatv(
'DIST' ,dist ,is_available,lsubmodel, unitab)
190 CALL hm_get_intv(
'node_ID1',in1 ,is_available,lsubmodel)
191 CALL hm_get_intv(
'node_ID2',in2 ,is_available,lsubmodel)
192 CALL hm_get_intv(
'node_ID3',in3 ,is_available,lsubmodel)
193 CALL hm_get_floatv(
'Fcut' ,fcut ,is_available,lsubmodel, unitab)
199 IF (ipart(4,j) == idprt)
THEN
221 IF (igrsurf(j)%ID == idsurf)
THEN
236 ELSEIF ((in1 == 0).AND.(in2 == 0).AND.(in3 == 0))
THEN
239 CALL hm_get_floatv(
'XM' ,xx(1) ,is_available,lsubmodel, unitab)
240 CALL hm_get_floatv(
'YM' ,xx(2) ,is_available,lsubmodel, unitab)
241 CALL hm_get_floatv(
'ZM' ,xx(3) ,is_available,lsubmodel, unitab)
242 CALL hm_get_floatv('xm1
' ,XX(4) ,IS_AVAILABLE,LSUBMODEL, UNITAB)
243 CALL HM_GET_FLOATV('ym1
' ,XX(5) ,IS_AVAILABLE,LSUBMODEL, UNITAB)
244 CALL HM_GET_FLOATV('zm1
' ,XX(6) ,IS_AVAILABLE,LSUBMODEL, UNITAB)
245 CALL HM_GET_FLOATV('xm2
' ,XX(7) ,IS_AVAILABLE,LSUBMODEL, UNITAB)
246 CALL HM_GET_FLOATV('ym2
' ,XX(8) ,IS_AVAILABLE,LSUBMODEL, UNITAB)
247 CALL HM_GET_FLOATV('zm2
' ,XX(9) ,IS_AVAILABLE,LSUBMODEL, UNITAB)
250 CALL SUBROTPOINT(XL(1),XL(2),XL(3),RTRANS,SUB_ID,LSUBMODEL)
253 CALL SUBROTPOINT(XL(1),XL(2),XL(3),RTRANS,SUB_ID,LSUBMODEL)
256 CALL SUBROTPOINT(XL(1),XL(2),XL(3),RTRANS,SUB_ID,LSUBMODEL)
260 VSPHIO(IVAD+3+J) = XX(J)
265 ISPHIO(13,I) = USR2SYS(IN1,ITABM1,MESS,ID)
266 ISPHIO(14,I) = USR2SYS(IN2,ITABM1,MESS,ID)
267 ISPHIO(15,I) = USR2SYS(IN3,ITABM1,MESS,ID)
271 NSEG=IGRSURF(IDS)%NSEG
278 CALL HM_GET_INTV('fun_a1
' ,IFDENS ,IS_AVAILABLE,LSUBMODEL)
279 CALL HM_GET_FLOATV('r0k0
' ,RHOIN ,IS_AVAILABLE,LSUBMODEL,UNITAB)
280.AND.
IF ((RHOIN == ZERO)(IFDENS>0)) THEN
281 CALL HM_GET_FLOATV_DIM('r0k0
' ,RHOIN_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
282 RHOIN = ONE * RHOIN_UNIT
284 CALL HM_GET_INTV('fun_a6
' ,IFENER ,IS_AVAILABLE,LSUBMODEL)
285 CALL HM_GET_FLOATV('mat_e0
',EIN ,IS_AVAILABLE,LSUBMODEL,UNITAB)
286.AND.
IF ((EIN == ZERO)(IFENER>0)) THEN
287 CALL HM_GET_FLOATV_DIM('mat_e0
' ,EIN_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
290 CALL HM_GET_INTV('fun_a3
' ,IFVITS ,IS_AVAILABLE,LSUBMODEL)
291 ELSEIF (ITYPE == 2) THEN
292 CALL HM_GET_INTV('fun_a2
' ,IFPRES ,IS_AVAILABLE,LSUBMODEL)
293 CALL HM_GET_FLOATV('mat_p0
' ,PIN ,IS_AVAILABLE,LSUBMODEL,UNITAB)
294.AND.
IF ((PIN == ZERO)(IFPRES>0)) THEN
295 CALL HM_GET_FLOATV_DIM('mat_p0
' ,PIN_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
298 ELSEIF (ITYPE == 3) THEN
299 CALL HM_GET_INTV('fun_a4
' ,IFPRES ,IS_AVAILABLE,LSUBMODEL)
300 CALL HM_GET_FLOATV('mat_pscale
',PIN ,IS_AVAILABLE,LSUBMODEL, UNITAB)
301.AND.
IF ((PIN == ZERO)(IFPRES>0)) THEN
302 CALL HM_GET_FLOATV_DIM('mat_pscale
' ,PIN_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
305 CALL HM_GET_FLOATV('lc
' ,CARL ,IS_AVAILABLE,LSUBMODEL, UNITAB)
312 ELSEIF (ITYPE == 2) THEN
314 ELSEIF (ITYPE == 3) THEN
319.AND.
IF ((IFDENS /= 0)(RHOIN == ZERO)) RHOIN = ONE
320.AND.
IF ((IFENER /= 0)(EIN == ZERO)) EIN = ONE
321 VSPHIO(IVAD ) = RHOIN
323 VSPHIO(IVAD+3) = DIST
324 ELSEIF (ITYPE == 2) THEN
326 VSPHIO(IVAD+3) = DIST
327 VSPHIO(IVAD+15) = FCUT
328 ELSEIF (ITYPE == 3) THEN
330 VSPHIO(IVAD+2) = CARL
331 VSPHIO(IVAD+3) = DIST
332 VSPHIO(IVAD+15) = FCUT
333 ELSEIF (ITYPE == 4) THEN
334 VSPHIO(IVAD+15) = FCUT
345 CALL UDOUBLE(ISPHIO(NISPHIO,1),NISPHIO,NSPHIO,MESS,0,BID)
350 IF(ISPHIO(1,N)==1)THEN
353 NSEG=IGRSURF(ISU)%NSEG
355 IN1=IGRSURF(ISU)%NODES(J,1)
356 IN2=IGRSURF(ISU)%NODES(J,2)
357 IN3=IGRSURF(ISU)%NODES(J,3)
358 IN4=IGRSURF(ISU)%NODES(J,4)
377 NN =SQRT(NX*NX+NY*NY+NZ*NZ)
391 NN =NN+SQRT(NX*NX+NY*NY+NZ*NZ)
402 IF(ISPHIO(12,N)==0)THEN
405 NSEG=IGRSURF(ISU)%NSEG
406 NSEG_IO = NSEG_IO + NSEG
416 IN1=IGRSURF(ISU)%NODES(J,1)
417 IN2=IGRSURF(ISU)%NODES(J,2)
418 IN3=IGRSURF(ISU)%NODES(J,3)
419 IN4=IGRSURF(ISU)%NODES(J,4)
447 DBUCS=MAX(DBUCS,ABS(X1-X2))
448 DBUCS=MAX(DBUCS,ABS(Y1-Y2))
449 DBUCS=MAX(DBUCS,ABS(Z1-Z2))
450 DBUCS=MAX(DBUCS,ABS(X2-X3))
451 DBUCS=MAX(DBUCS,ABS(Y2-Y3))
452 DBUCS=MAX(DBUCS,ABS(Z2-Z3))
453 DBUCS=MAX(DBUCS,ABS(X3-X1))
454 DBUCS=MAX(DBUCS,ABS(Y3-Y1))
455 DBUCS=MAX(DBUCS,ABS(Z3-Z1))
456 IN4=IGRSURF(ISU)%NODES(J,4)
467 DBUCS=MAX(DBUCS,ABS(X1-X4))
468 DBUCS=MAX(DBUCS,ABS(Y1-Y4))
469 DBUCS=MAX(DBUCS,ABS(Z1-Z4))
470 DBUCS=MAX(DBUCS,ABS(X2-X4))
471 DBUCS=MAX(DBUCS,ABS(Y2-Y4))
472 DBUCS=MAX(DBUCS,ABS(Z2-Z4))
473 DBUCS=MAX(DBUCS,ABS(X3-X4))
474 DBUCS=MAX(DBUCS,ABS(Y3-Y4))
475 DBUCS=MAX(DBUCS,ABS(Z3-Z4))
484 NBOX =MAX(IUN,INT((XBMAX-XBMIN)/DBUCS))
485 NBOY =MAX(IUN,INT((YBMAX-YBMIN)/DBUCS))
486 NBOZ =MAX(IUN,INT((ZBMAX-ZBMIN)/DBUCS))
487 NBAND=MAX(NBOX,NBOY,NBOZ)+1
491 LWASPIO=MAX(LWASPIO,15*NUMSPH+6*(NBAND+1)+12*NSEG)
493 LWASPIO=MAX(LWASPIO,3*NSPHIO)
500 IF(ISPHIO(1,N)==1)THEN
501 WRITE(IOUT,1100) ISPHIO(NISPHIO,N),
502 . IPART(4,ISPHIO(2,N)),IGRSURF(ISPHIO(3,N))%ID,
503 . ISPHIO(5,N),VSPHIO(IVAD),ISPHIO(7,N),
504 . VSPHIO(IVAD+2),ISPHIO(8,N),VSPHIO(IVAD+3)
506 IF(ISPHIO(1,N)==2)THEN
507 IF (ISPHIO(12,N)==0) THEN
508 WRITE(IOUT,1200) ISPHIO(NISPHIO,N),
509 . IPART(4,ISPHIO(2,N)),IGRSURF(ISPHIO(3,N))%ID,
510 . ISPHIO(6,N),VSPHIO(IVAD+1),VSPHIO(IVAD+3)
512 WRITE(IOUT,1400) ISPHIO(NISPHIO,N),
513 . IPART(4,ISPHIO(2,N)),ISPHIO(6,N),VSPHIO(IVAD+1),VSPHIO(IVAD+3)
515 ELSEIF(ISPHIO(1,N)==3)THEN
516 IF (ISPHIO(12,N)==0) THEN
517 WRITE(IOUT,1300) ISPHIO(NISPHIO,N),
518 . IPART(4,ISPHIO(2,N)),IGRSURF(ISPHIO(3,N))%ID,VSPHIO(IVAD+3),
519 . ISPHIO(6,N),VSPHIO(IVAD+1),VSPHIO(IVAD+2)
520 ELSEIF (ISPHIO(12,N)==1) THEN
521 WRITE(IOUT,1500) ISPHIO(NISPHIO,N),IPART(4,ISPHIO(2,N)),
522 . ISPHIO(6,N),VSPHIO(IVAD+1),VSPHIO(IVAD+2)
524 ELSEIF(ISPHIO(1,N)==4)THEN
525 IF (ISPHIO(12,N)==0) THEN
526 WRITE(IOUT,1600) ISPHIO(NISPHIO,N),IPART(4,ISPHIO(2,N)),
527 . IGRSURF(ISPHIO(3,N))%ID
529 WRITE(IOUT,1700) ISPHIO(NISPHIO,N),IPART(4,ISPHIO(2,N))
532 IF (ISPHIO(12,N)==1) THEN
535 WRITE(IOUT,2100) VSPHIO(IVAD+4),VSPHIO(IVAD+5),VSPHIO(IVAD+6),
536 . VSPHIO(IVAD+7),VSPHIO(IVAD+8),VSPHIO(IVAD+9),VSPHIO(IVAD+10),
537 . VSPHIO(IVAD+11),VSPHIO(IVAD+12)
538 ELSEIF (ISPHIO(12,N)==2) THEN
540 WRITE(IOUT,2200) ITAB(ISPHIO(13,N)),ITAB(ISPHIO(14,N)),ITAB(ISPHIO(15,N))
542 IF (VSPHIO(IVAD+15)>EM20) WRITE(IOUT,2300) VSPHIO(IVAD+15)
550 .' sph inlet/outlet conditions
'/
551 .' ---------------------------
')
552 1100 FORMAT(/5X ,'sph inlet/outlet condition id
',I10
553 . /5X ,'TYPE inlet
',
554 . /10X,'part related to condition
',I10
555 . /10X,'inlet surface
',I10
556 . /10X,'density
FUNCTION ',I10
557 . /10X,'scale factor on density function
',1PG20.13
558 . /10X,'energy function
',I10
559 . /10X,'scale factor on energy function
',1PG20.13
560 . /10X,'normal
velocity function
',I10
561 . /10X,'within distance
for particles setting
',1PG20.13)
562 1200 FORMAT(/5X ,'sph inlet/outlet condition id
',I10
563 . /5X ,'type general outlet
',
564 . /10X,'part related to condition
',I10
565 . /10X,'outlet surface
',I10
566 . /10X,'pressure function
',I10
567 . /10X,'scale factor on pressure function
',1PG20.13
568 . /10X,'without distance
for particles setting
',1PG20.13)
569 1300 FORMAT(/5X ,'sph inlet/outlet condition id
',I10
570 . /5X ,'type silent boundary
',
571 . /10X,'part related to condition
',I10
572 . /10X,'outlet surface
',I10
573 . /10X,'without distance
for particles setting
',1PG20.13
574 . /10X,'pressure function
',I10
575 . /10X,'scale factor on pressure function
',1PG20.13
576 . /10X,'characteristic length
',1PG20.13)
577 1400 FORMAT(/5X ,'sph inlet/outlet condition id
',I10
578 . /5X ,'type general outlet
',
579 . /10X,'part related to condition
',I10
580 . /10X,'pressure function
',I10
581 . /10X,'scale factor on pressure function
',1PG20.13
582 . /10X,'without distance
for particles setting
',1PG20.13)
583 1500 FORMAT(/5X ,'sph inlet/outlet condition id
',I10
584 . /5X ,'type silent boundary
',
585 . /10X,'part related to condition
',I10
586 . /10X,'pressure function
',I10
587 . /10X,'scale factor on pressure function
',1PG20.13
588 . /10X,'without distance
for particles setting
',1PG20.13
589 . /10X,'characteristic length
',1PG20.13)
590 1600 FORMAT(/5X ,'sph inlet/outlet condition id
',I10
591 . /5X ,'type sph control
section ',
592 . /10X,'part related to control
section ',I10
593 . /10X,'surface
',I10)
594 1700 FORMAT(/5X ,'sph inlet/outlet condition id
',I10
595 . /5X ,'type sph control
section ',
596 . /10X,'part related to control
section ',I10)
598 2100 FORMAT(10X,'surface defined by coordinates
',
599 . /10X,' --> coordinates of node1
',1PG20.13,1PG20.13,1PG20.13,
600 . /10X,' --> coordinates of node2
',1PG20.13,1PG20.13,1PG20.13,
601 . /10X,' --> coordinates of node3
',1PG20.13,1PG20.13,1PG20.13)
603 2200 FORMAT(10X,'surface defined by nodes
',I10,I10,I10)
605 2300 FORMAT(10X,'4-pole
butterworth corner frequency
',1PG20.13)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)