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
65C=======================================================================
66 IF (sensor%STATUS == 1) RETURN ! already activated
67c
68 tmin = sensor%TMIN
69 tdelay = sensor%TDELAY
70c
71 n1 = sensor%IPARAM(1)
72 n2 = sensor%IPARAM(2)
73 sect_id = sensor%IPARAM(3)
74 int_id = sensor%IPARAM(4)
75 sub_id = sensor%IPARAM(5)
76 rwal_id = sensor%IPARAM(6)
77 rbod_id = sensor%IPARAM(7)
78
79 wmax = sensor%RPARAM(1)
80 fx = zero
81 fy = zero
82 fz = zero
83 icrit = 0
84c
85 IF (nspmd == 1) THEN
86 xsens(1) = x(1,n1)
87 xsens(2) = x(2,n1)
88 xsens(3) = x(3,n1)
89 IF (n2 > 0) THEN
90 xsens(4) = x(1,n2)
91 xsens(5) = x(2,n2)
92 xsens(6) = x(3,n2)
93 ELSE
94 xsens(4) = zero
95 xsens(5) = zero
96 xsens(6) = zero
97 ENDIF
98 IF (tt == zero) THEN
99 xsens(7) = xsens(1)
100 xsens(8) = xsens(2)
101 xsens(9) = xsens(3)
102 xsens(10) = xsens(4)
103 xsens(11) = xsens(5)
104 xsens(12) = xsens(6)
105 ENDIF
106 ENDIF
107c
108 dx = (xsens(1) - xsens(7)) - (xsens(4) - xsens(10))
109 dy = (xsens(2) - xsens(8)) - (xsens(5) - xsens(11))
110 dz = (xsens(3) - xsens(9)) - (xsens(6) - xsens(12))
111c
112 xsens(7) = xsens(1)
113 xsens(8) = xsens(2)
114 xsens(9) = xsens(3)
115 xsens(10) = xsens(4)
116 xsens(11) = xsens(5)
117 xsens(12) = xsens(6)
118c
119c-----------------------
120c Force in Section
121c
122 in = sect_id
123 IF (in > 0) THEN
124 isect = tabs(in+1) - tabs(in)
125 fx = fx + fbsav6(10,1,isect) + fbsav6(10,2,isect)
126 . + fbsav6(10,3,isect) + fbsav6(10,4,isect)
127 . + fbsav6(10,5,isect) + fbsav6(10,6,isect)
128 fy = fy + fbsav6(11,1,isect) + fbsav6(11,2,isect)
129 . + fbsav6(11,3,isect) + fbsav6(11,4,isect)
130 . + fbsav6(11,5,isect) + fbsav6(11,6,isect)
131 fz = fz + fbsav6(12,1,isect) + fbsav6(12,2,isect)
132 . + fbsav6(12,3,isect) + fbsav6(12,4,isect)
133 . + fbsav6(12,5,isect) + fbsav6(12,6,isect)
134 sensor%VAR(1) = sensor%VAR(1) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
135 ENDIF
136c
137c Force in Interface
138c
139 in = int_id
140 inter = in
141 IF (in > ninter) inter = sub_id
142 IF (inter > 0) THEN
143 inter = tabs(nsect+in+1) - tabs(nsect+in)
144 fx = fx + fbsav6(1,1,inter) + fbsav6(1,2,inter)
145 . + fbsav6(1,3,inter) + fbsav6(1,4,inter)
146 . + fbsav6(1,5,inter) + fbsav6(1,6,inter)
147 fy = fy + fbsav6(2,1,inter) + fbsav6(2,2,inter)
148 . + fbsav6(2,3,inter) + fbsav6(2,4,inter)
149 . + fbsav6(2,5,inter) + fbsav6(2,6,inter)
150 fz = fz + fbsav6(3,1,inter) + fbsav6(3,2,inter)
151 . + fbsav6(3,3,inter) + fbsav6(3,4,inter)
152 . + fbsav6(3,5,inter) + fbsav6(3,6,inter)
153 sensor%VAR(2) = sensor%VAR(2) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
154 ENDIF
155c
156c Force in Rwall
157c
158 in = rwal_id
159 IF (in > 0) THEN
160 irwal = tabs(in+nsect+ninter+nintsub+1)
161 . - tabs(in+nsect+ninter+nintsub)
162 fx = fx + fbsav6(1,1,irwal) + fbsav6(1,2,irwal)
163 . + fbsav6(1,3,irwal) + fbsav6(1,4,irwal)
164 . + fbsav6(1,5,irwal) + fbsav6(1,6,irwal)
165 fy = fy + fbsav6(2,1,irwal) + fbsav6(2,2,irwal)
166 . + fbsav6(2,3,irwal) + fbsav6(2,4,irwal)
167 . + fbsav6(2,5,irwal) + fbsav6(2,6,irwal)
168 fz = fz + fbsav6(3,1,irwal) + fbsav6(3,2,irwal)
169 . + fbsav6(3,3,irwal) + fbsav6(3,4,irwal)
170 . + fbsav6(3,5,irwal) + fbsav6(3,6,irwal)
171 sensor%VAR(3) = sensor%VAR(3) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
172 ENDIF
173c
174c Force in Rbody
175c
176 in = rbod_id
177 IF (in > 0) THEN
178 irbod = tabs(in+nsect+ninter+nintsub+nrwall+1)
179 . - tabs(in+nsect+ninter+nintsub+nrwall)
180 fx = fx + fbsav6(1,1,irbod) + fbsav6(1,2,irbod)
181 . + fbsav6(1,3,irbod) + fbsav6(1,4,irbod)
182 . + fbsav6(1,5,irbod) + fbsav6(1,6,irbod)
183 fy = fy + fbsav6(2,1,irbod) + fbsav6(2,2,irbod)
184 . + fbsav6(2,3,irbod) + fbsav6(2,4,irbod)
185 . + fbsav6(2,5,irbod) + fbsav6(2,6,irbod)
186 fz = fz + fbsav6(3,1,irbod) + fbsav6(3,2,irbod)
187 . + fbsav6(3,3,irbod) + fbsav6(3,4,irbod)
188 . + fbsav6(3,5,irbod) + fbsav6(3,6,irbod)
189 sensor%VAR(4) = sensor%VAR(4) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
190 ENDIF
191c----------------------------------------------------------------
192 work = sensor%VAR(1) + sensor%VAR(2) + sensor%VAR(3) + sensor%VAR(4)
193 IF (work > wmax) icrit = 1
194c----------------------------------------------------------------
195c check activation status
196c----------------------------------------------------------------
197 IF (sensor%TCRIT + tmin > tt) THEN
198 IF (icrit == 0) THEN
199 sensor%TCRIT = infinity
200 ELSE IF (sensor%TCRIT == infinity) THEN
201 sensor%TCRIT = min(sensor%TCRIT, tt)
202 END IF
203 END IF
204 IF (sensor%TSTART == infinity .and. sensor%TCRIT < infinity) THEN
205 sensor%TSTART = sensor%TCRIT + tmin + tdelay
206 END IF
207 IF (sensor%TSTART <= tt) THEN ! sensor activation
208 sensor%STATUS = 1
209 END IF
210c-----------------------------------------------------------------------
211 IF (sensor%STATUS == 1 .and. ispmd == 0) THEN
212#include "lockon.inc"
213 WRITE (istdo,1100) sensor%SENS_ID,sensor%TSTART
214 WRITE (iout ,1100) sensor%SENS_ID,sensor%TSTART
215 WRITE (iout ,1200) wmax,work
216#include "lockoff.inc"
217 ENDIF
218c-----------------------------------------------------------------------
2191100 FORMAT(' SENSOR WORK NUMBER ',i10,' ,ACTIVATED AT TIME ',1pe12.5)
2201200 FORMAT(' TARGET WORK = ',1pe12.5,/
221 . ' CURRENT WORK AFTER TMIN AND TDELAY = ',1pe12.5)
222c-----------------------------------------------------------------------
223 RETURN
224 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