34 SUBROUTINE sensor_temp0(NSENSOR,SENSOR_TAB,IGRNOD,TEMP,WEIGHT,COMM_SENS17,SENSOR_STRUCT)
53#include "implicit_f.inc"
65 INTEGER ,
INTENT(IN) :: NSENSOR
67 TYPE(
group_) ,
DIMENSION(NGRNOD) ,
INTENT(IN) :: IGRNOD
68 TYPE (SENSOR_STR_),
DIMENSION(NSENSOR),
INTENT(INOUT)
69TYPE (sensor_comm),
INTENT(INOUT) :: COMM_SENS17
70 TYPE (sensor_type),
INTENT(INOUT),
DIMENSION(NSENSOR) :: sensor_struct
71 INTEGER,
DIMENSION(NUMNOD),
INTENT(in) :: WEIGHT
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
79DIMENSION(:),
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
89 ALLOCATE( temp_max(comm_sens17%NUM_SENS) )
90 ALLOCATE( temp_min(comm_sens17%NUM_SENS) )
91 ALLOCATE( temp_avg(comm_sens17%NUM_SENS) )
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
99 DO ijk=1,comm_sens17%NUM_SENS
100 isens = comm_sens17%ID_SENS(ijk)
101 IF (sensor_tab(isens)%STATUS == 1) cycle
103 IF (tt == zero) sensor_tab(isens)%VAR(2) = ep20
104 ign = sensor_tab(isens)%IPARAM(1)
106 nnod = igrnod(ign)%NENTITY
107 temp_max(ijk) = sensor_tab(isens)%VAR(1)
108 temp_min(ijk) = sensor_tab(isens)%VAR(2)
110 ALLOCATE( temp_node(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)
128 CALL sum_6_float(1,index_sum6float,temp_node,sensor_struct(isens)%FBSAV6_SENS(1,1,1),1)
130 sensor_struct(isens)%FBSAV6_SENS(1,1,1) = temp_avg(ijk)
133 DEALLOCATE( temp_node )
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) )
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)
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)
160 rbuff_max(:) = sbuff_max(:)
161 rbuff_min(:) = sbuff_min(:)
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)
175 DEALLOCATE( sbuff_max )
176 DEALLOCATE( rbuff_max )
177 DEALLOCATE( sbuff_min )
178 DEALLOCATE( rbuff_min )
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) )
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)
204 CALL spmd_allreduce(sbuff_mean,rbuff_mean,comm_sens17%BUFFER_SIZE_MEAN,spmd_sum )
206 rbuff_mean(:) = sbuff_mean(:)
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)
222 DO ijk=1,comm_sens17%NUM_SENS
223 isens = comm_sens17%ID_SENS(ijk)
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)
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
237 DEALLOCATE( sbuff_mean )
238 DEALLOCATE( rbuff_mean )
242 DEALLOCATE( temp_max )
243 DEALLOCATE( temp_min )
244 DEALLOCATE( temp_avg )