OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
read_sensor_acc.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_acc ../starter/source/tools/sensor/read_sensor_acc.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!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
34!|| message_mod ../starter/share/message_module/message_mod.F
35!|| submodel_mod ../starter/share/modules1/submodel_mod.F
36!||====================================================================
37 SUBROUTINE read_sensor_acc(SENSOR_PTR ,SENS_ID ,TITR ,
38 . LACCELM ,UNITAB ,LSUBMODEL )
39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
42 USE unitab_mod
43 USE message_mod
44 USE submodel_mod
45 USE sensor_mod
48C-----------------------------------------------
49C I m p l i c i t T y p e s
50C-----------------------------------------------
51#include "implicit_f.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
55#include "com04_c.inc"
56#include "units_c.inc"
57C-----------------------------------------------
58C D u m m y A r g u m e n t s
59C-----------------------------------------------
60 INTEGER ,INTENT(IN) :: SENS_ID
61 INTEGER ,DIMENSION(3,*) ,INTENT(IN) :: LACCELM
62 CHARACTER(LEN=NCHARTITLE)::TITR
63 TYPE (SENSOR_STR_) :: SENSOR_PTR
64 TYPE (SUBMODEL_DATA) ,DIMENSION(NSUBMOD) :: LSUBMODEL
65 TYPE (UNIT_TYPE_) ,INTENT(IN) ::UNITAB
66C-----------------------------------------------
67C L o c a l V a r i a b l e s
68C-----------------------------------------------
69 INTEGER :: I,J,LEN,NACC,NPARIS,NPARRS,NVAR,SENS_TYPE
70 my_real :: tdel
71 INTEGER ,DIMENSION(6) :: ACC_ID,IACC,IDIR
72 my_real ,DIMENSION(6) :: acc,tmin
73 CHARACTER(LEN=NCHARKEY) :: DIR(6),DIRACC
74 LOGICAL :: IS_AVAILABLE
75C--------------------------------
76C ACCELEROMETER BASED SENSOR
77C=======================================================================
78 is_available = .false.
79 sens_type = 1
80c--------------------------------------------------
81 CALL hm_get_floatv('Tdelay' ,tdel ,is_available,lsubmodel,unitab)
82 CALL hm_get_intv ('NACCEL1',nacc ,is_available,lsubmodel)
83c acc1
84 CALL hm_get_intv ('IACC1' ,acc_id(1) ,is_available,lsubmodel)
85 CALL hm_get_string('DIR1' ,dir(1) ,ncharfield,is_available)
86 CALL hm_get_floatv('Tomin1' ,acc(1) ,is_available,lsubmodel,unitab)
87 CALL hm_get_floatv('Tmin1' ,tmin(1) ,is_available,lsubmodel,unitab)
88c acc2
89 CALL hm_get_intv ('IACC2' ,acc_id(2) ,is_available,lsubmodel)
90 CALL hm_get_string('DIR2' ,dir(2) ,ncharfield,is_available)
91 CALL hm_get_floatv('Tomin2' ,acc(2) ,is_available,lsubmodel,unitab)
92 CALL hm_get_floatv('Tmin2' ,tmin(2) ,is_available,lsubmodel,unitab)
93c acc3
94 CALL hm_get_intv ('IACC3' ,acc_id(3) ,is_available,lsubmodel)
95 CALL hm_get_string('DIR3' ,dir(3) ,ncharfield,is_available)
96 CALL hm_get_floatv('Tomin3' ,acc(3) ,is_available,lsubmodel,unitab)
97 CALL hm_get_floatv('Tmin3' ,tmin(3) ,is_available,lsubmodel,unitab)
98c acc4
99 CALL hm_get_intv ('IACC4' ,acc_id(4) ,is_available,lsubmodel)
100 CALL hm_get_string('DIR4' ,dir(4) ,ncharfield,is_available)
101 CALL hm_get_floatv('Tomin4' ,acc(4) ,is_available,lsubmodel,unitab)
102 CALL hm_get_floatv('Tmin4' ,tmin(4) ,is_available,lsubmodel,unitab)
103c acc5
104 CALL hm_get_intv ('IACC5' ,acc_id(5) ,is_available,lsubmodel)
105 CALL hm_get_string('DIR5' ,dir(5) ,ncharfield,is_available)
106 CALL hm_get_floatv('Tomin5' ,acc(5) ,is_available,lsubmodel,unitab)
107 CALL hm_get_floatv('Tmin5' ,tmin(5) ,is_available,lsubmodel,unitab)
108c acc6
109 CALL hm_get_intv ('IACC6' ,acc_id(6) ,is_available,lsubmodel)
110 CALL hm_get_string('DIR6' ,dir(6) ,ncharfield,is_available)
111 CALL hm_get_floatv('Tomin6' ,acc(6) ,is_available,lsubmodel,unitab)
112 CALL hm_get_floatv('Tmin6' ,tmin(6) ,is_available,lsubmodel,unitab)
113c--------------------------------------------------
114c Check input data
115c--------------------------------------------------
116 IF (nacc > 6) THEN
117 CALL ancmsg(msgid=44,msgtype=msgerror,anmode=aninfo,
118 . i1=sens_id, c1=titr, i2=nacc)
119 nacc = min(nacc, 6)
120 ENDIF
121c
122 iacc(:) = 0
123 DO i = 1,nacc
124 DO j = 1,naccelm
125 IF (acc_id(i) == laccelm(2,j)) THEN
126 iacc(i) = j
127 EXIT
128 ENDIF
129 END DO
130 IF (iacc(i) == 0) THEN
131 CALL ancmsg(msgid=45, msgtype=msgerror, anmode=aninfo_blind_2,
132 . i1=sens_id, c1=titr, i2=acc_id(i))
133 END IF
134 END DO
135c
136 DO i = 1,nacc
137 idir(i) = 0
138 len = len_trim(dir(i))
139 diracc = dir(i)(1:len)
140 IF (diracc(1:1) == 'X' .OR. diracc(1:1) == 'x') idir(i) = idir(i)+1
141 IF (diracc(1:1) == 'Y' .OR. diracc(1:1) == 'y') idir(i) = idir(i)+2
142 IF (diracc(1:1) == 'Z' .OR. diracc(1:1) == 'z') idir(i) = idir(i)+4
143 END DO
144c--------------------------------------------------
145c
146 sensor_ptr%TYPE = sens_type
147 sensor_ptr%SENS_ID = sens_id
148 sensor_ptr%STATUS = 0 ! status = deactivated
149 sensor_ptr%TSTART = infinity
150 sensor_ptr%TCRIT = infinity
151 sensor_ptr%TMIN = zero ! TMIN global
152 sensor_ptr%TDELAY = tdel ! time delay before activation
153 sensor_ptr%VALUE = zero
154
155 nparis = nacc * 2 + 1
156 nparrs = nacc * 3
157 nvar = 0
158c
159 sensor_ptr%NPARI = nparis
160 sensor_ptr%NPARR = nparrs
161 sensor_ptr%NVAR = nvar
162c
163 ALLOCATE (sensor_ptr%IPARAM(nparis))
164 ALLOCATE (sensor_ptr%RPARAM(nparrs))
165 ALLOCATE (sensor_ptr%VAR(nvar))
166 sensor_ptr%VAR(:) = zero
167c
168 sensor_ptr%IPARAM(1) = nacc
169 j = 1
170 DO i = 1,nacc
171 sensor_ptr%IPARAM(j+1) = iacc(i)
172 sensor_ptr%IPARAM(j+2) = idir(i)
173 j = j+2
174 END DO
175 j = 0
176 DO i = 1,nacc
177 sensor_ptr%RPARAM(j+1) = acc(i)
178 sensor_ptr%RPARAM(j+2) = tmin(i)
179 sensor_ptr%RPARAM(j+3) = infinity
180 j = j+3
181 END DO
182c------------------------------------------------------------
183 WRITE(iout, 1000) sens_id,tdel
184 WRITE(iout, 2000) nacc
185 DO i = 1,nacc
186 WRITE(iout, 3000) acc_id(i),idir(i),acc(i),tmin(i)
187 END DO
188c------------------------------------------------------------
189 1000 FORMAT(
190 . 5x,' SENSOR TYPE 1: ACCELEROMETER '/,
191 . 5x,' ----------------------------- '/,
192 . 5x,'SENSOR ID. . . . . . . . . . . . . . . . .=',i10/
193 . 5x,'TIME DELAY BEFORE ACTIVATION . . . . . . .=',e12.4)
194 2000 FORMAT(
195 . 5x,'NUMBER OF ACCELEROMETERS . . . . . . . . .=',i10)
196 3000 FORMAT(
197 . 5x,' ACCELEROMETER ID. . . . . . . . . . . .=',i10/
198 . 5x,' DIRECTION . . . . . . . . . . . . . . .=',i10/
199 . 5x,' MINIMUM ACCELERATION FOR ACTIVATION . .=',e12.4/
200 . 5x,' MINIMUM ACC. DURATION FOR ACTIVATION .=',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)
#define min(a, b)
Definition macros.h:20
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharfield
subroutine read_sensor_acc(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