from System import DateTime from WaterFlowModel1DLib import * from DelftTools.Shell.Core.Workflow import ActivityRunner # todo add 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 hisTimeSeries = GetHisFileTimeSeriesForLocation(ModelPath + "calcpnt.his", "P_1128") #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) ActivityRunner.RunActivity(waterFlowModel) #endregion #region get timeseries at observation point 008_0 calculationPoint = GetItemByName(waterFlowModel.NetworkDiscretization.Locations.Values, "P_1128") timeSeries = waterFlowModel.OutputWaterLevel.GetTimeSeries(calculationPoint) timeSeries.Components[0].Name = "Time series at P_1128" #endregion #region Create list for the 2 timeseries from System.Collections.Generic import List timeSeriesToCompare = List[TimeSeries]() # todo : Add imported csv time series timeSeriesToCompare.Add(timeSeries) timeSeriesToCompare.Add(hisTimeSeries) #endregion #region Run loop with changing boundary data boundary = GetBoundaryCondition(waterFlowModel, "N_001 - Q(t)") boundary.DataType = WaterFlowModel1DBoundaryNodeDataType.FlowConstant calculationPoint = GetItemByName(waterFlowModel.NetworkDiscretization.Locations.Values, "P_1128") for i in range(3): boundary.Flow = 300.0 * i ActivityRunner.RunActivity(waterFlowModel) timeSeries = waterFlowModel.OutputWaterLevel.GetTimeSeries(calculationPoint) timeSeries.Components[0].Name = "Time series " + str(i) + " at P_1128" timeSeriesToCompare.Add(timeSeries.Clone()) Gui.DocumentViewsResolver.OpenViewForData(timeSeriesToCompare) #endregion