OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sensor_work.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/.
23C=======================================================================
24!||====================================================================
25!|| sensor_work ../engine/source/tools/sensor/sensor_work.F
26!||--- called by ------------------------------------------------------
27!|| sensor_base ../engine/source/tools/sensor/sensor_base.F
28!||--- uses -----------------------------------------------------
29!|| sensor_mod ../common_source/modules/sensor_mod.F90
30!||====================================================================
31 SUBROUTINE sensor_work(SENSOR ,X ,XSENS ,DIMFB ,STABS ,
32 . TABS ,FBSAV6 )
33C-----------------------------------------------
34C M o d u l e s
35C-----------------------------------------------
36 USE sensor_mod
37C-----------------------------------------------
38C I m p l i c i t T y p e s
39C-----------------------------------------------
40#include "implicit_f.inc"
41C-----------------------------------------------
42C C o m m o n B l o c k s
43C-----------------------------------------------
44#include "com01_c.inc"
45#include "com04_c.inc"
46#include "com08_c.inc"
47#include "units_c.inc"
48#include "comlock.inc"
49#include "task_c.inc"
50C-----------------------------------------------
51C D u m m y A r g u m e n t s
52C-----------------------------------------------
53 INTEGER :: DIMFB,STABS
54 INTEGER ,DIMENSION(STABS) :: TABS
55 my_real, DIMENSION(3,NUMNOD) :: x
56 my_real, DIMENSION(12) :: xsens
57 TYPE (SENSOR_STR_) ,INTENT(INOUT) ,TARGET :: SENSOR
58 DOUBLE PRECISION ,DIMENSION(12,6,DIMFB) ,INTENT(IN) :: FBSAV6
59C----------------------------------------------------------
60C Local Variables
61C----------------------------------------------------------
62 INTEGER :: N1,N2,ICRIT,SECT_ID,INT_ID,SUB_ID,RWAL_ID,RBOD_ID,
63 . in,isect,inter,irwal,irbod
64 my_real :: dx,dy,dz,dd,fx,fy,fz,work,wmax,tmin,tdelay,
65 . infinity
66 parameter(infinity = 1.0e20)
67C=======================================================================
68 IF (sensor%STATUS == 1) RETURN ! already activated
69c
70 tmin = sensor%TMIN
71 tdelay = sensor%TDELAY
72c
73 n1 = sensor%IPARAM(1)
74 n2 = sensor%IPARAM(2)
75 sect_id = sensor%IPARAM(3)
76 int_id = sensor%IPARAM(4)
77 sub_id = sensor%IPARAM(5)
78 rwal_id = sensor%IPARAM(6)
79 rbod_id = sensor%IPARAM(7)
80
81 wmax = sensor%RPARAM(1)
82 fx = zero
83 fy = zero
84 fz = zero
85 icrit = 0
86c
87 IF (nspmd == 1) THEN
88 xsens(1) = x(1,n1)
89 xsens(2) = x(2,n1)
90 xsens(3) = x(3,n1)
91 IF (n2 > 0) THEN
92 xsens(4) = x(1,n2)
93 xsens(5) = x(2,n2)
94 xsens(6) = x(3,n2)
95 ELSE
96 xsens(4) = zero
97 xsens(5) = zero
98 xsens(6) = zero
99 ENDIF
100 IF (tt == zero) THEN
101 xsens(7) = xsens(1)
102 xsens(8) = xsens(2)
103 xsens(9) = xsens(3)
104 xsens(10) = xsens(4)
105 xsens(11) = xsens(5)
106 xsens(12) = xsens(6)
107 ENDIF
108 ENDIF
109c
110 dx = (xsens(1) - xsens(7)) - (xsens(4) - xsens(10))
111 dy = (xsens(2) - xsens(8)) - (xsens(5) - xsens(11))
112 dz = (xsens(3) - xsens(9)) - (xsens(6) - xsens(12))
113c
114 xsens(7) = xsens(1)
115 xsens(8) = xsens(2)
116 xsens(9) = xsens(3)
117 xsens(10) = xsens(4)
118 xsens(11) = xsens(5)
119 xsens(12) = xsens(6)
120c
121c-----------------------
122c Force in Section
123c
124 in = sect_id
125 IF (in > 0) THEN
126 isect = tabs(in+1) - tabs(in)
127 fx = fx + fbsav6(10,1,isect) + fbsav6(10,2,isect)
128 . + fbsav6(10,3,isect) + fbsav6(10,4,isect)
129 . + fbsav6(10,5,isect) + fbsav6(10,6,isect)
130 fy = fy + fbsav6(11,1,isect) + fbsav6(11,2,isect)
131 . + fbsav6(11,3,isect) + fbsav6(11,4,isect)
132 . + fbsav6(11,5,isect) + fbsav6(11,6,isect)
133 fz = fz + fbsav6(12,1,isect) + fbsav6(12,2,isect)
134 . + fbsav6(12,3,isect) + fbsav6(12,4,isect)
135 . + fbsav6(12,5,isect) + fbsav6(12,6,isect)
136 sensor%VAR(1) = sensor%VAR(1) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
137 ENDIF
138c
139c Force in Interface
140c
141 in = int_id
142 inter = in
143 IF (in > ninter) inter = sub_id
144 IF (inter > 0) THEN
145 inter = tabs(nsect+in+1) - tabs(nsect+in)
146 fx = fx + fbsav6(1,1,inter) + fbsav6(1,2,inter)
147 . + fbsav6(1,3,inter) + fbsav6(1,4,inter)
148 . + fbsav6(1,5,inter) + fbsav6(1,6,inter)
149 fy = fy + fbsav6(2,1,inter) + fbsav6(2,2,inter)
150 . + fbsav6(2,3,inter) + fbsav6(2,4,inter)
151 . + fbsav6(2,5,inter) + fbsav6(2,6,inter)
152 fz = fz + fbsav6(3,1,inter) + fbsav6(3,2,inter)
153 . + fbsav6(3,3,inter) + fbsav6(3,4,inter)
154 . + fbsav6(3,5,inter) + fbsav6(3,6,inter)
155 sensor%VAR(2) = sensor%VAR(2) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
156 ENDIF
157c
158c Force in Rwall
159c
160 in = rwal_id
161 IF (in > 0) THEN
162 irwal = tabs(in+nsect+ninter+nintsub+1)
163 . - tabs(in+nsect+ninter+nintsub)
164 fx = fx + fbsav6(1,1,irwal) + fbsav6(1,2,irwal)
165 . + fbsav6(1,3,irwal) + fbsav6(1,4,irwal)
166 . + fbsav6(1,5,irwal) + fbsav6(1,6,irwal)
167 fy = fy + fbsav6(2,1,irwal) + fbsav6(2,2,irwal)
168 . + fbsav6(2,3,irwal) + fbsav6(2,4,irwal)
169 . + fbsav6(2,5,irwal) + fbsav6(2,6,irwal)
170 fz = fz + fbsav6(3,1,irwal) + fbsav6(3,2,irwal)
171 . + fbsav6(3,3,irwal) + fbsav6(3,4,irwal)
172 . + fbsav6(3,5,irwal) + fbsav6(3,6,irwal)
173 sensor%VAR(3) = sensor%VAR(3) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
174 ENDIF
175c
176c Force in Rbody
177c
178 in = rbod_id
179 IF (in > 0) THEN
180 irbod = tabs(in+nsect+ninter+nintsub+nrwall+1)
181 . - tabs(in+nsect+ninter+nintsub+nrwall)
182 fx = fx + fbsav6(1,1,irbod) + fbsav6(1,2,irbod)
183 . + fbsav6(1,3,irbod) + fbsav6(1,4,irbod)
184 . + fbsav6(1,5,irbod) + fbsav6(1,6,irbod)
185 fy = fy + fbsav6(2,1,irbod) + fbsav6(2,2,irbod)
186 . + fbsav6(2,3,irbod) + fbsav6(2,4,irbod)
187 . + fbsav6(2,5,irbod) + fbsav6(2,6,irbod)
188 fz = fz + fbsav6(3,1,irbod) + fbsav6(3,2,irbod)
189 . + fbsav6(3,3,irbod) + fbsav6(3,4,irbod)
190 . + fbsav6(3,5,irbod) + fbsav6(3,6,irbod)
191 sensor%VAR(4) = sensor%VAR(4) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
192 ENDIF
193c----------------------------------------------------------------
194 work = sensor%VAR(1) + sensor%VAR(2) + sensor%VAR(3) + sensor%VAR(4)
195 IF (work > wmax) icrit = 1
196c----------------------------------------------------------------
197c check activation status
198c----------------------------------------------------------------
199 IF (sensor%TCRIT + tmin > tt) THEN
200 IF (icrit == 0) THEN
201 sensor%TCRIT = infinity
202 ELSE IF (sensor%TCRIT == infinity) THEN
203 sensor%TCRIT = min(sensor%TCRIT, tt)
204 END IF
205 END IF
206 IF (sensor%TSTART == infinity .and. sensor%TCRIT < infinity) THEN
207 sensor%TSTART = sensor%TCRIT + tmin + tdelay
208 END IF
209 IF (sensor%TSTART <= tt) THEN ! sensor activation
210 sensor%STATUS = 1
211 END IF
212c-----------------------------------------------------------------------
213 IF (sensor%STATUS == 1 .and. ispmd == 0) THEN
214#include "lockon.inc"
215 WRITE (istdo,1100) sensor%SENS_ID,sensor%TSTART
216 WRITE (iout ,1100) sensor%SENS_ID,sensor%TSTART
217 WRITE (iout ,1200) wmax,work
218#include "lockoff.inc"
219 ENDIF
220c-----------------------------------------------------------------------
2211100 FORMAT(' SENSOR WORK NUMBER ',i10,' ,ACTIVATED AT TIME ',1pe12.5)
2221200 FORMAT(' TARGET WORK = ',1pe12.5,/
223 . ' CURRENT WORK AFTER TMIN AND TDELAY = ',1pe12.5)
224c-----------------------------------------------------------------------
225 RETURN
226 END SUBROUTINE
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
subroutine sensor_work(sensor, x, xsens, dimfb, stabs, tabs, fbsav6)
Definition sensor_work.F:33