Skip to content

Instantly share code, notes, and snippets.

@DanWBR
Created June 6, 2022 18:25
Show Gist options
  • Save DanWBR/3383d4efefe3dfc3e63119ec36fa7397 to your computer and use it in GitHub Desktop.
Save DanWBR/3383d4efefe3dfc3e63119ec36fa7397 to your computer and use it in GitHub Desktop.
def display(msg):
print(msg)
dwsimpath = "/home/daniel/dwsimcore"
from clr_loader import get_coreclr
from pythonnet import set_runtime
set_runtime(get_coreclr(dwsimpath + "DWSIMCore.Tests.runtimeconfig.json"))
import clr
import clr
import System
from System.IO import Directory, Path, File
from System import String, Environment
clr.AddReference(dwsimpath + "DWSIMCore.Foundation.dll")
clr.AddReference(dwsimpath + "DWSIMCore.Foundation.CSharp.dll")
clr.AddReference(dwsimpath + "DWSIMCore.dll")
from DWSIMCore.Foundation.Enums.GraphicObjects import ObjectType
from DWSIMCore.Foundation import Streams, PropertyPackages
from DWSIMCore.Foundation.Streams import MaterialStream
from DWSIMCore.Foundation.UnitOperations import Heater
from DWSIMCore.Automation import Automation
from DWSIMCore.Foundation import Settings
Directory.SetCurrentDirectory(dwsimpath)
# create automation manager
interf = Automation()
sim = interf.CreateFlowsheet().GetAwaiter().GetResult()
# add water
water = sim.AvailableCompounds["Water"]
sim.SelectedCompounds.Add(water.Name, water)
# create and connect objects
m1 = sim.AddObject(ObjectType.MaterialStream, 50, 50, "inlet")
m2 = sim.AddObject(ObjectType.MaterialStream, 150, 50, "outlet")
e1 = sim.AddObject(ObjectType.EnergyStream, 100, 50, "power")
h1 = sim.AddObject(ObjectType.Heater, 100, 50, "heater")
sim.ConnectObjects(m1.GraphicObject, h1.GraphicObject, -1, -1)
sim.ConnectObjects(h1.GraphicObject, m2.GraphicObject, -1, -1)
sim.ConnectObjects(e1.GraphicObject, h1.GraphicObject, -1, -1)
# steam tables property package
stables = PropertyPackages.SteamTablesPropertyPackage()
sim.AddPropertyPackage(stables)
# set inlet stream temperature
# default properties: T = 298.15 K, P = 101325 Pa, Mass Flow = 1 kg/s
MaterialStream.SetTemperature(m1, 300.0) # K
MaterialStream.SetMassFlow(m1, 100.0) # kg/s
# set heater heat load
Heater.SetPropertyValue(h1, 'PROP_HX_3', 10000.0) # kW
# request a calculation
Action = getattr(System, "Action`1")
action = Action[String](display)
errors = interf.CalculateFlowsheet2(sim, action).GetAwaiter().GetResult()
ot = Heater.GetPropertyValue(h1, 'PROP_HX_2') # K
print(String.Format("Outlet Temperature: {0} K", ot))
# save file
fileNameToSave = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "heatersample.dwxmz")
interf.SaveFlowsheet(sim, fileNameToSave, True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment