libsim Versione 7.2.0
|
◆ vol7d_compute_stat_proc_metamorph()
Specialized method for statistically processing a set of data by integration/differentiation. This method performs statistical processing by integrating (accumulating) in time values representing time-average rates or fluxes, (stat_proc_input=0 stat_proc=1) or by transforming a time-integrated (accumulated) value in a time-average rate or flux (stat_proc_input=1 stat_proc=0). Analysis/observation or forecast timeranges are processed. The only operation performed is respectively multiplying or dividing the values by the length of the time interval in seconds. The output that vol7d object contains elements from the original volume this satisfying the conditions
Output data will have timerange of type stat_proc (1 or 0) and p1 and p2 equal to the corresponding input values. The supported statistical processing methods (parameter stat_proc) are:
Input volume may have any value of thistime_definition, and that value will be conserved in the output volume.
Definizione alla linea 1192 del file vol7d_class_compute.F90. 1193 DO j = 1, SIZE(that%timerange)
1194 DO i = 1, SIZE(that%time)
1195
1196 DO i1 = 1, SIZE(this%ana)
1197 DO i3 = 1, SIZE(this%level)
1198 DO i6 = 1, SIZE(this%network)
1199 DO i5 = 1, SIZE(this%dativar%d)
1200
1201 frac_m = 0.
1202 DO n1 = SIZE(dtratio), 1, -1 ! precedence to longer periods
1203 IF (dtratio(n1) <= 0) cycle ! safety check
1204 ttr_mask = .false.
1205 DO n = 1, map_ttr(i,j)%arraysize
1206 IF (map_ttr(i,j)%array(n)%extra_info == dtratio(n1)) THEN
1207 IF (c_e(this%voldatid(i1,map_ttr(i,j)%array(n)%it,i3, &
1208 map_ttr(i,j)%array(n)%itr,i5,i6))) THEN
1209 ttr_mask(map_ttr(i,j)%array(n)%it, &
1210 map_ttr(i,j)%array(n)%itr) = .true.
1211 ENDIF
1212 ENDIF
1213 ENDDO
1214
1215 ndtr = count(ttr_mask)
1216 frac_c = real(ndtr)/real(dtratio(n1))
1217
1218 IF (ndtr > 0 .AND. frac_c >= max(lfrac_valid, frac_m)) THEN
1219 frac_m = frac_c
1220 SELECT CASE(stat_proc)
1221 CASE (0) ! average
1222 that%voldatid(i1,i,i3,j,i5,i6) = &
1223 sum(this%voldatid(i1,:,i3,:,i5,i6), &
1224 mask=ttr_mask)/ndtr
1225 CASE (1, 4) ! accumulation, difference
1226 that%voldatid(i1,i,i3,j,i5,i6) = &
1227 sum(this%voldatid(i1,:,i3,:,i5,i6), &
1228 mask=ttr_mask)
1229 CASE (2) ! maximum
1230 that%voldatid(i1,i,i3,j,i5,i6) = &
1231 maxval(this%voldatid(i1,:,i3,:,i5,i6), &
1232 mask=ttr_mask)
1233 CASE (3) ! minimum
1234 that%voldatid(i1,i,i3,j,i5,i6) = &
1235 minval(this%voldatid(i1,:,i3,:,i5,i6), &
1236 mask=ttr_mask)
1237 CASE (6) ! stddev
1238 that%voldatid(i1,i,i3,j,i5,i6) = &
1239 stat_stddev( &
1240 reshape(this%voldatid(i1,:,i3,:,i5,i6), shape=linshape), &
1241 mask=reshape(ttr_mask, shape=linshape))
1242 END SELECT
1243 ENDIF
1244
1245 ENDDO ! dtratio
1246 ENDDO ! var
1247 ENDDO ! network
1248 ENDDO ! level
1249 ENDDO ! ana
1250 CALL delete(map_ttr(i,j))
1251 ENDDO ! otime
1252 ENDDO ! otimerange
1253ENDIF
1254
1255DEALLOCATE(ttr_mask)
1256
1257END SUBROUTINE vol7d_recompute_stat_proc_agg_multiv
1258
|