OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sensor_nic.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "units_c.inc"
#include "com08_c.inc"
#include "task_c.inc"
#include "lockon.inc"
#include "lockoff.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine sensor_nic (sensor)

Function/Subroutine Documentation

◆ sensor_nic()

subroutine sensor_nic ( type (sensor_str_) sensor)

Definition at line 32 of file sensor_nic.F.

33C-----------------------------------------------
34C M o d u l e s
35C-----------------------------------------------
36 USE groupdef_mod
37 USE sensor_mod
38C-----------------------------------------------
39C I m p l i c i t T y p e s
40C-----------------------------------------------
41#include "implicit_f.inc"
42#include "comlock.inc"
43C-----------------------------------------------
44C C o m m o n B l o c k s
45C-----------------------------------------------
46#include "units_c.inc"
47#include "com08_c.inc"
48#include "task_c.inc"
49C-----------------------------------------------
50C D u m m y A r g u m e n t s
51C-----------------------------------------------
52 TYPE (SENSOR_STR_) :: SENSOR
53C----------------------------------------------------------
54C Local Variables
55C----------------------------------------------------------
56 INTEGER NPT,NPH,IADFX,IADFY,IADMX,IADMY,ICRIT
57 my_real :: for,mom,dt,time,nijmax,nic,alpha,beta,cfc,tmin,tdelay,
58 . wd,wa,wa2,wa3,a0,a1,a2,b1,b2,x0,x1,x2,y1,y2,yf,ym,infinity
59 parameter(infinity = 1.0e20)
60c-----------------------------------------------------------------------
61c Sensor state variables
62c SENSOR%VAR(1) : Current non filtered spring force
63c SENSOR%VAR(2) : Current non filtered spring moment
64c SENSOR%VAR(3) : flag spmd : =0 => spring not present in the domain
65c =1 => spring is present in the domain
66c free
67c SENSOR%VAR(6 -10) : non filtered force values
68c SENSOR%VAR(11-15) : filtered force values
69c SENSOR%VAR(16-20 : non filtered moment values
70c SENSOR%VAR(21-25) : filtered moment values
71C=======================================================================
72 IF (sensor%STATUS == 1) RETURN ! already activated
73 IF (sensor%VAR(3) == zero) RETURN ! spring is on different spmd domain
74c
75 tmin = sensor%TMIN
76 tdelay = sensor%TDELAY
77 nijmax = sensor%RPARAM(1)
78 alpha = sensor%RPARAM(6)
79 cfc = sensor%RPARAM(7)
80 time = tt
81 icrit = 0
82c
83c Parameters of SAE-J211 CFC filter
84 dt = dt2
85 wd = two*pi*cfc*alpha
86 beta = half * dt * wd
87 wa = tan(beta)
88 wa2 = wa**2
89 wa3 = one + sqr2*wa + wa2
90 a0 = wa2 / wa3
91 a1 = a0 * two
92 a2 = a0
93 b1 = -two*(wa2 - one) / wa3
94 b2 = (-one + sqr2*wa - wa2) / wa3
95c
96c current non filtered normalized spring force and moment
97 for = sensor%VAR(1)
98 mom = sensor%VAR(2)
99c
100 npt = 5
101 nph = 3
102 iadfx = 5
103 iadfy = iadfx + npt
104 iadmx = iadfy + npt
105 iadmy = iadmx + npt
106c
107 ! forward filter - forces
108c
109 x0 = for
110 x1 = sensor%VAR(iadfx+5)
111 x2 = sensor%VAR(iadfx+4)
112 y1 = sensor%VAR(iadfy+5)
113 y2 = sensor%VAR(iadfy+4)
114c
115 yf = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
116c
117 sensor%VAR(iadfx+1) = sensor%VAR(iadfx+2)
118 sensor%VAR(iadfx+2) = sensor%VAR(iadfx+3)
119 sensor%VAR(iadfx+3) = sensor%VAR(iadfx+4)
120 sensor%VAR(iadfx+4) = sensor%VAR(iadfx+5)
121 sensor%VAR(iadfx+5) = for
122c
123 sensor%VAR(iadfy+1) = sensor%VAR(iadfy+2)
124 sensor%VAR(iadfy+2) = sensor%VAR(iadfy+3)
125 sensor%VAR(iadfy+3) = sensor%VAR(iadfy+4)
126 sensor%VAR(iadfy+4) = sensor%VAR(iadfy+5)
127 sensor%VAR(iadfy+5) = yf
128c
129 ! backward filter - forces
130c
131 x0 = sensor%VAR(iadfx+nph)
132 x1 = sensor%VAR(iadfx+nph+1)
133 x2 = sensor%VAR(iadfx+nph+2)
134 y1 = sensor%VAR(iadfy+nph+1)
135 y2 = sensor%VAR(iadfy+nph+2)
136c
137 for = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
138c
139 ! forward filter - moments
140 x0 = mom
141 x1 = sensor%VAR(iadmx+5)
142 x2 = sensor%VAR(iadmx+4)
143 y1 = sensor%VAR(iadmy+5)
144 y2 = sensor%VAR(iadmy+4)
145c
146 ym = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
147c
148 sensor%VAR(iadmx+1) = sensor%VAR(iadmx+2)
149 sensor%VAR(iadmx+2) = sensor%VAR(iadmx+3)
150 sensor%VAR(iadmx+3) = sensor%VAR(iadmx+4)
151 sensor%VAR(iadmx+4) = sensor%VAR(iadmx+5)
152 sensor%VAR(iadmx+5) = mom
153
154 sensor%VAR(iadmy+1) = sensor%VAR(iadmy+2)
155 sensor%VAR(iadmy+2) = sensor%VAR(iadmy+3)
156 sensor%VAR(iadmy+3) = sensor%VAR(iadmy+4)
157 sensor%VAR(iadmy+4) = sensor%VAR(iadmy+5)
158 sensor%VAR(iadmy+5) = ym
159c
160 ! backward filter - moments
161c
162 x0 = sensor%VAR(iadmx+nph)
163 x1 = sensor%VAR(iadmx+nph+1)
164 x2 = sensor%VAR(iadmx+nph+2)
165 y1 = sensor%VAR(iadmy+nph+1)
166 y2 = sensor%VAR(iadmy+nph+2)
167 mom = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
168c
169 nic = for + mom
170 IF (nic >= nijmax) icrit = 1
171c-----------------------------------------
172c Check Sensor State
173c-----------------------------------------
174 IF (sensor%TCRIT + tmin > tt) THEN
175 IF (icrit == 0) THEN
176 sensor%TCRIT = infinity
177 ELSE IF (sensor%TCRIT == infinity) THEN
178 sensor%TCRIT = min(sensor%TCRIT, tt)
179 END IF
180 ELSE IF (sensor%TSTART == infinity) THEN
181 sensor%TSTART = sensor%TCRIT + tmin + tdelay
182 END IF
183 IF (sensor%TSTART <= tt) THEN ! sensor activation
184 sensor%STATUS = 1
185 END IF
186c-----------------------------------------------------------------------
187 IF (sensor%STATUS == 1 .and. ispmd == 0) THEN
188#include "lockon.inc"
189 WRITE (istdo,1100 ) sensor%SENS_ID,sensor%TSTART,nic
190 WRITE (iout ,1100 ) sensor%SENS_ID,sensor%TSTART,nic
191 WRITE (iout ,1200) nijmax,nic
192#include "lockoff.inc"
193 ENDIF
194c-----------------------------------------------------------------------
1951100 FORMAT(' SENSOR (RBODY) NUMBER ',i10,' ,ACTIVATED AT TIME ',1pe12.5)
1961200 FORMAT(' TARGET NIC VALUE = ',1pe12.5,/
197 . ' CURRENT NIC VALUE AFTER TMIN and TDELAY = ',1pe12.5)
198c-----------------------------------------------------------------------
199 RETURN
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
#define min(a, b)
Definition macros.h:20
for(i8=*sizetab-1;i8 >=0;i8--)