You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

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
  • No labels