52 . UNITAB, LUID, NPC, IGRSURF,
53 . ITAB, X, PM, GEO, IXC, IXTG, LSUBMODEL)
62 use element_mod ,
only : nixc,nixtg
66#include "implicit_f.inc"
81 INTEGER,
INTENT(IN) :: LUID
82 INTEGER,
INTENT(IN) :: NPC(*), ITAB(*), IXC(NIXC, *), IXTG(NIXTG, *)
83 my_real,
INTENT(IN) :: x(3, *), geo(npropg, *), pm(npropm, *)
84 TYPE (SURF_),
INTENT(INOUT),
DIMENSION(NSURF) :: IGRSURF
86 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
92 my_real :: fac_m, fac_l, fac_t, fac_c, fac_gen
93 my_real :: scal_t, scal_p, scal_s, scal_a, scal_d
95 my_real :: sa, rot, vol, vmin, veps, amu, sv, rhoi
96 my_real :: gamma, t_relax, pext, pini, pmax, vinc, mi, ei, avent
97 my_real :: bvent, tvent, dpdef, dtpdef, fport, fporp, fpora, ti
98 INTEGER :: NVENT, IPVENT, IDEF, IPORT, IPORP, IPORA, IEQUI
99 LOGICAL :: IS_AVAILABLE
106 fac_m = unitab%FAC_M(luid)
107 fac_l = unitab%FAC_L(luid)
108 fac_t = unitab%FAC_T(luid)
109 fac_c = fac_m / (fac_l * fac_t * fac_t)
114 CALL hm_get_intv(
'surf_IDex', surfid, is_available, lsubmodel)
115 CALL hm_get_intv(
'I_equi', iequi, is_available, lsubmodel)
118 CALL hm_get_floatv(
'Ascalet', scal_t, is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'AscaleP', scal_p, is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'AscaleS', scal_s, is_available, lsubmodel, unitab)
121 CALL hm_get_floatv(
'AscaleA', scal_a, is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'AscaleD', scal_d, is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'Gamma', gamma, is_available, lsubmodel, unitab)
125 CALL hm_get_floatv(
'Mu', amu, is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'Trelax', t_relax, is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'Tini', ti, is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'Rhoi', rhoi, is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'Pext', pext, is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'Pini', pini, is_available, lsubmodel, unitab)
132 CALL hm_get_floatv(
'Pmax', pmax, is_available, lsubmodel, unitab)
133 CALL hm_get_floatv(
'Vinc', vinc, is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'Mini', mi, is_available, lsubmodel, unitab)
136 CALL hm_get_intv(
'Nvent', nvent, is_available, lsubmodel)
137 t_monvoln%IVOLU(11) = nvent
138 t_monvoln%NVENT = nvent
140 ALLOCATE(t_monvoln%IBAGHOL(nibhol, nvent))
141 t_monvoln%IBAGHOL(1:nibhol, 1:nvent) = 0
142 ALLOCATE(t_monvoln%RBAGHOL(nrbhol, nvent))
143 t_monvoln%RBAGHOL(1:nrbhol, 1:nvent) = zero
165 IF (fport == zero) fport = one
166 IF (fporp == zero) fporp = one
167 IF (fpora == zero) fpora = one
168 IF(ipvent == 0 .OR. idef == 0)
THEN
173 t_monvoln%IBAGHOL(1, ii) = idef
175 t_monvoln%IBAGHOL(2, ii) = 0
177 t_monvoln%IBAGHOL(2, ii) = 0
179 IF (ipvent == igrsurf(j)%ID) t_monvoln%IBAGHOL(2, ii) = j
181 IF(avent == zero) avent = one
183 IF(avent == zero) dpdef = infinity
184 IF(avent == zero) tvent = infinity
185 IF(dpdef == zero .AND. dtpdef == zero .AND. tvent == zero)
THEN
186 t_monvoln%IBAGHOL(1, ii) = -t_monvoln%IBAGHOL(1, ii)
188 t_monvoln%RBAGHOL(1, ii) = dpdef
189 t_monvoln%RBAGHOL(2, ii) = avent
190 t_monvoln%RBAGHOL(3, ii) = tvent
191 t_monvoln%RBAGHOL(4, ii) = dtpdef
192 t_monvoln%RBAGHOL(6, ii) = bvent
193 t_monvoln%RBAGHOL(7, ii) = fport
194 t_monvoln%RBAGHOL(8, ii) = fporp
195 t_monvoln%RBAGHOL(9, ii) = fpora
197 t_monvoln%IBAGHOL(3, ii) = -1
198 t_monvoln%IBAGHOL(4, ii) = -1
199 t_monvoln%IBAGHOL(5, ii) = -1
201 IF(iport == npc(j)) t_monvoln%IBAGHOL(3, ii) = j
202 IF(iporp == npc(j)) t_monvoln%IBAGHOL(4, ii) = j
203 IF(ipora == npc(j)) t_monvoln%IBAGHOL(5, ii) = j
205 IF(iport == 0) t_monvoln%IBAGHOL(3, ii) = 0
206 IF(iporp == 0) t_monvoln%IBAGHOL(4, ii) = 0
207 IF(ipora == 0) t_monvoln%IBAGHOL(5, ii) = 0
208 t_monvoln%IBAGHOL(6, ii) = 0
209 t_monvoln%IBAGHOL(7, ii) = 0
210 t_monvoln%IBAGHOL(8, ii) = 0
211 IF(t_monvoln%IBAGHOL(3, ii) == -1)
THEN
212 t_monvoln%IBAGHOL(3, ii) = 0
213 CALL ancmsg(msgid = 331, anmode = aninfo, msgtype = msgerror,
214 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = iport)
216 IF(t_monvoln%IBAGHOL(4, ii) == -1)
THEN
217 t_monvoln%IBAGHOL(4, ii) = 0
218 CALL ancmsg(msgid = 332, anmode = aninfo, msgtype = msgerror,
219 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = iporp)
221 IF(t_monvoln%IBAGHOL(5, ii) == -1)
THEN
222 t_monvoln%IBAGHOL(5, ii) = 0
223 CALL ancmsg(msgid = 333, anmode = aninfo, msgtype = msgerror,
224 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = ipora)
231 t_monvoln%IVOLU(4) = 0
234 IF (surfid == igrsurf(ii)%ID)
THEN
235 t_monvoln%IVOLU(4) = ii
236 t_monvoln%EXT_SURFID = ii
241 IF (.NOT. found)
THEN
243 ELSEIF (igrsurf(t_monvoln%EXT_SURFID)%ISH4N3N == 0)
THEN
244 CALL ancmsg(msgid = 18, anmode = aninfo, msgtype = msgerror,
245 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, i2 = surfid)
253 . igrsurf(t_monvoln%EXT_SURFID),ixc, ixtg, x, 3)
255 CALL monvol_compute_volume(t_monvoln, t_monvoln%TITLE, t_monvoln%IVOLU, igrsurf(t_monvoln%EXT_SURFID),
256 . itab, x, pm, geo, ixc, ixtg,
257 . sa, rot, vol, vmin, veps, sv)
260 . igrsurf(t_monvoln%EXT_SURFID),ixc,ixtg,vol, x, 3)
263 IF (gamma == one)
THEN
264 CALL ancmsg(msgid = 641, msgtype = msgerror, anmode = aninfo_blind_1, i1 = t_monvoln%ID, c1 = t_monvoln%TITLE)
266 IF (amu == zero)
THEN
274 IF (scal_t == zero)
THEN
276 scal_t = one * fac_gen
278 IF (scal_p == zero)
THEN
280 scal_p = one * fac_gen
282 IF (scal_s == zero)
THEN
284 scal_s = one * fac_gen
286 IF (scal_a == zero)
THEN
288 scal_a = one * fac_gen
290 IF (scal_d == zero)
THEN
292 scal_d = one * fac_gen
294 IF (pmax == zero)
THEN
296 pmax = infinity * fac_gen
299 IF (ti == zero) ti = twohundred95
301 IF (rhoi /= zero .AND. mi /= zero)
THEN
303 CALL ancmsg(msgid = 1718, anmode = aninfo, msgtype = msgwarning,
304 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE)
306 IF (rhoi == zero .AND. mi == zero)
THEN
307 CALL ancmsg(msgid = 1717, anmode = aninfo, msgtype = msgerror,
308 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE)
310 IF (rhoi /= zero .AND. mi == zero)
THEN
313 IF (mi /= zero .AND. rhoi == zero)
THEN
323 IF (rhoi /= zero)
THEN
324 t_monvoln%RVOLU(19) = pext / ((gamma - one) * rhoi * ti)
326 t_monvoln%IVOLU(15) = iequi
327 t_monvoln%IVOLU(11) = nvent
328 t_monvoln%RVOLU(1) = gamma
329 t_monvoln%RVOLU(3) = pext
330 veps =
max(zero, vmin - vol + vinc)
331 t_monvoln%RVOLU(4) = vol + veps
332 t_monvoln%RVOLU(5) = vinc
333 t_monvoln%RVOLU(6) = pmax
334 t_monvoln%RVOLU(17) = veps
335 IF (t_relax > zero)
THEN
336 ei = pext * (vol + veps - vinc) / (gamma - one)
337 t_monvoln%RVOLU(12) = pext
338 t_monvoln%RVOLU(52) = (pini - pext) * (vol + veps - vinc) / t_relax / (gamma-one)
340 ei = pini * (vol + veps - vinc) / (gamma - one)
341 t_monvoln%RVOLU(12) = pini
342 t_monvoln%RVOLU(52) = zero
344 t_monvoln%RVOLU(56) = pini
345 t_monvoln%RVOLU(13) = ei
347 t_monvoln%RVOLU(20) = mi
348 t_monvoln%RVOLU(57) = mi
349 t_monvoln%RVOLU(48) = t_relax
352 t_monvoln%RVOLU(26) = one / scal_t
353 t_monvoln%RVOLU(27) = one / scal_p
354 t_monvoln%RVOLU(28) = one / scal_s
355 t_monvoln%RVOLU(29) = one / scal_a
356 t_monvoln%RVOLU(30) = one / scal_d
360 t_monvoln%RVOLU(2) = amu
361 t_monvoln%RVOLU(16) = vol + veps
362 t_monvoln%RVOLU(18) = sa
363 t_monvoln%RVOLU(21) = rot
364 t_monvoln%RVOLU(22:24) = zero
369 WRITE(iout, 1005) surfid
370 WRITE(iout, 1003) scal_t, scal_p, scal_s, scal_a, scal_d
371 WRITE(iout, 1002) sa, sv, vol
372 WRITE(iout, 1300) gamma, amu, pext, pini, pmax, vinc, mi, t_relax, rhoi, ti
375 ELSE IF (iequi == 2)
THEN
379 WRITE(iout,1371) nvent
381 idef = t_monvoln%IBAGHOL(1, ii)
382 IF (ipvent /= 0) ipvent = igrsurf(t_monvoln%IBAGHOL(2, ii))%ID
383 iport = t_monvoln%IBAGHOL(3, ii)
384 iporp = t_monvoln%IBAGHOL(4, ii)
385 ipora = t_monvoln%IBAGHOL(5, ii)
386 IF(iport /= 0) iport = npc(iport)
387 IF(iporp /= 0) iporp = npc(iporp)
388 IF(ipora /= 0) ipora = npc(ipora)
389 avent = t_monvoln%RBAGHOL(2, ii)
390 tvent = t_monvoln%RBAGHOL(3, ii)
391 dpdef = t_monvoln%RBAGHOL(1, ii)
392 IF(abs(idef) == 1)
THEN
393 WRITE(iout,1380) ii, ipvent, avent, iport, iporp, ipora,tvent, dpdef, dtpdef, fport, fporp, fpora
395 WRITE(iout,1381) ii, ipvent, avent, iport, iporp, ipora,tvent, dpdef, dtpdef, fport
404 . /5x,
'INITIAL SURFACE OF MONITORED VOLUME . .=',1pg20.13,
405 . /5x,
'SURFACE ERROR(NE.0 FOR NON CLOSED SURF)=',1pg20.13,
406 . /5x,
'INITIAL VOLUME OF MONITORED VOLUME. . .=',1pg20.13)
408 . 5x,
'UNIT SCALE FOR TIME FUNCTIONS =',1pg20.13,
409 . /5x,
'UNIT SCALE FOR PRESSURE FUNCTIONS =',1pg20.13,
410 . /5x,
'UNIT SCALE FOR AREA FUNCTIONS =',1pg20.13,
411 . /5x,
'UNIT SCALE FOR ANGLE FUNCTIONS =',1pg20.13,
412 . /5x,
'UNIT SCALE FOR DISTANCE FUNCTIONS =',1pg20
413 1005
FORMAT( 5x,
'EXTERNAL SURFACE ID . . . . . . . . . .=',i10)
415 . 5x,
'GAMMA . . . . . . . . . . . . . . . . .=',1pg20.13,
416 . /5x,
'VOLUMIC VISCOSITY . . . . . . . . . . .=',1pg20
417 . /5x,
'EXTERNAL PRESSURE . . . . . . . . . . .=',1pg20.13,
418 . /5x,
'INITIAL PRESSURE. . . . . . . . . . . .=',1pg20
419 . /5x,
'BURSTING PRESSURE . . . . . . . . . . .=',1pg20.13,
420 . /5x,
'INCOMPRESSIBLE VOLUME.. . . . . . . . .=',1pg20.13,
421 . /5x,
'INITIAL MASS. . . . . . . . . . . . . .=',1pg20
422 . /5x,
'RELAXATION TIME . . . . . . . . . . . .=',1pg20.13,
423 . /5x,
'INITIAL MASS DENSITY. . . . . . . . . .=',1pg20
424 . /5x,
'INITIAL TEMPERATURE . . . . . . . . . .=',1pg20.13)
429 . /5x,
'ISOTHERMAL EQUILIBRIUM . . . . . . . . .')
431 . /5x,
'ISENTROPIC EQUILIBRIUM . . . . . . . . .')
433 . 5x,
'NUMBER OF VENT HOLES. . . . . . . . . .=',i10/)
435 . 5x,
'VENT HOLE NUMBER . . . . . . . . . . . =',i10,
436 . /15x,
'VENT HOLE SURFACE ID. . . . . . . . . .=',i10,
437 . /15x,
' (TOTAL AREA IS CONSIDERED) ',
438 . /15x,
'AVENT (VENT HOLE AREA OR SCALE FACTOR) =',1pg20.13,
439 . /15x,
' IF IPDEF=0 : VENT HOLE AREA '
440 . /15x,
' IF IPDEF/=0 : VENT HOLE AREA SCALE FACTOR'
441 . /15x,
'POROSITY FUNCTION / TIME. . . . . . . .=',i10,
442 . /15x,
'POROSITY FUNCTION / PRESSURE. . . . . .=',i10,
443 . /15x,
'POROSITY FUNCTION / AREA. . . . . . . .=',i10,
444 . /15x,
'START TIME FOR VENTING. . . . . . . . .=',1pg20.13,
445 . /15x,
'RELATIVE PRES. FOR MEMBRANE DEFLATION .=',1pg20.13,
446 . /15x,
' (DPDEF = PDEF - PEXT) ',
447 . /15x,
'MIMINUM DURATION PRES. EXCEEDS PDEF ',
448 . /15x,
' FOR MEMBRANE DEFLATION . . . .=',1pg20.13,
449 . /15x,
'POROSITY TIME FUNCTION SCALE FACTOR =',1pg20.13,
450 . /15x,
'POROSITY PRESSURE FUNCTION SCALE FACTOR=',1pg20.13,
451 . /15x,
'POROSITY AREA FUNCTION SCALE FACTOR . .=',1pg20.13)
453 . 5x,
'VENT HOLE NUMBER . . . . . . . . . . . =',i10,
454 . /15x,
'VENT HOLE SURFACE ID. . . . . . . . . .=',i10,
455 . /15x,
' (DELETED ELEMENTS AREA IS CONSIDERED) ',
456 . /15x,
'AVENT (VENT HOLE AREA OR SCALE FACTOR) =',1pg20.13,
457 . /15x,
' IF IPDEF=0 : VENT HOLE AREA '
458 . /15x,
' IF IPDEF/=0 : VENT HOLE AREA SCALE FACTOR'
459 . /15x,
'POROSITY FUNCTION / TIME. . . . . . . .=',i10,
460 . /15x,
'POROSITY FUNCTION / PRESSURE. . . . . .=',i10,
461 . /15x,
'POROSITY FUNCTION / AREA. . . . . . . .=',i10,
462 . /15x,
'START TIME FOR VENTING. . . . . . . . .=',1pg20.13,
463 . /15x,
'RELATIVE PRES. FOR MEMBRANE DEFLATION .=',1pg20.13,
464 . /15x,
' (DPDEF = PDEF - PEXT) ',
465 . /15x,
'MIMINUM DURATION PRES. EXCEEDS PDEF ',
466 . /15x,
' FOR MEMBRANE DEFLATION . . . .='
467 . /15x,
'POROSITY TIME FUNCTION SCALE FACTOR =',1pg20.13,
468 . /15x,
'POROSITY PRESSURE FUNCTION SCALE FACTOR=',1pg20.13,
469 . /15x,
'POROSITY AREA FUNCTION SCALE FACTOR . .=',1pg20.13)