39 SUBROUTINE hm_read_ebcs_inlet(IGRSURF,NPC, MULTI_FVM, UNITAB, ID, TITR, UID, LSUBMODEL, KEY2, SUB_INDEX, EBCS)
53#include "implicit_f.inc"
62 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
65 INTEGER,
INTENT(IN) :: SUB_INDEX
66 TYPE (MULTI_FVM_STRUCT),
INTENT(INOUT) :: MULTI_FVM
67 TYPE (SURF_) ,
TARGET,
DIMENSION(NSURF) :: IGRSURF
68 CHARACTER(LEN=NCHARTITLE),
INTENT(IN) :: TITR
70 LOGICAL IS_AVAILABLE,IS_ENCRYPTED
71 CHARACTER(LEN=NCHARKEY),
INTENT(IN) :: KEY2
72 TYPE(t_ebcs_inlet),
INTENT(INOUT) :: EBCS
76 INTEGER ISU,SURF,NGR2USR,IPRES,IRHO,J,NSEG,IENER,IVX,IVY,IVZ,IALPHA
77 INTEGER IMAT,IVEL_TYP,U_IALPHA,U_IRHO,U_IPRES,IFLAGUNIT,OFF_DEF
79 my_real c,pres,rho,lcar,r1,r2,ener,vx,vy,vz,
alpha
80 CHARACTER chain*9, chain1*64
83 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
88 ebcs%title = trim(titr)
90 ebcs%IS_MULTIFLUID = .true.
91 ebcs%HAS_IELEM = .true.
92 ebcs%FVM_INLET_DATA%FORMULATION = -1
93 ebcs%FVM_INLET_DATA%VECTOR_VELOCITY = 0
94 ebcs%FVM_INLET_DATA%FUNC_VEL(1:3) = 0
95 ebcs%FVM_INLET_DATA%FUNC_ALPHA(1:21) = 0
96 ebcs%FVM_INLET_DATA%FUNC_RHO(1:21) = 0
97 ebcs%FVM_INLET_DATA%FUNC_PRES(1:21) = 0
98 ebcs%FVM_INLET_DATA%VAL_VEL(1:3) = zero
99 ebcs%FVM_INLET_DATA%VAL_ALPHA(1:21) = zero
100 ebcs%FVM_INLET_DATA%VAL_RHO(1:21) = zero
101 ebcs%FVM_INLET_DATA%VAL_PRES(1:21) = zero
121 IF (unitab%UNIT_ID(j) == uid)
THEN
126 IF (uid/=0.AND.iflagunit
THEN
127 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,i2=uid,i1=id,c1=
'EBCS',c2=
'EBCS',c3=titr)
131 CALL hm_get_intv(
'entityid', surf ,is_available,lsubmodel)
132 CALL hm_get_intv(
'vel_flag', ebcs%fvm_inlet_data%VECTOR_VELOCITY ,is_available,lsubmodel)
135 ivel_typ = ebcs%fvm_inlet_data%VECTOR_VELOCITY
136 ingr2usr => igrsurf(1:nsurf)%ID
137 IF (surf/=0) isu=ngr2usr(surf,ingr2usr,nsurf)
139 IF (isu/=0) nseg=igrsurf(isu)%NSEG
142 WRITE(istdo,
'(6X,A)')
' ** A SURFACE SHOULD BE INPUT'
143 WRITE(iout,
'(6X,A)')
' ** A SURFACE SHOULD BE INPUT'
146 WRITE(istdo,*)
' ** ERROR SURFACE NOT FOUND, ID=',surf
147 WRITE(iout,*)
' ** ERROR SURFACE NOT FOUND, ID=',surf
150 WRITE(istdo,*)
' ** ERROR EMPTY SURFACE',surf
151 WRITE(iout,*)
' ** ERROR EMPTY SURFACE',surf
154 WRITE(iout,1018)id,trim(titr)
156 IF (key2(1:2) ==
'VP')
THEN
157 ebcs%fvm_inlet_data%FORMULATION = 1
159 ELSEIF (key2(1:2) ==
'VE')
THEN
160 ebcs%fvm_inlet_data%FORMULATION = 2
163 CALL ancmsg(msgid=1602,msgtype=msgerror,anmode=aninfo,
166 . c2 =
"AN INPUT FORMULATION HAS TO BE PROVIDED : VE, OR VP")
169 CALL hm_get_floatv(
'rad_ebcs_fscale_vx', vx ,is_available,lsubmodel,unitab)
170 CALL hm_get_floatv(
'rad_ebcs_fscale_vy', vy ,is_available,lsubmodel,unitab)
171 CALL hm_get_floatv(
'rad_ebcs_fscale_vz', vz ,is_available,lsubmodel,unitab)
172 CALL hm_get_intv(
'fct_IDvx', ivx ,is_available,lsubmodel)
173 CALL hm_get_intv(
'fct_IDvy', ivy ,is_available,lsubmodel)
174 CALL hm_get_intv(
'fct_IDvz', ivz ,is_available,lsubmodel)
175 IF(sub_index /= 0 )
THEN
176 off_def = lsubmodel(sub_index)%OFF_DEF
178 IF(ivx > 0) ivx = ivx + off_def
179 IF(ivy > 0) ivy = ivy + off_def
180 IF(ivz > 0) ivz = ivz + off_def
189 WRITE(iout,1133)ivx,vx
196 IF(vy/=zero.OR.vz/=zero)
THEN
198 CALL ancmsg(msgid=1602,msgtype=msgerror,anmode=aninfo,
201 . c2 =
"NORMAL VELOCITY MUST BE INPUT WITH COMPONENT-1 WHEN VEL_FLAG SET TO 0")
208 IF(ivx<-1 .OR. (ivx>0.AND. .NOT.found))
THEN
209 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
212 . c2 =
"INVALID FUNCTION ID FOR VELOCITY-X")
221 WRITE(iout,1121)ivx,vx
232 IF(ivx<-1 .OR. (ivx>0.AND. .NOT.found))
THEN
233 CALL ancmsg(msgid = 1602, msgtype= msgerror,anmode = aninfo,
236 . c2 =
"INVALID FUNCTION ID FOR VELOCITY-X")
242 WRITE(iout,1122)ivy,vy
253 IF(ivy<-1 .OR. (ivy>0.AND. .NOT.found))
THEN
254 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
257 . c2 =
"INVALID FUNCTION ID FOR VELOCITY-Y")
264 WRITE(iout,1123)ivz,vz
276 IF(ivz<-1 .OR. (ivz>0.AND. .NOT.found))
THEN
277 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
280 . c2 =
"INVALID FUNCTION ID FOR VELOCITY-Z")
285 ebcs%fvm_inlet_data%FUNC_VEL(1) = ivx
286 ebcs%fvm_inlet_data%VAL_VEL(1) = vx
287 ebcs%fvm_inlet_data%FUNC_VEL(2) = ivy
288 ebcs%fvm_inlet_data%VAL_VEL(2) = vy
289 ebcs%fvm_inlet_data%FUNC_VEL(3) = ivz
290 ebcs%fvm_inlet_data%VAL_VEL(3) = vz
291 check_cumul_vf(1:2) = zero
293 DO imat = 1, multi_fvm%NBMAT
300 IF(sub_index /= 0 )
THEN
301 off_def = lsubmodel(sub_index)%OFF_DEF
302 IF(ialpha > 0) ialpha = ialpha + off_def
303 IF(irho > 0) irho = irho + off_def
304 IF(ipres > 0) ipres = ipres + off_def
306 check_cumul_vf(1)=check_cumul_vf(1)+abs(ialpha)
307 check_cumul_vf(2)=check_cumul_vf(2)+abs(
alpha)
316 IF(ialpha==npc(j))
THEN
324 write(chain(8:9),
'(i2)')imat
325 chain1=
'INVALID FUNCTION ID FOR IALPHA & '//chain
326 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
336 IF(irho==npc(j))
THEN
344 write(chain(8:9),
'(i2)')imat
345 chain1=
'INVALID FUNCTION ID FOR IRHO & '//chain
346 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
356 IF(ipres==npc(j))
THEN
364 write(chain(8:9),
'(i2)')imat
365 chain1=
'INVALID FUNCTION ID FOR IPRES & '//chain
366 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
373 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
376 . c2 =
"VOLUME FRACTION CANNOT BE NEGATIVE")
379 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
382 . c2 =
"MASS DENSITY CANNOT BE NEGATIVE")
384 ebcs%fvm_inlet_data%FUNC_ALPHA(imat) = ialpha
385 ebcs%fvm_inlet_data%FUNC_RHO(imat) = irho
386 ebcs%fvm_inlet_data%FUNC_PRES(imat) = ipres
387 ebcs%fvm_inlet_data%VAL_ALPHA(imat) =
alpha
388 ebcs%fvm_inlet_data%VAL_RHO(imat) = rho
389 ebcs%fvm_inlet_data%VAL_PRES(imat) = pres
391 WRITE(iout,1131)u_ialpha,u_irho,u_ipres
392 WRITE(iout,1132)
alpha,rho,pres
394 WRITE(iout, fmt=
'(/)' )
395 IF(check_cumul_vf(1)==zero .AND. check_cumul_vf(2)==zero)
THEN
396 CALL ancmsg(msgid = 1602,msgtype= msgerror,anmode = aninfo,
399 . c2 =
"INPUT VOLUME FRACTIONS ARE EMPTY")
403 WRITE(iout,1118)surf,nseg
405 IF (.NOT. multi_fvm%IS_USED)
THEN
406 CALL ancmsg(msgid=1602,msgtype=msgerror,anmode=aninfo,i1 = id,c1 = trim(titr),
407 . c2 =
"ONLY COMPATIBLE WITH LAW 151")
413 1018
FORMAT( //
'FLUID INLET EBCS NUMBER . . . . . . . . :',i8,1x,a)
414 1021
FORMAT(
' VELOCITY & PRESSURE')
415 1022
FORMAT(
' VELOCITY & ENERGY')
417 .
' ON SURFACE . . . . . . . . . . . . . . . ',i8,/,
418 .
' NUMBER OF SEGMENTS FOUND. . . . . . . . . ',i8,/)
420 .
' IVx FUNCTION ID . . . . . . . . . . . . . ',i8,/,
421 .
' Vx SCALE FACTOR . . . . . . . . . . . . . ',e16.6)
423 .
' IVy FUNCTION ID . . . . . . . . . . . . . ',i8,/,
424 . ' vy scale factor . . . . . . . . . . . . .
',E16.6)
426 . ' ivz
FUNCTION id . . . . . . . . . . . . .
',I8,/,
427 . ' vz scale factor . . . . . . . . . . . . .
',E16.6)
429 . ' ivx function id . . . . . . . . . . . . .
',I2)
431 . ' ivy function id . . . . . . . . . . . . .
',I2)
433 . ' ivz function id . . . . . . . . . . . . .
',I2)
435 . ' ivx function id . . . . . . . . . . . . .
',I2,/,
436 . ' von neumann bcs : d/dn(Vx) = 0
')
438 . ' ivy function id . . . . . . . . . . . . .
',I2,/,
439 . ' von neumann bcs : d/dn(Vy) = 0
')
441 . ' ivz function id . . . . . . . . . . . . .
',I2,/,
442 . ' von neumann bcs : d/dn(Vz) = 0
')
447 . ' ialpha function. . . . . . . . . . . . .
',I8,/,
448 . ' irho function. . . . . . . . . . . . . .
',I8,/,
449 . ' ipres function. . . . . . . . . . . . .
',I8)
451 . ' alpha scale factor . . . . . . . . . . .
',E16.6,/,
452 . ' rho scale
',E16.6,/,
453 . ' pres scale function . . . . . . . . . .
',E16.6)
455 . ' ivn function id . . . . . . . . . . . . .
',I8,/,
456 . ' vn scale factor . . . . . . . . . . . . .
',E16.6)
458 . ' vn constant velocity. . . . . . . . . . .
',E16.6)
460 . ' ivn function id . . . . . . . .
',I2,/,
461 . ' von neumann bcs : d/dn vn = 0
')
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)