OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_monvol_type10_mod Module Reference

Functions/Subroutines

subroutine hm_read_monvol_type10 (t_monvoln, unitab, npc, igrsurf, itab, x, pm, geo, ixc, ixtg, lsubmodel)

Function/Subroutine Documentation

◆ hm_read_monvol_type10()

subroutine hm_read_monvol_type10_mod::hm_read_monvol_type10 ( type(monvol_struct_), intent(inout) t_monvoln,
type(unit_type_), intent(in) unitab,
integer, dimension(*), intent(in) npc,
type (surf_), dimension(nsurf), intent(inout) igrsurf,
integer, dimension(*), intent(in) itab,
dimension(3, *), intent(in) x,
dimension(npropm, *), intent(in) pm,
dimension(npropg, *), intent(in) geo,
integer, dimension(nixc, *), intent(in) ixc,
integer, dimension(nixtg, *), intent(in) ixtg,
type(submodel_data), dimension(nsubmod), intent(in) lsubmodel )

Definition at line 50 of file hm_read_monvol_type10.F.

51C-----------------------------------------------
52C M o d u l e s
53C-----------------------------------------------
54 USE unitab_mod
55 USE groupdef_mod
56 USE message_mod
58 USE submodel_mod
59C-----------------------------------------------
60C I m p l i c i t T y p e s
61C-----------------------------------------------
62#include "implicit_f.inc"
63C-----------------------------------------------
64C C o m m o n B l o c k s
65C-----------------------------------------------
66C NSURF, NFUNCT
67#include "com04_c.inc"
68C KMONVO, IREC
69C NIMV, NRVOLU
70#include "param_c.inc"
71C IIN
72#include "units_c.inc"
73C-----------------------------------------------
74C D u m m y A r g u m e n t s
75C-----------------------------------------------
76 TYPE(UNIT_TYPE_), INTENT(IN) :: UNITAB
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
80 TYPE(MONVOL_STRUCT_), INTENT(INOUT) :: T_MONVOLN
81 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
82C-----------------------------------------------
83C L o c a l V a r i a b l e s
84C-----------------------------------------------
85 INTEGER :: II
86 INTEGER :: SURFID, IFUNCT_ID(6), IFBULK, IFMIN, IFMOUTT, IFMOUTP, IFP0, IFPMAX
87 my_real :: fac_gen
88 my_real :: scal_t, scal_p
89 my_real :: sa, rot, vol, vmin, veps, amu, sv
90 my_real :: rhoi, sfbulk, sfmin, sfmoutt, sfmoutp, sfp0, sfpmax
91 LOGICAL :: FOUND
92 LOGICAL :: IS_AVAILABLE
93C-----------------------------------------------
94C B e g i n n i n g o f s o u r c e
95C-----------------------------------------------
96C =======
97C Reading
98C =======
99C Line 1
100 CALL hm_get_intv('surf_IDex', surfid, is_available, lsubmodel)
101C Line 2
102 CALL hm_get_floatv('Ascalet', scal_t, is_available, lsubmodel, unitab)
103 CALL hm_get_floatv('AscaleP', scal_p, is_available, lsubmodel, unitab)
104C Line 3
105 CALL hm_get_floatv('Rho', rhoi, is_available, lsubmodel, unitab)
106C Line 4
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)
111C Line 5
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)
116C Line 6
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)
121C ================
122C Check operations
123C ================
124C External surface check
125 t_monvoln%IVOLU(4) = 0
126 found = .false.
127 DO ii = 1, nsurf
128 IF (surfid == igrsurf(ii)%ID) THEN
129 t_monvoln%IVOLU(4) = ii
130 t_monvoln%EXT_SURFID = ii
131 found = .true.
132 EXIT
133 ENDIF
134 ENDDO
135 IF (.NOT. found) THEN
136 CALL freerr(3)
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)
140 CALL freerr(3)
141 ENDIF
142
143C Check surface closure
144 CALL monvol_check_surfclose(t_monvoln, itab, igrsurf(t_monvoln%EXT_SURFID), x)
145C Set all normal on same side
146 CALL monvol_orient_surf(t_monvoln, t_monvoln%TITLE, t_monvoln%IVOLU, itab,
147 . igrsurf(t_monvoln%EXT_SURFID),ixc, ixtg, x, 10)
148C Compute Monvon volume
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)
152C Reverse all normals to ensure positive volume
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)
155
156
157 ifunct_id(1:6) = 0
158 IF (ifbulk > 0) THEN
159 CALL check_function_id(npc, nfunct, ifbulk, ifunct_id(1), found)
160 IF (.NOT. found) THEN
161 CALL ancmsg(msgid = 9, anmode = aninfo, msgtype = msgerror,
162 . i2 = ifbulk, i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, c2 = 'BULK')
163 ENDIF
164 ENDIF
165 IF (ifmin > 0) THEN
166 CALL check_function_id(npc, nfunct, ifmin, ifunct_id(2), found)
167 IF (.NOT. 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')
170 ENDIF
171 ENDIF
172 IF (ifmoutt > 0) THEN
173 CALL check_function_id(npc, nfunct, ifmoutt, ifunct_id(3), found)
174 IF (.NOT. 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')
177 ENDIF
178 ENDIF
179 IF (ifmoutp > 0) THEN
180 CALL check_function_id(npc, nfunct, ifmoutp, ifunct_id(4), found)
181 IF (.NOT. 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')
184 ENDIF
185 ENDIF
186 IF (ifp0 > 0) THEN
187 CALL check_function_id(npc, nfunct, ifp0, ifunct_id(5), found)
188 IF (.NOT. found) THEN
189 CALL ancmsg(msgid = 9, anmode = aninfo, msgtype = msgerror,
190 . i2 = ifp0, i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, c2 = 'PRESSURE')
191 ENDIF
192 ENDIF
193 IF (ifpmax > 0) THEN
194 CALL check_function_id(npc, nfunct, ifpmax, ifunct_id(6), found)
195 IF (.NOT. found) THEN
196 CALL ancmsg(msgid = 9, anmode = aninfo, msgtype = msgerror,
197 . i2 = ifpmax, i1 = t_monvoln%ID, c1 = t_monvoln%TITLE, c2 = 'PRESSURE')
198 ENDIF
199 ENDIF
200
201
202C Default value for time scale factor
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
206 ENDIF
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
210 ENDIF
211C Default value
212 IF (ifbulk > 0) THEN
213 IF (sfbulk == zero) THEN
214 CALL hm_get_floatv_dim('Fscale_K', fac_gen, is_available, lsubmodel, unitab)
215 sfbulk = one * fac_gen
216 ENDIF
217 ENDIF
218 IF (ifmin > 0) THEN
219 IF (sfmin == zero) THEN
220 CALL hm_get_floatv_dim('Fscale_Mtin', fac_gen, is_available, lsubmodel, unitab)
221 sfmin = one * fac_gen
222 ENDIF
223 ENDIF
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
228 ENDIF
229 ENDIF
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
234 ENDIF
235 ENDIF
236 IF (ifp0 > 0) THEN
237 IF (sfp0 == zero) THEN
238 CALL hm_get_floatv_dim('Fscale_Padd', fac_gen, is_available, lsubmodel, unitab)
239 sfp0 = one * fac_gen
240 ENDIF
241 ENDIF
242 CALL hm_get_floatv_dim('Fscale_Pmax', fac_gen, is_available, lsubmodel, unitab)
243 IF (ifpmax > 0) THEN
244 IF (sfpmax == zero) THEN
245 sfpmax = one * fac_gen
246 ENDIF
247 ELSE
248 sfpmax = infinity * fac_gen
249 ENDIF
250C =====
251C Store
252C =====
253C Store in data structure
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
266
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
272
273 t_monvoln%RVOLU(34) = rhoi
274C
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
279C
280 amu = zero
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
286
287C =========
288C Print out
289C =========
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
295C-----------------------------------------------
296C E n d o f s o u r c e
297C-----------------------------------------------
298
299 RETURN
300 1002 FORMAT(
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)
304 1003 FORMAT(
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)
308
309 1800 FORMAT(
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)
subroutine check_function_id(npc, nfunct, ifunct_in, ifunct_out, ifound)
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
#define max(a, b)
Definition macros.h:21
subroutine monvol_compute_volume(t_monvoln, title, ivolu, surf, itab, node_coord, pm, geo, ixc, ixtg, sa, rot, vol, vmin, veps, sv)
subroutine monvol_check_surfclose(t_monvoln, itab, surf, x)
subroutine monvol_orient_surf(t_monvoln, title, ivolu, itab, surf, ixc, ixtg, x, itype)
subroutine monvol_reverse_normals(t_monvoln, title, ivolu, itab, surf, ixc, ixtg, vol, x, itype)
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)
Definition message.F:889
subroutine freerr(it)
Definition freform.F:506