33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48#define SENS_SENS 3
49#define SENS_AND 4
50#define SENS_OR 5
51#define SENS_NOT 8
52
53
54
57 USE sensor_mod
58
59
60
61#include "implicit_f.inc"
62
63
64
65#include "com04_c.inc"
66
67
68
69 TYPE (SENSORS_),INTENT(INOUT) :: SENSORS
70
71
72
73 INTEGER I,J
74 INTEGER SENS_TYPE,SENS_COUNT,IERROR
75 INTEGER DEP_LIST(2),NUM_ITEM
76 INTEGER,DIMENSION(:),ALLOCATABLE :: SORTED_SENSORS
77
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
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
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
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
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
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
128 END SELECT
129 ENDDO
130
131 CALL set_graph_sort(sorted_sensors, ierror)
132 CALL set_graph_clean()
133
134
135
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
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
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)