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

Go to the source code of this file.

Macros

#define SENS_SENS   3
#define SENS_AND   4
#define SENS_OR   5
#define SENS_NOT   8

Functions/Subroutines

subroutine sort_logical_sensors (sensors)

Macro Definition Documentation

◆ SENS_AND

#define SENS_AND   4

◆ SENS_NOT

#define SENS_NOT   8

◆ SENS_OR

#define SENS_OR   5

◆ SENS_SENS

#define SENS_SENS   3

Function/Subroutine Documentation

◆ sort_logical_sensors()

subroutine sort_logical_sensors ( type (sensors_), intent(inout) sensors)

Definition at line 32 of file sort_logical_sensors.F.

33C-----------------------------------------------
34C ROUTINE DESCRIPTION :
35C ===================
36C Sort AND, OR NOT sensors with their dependencies
37C-----------------------------------------------
38C DUMMY ARGUMENTS DESCRIPTION:
39C ===================
40C
41C NAME DESCRIPTION
42C
43C SENSOR_TAB Sensor Structure
44C===========================================================================================
45C-----------------------------------------------
46C M a c r o s
47C-----------------------------------------------
48#define SENS_SENS 3
49#define SENS_AND 4
50#define SENS_OR 5
51#define SENS_NOT 8
52C-----------------------------------------------
53C M o d u l e s
54C-----------------------------------------------
55 USE unitab_mod
56 USE message_mod
57 USE sensor_mod
58C-----------------------------------------------
59C I m p l i c i t T y p e s
60C-----------------------------------------------
61#include "implicit_f.inc"
62C-----------------------------------------------
63C C o m m o n B l o c k s
64C-----------------------------------------------
65#include "com04_c.inc"
66C-----------------------------------------------
67C D u m m y A r g u m e n t s
68C-----------------------------------------------
69 TYPE (SENSORS_),INTENT(INOUT) :: SENSORS
70C-----------------------------------------------
71C L o c a l V a r i a b l e s
72C-----------------------------------------------
73 INTEGER I,J
74 INTEGER SENS_TYPE,SENS_COUNT,IERROR
75 INTEGER DEP_LIST(2),NUM_ITEM
76 INTEGER,DIMENSION(:),ALLOCATABLE :: SORTED_SENSORS
77C-----------------------------------------------
78 sensors%LOGICAL_SENSOR_COUNT = 0
79
80 ALLOCATE(sorted_sensors(sensors%NSENSOR))
81
82 DO i=1,sensors%NSENSOR
83
84 SELECT CASE(sensors%SENSOR_TAB(i)%TYPE)
85
86 CASE ( sens_sens )
87 dep_list(1) = sensors%SENSOR_TAB(i)%IPARAM(1)
88 dep_list(2) = sensors%SENSOR_TAB(i)%IPARAM(2)
89
90 IF(dep_list(2) == 0 )THEN ! /SENSOR/SENS can have SENSOR2 non existent.
91 num_item = 1
92 ELSE
93 num_item = 2
94 ENDIF
95
96 CALL set_graph_add_set(i, dep_list,num_item)
97 sensors%LOGICAL_SENSOR_COUNT = sensors%LOGICAL_SENSOR_COUNT +1
98 ! print*,I,'-- SENS --',SENSOR_TAB(I)%IPARAM(1),SENSOR_TAB(I)%IPARAM(2)
99
100 CASE ( sens_and )
101 dep_list(1) = sensors%SENSOR_TAB(i)%IPARAM(1)
102 dep_list(2) = sensors%SENSOR_TAB(i)%IPARAM(2)
103 num_item = 2
104 CALL set_graph_add_set(i, dep_list,num_item)
105 sensors%LOGICAL_SENSOR_COUNT = sensors%LOGICAL_SENSOR_COUNT +1
106 ! print*,I,'-- AND --',SENSOR_TAB(I)%IPARAM(1),SENSOR_TAB(I)%IPARAM(2)
107
108 CASE ( sens_or )
109 dep_list(1) = sensors%SENSOR_TAB(i)%IPARAM(1)
110 dep_list(2) = sensors%SENSOR_TAB(i)%IPARAM(2)
111 num_item = 2
112 CALL set_graph_add_set(i, dep_list,num_item)
113 sensors%LOGICAL_SENSOR_COUNT = sensors%LOGICAL_SENSOR_COUNT +1
114 ! print*,I,'-- OR --',SENSOR_TAB(I)%IPARAM(1),SENSOR_TAB(I)%IPARAM(2)
115
116 CASE ( sens_not )
117 dep_list(1) = sensors%SENSOR_TAB(i)%IPARAM(1)
118 num_item = 1
119 CALL set_graph_add_set(i, dep_list,num_item)
120 sensors%LOGICAL_SENSOR_COUNT = sensors%LOGICAL_SENSOR_COUNT +1
121 ! print*,I,'-- NOT --',SENSOR_TAB(I)%IPARAM(1)
122
123 CASE DEFAULT
124 dep_list(1:2)=0
125 num_item = 0
126 CALL set_graph_add_set(i, dep_list,num_item)
127 ! print*,I,'OTHER'
128 END SELECT
129 ENDDO
130
131 CALL set_graph_sort(sorted_sensors, ierror)
132 CALL set_graph_clean()
133
134 ! When IERROR is negative, a Sensor has a circular dependency.
135 ! IERROR is set to -ID of Sensor.
136 ! -------------------------------------------------------------
137 IF (ierror < 0)THEN
138 CALL ancmsg(msgid=2095,anmode=aninfo,msgtype=msgerror,i1=-ierror)
139 ENDIF
140
141 ALLOCATE (sensors%LOGICAL_SENSORS_LIST(sensors%LOGICAL_SENSOR_COUNT))
142 sens_count=0
143
144
145 ! Create index table with logical sensors only
146 ! ---------------------------------------------
147 DO i=1,sensors%NSENSOR
148 j = sorted_sensors(i)
149 sens_type = sensors%SENSOR_TAB(j)%TYPE
150
151 IF( sens_type == sens_sens .OR. sens_type == sens_and .OR.
152 * sens_type == sens_or .OR. sens_type == sens_not ) THEN
153
154 sens_count = sens_count + 1
155 sensors%LOGICAL_SENSORS_LIST(sens_count) = j
156 ! print*,'>',LOGICAL_SENSORS_LIST(SENS_COUNT),'-',SENSOR_TAB(J)%SENS_ID
157 ENDIF
158 ENDDO
159
160
161 DEALLOCATE(sorted_sensors)
162
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