OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
read_sensor_acc.F File Reference
#include "implicit_f.inc"
#include "com04_c.inc"
#include "units_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine read_sensor_acc (sensor_ptr, sens_id, titr, laccelm, unitab, lsubmodel)

Function/Subroutine Documentation

◆ read_sensor_acc()

subroutine read_sensor_acc ( type (sensor_str_) sensor_ptr,
integer, intent(in) sens_id,
character(len=nchartitle) titr,
integer, dimension(3,*), intent(in) laccelm,
type (unit_type_), intent(in) unitab,
type (submodel_data), dimension(nsubmod) lsubmodel )

Definition at line 37 of file read_sensor_acc.F.

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
#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
integer function nvar(text)
Definition nvar.F:32
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