OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_pfluid.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| hm_read_pfluid ../starter/source/loads/general/pfluid/hm_read_pfluid.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
30!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
31!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
32!|| hm_get_string ../starter/source/devtools/hm_reader/hm_get_string.F
33!|| hm_option_read_key ../starter/source/devtools/hm_reader/hm_option_read_key.F
34!|| hm_option_start ../starter/source/devtools/hm_reader/hm_option_start.F
35!||--- uses -----------------------------------------------------
36!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
37!|| message_mod ../starter/share/message_module/message_mod.F
38!|| r2r_mod ../starter/share/modules1/r2r_mod.F
39!|| submodel_mod ../starter/share/modules1/submodel_mod.F
40!||====================================================================
41 SUBROUTINE hm_read_pfluid(NUMLOADP ,ILOADP ,LLOADP ,FACLOADP ,NPC ,
42 . SENSORS ,IGRSURF ,UNITAB ,IFRAME ,LSUBMODEL)
43C
44C-----------------------------------------------
45C M o d u l e s
46C-----------------------------------------------
47 USE unitab_mod
48 USE r2r_mod
49 USE message_mod
50 USE groupdef_mod
51 USE submodel_mod
53 USE sensor_mod
55C-----------------------------------------------
56C I m p l i c i t T y p e s
57C-----------------------------------------------
58#include "implicit_f.inc"
59C-----------------------------------------------
60C C o m m o n B l o c k s
61C-----------------------------------------------
62#include "param_c.inc"
63#include "com04_c.inc"
64#include "units_c.inc"
65#include "r2r_c.inc"
66#include "tabsiz_c.inc"
67C-----------------------------------------------
68C D u m m y A r g u m e n t s
69C-----------------------------------------------
70 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
71 INTEGER NPC(SNPC),IFRAME(LISKN,NUMFRAM+1),NUMLOADP, ILOADP(SIZLOADP,NLOADP), LLOADP(SLLOADP)
72 my_real facloadp(lfacload,nloadp)
73C-----------------------------------------------
74 TYPE (SURF_) ,TARGET, DIMENSION(NSURF) :: IGRSURF
75 TYPE(submodel_data),INTENT(IN)::LSUBMODEL(NSUBMOD)
76 TYPE (SENSORS_) ,INTENT(IN) :: SENSORS
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 my_real fcx,fcy,fac_fcx,fac_fcy,fcx1,fcy1,fcx2,fcy2
81 INTEGER J,K, SUB_INDEX, SUB_ID, UID, ID, IFLAGUNIT,NN,IAD,TSENS,ISENS,IS,ISU,
82 . fun_hsp,fun_cx,fun_vel,ifra1,ifra2,icfield8,icfield12,icfield9,icfield13,
83 . ncur_hsp,ncur_vel,ncur_cx
84 CHARACTER MESS*40,char_X*1, char_Y*1, char_Z*1, char_XX*2, char_YY*2, char_ZZ*2
85 CHARACTER(LEN=NCHARFIELD) :: XYZ, XYZ1
86 CHARACTER(LEN=NCHARTITLE) :: TITR
87 LOGICAL IS_AVAILABLE
88
89 DATA char_x/'X'/
90 DATA char_y/'Y'/
91 DATA char_z/'Z'/
92 DATA char_xx/'XX'/
93 DATA char_yy/'YY'/
94 DATA char_zz/'ZZ'/
95 DATA mess/'FLUID PRESSURE LOAD DEFINITION '/
96C----------------------------------------------------------------------------------
97C C o m m e n t s
98C----------------------------------------------------------------------------------
99C /LOAD/PFLUID /LOAD/PBLAST
100C
101C LLOADP(1,K) : K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B : . . . SEGMENT STORAGE (surface)
102C ILOADP(1,K) : K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B : . . . INTEGER STORAGE (option parameters)
103C FACLOADP(1,K) : K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B : . . . REAL STORAGE (option parameters)
104C
105C----------------------------------------------------------------------------------
106C /LOAD/PFLUID /LOAD/PBLAST
107C K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B
108C----------------------------------------------------------------------------------
109C ILOADP(1:SIZLOADP,K) : INTEGER STORAGE (option parameters)
110C----------------------------------------------------------------------------------
111C K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B
112C
113C ILOADP(1,K) : 4*NN (4 * Nb of segments) 4*NN
114C ILOADP(2,K) : ID IS
115C ILOADP(3,K) : - -
116C ILOADP(4,K) : IAD Address of segments in LLOADP IAD
117C ILOADP(5,K) : 2 3
118C ILOADP(6,K) : Sensor id IZ_UPDATE
119C ILOADP(7,K) : FCT_HSP function No IABAC
120C ILOADP(8,K) : Dir_hsp (1, 2, 3) ID
121C ILOADP(9,K) : frahsp id ITA_SHIFT
122C ILOADP(10,K): FCT_CX function No NDT
123C ILOADP(11,K): FCT_VEL function No IMODEL
124C ILOADP(12,K): Dir_vel (1, 2, 3) -
125C ILOADP(13,K): fravel id -
126C----------------------------------------------------------------------------------
127C /LOAD/PFLUID /LOAD/PBLAST
128C K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B
129C----------------------------------------------------------------------------------
130C LLOADP(1:SLLOADP,K) : SEGMENT STORAGE (surface)
131C----------------------------------------------------------------------------------
132C K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B
133C
134C LLOADP(1,K) : NODE1 NODE1
135C LLOADP(2,K) : NODE2 NODE2
136C LLOADP(3,K) : NODE3 NODE3
137C LLOADP(4,K) : NODE4 NODE4
138C----------------------------------------------------------------------------------
139C /LOAD/PFLUID /LOAD/PBLAST
140C K=1,NLOADP_F K=1+NLOADP_F,NLOADP_F+NLOADP_B
141C----------------------------------------------------------------------------------
142C FACLOADP(LFACLOAD,K) : REAL STORAGE (option parameters)
143C----------------------------------------------------------------------------------
144C
145C FACLOADP( 1,K) = Fscaley_hsp TDET
146C FACLOADP( 2,K) = ONE/Ascalex_hsp XDET
147C FACLOADP( 3,K) = Fscaley_pc YDET
148C FACLOADP( 4,K) = ONE/Ascalex_pc ZDET
149C FACLOADP( 5,K) = Fscaley_vel WTNT
150C FACLOADP( 6,K) = ONE/Ascalex_vel P0_REF
151C FACLOADP( 7,K) = - ZERO ! TA_SHIFT
152C FACLOADP( 8,K) = - Nx_SURF
153C FACLOADP( 9,K) = - Ny_SURF
154C FACLOADP(10,K) = - Nz_SURF
155C FACLOADP(11,K) = - HC
156C FACLOADP(12,K) = - alpha_zc
157C FACLOADP(13,K) = - TSTOP
158C----------------------------------------------------------------------------------
159C S o u r c e L i n e s
160C----------------------------------------------------------------------------------
161 nn = 0
162C--------------------------------------------------
163C START BROWSING MODEL /LOAD/PFLUID
164C--------------------------------------------------
165 CALL hm_option_start('/LOAD/PFLUID')
166C--------------------------------------------------
167C BROWSING MODEL 1..NLOADP_F
168C--------------------------------------------------
169 DO k=1,nloadp_f
170C--------------------------------------------------
171C EXTRACT DATAS OF /LOAD/PFLUID... LINE
172C--------------------------------------------------
173 CALL hm_option_read_key(lsubmodel,
174 . option_id = id,
175 . unit_id = uid,
176 . submodel_id = sub_id,
177 . submodel_index = sub_index,
178 . option_titr = titr)
179
180 iflagunit = 0
181 DO j=1,unitab%NUNITS
182 IF (unitab%UNIT_ID(j) == uid) THEN
183 iflagunit = 1
184 EXIT
185 ENDIF
186 ENDDO
187 IF (uid /= 0.AND.iflagunit == 0) THEN
188 CALL ancmsg(msgid=659, anmode= aninfo, msgtype=msgerror,
189 . i2=uid,i1=id,c1='FLUID PRESSURE LOAD',c2='FLUID PRESSURE LOAD',c3= titr)
190 ENDIF
191C-----------
192 iloadp(2,k) = id !load identifier
193C-----------
194 iad = numloadp + 1
195 fun_hsp = 0
196 fun_cx = 0
197 fun_vel = 0
198 icfield9 = 0
199 icfield13 = 0
200 !Reader (based on cfg file)
201 CALL hm_get_intv('surf_ID',isu,is_available,lsubmodel)
202 CALL hm_get_intv('sens_ID',isens,is_available,lsubmodel)
203 !-----------
204 !get face nodes N1,N2,N3,N4
205 is=0
206 DO j=1,nsurf
207 IF (isu == igrsurf(j)%ID) is=j
208 ENDDO
209 IF(is /= 0)THEN
210 nn=igrsurf(is)%NSEG
211 DO j=1,nn
212 lloadp(iad+4*(j-1)) =igrsurf(is)%NODES(j,1)
213 lloadp(iad+4*(j-1)+1)=igrsurf(is)%NODES(j,2)
214 lloadp(iad+4*(j-1)+2)=igrsurf(is)%NODES(j,3)
215 IF(igrsurf(is)%ELTYP(j) == 7)THEN
216 lloadp(iad+4*(j-1)+3)=0
217 ELSE
218 lloadp(iad+4*(j-1)+3)=igrsurf(is)%NODES(j,4)
219 ENDIF
220 ENDDO
221 ENDIF
222 iloadp(1,k)=4*nn
223 !-----------
224 !possible Sensor
225 tsens=0
226 DO j=1,sensors%NSENSOR
227 IF(isens /= 0) THEN
228 IF (isens == sensors%SENSOR_TAB(j)%SENS_ID) tsens=j
229 ENDIF
230 ENDDO
231 IF((tsens == 0).AND.(isens /= 0))THEN
232 CALL ancmsg(msgid=930, msgtype=msgerror, anmode=aninfo_blind_1, i1=id, c1=titr, i2=isens)
233 ENDIF
234 !-----------
235 !Input file - Reader
236 CALL hm_get_intv('fct_hsp',ncur_hsp,is_available,lsubmodel)
237 CALL hm_get_floatv('Ascalex_hsp',fcx,is_available,lsubmodel,unitab)
238 CALL hm_get_floatv_dim('ascalex_hsp',FAC_FCX,IS_AVAILABLE,LSUBMODEL,UNITAB)
239 CALL HM_GET_FLOATV('fscaley_hsp',FCY,IS_AVAILABLE,LSUBMODEL,UNITAB)
240 CALL HM_GET_FLOATV_DIM('fscaley_hsp',FAC_FCY,IS_AVAILABLE,LSUBMODEL,UNITAB)
241 IF (FCX == ZERO) FCX = FAC_FCX ! default value
242 IF (FCY == ZERO) FCY = FAC_FCY ! default value
243 !-----------
244 !check function identifier if provided
245 IF(NCUR_HSP /= 0)THEN
246 DO J=1,NFUNCT
247 IF(NPC(NFUNCT+J+1) == NCUR_HSP)FUN_HSP=J
248 ENDDO
249 IF(FUN_HSP == 0)THEN
250 CALL ANCMSG(MSGID=929, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=ID, C1=TITR, I2=NCUR_HSP)
251 ENDIF
252 ENDIF
253 !-----------
254 !Reader for XYZ field
255 XYZ = ''
256 CALL HM_GET_STRING('dir_hsp',XYZ,ncharfield,IS_AVAILABLE)
257 !-----------
258 ICFIELD8 = 0
259 IF(XYZ(1:1) == char_X)ICFIELD8=1
260 IF(XYZ(1:1) == char_Y)ICFIELD8=2
261 IF(XYZ(1:1) == char_Z)ICFIELD8=3
262 ! XYZ mandatory if hydrostatic pressure (HSP) expected
263 IF (NCUR_HSP /= 0)THEN
264.AND..AND. IF(XYZ(1:1) /= char_X XYZ(1:1) /= char_Y XYZ(1:1) /= char_Z) THEN
265 CALL ANCMSG(MSGID=927, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=ID, C1=TITR, C2=XYZ)
266 ENDIF
267 ENDIF
268
269 !-----------
270 !possible frame
271 CALL HM_GET_INTV('frahsp_id',IFRA1,IS_AVAILABLE,LSUBMODEL)
272 !-----------
273.AND. IF(IFRA1 == 0 SUB_INDEX /= 0)THEN
274 CALL ANCMSG(MSGID=1712, ANMODE=ANINFO, MSGTYPE=MSGWARNING,
275 . I1=ID, I2=SUB_ID, C1='/load/pfluid - frahsp_id=0', C2=TITR)
276 ENDIF
277
278 DO J=0,NUMFRAM
279 IF(IFRA1 == IFRAME(4,J+1)) THEN
280 ICFIELD9=J+1
281 ENDIF
282 ENDDO
283 IF(IFRA1 == 0) ICFIELD9 = 1
284.AND. IF (IFRA1 /= 0 ICFIELD9 == 0) THEN
285 CALL ANCMSG(MSGID=928, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=ID, C1=TITR, I2=IFRA1)
286 ENDIF
287 !-----------
288 !Reader
289 CALL HM_GET_INTV('fct_pc',NCUR_CX,IS_AVAILABLE,LSUBMODEL)
290 CALL HM_GET_FLOATV('ascalex_pc',FCX1,IS_AVAILABLE,LSUBMODEL,UNITAB)
291 CALL HM_GET_FLOATV_DIM('ascalex_pc',FAC_FCX,IS_AVAILABLE,LSUBMODEL,UNITAB)
292 CALL HM_GET_FLOATV('fscaley_pc',FCY1,IS_AVAILABLE,LSUBMODEL,UNITAB)
293 CALL HM_GET_FLOATV_DIM('fscaley_pc',FAC_FCY,IS_AVAILABLE,LSUBMODEL,UNITAB)
294 IF (FCX1 == ZERO) FCX1 = FAC_FCX
295 IF (FCY1 == ZERO) FCY1 = FAC_FCY
296 !-----------
297 !check user function identifier
298 IF (NCUR_CX /= 0)THEN
299 DO J=1,NFUNCT
300 IF(NPC(NFUNCT+J+1) == NCUR_CX)FUN_CX=J
301 ENDDO
302 IF(FUN_CX == 0)THEN
303 CALL ANCMSG(MSGID=929, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=ID, C1=TITR, I2=NCUR_CX)
304 ENDIF
305 ENDIF
306 !-----------
307 !reader
308 CALL HM_GET_INTV('fct_vel',NCUR_VEL,IS_AVAILABLE,LSUBMODEL)
309 CALL HM_GET_FLOATV('ascalex_vel',FCX2,IS_AVAILABLE,LSUBMODEL,UNITAB)
310 CALL HM_GET_FLOATV_DIM('ascalex_vel',FAC_FCX,IS_AVAILABLE,LSUBMODEL,UNITAB)
311 CALL HM_GET_FLOATV('fscaley_vel',FCY2,IS_AVAILABLE,LSUBMODEL,UNITAB)
312 CALL HM_GET_FLOATV_DIM('fscaley_vel',FAC_FCY,IS_AVAILABLE,LSUBMODEL,UNITAB)
313 IF (FCX2 == ZERO) FCX2 = FAC_FCX
314 IF (FCY2 == ZERO) FCY2 = FAC_FCY
315 !-----------
316 !check user function identifier
317 IF (NCUR_VEL /= 0)THEN
318 DO J=1,NFUNCT
319 IF(NPC(NFUNCT+J+1) == NCUR_VEL)FUN_VEL=J
320 ENDDO
321 IF(FUN_VEL == 0)THEN
322 CALL ANCMSG(MSGID=929, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=ID, C1=TITR, I2=NCUR_VEL)
323 ENDIF
324 ENDIF
325 !-----------
326 CALL HM_GET_STRING('dir_vel',XYZ1,ncharfield,IS_AVAILABLE)
327 !-----------
328 ICFIELD12 = 0
329 IF(XYZ1(1:1) == char_X)ICFIELD12=1
330 IF(XYZ1(1:1) == char_Y)ICFIELD12=2
331 IF(XYZ1(1:1) == char_Z)ICFIELD12=3
332 IF (NCUR_VEL /= 0)THEN
333.AND..AND. IF(XYZ1(1:1) /= char_X XYZ1(1:1) /= char_Y XYZ1(1:1) /= char_Z) THEN
334 CALL ANCMSG(MSGID=927, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=ID, C1=TITR, C2=XYZ1)
335 ENDIF
336 ENDIF
337
338 !-----------
339 CALL HM_GET_INTV('fravel_id',IFRA2,IS_AVAILABLE,LSUBMODEL)
340 !-----------
341.AND. IF(IFRA2 == 0 SUB_INDEX /= 0)THEN
342 CALL ANCMSG(MSGID=1712, ANMODE=ANINFO, MSGTYPE=MSGWARNING,
343 . I1 = ID, I2 = SUB_ID, C1 = '/load/pfluid - fravel_id=0', C2 = TITR)
344 ENDIF
345 DO J=0,NUMFRAM
346 IF(IFRA2 == IFRAME(4,J+1)) THEN
347 ICFIELD13=J+1
348 ENDIF
349 ENDDO
350 IF(IFRA2 == 0) ICFIELD13 = 1
351.AND. IF (IFRA2 /= 0 ICFIELD13 == 0) THEN
352 CALL ANCMSG(MSGID=928, MSGTYPE=MSGERROR, ANMODE=ANINFO_BLIND_1, I1=ID, C1=TITR, I2=IFRA2)
353 ENDIF
354
355 ILOADP(5,K)=2 !type of load 2:PFLUID
356
357 !STORAGE : ILOADP (integer) - FACLOADP (real)
358 IF(IS /= 0)THEN
359 ILOADP ( 4,K) = IAD
360 ILOADP ( 6,K) = ISENS
361 ILOADP ( 7,K) = FUN_HSP
362 ILOADP ( 8,K) = ICFIELD8
363 ILOADP ( 9,K) = ICFIELD9
364 ILOADP (10,K) = FUN_CX
365 ILOADP (11,K) = FUN_VEL
366 ILOADP (12,K) = ICFIELD12
367 ILOADP (13,K) = ICFIELD13
368
369 FACLOADP( 1,K) = FCY
370 FACLOADP( 2,K) = ONE/FCX
371 FACLOADP( 3,K) = FCY1
372 FACLOADP( 4,K) = ONE/FCX1
373 FACLOADP( 5,K) = FCY2
374 FACLOADP( 6,K) = ONE/FCX2
375 !Multidomains -> numbering common segments (one single time)
376 IF (IDDOM > 0) NN = NN-ISURF_R2R(1,IS)
377 ENDIF
378
379 !OUTPUT STARTER LISTING FILE
380 WRITE (IOUT,2002)
381 WRITE (IOUT,'(i10,2x,i10,9x,a1,2x,i10,2x,i10,2x,1pg20.13,2x,1pg20.13)')ISU,IFRA1,XYZ(1:1),NCUR_HSP,ISENS,FCX,FCY
382 WRITE (IOUT,2003)
383 WRITE (IOUT,'(i10,4x,1pg20.13,4x,1pg20.13)')NCUR_CX,FCX1,FCY1
384 WRITE (IOUT,2004)
385 WRITE (IOUT,'(i10,9x,a1,2x,i10,2x,1pg20.13,2x,1pg20.13)')IFRA2,XYZ1(1:1),NCUR_VEL,FCX2,FCY2
386
387 NUMLOADP = NUMLOADP + 4*NN
388
389 ENDDO ! next K (next /LOAD/PFLUID)
390C--------------------------------------------------------------------------------C
391 RETURN
392C--------------------------------------------------------------------------------C
393 2002 FORMAT(//
394 .' pfluid load '/
395 .' ------------------ '/
396 .' surface frame_hsp dir_hsp func_hsp sensor',
397 .' scale_x scale_y')
398
399 2003 FORMAT(//
400 .' func_cx scale_x scale_y')
401
402 2004 FORMAT(//
403 .' frame_vel dir_vel func_vel',
404 .' scale_x scale_y')
405C-----------------------------------------------
406 END SUBROUTINE HM_READ_PFLUID
#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)
subroutine hm_option_start(entity_type)
subroutine hm_read_pfluid(numloadp, iloadp, lloadp, facloadp, npc, sensors, igrsurf, unitab, iframe, lsubmodel)
integer, parameter nchartitle
integer, parameter ncharfield
subroutine pfluid(iloadp, rload, npc, tf, a, v, x, xframe, ms, nsensor, sensor_tab, wfexc, wfext, iadc, fsky, fskyv, lloadp, fext, h3d_data, th_surf, python)
Definition pfluid.F:45
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