Read wind speed data
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(DateTime), | intent(in) | :: | time |
current time |
||
type(grid_real), | intent(in) | :: | dem |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=300), | public | :: | filename | ||||
integer(kind=short), | public | :: | i | ||||
integer(kind=short), | public | :: | j | ||||
real(kind=float), | public | :: | rsquare | ||||
type(DateTime), | public | :: | time_toread |
time to start reading from |
|||
character(len=300), | public | :: | varname |
SUBROUTINE WindFluxRead & ! ( time, dem ) IMPLICIT NONE !Arguments with intent(in): TYPE (DateTime), INTENT(IN) :: time !!current time TYPE (grid_real), INTENT(IN) :: dem !digital elevation model to apply drift !local declarations: TYPE (DateTime) :: time_toread !! time to start reading from CHARACTER (LEN = 300) :: filename CHARACTER (LEN = 300) :: varname REAL (KIND = float) :: rsquare INTEGER (KIND = short) :: i, j !-------------------------end of declarations---------------------------------- IF ( .NOT. (time < timeNew) ) THEN time_toread = time + - (dtWindSpeed - anemometersWS % timeIncrement) timeString = time_toread CALL Catch ('info', 'WindFlux', & 'read new wind speed data: ', & argument = timeString) SELECT CASE (interpolationMethod) CASE (0) !input grid CALL ReadField (fileGrid, time_toread, & dtWindSpeed, dtGrid, & 'M', windSpeed, & varName = windSpeed % var_name) CASE DEFAULT !requires interpolation !read new wind speed data CALL ReadData (network = anemometersWS, fileunit = fileunit, & time = time_toread, aggr_time = dtWindSpeed, & aggr_type = 'ave', tresh = valid_prcn) IF (elevationdrift == 1) THEN !load wind direction CALL ReadData (network = anemometersWD, fileunit = fileunitWD, & time = time_toread, aggr_time = dtWindSpeed, & aggr_type = 'ave', tresh = valid_prcn) END IF !interpolate IF (interpolationMethod_assignment == 1) THEN !only one method is applied SELECT CASE (interpolationMethod) CASE (1:3) CALL Interpolate (network = anemometersWS, & method = interpolationMethod, & near = neighbors, & idw_power = idw_power, & anisotropy = krige_anisotropy, & varmodel = krige_varmodel, & lags = krige_lags, & maxlag = krige_maxlag, & grid = windSpeed, & devst = grid_devst) CASE (4) CALL WindMicromet (anemometersWS, anemometersWD, slope, & curvature, slope_az, micrometSlopeWT, & micrometCurvatureWT, windSpeed ) CASE (5) CALL WindGonzalezLongatt (anemometersWS, anemometersWD, & dem, windSpeed) END SELECT ELSE !loop trough interpolation methods DO i = 1, 5 IF (interpolationMethod_vector(i) > 0) THEN SELECT CASE (interpolationMethod_vector(i)) CASE (1:3) CALL Interpolate (network = anemometersWS, & method = interpolationMethod_vector(i), & near = neighbors, & idw_power = idw_power, & anisotropy = krige_anisotropy, & varmodel = krige_varmodel, & lags = krige_lags, & maxlag = krige_maxlag, & grid = interpolatedMap (i), & devst = grid_devst) CASE (4) CALL WindMicromet (anemometersWS, anemometersWD, slope, & curvature, slope_az, micrometSlopeWT, & micrometCurvatureWT, interpolatedMap (i) ) CASE (5) CALL WindGonzalezLongatt (anemometersWS, anemometersWD, & dem, interpolatedMap (i) ) END SELECT END IF END DO !compose the final interpolated field DO i = 1, interpolationMethod_map % idim DO j = 1, interpolationMethod_map % jdim IF (interpolationMethod_map % mat(i,j) /= & interpolationMethod_map % nodata ) THEN windSpeed % mat (i,j) = & interpolatedMap (interpolationMethod_map % mat(i,j)) % mat(i,j) END IF END DO END DO END IF !1 or more interpolation methods END SELECT !apply scale factor and offset, if defined IF (offset_value /= MISSING_DEF_REAL) THEN CALL Offset (windSpeed, offset_value) END IF IF (scale_factor /= MISSING_DEF_REAL) THEN CALL Scale (windSpeed, scale_factor) END IF !grid exporting IF(export > 0 ) THEN IF( time == timeNewExport .AND. & time >= export_start .AND. & time <= export_stop ) THEN timeString = time timeString = timeString(1:19) timeString(14:14) = '-' timeString(17:17) = '-' grid_devst % reference_time = windSpeed % reference_time IF (needConversion) THEN CALL GridConvert (windSpeed, exportedGrid) CALL GridConvert (grid_devst, exportedGridVar) ELSE exportedGrid = windSpeed exportedGridVar = grid_devst END IF SELECT CASE (export_format) CASE (1) !esri-ascii export_file = TRIM(export_path) // TRIM(timeString) // & '_windspeed.asc' CALL Catch ('info', 'WindFlux', & 'exporting grid to file: ', & argument = TRIM(export_file)) CALL ExportGrid (exportedGrid, export_file, ESRI_ASCII) IF (krige_var == 1) THEN !export kriging variance export_file_var = TRIM(export_path) // TRIM(timeString) // & '_windspeed_variance.asc' CALL Catch ('info', 'WindFlux', & 'exporting variance grid to file: ', & argument = TRIM(export_file_var)) CALL ExportGrid (exportedGridVar, export_file_var, ESRI_ASCII) END IF CASE (2) !esri-binary export_file = TRIM(export_path) // TRIM(timeString) // & '_windspeed' CALL Catch ('info', 'WindFlux', & 'exporting grid to file: ', & argument = TRIM(export_file)) CALL ExportGrid (exportedGrid, export_file, ESRI_BINARY) IF (krige_var == 1) THEN !export kriging variance export_file_var = TRIM(export_path) // TRIM(timeString) // & '_windspeed_variance' CALL Catch ('info', 'WindFlux', & 'exporting variance grid to file: ', & argument = TRIM(export_file_var)) CALL ExportGrid (exportedGridVar, export_file_var, ESRI_BINARY) END IF CASE (3) !net_cdf CALL SetCurrentTime (time, exportedGrid) CALL Catch ('info', 'WindFlux', & 'exporting grid to file: ', & argument = TRIM(export_file)) CALL ExportGrid (exportedGrid, export_file, 'wind_speed', 'append') IF (krige_var == 1) THEN !export kriging variance CALL SetCurrentTime (time, exportedGridVar) CALL Catch ('info', 'WindFlux', & 'exporting grid to file: ', & argument = TRIM(export_file_var)) CALL ExportGrid (exportedGridVar, export_file_var, 'wind_speed_variance', 'append') END IF END SELECT timeNewExport = timeNewExport + export_dt END IF ENDIF !time forward timeNew = timeNew + dtWindSpeed END IF RETURN END SUBROUTINE WindFluxRead