from System import DateTime#region Import libs
# python libs
from WaterFlowModel1DLibSobekWorkshopHelperFunctions import *
from# DelftTools.Shell.Core.Workflow import ActivityRunner
# todo addNet libs
from System import of csv (station data)
#region Import SOBEK 2.13 model (Maas)
ModelPath = "D:\\scripting\\Maas.lit\\5\\"
model = ImportSobek2Model(ModelPath + "NETWORK.TP",False,True,False,False)
waterFlowModel = GetItemByName(model.Models, "water flow 1d")
#endregion
#region Read hisfile waterlevel time series
def GetHisFileTimeSeriesForLocation(filePath, locationName) :
# create his file importer
from DeltaShell.Sobek.Readers.Readers import *
importer = HisFileReader(filePath)
# show number of locations,components and TimeSteps
header = importer.GetHisFileHeader
print "Number of locations : " + str(header.Locations.Count)
print "Number of components : " + str(header.Components.Count)
print "Number of timesteps : " + str(header.TimeSteps.Count)
# choose a location and a component
location = locationName
component = header.Components[0]
print "Location : " + location + " -> component : " + component
# read the data from the his file
hisRowList = importer.ReadLocation(location, component)
# create a new timeseries with double data
from DelftTools.Functions import *
from DelftTools.Functions.Generic import *
series2 = TimeSeries()
outputVariable = Variable[float](component)
outputVariable.Name = "His file time series"
series2.Components.Add(outputVariable)
# add all data to the series
for row in hisRowList :
series2[row.TimeStep] = row.Value
# release the his file
importer.Close()
return series2
DateTime, Double
from System.Collections.Generic import List
# DeltaShell libs
from SharpMap import Map
from DelftTools.Shell.Core.Workflow import ActivityRunner
from DeltaShell.Plugins.SharpMapGis.ImportExport import CsvFunctionExporter
from DeltaShell.Plugins.DelftModels.WaterFlowModel.DataObjects import WaterFlowModel1DBoundaryNodeDataType
#endregion
rootPath = "D:\\scripting\\"
# Import of csv (station data)
CsvPath = rootPath + "waterflow_at_6_Measured.csv"
measuredTimeSeries = ImportCsvTimeSeries(CsvPath, "Time", "Value" ,"dd-M-yyyy H:mm:ss")
measuredTimeSeries.Components[0].Name = "Measured time series"
ModelPath = rootPath + "SW_max.lit\\2\\"
# Read hisfile waterlevel time series
hisTimeSeries = GetHisFileTimeSeriesForLocation(ModelPath + "calcpnt.his", "P_11286")
#endregion
#region# run model
# Change stop time (to get a short calculation period) yyyy,mm,dd,hh,mm,ss
waterFlowModel.StopTime = DateTime(2000,12, 15, 12, 0, 0)
Import SOBEK 2.13 model (Maas)
model = ImportSobek2Model(ModelPath + "NETWORK.TP",False,True,False,False)
waterFlowModel = GetItemByName(model.Models, "water flow 1d")
waterFlowModel.Network.CoordinateSystem = Map.CoordinateSystemFactory.CreateFromEPSG(28992) #RD new
# Run model
ActivityRunner.RunActivity(waterFlowModel)
#endregion
#region get# Get timeseries at observationcalculation point 008P_01128
calculationPoint = GetItemByName(waterFlowModel.NetworkDiscretization.Locations.Values, "P_11286")
timeSeriestimeSeriesBase = waterFlowModel.OutputWaterLevel.GetTimeSeries(calculationPoint)
timeSeriestimeSeriesBase.Components[0].Name = "TimeBase time series at P_1128"
#endregion
#region# Create time series list forcontaining the 2all timeseries
from System.Collections.Generic import List to compare
timeSeriesToCompare = List[TimeSeries]()
# todo : Add imported csv time seriestimeSeriesToCompare.Add(measuredTimeSeries)
timeSeriesToCompare.Add(timeSerieshisTimeSeries)
timeSeriesToCompare.Add(hisTimeSeriestimeSeriesBase)
#endregion
#region# Run loop with changing boundary data
boundary = GetBoundaryConditionGetItemByName(waterFlowModel.BoundaryConditions, "N_001Hancate - Q(t) :0 m^3/s")
boundary.DataType = WaterFlowModel1DBoundaryNodeDataType.FlowConstant
calculationPoint = GetItemByName(waterFlowModel.NetworkDiscretization.Locations.Values, "P_1128")
for i in range(31,4): # 1, 2, 3
boundary.Flow = 30030.0 * i
ActivityRunner.RunActivity(waterFlowModel)
timeSeries = waterFlowModel.OutputWaterLevel.GetTimeSeries(calculationPoint)
timeSeries.Components[0].Name = "Time seriesCase " + str(i) + " at: P_1128"N_001 flow " + str(boundary.Flow)
timeSeriesToCompare.Add(timeSeries.Clone())
# show in chart
Gui.DocumentViewsResolver.OpenViewForData(timeSeriesToCompare)
#endregion
# export time series to csv
exporter = CsvFunctionExporter()
index = 0
for ts in timeSeriesToCompare:
exporter.Export(ts, rootPath + "waterflow_at_6_" + str(index) + ".csv")
index += 1
|