50 SUBROUTINE hm_read_monvol_type10(T_MONVOLN, UNITAB, NPC, IGRSURF, ITAB, X, PM, GEO, IXC, IXTG, LSUBMODEL)
62#include "implicit_f.inc"
77 INTEGER,
INTENT(IN) :: NPC(*), ITAB(*), IXC(NIXC, *), IXTG(NIXTG, *)
78 my_real,
INTENT(IN) :: x(3, *), geo(npropg, *), pm(npropm, *)
79 TYPE (SURF_),
INTENT(INOUT),
DIMENSION(NSURF) :: IGRSURF
81 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
86 INTEGER :: SURFID, IFUNCT_ID(6), IFBULK, IFMIN, IFMOUTT, IFMOUTP, IFP0, IFPMAX
89 my_real :: sa, rot, vol, vmin, veps, amu, sv
90 my_real :: rhoi, sfbulk, sfmin, sfmoutt, sfmoutp, sfp0, sfpmax
92 LOGICAL :: IS_AVAILABLE
100 CALL hm_get_intv(
'surf_IDex', surfid, is_available, lsubmodel)
102 CALL hm_get_floatv(
'Ascalet', scal_t, is_available, lsubmodel, unitab)
103 CALL hm_get_floatv(
'AscaleP', scal_p, is_available, lsubmodel, unitab)
105 CALL hm_get_floatv(
'Rho', rhoi, is_available, lsubmodel, unitab)
107 CALL hm_get_intv(
'fct_K', ifbulk, is_available, lsubmodel)
108 CALL hm_get_intv(
'fct_Mtin', ifmin, is_available, lsubmodel)
109 CALL hm_get_floatv(
'Fscale_K', sfbulk, is_available, lsubmodel, unitab)
110 CALL hm_get_floatv('fscale_mtin
', SFMIN, IS_AVAILABLE, LSUBMODEL, UNITAB)
112 CALL HM_GET_INTV('fct_mtout
', IFMOUTT, IS_AVAILABLE, LSUBMODEL)
113 CALL HM_GET_INTV('fct_mpout
', IFMOUTP, IS_AVAILABLE, LSUBMODEL)
114 CALL HM_GET_FLOATV('fscale_mtout
', SFMOUTT, IS_AVAILABLE, LSUBMODEL, UNITAB)
115 CALL HM_GET_FLOATV('fscale_mpout
', SFMOUTP, IS_AVAILABLE, LSUBMODEL, UNITAB)
117 CALL HM_GET_INTV('fct_padd
', IFP0, IS_AVAILABLE, LSUBMODEL)
118 CALL HM_GET_INTV('fct_pmax
', IFPMAX, IS_AVAILABLE, LSUBMODEL)
119 CALL HM_GET_FLOATV('fscale_padd
', SFP0, IS_AVAILABLE, LSUBMODEL, UNITAB)
120 CALL HM_GET_FLOATV('fscale_pmax
', SFPMAX, IS_AVAILABLE, LSUBMODEL, UNITAB)
125 T_MONVOLN%IVOLU(4) = 0
128 IF (SURFID == IGRSURF(II)%ID) THEN
129 T_MONVOLN%IVOLU(4) = II
130 T_MONVOLN%EXT_SURFID = II
135.NOT.
IF ( FOUND) THEN
137 ELSEIF (IGRSURF(T_MONVOLN%EXT_SURFID)%ISH4N3N == 0) THEN
138 CALL ANCMSG(MSGID = 18, ANMODE = ANINFO, MSGTYPE = MSGERROR,
139 . I1 = T_MONVOLN%ID, C1 = T_MONVOLN%TITLE, I2 = SURFID)
144 CALL MONVOL_CHECK_SURFCLOSE(T_MONVOLN, ITAB, IGRSURF(T_MONVOLN%EXT_SURFID), X)
146 CALL MONVOL_ORIENT_SURF(T_MONVOLN, T_MONVOLN%TITLE, T_MONVOLN%IVOLU, ITAB,
147 . IGRSURF(T_MONVOLN%EXT_SURFID),IXC, IXTG, X, 10)
149 CALL MONVOL_COMPUTE_VOLUME(T_MONVOLN, T_MONVOLN%TITLE, T_MONVOLN%IVOLU, IGRSURF(T_MONVOLN%EXT_SURFID),
150 . ITAB, X, PM, GEO, IXC, IXTG,
151 . SA, ROT, VOL, VMIN, VEPS, SV)
153 CALL MONVOL_REVERSE_NORMALS(T_MONVOLN, T_MONVOLN%TITLE, T_MONVOLN%IVOLU, ITAB,
154 . IGRSURF(T_MONVOLN%EXT_SURFID),IXC,IXTG,VOL, X, 10)
159 CALL CHECK_FUNCTION_ID(NPC, NFUNCT, IFBULK, IFUNCT_ID(1), FOUND)
160.NOT.
IF ( FOUND) THEN
161 CALL ANCMSG(MSGID = 9, ANMODE = ANINFO, MSGTYPE = MSGERROR,
162 . I2 = IFBULK, I1 = T_MONVOLN%ID, C1 = T_MONVOLN%TITLE, C2 = 'bulk
')
166 CALL CHECK_FUNCTION_ID(NPC, NFUNCT, IFMIN, IFUNCT_ID(2), FOUND)
167.NOT.
IF ( FOUND) THEN
168 CALL ANCMSG(MSGID = 9, ANMODE = ANINFO, MSGTYPE = MSGERROR,
169 . I2 = IFMIN, I1 = T_MONVOLN%ID, C1 = T_MONVOLN%TITLE, C2 = 'mass flow
')
172 IF (IFMOUTT > 0) THEN
173 CALL CHECK_FUNCTION_ID(NPC, NFUNCT, IFMOUTT, IFUNCT_ID(3), FOUND)
174.NOT.
IF ( FOUND) THEN
175 CALL ANCMSG(MSGID = 9, ANMODE = ANINFO, MSGTYPE = MSGERROR,
176 . I2 = IFMOUTT, I1 = T_MONVOLN%ID, C1 = T_MONVOLN%TITLE, C2 = 'mass flow
')
179 IF (IFMOUTP > 0) THEN
180 CALL CHECK_FUNCTION_ID(NPC, NFUNCT, IFMOUTP, IFUNCT_ID(4), FOUND)
181.NOT.
IF ( FOUND) THEN
182 CALL ANCMSG(MSGID = 9, ANMODE = ANINFO, MSGTYPE = MSGERROR,
183 . I2 = IFMOUTP, I1 = T_MONVOLN%ID, C1 = T_MONVOLN%TITLE, C2 = 'mass flow
')
187 CALL CHECK_FUNCTION_ID(NPC, NFUNCT, IFP0, IFUNCT_ID(5), FOUND)
188.NOT.
IF ( FOUND) THEN
189 CALL ANCMSG(MSGID = 9, ANMODE = ANINFO, MSGTYPE = MSGERROR,
190 . I2 = IFP0, I1 = T_MONVOLN%ID, C1 = T_MONVOLN%TITLE, C2 = 'pressure
')
194 CALL CHECK_FUNCTION_ID(NPC, NFUNCT, IFPMAX, IFUNCT_ID(6), FOUND)
195.NOT.
IF ( FOUND) THEN
196 CALL ANCMSG(MSGID = 9, ANMODE = ANINFO, MSGTYPE = MSGERROR,
197 . I2 = IFPMAX, I1 = T_MONVOLN%ID, C1 = T_MONVOLN%TITLE, C2 = 'pressure
')
203 IF (SCAL_T == ZERO) THEN
204 CALL HM_GET_FLOATV_DIM('ascalet
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
205 SCAL_T = ONE * FAC_GEN
207 IF (SCAL_P == ZERO) THEN
208 CALL HM_GET_FLOATV_DIM('ascalep
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
209 SCAL_P = ONE * FAC_GEN
213 IF (SFBULK == ZERO) THEN
214 CALL HM_GET_FLOATV_DIM('fscale_k
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
215 SFBULK = ONE * FAC_GEN
219 IF (SFMIN == ZERO) THEN
220 CALL HM_GET_FLOATV_DIM('fscale_mtin
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
221 SFMIN = ONE * FAC_GEN
224 IF (IFMOUTT > 0) THEN
225 IF (SFMOUTT == ZERO) THEN
226 CALL HM_GET_FLOATV_DIM('fscale_mtout
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
227 SFMOUTT = ONE * FAC_GEN
230 IF (IFMOUTP > 0) THEN
231 IF (SFMOUTP == ZERO) THEN
232 CALL HM_GET_FLOATV_DIM('fscale_mpout
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
233 SFMOUTP = ONE * FAC_GEN
237 IF (SFP0 == ZERO) THEN
238 CALL HM_GET_FLOATV_DIM('fscale_padd
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
242 CALL HM_GET_FLOATV_DIM('fscale_pmax
', FAC_GEN, IS_AVAILABLE, LSUBMODEL, UNITAB)
244 IF (SFPMAX == ZERO) THEN
245 SFPMAX = ONE * FAC_GEN
248 SFPMAX = INFINITY * FAC_GEN
254 T_MONVOLN%IVOLU(21) = IFUNCT_ID(1)
255 T_MONVOLN%RVOLU(35) = SFBULK
256 T_MONVOLN%IVOLU(22) = IFUNCT_ID(2)
257 T_MONVOLN%RVOLU(36) = SFMIN
258 T_MONVOLN%IVOLU(23) = IFUNCT_ID(3)
259 T_MONVOLN%RVOLU(37) = SFMOUTT
260 T_MONVOLN%IVOLU(24) = IFUNCT_ID(4)
261 T_MONVOLN%RVOLU(38) = SFMOUTP
262 T_MONVOLN%IVOLU(25) = IFUNCT_ID(5)
263 T_MONVOLN%RVOLU(39) = SFP0
264 T_MONVOLN%IVOLU(26) = IFUNCT_ID(6)
265 T_MONVOLN%RVOLU(40) = SFPMAX
267 T_MONVOLN%RVOLU(26) = ONE / SCAL_T
268 T_MONVOLN%RVOLU(27) = ONE / SCAL_P
269 T_MONVOLN%RVOLU(28) = ONE
270 T_MONVOLN%RVOLU(29) = ONE
271 T_MONVOLN%RVOLU(30) = ONE
273 T_MONVOLN%RVOLU(34) = RHOI
275 VEPS = MAX(ZERO, VMIN - VOL)
276 T_MONVOLN%RVOLU(4) = VOL + VEPS
277 T_MONVOLN%RVOLU(17) = VEPS
278 T_MONVOLN%RVOLU(20)= RHOI*VOL
281 T_MONVOLN%RVOLU(2) = AMU
282 T_MONVOLN%RVOLU(16) = VOL + VEPS
283 T_MONVOLN%RVOLU(18) = SA
284 T_MONVOLN%RVOLU(21) = ROT
285 T_MONVOLN%RVOLU(22:24) = ZERO
290 WRITE(IOUT, 1005) SURFID
291 WRITE(IOUT, 1003) SCAL_T, SCAL_P
292 WRITE(IOUT, 1002) SA, SV, VOL
293 WRITE(IOUT,1800) RHOI, IFBULK, SFBULK, IFMIN, SFMIN, IFMOUTT, SFMOUTT,
294 . IFMOUTP, SFMOUTP, IFP0, SFP0, IFPMAX, SFPMAX
301 . /5X,'initial surface of monitored volume
',1PG20.13,
302 . /5X,'surface error(ne.0
for non closed surf)=
',1PG20.13,
303 . /5X,'initial volume of monitored volume. . .=
',1PG20.13)
305 . 5X,'unit scale
for time functions =
',1PG20.13,
306 . /5X,'unit scale
for pressure functions =
',1PG20.13)
307 1005 FORMAT( 5X,'EXTERNAL surface
id . . . . . . . . . .=
',I10)
310 . 5X,'fluid density. . . . . . . . . . . . . . . . . . . . . =
',1PG20.13,
311 . /5X,'bulk time function. . . . . . . . . . . . . . . . . . .=
',I10,
312 . /5X,'bulk time
FUNCTION scale factor. . . . . . . . . . . . =
',1PG20.13,
313 . /5X,'input mass flow rate time function. . . . . . . . . . .=
',I10,
314 . /5X,'input mass flow rate time function scale factor. . . . =
',1PG20.13,
315 . /5X,'output mass flow rate time function. . . . . . . . . . =
',I10,
316 . /5X,'output mass flow rate time function scale factor. . . .=
',1PG20.13,
317 . /5X,'output mass flow rate pressure function. . . . . . . . =
',I10,
318 . /5X,'output mass flow rate pressure function scale factor. .=
',1PG20.13,
319 . /5X,'additional pressure time function. . . . . . . . . . . =
',I10,
320 . /5X,'additional pressure time function scale factor. . . . .=
',1PG20.13,
321 . /5X,'maximum pressure time function. . . . . . . . . . . . .=
',I10,
322 . /5X,'maximum pressure time function scale factor. . . . . . =
',1PG20.13)