39 SUBROUTINE hm_read_ebcs_inlet(IGRSURF,NPC, MULTI_FVM, UNITAB, ID, TITR, UID, LSUBMODEL, KEY2, SUB_INDEX, EBCS)
49 USE multi_fvm_mod ,
ONLY : multi_fvm_struct
53#include "implicit_f.inc"
62 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
65 INTEGER,
INTENT(IN) :: SUB_INDEX
66 TYPE (SURF_) ,
TARGET,
DIMENSION(NSURF) :: IGRSURF
67 CHARACTER(LEN=NCHARTITLE),
INTENT(IN) :: TITR
69 LOGICAL IS_AVAILABLE,IS_ENCRYPTED
70 CHARACTER(LEN=NCHARKEY),
INTENT(IN) :: KEY2
71 TYPE(t_ebcs_inlet),
INTENT(INOUT) :: EBCS
72 TYPE (MULTI_FVM_STRUCT),
INTENT(INOUT) :: MULTI_FVM
76 INTEGER :: ISU,SURF,IPRES,IRHO,J,NSEG,IENER,IVX,IVY,IVZ,IALPHA
77 INTEGER :: IMAT,IVEL_TYP,U_IALPHA,U_IRHO,U_IPRES,IFLAGUNIT,OFF_DEF
80 my_real :: c,pres,rho,lcar,r1,r2,ener,vx,vy,vz,
alpha
81 CHARACTER :: chain*9, chain1*64
84 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
88 ebcs%title = trim(titr)
89 ebcs%IS_MULTIFLUID = .false.
90 IF(multi_fvm%IS_USED)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 == 0)
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
148 ELSEIF(nseg == 0)
THEN
150 WRITE(istdo,*)
' ** ERROR EMPTY SURFACE',surf
151 WRITE(iout,*)
' ** ERROR EMPTY SURFACE',surf
154 WRITE(iout,1018)id,trim(titr)
157 IF (key2(1:2) ==
'VP')
THEN
158 ebcs%fvm_inlet_data%FORMULATION = 1
161 ELSEIF (key2(1:2) ==
'VE')
THEN
162 ebcs%fvm_inlet_data%FORMULATION = 2
165 CALL ancmsg(msgid=1602, msgtype=msgerror, anmode=aninfo, i1=id, c1=trim(titr),
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
183 IF(ivel_typ == 0)
THEN
188 IF(ivx == npc(j))
THEN
189 WRITE(iout,1133)ivx,vx
196 IF(vy /= zero .OR. vz /= zero)
THEN
198 CALL ancmsg(msgid=1602,msgtype=msgerror,anmode=aninfo,i1=id,c1=trim(titr),
199 . c2=
"NORMAL VELOCITY MUST BE INPUT WITH COMPONENT-1 WHEN VEL_FLAG SET TO 0")
202 ELSEIF(ivx == -1)
THEN
206 IF(ivx < -1 .OR. (ivx > 0 .AND. .NOT.found))
THEN
207 CALL ancmsg(msgid=1602, msgtype=msgerror, anmode=aninfo, i1=id, c1=trim(titr), c2=
"INVALID FUNCTION ID FOR VELOCITY-X")
215 IF(ivx == npc(j))
THEN
216 WRITE(iout,1121)ivx,vx
224 ELSEIF(ivx == -1)
THEN
227 IF(ivx < -1 .OR. (ivx > 0 .AND. .NOT.found))
THEN
228 CALL ancmsg(msgid=1602, msgtype=msgerror, anmode=aninfo, i1=id, c1=trim(titr),
229 . c2=
"INVALID FUNCTION ID FOR VELOCITY-X")
234 IF(ivy == npc(j))
THEN
235 WRITE(iout,1122)ivy,vy
243 ELSEIF(ivy == -1)
THEN
246 IF(ivy < -1 .OR. (ivy > 0 .AND. .NOT.found))
THEN
247 CALL ancmsg(msgid=1602, msgtype=msgerror, anmode=aninfo, i1=id, c1=trim(titr), c2=
"INVALID FUNCTION ID FOR VELOCITY-Y")
253 IF(ivz == npc(j))
THEN
254 WRITE(iout,1123)ivz,vz
262 ELSEIF(ivz == -1)
THEN
266 IF(ivz < -1 .OR. (ivz > 0 .AND. .NOT.found))
THEN
267 CALL ancmsg(msgid=1602, msgtype=msgerror, anmode=aninfo, i1=id, c1=trim(titr), c2=
"INVALID FUNCTION ID FOR VELOCITY-Z")
272 ebcs%fvm_inlet_data%FUNC_VEL(1) = ivx
273 ebcs%fvm_inlet_data%VAL_VEL(1) = vx
274 ebcs%fvm_inlet_data%FUNC_VEL(2) = ivy
275 ebcs%fvm_inlet_data%VAL_VEL(2) = vy
276 ebcs%fvm_inlet_data%FUNC_VEL(3) = ivz
277 ebcs%fvm_inlet_data%VAL_VEL(3) = vz
278 check_cumul_vf(1:2) = zero
280 CALL hm_get_intv(
'matLawArrCnt',nbmat,is_available,lsubmodel)
285 CALL HM_GET_FLOAT_ARRAY_INDEX('fscalerho_n
',RHO ,IMAT,IS_AVAILABLE,LSUBMODEL,UNITAB)
286 CALL HM_GET_FLOAT_ARRAY_INDEX('fscalep_e_n
',PRES ,IMAT,IS_AVAILABLE,LSUBMODEL,UNITAB)
287 CALL HM_GET_INT_ARRAY_INDEX('fct_idvf_n
', IALPHA,IMAT,IS_AVAILABLE,LSUBMODEL)
288 CALL HM_GET_INT_ARRAY_INDEX('fct_idrho_n
', IRHO ,IMAT,IS_AVAILABLE,LSUBMODEL)
289 CALL HM_GET_INT_ARRAY_INDEX('fct_idp_e_n
', IPRES ,IMAT,IS_AVAILABLE,LSUBMODEL)
290 IF(SUB_INDEX /= 0 ) THEN
291 OFF_DEF = LSUBMODEL(SUB_INDEX)%OFF_DEF
292 IF(IALPHA > 0) IALPHA = IALPHA + OFF_DEF
293 IF(IRHO > 0) IRHO = IRHO + OFF_DEF
294 IF(IPRES > 0) IPRES = IPRES + OFF_DEF
296 CHECK_CUMUL_VF(1)=CHECK_CUMUL_VF(1)+ABS(IALPHA)
297 CHECK_CUMUL_VF(2)=CHECK_CUMUL_VF(2)+ABS(ALPHA)
302 !check and get internal function id
306 IF(IALPHA==NPC(J)) THEN
314 write(chain(8:9),'(i2)
')IMAT
315 chain1='invalid
FUNCTION id
for ialpha &
'//chain
316 CALL ANCMSG(MSGID=1602, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=ID, C1=TRIM(TITR), C2=chain1)
319 !check and get internal function id
323 IF(IRHO == NPC(J)) THEN
331 write(chain(8:9),'(i2)
')IMAT
332 chain1='invalid function id
for irho &
'//chain
333 CALL ANCMSG(MSGID=1602, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=ID, C1=TRIM(TITR), C2=chain1)
336 !check and get internal function id
340 IF(IPRES == NPC(J)) THEN
348 write(chain(8:9),'(i2)
')IMAT
349 chain1='invalid function id
for ipres &
'//chain
350 CALL ANCMSG(MSGID=1602, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=ID, C1=TRIM(TITR), C2=chain1)
354 CALL ANCMSG(MSGID=1602, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=ID, C1=TRIM(TITR), C2= "VOLUME FRACTION CANNOT BE NEGATIVE")
357 CALL ANCMSG(MSGID=1602, MSGTYPE=MSGERROR, ANMODE=ANINFO, I1=ID, C1=TRIM(TITR), C2= "MASS DENSITY CANNOT BE NEGATIVE")
359 EBCS%fvm_inlet_data%FUNC_ALPHA(IMAT) = IALPHA
360 EBCS%fvm_inlet_data%FUNC_RHO(IMAT) = IRHO
361 EBCS%fvm_inlet_data%FUNC_PRES(IMAT) = IPRES
362 EBCS%fvm_inlet_data%VAL_ALPHA(IMAT) = ALPHA
363 EBCS%fvm_inlet_data%VAL_RHO(IMAT) = RHO
364 EBCS%fvm_inlet_data%VAL_PRES(IMAT) = PRES
366 WRITE(IOUT,1131)U_IALPHA,U_IRHO,U_IPRES
367 WRITE(IOUT,1132)ALPHA,RHO,PRES
369 WRITE(IOUT, FMT='(/)
' )
370.AND.
IF(CHECK_CUMUL_VF(1) == ZERO CHECK_CUMUL_VF(2) == ZERO)THEN
371 CALL ANCMSG(MSGID=1602, MSGTYPE=MSGERROR, ANMODE=ANINFO,I1=ID, C1=TRIM(TITR), C2= "INPUT VOLUME FRACTIONS ARE EMPTY")
375 WRITE(IOUT,1118)SURF,NSEG
380 1018 FORMAT( //'fluid inlet ebcs number . . . . . . . . :
',I8,1X,A)
381 1021 FORMAT( ' velocity & pressure
')
384 . ' on surface . . . . . . . . . . . . . . .
',I8,/,
385 . ' number of segments found. . . . . . . . .
',I8,/)
387 . ' ivx function id . . . . . . . . . . . . .
',I8,/,
388 . ' vx scale factor . . . . . . . . . . . . .
',E16.6)
390 . ' ivy function id . . . . . . . . . . . . .
',I8,/,
391 . ' vy scale factor . . . . . . . . . . . . .
',E16.6)
393 . ' ivz function id . . . . . . . . . . . . .
',I8,/,
394 . ' vz scale factor . . . . . . . . . . . . .
',E16.6)
396 . ' ivx function id . . . . . . . . . . . . .
',I2)
398 . ' ivy function id . . . . . . . . . . . . .
',I2)
400 . ' ivz function id . . . . . . . . . . . . .
',I2)
402 . ' ivx function id . . . . . . . . . . . . .
',I2,/,
403 . ' von neumann bcs : d/dn(Vx) = 0
')
405 . ' ivy function id . . . . . . . . . . . . .
',I2,/,
406 . ' von neumann bcs : d/dn(Vy) = 0
')
408 . ' ivz function id . . . . . . . . . . . . .
',I2,/,
409 . ' von neumann bcs : d/dn(Vz) = 0
')
414 .
' IALPHA FUNCTION. . . . . . . . . . . . .',i8,/,
415 .
' IRHO FUNCTION. . . . . . . . . . . . . .',i8,/,
416 .
' IPRES FUNCTION. . . . . . . . . . . . . ',i8)
418 .
' ALPHA SCALE FACTOR . . . . . . . . . . .',e16.6,/,
419 .
' RHO SCALE FACTOR . . . . . . . . . . . .',e16.6,/,
420 .
' PRES SCALE FUNCTION . . . . . . . . . . ',e16.6)
422 .
' IVn FUNCTION ID . . . . . . . . . . . . . ',i8,/,
423 .
' Vn SCALE FACTOR . . . . . . . . . . . . . ',e16.6)
425 .
' Vn CONSTANT VELOCITY. . . . . . . . . . . ',e16.6)
427 .
' IVn FUNCTION ID . . . . . . . . . . . . . ',i2,/,
428 .
' 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)