52 . UNITAB, LUID, NPC, IGRSURF,
53 . ITAB, X, PM, GEO, IXC, IXTG, LSUBMODEL)
65#include "implicit_f.inc"
80 INTEGER,
INTENT(IN) :: LUID
81 INTEGER,
INTENT(IN) :: NPC(*), ITAB(*), IXC(NIXC, *), IXTG(NIXTG, *)
82 my_real,
INTENT(IN) :: x(3, *), geo(npropg, *), pm(npropm, *)
83 TYPE (SURF_),
INTENT(INOUT),
DIMENSION(NSURF) :: IGRSURF
85 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
91 my_real :: fac_m, fac_l, fac_t, fac_c
92 my_real :: scal_t, scal_p, scal_s, scal_a, scal_d
94 my_real :: sa, rot, vol, vmin, veps, amu, sv, rhoi
95 my_real :: gamma, t_relax, pext, pini, pmax, vinc, mi, ei, avent, bvent, tvent, dpdef, dtpdef, fport, fporp, fpora, ti
96 INTEGER :: NVENT, IPVENT, IDEF, IPORT, IPORP, IPORA, IEQUI
97 LOGICAL :: IS_AVAILABLE
104 fac_m = unitab%FAC_M(luid)
105 fac_l = unitab%FAC_L(luid)
106 fac_t = unitab%FAC_T(luid)
107 fac_c = fac_m / (fac_l * fac_t * fac_t)
112 CALL hm_get_intv(
'surf_IDex', surfid, is_available, lsubmodel)
113 CALL hm_get_intv(
'I_equi', iequi, is_available, lsubmodel)
116 CALL hm_get_floatv(
'Ascalet', scal_t, is_available, lsubmodel, unitab)
117 CALL hm_get_floatv(
'AscaleP', scal_p, is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'AscaleS', scal_s, is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'AscaleA', scal_a, is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'AscaleD', scal_d, is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'Gamma', gamma, is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'Mu', amu, is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'Trelax', t_relax, is_available, lsubmodel, unitab)
125 CALL hm_get_floatv(
'Tini', ti, is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'Rhoi', rhoi, is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'Pext', pext, is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'Pini', pini, is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'Pmax', pmax, is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'Vinc', vinc, is_available, lsubmodel, unitab)
132 CALL hm_get_floatv(
'Mini', mi, is_available, lsubmodel, unitab)
134 CALL hm_get_intv(
'Nvent', nvent, is_available, lsubmodel)
135 t_monvoln%IVOLU(11) = nvent
136 t_monvoln%NVENT = nvent
138 ALLOCATE(t_monvoln%IBAGHOL(nibhol, nvent))
139 t_monvoln%IBAGHOL(1:nibhol, 1:nvent) = 0
140 ALLOCATE(t_monvoln%RBAGHOL(nrbhol, nvent))
141 t_monvoln%RBAGHOL(1:nrbhol, 1:nvent) = zero
163 IF (fport == zero) fport = one
164 IF (fporp == zero) fporp = one
165 IF (fpora == zero) fpora = one
166 IF(ipvent == 0 .OR. idef == 0)
THEN
171 t_monvoln%IBAGHOL(1, ii) = idef
173 t_monvoln%IBAGHOL(2, ii) = 0
175 t_monvoln%IBAGHOL(2, ii) = 0
177 IF (ipvent == igrsurf(j)%ID) t_monvoln%IBAGHOL(2, ii) = j
179 IF(avent == zero) avent = one
181 IF(avent == zero) dpdef = infinity
182 IF(avent == zero) tvent = infinity
183 IF(dpdef == zero .AND. dtpdef == zero .AND. tvent == zero)
THEN
184 t_monvoln%IBAGHOL(1, ii) = -t_monvoln%IBAGHOL(1, ii)
186 t_monvoln%RBAGHOL(1, ii) = dpdef
187 t_monvoln%RBAGHOL(2, ii) = avent
188 t_monvoln%RBAGHOL(3, ii) = tvent
189 t_monvoln%RBAGHOL(4, ii) = dtpdef
190 t_monvoln%RBAGHOL(6, ii) = bvent
191 t_monvoln%RBAGHOL(7, ii) = fport
192 t_monvoln%RBAGHOL(8, ii) = fporp
193 t_monvoln%RBAGHOL(9, ii) = fpora
195 t_monvoln%IBAGHOL(3, ii) = -1
196 t_monvoln%IBAGHOL(4, ii) = -1
197 t_monvoln%IBAGHOL(5, ii) = -1
199 IF(iport == npc(j)) t_monvoln%IBAGHOL(3, ii) = j
200 IF(iporp == npc(j)) t_monvoln%IBAGHOL(4, ii) = j
201 IF(ipora == npc(j)) t_monvoln%IBAGHOL(5, ii) = j
203 IF(iport == 0) t_monvoln%IBAGHOL(3, ii) = 0
204 IF(iporp == 0) t_monvoln%IBAGHOL(4, ii) = 0
205 IF(ipora == 0) t_monvoln%IBAGHOL(5, ii) = 0
206 t_monvoln%IBAGHOL(6, ii) = 0
207 t_monvoln%IBAGHOL(7, ii) = 0
208 t_monvoln%IBAGHOL(8, ii) = 0
209 IF(t_monvoln%IBAGHOL(3, ii) == -1)
THEN
210 t_monvoln%IBAGHOL(3, ii) = 0
211 CALL ancmsg(msgid = 331, anmode = aninfo, msgtype = msgerror,
212 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = iport)
214 IF(t_monvoln%IBAGHOL(4, ii) == -1)
THEN
215 t_monvoln%IBAGHOL(4, ii) = 0
216 CALL ancmsg(msgid = 332, anmode = aninfo, msgtype = msgerror,
217 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = iporp
219 IF(t_monvoln%IBAGHOL(5, ii) == -1)
THEN
220 t_monvoln%IBAGHOL(5, ii) = 0
221 CALL ancmsg(msgid = 333, anmode = aninfo, msgtype = msgerror,
222 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = ipora)
229 t_monvoln%IVOLU(4) = 0
232 IF (surfid == igrsurf(ii)%ID)
THEN
233 t_monvoln%IVOLU(4) = ii
234 t_monvoln%EXT_SURFID = ii
239 IF (.NOT. found)
THEN
241 ELSEIF (igrsurf(t_monvoln%EXT_SURFID)%ISH4N3N == 0)
THEN
242 CALL ancmsg(msgid = 18, anmode = aninfo, msgtype = msgerror,
243 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = surfid)
251 . igrsurf(t_monvoln%EXT_SURFID),ixc, ixtg, x, 3)
253 CALL monvol_compute_volume(t_monvoln, t_monvoln%TITLE, t_monvoln%IVOLU, igrsurf(t_monvoln%EXT_SURFID),
254 . itab, x, pm, geo, ixc, ixtg,
255 . sa, rot, vol, vmin, veps, sv)
258 . igrsurf(t_monvoln%EXT_SURFID),ixc,ixtg,vol, x, 3)
261 IF (gamma == one)
THEN
262 CALL ancmsg(msgid = 641, msgtype = msgerror, anmode = aninfo_blind_1, i1 = t_monvoln%ID, c1 = t_monvoln%TITLE)
264 IF (amu == zero)
THEN
272 IF (scal_t == zero)
THEN
274 scal_t = one * fac_gen
276 IF (scal_p == zero)
THEN
278 scal_p = one * fac_gen
280 IF (scal_s == zero)
THEN
282 scal_s = one * fac_gen
284 IF (scal_a == zero)
THEN
286 scal_a = one * fac_gen
288 IF (scal_d == zero)
THEN
290 scal_d = one * fac_gen
292 IF (pmax == zero)
THEN
294 pmax = infinity * fac_gen
297 IF (ti == zero) ti = twohundred95
299 IF (rhoi /= zero .AND. mi /= zero)
THEN
301 CALL ancmsg(msgid = 1718, anmode = aninfo, msgtype = msgwarning,
302 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE)
304 IF (rhoi == zero .AND. mi == zero)
THEN
305 CALL ancmsg(msgid = 1717, anmode = aninfo, msgtype = msgerror,
306 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE)
308 IF (rhoi /= zero .AND. mi == zero)
THEN
311 IF (mi /= zero .AND. rhoi == zero)
THEN
320 t_monvoln%RVOLU(19) = zero
321 IF (rhoi /= zero)
THEN
322 t_monvoln%RVOLU(19) = pext / ((gamma - one) * rhoi * ti)
325 t_monvoln%IVOLU(11) = nvent
326 t_monvoln%RVOLU(1) = gamma
327 t_monvoln%RVOLU(3) = pext
328 veps =
max(zero, vmin - vol + vinc)
329 t_monvoln%RVOLU(4) = vol + veps
330 t_monvoln%RVOLU(5) = vinc
331 t_monvoln%RVOLU(6) = pmax
332 t_monvoln%RVOLU(17) = veps
333 IF (t_relax > zero)
THEN
334 ei = pext * (vol + veps - vinc) / (gamma - one)
335 t_monvoln%RVOLU(12) = pext
336 t_monvoln%RVOLU(52) = (pini - pext) * (vol + veps - vinc) / t_relax / (gamma-one)
338 ei = pini * (vol + veps - vinc) / (gamma - one)
339 t_monvoln%RVOLU(12) = pini
340 t_monvoln%RVOLU(52) = zero
342 t_monvoln%RVOLU(56) = pini
343 t_monvoln%RVOLU(13) = ei
345 t_monvoln%RVOLU(20) = mi
346 t_monvoln%RVOLU(57) = mi
347 t_monvoln%RVOLU(48) = t_relax
350 t_monvoln%RVOLU(26) = one / scal_t
351 t_monvoln%RVOLU(27) = one / scal_p
352 t_monvoln%RVOLU(28) = one / scal_s
353 t_monvoln%RVOLU(29) = one / scal_a
354 t_monvoln%RVOLU(30) = one / scal_d
358 t_monvoln%RVOLU(2) = amu
359 t_monvoln%RVOLU(16) = vol + veps
360 t_monvoln%RVOLU(18) = sa
361 t_monvoln%RVOLU(21) = rot
362 t_monvoln%RVOLU(22:24) = zero
367 WRITE(iout, 1005) surfid
368 WRITE(iout, 1003) scal_t, scal_p, scal_s, scal_a, scal_d
369 WRITE(iout, 1002) sa, sv, vol
370 WRITE(iout, 1300) gamma, amu, pext, pini, pmax, vinc, mi, t_relax, rhoi, ti
373 ELSE IF (iequi == 2)
THEN
377 WRITE(iout,1371) nvent
379 idef = t_monvoln%IBAGHOL(1, ii)
380 IF (ipvent /= 0) ipvent = igrsurf(t_monvoln%IBAGHOL(2, ii))%ID
381 iport = t_monvoln%IBAGHOL(3, ii)
382 iporp = t_monvoln%IBAGHOL(4, ii)
383 ipora = t_monvoln%IBAGHOL(5, ii)
384 IF(iport /= 0) iport = npc(iport)
385 IF(iporp /= 0) iporp = npc(iporp)
386 IF(ipora /= 0) ipora = npc(ipora)
387 avent = t_monvoln%RBAGHOL(2, ii)
388 tvent = t_monvoln%RBAGHOL(3, ii)
389 dpdef = t_monvoln%RBAGHOL(1, ii)
390 IF(abs(idef) == 1)
THEN
391 WRITE(iout,1380) ii, ipvent, avent, iport, iporp, ipora,tvent, dpdef, dtpdef
393 WRITE(iout,1381) ii, ipvent, avent, iport, iporp, ipora,tvent, dpdef, dtpdef, fport, fporp, fpora
402 . /5x,
'INITIAL SURFACE OF MONITORED VOLUME . .=',1pg20
403 . /5x,
'SURFACE ERROR(NE.0 FOR NON CLOSED SURF)=',1pg20.13,
404 . /5x,
'INITIAL VOLUME OF MONITORED VOLUME. . .=',1pg20.13)
406 . 5x,
'UNIT SCALE FOR TIME FUNCTIONS =',1pg20.13,
407 . /5x,
'UNIT SCALE FOR PRESSURE FUNCTIONS =',1pg20.13,
408 . /5x,
'UNIT SCALE FOR AREA FUNCTIONS =',1pg20.13,
409 . /5x,
'UNIT SCALE FOR ANGLE FUNCTIONS =',1pg20.13,
410 . /5x,
'UNIT SCALE FOR DISTANCE FUNCTIONS =',1pg20
411 1005
FORMAT( 5x,
'EXTERNAL SURFACE ID . . . . . . . . . .=',i10)
413 . 5x,
'GAMMA . . . . . . . . . . . . . . . . .=',1pg20.13,
414 . /5x,
'VOLUMIC VISCOSITY . . . . . . . . . . .=',1pg20.13,
415 . /5x,
'EXTERNAL PRESSURE . . . . . . . . . . .=',1pg20.13,
416 . /5x,
'INITIAL PRESSURE. . . . . . . . . . . .=',1pg20.13,
417 . /5x,
'BURSTING PRESSURE . . . . . . . . . . .=',1pg20.13,
418 . /5x,
'INCOMPRESSIBLE VOLUME.. . . . . . . . .=',1pg20.13,
419 . /5x,
'INITIAL MASS. . . . . . . . . . . . . .=',1pg20.13,
420 . /5x,
'RELAXATION TIME . . . . . . . . . . . .=',1pg20.13,
421 . /5x,
'INITIAL MASS DENSITY. . . . . . . . . .=',1pg20.13,
422 . /5x,
'INITIAL TEMPERATURE . . . . . . . . . .=',1pg20.13)
427 . /5x,
'ISOTHERMAL EQUILIBRIUM . . . . . . . . .')
429 . /5x,
'ISENTROPIC EQUILIBRIUM . . . . . . . . .')
431 . 5x,
'NUMBER OF VENT HOLES. . . . . . . . . .=',i10/)
433 . 5x,
'VENT HOLE NUMBER . . . . . . . . . . . =',i10,
434 . /15x,
'VENT HOLE SURFACE ID. . . . . . . . . .=',i10,
435 . /15x,
' (TOTAL AREA IS CONSIDERED) ',
436 . /15x,
'AVENT (VENT HOLE AREA OR SCALE FACTOR) =',1pg20.13,
437 . /15x,
' IF IPDEF=0 : VENT HOLE AREA '
438 . /15x,
' IF IPDEF/=0 : VENT HOLE AREA SCALE FACTOR'
439 . /15x,
'POROSITY FUNCTION / TIME. . . . . . . .=',i10,
440 . /15x,
'POROSITY FUNCTION / PRESSURE. . . . . .=',i10,
441 . /15x,
'POROSITY FUNCTION / AREA. . . . . . . .=',i10,
442 . /15x,
'START TIME FOR VENTING. . . . . . . . .=',1pg20.13,
443 . /15x,
'RELATIVE PRES. FOR MEMBRANE DEFLATION .=',1pg20.13,
444 . /15x,
' (DPDEF = PDEF - PEXT) ',
445 . /15x,
'MIMINUM DURATION PRES. EXCEEDS PDEF ',
446 . /15x
' FOR MEMBRANE DEFLATION . . . .=',1pg20.13,
447 . /15x,
'POROSITY TIME FUNCTION SCALE FACTOR =',1pg20.13,
448 . /15x,
'POROSITY PRESSURE FUNCTION SCALE FACTOR=',1pg20.13,
449 . /15x,
'POROSITY AREA FUNCTION SCALE FACTOR . .=',1pg20.13)
451 . 5x,
'VENT HOLE NUMBER . . . . . . . . . . . =',i10,
452 . /15x,
'VENT HOLE SURFACE ID. . . . . . . . . .=',i10,
453 . /15x,
' (DELETED ELEMENTS AREA IS CONSIDERED) ',
454 . /15x,
'AVENT (VENT HOLE AREA OR SCALE FACTOR) =',1pg20.13,
455 . /15x,
' IF IPDEF=0 : VENT HOLE AREA '
456 . /15x,
' IF IPDEF/=0 : VENT HOLE AREA SCALE FACTOR'
457 . /15x,
'POROSITY FUNCTION / TIME. . . . . . . .=',i10,
458 . /15x,
'POROSITY FUNCTION / PRESSURE. . . . . .=',i10
459 . /15x,
'POROSITY FUNCTION / AREA. . . . . . . .=',i10,
460 . /15x,
'START TIME FOR VENTING. . . . . . . . .='
461 . /15x,
'RELATIVE PRES. FOR MEMBRANE DEFLATION .=',1pg20.13,
462 . /15x,
' (DPDEF = PDEF - PEXT) ',
463 . /15x,
'MIMINUM DURATION PRES. EXCEEDS PDEF ',
464 . /15x,
' FOR MEMBRANE DEFLATION . . . .='
465 . /15x,
'POROSITY TIME FUNCTION SCALE FACTOR =',1pg20.13,
466 . /15x,
'POROSITY PRESSURE FUNCTION SCALE FACTOR=',1pg20.13,
467 . /15x,
'POROSITY AREA FUNCTION SCALE FACTOR . .=',1pg20