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
92 CHARACTER(LEN=NCHARTITLE) :: TITR
93 CHARACTER(LEN=NCHARKEY) :: KEY
95 . bid,rhoin,pin,ein,dist,
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.
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
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 IF ((rhoin == zero).AND.(ifdens>0))
THEN
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 IF ((ein == zero).AND.(ifener>0))
THEN
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)
294 IF ((pin == zero).AND.(ifpres>0))
THEN
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 IF ((pin == zero).AND.(ifpres>0))
THEN
312 ELSEIF (itype == 2)
THEN
314 ELSEIF (itype == 3)
THEN
319 IF ((ifdens /= 0).AND.(rhoin == zero)) rhoin = one
320 IF ((ifener /= 0).AND.(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 '
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)