Difference between revisions of "IronPython Script Snippets"
Jump to navigation
Jump to search
Line 133: | Line 133: | ||
print str(difc) + " m2/s" | print str(difc) + " m2/s" | ||
+ | |||
+ | </source> | ||
+ | |||
+ | = Create and Display a Two-Dimensional Plot (Classic UI) = | ||
+ | |||
+ | <source lang=python> | ||
+ | |||
+ | import clr | ||
+ | |||
+ | clr.AddReference("OxyPlot") | ||
+ | clr.AddReference("OxyPlot.WindowsForms") | ||
+ | clr.AddReference("System.Windows.Forms") | ||
+ | clr.AddReference("DWSIM.ExtensionMethods.Eto") | ||
+ | |||
+ | import OxyPlot | ||
+ | |||
+ | from OxyPlot.WindowsForms import PlotView | ||
+ | from System.Windows.Forms import * | ||
+ | from DWSIM.UI.Shared import * | ||
+ | from System import Array | ||
+ | |||
+ | from math import * | ||
+ | x = [i * 0.1 for i in range(100)] | ||
+ | |||
+ | # generate and display a nice chart | ||
+ | |||
+ | # create a new Plot model | ||
+ | |||
+ | # http://dwsim.inforside.com.br/api_help5/html/T_DWSIM_UI_Shared_Common.htm | ||
+ | # http://dwsim.inforside.com.br/api_help5/html/T_DWSIM_ExtensionMethods_OxyPlot.htm | ||
+ | |||
+ | chart1 = PlotView() | ||
+ | chart1.Model = Common.CreatePlotModel(Array[float](x), Array[float]([sin(xi) for xi in x]), "Test", "", "x", "y") | ||
+ | |||
+ | # update the chart data view | ||
+ | |||
+ | chart1.Model.InvalidatePlot(True) | ||
+ | |||
+ | # setup and display the chart | ||
+ | |||
+ | form1 = Form() | ||
+ | |||
+ | chart1.Dock = DockStyle.Fill | ||
+ | |||
+ | form1.Controls.Add(chart1) | ||
+ | form1.Invalidate() | ||
+ | form1.Show() | ||
</source> | </source> |
Revision as of 23:14, 11 August 2019
Contents
- 1 Create, connect and manipulate objects
- 2 Getting a reference to a Compound in the simulation
- 3 Executing a script from another tab/section
- 4 Setting the properties of a Material Stream
- 5 Getting Surface Tension and Diffusion Coefficients from a Material Stream
- 6 Create and Display a Two-Dimensional Plot (Classic UI)
- 7 Other Snippets
Create, connect and manipulate objects
Assuming that you're running a simulation with defined compound(s) and property package(s), this will create and connect a cooler and its connections:
import clr clr.AddReference('DWSIM.Interfaces') from DWSIM import Interfaces cooler = Flowsheet.AddObject(Interfaces.Enums.GraphicObjects.ObjectType.Cooler, 100, 100, 'COOLER-001') heat_out = Flowsheet.AddObject(Interfaces.Enums.GraphicObjects.ObjectType.EnergyStream, 130, 150, 'HEAT_OUT') inlet = Flowsheet.AddObject(Interfaces.Enums.GraphicObjects.ObjectType.MaterialStream, 50, 100, 'INLET') outlet = Flowsheet.AddObject(Interfaces.Enums.GraphicObjects.ObjectType.MaterialStream, 150, 100, 'OUTLET') cooler.GraphicObject.CreateConnectors(1, 1) inlet.GraphicObject.CreateConnectors(1, 1) outlet.GraphicObject.CreateConnectors(1, 1) heat_out.GraphicObject.CreateConnectors(1, 1) Flowsheet.ConnectObjects(inlet.GraphicObject, cooler.GraphicObject, 0, 0) Flowsheet.ConnectObjects(cooler.GraphicObject, outlet.GraphicObject, 0, 0) Flowsheet.ConnectObjects(cooler.GraphicObject, heat_out.GraphicObject, 0, 0) # get inlet properties inlet_properties = inlet.GetPhase('Overall').Properties inlet_properties.temperature = 400 # K inlet_properties.pressure = 1000000 # Pa inlet_properties.massflow = 30 # kg/s # the following will define all compound mole fractions to the same value so the sum is equal to 1 inlet.EqualizeOverallComposition() # set the cooler's outlet temperature to 300 K # http://dwsim.inforside.com.br/api_help57/html/T_DWSIM_UnitOperations_UnitOperations_Cooler.htm cooler.OutletTemperature = 300 # set the cooler's calculation mode to 'outlet temperature' # http://dwsim.inforside.com.br/api_help57/html/T_DWSIM_UnitOperations_UnitOperations_Cooler_CalculationMode.htm clr.AddReference('DWSIM.UnitOperations') from DWSIM import UnitOperations cooler.CalcMode = UnitOperations.UnitOperations.Cooler.CalculationMode.OutletTemperature #calculate the flowsheet Flowsheet.RequestCalculation(None, False) #get the outlet stream temperature and cooler's temperature decrease deltat = cooler.DeltaT heat_flow = heat_out.EnergyFlow print('Cooler Temperature Drop (K):'+ str(deltat)) print('Heat Flow (kW): ' + str(heat_flow))
Getting a reference to a Compound in the simulation
mycompound = Flowsheet.SelectedCompounds['Methane'] mycompound2 = Flowsheet.GetSimulationObject['MSTR-001'].Phases[0].Compounds['Methane']
mycompound and mycompound2 are referencing the same object in memory.
Executing a script from another tab/section
import clr import System from System import * clr.AddReference('System.Core') clr.ImportExtensions(System.Linq) # get the script text from "Functions" using LINQ source = Flowsheet.Scripts.Values.Where(lambda x: x.Title == 'Functions').FirstOrDefault().ScriptText.replace('\r', '') # execute the script exec(source)
Setting the properties of a Material Stream
ms1 = Flowsheet.GetFlowsheetSimulationObject('MSTR-001') overall = ms1.GetPhase('Overall') overall.Properties.temperature = 200 # set temperature to 200 K overall.Properties.pressure = 101325 # set pressure to 101325 Pa overall.Properties.massflow = 14 # set mass flow to 14 kg/s
Getting Surface Tension and Diffusion Coefficients from a Material Stream
import clr import System # get feed's interfacial tension - method 1 mixphase = feed.GetPhase("Mixture") sftens = mixphase.Properties.surfaceTension print str(sftens) + " N/m" # get feed's interfacial tension - method 2 sftens2 = clr.Reference[System.Object]() feed.GetTwoPhaseProp("surfacetension", None, "", sftens2) print str(sftens2.Value[0]) + " N/m" # diffusion coefficients phase = feed.GetPhase("Vapor") compound = phase.Compounds["Methane"] difc = compound.DiffusionCoefficient print str(difc) + " m2/s"
Create and Display a Two-Dimensional Plot (Classic UI)
import clr clr.AddReference("OxyPlot") clr.AddReference("OxyPlot.WindowsForms") clr.AddReference("System.Windows.Forms") clr.AddReference("DWSIM.ExtensionMethods.Eto") import OxyPlot from OxyPlot.WindowsForms import PlotView from System.Windows.Forms import * from DWSIM.UI.Shared import * from System import Array from math import * x = [i * 0.1 for i in range(100)] # generate and display a nice chart # create a new Plot model # http://dwsim.inforside.com.br/api_help5/html/T_DWSIM_UI_Shared_Common.htm # http://dwsim.inforside.com.br/api_help5/html/T_DWSIM_ExtensionMethods_OxyPlot.htm chart1 = PlotView() chart1.Model = Common.CreatePlotModel(Array[float](x), Array[float]([sin(xi) for xi in x]), "Test", "", "x", "y") # update the chart data view chart1.Model.InvalidatePlot(True) # setup and display the chart form1 = Form() chart1.Dock = DockStyle.Fill form1.Controls.Add(chart1) form1.Invalidate() form1.Show()
Other Snippets
For more code snippets, go to https://sourceforge.net/p/dwsim/discussion/scripting/.