35
36
38
39
40
41
42
43
44
45
46
47 USE spmd_mod
49 USE sensor_mod
50
51
52
53#include "implicit_f.inc"
54#include "comlock.inc"
55
56
57
58#include "com04_c.inc"
59#include "com08_c.inc"
60#include "parit_c.inc"
61#include "com01_c.inc"
62
63
64
65 INTEGER ,INTENT(IN) :: NSENSOR
67 TYPE(GROUP_) ,DIMENSION(NGRNOD) ,INTENT(IN) :: IGRNOD
68 TYPE (SENSOR_STR_),DIMENSION(NSENSOR), INTENT(INOUT) :: SENSOR_TAB
69 TYPE (sensor_comm),INTENT(INOUT) :: COMM_SENS17
70 TYPE (SENSOR_TYPE),INTENT(INOUT),DIMENSION(NSENSOR) :: SENSOR_STRUCT
71 INTEGER, DIMENSION(NUMNOD), INTENT(in) :: WEIGHT
72
73
74
75 INTEGER :: ISENS,INDEX_SUM6FLOAT
76 INTEGER :: I,IGN,INOD,NNOD,IJK,KJI
77 my_real,
DIMENSION(:),
ALLOCATABLE :: temp_max,temp_min,temp_avg
78 INTEGER :: INDEX_MIN_MAX,INDEX_MEAN,TOTAL_NUMBER_NOD,DIM_FOR_MEAN
79 my_real,
DIMENSION(:),
ALLOCATABLE :: temp_node
80 REAL(kind=8), dimension(:), ALLOCATABLE :: sbuff_min,sbuff_max,sbuff_mean
81 REAL(kind=8), dimension(:), ALLOCATABLE :: rbuff_min,rbuff_max,rbuff_mean
82
83
84
85
86
87
88
89 ALLOCATE( temp_max(comm_sens17%NUM_SENS) )
90 ALLOCATE( temp_min(comm_sens17%NUM_SENS) )
91 ALLOCATE( temp_avg(comm_sens17%NUM_SENS) )
92
93 temp_max(1:comm_sens17%NUM_SENS) = zero
94 temp_min(1:comm_sens17%NUM_SENS) = zero
95 temp_avg(1:comm_sens17%NUM_SENS) = zero
96
97
98
99 DO ijk=1,comm_sens17%NUM_SENS
100 isens = comm_sens17%ID_SENS(ijk)
101 IF (sensor_tab(isens)%STATUS == 1) cycle
102
103 IF (tt == zero) sensor_tab(isens)%VAR(2) = ep20
104 ign = sensor_tab(isens)%IPARAM(1)
105
106 nnod = igrnod(ign)%NENTITY
107 temp_max(ijk) = sensor_tab(isens)%VAR(1)
108 temp_min(ijk) = sensor_tab(isens)%VAR(2)
109 temp_avg(ijk) = zero
110 ALLOCATE( temp_node(nnod) )
111 index_sum6float = 0
112
113
114
115 DO i=1,nnod
116 inod = igrnod(ign)%ENTITY(i)
117 IF (weight(inod)==1) THEN
118 temp_max(ijk) =
max(temp_max(ijk), temp(inod))
119 temp_min(ijk) =
min(temp_min(ijk), temp(inod))
120 temp_avg(ijk) = temp_avg(ijk) + temp(inod)
121 index_sum6float = index_sum6float + 1
122 temp_node(index_sum6float) = temp(inod)
123 ENDIF
124 ENDDO
125
126
127 IF (iparit > 0) THEN
128 CALL sum_6_float(1,index_sum6float,temp_node,sensor_struct(isens)%FBSAV6_SENS(1,1,1),1)
129 ELSE
130 sensor_struct(isens)%FBSAV6_SENS(1,1,1) = temp_avg(ijk)
131 ENDIF
132
133 DEALLOCATE( temp_node )
134 ENDDO
135
136
137
138
139 IF (comm_sens17%BUFFER_SIZE_MIN_MAX > 0) THEN
140 ALLOCATE( sbuff_min(comm_sens17%BUFFER_SIZE_MIN_MAX) )
141 ALLOCATE( rbuff_min(comm_sens17%BUFFER_SIZE_MIN_MAX) )
142 ALLOCATE( sbuff_max(comm_sens17%BUFFER_SIZE_MIN_MAX) )
143 ALLOCATE( rbuff_max(comm_sens17%BUFFER_SIZE_MIN_MAX) )
144 index_min_max = 0
145
146
147 DO ijk=1,comm_sens17%NUM_SENS
148 isens = comm_sens17%ID_SENS(ijk)
149 index_min_max = index_min_max+ 1
150 sbuff_max(index_min_max) = temp_max(ijk)
151 sbuff_min(index_min_max) =-temp_min(ijk)
152 ENDDO
153
154
155 IF (nspmd > 1) THEN
156 CALL spmd_allreduce(sbuff_max,rbuff_max,comm_sens17%BUFFER_SIZE_MIN_MAX,spmd_max )
157 CALL spmd_allreduce(sbuff_min,rbuff_min,comm_sens17%BUFFER_SIZE_MIN_MAX,spmd_min)
158
159 ELSE
160 rbuff_max(:) = sbuff_max(:)
161 rbuff_min(:) = sbuff_min(:)
162 ENDIF
163
164
165
166
167 index_min_max = 0
168 DO ijk=1,comm_sens17%NUM_SENS
169 isens = comm_sens17%ID_SENS(ijk)
170 index_min_max = index_min_max + 1
171 sensor_tab(isens)%VAR(1) = rbuff_max(index_min_max)
172 sensor_tab(isens)%VAR(2) =-rbuff_min(index_min_max)
173 ENDDO
174
175 DEALLOCATE( sbuff_max )
176 DEALLOCATE( rbuff_max )
177 DEALLOCATE( sbuff_min )
178 DEALLOCATE( rbuff_min )
179 ENDIF
180
181
182 IF (comm_sens17%BUFFER_SIZE_MEAN > 0) THEN
183 ALLOCATE( sbuff_mean(comm_sens17%BUFFER_SIZE_MEAN) )
184 ALLOCATE( rbuff_mean(comm_sens17%BUFFER_SIZE_MEAN) )
185
186 IF (iparit > 0) THEN
187 dim_for_mean = 6
188 ELSE
189 dim_for_mean = 1
190 ENDIF
191
192
193 index_mean = 0
194 DO ijk=1,comm_sens17%NUM_SENS
195 isens = comm_sens17%ID_SENS(ijk)
196 DO kji=1,dim_for_mean
197 index_mean = index_mean + 1
198 sbuff_mean(index_mean) = sensor_struct(isens)%FBSAV6_SENS(1,kji,1)
199 ENDDO
200 ENDDO
201
202
203 IF (nspmd > 1) THEN
204 CALL spmd_allreduce(sbuff_mean,rbuff_mean,comm_sens17%BUFFER_SIZE_MEAN,spmd_sum )
205 ELSE
206 rbuff_mean(:) = sbuff_mean(:)
207 ENDIF
208
209
210 index_mean = 0
211 DO ijk=1,comm_sens17%NUM_SENS
212 isens = comm_sens17%ID_SENS(ijk)
213 DO kji=1,dim_for_mean
214 index_mean = index_mean + 1
215 sensor_struct(isens)%FBSAV6_SENS(1,kji,1) = rbuff_mean(index_mean)
216 ENDDO
217 ENDDO
218
219
220
221
222 DO ijk=1,comm_sens17%NUM_SENS
223 isens = comm_sens17%ID_SENS(ijk)
224 IF (iparit > 0) THEN
225 DO kji=2,dim_for_mean
226 sensor_struct(isens)%FBSAV6_SENS(1,1,1) = sensor_struct(isens)%FBSAV6_SENS(1,1,1) +
227 . sensor_struct(isens)%FBSAV6_SENS(1,kji,1)
228 ENDDO
229 ENDIF
230 total_number_nod = sensor_tab(isens)%IPARAM(2)
231 sensor_tab(isens)%VAR(3) = sensor_struct(isens)%FBSAV6_SENS(1,1,1) / total_number_nod
232 DO kji=1,dim_for_mean
233 sensor_struct(isens)%FBSAV6_SENS(1,kji,1) = zero
234 ENDDO
235 ENDDO
236
237 DEALLOCATE( sbuff_mean )
238 DEALLOCATE( rbuff_mean )
239 ENDIF
240
241
242 DEALLOCATE( temp_max )
243 DEALLOCATE( temp_min )
244 DEALLOCATE( temp_avg )
245
246 RETURN
subroutine sum_6_float(jft, jlt, f, f6, n)
subroutine sensor_temp(sensor, isens, igrnod)