OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
read_sensor_hic.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!|| read_sensor_hic ../starter/source/tools/sensor/read_sensor_hic.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_sensors ../starter/source/tools/sensor/hm_read_sensors.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_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
31!|| hm_get_string ../starter/source/devtools/hm_reader/hm_get_string.F
32!||--- uses -----------------------------------------------------
33!|| format_mod ../starter/share/modules1/format_mod.F90
34!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
35!|| message_mod ../starter/share/message_module/message_mod.F
36!|| submodel_mod ../starter/share/modules1/submodel_mod.F
37!||====================================================================
38 SUBROUTINE read_sensor_hic(SENSOR_PTR ,SENS_ID ,TITR ,
39 . LACCELM ,UNITAB ,LSUBMODEL )
40C-----------------------------------------------
41C M o d u l e s
42C-----------------------------------------------
43 USE unitab_mod
44 USE message_mod
45 USE submodel_mod
46 USE sensor_mod
49 USE format_mod , ONLY : lfield
50C-----------------------------------------------
51C I m p l i c i t T y p e s
52C-----------------------------------------------
53#include "implicit_f.inc"
54C-----------------------------------------------
55C C o m m o n B l o c k s
56C-----------------------------------------------
57#include "com04_c.inc"
58#include "units_c.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 INTEGER ,INTENT(IN) :: SENS_ID
63 INTEGER ,DIMENSION(3,*) ,INTENT(IN) :: LACCELM
64 CHARACTER (len=nchartitle) TITR
65 TYPE (SENSOR_STR_) ,INTENT(INOUT) :: SENSOR_PTR
66 TYPE (SUBMODEL_DATA) ,DIMENSION(NSUBMOD) :: LSUBMODEL
67 TYPE (UNIT_TYPE_) ,INTENT(IN) ::UNITAB
68C-----------------------------------------------
69C L o c a l V a r i a b l e s
70C-----------------------------------------------
71 INTEGER :: K,SENS_TYPE,INP_FLAG,ACC_ID,IACC,IDIR,
72 . npoint,nparis,nparrs,nvar
73 my_real :: tdel,period,hic_crit,def_gravity,gravity,tmin,
74 . fac_grav,time_unit
75 CHARACTER(LEN=NCHARKEY) :: DIR
76 LOGICAL :: IS_AVAILABLE
77 DATA def_gravity/9.80665/
78C--------------------------------
79C SENSOR BASED ON HEAD INJURY INDEX CRITERION
80C=======================================================================
81 is_available = .false.
82c
83 sens_type = 16
84 inp_flag = 1 ! input is accelerometer ID (instead of node ID)
85 npoint = 200 ! default value
86c--------------------------------------------------
87card1
88 CALL hm_get_floatv('Tdelay' ,tdel ,is_available,lsubmodel,unitab)
89card2
90 CALL hm_get_intv ('IACC1' ,acc_id ,is_available,lsubmodel)
91 CALL hm_get_string('DIR ' ,dir ,ncharfield,is_available)
92card3
93 CALL hm_get_floatv('HIC_Period' ,period ,is_available,lsubmodel,unitab)
94 CALL hm_get_floatv('HIC_Value' ,hic_crit ,is_available,lsubmodel,unitab)
95 CALL hm_get_floatv('HIC_Gravity' ,gravity ,is_available,lsubmodel,unitab)
96 CALL hm_get_floatv('Tmin' ,tmin ,is_available,lsubmodel,unitab)
97c--------------------------------------------------
98c Check input data
99c--------------------------------------------------
100 iacc = 0
101 IF (acc_id > 0) THEN
102 DO k =1,naccelm
103 IF (acc_id == laccelm(2,k))THEN
104 iacc = k
105 EXIT
106 ENDIF
107 ENDDO
108 END IF
109 IF (iacc == 0) THEN
110 CALL ancmsg(msgid=45, msgtype=msgerror, anmode=aninfo_blind_2,
111 . i1=sens_id,
112 . c1=titr,
113 . i2=iacc)
114 END IF
115c--------------------
116 idir = 0
117 DO k = 1,lfield
118 IF (dir(k:k) == 'R' .or .dir(k:k) == 'r') THEN
119 idir = 1
120 dir(1:1) = 'R'
121 ELSE IF (dir(k:k) == 'X' .or .dir(k:k) == 'x') THEN
122 idir = 2
123 dir(1:1) = 'X'
124 ELSE IF (dir(k:k) == 'Y' .or .dir(k:k) == 'y') THEN
125 idir = 3
126 dir(1:1) = 'Y'
127 ELSE IF (dir(k:k) == 'Z' .or .dir(k:k) == 'z') THEN
128 idir = 4
129 dir(1:1) = 'Z'
130 END IF
131 IF (idir > 0) THEN
132 dir(1:1) = dir(k:k)
133 EXIT
134 END IF
135 ENDDO
136 IF (idir == 0) THEN
137 dir(1:1) = 'R'
138 idir = 1
139 END IF
140c--------------------
141 IF (gravity == zero) THEN
142 fac_grav = unitab%FAC_T_WORK**2 / unitab%FAC_L_WORK
143 gravity = def_gravity * fac_grav
144 END IF
145 IF (hic_crit == zero) hic_crit = infinity
146 IF (period == zero) THEN
147 period = 0.036 ! m/s
148 period = period / unitab%FAC_T_WORK
149 END IF
150c
151 time_unit = unitab%FAC_T_WORK
152c-------------------------------
153 sensor_ptr%TYPE = sens_type
154 sensor_ptr%SENS_ID = sens_id
155 sensor_ptr%STATUS = 0 ! status = deactivated
156 sensor_ptr%TSTART = infinity
157 sensor_ptr%TCRIT = infinity
158 sensor_ptr%TMIN = tmin
159 sensor_ptr%TDELAY = tdel ! time delay before activation
160 sensor_ptr%VALUE = zero
161c
162 nparis = 4
163 nparrs = 4
164 nvar = 4 + npoint
165c
166 sensor_ptr%NPARI = nparis
167 sensor_ptr%NPARR = nparrs
168 sensor_ptr%NVAR = nvar
169c
170 ALLOCATE (sensor_ptr%IPARAM(nparis))
171 ALLOCATE (sensor_ptr%RPARAM(nparrs))
172 ALLOCATE (sensor_ptr%VAR(nvar))
173 sensor_ptr%VAR(:) = zero
174c
175 sensor_ptr%IPARAM(1) = inp_flag
176 sensor_ptr%IPARAM(2) = iacc
177 sensor_ptr%IPARAM(3) = npoint
178 sensor_ptr%IPARAM(4) = idir
179c
180 sensor_ptr%RPARAM(1) = period
181 sensor_ptr%RPARAM(2) = hic_crit
182 sensor_ptr%RPARAM(3) = gravity
183 sensor_ptr%RPARAM(4) = time_unit
184c-----------------------------------------------------------------------
185 WRITE (iout, 1000) sens_id,tdel
186 WRITE (iout, 2000) acc_id,dir(1:1),tdel,period,hic_crit,tmin,gravity
187c-----------------------------------------------------------------------
188 1000 FORMAT(
189 . 5x,' SENSOR TYPE 16: HIC '/,
190 . 5x,' ------------------- '/,
191 . 5X,'sensor id. . . . . . . . . . . . . . . . .=',I10/
192 . 5X,'time delay before activation . . . . . . .=',E12.4)
193 2000 FORMAT(
194 . 5X,'accelerometer id . . . . . . . . . . . . =',I10/
195 . 5X,'direction. . . . . . . . . . . . . . . . =',A10/
196 . 5X,'time delay before activation . . . . . . =',E12.4/
197 . 5X,'hic period . . . . . . . . . . . . . . . =',E12.4/,
198 . 5X,'hic criterion. . . . . . . . . . . . . . =',E12.4/,
199 . 5X,'hic duration to activate . . . . . . . . =',E12.4/,
200 . 5X,'gravity VALUE. . . . . . . . . . . . . . =',E12.4//)
201c-----------
202 RETURN
203 END
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_get_string(name, sval, size, is_available)
initmumps id
integer, parameter ncharkey
integer, parameter ncharfield
integer function nvar(text)
Definition nvar.F:32
subroutine read_sensor_hic(sensor_ptr, sens_id, titr, laccelm, unitab, lsubmodel)
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