From 53002577529e152ecbe087926ff01dd955d4a597 Mon Sep 17 00:00:00 2001 From: DanWBR Date: Fri, 10 Jun 2022 16:50:58 -0400 Subject: [PATCH] fixed issue with PFR; added air cooler --- DWSIM.Interfaces/Enums.vb | 2 + DWSIM.Interfaces/ISimulationObject.vb | 4 + .../BaseClass/SimulationObjectBaseClasses.vb | 4 + .../DWSIM.UnitOperations.vbproj | 22 + .../EditingForm_AirCooler.designer.vb | 1412 ++++++++++++++++ .../EditingForms/EditingForm_AirCooler.resx | 220 +++ .../EditingForms/EditingForm_AirCooler.vb | 455 +++++ .../My Project/Resources.Designer.vb | 32 +- .../My Project/Resources.resx | 9 + DWSIM.UnitOperations/Reactors/PFR.vb | 6 +- DWSIM.UnitOperations/Resources/icons8-fan.png | Bin 0 -> 19986 bytes .../Resources/icons8-solar_panel.png | Bin 0 -> 7528 bytes .../Resources/icons8-wind_turbine.png | Bin 0 -> 17534 bytes .../UnitOperations/AirCooler.vb | 1495 +++++++++++++++++ .../CleanEnergy/CleanEnergyUnitOpBase.vb | 77 + .../Electrolyzers/PEMElectrolyzerBase.vb | 79 + .../FlowsheetSurface_SkiaSharp.en.resx | 72 +- .../FlowsheetSurface_SkiaSharp.resx | 242 +-- .../SimulationObjectsPanel.Designer.vb | 32 +- .../SimulationObjectsPanel.en.resx | 139 +- .../SimulationObjectsPanel.resx | 1050 ++++++------ .../SimulationObjectsPanel.vb | 6 +- 22 files changed, 4618 insertions(+), 740 deletions(-) create mode 100644 DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.designer.vb create mode 100644 DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.resx create mode 100644 DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.vb create mode 100644 DWSIM.UnitOperations/Resources/icons8-fan.png create mode 100644 DWSIM.UnitOperations/Resources/icons8-solar_panel.png create mode 100644 DWSIM.UnitOperations/Resources/icons8-wind_turbine.png create mode 100644 DWSIM.UnitOperations/UnitOperations/AirCooler.vb create mode 100644 DWSIM.UnitOperations/UnitOperations/CleanEnergy/CleanEnergyUnitOpBase.vb create mode 100644 DWSIM.UnitOperations/UnitOperations/Electrolyzers/PEMElectrolyzerBase.vb diff --git a/DWSIM.Interfaces/Enums.vb b/DWSIM.Interfaces/Enums.vb index ba1ad8773..87dfc874f 100644 --- a/DWSIM.Interfaces/Enums.vb +++ b/DWSIM.Interfaces/Enums.vb @@ -455,6 +455,8 @@ Namespace Enums Switches = 14 Inputs = 15 None = 16 + CleanPowerSources = 17 + Electrolyzers = 18 End Enum diff --git a/DWSIM.Interfaces/ISimulationObject.vb b/DWSIM.Interfaces/ISimulationObject.vb index c48b6c76d..7e35bdb7c 100644 --- a/DWSIM.Interfaces/ISimulationObject.vb +++ b/DWSIM.Interfaces/ISimulationObject.vb @@ -242,4 +242,8 @@ Imports DWSIM.Interfaces.Enums Function GetAsObject() As Object + ReadOnly Property IsSource As Boolean + + ReadOnly Property IsSink As Boolean + End Interface diff --git a/DWSIM.SharedClasses/BaseClass/SimulationObjectBaseClasses.vb b/DWSIM.SharedClasses/BaseClass/SimulationObjectBaseClasses.vb index 3edada18a..d555ad641 100644 --- a/DWSIM.SharedClasses/BaseClass/SimulationObjectBaseClasses.vb +++ b/DWSIM.SharedClasses/BaseClass/SimulationObjectBaseClasses.vb @@ -1495,6 +1495,10 @@ Namespace UnitOperations End Get End Property + Public Overridable ReadOnly Property IsSource As Boolean = False Implements ISimulationObject.IsSource + + Public Overridable ReadOnly Property IsSink As Boolean = False Implements ISimulationObject.IsSink + #End Region End Class diff --git a/DWSIM.UnitOperations/DWSIM.UnitOperations.vbproj b/DWSIM.UnitOperations/DWSIM.UnitOperations.vbproj index 35369ee11..96e42b38d 100644 --- a/DWSIM.UnitOperations/DWSIM.UnitOperations.vbproj +++ b/DWSIM.UnitOperations/DWSIM.UnitOperations.vbproj @@ -96,6 +96,10 @@ False ..\DWSIM\References\Cureos.Numerics.dll + + False + ..\DWSIM\References\Eto.Forms\Release\net45\Eto.dll + ..\packages\NetOfficeFw.Excel.1.8.1\lib\net40\ExcelApi.dll False @@ -228,6 +232,12 @@ Form + + EditingForm_AirCooler.vb + + + Form + EditingForm_AnalogGauge.vb @@ -632,7 +642,10 @@ + + + @@ -675,6 +688,9 @@ EditingForm_Adjust.vb + + EditingForm_AirCooler.vb + EditingForm_AnalogGauge.vb @@ -1258,6 +1274,11 @@ {a58eb237-f703-45cf-89f9-e8b91bff76c1} DWSIM.DrawingTools.SkiaSharp.Extended + + {5ba7546b-010c-4197-975e-f462bbea1ec4} + DWSIM.ExtensionMethods.Eto + False + {e4e37bfa-063f-4dba-a1bf-294d392c2ca4} DWSIM.Inspector @@ -1703,6 +1724,7 @@ + diff --git a/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.designer.vb b/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.designer.vb new file mode 100644 index 000000000..54649a328 --- /dev/null +++ b/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.designer.vb @@ -0,0 +1,1412 @@ + +Partial Class EditingForm_AirCooler + + 'Form overrides dispose to clean up the component list. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(EditingForm_AirCooler)) + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.btnCreateAndConnectEnergy = New System.Windows.Forms.Button() + Me.btnDisconnectEnergy = New System.Windows.Forms.Button() + Me.btnCreateAndConnectOutlet1 = New System.Windows.Forms.Button() + Me.Label14 = New System.Windows.Forms.Label() + Me.btnCreateAndConnectInlet1 = New System.Windows.Forms.Button() + Me.cbEnergy = New System.Windows.Forms.ComboBox() + Me.btnDisconnectOutlet1 = New System.Windows.Forms.Button() + Me.btnDisconnect1 = New System.Windows.Forms.Button() + Me.Label7 = New System.Windows.Forms.Label() + Me.cbOutlet1 = New System.Windows.Forms.ComboBox() + Me.cbInlet1 = New System.Windows.Forms.ComboBox() + Me.Label19 = New System.Windows.Forms.Label() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.lblTag = New System.Windows.Forms.TextBox() + Me.chkActive = New System.Windows.Forms.CheckBox() + Me.lblConnectedTo = New System.Windows.Forms.Label() + Me.lblStatus = New System.Windows.Forms.Label() + Me.Label13 = New System.Windows.Forms.Label() + Me.Label12 = New System.Windows.Forms.Label() + Me.Label11 = New System.Windows.Forms.Label() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.rtbAnnotations = New Extended.Windows.Forms.RichTextBoxExtended() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.TabControl1 = New System.Windows.Forms.TabControl() + Me.TabPage1 = New System.Windows.Forms.TabPage() + Me.Label1 = New System.Windows.Forms.Label() + Me.tbEff = New System.Windows.Forms.TextBox() + Me.Label9 = New System.Windows.Forms.Label() + Me.Label43 = New System.Windows.Forms.Label() + Me.tbOverallUA = New System.Windows.Forms.TextBox() + Me.Label44 = New System.Windows.Forms.Label() + Me.lblMaximumHeatExchange = New System.Windows.Forms.Label() + Me.tbMaxHeatEx = New System.Windows.Forms.TextBox() + Me.Label42 = New System.Windows.Forms.Label() + Me.lblHeatExchanged = New System.Windows.Forms.Label() + Me.tbHeatingChange = New System.Windows.Forms.TextBox() + Me.Label6 = New System.Windows.Forms.Label() + Me.lblOutletAirTemperature = New System.Windows.Forms.Label() + Me.tbOutletAirTemp = New System.Windows.Forms.TextBox() + Me.Label40 = New System.Windows.Forms.Label() + Me.lblInletAirPressure = New System.Windows.Forms.Label() + Me.tbInletAirPre = New System.Windows.Forms.TextBox() + Me.Label38 = New System.Windows.Forms.Label() + Me.lblInletAirTemperature = New System.Windows.Forms.Label() + Me.tbInletAirTemp = New System.Windows.Forms.TextBox() + Me.Label36 = New System.Windows.Forms.Label() + Me.lblOutletTemperature = New System.Windows.Forms.Label() + Me.lblPressureDrop = New System.Windows.Forms.Label() + Me.tbOutletTemperature = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.tbPressureDrop = New System.Windows.Forms.TextBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.cbCalcMode = New System.Windows.Forms.ComboBox() + Me.Label8 = New System.Windows.Forms.Label() + Me.TabPage2 = New System.Windows.Forms.TabPage() + Me.lbuTubeThermalCond = New System.Windows.Forms.Label() + Me.tbTubeThermalCond = New System.Windows.Forms.TextBox() + Me.tbTubeDi = New System.Windows.Forms.TextBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.Label32 = New System.Windows.Forms.Label() + Me.lbTubeRoughness = New System.Windows.Forms.Label() + Me.lbuTubeDi = New System.Windows.Forms.Label() + Me.tbTubeRoughness = New System.Windows.Forms.TextBox() + Me.Label30 = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.tbTubeDe = New System.Windows.Forms.TextBox() + Me.lbuTubePitch = New System.Windows.Forms.Label() + Me.lbTubeDe = New System.Windows.Forms.Label() + Me.tbTubePitch = New System.Windows.Forms.TextBox() + Me.Label28 = New System.Windows.Forms.Label() + Me.Label20 = New System.Windows.Forms.Label() + Me.tbTubeLength = New System.Windows.Forms.TextBox() + Me.tbNumberOfTubesPerShell = New System.Windows.Forms.TextBox() + Me.lbuTubeLength = New System.Windows.Forms.Label() + Me.Label22 = New System.Windows.Forms.Label() + Me.Label26 = New System.Windows.Forms.Label() + Me.tbTubePassesPerShell = New System.Windows.Forms.TextBox() + Me.tbTubeFoulingFactor = New System.Windows.Forms.TextBox() + Me.Label24 = New System.Windows.Forms.Label() + Me.lbuTubeFoulingFactor = New System.Windows.Forms.Label() + Me.TabPage3 = New System.Windows.Forms.TabPage() + Me.lblElectricalLoad = New System.Windows.Forms.Label() + Me.tbElecLoad = New System.Windows.Forms.TextBox() + Me.Label34 = New System.Windows.Forms.Label() + Me.Label29 = New System.Windows.Forms.Label() + Me.tbElecConv = New System.Windows.Forms.TextBox() + Me.Label31 = New System.Windows.Forms.Label() + Me.lblActualAirFlow = New System.Windows.Forms.Label() + Me.tbActualAF = New System.Windows.Forms.TextBox() + Me.Label27 = New System.Windows.Forms.Label() + Me.Label21 = New System.Windows.Forms.Label() + Me.tbActualR = New System.Windows.Forms.TextBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.lblRefAirFlow = New System.Windows.Forms.Label() + Me.tbRefAF = New System.Windows.Forms.TextBox() + Me.Label18 = New System.Windows.Forms.Label() + Me.Label15 = New System.Windows.Forms.Label() + Me.tbRefR = New System.Windows.Forms.TextBox() + Me.Label16 = New System.Windows.Forms.Label() + Me.ToolTipChangeTag = New System.Windows.Forms.ToolTip(Me.components) + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.TabControl1.SuspendLayout() + Me.TabPage1.SuspendLayout() + Me.TabPage2.SuspendLayout() + Me.TabPage3.SuspendLayout() + Me.SuspendLayout() + ' + 'GroupBox1 + ' + Me.GroupBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox1.Controls.Add(Me.btnCreateAndConnectEnergy) + Me.GroupBox1.Controls.Add(Me.btnDisconnectEnergy) + Me.GroupBox1.Controls.Add(Me.btnCreateAndConnectOutlet1) + Me.GroupBox1.Controls.Add(Me.Label14) + Me.GroupBox1.Controls.Add(Me.btnCreateAndConnectInlet1) + Me.GroupBox1.Controls.Add(Me.cbEnergy) + Me.GroupBox1.Controls.Add(Me.btnDisconnectOutlet1) + Me.GroupBox1.Controls.Add(Me.btnDisconnect1) + Me.GroupBox1.Controls.Add(Me.Label7) + Me.GroupBox1.Controls.Add(Me.cbOutlet1) + Me.GroupBox1.Controls.Add(Me.cbInlet1) + Me.GroupBox1.Controls.Add(Me.Label19) + Me.GroupBox1.Location = New System.Drawing.Point(7, 105) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(403, 113) + Me.GroupBox1.TabIndex = 12 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Connections" + ' + 'btnCreateAndConnectEnergy + ' + Me.btnCreateAndConnectEnergy.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnCreateAndConnectEnergy.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.btnCreateAndConnectEnergy.Image = CType(resources.GetObject("btnCreateAndConnectEnergy.Image"), System.Drawing.Image) + Me.btnCreateAndConnectEnergy.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.btnCreateAndConnectEnergy.Location = New System.Drawing.Point(347, 77) + Me.btnCreateAndConnectEnergy.Name = "btnCreateAndConnectEnergy" + Me.btnCreateAndConnectEnergy.Size = New System.Drawing.Size(21, 21) + Me.btnCreateAndConnectEnergy.TabIndex = 42 + Me.ToolTipValues.SetToolTip(Me.btnCreateAndConnectEnergy, "Criar e Conectar") + Me.btnCreateAndConnectEnergy.UseVisualStyleBackColor = True + ' + 'btnDisconnectEnergy + ' + Me.btnDisconnectEnergy.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnDisconnectEnergy.Image = CType(resources.GetObject("btnDisconnectEnergy.Image"), System.Drawing.Image) + Me.btnDisconnectEnergy.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.btnDisconnectEnergy.Location = New System.Drawing.Point(374, 77) + Me.btnDisconnectEnergy.Name = "btnDisconnectEnergy" + Me.btnDisconnectEnergy.Size = New System.Drawing.Size(21, 21) + Me.btnDisconnectEnergy.TabIndex = 23 + Me.ToolTipValues.SetToolTip(Me.btnDisconnectEnergy, "Desconectar") + Me.btnDisconnectEnergy.UseVisualStyleBackColor = True + ' + 'btnCreateAndConnectOutlet1 + ' + Me.btnCreateAndConnectOutlet1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnCreateAndConnectOutlet1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.btnCreateAndConnectOutlet1.Image = CType(resources.GetObject("btnCreateAndConnectOutlet1.Image"), System.Drawing.Image) + Me.btnCreateAndConnectOutlet1.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.btnCreateAndConnectOutlet1.Location = New System.Drawing.Point(347, 50) + Me.btnCreateAndConnectOutlet1.Name = "btnCreateAndConnectOutlet1" + Me.btnCreateAndConnectOutlet1.Size = New System.Drawing.Size(21, 21) + Me.btnCreateAndConnectOutlet1.TabIndex = 41 + Me.ToolTipValues.SetToolTip(Me.btnCreateAndConnectOutlet1, "Criar e Conectar") + Me.btnCreateAndConnectOutlet1.UseVisualStyleBackColor = True + ' + 'Label14 + ' + Me.Label14.AutoSize = True + Me.Label14.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label14.Location = New System.Drawing.Point(9, 80) + Me.Label14.Name = "Label14" + Me.Label14.Size = New System.Drawing.Size(76, 13) + Me.Label14.TabIndex = 22 + Me.Label14.Text = "Energy Stream" + ' + 'btnCreateAndConnectInlet1 + ' + Me.btnCreateAndConnectInlet1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnCreateAndConnectInlet1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom + Me.btnCreateAndConnectInlet1.Image = CType(resources.GetObject("btnCreateAndConnectInlet1.Image"), System.Drawing.Image) + Me.btnCreateAndConnectInlet1.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.btnCreateAndConnectInlet1.Location = New System.Drawing.Point(347, 23) + Me.btnCreateAndConnectInlet1.Name = "btnCreateAndConnectInlet1" + Me.btnCreateAndConnectInlet1.Size = New System.Drawing.Size(21, 21) + Me.btnCreateAndConnectInlet1.TabIndex = 40 + Me.ToolTipValues.SetToolTip(Me.btnCreateAndConnectInlet1, "Criar e Conectar") + Me.btnCreateAndConnectInlet1.UseVisualStyleBackColor = True + ' + 'cbEnergy + ' + Me.cbEnergy.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cbEnergy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbEnergy.FormattingEnabled = True + Me.cbEnergy.Location = New System.Drawing.Point(147, 77) + Me.cbEnergy.Name = "cbEnergy" + Me.cbEnergy.Size = New System.Drawing.Size(194, 21) + Me.cbEnergy.TabIndex = 21 + ' + 'btnDisconnectOutlet1 + ' + Me.btnDisconnectOutlet1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnDisconnectOutlet1.Image = CType(resources.GetObject("btnDisconnectOutlet1.Image"), System.Drawing.Image) + Me.btnDisconnectOutlet1.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.btnDisconnectOutlet1.Location = New System.Drawing.Point(374, 50) + Me.btnDisconnectOutlet1.Name = "btnDisconnectOutlet1" + Me.btnDisconnectOutlet1.Size = New System.Drawing.Size(21, 21) + Me.btnDisconnectOutlet1.TabIndex = 20 + Me.ToolTipValues.SetToolTip(Me.btnDisconnectOutlet1, "Desconectar") + Me.btnDisconnectOutlet1.UseVisualStyleBackColor = True + ' + 'btnDisconnect1 + ' + Me.btnDisconnect1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnDisconnect1.Image = CType(resources.GetObject("btnDisconnect1.Image"), System.Drawing.Image) + Me.btnDisconnect1.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.btnDisconnect1.Location = New System.Drawing.Point(374, 23) + Me.btnDisconnect1.Name = "btnDisconnect1" + Me.btnDisconnect1.Size = New System.Drawing.Size(21, 21) + Me.btnDisconnect1.TabIndex = 14 + Me.ToolTipValues.SetToolTip(Me.btnDisconnect1, "Desconectar") + Me.btnDisconnect1.UseVisualStyleBackColor = True + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label7.Location = New System.Drawing.Point(9, 53) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(71, 13) + Me.Label7.TabIndex = 13 + Me.Label7.Text = "Outlet Stream" + ' + 'cbOutlet1 + ' + Me.cbOutlet1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cbOutlet1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbOutlet1.FormattingEnabled = True + Me.cbOutlet1.Location = New System.Drawing.Point(147, 50) + Me.cbOutlet1.Name = "cbOutlet1" + Me.cbOutlet1.Size = New System.Drawing.Size(194, 21) + Me.cbOutlet1.TabIndex = 8 + ' + 'cbInlet1 + ' + Me.cbInlet1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cbInlet1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbInlet1.FormattingEnabled = True + Me.cbInlet1.Location = New System.Drawing.Point(147, 23) + Me.cbInlet1.Name = "cbInlet1" + Me.cbInlet1.Size = New System.Drawing.Size(194, 21) + Me.cbInlet1.TabIndex = 1 + ' + 'Label19 + ' + Me.Label19.AutoSize = True + Me.Label19.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label19.Location = New System.Drawing.Point(8, 26) + Me.Label19.Name = "Label19" + Me.Label19.Size = New System.Drawing.Size(63, 13) + Me.Label19.TabIndex = 0 + Me.Label19.Text = "Inlet Stream" + ' + 'GroupBox5 + ' + Me.GroupBox5.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox5.Controls.Add(Me.lblTag) + Me.GroupBox5.Controls.Add(Me.chkActive) + Me.GroupBox5.Controls.Add(Me.lblConnectedTo) + Me.GroupBox5.Controls.Add(Me.lblStatus) + Me.GroupBox5.Controls.Add(Me.Label13) + Me.GroupBox5.Controls.Add(Me.Label12) + Me.GroupBox5.Controls.Add(Me.Label11) + Me.GroupBox5.Location = New System.Drawing.Point(7, 5) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(403, 98) + Me.GroupBox5.TabIndex = 11 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "General Info" + ' + 'lblTag + ' + Me.lblTag.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblTag.Location = New System.Drawing.Point(133, 19) + Me.lblTag.Name = "lblTag" + Me.lblTag.Size = New System.Drawing.Size(262, 20) + Me.lblTag.TabIndex = 24 + ' + 'chkActive + ' + Me.chkActive.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.chkActive.Appearance = System.Windows.Forms.Appearance.Button + Me.chkActive.Image = Global.DWSIM.UnitOperations.My.Resources.Resources.bullet_tick + Me.chkActive.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.chkActive.Location = New System.Drawing.Point(374, 43) + Me.chkActive.Name = "chkActive" + Me.chkActive.Size = New System.Drawing.Size(21, 21) + Me.chkActive.TabIndex = 21 + Me.ToolTipValues.SetToolTip(Me.chkActive, "Ativo/Inativo") + Me.chkActive.UseVisualStyleBackColor = True + ' + 'lblConnectedTo + ' + Me.lblConnectedTo.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblConnectedTo.AutoSize = True + Me.lblConnectedTo.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lblConnectedTo.Location = New System.Drawing.Point(132, 72) + Me.lblConnectedTo.Name = "lblConnectedTo" + Me.lblConnectedTo.Size = New System.Drawing.Size(38, 13) + Me.lblConnectedTo.TabIndex = 20 + Me.lblConnectedTo.Text = "Objeto" + ' + 'lblStatus + ' + Me.lblStatus.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblStatus.AutoSize = True + Me.lblStatus.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lblStatus.Location = New System.Drawing.Point(132, 47) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(38, 13) + Me.lblStatus.TabIndex = 19 + Me.lblStatus.Text = "Objeto" + ' + 'Label13 + ' + Me.Label13.AutoSize = True + Me.Label13.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label13.Location = New System.Drawing.Point(9, 72) + Me.Label13.Name = "Label13" + Me.Label13.Size = New System.Drawing.Size(51, 13) + Me.Label13.TabIndex = 17 + Me.Label13.Text = "Linked to" + ' + 'Label12 + ' + Me.Label12.AutoSize = True + Me.Label12.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label12.Location = New System.Drawing.Point(9, 47) + Me.Label12.Name = "Label12" + Me.Label12.Size = New System.Drawing.Size(37, 13) + Me.Label12.TabIndex = 16 + Me.Label12.Text = "Status" + ' + 'Label11 + ' + Me.Label11.AutoSize = True + Me.Label11.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label11.Location = New System.Drawing.Point(9, 22) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(38, 13) + Me.Label11.TabIndex = 14 + Me.Label11.Text = "Object" + ' + 'GroupBox4 + ' + Me.GroupBox4.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox4.Controls.Add(Me.rtbAnnotations) + Me.GroupBox4.Location = New System.Drawing.Point(7, 582) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(403, 156) + Me.GroupBox4.TabIndex = 10 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "Notes" + ' + 'rtbAnnotations + ' + Me.rtbAnnotations.Dock = System.Windows.Forms.DockStyle.Fill + Me.rtbAnnotations.Location = New System.Drawing.Point(3, 16) + Me.rtbAnnotations.Name = "rtbAnnotations" + Me.rtbAnnotations.Rtf = "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1046{\fonttbl{\f0\fnil Microsoft " & + "Sans Serif;}}" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "{\*\generator Riched20 10.0.18362}\viewkind4\uc1 " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "\pard\f0\fs17\" & + "par" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "}" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) + Me.rtbAnnotations.ShowRedo = False + Me.rtbAnnotations.ShowUndo = False + Me.rtbAnnotations.Size = New System.Drawing.Size(397, 137) + Me.rtbAnnotations.TabIndex = 0 + ' + 'GroupBox2 + ' + Me.GroupBox2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox2.Controls.Add(Me.TabControl1) + Me.GroupBox2.Location = New System.Drawing.Point(7, 221) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(403, 361) + Me.GroupBox2.TabIndex = 13 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Calculation Parameters" + ' + 'TabControl1 + ' + Me.TabControl1.Controls.Add(Me.TabPage1) + Me.TabControl1.Controls.Add(Me.TabPage2) + Me.TabControl1.Controls.Add(Me.TabPage3) + Me.TabControl1.Dock = System.Windows.Forms.DockStyle.Fill + Me.TabControl1.Location = New System.Drawing.Point(3, 16) + Me.TabControl1.Name = "TabControl1" + Me.TabControl1.SelectedIndex = 0 + Me.TabControl1.Size = New System.Drawing.Size(397, 342) + Me.TabControl1.TabIndex = 0 + ' + 'TabPage1 + ' + Me.TabPage1.Controls.Add(Me.Label1) + Me.TabPage1.Controls.Add(Me.tbEff) + Me.TabPage1.Controls.Add(Me.Label9) + Me.TabPage1.Controls.Add(Me.Label43) + Me.TabPage1.Controls.Add(Me.tbOverallUA) + Me.TabPage1.Controls.Add(Me.Label44) + Me.TabPage1.Controls.Add(Me.lblMaximumHeatExchange) + Me.TabPage1.Controls.Add(Me.tbMaxHeatEx) + Me.TabPage1.Controls.Add(Me.Label42) + Me.TabPage1.Controls.Add(Me.lblHeatExchanged) + Me.TabPage1.Controls.Add(Me.tbHeatingChange) + Me.TabPage1.Controls.Add(Me.Label6) + Me.TabPage1.Controls.Add(Me.lblOutletAirTemperature) + Me.TabPage1.Controls.Add(Me.tbOutletAirTemp) + Me.TabPage1.Controls.Add(Me.Label40) + Me.TabPage1.Controls.Add(Me.lblInletAirPressure) + Me.TabPage1.Controls.Add(Me.tbInletAirPre) + Me.TabPage1.Controls.Add(Me.Label38) + Me.TabPage1.Controls.Add(Me.lblInletAirTemperature) + Me.TabPage1.Controls.Add(Me.tbInletAirTemp) + Me.TabPage1.Controls.Add(Me.Label36) + Me.TabPage1.Controls.Add(Me.lblOutletTemperature) + Me.TabPage1.Controls.Add(Me.lblPressureDrop) + Me.TabPage1.Controls.Add(Me.tbOutletTemperature) + Me.TabPage1.Controls.Add(Me.Label2) + Me.TabPage1.Controls.Add(Me.tbPressureDrop) + Me.TabPage1.Controls.Add(Me.Label3) + Me.TabPage1.Controls.Add(Me.cbCalcMode) + Me.TabPage1.Controls.Add(Me.Label8) + Me.TabPage1.Location = New System.Drawing.Point(4, 22) + Me.TabPage1.Name = "TabPage1" + Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage1.Size = New System.Drawing.Size(389, 316) + Me.TabPage1.TabIndex = 0 + Me.TabPage1.Text = "Main" + Me.TabPage1.UseVisualStyleBackColor = True + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(324, 287) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(15, 13) + Me.Label1.TabIndex = 70 + Me.Label1.Text = "%" + ' + 'tbEff + ' + Me.tbEff.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbEff.Location = New System.Drawing.Point(151, 284) + Me.tbEff.Name = "tbEff" + Me.tbEff.ReadOnly = True + Me.tbEff.Size = New System.Drawing.Size(167, 20) + Me.tbEff.TabIndex = 69 + Me.tbEff.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label9.Location = New System.Drawing.Point(12, 287) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(107, 13) + Me.Label9.TabIndex = 68 + Me.Label9.Text = "Exchanger Efficiency" + ' + 'Label43 + ' + Me.Label43.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label43.AutoSize = True + Me.Label43.Location = New System.Drawing.Point(324, 209) + Me.Label43.Name = "Label43" + Me.Label43.Size = New System.Drawing.Size(30, 13) + Me.Label43.TabIndex = 67 + Me.Label43.Text = "W/K" + ' + 'tbOverallUA + ' + Me.tbOverallUA.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbOverallUA.Location = New System.Drawing.Point(151, 206) + Me.tbOverallUA.Name = "tbOverallUA" + Me.tbOverallUA.Size = New System.Drawing.Size(167, 20) + Me.tbOverallUA.TabIndex = 66 + Me.tbOverallUA.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label44 + ' + Me.Label44.AutoSize = True + Me.Label44.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label44.Location = New System.Drawing.Point(12, 209) + Me.Label44.Name = "Label44" + Me.Label44.Size = New System.Drawing.Size(58, 13) + Me.Label44.TabIndex = 65 + Me.Label44.Text = "Overall UA" + ' + 'lblMaximumHeatExchange + ' + Me.lblMaximumHeatExchange.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblMaximumHeatExchange.AutoSize = True + Me.lblMaximumHeatExchange.Location = New System.Drawing.Point(324, 261) + Me.lblMaximumHeatExchange.Name = "lblMaximumHeatExchange" + Me.lblMaximumHeatExchange.Size = New System.Drawing.Size(45, 13) + Me.lblMaximumHeatExchange.TabIndex = 64 + Me.lblMaximumHeatExchange.Text = "Label41" + ' + 'tbMaxHeatEx + ' + Me.tbMaxHeatEx.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbMaxHeatEx.Location = New System.Drawing.Point(151, 258) + Me.tbMaxHeatEx.Name = "tbMaxHeatEx" + Me.tbMaxHeatEx.ReadOnly = True + Me.tbMaxHeatEx.Size = New System.Drawing.Size(167, 20) + Me.tbMaxHeatEx.TabIndex = 63 + Me.tbMaxHeatEx.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label42 + ' + Me.Label42.AutoSize = True + Me.Label42.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label42.Location = New System.Drawing.Point(12, 261) + Me.Label42.Name = "Label42" + Me.Label42.Size = New System.Drawing.Size(128, 13) + Me.Label42.TabIndex = 62 + Me.Label42.Text = "Maximum Heat Exchange" + ' + 'lblHeatExchanged + ' + Me.lblHeatExchanged.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblHeatExchanged.AutoSize = True + Me.lblHeatExchanged.Location = New System.Drawing.Point(324, 235) + Me.lblHeatExchanged.Name = "lblHeatExchanged" + Me.lblHeatExchanged.Size = New System.Drawing.Size(45, 13) + Me.lblHeatExchanged.TabIndex = 61 + Me.lblHeatExchanged.Text = "Label10" + ' + 'tbHeatingChange + ' + Me.tbHeatingChange.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbHeatingChange.Location = New System.Drawing.Point(151, 232) + Me.tbHeatingChange.Name = "tbHeatingChange" + Me.tbHeatingChange.ReadOnly = True + Me.tbHeatingChange.Size = New System.Drawing.Size(167, 20) + Me.tbHeatingChange.TabIndex = 60 + Me.tbHeatingChange.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label6.Location = New System.Drawing.Point(12, 235) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(87, 13) + Me.Label6.TabIndex = 59 + Me.Label6.Text = "Heat Exchanged" + ' + 'lblOutletAirTemperature + ' + Me.lblOutletAirTemperature.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblOutletAirTemperature.AutoSize = True + Me.lblOutletAirTemperature.Location = New System.Drawing.Point(324, 169) + Me.lblOutletAirTemperature.Name = "lblOutletAirTemperature" + Me.lblOutletAirTemperature.Size = New System.Drawing.Size(45, 13) + Me.lblOutletAirTemperature.TabIndex = 58 + Me.lblOutletAirTemperature.Text = "Label39" + ' + 'tbOutletAirTemp + ' + Me.tbOutletAirTemp.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbOutletAirTemp.Location = New System.Drawing.Point(151, 166) + Me.tbOutletAirTemp.Name = "tbOutletAirTemp" + Me.tbOutletAirTemp.ReadOnly = True + Me.tbOutletAirTemp.Size = New System.Drawing.Size(167, 20) + Me.tbOutletAirTemp.TabIndex = 57 + Me.tbOutletAirTemp.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label40 + ' + Me.Label40.AutoSize = True + Me.Label40.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label40.Location = New System.Drawing.Point(12, 169) + Me.Label40.Name = "Label40" + Me.Label40.Size = New System.Drawing.Size(113, 13) + Me.Label40.TabIndex = 56 + Me.Label40.Text = "Outlet Air Temperature" + ' + 'lblInletAirPressure + ' + Me.lblInletAirPressure.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblInletAirPressure.AutoSize = True + Me.lblInletAirPressure.Location = New System.Drawing.Point(324, 143) + Me.lblInletAirPressure.Name = "lblInletAirPressure" + Me.lblInletAirPressure.Size = New System.Drawing.Size(45, 13) + Me.lblInletAirPressure.TabIndex = 55 + Me.lblInletAirPressure.Text = "Label37" + ' + 'tbInletAirPre + ' + Me.tbInletAirPre.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbInletAirPre.Location = New System.Drawing.Point(151, 140) + Me.tbInletAirPre.Name = "tbInletAirPre" + Me.tbInletAirPre.Size = New System.Drawing.Size(167, 20) + Me.tbInletAirPre.TabIndex = 54 + Me.tbInletAirPre.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label38 + ' + Me.Label38.AutoSize = True + Me.Label38.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label38.Location = New System.Drawing.Point(12, 143) + Me.Label38.Name = "Label38" + Me.Label38.Size = New System.Drawing.Size(86, 13) + Me.Label38.TabIndex = 53 + Me.Label38.Text = "Inlet Air Pressure" + ' + 'lblInletAirTemperature + ' + Me.lblInletAirTemperature.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblInletAirTemperature.AutoSize = True + Me.lblInletAirTemperature.Location = New System.Drawing.Point(324, 117) + Me.lblInletAirTemperature.Name = "lblInletAirTemperature" + Me.lblInletAirTemperature.Size = New System.Drawing.Size(45, 13) + Me.lblInletAirTemperature.TabIndex = 52 + Me.lblInletAirTemperature.Text = "Label35" + ' + 'tbInletAirTemp + ' + Me.tbInletAirTemp.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbInletAirTemp.Location = New System.Drawing.Point(151, 114) + Me.tbInletAirTemp.Name = "tbInletAirTemp" + Me.tbInletAirTemp.Size = New System.Drawing.Size(167, 20) + Me.tbInletAirTemp.TabIndex = 51 + Me.tbInletAirTemp.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label36 + ' + Me.Label36.AutoSize = True + Me.Label36.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label36.Location = New System.Drawing.Point(12, 117) + Me.Label36.Name = "Label36" + Me.Label36.Size = New System.Drawing.Size(105, 13) + Me.Label36.TabIndex = 50 + Me.Label36.Text = "Inlet Air Temperature" + ' + 'lblOutletTemperature + ' + Me.lblOutletTemperature.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblOutletTemperature.AutoSize = True + Me.lblOutletTemperature.Location = New System.Drawing.Point(324, 79) + Me.lblOutletTemperature.Name = "lblOutletTemperature" + Me.lblOutletTemperature.Size = New System.Drawing.Size(39, 13) + Me.lblOutletTemperature.TabIndex = 48 + Me.lblOutletTemperature.Text = "Label9" + ' + 'lblPressureDrop + ' + Me.lblPressureDrop.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblPressureDrop.AutoSize = True + Me.lblPressureDrop.Location = New System.Drawing.Point(324, 53) + Me.lblPressureDrop.Name = "lblPressureDrop" + Me.lblPressureDrop.Size = New System.Drawing.Size(39, 13) + Me.lblPressureDrop.TabIndex = 47 + Me.lblPressureDrop.Text = "Label1" + ' + 'tbOutletTemperature + ' + Me.tbOutletTemperature.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbOutletTemperature.Location = New System.Drawing.Point(151, 76) + Me.tbOutletTemperature.Name = "tbOutletTemperature" + Me.tbOutletTemperature.Size = New System.Drawing.Size(167, 20) + Me.tbOutletTemperature.TabIndex = 44 + Me.tbOutletTemperature.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label2.Location = New System.Drawing.Point(12, 79) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(123, 13) + Me.Label2.TabIndex = 43 + Me.Label2.Text = "Outlet Fluid Temperature" + ' + 'tbPressureDrop + ' + Me.tbPressureDrop.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbPressureDrop.Location = New System.Drawing.Point(151, 50) + Me.tbPressureDrop.Name = "tbPressureDrop" + Me.tbPressureDrop.Size = New System.Drawing.Size(167, 20) + Me.tbPressureDrop.TabIndex = 42 + Me.tbPressureDrop.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label3.Location = New System.Drawing.Point(12, 53) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(99, 13) + Me.Label3.TabIndex = 41 + Me.Label3.Text = "Fluid Pressure Drop" + ' + 'cbCalcMode + ' + Me.cbCalcMode.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cbCalcMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbCalcMode.FormattingEnabled = True + Me.cbCalcMode.Items.AddRange(New Object() {"Specify Outlet Temperature", "Specify Tube Geometry", "Specify Overall UA"}) + Me.cbCalcMode.Location = New System.Drawing.Point(151, 15) + Me.cbCalcMode.Name = "cbCalcMode" + Me.cbCalcMode.Size = New System.Drawing.Size(218, 21) + Me.cbCalcMode.TabIndex = 40 + ' + 'Label8 + ' + Me.Label8.AutoSize = True + Me.Label8.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label8.Location = New System.Drawing.Point(12, 19) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(86, 13) + Me.Label8.TabIndex = 39 + Me.Label8.Text = "Calculation Type" + ' + 'TabPage2 + ' + Me.TabPage2.Controls.Add(Me.lbuTubeThermalCond) + Me.TabPage2.Controls.Add(Me.tbTubeThermalCond) + Me.TabPage2.Controls.Add(Me.tbTubeDi) + Me.TabPage2.Controls.Add(Me.Label5) + Me.TabPage2.Controls.Add(Me.Label32) + Me.TabPage2.Controls.Add(Me.lbTubeRoughness) + Me.TabPage2.Controls.Add(Me.lbuTubeDi) + Me.TabPage2.Controls.Add(Me.tbTubeRoughness) + Me.TabPage2.Controls.Add(Me.Label30) + Me.TabPage2.Controls.Add(Me.Label4) + Me.TabPage2.Controls.Add(Me.tbTubeDe) + Me.TabPage2.Controls.Add(Me.lbuTubePitch) + Me.TabPage2.Controls.Add(Me.lbTubeDe) + Me.TabPage2.Controls.Add(Me.tbTubePitch) + Me.TabPage2.Controls.Add(Me.Label28) + Me.TabPage2.Controls.Add(Me.Label20) + Me.TabPage2.Controls.Add(Me.tbTubeLength) + Me.TabPage2.Controls.Add(Me.tbNumberOfTubesPerShell) + Me.TabPage2.Controls.Add(Me.lbuTubeLength) + Me.TabPage2.Controls.Add(Me.Label22) + Me.TabPage2.Controls.Add(Me.Label26) + Me.TabPage2.Controls.Add(Me.tbTubePassesPerShell) + Me.TabPage2.Controls.Add(Me.tbTubeFoulingFactor) + Me.TabPage2.Controls.Add(Me.Label24) + Me.TabPage2.Controls.Add(Me.lbuTubeFoulingFactor) + Me.TabPage2.Location = New System.Drawing.Point(4, 22) + Me.TabPage2.Name = "TabPage2" + Me.TabPage2.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage2.Size = New System.Drawing.Size(389, 316) + Me.TabPage2.TabIndex = 1 + Me.TabPage2.Text = "Tubes" + Me.TabPage2.UseVisualStyleBackColor = True + ' + 'lbuTubeThermalCond + ' + Me.lbuTubeThermalCond.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lbuTubeThermalCond.AutoSize = True + Me.lbuTubeThermalCond.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lbuTubeThermalCond.Location = New System.Drawing.Point(311, 146) + Me.lbuTubeThermalCond.Name = "lbuTubeThermalCond" + Me.lbuTubeThermalCond.Size = New System.Drawing.Size(45, 13) + Me.lbuTubeThermalCond.TabIndex = 60 + Me.lbuTubeThermalCond.Text = "Label31" + ' + 'tbTubeThermalCond + ' + Me.tbTubeThermalCond.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubeThermalCond.Location = New System.Drawing.Point(161, 143) + Me.tbTubeThermalCond.Name = "tbTubeThermalCond" + Me.tbTubeThermalCond.Size = New System.Drawing.Size(144, 20) + Me.tbTubeThermalCond.TabIndex = 59 + Me.tbTubeThermalCond.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'tbTubeDi + ' + Me.tbTubeDi.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubeDi.Location = New System.Drawing.Point(161, 13) + Me.tbTubeDi.Name = "tbTubeDi" + Me.tbTubeDi.Size = New System.Drawing.Size(144, 20) + Me.tbTubeDi.TabIndex = 26 + Me.tbTubeDi.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label5.Location = New System.Drawing.Point(14, 146) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(106, 13) + Me.Label5.TabIndex = 58 + Me.Label5.Text = "Thermal Conductivity" + ' + 'Label32 + ' + Me.Label32.AutoSize = True + Me.Label32.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label32.Location = New System.Drawing.Point(13, 16) + Me.Label32.Name = "Label32" + Me.Label32.Size = New System.Drawing.Size(87, 13) + Me.Label32.TabIndex = 25 + Me.Label32.Text = "Internal Diameter" + ' + 'lbTubeRoughness + ' + Me.lbTubeRoughness.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lbTubeRoughness.AutoSize = True + Me.lbTubeRoughness.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lbTubeRoughness.Location = New System.Drawing.Point(312, 120) + Me.lbTubeRoughness.Name = "lbTubeRoughness" + Me.lbTubeRoughness.Size = New System.Drawing.Size(45, 13) + Me.lbTubeRoughness.TabIndex = 54 + Me.lbTubeRoughness.Text = "Label31" + ' + 'lbuTubeDi + ' + Me.lbuTubeDi.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lbuTubeDi.AutoSize = True + Me.lbuTubeDi.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lbuTubeDi.Location = New System.Drawing.Point(311, 16) + Me.lbuTubeDi.Name = "lbuTubeDi" + Me.lbuTubeDi.Size = New System.Drawing.Size(45, 13) + Me.lbuTubeDi.TabIndex = 28 + Me.lbuTubeDi.Text = "Label31" + ' + 'tbTubeRoughness + ' + Me.tbTubeRoughness.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubeRoughness.Location = New System.Drawing.Point(161, 117) + Me.tbTubeRoughness.Name = "tbTubeRoughness" + Me.tbTubeRoughness.Size = New System.Drawing.Size(144, 20) + Me.tbTubeRoughness.TabIndex = 53 + Me.tbTubeRoughness.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label30 + ' + Me.Label30.AutoSize = True + Me.Label30.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label30.Location = New System.Drawing.Point(13, 42) + Me.Label30.Name = "Label30" + Me.Label30.Size = New System.Drawing.Size(90, 13) + Me.Label30.TabIndex = 29 + Me.Label30.Text = "External Diameter" + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label4.Location = New System.Drawing.Point(13, 120) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(61, 13) + Me.Label4.TabIndex = 52 + Me.Label4.Text = "Roughness" + ' + 'tbTubeDe + ' + Me.tbTubeDe.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubeDe.Location = New System.Drawing.Point(161, 39) + Me.tbTubeDe.Name = "tbTubeDe" + Me.tbTubeDe.Size = New System.Drawing.Size(144, 20) + Me.tbTubeDe.TabIndex = 30 + Me.tbTubeDe.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'lbuTubePitch + ' + Me.lbuTubePitch.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lbuTubePitch.AutoSize = True + Me.lbuTubePitch.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lbuTubePitch.Location = New System.Drawing.Point(311, 224) + Me.lbuTubePitch.Name = "lbuTubePitch" + Me.lbuTubePitch.Size = New System.Drawing.Size(45, 13) + Me.lbuTubePitch.TabIndex = 51 + Me.lbuTubePitch.Text = "Label19" + ' + 'lbTubeDe + ' + Me.lbTubeDe.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lbTubeDe.AutoSize = True + Me.lbTubeDe.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lbTubeDe.Location = New System.Drawing.Point(311, 42) + Me.lbTubeDe.Name = "lbTubeDe" + Me.lbTubeDe.Size = New System.Drawing.Size(45, 13) + Me.lbTubeDe.TabIndex = 31 + Me.lbTubeDe.Text = "Label29" + ' + 'tbTubePitch + ' + Me.tbTubePitch.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubePitch.Location = New System.Drawing.Point(161, 221) + Me.tbTubePitch.Name = "tbTubePitch" + Me.tbTubePitch.Size = New System.Drawing.Size(144, 20) + Me.tbTubePitch.TabIndex = 50 + Me.tbTubePitch.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label28 + ' + Me.Label28.AutoSize = True + Me.Label28.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label28.Location = New System.Drawing.Point(13, 68) + Me.Label28.Name = "Label28" + Me.Label28.Size = New System.Drawing.Size(40, 13) + Me.Label28.TabIndex = 32 + Me.Label28.Text = "Length" + ' + 'Label20 + ' + Me.Label20.AutoSize = True + Me.Label20.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label20.Location = New System.Drawing.Point(13, 224) + Me.Label20.Name = "Label20" + Me.Label20.Size = New System.Drawing.Size(74, 13) + Me.Label20.TabIndex = 49 + Me.Label20.Text = "Tube Spacing" + ' + 'tbTubeLength + ' + Me.tbTubeLength.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubeLength.Location = New System.Drawing.Point(161, 65) + Me.tbTubeLength.Name = "tbTubeLength" + Me.tbTubeLength.Size = New System.Drawing.Size(144, 20) + Me.tbTubeLength.TabIndex = 33 + Me.tbTubeLength.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'tbNumberOfTubesPerShell + ' + Me.tbNumberOfTubesPerShell.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbNumberOfTubesPerShell.Location = New System.Drawing.Point(161, 195) + Me.tbNumberOfTubesPerShell.Name = "tbNumberOfTubesPerShell" + Me.tbNumberOfTubesPerShell.Size = New System.Drawing.Size(144, 20) + Me.tbNumberOfTubesPerShell.TabIndex = 42 + Me.tbNumberOfTubesPerShell.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'lbuTubeLength + ' + Me.lbuTubeLength.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lbuTubeLength.AutoSize = True + Me.lbuTubeLength.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lbuTubeLength.Location = New System.Drawing.Point(311, 68) + Me.lbuTubeLength.Name = "lbuTubeLength" + Me.lbuTubeLength.Size = New System.Drawing.Size(45, 13) + Me.lbuTubeLength.TabIndex = 34 + Me.lbuTubeLength.Text = "Label27" + ' + 'Label22 + ' + Me.Label22.AutoSize = True + Me.Label22.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label22.Location = New System.Drawing.Point(13, 198) + Me.Label22.Name = "Label22" + Me.Label22.Size = New System.Drawing.Size(89, 13) + Me.Label22.TabIndex = 41 + Me.Label22.Text = "Number of Tubes" + ' + 'Label26 + ' + Me.Label26.AutoSize = True + Me.Label26.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label26.Location = New System.Drawing.Point(13, 94) + Me.Label26.Name = "Label26" + Me.Label26.Size = New System.Drawing.Size(74, 13) + Me.Label26.TabIndex = 35 + Me.Label26.Text = "Fouling Factor" + ' + 'tbTubePassesPerShell + ' + Me.tbTubePassesPerShell.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubePassesPerShell.Location = New System.Drawing.Point(161, 169) + Me.tbTubePassesPerShell.Name = "tbTubePassesPerShell" + Me.tbTubePassesPerShell.Size = New System.Drawing.Size(144, 20) + Me.tbTubePassesPerShell.TabIndex = 39 + Me.tbTubePassesPerShell.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'tbTubeFoulingFactor + ' + Me.tbTubeFoulingFactor.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbTubeFoulingFactor.Location = New System.Drawing.Point(161, 91) + Me.tbTubeFoulingFactor.Name = "tbTubeFoulingFactor" + Me.tbTubeFoulingFactor.Size = New System.Drawing.Size(144, 20) + Me.tbTubeFoulingFactor.TabIndex = 36 + Me.tbTubeFoulingFactor.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label24 + ' + Me.Label24.AutoSize = True + Me.Label24.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label24.Location = New System.Drawing.Point(13, 172) + Me.Label24.Name = "Label24" + Me.Label24.Size = New System.Drawing.Size(93, 13) + Me.Label24.TabIndex = 38 + Me.Label24.Text = "Number of Passes" + ' + 'lbuTubeFoulingFactor + ' + Me.lbuTubeFoulingFactor.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lbuTubeFoulingFactor.AutoSize = True + Me.lbuTubeFoulingFactor.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.lbuTubeFoulingFactor.Location = New System.Drawing.Point(311, 94) + Me.lbuTubeFoulingFactor.Name = "lbuTubeFoulingFactor" + Me.lbuTubeFoulingFactor.Size = New System.Drawing.Size(45, 13) + Me.lbuTubeFoulingFactor.TabIndex = 37 + Me.lbuTubeFoulingFactor.Text = "Label25" + ' + 'TabPage3 + ' + Me.TabPage3.Controls.Add(Me.lblElectricalLoad) + Me.TabPage3.Controls.Add(Me.tbElecLoad) + Me.TabPage3.Controls.Add(Me.Label34) + Me.TabPage3.Controls.Add(Me.Label29) + Me.TabPage3.Controls.Add(Me.tbElecConv) + Me.TabPage3.Controls.Add(Me.Label31) + Me.TabPage3.Controls.Add(Me.lblActualAirFlow) + Me.TabPage3.Controls.Add(Me.tbActualAF) + Me.TabPage3.Controls.Add(Me.Label27) + Me.TabPage3.Controls.Add(Me.Label21) + Me.TabPage3.Controls.Add(Me.tbActualR) + Me.TabPage3.Controls.Add(Me.Label23) + Me.TabPage3.Controls.Add(Me.lblRefAirFlow) + Me.TabPage3.Controls.Add(Me.tbRefAF) + Me.TabPage3.Controls.Add(Me.Label18) + Me.TabPage3.Controls.Add(Me.Label15) + Me.TabPage3.Controls.Add(Me.tbRefR) + Me.TabPage3.Controls.Add(Me.Label16) + Me.TabPage3.Location = New System.Drawing.Point(4, 22) + Me.TabPage3.Name = "TabPage3" + Me.TabPage3.Size = New System.Drawing.Size(389, 316) + Me.TabPage3.TabIndex = 2 + Me.TabPage3.Text = "Fan" + Me.TabPage3.UseVisualStyleBackColor = True + ' + 'lblElectricalLoad + ' + Me.lblElectricalLoad.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblElectricalLoad.AutoSize = True + Me.lblElectricalLoad.Location = New System.Drawing.Point(326, 146) + Me.lblElectricalLoad.Name = "lblElectricalLoad" + Me.lblElectricalLoad.Size = New System.Drawing.Size(45, 13) + Me.lblElectricalLoad.TabIndex = 67 + Me.lblElectricalLoad.Text = "Label33" + ' + 'tbElecLoad + ' + Me.tbElecLoad.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbElecLoad.Location = New System.Drawing.Point(151, 143) + Me.tbElecLoad.Name = "tbElecLoad" + Me.tbElecLoad.ReadOnly = True + Me.tbElecLoad.Size = New System.Drawing.Size(167, 20) + Me.tbElecLoad.TabIndex = 66 + Me.tbElecLoad.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label34 + ' + Me.Label34.AutoSize = True + Me.Label34.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label34.Location = New System.Drawing.Point(12, 146) + Me.Label34.Name = "Label34" + Me.Label34.Size = New System.Drawing.Size(110, 13) + Me.Label34.TabIndex = 65 + Me.Label34.Text = "Electrical Power Load" + ' + 'Label29 + ' + Me.Label29.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label29.AutoSize = True + Me.Label29.Location = New System.Drawing.Point(326, 120) + Me.Label29.Name = "Label29" + Me.Label29.Size = New System.Drawing.Size(46, 13) + Me.Label29.TabIndex = 64 + Me.Label29.Text = "kW/rpm" + ' + 'tbElecConv + ' + Me.tbElecConv.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbElecConv.Location = New System.Drawing.Point(190, 117) + Me.tbElecConv.Name = "tbElecConv" + Me.tbElecConv.Size = New System.Drawing.Size(128, 20) + Me.tbElecConv.TabIndex = 63 + Me.tbElecConv.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label31 + ' + Me.Label31.AutoSize = True + Me.Label31.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label31.Location = New System.Drawing.Point(12, 120) + Me.Label31.Name = "Label31" + Me.Label31.Size = New System.Drawing.Size(172, 13) + Me.Label31.TabIndex = 62 + Me.Label31.Text = "Electrical Power Conversion Factor" + ' + 'lblActualAirFlow + ' + Me.lblActualAirFlow.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblActualAirFlow.AutoSize = True + Me.lblActualAirFlow.Location = New System.Drawing.Point(326, 94) + Me.lblActualAirFlow.Name = "lblActualAirFlow" + Me.lblActualAirFlow.Size = New System.Drawing.Size(45, 13) + Me.lblActualAirFlow.TabIndex = 61 + Me.lblActualAirFlow.Text = "Label25" + ' + 'tbActualAF + ' + Me.tbActualAF.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbActualAF.Location = New System.Drawing.Point(151, 91) + Me.tbActualAF.Name = "tbActualAF" + Me.tbActualAF.ReadOnly = True + Me.tbActualAF.Size = New System.Drawing.Size(167, 20) + Me.tbActualAF.TabIndex = 60 + Me.tbActualAF.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label27 + ' + Me.Label27.AutoSize = True + Me.Label27.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label27.Location = New System.Drawing.Point(12, 94) + Me.Label27.Name = "Label27" + Me.Label27.Size = New System.Drawing.Size(77, 13) + Me.Label27.TabIndex = 59 + Me.Label27.Text = "Actual Air Flow" + ' + 'Label21 + ' + Me.Label21.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label21.AutoSize = True + Me.Label21.Location = New System.Drawing.Point(326, 68) + Me.Label21.Name = "Label21" + Me.Label21.Size = New System.Drawing.Size(24, 13) + Me.Label21.TabIndex = 58 + Me.Label21.Text = "rpm" + ' + 'tbActualR + ' + Me.tbActualR.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbActualR.Location = New System.Drawing.Point(151, 65) + Me.tbActualR.Name = "tbActualR" + Me.tbActualR.Size = New System.Drawing.Size(167, 20) + Me.tbActualR.TabIndex = 57 + Me.tbActualR.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label23.Location = New System.Drawing.Point(12, 68) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(80, 13) + Me.Label23.TabIndex = 56 + Me.Label23.Text = "Actual Rotation" + ' + 'lblRefAirFlow + ' + Me.lblRefAirFlow.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblRefAirFlow.AutoSize = True + Me.lblRefAirFlow.Location = New System.Drawing.Point(326, 42) + Me.lblRefAirFlow.Name = "lblRefAirFlow" + Me.lblRefAirFlow.Size = New System.Drawing.Size(45, 13) + Me.lblRefAirFlow.TabIndex = 55 + Me.lblRefAirFlow.Text = "Label17" + ' + 'tbRefAF + ' + Me.tbRefAF.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbRefAF.Location = New System.Drawing.Point(151, 39) + Me.tbRefAF.Name = "tbRefAF" + Me.tbRefAF.Size = New System.Drawing.Size(167, 20) + Me.tbRefAF.TabIndex = 54 + Me.tbRefAF.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label18.Location = New System.Drawing.Point(12, 42) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(97, 13) + Me.Label18.TabIndex = 53 + Me.Label18.Text = "Reference Air Flow" + ' + 'Label15 + ' + Me.Label15.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label15.AutoSize = True + Me.Label15.Location = New System.Drawing.Point(326, 18) + Me.Label15.Name = "Label15" + Me.Label15.Size = New System.Drawing.Size(24, 13) + Me.Label15.TabIndex = 52 + Me.Label15.Text = "rpm" + ' + 'tbRefR + ' + Me.tbRefR.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.tbRefR.Location = New System.Drawing.Point(151, 13) + Me.tbRefR.Name = "tbRefR" + Me.tbRefR.Size = New System.Drawing.Size(167, 20) + Me.tbRefR.TabIndex = 51 + Me.tbRefR.TextAlign = System.Windows.Forms.HorizontalAlignment.Right + ' + 'Label16 + ' + Me.Label16.AutoSize = True + Me.Label16.ImeMode = System.Windows.Forms.ImeMode.NoControl + Me.Label16.Location = New System.Drawing.Point(12, 16) + Me.Label16.Name = "Label16" + Me.Label16.Size = New System.Drawing.Size(100, 13) + Me.Label16.TabIndex = 50 + Me.Label16.Text = "Reference Rotation" + ' + 'ToolTipChangeTag + ' + Me.ToolTipChangeTag.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info + Me.ToolTipChangeTag.ToolTipTitle = "Info" + ' + 'EditingForm_AirCooler + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.ClientSize = New System.Drawing.Size(418, 750) + Me.Controls.Add(Me.GroupBox2) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.GroupBox5) + Me.Controls.Add(Me.GroupBox4) + Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Name = "EditingForm_AirCooler" + Me.Text = "EditingForm_AirCooler" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox4.ResumeLayout(False) + Me.GroupBox2.ResumeLayout(False) + Me.TabControl1.ResumeLayout(False) + Me.TabPage1.ResumeLayout(False) + Me.TabPage1.PerformLayout() + Me.TabPage2.ResumeLayout(False) + Me.TabPage2.PerformLayout() + Me.TabPage3.ResumeLayout(False) + Me.TabPage3.PerformLayout() + Me.ResumeLayout(False) + + End Sub + + Public WithEvents GroupBox1 As Windows.Forms.GroupBox + Public WithEvents btnCreateAndConnectEnergy As Windows.Forms.Button + Public WithEvents btnDisconnectEnergy As Windows.Forms.Button + Public WithEvents btnCreateAndConnectOutlet1 As Windows.Forms.Button + Public WithEvents Label14 As Windows.Forms.Label + Public WithEvents btnCreateAndConnectInlet1 As Windows.Forms.Button + Public WithEvents cbEnergy As Windows.Forms.ComboBox + Public WithEvents btnDisconnectOutlet1 As Windows.Forms.Button + Public WithEvents btnDisconnect1 As Windows.Forms.Button + Public WithEvents Label7 As Windows.Forms.Label + Public WithEvents cbOutlet1 As Windows.Forms.ComboBox + Public WithEvents cbInlet1 As Windows.Forms.ComboBox + Public WithEvents Label19 As Windows.Forms.Label + Public WithEvents GroupBox5 As Windows.Forms.GroupBox + Public WithEvents lblTag As Windows.Forms.TextBox + Public WithEvents chkActive As Windows.Forms.CheckBox + Public WithEvents lblConnectedTo As Windows.Forms.Label + Public WithEvents lblStatus As Windows.Forms.Label + Public WithEvents Label13 As Windows.Forms.Label + Public WithEvents Label12 As Windows.Forms.Label + Public WithEvents Label11 As Windows.Forms.Label + Public WithEvents GroupBox4 As Windows.Forms.GroupBox + Public WithEvents rtbAnnotations As Extended.Windows.Forms.RichTextBoxExtended + Friend WithEvents GroupBox2 As Windows.Forms.GroupBox + Friend WithEvents TabControl1 As Windows.Forms.TabControl + Friend WithEvents TabPage1 As Windows.Forms.TabPage + Friend WithEvents TabPage2 As Windows.Forms.TabPage + Friend WithEvents TabPage3 As Windows.Forms.TabPage + Public WithEvents tbOutletTemperature As Windows.Forms.TextBox + Public WithEvents Label2 As Windows.Forms.Label + Public WithEvents tbPressureDrop As Windows.Forms.TextBox + Public WithEvents Label3 As Windows.Forms.Label + Public WithEvents cbCalcMode As Windows.Forms.ComboBox + Public WithEvents Label8 As Windows.Forms.Label + Public WithEvents lbuTubeThermalCond As Windows.Forms.Label + Public WithEvents tbTubeThermalCond As Windows.Forms.TextBox + Public WithEvents tbTubeDi As Windows.Forms.TextBox + Public WithEvents Label5 As Windows.Forms.Label + Public WithEvents Label32 As Windows.Forms.Label + Public WithEvents lbTubeRoughness As Windows.Forms.Label + Public WithEvents lbuTubeDi As Windows.Forms.Label + Public WithEvents tbTubeRoughness As Windows.Forms.TextBox + Public WithEvents Label30 As Windows.Forms.Label + Public WithEvents Label4 As Windows.Forms.Label + Public WithEvents tbTubeDe As Windows.Forms.TextBox + Public WithEvents lbuTubePitch As Windows.Forms.Label + Public WithEvents lbTubeDe As Windows.Forms.Label + Public WithEvents tbTubePitch As Windows.Forms.TextBox + Public WithEvents Label28 As Windows.Forms.Label + Public WithEvents Label20 As Windows.Forms.Label + Public WithEvents tbTubeLength As Windows.Forms.TextBox + Public WithEvents tbNumberOfTubesPerShell As Windows.Forms.TextBox + Public WithEvents lbuTubeLength As Windows.Forms.Label + Public WithEvents Label22 As Windows.Forms.Label + Public WithEvents Label26 As Windows.Forms.Label + Public WithEvents tbTubePassesPerShell As Windows.Forms.TextBox + Public WithEvents tbTubeFoulingFactor As Windows.Forms.TextBox + Public WithEvents Label24 As Windows.Forms.Label + Public WithEvents lbuTubeFoulingFactor As Windows.Forms.Label + Friend WithEvents lblOutletTemperature As Windows.Forms.Label + Friend WithEvents lblPressureDrop As Windows.Forms.Label + Friend WithEvents lblActualAirFlow As Windows.Forms.Label + Public WithEvents tbActualAF As Windows.Forms.TextBox + Public WithEvents Label27 As Windows.Forms.Label + Friend WithEvents Label21 As Windows.Forms.Label + Public WithEvents tbActualR As Windows.Forms.TextBox + Public WithEvents Label23 As Windows.Forms.Label + Friend WithEvents lblRefAirFlow As Windows.Forms.Label + Public WithEvents tbRefAF As Windows.Forms.TextBox + Public WithEvents Label18 As Windows.Forms.Label + Friend WithEvents Label15 As Windows.Forms.Label + Public WithEvents tbRefR As Windows.Forms.TextBox + Public WithEvents Label16 As Windows.Forms.Label + Friend WithEvents Label29 As Windows.Forms.Label + Public WithEvents tbElecConv As Windows.Forms.TextBox + Public WithEvents Label31 As Windows.Forms.Label + Friend WithEvents lblElectricalLoad As Windows.Forms.Label + Public WithEvents tbElecLoad As Windows.Forms.TextBox + Public WithEvents Label34 As Windows.Forms.Label + Friend WithEvents lblOutletAirTemperature As Windows.Forms.Label + Public WithEvents tbOutletAirTemp As Windows.Forms.TextBox + Public WithEvents Label40 As Windows.Forms.Label + Friend WithEvents lblInletAirPressure As Windows.Forms.Label + Public WithEvents tbInletAirPre As Windows.Forms.TextBox + Public WithEvents Label38 As Windows.Forms.Label + Friend WithEvents lblInletAirTemperature As Windows.Forms.Label + Public WithEvents tbInletAirTemp As Windows.Forms.TextBox + Public WithEvents Label36 As Windows.Forms.Label + Friend WithEvents lblMaximumHeatExchange As Windows.Forms.Label + Public WithEvents tbMaxHeatEx As Windows.Forms.TextBox + Public WithEvents Label42 As Windows.Forms.Label + Friend WithEvents lblHeatExchanged As Windows.Forms.Label + Public WithEvents tbHeatingChange As Windows.Forms.TextBox + Public WithEvents Label6 As Windows.Forms.Label + Friend WithEvents Label43 As Windows.Forms.Label + Public WithEvents tbOverallUA As Windows.Forms.TextBox + Public WithEvents Label44 As Windows.Forms.Label + Friend WithEvents Label1 As Windows.Forms.Label + Public WithEvents tbEff As Windows.Forms.TextBox + Public WithEvents Label9 As Windows.Forms.Label + Friend WithEvents ToolTipChangeTag As Windows.Forms.ToolTip +End Class diff --git a/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.resx b/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.resx new file mode 100644 index 000000000..d84d0aad1 --- /dev/null +++ b/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.resx @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + wQAAHsEBw2lUUwAAAAd0SU1FB9cJGwwnHfk+EwAAAAGHSURBVDhPYxiG4O15h8ZXp+3+vzxp8//lcev/ + zw9b/n92wOz/kz0m/5/sMnoDVYYdfLniKPL2ou/Vn68m///2sPz/19tF/7/cqvr/6Vrd/+cHXF483mFo + BVWKHbw5Yxv59UH1z28P8v9/uuj8/wPQFZ+uVvx/fsjv/5MdBnZQZbjB24tBq78/7fn/+Yrr/w9n7P5/ + vlb8/92Z1M9Pd1nHQJXgBkD/Kn64mvLn693c/x/PO/9/f8wa6PwuoM0Wz+6v1553d7XG1NvLVafeWqzc + A9WCCl4csXr55V7D/++PJ/7/er8H6P+u/1+ud/z/eLEJ6Jqa/2+OFPy/t8rox415CspQLajg+SGLCU/3 + m059stt46uPtBkteH0/4/PZgwP+3h5P/P9nq8evuCq0pd5coq0KV4wcPNmgbvD4a//Plwbj/D9db3r67 + QtP9/zFNZqg0fvD/fxDjg42GD57ucP9wZ7na3jtLVbihUsSBe2s0s+6u1rx+d6WGD1SINHBnhboOlDkk + AAMDAByV2EYm9P51AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALISURBVDhPfZJbTFJxHMfZcm6++tQTb61aLVfpkoaX + lrVpxbIyzSHaxWs2xZg51C6SgoqdEkkw5EzFW+TRTMQEEYehzWu1JpIt07w1W72kRQ/fzjkbPRj18Plv + Zzuf//f8vr/DAfBfHju/+Rkc61z9wBpPbVoSVFIfJHdaZz35+jfmzJpxf5+Sl9bhrwENtnVnvWUFtb2f + UN09D4JyQ2Oag5ScQnyZw+xT9EKn5hvsq+gaXUO7YwmNAx+h7Z1DhfEtSgzTiMo3eXyKDHV9y/7E04XN + tqEVkP3zqHziQknza9yon8TdllcQltkQltkh8Sl7oWctVRhnUdPtRnWXC3naMWTcH0aBbhQxed04lNgo + +EtqsNOF6fU6rVZLMs+pxEgRPetmTu1LFJFjuFBqxdVqB8Ivt2D/KQ3vj9js+BJA2j531nVO/jCbzbBa + rVAqlewl9Kz8yGvUhlBmQTphR0qFBQdPa7HnKMH1pvrpLCvuJrqwpsElVNSbflEUBZlMRkql0m1isTiQ + l9zKD44nN07mdSAiuRG7j9xz74xQ+LEXaPqWuaqeRXQ4V9FiXwTR9Q7iqp6fSYqhcFom09PTXSKRaHtQ + jJpPp37fdaSyc0d4WQDjshcoqXmeknoPg20B5UYXap7NsntOKGjyqFQqtLe3Iy4uziUQCALpVC7jeGGP + W80zgpKWGXbHxQ3TuF43Ru95ChLtCBKyyyGXy0HLbB9bYY9czaSkiBYJagZM22mEA0LFAK4o7biosIIf + K/OEnihmP3krnCz1hH+K0umR0T9HITmOQv0Ym5xNryq1yoZjmW3YF12T70tm4CQqhj0Z1U7cbpxA7sMX + OFvYi+NZRoSJmhByRoe9UQ+cdOM+0xk4MUX9ZqF8EOdvPsfhS62ekHhSciD2kSAoWs1j9kw37udL9MKJ + zOkK4KcZzaFJBk/wOb2/r5f+DTi/AcFGp9AV5agvAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + wQAAHsEBw2lUUwAAAAd0SU1FB9cJGwwnHfk+EwAAAAGHSURBVDhPYxiG4O15h8ZXp+3+vzxp8//lcev/ + zw9b/n92wOz/kz0m/5/sMnoDVYYdfLniKPL2ou/Vn68m///2sPz/19tF/7/cqvr/6Vrd/+cHXF483mFo + BVWKHbw5Yxv59UH1z28P8v9/uuj8/wPQFZ+uVvx/fsjv/5MdBnZQZbjB24tBq78/7fn/+Yrr/w9n7P5/ + vlb8/92Z1M9Pd1nHQJXgBkD/Kn64mvLn693c/x/PO/9/f8wa6PwuoM0Wz+6v1553d7XG1NvLVafeWqzc + A9WCCl4csXr55V7D/++PJ/7/er8H6P+u/1+ud/z/eLEJ6Jqa/2+OFPy/t8rox415CspQLajg+SGLCU/3 + m059stt46uPtBkteH0/4/PZgwP+3h5P/P9nq8evuCq0pd5coq0KV4wcPNmgbvD4a//Plwbj/D9db3r67 + QtP9/zFNZqg0fvD/fxDjg42GD57ucP9wZ7na3jtLVbihUsSBe2s0s+6u1rx+d6WGD1SINHBnhboOlDkk + AAMDAByV2EYm9P51AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + wQAAHsEBw2lUUwAAAAd0SU1FB9cJGwwnHfk+EwAAAAGHSURBVDhPYxiG4O15h8ZXp+3+vzxp8//lcev/ + zw9b/n92wOz/kz0m/5/sMnoDVYYdfLniKPL2ou/Vn68m///2sPz/19tF/7/cqvr/6Vrd/+cHXF483mFo + BVWKHbw5Yxv59UH1z28P8v9/uuj8/wPQFZ+uVvx/fsjv/5MdBnZQZbjB24tBq78/7fn/+Yrr/w9n7P5/ + vlb8/92Z1M9Pd1nHQJXgBkD/Kn64mvLn693c/x/PO/9/f8wa6PwuoM0Wz+6v1553d7XG1NvLVafeWqzc + A9WCCl4csXr55V7D/++PJ/7/er8H6P+u/1+ud/z/eLEJ6Jqa/2+OFPy/t8rox415CspQLajg+SGLCU/3 + m059stt46uPtBkteH0/4/PZgwP+3h5P/P9nq8evuCq0pd5coq0KV4wcPNmgbvD4a//Plwbj/D9db3r67 + QtP9/zFNZqg0fvD/fxDjg42GD57ucP9wZ7na3jtLVbihUsSBe2s0s+6u1rx+d6WGD1SINHBnhboOlDkk + AAMDAByV2EYm9P51AAAAAElFTkSuQmCC + + + + + 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 + + + + 145, 17 + + \ No newline at end of file diff --git a/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.vb b/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.vb new file mode 100644 index 000000000..c5de6597c --- /dev/null +++ b/DWSIM.UnitOperations/EditingForms/EditingForm_AirCooler.vb @@ -0,0 +1,455 @@ +Imports cv = DWSIM.SharedClasses.SystemsOfUnits.Converter +Imports DWSIM.ExtensionMethods +Imports DWSIM.Inspector +Imports System.Windows.Forms +Imports DWSIM.Interfaces.Enums.GraphicObjects + +Public Class EditingForm_AirCooler + + Inherits SharedClasses.ObjectEditorForm + + Public Property SimObject As AirCooler + + Public Loaded As Boolean = False + + Dim units As SharedClasses.SystemsOfUnits.Units + Dim nf As String + + Private Sub EditingForm_AirCooler_Load(sender As Object, e As EventArgs) Handles MyBase.Load + + Me.ShowHint = GlobalSettings.Settings.DefaultEditFormLocation + + UpdateInfo() + + End Sub + + Sub UpdateInfo() + + Loaded = False + + nf = SimObject.FlowSheet.FlowsheetOptions.NumberFormat + + If Host.Items.Where(Function(x) x.Name.Contains(SimObject.GraphicObject.Tag)).Count > 0 Then + If InspReportBar Is Nothing Then + InspReportBar = New SharedClasses.InspectorReportBar + InspReportBar.Dock = DockStyle.Bottom + AddHandler InspReportBar.Button1.Click, Sub() + Dim iwindow As New Inspector.Window2 + iwindow.SelectedObject = SimObject + iwindow.Show(DockPanel) + End Sub + Me.Controls.Add(InspReportBar) + InspReportBar.BringToFront() + End If + Else + If InspReportBar IsNot Nothing Then + Me.Controls.Remove(InspReportBar) + InspReportBar = Nothing + End If + End If + + cbCalcMode.SelectedIndex = SimObject.CalculationMode + + Select Case cbCalcMode.SelectedIndex + Case 0 + TabPage2.Enabled = False + TabPage3.Enabled = True + tbPressureDrop.ReadOnly = False + tbOverallUA.ReadOnly = True + tbOutletTemperature.ReadOnly = False + Case 1 + TabPage2.Enabled = True + TabPage3.Enabled = True + tbPressureDrop.ReadOnly = True + tbOverallUA.ReadOnly = True + tbOutletTemperature.ReadOnly = True + Case 2 + TabPage2.Enabled = False + TabPage3.Enabled = True + tbPressureDrop.ReadOnly = False + tbOverallUA.ReadOnly = False + tbOutletTemperature.ReadOnly = True + End Select + + Dim su = SimObject.FlowSheet.FlowsheetOptions.SelectedUnitSystem + + lbTubeDe.Text = su.diameter + lbuTubeDi.Text = su.diameter + lbTubeRoughness.Text = su.diameter + lbuTubeFoulingFactor.Text = su.foulingfactor + lbuTubeLength.Text = su.distance + lbuTubePitch.Text = su.thickness + lbuTubeThermalCond.Text = su.thermalConductivity + + lblActualAirFlow.Text = su.volumetricFlow + lblElectricalLoad.Text = su.heatflow + lblHeatExchanged.Text = su.heatflow + lblInletAirPressure.Text = su.pressure + lblInletAirTemperature.Text = su.temperature + lblMaximumHeatExchange.Text = su.heatflow + lblOutletAirTemperature.Text = su.temperature + lblOutletTemperature.Text = su.temperature + lblPressureDrop.Text = su.deltaP + lblRefAirFlow.Text = su.volumetricFlow + + With SimObject + + 'first block + + chkActive.Checked = .GraphicObject.Active + + Me.Text = .GraphicObject.Tag & " (" & .GetDisplayName() & ")" + + lblTag.Text = .GraphicObject.Tag + If .Calculated Then + lblStatus.Text = .FlowSheet.GetTranslatedString("Calculado") & " (" & .LastUpdated.ToString & ")" + lblStatus.ForeColor = System.Drawing.Color.Blue + Else + If Not .GraphicObject.Active Then + lblStatus.Text = .FlowSheet.GetTranslatedString("Inativo") + lblStatus.ForeColor = System.Drawing.Color.Gray + ElseIf .ErrorMessage <> "" Then + If .ErrorMessage.Length > 50 Then + lblStatus.Text = .FlowSheet.GetTranslatedString("Erro") & " (" & .ErrorMessage.Substring(50) & "...)" + Else + lblStatus.Text = .FlowSheet.GetTranslatedString("Erro") & " (" & .ErrorMessage & ")" + End If + lblStatus.ForeColor = System.Drawing.Color.Red + Else + lblStatus.Text = .FlowSheet.GetTranslatedString("NoCalculado") + lblStatus.ForeColor = System.Drawing.Color.Black + End If + End If + + lblConnectedTo.Text = "" + + If .IsSpecAttached Then lblConnectedTo.Text = .FlowSheet.SimulationObjects(.AttachedSpecId).GraphicObject.Tag + If .IsAdjustAttached Then lblConnectedTo.Text = .FlowSheet.SimulationObjects(.AttachedAdjustId).GraphicObject.Tag + + 'connections + + Dim mslist As String() = .FlowSheet.GraphicObjects.Values.Where(Function(x) x.ObjectType = ObjectType.MaterialStream).Select(Function(m) m.Tag).ToArray + + cbInlet1.Items.Clear() + cbInlet1.Items.AddRange(mslist) + + cbOutlet1.Items.Clear() + cbOutlet1.Items.AddRange(mslist) + + If .GraphicObject.InputConnectors(0).IsAttached Then cbInlet1.SelectedItem = .GraphicObject.InputConnectors(0).AttachedConnector.AttachedFrom.Tag + If .GraphicObject.OutputConnectors(0).IsAttached Then cbOutlet1.SelectedItem = .GraphicObject.OutputConnectors(0).AttachedConnector.AttachedTo.Tag + + Dim eslist As String() = .FlowSheet.SimulationObjects.Values.Where(Function(x) x.GraphicObject.ObjectType = ObjectType.EnergyStream).Select(Function(m) m.GraphicObject.Tag).ToArray + + cbEnergy.Items.Clear() + cbEnergy.Items.AddRange(eslist) + + If .GraphicObject.InputConnectors(1).IsAttached Then cbEnergy.SelectedItem = .GraphicObject.InputConnectors(1).AttachedConnector.AttachedFrom.Tag + + 'annotation + + Try + rtbAnnotations.Rtf = .Annotation + Catch ex As Exception + + End Try + + 'parameters + + tbActualAF.Text = .ActualAirFlow.ConvertFromSI(su.volumetricFlow).ToString(nf) + tbActualR.Text = .ActualFanSpeed.ToString(nf) + tbEff.Text = .ExchangerEfficiency.ToString(nf) + tbElecConv.Text = .ElectricalPowerConversionFactor.ToString(nf) + tbElecLoad.Text = .ElectricalPowerLoad.ConvertFromSI(su.heatflow).ToString(nf) + tbHeatingChange.Text = .HeatLoad.ConvertFromSI(su.heatflow).ToString(nf) + tbInletAirPre.Text = .AirPressure.ConvertFromSI(su.pressure).ToString(nf) + tbInletAirTemp.Text = .AirInletTemperature.ConvertFromSI(su.temperature).ToString(nf) + tbMaxHeatEx.Text = .MaxHeatExchange.ConvertFromSI(su.heatflow).ToString(nf) + tbOutletAirTemp.Text = .AirOutletTemperature.ConvertFromSI(su.temperature).ToString(nf) + tbOutletTemperature.Text = .OutletTemperature.ConvertFromSI(su.temperature).ToString(nf) + tbOverallUA.Text = .OverallUA.ToString(nf) + tbPressureDrop.Text = .PressureDrop.ConvertFromSI(su.deltaP).ToString(nf) + tbRefAF.Text = .ReferenceAirFlow.ConvertFromSI(su.volumetricFlow).ToString(nf) + tbRefR.Text = .ReferenceFanSpeed.ToString(nf) + + tbNumberOfTubesPerShell.Text = .Tube_NumberPerShell + tbTubeDe.Text = Format(cv.ConvertFromSI(su.diameter, .Tube_De), nf) + tbTubeDi.Text = Format(cv.ConvertFromSI(su.diameter, .Tube_Di), nf) + tbTubeFoulingFactor.Text = cv.ConvertFromSI(su.foulingfactor, .Tube_Fouling) + tbTubeLength.Text = Format(cv.ConvertFromSI(su.distance, .Tube_Length), nf) + tbTubePassesPerShell.Text = .Tube_PassesPerShell + tbTubePitch.Text = Format(cv.ConvertFromSI(su.thickness, .Tube_Pitch), nf) + tbTubeRoughness.Text = cv.ConvertFromSI(su.diameter, .Tube_Roughness) + tbTubeThermalCond.Text = cv.ConvertFromSI(su.thermalConductivity, .Tube_ThermalConductivity) + + End With + + Loaded = True + + End Sub + + Sub UpdateProps() + + Dim su = SimObject.FlowSheet.FlowsheetOptions.SelectedUnitSystem + + With SimObject + + .ActualFanSpeed = tbActualR.Text.ParseExpressionToDouble + .ElectricalPowerConversionFactor = tbElecConv.Text.ParseExpressionToDouble + .HeatLoad = tbHeatingChange.Text.ParseExpressionToDouble.ConvertToSI(su.heatflow) + .AirPressure = tbInletAirPre.Text.ParseExpressionToDouble.ConvertToSI(su.pressure) + .AirInletTemperature = tbInletAirTemp.Text.ParseExpressionToDouble.ConvertToSI(su.temperature) + .OutletTemperature = tbOutletTemperature.Text.ParseExpressionToDouble.ConvertToSI(su.temperature) + .OverallUA = tbOverallUA.Text.ParseExpressionToDouble + .PressureDrop = tbPressureDrop.Text.ParseExpressionToDouble.ConvertToSI(su.deltaP) + .ReferenceAirFlow = tbRefAF.Text.ParseExpressionToDouble.ConvertToSI(su.volumetricFlow) + .ReferenceFanSpeed = tbRefR.Text.ParseExpressionToDouble + + .Tube_NumberPerShell = tbNumberOfTubesPerShell.Text.ParseExpressionToDouble + .Tube_De = cv.ConvertToSI(su.diameter, tbTubeDe.Text.ParseExpressionToDouble) + .Tube_Di = cv.ConvertToSI(su.diameter, tbTubeDi.Text.ParseExpressionToDouble) + .Tube_Roughness = cv.ConvertToSI(su.diameter, tbTubeRoughness.Text.ParseExpressionToDouble) + .Tube_Fouling = cv.ConvertToSI(su.foulingfactor, tbTubeFoulingFactor.Text.ParseExpressionToDouble) + .Tube_Length = cv.ConvertToSI(su.distance, tbTubeLength.Text.ParseExpressionToDouble) + .Tube_PassesPerShell = tbTubePassesPerShell.Text.ParseExpressionToDouble + .Tube_Pitch = cv.ConvertToSI(su.thickness, tbTubePitch.Text.ParseExpressionToDouble) + .Tube_ThermalConductivity = cv.ConvertToSI(su.thermalConductivity, tbTubeThermalCond.Text.ParseExpressionToDouble) + + End With + + End Sub + + Private Sub cbCalcMode_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbCalcMode.SelectedIndexChanged + + If Loaded Then + + Select Case cbCalcMode.SelectedIndex + Case 0 + TabPage2.Enabled = False + TabPage3.Enabled = True + tbPressureDrop.ReadOnly = False + tbOverallUA.ReadOnly = True + tbOutletTemperature.ReadOnly = False + Case 1 + TabPage2.Enabled = True + TabPage3.Enabled = True + tbPressureDrop.ReadOnly = True + tbOverallUA.ReadOnly = True + tbOutletTemperature.ReadOnly = True + Case 2 + TabPage2.Enabled = False + TabPage3.Enabled = True + tbPressureDrop.ReadOnly = False + tbOverallUA.ReadOnly = False + tbOutletTemperature.ReadOnly = True + End Select + SimObject.CalculationMode = cbCalcMode.SelectedIndex + + End If + + End Sub + + Private Sub lblTag_TextChanged(sender As Object, e As EventArgs) Handles lblTag.TextChanged + + If Loaded Then ToolTipChangeTag.Show("Press ENTER to commit changes.", lblTag, New System.Drawing.Point(0, lblTag.Height + 3), 3000) + + End Sub + + Private Sub btnDisconnect1_Click(sender As Object, e As EventArgs) Handles btnDisconnect1.Click + If cbInlet1.SelectedItem IsNot Nothing Then + SimObject.FlowSheet.DisconnectObjects(SimObject.GraphicObject.InputConnectors(0).AttachedConnector.AttachedFrom, SimObject.GraphicObject) + cbInlet1.SelectedItem = Nothing + End If + End Sub + + Private Sub btnDisconnectOutlet1_Click(sender As Object, e As EventArgs) Handles btnDisconnectOutlet1.Click + If cbOutlet1.SelectedItem IsNot Nothing Then + SimObject.FlowSheet.DisconnectObjects(SimObject.GraphicObject, SimObject.GraphicObject.OutputConnectors(0).AttachedConnector.AttachedTo) + cbOutlet1.SelectedItem = Nothing + End If + End Sub + + Private Sub btnDisconnectEnergy_Click(sender As Object, e As EventArgs) Handles btnDisconnectEnergy.Click + If cbEnergy.SelectedItem IsNot Nothing Then + SimObject.FlowSheet.DisconnectObjects(SimObject.GraphicObject.InputConnectors(1).AttachedConnector.AttachedFrom, SimObject.GraphicObject) + cbEnergy.SelectedItem = Nothing + End If + End Sub + + Private Sub cbInlet1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbInlet1.SelectedIndexChanged + + If Loaded Then + + Dim text As String = cbInlet1.Text + + If text <> "" Then + + Dim index As Integer = 0 + + Dim gobj = SimObject.GraphicObject + Dim flowsheet = SimObject.FlowSheet + + If flowsheet.GetFlowsheetSimulationObject(text).GraphicObject.OutputConnectors(0).IsAttached Then + MessageBox.Show(flowsheet.GetTranslatedString("Todasasconexespossve"), flowsheet.GetTranslatedString("Erro"), MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + If gobj.InputConnectors(index).IsAttached Then flowsheet.DisconnectObjects(gobj.InputConnectors(index).AttachedConnector.AttachedFrom, gobj) + flowsheet.ConnectObjects(flowsheet.GetFlowsheetSimulationObject(text).GraphicObject, gobj, 0, index) + + End If + + End If + + End Sub + + Private Sub cbOutlet1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbOutlet1.SelectedIndexChanged + + If Loaded Then + + Dim text As String = cbOutlet1.Text + + If text <> "" Then + + Dim index As Integer = 0 + + Dim gobj = SimObject.GraphicObject + Dim flowsheet = SimObject.FlowSheet + + If flowsheet.GetFlowsheetSimulationObject(text).GraphicObject.InputConnectors(0).IsAttached Then + MessageBox.Show(flowsheet.GetTranslatedString("Todasasconexespossve"), flowsheet.GetTranslatedString("Erro"), MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + If gobj.OutputConnectors(0).IsAttached Then flowsheet.DisconnectObjects(gobj, gobj.OutputConnectors(0).AttachedConnector.AttachedTo) + flowsheet.ConnectObjects(gobj, flowsheet.GetFlowsheetSimulationObject(text).GraphicObject, 0, 0) + + End If + + End If + + End Sub + + Private Sub cbEnergy_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbEnergy.SelectedIndexChanged + + If Loaded Then + + Dim text As String = cbEnergy.Text + + If text <> "" Then + + Dim index As Integer = 1 + + Dim gobj = SimObject.GraphicObject + Dim flowsheet = SimObject.FlowSheet + + If flowsheet.GetFlowsheetSimulationObject(text).GraphicObject.OutputConnectors(0).IsAttached Then + MessageBox.Show(flowsheet.GetTranslatedString("Todasasconexespossve"), flowsheet.GetTranslatedString("Erro"), MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End If + If gobj.InputConnectors(index).IsAttached Then flowsheet.DisconnectObjects(gobj.InputConnectors(index).AttachedConnector.AttachedFrom, gobj) + flowsheet.ConnectObjects(flowsheet.GetFlowsheetSimulationObject(text).GraphicObject, gobj, 0, index) + + End If + + End If + + End Sub + + Private Sub rtbAnnotations_RtfChanged(sender As Object, e As EventArgs) Handles rtbAnnotations.RtfChanged + If Loaded Then SimObject.Annotation = rtbAnnotations.Rtf + End Sub + + Private Sub chkActive_CheckedChanged(sender As Object, e As EventArgs) Handles chkActive.CheckedChanged + If Loaded Then SimObject.GraphicObject.Active = chkActive.Checked + End Sub + + Private Sub btnCreateAndConnectInlet1_Click(sender As Object, e As EventArgs) Handles btnCreateAndConnectInlet1.Click, btnCreateAndConnectOutlet1.Click, btnCreateAndConnectEnergy.Click + + Dim sgobj = SimObject.GraphicObject + Dim fs = SimObject.FlowSheet + + If sender Is btnCreateAndConnectInlet1 Then + + Dim obj = fs.AddObject(ObjectType.MaterialStream, sgobj.InputConnectors(0).Position.X - 50, sgobj.InputConnectors(0).Position.Y, "") + + If sgobj.InputConnectors(0).IsAttached Then fs.DisconnectObjects(sgobj.InputConnectors(0).AttachedConnector.AttachedFrom, sgobj) + fs.ConnectObjects(obj.GraphicObject, sgobj, 0, 0) + + ElseIf sender Is btnCreateAndConnectOutlet1 Then + + Dim obj = fs.AddObject(ObjectType.MaterialStream, sgobj.OutputConnectors(0).Position.X + 30, sgobj.OutputConnectors(0).Position.Y, "") + + If sgobj.OutputConnectors(0).IsAttached Then fs.DisconnectObjects(sgobj, sgobj.OutputConnectors(0).AttachedConnector.AttachedTo) + fs.ConnectObjects(sgobj, obj.GraphicObject, 0, 0) + + ElseIf sender Is btnCreateAndConnectEnergy Then + + Dim obj = fs.AddObject(ObjectType.EnergyStream, sgobj.InputConnectors(1).Position.X - 30, sgobj.InputConnectors(1).Position.Y + 30, "") + + If sgobj.InputConnectors(1).IsAttached Then fs.DisconnectObjects(sgobj.InputConnectors(1).AttachedConnector.AttachedFrom, sgobj) + fs.ConnectObjects(obj.GraphicObject, sgobj, 0, 1) + + End If + + UpdateInfo() + RequestCalc() + + End Sub + + Private Sub lblTag_KeyPress(sender As Object, e As KeyEventArgs) Handles lblTag.KeyUp + + If e.KeyCode = Keys.Enter Then + + If Loaded Then SimObject.GraphicObject.Tag = lblTag.Text + If Loaded Then SimObject.FlowSheet.UpdateOpenEditForms() + Me.Text = SimObject.GraphicObject.Tag & " (" & SimObject.GetDisplayName() & ")" + DirectCast(SimObject.FlowSheet, Interfaces.IFlowsheetGUI).UpdateInterface() + + End If + + End Sub + + Sub RequestCalc() + + SimObject.FlowSheet.RequestCalculation(SimObject) + + End Sub + + Private Sub tb_TextChanged(sender As Object, e As EventArgs) Handles tbActualR.TextChanged, tbElecConv.TextChanged, + tbInletAirPre.TextChanged, tbInletAirTemp.TextChanged, tbNumberOfTubesPerShell.TextChanged, + tbOutletTemperature.TextChanged, tbOverallUA.TextChanged, tbPressureDrop.TextChanged, tbRefAF.TextChanged, + tbRefR.TextChanged, tbTubeDe.TextChanged, tbTubeDi.TextChanged, tbTubeFoulingFactor.TextChanged, + tbTubeLength.TextChanged, tbTubePassesPerShell.TextChanged, tbTubePitch.TextChanged, tbTubeRoughness.TextChanged, + tbTubeThermalCond.TextChanged + + Dim tbox = DirectCast(sender, TextBox) + + If tbox.Text.IsValidDoubleExpression Then + tbox.ForeColor = System.Drawing.Color.Blue + Else + tbox.ForeColor = System.Drawing.Color.Red + End If + + End Sub + + Private Sub TextBoxKeyDown(sender As Object, e As KeyEventArgs) Handles tbActualR.KeyDown, tbElecConv.KeyDown, + tbInletAirPre.KeyDown, tbInletAirTemp.KeyDown, tbNumberOfTubesPerShell.KeyDown, + tbOutletTemperature.KeyDown, tbOverallUA.KeyDown, tbPressureDrop.KeyDown, tbRefAF.KeyDown, + tbRefR.KeyDown, tbTubeDe.KeyDown, tbTubeDi.KeyDown, tbTubeFoulingFactor.KeyDown, + tbTubeLength.KeyDown, tbTubePassesPerShell.KeyDown, tbTubePitch.KeyDown, tbTubeRoughness.KeyDown, + tbTubeThermalCond.KeyDown + + If e.KeyCode = Keys.Enter And Loaded And DirectCast(sender, TextBox).ForeColor = System.Drawing.Color.Blue Then + + Try + UpdateProps() + DirectCast(sender, TextBox).SelectAll() + RequestCalc() + Catch ex As Exception + MessageBox.Show("Error updating property. TextBox ID: " & DirectCast(sender, TextBox).Name & ". Error message: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) + End Try + + End If + + End Sub + +End Class \ No newline at end of file diff --git a/DWSIM.UnitOperations/My Project/Resources.Designer.vb b/DWSIM.UnitOperations/My Project/Resources.Designer.vb index a33627241..67f3a11eb 100644 --- a/DWSIM.UnitOperations/My Project/Resources.Designer.vb +++ b/DWSIM.UnitOperations/My Project/Resources.Designer.vb @@ -22,7 +22,7 @@ Namespace My.Resources ''' ''' A strongly-typed resource class, for looking up localized strings, etc. ''' - _ @@ -450,6 +450,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property icons8_fan() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("icons8_fan", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property icons8_solar_panel() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("icons8_solar_panel", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -460,6 +480,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property icons8_wind_turbine() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("icons8_wind_turbine", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' diff --git a/DWSIM.UnitOperations/My Project/Resources.resx b/DWSIM.UnitOperations/My Project/Resources.resx index cac58f587..55f3af8fb 100644 --- a/DWSIM.UnitOperations/My Project/Resources.resx +++ b/DWSIM.UnitOperations/My Project/Resources.resx @@ -490,4 +490,13 @@ ..\Resources\lightning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-fan.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-solar_panel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-wind_turbine.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/DWSIM.UnitOperations/Reactors/PFR.vb b/DWSIM.UnitOperations/Reactors/PFR.vb index 1b53c449c..befd9f0fe 100644 --- a/DWSIM.UnitOperations/Reactors/PFR.vb +++ b/DWSIM.UnitOperations/Reactors/PFR.vb @@ -81,9 +81,9 @@ Namespace Reactors Public Property Diameter As Double = 0.1 - Public Property Volume() As Double + Public Property Volume As Double = 1.0 - Public Property dV() As Double + Public Property dV As Double = 0.01 Public Property CatalystLoading As Double = 0.0# @@ -657,6 +657,8 @@ Namespace Reactors Public Function Calculate_Internal(dVF As Double, Optional ByVal args As Object = Nothing) As Boolean + If dV = 0.0 Then dV = 0.01 + Dim negative As Boolean = False Dim negativeflag As Boolean = False diff --git a/DWSIM.UnitOperations/Resources/icons8-fan.png b/DWSIM.UnitOperations/Resources/icons8-fan.png new file mode 100644 index 0000000000000000000000000000000000000000..1e3cf4a8e0c7c92b3d4ff5b2d20f8b35716f3be4 GIT binary patch literal 19986 zcmdR$Wm6now6+^}cXtUPIKf?lJHg!{Sa2QO2?2rycMA~Q-Q6KLgy8NDr=Rz&^CJ#S z)lBiB>E3%UyVtcQQbp+#8Zt35003yRGLmWl00n-80ubTBH~p_Amf#z_sr)BN;O)QP zoc7{G0H6e9CB-y6GmbMoL~$2y2Rmz%*5KR^+JiOVRI8)mxU2iEO-)U`-{`zpCuvz< z=!)9@6}Dafm5(cJNVPVNjfz53l@wL+K09Xlva$5=Qr+}>jM*)P`sxAYbZlaEEsf9R zta;BDqpRot%FkC#aa0e4u-Il7ufU|(T>YqsB1WbFU`tLF*Q2SmpQFx6bXXB~dJN7v zGH;nRDJjV&yj59ZIF$p~+PdhbmHGu$0tZ+^Igy_VSI02M031-HA(6|U4YME)O#=U{ z2ZEp|gL?j^xG+AG!R|tDqI!gDOQT4#ARems6g(c)U7@Xnu#1o=*HpES~`+B^Ay;{v3*fT4h`HGifdxqGnvx`<$F2v`SV@pp^-Q zh!mNPfbI`$F0ORIighh%!l$JpNSY$uLqqYBE@1F}p0eSdI=WG*`zSWO44qi2%Sz=W! z&A^#FaopWZsdVx6?N?l}FTWTg{XFZGkt&H{FtL-*VMW`KNH%1dTn7IUU16s1BI%Pu zB76ope&#SD7fQhm3EmRemXG)>yV-d~Eb5X9e<3aFSV}MN0bs-XH6iqT$}8#=MaIb&c?gkSb@8hYhxTaSfw1{fX^5X2&*Yl7N!lg!-DF?6B-W9Xg0|S7yyuiSZvAUGG%8 z7<(C7z*w&fO84&p3QX*8^Nqq?{P)_&@M4&Vu@Pb4mJl&ve|L?lKT65VM?3I7@~B8x zKp~<>x5fh(3U}_xtVX{KJw)!IyPaI4cbFJxeMxooh^JRo7X1>Vhx=UAhDh$vKXt;7 zlw=Sp|Ky5P4)84ZX$@fQn;~%s79Hw%&>@8p!<5l;hglVDC;IqzI%g;(BKK^*izo>` zr&+TWT~y}o_TZ|@q=Su_*%Ed5boxx~^E`Xg8FyH0BQEh-3r^1O%lo{G%ME)r&WABqB&D zUt1Xv)YQc#63s0vmV_8^V*u$SsEC-1eGAH)x-Ez&S4HWk8fA*!$m{kgn+k4nULSYk zo`Qqa%!cc-5rQca*QqiMm2%A~oBAo6c>qX^goT2J4Tm9*!ywN_fHFdijK(#!+AII) zx}3Er!Yhaj-GS*HJbx*YLW}AGJUcWh2}G#6h2GGw!9p)odFLkLwD~?i`NmxPb#ASe zn#HUr(Bsr_a!zS$1#2Fil4weINv2IL&jsv0@^j5C=G7NM$$6ptxWr$MUDwKxq~>jH z>0ax_In5Gwx;qaGk7HdG@_Q8eOZ@K7)1wQo{(X2z?yr)r7BU%FJKz`vin`^$4T5B6 zLQ+szv{^bd4uh<+{0T>s$HGOs1|t)#s<)EvRMpf14@cC@Ntc89P*PUzQ2t;gaOJh+ z!Org#mXtC}__I^TP>%FSG5E%SN&ekc2Ae~CbQ)>5CBYMxIfQV41@%DmP;S4ZZ)1ew&j@(+!;pR zmpKbx@fMB!#E6$MjjLRNi!CFQf@@}M&xjkjG$p)#G&u-2ES8cQrqlSL4{dBnfPoq( zsV&Jxorgo|?oO2Ke-oBp*_nlaihKYDLkILV=eP?=~D0nkpT{!dr;e$fwFBYGbo z%0D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 HJ16`P6gm!n literal 0 HcmV?d00001 diff --git a/DWSIM.UnitOperations/Resources/icons8-solar_panel.png b/DWSIM.UnitOperations/Resources/icons8-solar_panel.png new file mode 100644 index 0000000000000000000000000000000000000000..8880b06d60a48ad727fe1f818c0ede10465d8432 GIT binary patch literal 7528 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 U!R`+i{OJ@J>6`0SoFqm37fk&tZvX%Q literal 0 HcmV?d00001 diff --git a/DWSIM.UnitOperations/Resources/icons8-wind_turbine.png b/DWSIM.UnitOperations/Resources/icons8-wind_turbine.png new file mode 100644 index 0000000000000000000000000000000000000000..ca816f4cf0df38f096c721510d5a7bfdfbbe9a80 GIT binary patch literal 17534 zcmcG0g;!fo)a?!K?i!p@3PFlH6nB>vg1Z%pOQ4ie+?}E=R#vMHzGHCosZbF2bV{7Bc&LnEp9G~e-)m^AcQ z--IQDV@ATUhpY4Lku=|Ah+DSrnA`UYKLF=z_qvM!)&KWPmE;FeKy_}-Jy}2sEDY#( zAQ(GGwU_qyD2OfrRMOhIx`v*Ic5MVb0cstU4C3Y;vM^B^7pzBN5)Q0SGh~9rUnpVb zNMG|UAV}-ffVpr}G;AB1x_9B-rZzbt@Bxh<=m(tYg*l5X*ij)%(4-S?$6VKgxe9UU zzXpL1F%vV0YpH7LgI++Na{xf*&1%!S`s>W43D*y0qMLl9oVA)YoD}xs$hy_%1_hw{ zTd!7Or;cuznZaK%Z+46(_~F|>xz0UZw0Lc9)h{l5_+uy#A~vi0r|;uYd{B+V-;@7* zNn}93E1L1O)C8%4%H7X5r-#yRxorD!DF*NCcc}n1ilbo-_HkIaCx8T8(`Xw`v?l!@MZ~c=Lrv29UyQ(Rb}k6LJ)`meU485iO!1;GewlhvBf$ps{SS}gg&h* znt%0lIXxC)eWl2Lw;T`)>R_H zEhqyr~amd6MC?{2q)1&H3SbLhdrT&?=kR)0pR-Pgv~iA|;1k%Zyw`dw=sfhRC??CNI=xm>(@}#~+m_ z7V?;VQO2jiL7F`R0fVo^M`80|!*^`HBWAV%wRLrMg0t6xgF&32CP0DW6<1iGSx5x> z?w9<+U8S(U;zsPbcSigUf79f}Evl3qjFMAU<=ie1B_!AJE{~^4AFdC@O5STHq65Y; zwI}yJYCwmU<1qOEG6Yt&Nw&T!$+T%a$Rs{WboHve-OA|KlMBITPLO68V^kue^fkefC+yk1IED&|>E2`ypHS?l)`41I9u>E=3y>;$UL90uDP}AARA{5Pl4~qc# z;B~CXYksn#?CXi0nRfo`1WKYFeOk)xSs{0OIlZ@ z#>XKwTxuaHVU=}8Y9~OsXOI20i@fCvQJT7R$B!_MMlvx5X5|}S(S)a~8O}Suwx1R^ z9}Em^kxi8sKYA({G=B=+3)FozT>a*oG$L>dFNe)t1g{$D(7{wqb2#Z~=gA;OmHK=_ zndkn<$i#w!#~E&9PQZv{rSP^%5tIh+ff(S@Y$HNYy?hX1x%WFDNfU%EH)r$#144G{ zdBEI2+|jIS6#Ey}Fvkd<8``d-t(Z#Ue^MZkso8>80+~FyQdXS_Xy~dr2y7mX8W~}49R>ku25Dp)?sh{8 zD#zS8q6jM`F;B+hNGKynlWc&bnS&+Uy_oKLGoX;?a(ntbo3m{Sd?UNGQgV^jE4~!A&ne_OV zqB;O`q8DxTQ4+y-gpD`FqjwY+0NZ?DIG(zmd(m)z0)!lYAjI@{I|n4J^T3c|8D9}f zjlJ)4d5a@{CH_^a{o+oP3-y>WVq+sbh)ySNAsP1oin@0Cwn?_@mBKmrJ44P+C$>c9 z-=mMO7+R1*C*$(0`do}U4jO6KS=%_IHG&Bx<piUt}$sbb4!H%AT0NK`c#qc6o}Wy{VD94wYD zv=YiA1WYL+DKKliwmWjrI8p{rAIs~o{$q|L>iEa{ocJnaEH#8fvBCPM$T54GP%ay4 z7|QI6#*zm}dE$?_hi zd?okO#42{q%Z&8+m>1fXUuAE*3}(kk>BK?Smj>hlG>CM`oow#iF=2|Mx7fd4@@oh= z{QL?WrO|>bF(i1WT{zJ6;=|a!G6vdtCS}=rL8!FgO#mLgjjzduZV9joK>*o)YOuod zeL6CF{ZTy2VwPnDnindTxX?y^5>`V^;OdC!r%yT=k##$#&+0+leTV=U4Ix~PEbtcR z^{X#nn*fS=oRjNoT!Nb1wiUutU!@3g2w{#IeJ@fMmYG9a_p3ll&mn7a8lrxp2HYIN zOjYkpj4M&#iQyflwB&Z7QJr7?>o||E@Y#+R(i~P*ESHJmfOHxUi0obY%mNY}l;+)e z9#7&u$1)z#XJHG!4ylM1m>jNWXmwQcAfOJr&Ch9tNG++j(6;GUF`7ZEhz)4#XuW4h zEt@Vw5oGJh60O$X&O8JMgU11(4r6vT&7c_9+kb%^{FH@^A1{Qdm_Adh-XVi7k%LsC zi0bi9BPlSjFMLIR=ko`?-z|Hw+?;-y74lI+Au$S$WjON@wSP1ox73~d2kvSG@^)x{ z;&+>U)%tGo{{8G7A2Lg^3*rP$ytY`BwjTh-1;SkNR}bz~5ISE4FTWZO1^c0{#mgJu zbwnuREBYCaZ)fn8t)_?M+Gl>M5&-gd@36G9>db%Cd0gR`v|2~M%UMUdCWF~<$MQ(C zl~yU8V|TER1|dZYx*+C!W=v8uFKCN6HB86vriHKM#DI0?hhS+~VM4An1CHe{7%t4nFmRP09Z7dm*~Zt zL<5{P^bm$uZz8J}sZ{S;|8qN5mxJplImFGaOH7b!nl9Ti@~{BHlTl~SAaZR`Ib|4gsLvO&DK6N!Oao7yIxp;8p#)At`3#R+7U_yC%KfvHM%e-+bU$0-kx0fKQ| zTYoJ*Y_W*p&l0f0hP5`d#7k(PA08>Hi`2FS{3us;@+BhG!@_#?CL5tBjOa~mc-`RO z$_fwC-VZ>@?`L@iojhb5|1Zsdv%Ex78K{J4^7c{G1kfp*=irpsp5BS9N?Y>a<1{lv zu3M%JxblAch$fj&0somyb0!6EY`lV?o6{_*(?e(&LrVEB6SNId_2 z9arDTR?OMFd>o1M`bs@o0Wo$NRygU?UD+s>z0-~Jx<)d7OOoyH4irt?4BZ)LH$$-W z;NxFpmYh+~w6vrs`mcQ5&cCoeksMeOFiWcUGc9>hd5L^a&U6?-m^4}^&?V7K9M2r9 z4%S~l_bPoxTx)b8JZ#8`Ka;5LPsgEhLy?FdDhJl305G&_l?%cwr*3L$S*PelDZ#7w zFY4K!JFxBJ_7JqX-;ONnmG{{I0h-x{Nd*|gCCLUc*h~jUm6;}{@JC>FWOmScAOHma zA|SzvwN%+Plf$#W6@~3~maYm?{U~JeE?WL>J_Nv{$SnMb@&`}MkO=dS_wb2dwUEAp zj~8&y^;iMltuUM5F=@`ez;@_x6)j+gD=H3X>^}i=)&D)jOF-Jr=Tl|?9`sgIo++{$ zg@|QWC=maNz!!^^!P`w6__&|Cp2`hibSH!{53BF-<0Bh&3p@(bfU2fJFwiQJ5jW@F zeg-X2OHsf8iAPvsJ+dI2Vi(pN9ZGurxq$CI8q~I6S9#Fjsa}8KueP36FWEDdw^4y6 zWW|lvc96>)I2@ZY2y>djUx5$aO5~5WZUYZd*y_6#Cw0Tb>4Z28b`7fN>NtQGN6-@i zB;hzIOpXR#U1vS`c+xn&V~=6@c}J!mjU2ML9$yjlBMLTtA)%cS3sX8OpCTM3v-jLe zh5UB_j0vNOZV|;J=qWWX=2Y082CnA@7PBylt(nvDS#84>c6$5pM0NJr8(J+rt`6r^1FH$LV=^3!eRVIZY<$H-{y8aN5 zjfUe*u&Mmkk&2PsoD-j6eM5s8nBj^z1X=7e-tHmC{Ejnj)>R-ox!)oOa!I&!`52#|kuaL~R8tOdZQPilCkcpC2?r*|>@Ks;j%v+VDn)28K< zH&4D;GhcE_TF{^_w{My!P4uoT&*jL)3)~PO-?1dJG=33k_qg95Dw3Bb_YqQ4MXimm{ViDk5xEVkl94Cr^WnsT`H%@5*?*FLn@-_vQK zkh3tzM(*|kqgl40AhL2=ZS8*^&70y5Py|r+ju-^P+ManN_B~Cv+WEr5f)#Ot*g4

ne8;%b7Aoi@S54-IS`=$-=@ecsqn-=BHrrQZIz5heJ{(0mjwDlYD8G(em9B51pSm)I>gB zq-m34PbG#A=s8UpPZJfYnAfkBZjd~p1l zBb-EFnE^X0w{*T`{&z;I%d0Mw#V#Ztw&WiYTWHl763{>Ql>2d)`iN^TNtrlMApq|* zbFSH=^{im*)7CNHumXkX41kyFqPO))OPvVY$hGiy4=7Za-nkzC7e7;=mqHL= zL*ULF4=UnWur*2ut7(SfXH=k?Vgh(ozEsf|n_n4-mcE^`!;nI0GWc`kD1heQhy6g_ zL0fxo^-(`qBwD@(%;oW8{N~7*FfJ^xGW+aV(to{O7oy z<9i(8UNq$iBmkR?m(2g3a^*fcP3#FZXI0`TS6K2#2(t7@mx;+$`|M_SWY#7tM}|#J zx#IqEm_PtI-Ot@F_uPK+|IXh(+>qv=K^e|gun2O)M+~frp zntFfwiYo$I!Fyb=->y>cXGnv^{C}PU7DMkme)7!~BsvB_2r8u9?IU+x^RKANt1l$N z#Hha?=}rbT#afAG$Rnud@7_qp?@_Zz_&<44qJ>#_TM>r#Ix0y$CFdm#at!e5*g5(HCd8S0YrN3ZVIajWYriG&5p7~?K9{=OT*sZizd zNd!Sqn_@fU zLg^@B`;B+!E1x?j)Yw9-X;|;6ts~PU@|24}p>S5B^IG|2?zdfIU97(5)~HqxeGx7L z)f!?_h&`4b(eC!ZYbDl4qXYa)GQRWbR(HL4Sw(QjTyRJ||BUWT+S|4* z>Fk;}1{YV{ynMW=v*w$fpKq@-D&B4*`8gOCDpTn2T*gWCIu^1%wg`%{)gqqIDjj(%d zwhR0z;)0ZXk%{8kAA{t6`f05});u7eC4b!i0s;`31>vWnQ3?~bJ$SVR8#`f0o@nYj zpFZB18d`R)-T2s(WI%YQ!_Z<|R_h*@U)mx+2q#piRNMD^wA?Jb_Mv@KRBF^Lx<{QJ z);@M22+#tMHG*zp9gE!6x zJ!KGjm!l2O@lWX}uj5?bgq68=+CVauuQknBY;@EKR*=3^yIW$#sDGH1hDKtDE&w2L zh&3&nA~m%F3{*QH(tqP37n9Dgb@j!=QF}@qFn(+4!c16XRL|Y?T{M2i#Q)oN1SwNl zHvGS7FM*>k(#Wdz$>bTvPY|22gZ~?}&}2|;ZS5%5Ef&z>qPbO{GF#9J`nx*Nhd6)& z$U^Q*S%eOG-;)=WU8iz4Xm=!*;x8|X1qX^p67VuW@f`M{mW)fccJZY9L{L4l!N~OT8`~cEcP!2 z?I64^gFwK6#|QRRMu_R&kkJp?*P!_g4t9u9%{JI?=hv@x$g1fq9nF?iboO7o6ked~ zTpc7NU7Mw|eWR^yL&;j2tks}T`%xFV`lB5rA8_74wBgar6RgPlhQ!~hhQ>UM0(R1B zJZ?xBnrsLMrE?n&>(%GYs7(Lp==6%yG~(WfTyciwg{8l>Ki#&b?KIJg5N-AV6JeF6 z8~oC}+~WtL&G?zKytrj`BZKo;z5WHYOX=`(5ECPCoS?+pp#L{a3+svXh-6_d*EJ@buze&h~kOp3OaF@aB24qPwMtTAs)47QKlzmq-y+-P2% zJ6G@R?j^KBmUZqu%?bpo4R>QJ{ST67DcgA1bzh^9;B@M?t6h*YTx;jF-4BJJE~>c5 zpDW?l?*98JTeXTS{_E(EE4{+`+sIQ0z{;rYP;OE`b{Ui|W5@|g1=m;=;srTJ{TUoV zS4E5k0gx_U{Kb#=c(s_MpgL?3UGW zLM5=-RC~-sr!1@=JW~tsK(q)1yPG5!%Am*WfD+8YH5oPz$WcuG3AO9*X zU9cD%Xu?7uR8}%p$iXPMtFC$z@M1_y&-DyFY=F-jJOkzs>ahYHD@B&61$6n4YI&+m zQ$2pfJd^4>xgAYR!OZjDz{97nr1*6F?X>6jmvSB_mBB8XZK48|)~Gm#%h-KFSYa)_ z>xr0fKxA9KdtlH53Y4Mzjgf>r@>+NJAjk$wmL|u`7L1(*ek2D0M=Ou5=MSb+Y2tF*->ju;b_0)c)$v}7r^WohH16yaJ)${l zA6ZYlxo_=zd($K=<3MbF%LT}-pRPY)7fW#ckx`AuNiLYYTYl^BXAN&reWs5f7Vmp> zNfDo}oMRRZ&u7(c_m1^=PNZoyBgf%^F5492FB)2^lMlD7>?E)IvVCa&d(E;xhNo5J>lrLpJ))rXSFPirQDUGuF~RYP(bZ&lo1L|4Eup6Qm-!#a z*Y|RzCGLuB?IvDw; z;#*y&OEApXad?|BAmrl3i^YN5z_s3Sc%<)cZUx!9#i_&SJG5$r)N^w=OdYMP9T@>@ zc_bXU49DVUUQxb%GtZtqAW?<_Cen=hE>|!2+}_?6u-!&dtr;)?iG<9G+PC9`_I z_leDUx#FX>>$p!+I=lMnym5fL+5>+-=_fD#`~?ZbV?Ex9H;0y`HjgYFp>#D_-`2JMONsipfe_Yw7SqnXS`EE87_>AWTpedY2}cshF=9NXR-W`$6CAi3z7%5 zgxvCWFnEKdy_tMA5^MAd_2#Iri~l+5ZG?CT0S5I|noSk-GEs}`iKSge)xr}TK4aBA z|9fYxI3oa2N0e<}2Tyz54)~pL#s7&M3xsFEUF2HneNioqQ`mwl@f?Sn@6O<84M-di zKvA)r6so$Xn`>5IIN@*#if#6@d4RjnJ<0 zci4|-*S?Ty`b;A0m*Xt2yCBM{z!VRiw|nf4i-1pQqA=6Ccu@r1?0rVqw$%zY5J?H+ z=tKaJ$Vgt0ViAF!8g$+%Y~l&8e<*@WyUQk}D-WF!YB{EXUK#g=DbE!3Vwa44Dp}E> z&nV^{Ih|zupM;(tPYDH1;^BUj;`*o)^~GCrTJ;$wNw(!;KZMSH6w_PMlXo{(ZC*q& z|4{g75yPSbA4dtMM-AvLlhz(O!<^oK`O0Ib@aNWlO1nJ+>YfHw9qJMo!&=|2=;@Or zmsyIEbJ#Y(!TWR)Hr0lEP{=^AOiAAzpI@Zz58r+g@!1LtCC2CsA!_kPZE@YOFvx*k zifKXx%`hovm*?wb=+3Olu8G&>N3*}X=(j5-zS`u3As?GtTVlXPjSS(C z2gT>j+Eq(LIqn;$EaGUgDn8#QANPQ|kO_k4@3D1_AoxP>3D4uTVyJ%evqYJ{<;}ZT z#-t~#9w#daZ|=Y=^0bBdgX5F#*99ZL90ZoSg&d_R_^8s-3~cO#LY7zU{eSRfiER|% zO z`ol!KdN%{h`)l~3OTQnF#Szadv`RNv!DCjzog;E5YJMlUfs2KL>F^a^IRtL0Bn#AO!ZK5?OUO8Vfj?9Zo2wp#!@< z40D*l3qnWMkxWNiRz!tbG`*}11R)nA`{v^~Wdb%8Vov~odUMkK{FIfgC%7oS_4hpB3cwG zWeztoHY%G_Q$o>S%yx{Z+x{d zV_L_-vB4m4_`ulc7gqh)q%34uP7%iS$#R4!^=r~b?aFtm)`Ro#6hB>5zlDTM8A^_c zcva`lK?{yK`)h8x{UIhxse<32zqmk7{!Q0nK0L`gzn&-!ut(ArPGcx^t+NWJ#NBfP z%g{7EkRlHKU%*iwI-}(#G zmgh%tjetk5zgfLaj;Q+wr|qQA$l#W3mL$6ibB8OZiA3TB>V}Im>)5m`)P5}|U;U9})I}}ZKpboQIx;od0vi-cY>r8Ys&U)oeHlyv!Wu|jw@$gmKP8C&F zV10-WuF!D~m3D?dkSo?lG*V} zlGTo3VE2bXz^~8g9kC@S#(}?L0GKQTBx3`_%7wgl>vJdjs?~GhZ*9-<0RJ_w+mc2 z8sRDOtStrad_!oAgl_a~blKg8G_NgF3)fML64yobL0l50m|#obi}5d`TB-xxH_okh zzkRpYGw1oC3*HOLdn!@bMfd0CD&8JW98|~a=udBsr?{8SZnelD@_McrfJaKV!8Muk zQ>*5!JZCrGrVfPlTVWUl9+2C#%_BwV;{S|Qw3r4srvPXvk&t%YXy*ZoLq_3 z3rD#2o2!|+Xt3|7ELiU=6xt1G>vRs|E*1Gc?G_hql%T$Rp5|z!=$2FKfYA}4kO*@5 zT_RW%|q+)CfsVV3GV_4 zpK&-N@a{&hu-mnwD5IQY?>Rtdt8&))qXX;+6OF1_7_?}BbS|Spnpifc?IQnwX?s-4 zq&f77l_X$^iTl}o9C3F>*n4q_)Wr3znE#2R%Gk>&rReSLcA@LkmlXSb3#*-tTiWcX z%|O4p^#HMeD_e)+X=e3m{WlFR*C%GQUc#4q;y}IVz2{QkF!rs}k=+q8)()*hheZ9N zzmucmQNR)M8NNnpxY($_?0$$;a_4%i3Ls-^4@`NYL{33Fqll{$&?<=rY+2s5|^TS9uy0$h6d7Sn-57yyB~J z^ZSD1j`)}E2UO!Fi=BTPeZI6(+XcnIs^FP7X! z?~oej(_57NvMln`UZa;zrJH3~?AYDQ7}^&pFW2KMeW4fP<#9}muWRoStuZ$`ljDNy z;jxXl(9^GL4suFu!({m>`B&smTvoP@J7HgCtdpW|<#xniiQVZJ2Y9XuJXS6!9X;KH zwCL!oajMn^$Vis2Kuwa@)+V=@BhT%Wbm2#tD+&ajk4FajW%o*(O`l%7tZwtb<5C~C z_Ivh+wNFdpzRWE&Pa}JL8QAa@;_%-5Z8#XC;jl?iV2A#R90#@@+4JLF`FV(Ri8Qoq zv4)^ZX#aYeR6C?s>D3M$GZLavO?|3;!UmVP~j{>WM|q@8elRb zmo*2RU!cARNeRN9R(#YJ_L+XxjwEa)wnICJ5N7XMz9;s^C}|D~MuzB3sKUmH`IjOU zSSaE%)YvFXW;ZzJJ`gA1*|6(7>Mq?+5R&QIbqW4dy*>XOb9U3{Nk=sGw1|UmPI~J% z<6LMb0*|aII&5HV=f0&i-^ivyYCa$UFvSr>0PCCDPSl3WP`fE(3r<#sI1dlz+^WAx z3Ot~OwERNQ8*7}Yfe)#t`Tu<4+NW?kEqcSC#X<{$vCCeDb{ov*vKyYKG9jSB@vag& zjr3zhLrUPaffGZXuy$UA=4AGVcxT`g%RO1O(c8P>>{(9TwWTdqmJJ%Y{=|PNdOf)I z#Q(gQ=8;pJ7(@Nlh}N6H`>yHLtqe@`b>ol|zc1ChayHUD(+&&eq>|=%cpwD){k`)w zwAHtcbIJLfTnE^4Nfwm|5tp`}|I-e|bMoIsm+vNs2vbUQCgJP}_BO2LFw*5nj2)YQ z#;LU2mayenUiocL8lK5Pq!8NUrktzR{!AvmEvNr9qsdD(v2_RrrY|0_4%?kiqH#?% zlXJ!VQNE*0cmo|_%k9qNV?I3h3dpvOfMyW;aNS{M5NGhE+bXGo>eBfHAuB5{Pg8@N z_PgGE&y~Dyh2#4(s5~#HtSHTLbftP?5(tS3eB1jUnmu~0J~ZRo9w8wCU-R9uknTxgcL5bF#h7cs!Qq)B4%?sH z@s>TGOitvCjptatJUMgFVcJbHuCL>3v9LN?MoxN)F zz7bTpvz#04jO4LmHvRK$((4p_+-0fbr~)h7;LWH)6a~D=-wxCrL%^>~U(u#B z+C3@52RLCAAqy2s1j}Hwb)P!!$)j&{wyHblT4=nB$$+5Oi`>f8H{5-GGkUvv@$x6} zW}ly|oNM~ifxZLzz{seal~da>oT^m5X$7um*L}IT+R2u7({htCS4Ej`Y;3p-l7j^7 z$H3jC3^oa=9-~TQzZ2&PVx=Yk?uxglUDSc2fKccGJts0VubQ%KhN|^9>6#5CplMN9 zOHB-W?s>anVBnBuK1bZ^;?vC=f~7ra*0^qBDI?SI{~|^c$U*z@vJ1gp6c;rJUsWhr2h5kzV&MALZCss znCGAYUk23Pc#ZN{Lp_QJa7da)Fe%Lb6Nrdo(42US8L63EJ;FYEbs&5Dqm(bUd-nUZ-e*-gF7ka^{Z2i6eKfzW z;#c$GKa~30hD-7jMF?pQp+;(2(zk=-%m`PlpM?QX>b2!cnwu4OYQyvxk3M|#RDlCK ziyOsqW6Nh4{htcs5Qh3$a&!GEcP_TRXt@A!>A^Iu;AI`Gn*q&V`sZI(6y#rnexE;( zILy~uH>*wsnMatf0P^Kilpqm=tiXtt7Qd0k6Vt@#S*!jd#pHl{e43}>G8+*u^^5rd zLen=i}u;(5bUcP&9$Vx!;#$X*tU8P$kSZgBCo>(%C${6F)3=s;M`R zjQ$U}9e)+HDnHH>@bcM2GJ)L9vfB_J4wrv#GPt+$nWju!t!k2jhpUgEh|k!;cp&??XGcGtRLOlkk9tgY-bYA$D0@c6;@tVSrbiRQ;>d8nv7O2T z{1*qN2@Z)sGJoE{xd@t%w#SGcNYO7?#DfUh;;09wE64TI-nv0tX@d=QI=?Uv1izo(Kl&(6dA^&keL`h7 zIY)*!8FDfkP@3_vnb3o9ox`McXHsxHu$e5UKt{5!Bfc>uI{lx^;2dn71mJQMM$3c6 zZRbNgrg*8uz1i+bvAAthlEzWbjVv)`{RUvn66N{IFzlyN0fLPiCdu{tI;;<C3I~iuXH8 zNpt}0prIi8N$Z13QZeEl%B2?~SmDPe`J^wvOF1JGa>3b5z%$E&j6Xr`BcxF8@ z8<2b=n@h1(YRoBwsI!Lc&y=2y#=q0Q+a@?%CZ7AqJpda=mUU)RJk3(c zn61w~4dF_^=vp8tFy3O~y&)y$!>euf*VX2=3$ww@Qo-7RK!sqb^@!&W*V5ZPg8~8P zyaW9@%>HtwgDkWg#l9z@dAmQcZNPo1mv<%Ys&<9TVKnx@l9Q*g`rs)raTsA~VYQaN zc-*&pHfX@d&;K^x?&_mo>*?>)@4r=H(I6bqZ6fFb$;!Wf=b`S&zm6gGVroGQjcfTA znN@ds@ZF8Em`8S;J(I0_o8lW5{9SfnM}lRmiHDn;2OL8aaW-uYJuE057*iOFmYOLc z_Bx#vv=RDKbaSQ~$E|d5phs~pJRJppqC?F+M;UkD#q&(#R+p#c8*>>0GldY`!^N*N zCV}5(hLblIo!j70K!bLl2clO@(5QH#%E`&8msuT^oAG5sZYW>hw09S)w#dzkPERI| z5}cB+Gmy>>5sC;3Kml9f=JeW0E8MY03YrqArivlnJrNjzX5b01R=4tLEmjl>{)bkb z8^%A9{6G3BfUjCBXdV6*2CE=MmudePvoPuK($S;EI@8{%clvD>Tzp=$J)4cF04+lc zQ&E?Z*y;dNhsYDsBTD1hm$#esPVX;f>SgR zT|z3EseMO`@AC;x~)Gx&qQ-D@)58~2IDT_(Dni^U`)j&NMwioeL< zo}=yQc6;`Qq!e3gy#2Z>aM}A?n}>d;02NceB;FYEZl?S~S!xw&GndmjZ)6tl+kfiE z>2FJ2cW7&a3l;I6_?)lZ2Q`P4o8)vO7|k8)uwgDW&O^y@rn~?2bciWS=1hCzd*LRe zt8lvz0e-Y8tUrge1&u;i9?A27rulh zwnUFaIf9G5M%5vSju2^N7Gf6?*^&m@pBZ{}y@fgC2kb!WMIm|vvGBO65vF!H9BV}Z4WY|+$xMdZRbUXpaDU9BD9b;B9 zJ3uN(!UU@dd$HcJJ9y5d7yf!zv2sTyYzs$7zK5T0_H~scV7flcmf6^=gCw-^QmpHn zrx~z2;Q9|EYE^HR=)aWKk?YQGCq1;!kEH)03tuTHPmlD5EBywgem&opUW;^OxxzYD zQ1kiUB>zJm922ugdiy8uEMUIc+@sPn+&H6zK-u6>vL{Cjd(Aebw7Ne0=XB>^K`eI) ztYcQVl!r8%Gc{(MbVSa|ibOU>9MrFt7CO1fLJw!?`g$C9to~amPEpxKZEt6GB!&sY zZ3ToBt~nz#91e6{>Dar@-0je{2L>K4*Os=nu8#f1S)-1<|EYr(U}$8t_+!sC393#Q zoDr9laT##AfQ4)npYf>&9QUSC4``uR&}1h3sD@+?Hxqi6yOR&^Tk0;o2(fPX>ocoi z>}oyd_2EkK!C%Xs6&YMnjwLN@Ks)Z3n8<@}0SWY~B>2N(U|4OV58zx3b#^=-GGX3t zRAbIncQanBj&vZzf{kH;iR_NEE~CwQb}rt6yf`0Mf4vSB5+y{Q5Cq1Mq4Hhw8d6OL zNesMT#+B^MNe^+KU!cF*Mmj7C=gwrkdj<5`gb)+t73@F0$$3}k6RibnQloFuo0pUG z$YB%?$LYUYkGR$5w|dQh2+(_L&y*pw$ut=O%nq5Js)Jq$Jrsn4Dc$>09(b()kUf4; z(ru88SlN$H?B+oG1;#1qmGElADBxwGM*hACsn+`Z>ig_Bvzas<_;eB;MV&}OvMUt@ zM1bQ@0&JOhNp1|LgM^dbe7~f@_x?F;`|mE~7CyoE5deT|U)(&JTOyI}#qoq`p^0E)h0Yh0%ib`$?%mQKzukTPKDn_Ah`E+W2o?x>HT7*+|SJ&Q-*pd+$ zxZFU7>dn;(n(T`un=crzXy15RlyLV9F3UpzslA20uqaG9lMjF5)_BAC<*3T=^Y?O( z4JO6PV#y2Y1?4l4&7yfvojU zLR(I359NH`J*%-wOQu!+lu1<%aWm}l0?$4L@+F{vOHy*i!Og&d9PiDbNqPhcCA+R; zGhI-@|CaM84y@G4JC}TCzg!@ZDzU=Kyj)K`2NeJx1%}HJC7vFvME>J}=A>m6E6OKq zPDFxp7#5wD+7F7VbEX{1@j$SlA;p8S<~51fon(mYWo9<{fJARIC`me7tOxcN%KEsK{!Q?iatTjDi!Qxzo(CzNEjM68d)!T$+IlF3RjEfrlWVExA}~B zhjpLnZLx8VkLdClI&6@9%`fn^ZSf>*08Io*4M_mx07@w|8~4*-fB$s!oKbDEem4?C zB+?}sAqe#QGkhOl9Nb~(%#7^(XEj>g6=?x3b3Ay5$j8srR6{q&WD=WJ<`5=w^)BS4 zjE258ms`Ew$x6eVpv+?Ri~A$LY8K=$?gd z-~{%q8}ITjB{btOXZqeRk*DEs(9J_&i?&yIOnsP6MYZ&r{yIKrg#i5bBdgYqrnCUn zHVa(YW!87f4YTp7a?Zs_fD`dQo%LGr<(%HvA(eX&+anssdh`EYG4R*V%;C0Dm;NV1>-Q9@S5W zzjx7C?JFe=2klnmM%GE6SOSHi1&)jvlLkgyB*H58HA-#V5WNsgS?I`INDTg9n%V7N zFMd(i%K!Jkv&p!&UiT>(zJVbx1^6nrGfakKlDp_`Ibur07`9NE| zNG4lmz^fvXzy&{MIGJ^fBd+ZCZ#rJ+2Yp4L1h16^sKhHGM22_*Sl~Vm@xNhJ94UUr z{;e!{&dqT(b16MqDXay8U*r%v(`}98Y3!}|E_c^;#|GP1AM;qdu#HlKoy~u8TpqsSzB_!x$Oronzw%o;wGvs z{{;`UR3yqzEL&+$(5KDXqRMN|yLXxye5=F~1WGiKB6s-PT^m4QL8Di1DJg$LzDrE9 zQ+*~Y&Q=8a1ywrN*YH@1XdC2ZU+TQL<0eBNV9C_`+26z_)! z8NPh)ZO5uVQ8zLIS(_Dew*nL)1>_OvXmA~jk#-dYl#t$142^gBq$~jMG0f#XT=58G z?28VUnYl5+Z1#8A=|^gXOWPxPLjFRE6Ka~?-7tVzJ1Wz=^75%4T#a}76irlq@pKTtmbY7IK0{gj_ z0LHlc`=kdrMam(`h6-jQU@s04X@qYfvdvoGv)ErG;8iV{Rm-G8J(I^48k>tL*5wCJ zxs3C4@N7Q9H~;W32rG+%3nCODW4~1Qw)OiUS}CEN4huDs$Wd&`oWT3@FR5apx!_;g z3ct{K}khmVnf+`!_z%lc`Z=Ks^GQ zcq1A&neoS4PX`xxFNle=@a9Gn{>M%|ukm%Y-KCPdU%ia2uU3JuID^1)VhflPZ=&X1 z9^jIuZ>I)W(QvU7lv`Nj`{#g)9S$ZmQv73Nyie~1K_Ya9H-R*2&G3=4SK?;sq7Qr^ z6ky+M&E~oWm#H-xPAt6U#>dH&{v=|6Bis@lX-b)R-i zykd@@JEl>Hr_p5HvCtthpZlSd%cyT86o>Y}ms}^6Con^Sp@R@bd*9L@4Yu|ShSO;1 z444<6EVA<#y3|n2f$M3RLN6VHDtFadgQ{T~~s+Gxo+qW$!l#O!v_F z0bBVJrq0OAB#dtm)$?@}Ft$Q1V`^O6NHW@HD&qeuw)`nW)-Tckl9$$egFc(Atq|fm z0(Y&vj5G1jg|?9tw9Nt(CtwQigFcMt6L%S7?&T|>pQB) zl%!UG*#B2hh$F31_21WNp1=GcXPNs#Rh*18ef@(I-{U?MYIg+^K!>mAbUHMjbtPk%H6}&?{O^O7{)7Eh8!!;iMQw6rNdJ4hhd(#g8 z*M6hB|1OH0{ zcFx)dYsU3dr*uK$AQ5rU1R64h&KgVEQvzqz(12w+qmvYQVC{ zuVf=ADtEd>R4ufx@pv^5lr{ zaBS@o%Z^tSxw7QG*pYP~_pa<(q$#X>Z7;BKH))T#Y177|KB9S`-Tj8k`;)mr#mr$< zeTKuCR`M%*40HqDM;4_d243WhTvS@m%TU*5S9TA$4>i5)t3nl14d(cJFmIM_jIcc65MBbbjOz~j1Q$?y zL5w?eMN<+Z!$eN&J#pu)N(v_P1D7;*W@WG(;Hej{W#4(c+pK%akB-UhmxMmO{kQL1 ww()O)5W^*_wzOF@SknG54X_O*vj630`iLL)X$_eGoF8KFboFyt=akR{0G~bL#Q*>R literal 0 HcmV?d00001 diff --git a/DWSIM.UnitOperations/UnitOperations/AirCooler.vb b/DWSIM.UnitOperations/UnitOperations/AirCooler.vb new file mode 100644 index 000000000..1f4c62f7d --- /dev/null +++ b/DWSIM.UnitOperations/UnitOperations/AirCooler.vb @@ -0,0 +1,1495 @@ +Imports DWSIM.Interfaces +Imports DWSIM.Interfaces.Enums +Imports DWSIM.UnitOperations.Streams +Imports DWSIM.Inspector +Imports DWSIM.Drawing.SkiaSharp.GraphicObjects +Imports DWSIM.DrawingTools.Point +Imports DWSIM.Interfaces.Enums.GraphicObjects +Imports DWSIM.ExtensionMethods +Imports SkiaSharp +Imports s = DWSIM.UI.Shared.Common +Imports Eto.Forms +Imports cv = DWSIM.SharedClasses.SystemsOfUnits.Converter +Imports DWSIM.SharedClasses +Imports System.IO +Imports DWSIM.Thermodynamics.Streams +Imports DWSIM.Thermodynamics + +Namespace UnitOperations + + Public Class AirCooler + + Inherits DWSIM.UnitOperations.UnitOperations.UnitOpBaseClass + + Implements DWSIM.Interfaces.IExternalUnitOperation + + Public f As EditingForm_AirCooler + + Private calc As DWSIM.Thermodynamics.CalculatorInterface.Calculator + + Private rpp As DWSIM.Thermodynamics.PropertyPackages.RaoultPropertyPackage + + Private _name = "Air Cooler" + Private _desc = "Air Cooler Model" + + Public Enum CalcMode + SpecifyOutletTemperature = 0 + SpecifyGeometry = 1 + SpecifyUA = 2 + End Enum + + Public Property CalculationMode As CalcMode = CalcMode.SpecifyOutletTemperature + + Public Property PressureDrop As Double = 0.0 + + Public Property OutletTemperature As Double = 300 + + Public Property OverallUA As Double = 500 'W/K + + Public Property ReferenceFanSpeed As Double = 100.0 'rpm + + Public Property ReferenceAirFlow As Double = 1.0 'm3/s + + Public Property ActualFanSpeed As Double = 100.0 'rpm + + Public Property ActualAirFlow As Double = 1.0 'm3/s + + Public Property AirInletTemperature As Double = 273.15 + 25.0 + + Public Property AirPressure As Double = 101325.0 + + Public Property AirOutletTemperature As Double = 273.15 + 25.0 + + Public Property ElectricalPowerConversionFactor As Double = 1.0 'kW/rpm + + Public Property HeatLoad As Double = 0.0 + + Public Property ElectricalPowerLoad As Double = 0.0 + + 'tube internal diameter in mm + Public Property Tube_Di As Double = 50.0 + + 'tube external diameter in mm + Public Property Tube_De As Double = 60.0 + + 'tube length in m + Public Property Tube_Length As Double = 5.0 + + 'tube pitch in mm + Public Property Tube_Pitch As Double = 40.0 + + 'tube fouling in K.m2/W + Public Property Tube_Fouling As Double = 0.0# + + 'number of tube passes per shell, integer + Public Property Tube_PassesPerShell As Integer = 1 + + 'number of tubes per shell, integer + Public Property Tube_NumberPerShell As Integer = 160 + + 'tube material roughness in mm + Public Property Tube_Roughness As Double = 0.000045 * 1000 + + 'tube thermal conductivity + Public Property Tube_ThermalConductivity As Double = 70.0# + + Public Property MaxHeatExchange As Double = 0.0 + + Public Property ExchangerEfficiency As Double = 0.0 + + Public Property LMTD As Double = 0.0 + Public Property LMTD_F As Double = 0.0 + + + Public Overrides Function GetDisplayName() As String + Return _name + End Function + + Public Overrides Function GetDisplayDescription() As String + Return _desc + End Function + + Private ImagePath As String = "" + Private Image As SKImage + + Public Overrides Property ComponentName As String = _name + + Public Overrides Property ComponentDescription As String = _desc + + Private ReadOnly Property IExternalUnitOperation_Name As String = _name Implements IExternalUnitOperation.Name + + Public ReadOnly Property Prefix As String = "AC-" Implements IExternalUnitOperation.Prefix + + Public ReadOnly Property Description As String = _desc Implements IExternalUnitOperation.Description + + Public Overrides Property ObjectClass As SimulationObjectClass = SimulationObjectClass.Exchangers + + Public Overrides ReadOnly Property MobileCompatible As Boolean = False + + Public Function ReturnInstance(typename As String) As Object Implements IExternalUnitOperation.ReturnInstance + + Return New AirCooler() + + End Function + + Public Overrides Sub DisplayEditForm() + + If f Is Nothing Then + f = New EditingForm_AirCooler With {.SimObject = Me} + f.ShowHint = GlobalSettings.Settings.DefaultEditFormLocation + f.Tag = "ObjectEditor" + Me.FlowSheet.DisplayForm(f) + Else + If f.IsDisposed Then + f = New EditingForm_AirCooler With {.SimObject = Me} + f.ShowHint = GlobalSettings.Settings.DefaultEditFormLocation + f.Tag = "ObjectEditor" + Me.FlowSheet.DisplayForm(f) + Else + f.Activate() + End If + End If + + End Sub + + Public Overrides Sub UpdateEditForm() + If f IsNot Nothing Then + If Not f.IsDisposed Then + If f.InvokeRequired Then f.BeginInvoke(Sub() f.UpdateInfo()) + End If + End If + End Sub + + Public Overrides Function GetIconBitmap() As Object + Return My.Resources.icons8_fan + End Function + + Public Overrides Sub CloseEditForm() + If f IsNot Nothing Then + If Not f.IsDisposed Then + f.Close() + f = Nothing + End If + End If + End Sub + + Public Sub Draw(g As Object) Implements IExternalUnitOperation.Draw + + Dim canvas As SKCanvas = DirectCast(g, SKCanvas) + + If Image Is Nothing Then + + ImagePath = System.IO.Path.GetTempFileName() + My.Resources.icons8_fan.Save(ImagePath) + + Using streamBG = New FileStream(ImagePath, FileMode.Open) + Using bitmap = SKBitmap.Decode(streamBG) + Image = SKImage.FromBitmap(bitmap) + End Using + End Using + + Try + File.Delete(ImagePath) + Catch ex As Exception + End Try + + End If + + Using p As New SKPaint With {.IsAntialias = GlobalSettings.Settings.DrawingAntiAlias, .FilterQuality = SKFilterQuality.High} + canvas.DrawImage(Image, New SKRect(GraphicObject.X, GraphicObject.Y, GraphicObject.X + GraphicObject.Width, GraphicObject.Y + GraphicObject.Height), p) + End Using + + End Sub + + Public Sub CreateConnectors() Implements IExternalUnitOperation.CreateConnectors + + Dim myIC1 As New ConnectionPoint + + Dim w, h, x, y As Double + w = GraphicObject.Width + h = GraphicObject.Height + x = GraphicObject.X + y = GraphicObject.Y + + myIC1.Position = New Point(x, y) + myIC1.Type = ConType.ConIn + myIC1.Direction = ConDir.Right + + Dim myIC2 As New ConnectionPoint + + myIC2.Position = New Point(x + 0.5 * w, y + h) + myIC2.Type = ConType.ConEn + myIC2.Direction = ConDir.Up + + Dim myOC1 As New ConnectionPoint + myOC1.Position = New Point(x + w, y) + myOC1.Type = ConType.ConOut + myOC1.Direction = ConDir.Right + + With GraphicObject.InputConnectors + If .Count = 2 Then + .Item(0).Position = New Point(x, y) + .Item(1).Position = New Point(x + 0.5 * w, y + h) + Else + .Add(myIC1) + .Add(myIC2) + End If + .Item(0).ConnectorName = "Fluid Inlet" + .Item(1).ConnectorName = "Power Inlet" + End With + + With GraphicObject.OutputConnectors + If .Count = 1 Then + .Item(0).Position = New Point(x + w, y) + Else + .Add(myOC1) + End If + .Item(0).ConnectorName = "Fluid Outlet" + End With + + Me.GraphicObject.EnergyConnector.Active = False + + End Sub + + Public Overrides Function CloneXML() As Object + Dim obj As ICustomXMLSerialization = New AirCooler() + obj.LoadData(Me.SaveData) + Return obj + End Function + + Public Overrides Function CloneJSON() As Object + Return Newtonsoft.Json.JsonConvert.DeserializeObject(Of AirCooler)(Newtonsoft.Json.JsonConvert.SerializeObject(Me)) + End Function + + Public Overrides Function LoadData(data As System.Collections.Generic.List(Of System.Xml.Linq.XElement)) As Boolean + + Dim ci As Globalization.CultureInfo = Globalization.CultureInfo.InvariantCulture + + XMLSerializer.XMLSerializer.Deserialize(Me, data) + + Return True + + End Function + + Public Overrides Function SaveData() As System.Collections.Generic.List(Of System.Xml.Linq.XElement) + + Dim elements As System.Collections.Generic.List(Of System.Xml.Linq.XElement) = XMLSerializer.XMLSerializer.Serialize(Me) + Dim ci As Globalization.CultureInfo = Globalization.CultureInfo.InvariantCulture + + Return elements + + End Function + + Public Sub New(ByVal Name As String, ByVal Description As String) + + MyBase.CreateNew() + Me.ComponentName = Name + Me.ComponentDescription = Description + + End Sub + + Public Sub New() + + MyBase.New() + + End Sub + + Public Overrides Sub PerformPostCalcValidation() + + End Sub + + Public Overrides Sub Calculate(Optional args As Object = Nothing) + + Dim IObj As Inspector.InspectorItem = Inspector.Host.GetNewInspectorItem() + + Inspector.Host.CheckAndAdd(IObj, "", "Calculate", If(GraphicObject IsNot Nothing, GraphicObject.Tag, "Temporary Object") & " (" & GetDisplayName() & ")", GetDisplayName() & " Calculation Routine", True) + + IObj?.SetCurrent() + + IObj?.Paragraphs.Add("The Air Cooler model is a subset of the Shell and Tube HX model, with air being the 'shell side' fluid.") + + IObj?.Paragraphs.Add("Input Parameters") + + IObj?.Paragraphs.Add("The Air Cooler model in DWSIM has three calculation modes: ") + + IObj?.Paragraphs.Add("1. Specify Outlet Temperature: you must provide the + fluid outlet temperature and DWSIM will calculate Overall UA and Heat Exchanged.") + + IObj?.Paragraphs.Add("2. Specify Tube Geometry: in this mode you must provide + the tube geometry and DWSIM will calculate output + temperatures, pressure drop at the tubes, overall + HTC (U), LMTD, and exchange area. This calculation mode uses a + simplified version of Tinker's method for Shell and Tube + exchanger calculations, with a modification for the outside heat transfer coefficient (convection). ") + + IObj?.Paragraphs.Add("3. Specify Overall UA: in this mode you must provide the Overall UA and DWSIM will + calculate the Heat Exchanged and Outlet Temperature.") + + IObj?.Paragraphs.Add("You can provide the pressure drop for the hot fluid in the exchanger for modes 1 and 3 only.") + + IObj?.Paragraphs.Add("Calculation Mode") + + IObj?.Paragraphs.Add("The heat exchanger in DWSIM is calculated using the simple convection heat equation:") + + IObj?.Paragraphs.Add("Q=UA\Delta T_{ml},") + + IObj?.Paragraphs.Add("where: Q = heat exchanged, A = heat transfer area (external + surface) and \Delta T_{ml} = Logarithmic Mean Temperature + Difference (LMTD). We also remember that:") + + IObj?.Paragraphs.Add("Q=m\Delta H,") + + IObj?.Paragraphs.Add("where: Q = heat transferred from/to the fluid and \Delta H = outlet-inlet enthalpy difference.") + + IObj?.Paragraphs.Add("

Inlet Streams

") + + Dim su = FlowSheet.FlowsheetOptions.SelectedUnitSystem + + Dim Ti1, Ti2, w1, w2, A, Tc1, Th1, Wc, Wh, P1, P2, Th2, Tc2, U As Double + Dim Pc1, Ph1, Pc2, Ph2, DeltaHc, DeltaHh, H1, H2, Hc1, Hh1, Hc2, Hh2, CPC, CPH As Double + Dim StIn0, StIn1, StOut0, StOut1, StInCold, StInHot, StOutHot, StOutCold As MaterialStream + Dim coldidx As Integer = 0 + + 'Validate unitop status. + Me.Validate() + + StIn0 = Me.GetInletMaterialStream(0) + StOut0 = Me.GetOutletMaterialStream(0) + + If calc Is Nothing Then + calc = New Thermodynamics.CalculatorInterface.Calculator() + calc.Initialize() + rpp = New Thermodynamics.PropertyPackages.RaoultPropertyPackage() + End If + + StIn1 = calc.CreateMaterialStream({"Air"}, {1.0}) + StIn1.Phases(0).Properties.temperature = AirInletTemperature + StIn1.Phases(0).Properties.pressure = AirPressure + + ActualAirFlow = ReferenceAirFlow / ReferenceFanSpeed * ActualFanSpeed + + StIn1.Phases(0).Properties.massflow = Nothing + StIn1.Phases(0).Properties.molarflow = Nothing + StIn1.Phases(0).Properties.volumetric_flow = ActualAirFlow + + StOut1 = StIn1.Clone() + + StIn1.PropertyPackage = rpp + StOut1.PropertyPackage = rpp + + IObj?.SetCurrent() + StIn1.Calculate() + + 'First input stream. + Ti1 = StIn0.Phases(0).Properties.temperature.GetValueOrDefault + w1 = StIn0.Phases(0).Properties.massflow.GetValueOrDefault + P1 = StIn0.Phases(0).Properties.pressure.GetValueOrDefault + H1 = StIn0.Phases(0).Properties.enthalpy.GetValueOrDefault + + 'Second input stream. + Ti2 = StIn1.Phases(0).Properties.temperature.GetValueOrDefault + w2 = StIn1.Phases(0).Properties.massflow.GetValueOrDefault + P2 = StIn1.Phases(0).Properties.pressure.GetValueOrDefault + H2 = StIn1.Phases(0).Properties.enthalpy.GetValueOrDefault + + 'Let us use properties at the entrance as an initial implementation. + + 'Input2 is the cold stream. + Tc1 = Ti2 + Th1 = Ti1 + Wc = w2 + Wh = w1 + Pc1 = P2 + Ph1 = P1 + Hc1 = H2 + Hh1 = H1 + coldidx = 1 + 'Identify cold and hot streams. + StInCold = StIn1 + StInHot = StIn0 + StOutCold = StOut1 + StOutHot = StOut0 + + IObj?.Paragraphs.Add(String.Format("

Cold Stream: {0}

", "Ambient Air")) + + IObj?.Paragraphs.Add(String.Format("Temperature: {0} K", StInCold.Phases(0).Properties.temperature.GetValueOrDefault)) + IObj?.Paragraphs.Add(String.Format("Pressure: {0} Pa", StInCold.Phases(0).Properties.pressure.GetValueOrDefault)) + IObj?.Paragraphs.Add(String.Format("Mass Flow: {0} kg/s", StInCold.Phases(0).Properties.massflow.GetValueOrDefault)) + IObj?.Paragraphs.Add(String.Format("Specific Enthalpy: {0} kJ/kg", StInCold.Phases(0).Properties.enthalpy.GetValueOrDefault)) + + IObj?.Paragraphs.Add(String.Format("

Hot Stream: {0}

", StInHot.GraphicObject.Tag)) + + IObj?.Paragraphs.Add(String.Format("Temperature: {0} K", StInHot.Phases(0).Properties.temperature.GetValueOrDefault)) + IObj?.Paragraphs.Add(String.Format("Pressure: {0} Pa", StInHot.Phases(0).Properties.pressure.GetValueOrDefault)) + IObj?.Paragraphs.Add(String.Format("Mass Flow: {0} kg/s", StInHot.Phases(0).Properties.massflow.GetValueOrDefault)) + IObj?.Paragraphs.Add(String.Format("Specific Enthalpy: {0} kJ/kg", StInHot.Phases(0).Properties.enthalpy.GetValueOrDefault)) + + IObj?.Paragraphs.Add("

Maximum Heat Exchange

") + + IObj?.Paragraphs.Add("Calculating maximum theoretical heat exchange...") + + IObj?.Paragraphs.Add("The maximum theoretical heat exchange is calculated as the smallest value from") + + IObj?.Paragraphs.Add("Q_{max,hot}=W_{hot}(H_{hot,in}-H_{hot,c})") + IObj?.Paragraphs.Add("Q_{max,cold}=W_{cold}(H_{cold,in}-H_{cold,h})") + + IObj?.Paragraphs.Add("where") + IObj?.Paragraphs.Add("H_{hot,in} is the hot stream inlet enthalpy") + IObj?.Paragraphs.Add("H_{hot,c} is the hot stream enthalpy at cold stream inlet temperature") + IObj?.Paragraphs.Add("H_{cold,in} is the cold stream inlet enthalpy ") + IObj?.Paragraphs.Add("H_{cold,h} is the cold stream enthalpy at hot stream inlet temperature") + + Pc2 = Pc1 + Ph2 = Ph1 - PressureDrop + + 'calculate maximum theoretical heat exchange + If DebugMode Then AppendDebugLine(String.Format("Doing a PT flash to calculate hot stream outlet enthalpy... P = {0} Pa, T = {1} K", Ph2, Tc1)) + Dim HHx As Double + Dim tmpstr As MaterialStream = StInHot.Clone + tmpstr.PropertyPackage = StInHot.PropertyPackage.Clone + tmpstr.SetFlowsheet(StInHot.FlowSheet) + tmpstr.PropertyPackage.CurrentMaterialStream = tmpstr + tmpstr.Phases("0").Properties.temperature = Tc1 + tmpstr.Phases("0").Properties.pressure = Ph2 + IObj?.SetCurrent() + tmpstr.PropertyPackage.DW_CalcEquilibrium(PropertyPackages.FlashSpec.T, PropertyPackages.FlashSpec.P) + IObj?.SetCurrent() + tmpstr.Calculate(False, True) + HHx = tmpstr.Phases(0).Properties.enthalpy.GetValueOrDefault + DeltaHh = Wh * (Hh1 - HHx) 'kW + + If DebugMode Then AppendDebugLine(String.Format("Doing a PT flash to calculate cold stream outlet enthalpy... P = {0} Pa, T = {1} K", Pc2, Th1)) + tmpstr = StInCold.Clone + tmpstr.PropertyPackage = StInCold.PropertyPackage.Clone + tmpstr.SetFlowsheet(StInHot.FlowSheet) + tmpstr.PropertyPackage.CurrentMaterialStream = tmpstr + tmpstr.Phases("0").Properties.temperature = Th1 + tmpstr.Phases("0").Properties.pressure = Pc2 + IObj?.SetCurrent() + tmpstr.PropertyPackage.DW_CalcEquilibrium(PropertyPackages.FlashSpec.T, PropertyPackages.FlashSpec.P) + IObj?.SetCurrent() + tmpstr.Calculate(False, True) + HHx = tmpstr.Phases(0).Properties.enthalpy.GetValueOrDefault + DeltaHc = Wc * (HHx - Hc1) 'kW + + IObj?.Paragraphs.Add("Q_{cold} = " & DeltaHc & " kW") + + MaxHeatExchange = Math.Min(DeltaHc, DeltaHh) 'kW + + IObj?.Paragraphs.Add("Q_{max} = " & MaxHeatExchange & " kW") + + tmpstr.PropertyPackage = Nothing + tmpstr.Dispose() + tmpstr = Nothing + + If DebugMode Then AppendDebugLine("Maximum possible heat exchange is " & MaxHeatExchange.ToString & " kW.") + + 'Copy properties from the input streams. + StOut0.Assign(StIn0) + StOut1.Assign(StIn1) + + CPC = StInCold.Phases(0).Properties.heatCapacityCp.GetValueOrDefault + CPH = StInHot.Phases(0).Properties.heatCapacityCp.GetValueOrDefault + + IObj?.Paragraphs.Add("

Actual Heat Exchange

") + + IObj?.Paragraphs.Add("Calculating heat exchanged...") + + IObj?.Paragraphs.Add(String.Format("Calculation mode: {0}", [Enum].GetName(CalculationMode.GetType, CalculationMode))) + + Select Case CalculationMode + + Case CalcMode.SpecifyOutletTemperature + + Th2 = OutletTemperature + + StInHot.PropertyPackage.CurrentMaterialStream = StInHot + If DebugMode Then AppendDebugLine(String.Format("Doing a PT flash to calculate hot stream outlet enthalpy... P = {0} Pa, T = K", Ph2, Th2)) + IObj?.SetCurrent() + Dim tmp = StInHot.PropertyPackage.CalculateEquilibrium2(FlashCalculationType.PressureTemperature, Ph2, Th2, 0.0#) + Hh2 = tmp.CalculatedEnthalpy + HeatLoad = -Wh * (Hh2 - Hh1) + + DeltaHc = HeatLoad / Wc + Hc2 = Hc1 + DeltaHc + StInCold.PropertyPackage.CurrentMaterialStream = StInCold + If DebugMode Then AppendDebugLine(String.Format("Doing a PH flash to calculate cold stream outlet temperature... P = {0} Pa, H = {1} kJ/[kg.K]", Pc2, Hc2)) + IObj?.SetCurrent() + tmp = StInCold.PropertyPackage.CalculateEquilibrium2(FlashCalculationType.PressureEnthalpy, Pc2, Hc2, Tc1) + Tc2 = tmp.CalculatedTemperature + If DebugMode Then AppendDebugLine(String.Format("Calculated cold stream outlet temperature T2 = {0} K", Tc2)) + + LMTD = ((Th1 - Tc2) - (Th2 - Tc1)) / Math.Log((Th1 - Tc2) / (Th2 - Tc1)) + + OverallUA = HeatLoad / LMTD * 1000 + + AirOutletTemperature = Tc2 + + If HeatLoad > MaxHeatExchange Then + Throw New Exception("Invalid Outlet Temperature (Heat Exchanged higher than the theoretical maximum)") + End If + + Case CalcMode.SpecifyGeometry + + 'Shell and Tube HX calculation using Tinker's method. + + IObj?.Paragraphs.Add("Shell and Tube HX calculation uses Tinker's method, more details on this link, Chapter 5 (Capitulo 5).") + + Dim Tc2_ant, Th2_ant As Double + Dim U_ant, fx, Fant, F As Double + Dim DTm, Tcm, Thm, R, Sf, P As Double + + 'initial estimates for R and P to calculate outlet temperatures + + R = 0.4 + P = 0.6 + + 'hot + Th2 = P * (Tc1 - Th1) + Th1 + Tc2 = Tc1 - R * (Th2 - Th1) + + If Th2 <= Tc2 Then Th2 = Tc2 * 1.2 + + Pc2 = Pc1 + Ph2 = Ph1 + F = 1.0# + U = 500.0# + + IObj?.Paragraphs.Add("

Initial Estimates

") + + IObj?.Paragraphs.Add("T_{c,out} = " & Tc2 & " K") + IObj?.Paragraphs.Add("T_{h,out} = " & Th2 & " K") + IObj?.Paragraphs.Add("U = " & U & " W/[m2.K]") + + Dim rhoc, muc, kc, rhoh, muh, kh, rt, di, de, L, hi, nt, vt, Ret, Prt As Double + + Dim icnt As Integer = 0 + + Do + + IObj?.Paragraphs.Add("

Convergence Loop #" & icnt & "

") + + LMTD = ((Th1 - Tc2) - (Th2 - Tc1)) / Math.Log((Th1 - Tc2) / (Th2 - Tc1)) + + 'hot + R = (Tc1 - Tc2) / (Th2 - Th1) + P = (Th2 - Th1) / (Tc1 - Th1) + + Fant = F + + If R <> 1.0# Then + Dim alpha As Double + alpha = ((1 - R * P) / (1 - P)) + Sf = (alpha - 1) / (alpha - R) + F = (R ^ 2 + 1) ^ 0.5 * Math.Log((1 - Sf) / (1 - R * Sf)) / ((R - 1) * Math.Log((2 - Sf * (R + 1 - (R ^ 2 + 1) ^ 0.5)) / (2 - Sf * (R + 1 + (R ^ 2 + 1) ^ 0.5)))) + Else + Sf = P + F = Sf * 2 ^ 0.5 / ((1 - Sf) * Math.Log((2 * (1 - Sf) + Sf * 2 ^ 0.5) / (2 * (1 - Sf) - Sf * 2 ^ 0.5))) + End If + If Double.IsNaN(F) Then + F = Fant + End If + DTm = F * LMTD + + IObj?.Paragraphs.Add("\Delta T_{ml} = " & LMTD & " K") + + '3 + Tcm = (Tc2 - Tc1) / 2 + Tc1 + Thm = (Th1 - Th2) / 2 + Th2 + + + IObj?.Paragraphs.Add("F = " & F) + IObj?.Paragraphs.Add("\Delta T_m = " & DTm & " K") + IObj?.Paragraphs.Add("T_{c,m} = " & Tcm & " K") + IObj?.Paragraphs.Add("T_{h,m} = " & Thm & " K") + + '4, 5 + + StInCold.PropertyPackage.CurrentMaterialStream = StInCold + Dim tmp = StInCold.PropertyPackage.CalculateEquilibrium2(FlashCalculationType.PressureTemperature, Pc2, Tc2, 0) + Dim tms As MaterialStream = StInCold.Clone + tms.SetFlowsheet(StInCold.FlowSheet) + tms.Phases(0).Properties.temperature = Tcm + With tms.PropertyPackage + .CurrentMaterialStream = tms + IObj?.SetCurrent() + .DW_CalcEquilibrium(PropertyPackages.FlashSpec.T, PropertyPackages.FlashSpec.P) + If tms.Phases(3).Properties.molarfraction.GetValueOrDefault > 0 Then + IObj?.SetCurrent() + .DW_CalcPhaseProps(PropertyPackages.Phase.Liquid1) + Else + IObj?.SetCurrent() + .DW_ZerarPhaseProps(PropertyPackages.Phase.Liquid1) + End If + If tms.Phases(2).Properties.molarfraction.GetValueOrDefault > 0 Then + IObj?.SetCurrent() + .DW_CalcPhaseProps(PropertyPackages.Phase.Vapor) + Else + .DW_ZerarPhaseProps(PropertyPackages.Phase.Vapor) + End If + If tms.Phases(2).Properties.molarfraction.GetValueOrDefault >= 0 And tms.Phases(2).Properties.molarfraction.GetValueOrDefault <= 1 Then + IObj?.SetCurrent() + .DW_CalcPhaseProps(PropertyPackages.Phase.Liquid) + Else + IObj?.SetCurrent() + .DW_ZerarPhaseProps(PropertyPackages.Phase.Liquid) + End If + IObj?.SetCurrent() + tms.PropertyPackage.DW_CalcPhaseProps(PropertyPackages.Phase.Mixture) + End With + rhoc = tms.Phases(0).Properties.density.GetValueOrDefault + CPC = tms.Phases(0).Properties.heatCapacityCp.GetValueOrDefault + kc = tms.Phases(0).Properties.thermalConductivity.GetValueOrDefault + muc = tms.Phases(1).Properties.viscosity.GetValueOrDefault * tms.Phases(1).Properties.molarfraction.GetValueOrDefault + tms.Phases(2).Properties.viscosity.GetValueOrDefault * tms.Phases(2).Properties.molarfraction.GetValueOrDefault + tms = StInHot.Clone + tms.SetFlowsheet(StInHot.FlowSheet) + tms.Phases(0).Properties.temperature = Thm + tms.PropertyPackage.CurrentMaterialStream = tms + With tms.PropertyPackage + .CurrentMaterialStream = tms + IObj?.SetCurrent() + .DW_CalcEquilibrium(PropertyPackages.FlashSpec.T, PropertyPackages.FlashSpec.P) + If tms.Phases(3).Properties.molarfraction.GetValueOrDefault > 0 Then + IObj?.SetCurrent() + .DW_CalcPhaseProps(PropertyPackages.Phase.Liquid1) + Else + IObj?.SetCurrent() + .DW_ZerarPhaseProps(PropertyPackages.Phase.Liquid1) + End If + If tms.Phases(2).Properties.molarfraction.GetValueOrDefault > 0 Then + IObj?.SetCurrent() + .DW_CalcPhaseProps(PropertyPackages.Phase.Vapor) + Else + IObj?.SetCurrent() + .DW_ZerarPhaseProps(PropertyPackages.Phase.Vapor) + End If + If tms.Phases(2).Properties.molarfraction.GetValueOrDefault >= 0 And tms.Phases(2).Properties.molarfraction.GetValueOrDefault <= 1 Then + IObj?.SetCurrent() + .DW_CalcPhaseProps(PropertyPackages.Phase.Liquid) + Else + IObj?.SetCurrent() + .DW_ZerarPhaseProps(PropertyPackages.Phase.Liquid) + End If + IObj?.SetCurrent() + tms.PropertyPackage.DW_CalcPhaseProps(PropertyPackages.Phase.Mixture) + End With + + rhoh = tms.Phases(0).Properties.density.GetValueOrDefault + CPH = tms.Phases(0).Properties.heatCapacityCp.GetValueOrDefault + kh = tms.Phases(0).Properties.thermalConductivity.GetValueOrDefault + muh = tms.Phases(1).Properties.viscosity.GetValueOrDefault * tms.Phases(1).Properties.molarfraction.GetValueOrDefault + tms.Phases(2).Properties.viscosity.GetValueOrDefault * tms.Phases(2).Properties.molarfraction.GetValueOrDefault + + '6 + Dim pitch As Double, n As Integer + + rt = Tube_Fouling + de = Tube_De / 1000 + di = Tube_Di / 1000 + L = Tube_Length + pitch = Tube_Pitch / 1000 + n = Tube_NumberPerShell + nt = n / Tube_PassesPerShell + A = n * Math.PI * de * (L - 2 * de) + + 'If pitch < de Then Throw New Exception("Invalid input: tube spacing (pitch) is smaller than the tube's external diameter.") + + 'hot + vt = Wh / (rhoh * nt * Math.PI * di ^ 2 / 4) + Ret = rhoh * vt * di / muh + Prt = muh * CPH / kh * 1000 + + IObj?.Paragraphs.Add("Re_{tube} = " & Ret) + IObj?.Paragraphs.Add("Pr_{tube} = " & Prt) + + 'calcular DeltaP + + Dim dpt As Double + 'tube + dpt = 0.0# + Dim fric As Double = 0 + Dim epsilon As Double = Tube_Roughness / 1000 + If Ret > 3250 Then + Dim a1 = Math.Log(((epsilon / di) ^ 1.1096) / 2.8257 + (7.149 / Ret) ^ 0.8961) / Math.Log(10.0#) + Dim b1 = -2 * Math.Log((epsilon / di) / 3.7065 - 5.0452 * a1 / Ret) / Math.Log(10.0#) + fric = (1 / b1) ^ 2 + Else + fric = 64 / Ret + End If + + 'hot + dpt = fric * L * Tube_PassesPerShell / di * vt ^ 2 / 2 * rhoh + + IObj?.Paragraphs.Add("\Delta P_{tube} = " & dpt & " Pa") + + 'tube heat transfer coeff + hi = UnitOperations.Pipe.hint_petukhov(kh, di, fric, Ret, Prt) + + IObj?.Paragraphs.Add("h_{int,tube} = " & hi & " W/[m2.K]") + + 'air heat transfer coeff + Dim he As Double = 0.0 + + 'shell internal diameter + Dim Dsi, Dsf, nsc As Double + + nsc = 1.1 * n ^ 0.5 + + Dsf = (nsc - 1) * pitch + de + Dsi = Dsf / 1.075 + + Dim Gsf, Np, Fp, Ss, Ssf, Cb, Ca, Res, Prs, aa, bb, cc, xx, yy, Nh, Y As Double + xx = Dsi / L + yy = pitch / de + aa = 0.9078565328950694 + bb = 0.66331106126564476 + + cc = -4.4329764639656482 + Nh = aa * xx ^ bb * yy ^ cc + aa = 5.3718559074820611 + bb = -0.33416765138071414 + cc = 0.7267144209289168 + Y = aa * xx ^ bb * yy ^ cc + aa = 0.53807650470841084 + bb = 0.3761125784751041 + cc = -3.8741224386187474 + Np = aa * xx ^ bb * yy ^ cc + + Fp = 1 / (0.8 + Np * (Dsi / pitch) ^ 0.5) + Cb = 0.97 + Ca = Cb * (pitch - de) / pitch + Ss = Ca * L * Dsf + Ssf = Ss / Fp + + Gsf = Wc / Ssf + Res = Gsf * de / muc + Prs = muc * CPC / kc * 1000 + + IObj?.Paragraphs.Add("Re_{ext} = " & Res) + IObj?.Paragraphs.Add("Pr_{ext} = " & Prs) + + 'ho*Do/k = 0.287 * (Do * G / mu) ^ 0.61 * (cp * mu / k) ^ 0.33 * Fa + + Dim G = ActualAirFlow / A * rhoc + + he = (1 / de) * kc * 0.287 * (de * G / muc) ^ 0.61 * (CPC * 1000 * muc / kc) ^ 0.33 + + he = UnitOperations.Pipe.hext_holman(kc, de, Res, Prs) + + IObj?.Paragraphs.Add("h_{ext} = " & he & " W/[m2.K]") + + 'global HTC (U) + Dim kt As Double = Tube_ThermalConductivity + Dim f1, f2, f3, f4, f5 As Double + f1 = de / (hi * di) + f2 = rt * de / di + f3 = de / (2 * kt) * Math.Log(de / di) + f4 = 0.0 + f5 = 1 / he + + U_ant = U + U = f1 + f2 + f3 + f4 + f5 + U = 1 / U + + HeatLoad = U * A * F * LMTD / 1000 + If HeatLoad > MaxHeatExchange Then HeatLoad = MaxHeatExchange + + 'hot + DeltaHc = HeatLoad / Wc + DeltaHh = -HeatLoad / Wh + + Hc2 = Hc1 + DeltaHc + Hh2 = Hh1 + DeltaHh + StInCold.PropertyPackage.CurrentMaterialStream = StInCold + IObj?.SetCurrent() + tmp = StInCold.PropertyPackage.CalculateEquilibrium2(FlashCalculationType.PressureEnthalpy, Pc2, Hc2, Tc2) + Tc2_ant = Tc2 + Tc2 = tmp.CalculatedTemperature + Tc2 = 0.1 * Tc2 + 0.9 * Tc2_ant + StInHot.PropertyPackage.CurrentMaterialStream = StInHot + IObj?.SetCurrent() + tmp = StInHot.PropertyPackage.CalculateEquilibrium2(FlashCalculationType.PressureEnthalpy, Ph2, Hh2, Th2) + Th2_ant = Th2 + Th2 = tmp.CalculatedTemperature + Th2 = 0.1 * Th2 + 0.9 * Th2_ant + + Ph2 = Ph1 - dpt + + OverallUA = U * A + + IObj?.Paragraphs.Add("Q = " & HeatLoad & " kW") + IObj?.Paragraphs.Add("U = " & U & " W/[m2.K]") + IObj?.Paragraphs.Add("A = " & A & " m2") + IObj?.Paragraphs.Add("UA = " & OverallUA & " W/K") + + IObj?.Paragraphs.Add("T_{c,out} = " & Tc2 & " K") + IObj?.Paragraphs.Add("T_{h,out} = " & Th2 & " K") + + Me.LMTD_F = F + fx = Math.Abs((Th2 - Th2_ant) ^ 2 + (Tc2 - Tc2_ant) ^ 2) + + IObj?.Paragraphs.Add("Temperature error = " & fx) + + FlowSheet.CheckStatus() + + icnt += 1 + + PressureDrop = dpt + + AirOutletTemperature = Tc2 + + OutletTemperature = Th2 + + Loop Until fx < 0.01 Or icnt > 100 + + Case CalcMode.SpecifyUA + + Dim Qi, Q_old, PIc1, PIc2, PIh1, PIh2 As Double + Dim NTUh, NTUc, WWh, WWc, RRh, RRc, PPh, PPc As Double + Dim tmp As IFlashCalculationResult + Dim count As Integer + Qi = MaxHeatExchange + Q_old = 10000000000.0 + + If DebugMode Then AppendDebugLine(String.Format("Start with Max Heat Exchange Q = {0} KW", Qi)) + + Do + + If DebugMode Then AppendDebugLine(String.Format("======================================================")) + If DebugMode Then AppendDebugLine(String.Format("Iteration loop: {0}", count)) + + Hc2 = Qi / Wc + Hc1 + Hh2 = Hh1 - Qi / Wh + StInCold.PropertyPackage.CurrentMaterialStream = StInCold + IObj?.SetCurrent() + tmp = StInCold.PropertyPackage.CalculateEquilibrium2(FlashCalculationType.PressureEnthalpy, Pc2, Hc2, Tc2) + Tc2 = tmp.CalculatedTemperature + PIc2 = (1 + tmp.GetLiquidPhase1MoleFraction) * (1 + tmp.GetVaporPhaseMoleFraction * (1 + tmp.GetSolidPhaseMoleFraction)) 'phase indicator cold stream + If DebugMode Then AppendDebugLine(String.Format("Doing a PH flash to calculate cold stream outlet temperature... P = {0} Pa, H = {1} kJ/[kg.K] ===> Tc2 = {2} K", Pc2, Hc2, Tc2)) + + StInHot.PropertyPackage.CurrentMaterialStream = StInHot + IObj?.SetCurrent() + tmp = StInHot.PropertyPackage.CalculateEquilibrium2(FlashCalculationType.PressureEnthalpy, Ph2, Hh2, Th2) + Th2 = tmp.CalculatedTemperature + PIh2 = (1 + tmp.GetLiquidPhase1MoleFraction) * (1 + tmp.GetVaporPhaseMoleFraction * (1 + tmp.GetSolidPhaseMoleFraction)) 'phase indicator hot stream + If DebugMode Then AppendDebugLine(String.Format("Doing a PH flash to calculate hot stream outlet temperature... P = {0} Pa, H = {1} kJ/[kg.K] ===> Th2 = {2} K", Ph2, Hh2, Th2)) + + If Math.Abs((Qi - Q_old) / Q_old) < 0.001 Or count > 100 Then Exit Do + + WWc = Wc * (Hc2 - Hc1) / (Tc2 - Tc1) * 1000 'Heat Capacity Rate cold side + WWh = Wh * (Hh2 - Hh1) / (Th2 - Th1) * 1000 'Heat Capacity Rate hot side + NTUc = OverallUA / WWc 'Numbers of transfer units - cold side + NTUh = OverallUA / WWh 'Numbers of transfer units - hot side + RRc = WWc / WWh 'Heat capacity ratio cold side + RRh = WWh / WWc 'Heat capacity ratio hot side + + If DebugMode Then AppendDebugLine(String.Format("Calculating heat exchanger")) + If DebugMode Then AppendDebugLine(String.Format("Number of Transfer Units - NTU_cold :{0} NTU_hot: {1}", NTUc, NTUh)) + If DebugMode Then AppendDebugLine(String.Format("Heat Capacity Rates - W_cold :{0} W_hot: {1}", WWc, WWh)) + If DebugMode Then AppendDebugLine(String.Format("Heat Capacity Ratios - R_cold :{0} R_hot: {1}", RRc, RRh)) + + PPc = (1 - Math.Exp((RRc - 1) * NTUc)) / (1 - RRc * Math.Exp((RRc - 1) * NTUc)) + PPh = (1 - Math.Exp((RRh - 1) * NTUh)) / (1 - RRh * Math.Exp((RRh - 1) * NTUh)) + + If DebugMode Then AppendDebugLine(String.Format("Dimensionless Temp Change - P_cold :{0} P_hot: {1}", PPc, PPh)) + + If Double.IsNaN(PPc) Then PPc = 0 + If Double.IsNaN(PPh) Then PPh = 0 + Tc2 = Tc1 + PPc * (Th1 - Tc1) + Th2 = Th1 - PPh * (Th1 - Tc1) + If DebugMode Then AppendDebugLine(String.Format("Outlet Temperatures - Tc2 :{0} K Th2: {1} K", Tc2, Th2)) + + If (Th1 - Tc2) / (Th2 - Tc1) = 1 Then + LMTD = ((Th1 - Tc2) + (Th2 - Tc1)) / 2 + Else + LMTD = ((Th1 - Tc2) - (Th2 - Tc1)) / Math.Log((Th1 - Tc2) / (Th2 - Tc1)) + End If + + Q_old = Qi + If LMTD > 0 Then + Qi = OverallUA * LMTD / 1000 + Else + Qi = Wh * (Hh1 - Hh2) + LMTD = Qi / OverallUA * 1000 + End If + + If DebugMode Then + AppendDebugLine(String.Format("Logarithmic Temperature Difference :{0} K", LMTD)) + AppendDebugLine(String.Format("Heat Exchange Q = {0} KW", Qi)) + End If + + count += 1 + + Loop + + If HeatLoad > MaxHeatExchange Then + Throw New Exception("Invalid Outlet Temperature (Heat Exchanged higher than the theoretical maximum)") + End If + + AirOutletTemperature = Tc2 + OutletTemperature = Th2 + + HeatLoad = Qi + + If count > 100 Then Throw New Exception("Reached maximum number of iterations! Final Q change: " & Qi - Q_old & " kW ; " & Math.Abs((Qi - Q_old) / Q_old * 100) & " % ") + + PIc1 = (1 + StInCold.Phases(1).Properties.molarfraction.GetValueOrDefault) * (1 + StInCold.Phases(2).Properties.molarfraction.GetValueOrDefault) * (1 + StInCold.Phases(7).Properties.molarfraction.GetValueOrDefault) + PIh1 = (1 + StInHot.Phases(1).Properties.molarfraction.GetValueOrDefault) * (1 + StInHot.Phases(2).Properties.molarfraction.GetValueOrDefault) * (1 + StInHot.Phases(7).Properties.molarfraction.GetValueOrDefault) + + If (PIc1 = 2 And PIc2 > 2) Or (PIc1 > 2 And PIc2 = 2) Then FlowSheet.ShowMessage(Me.GraphicObject.Tag & ": Phase change in cold stream detected! Heat exchange result is an aproximation.", IFlowsheet.MessageType.Warning) + If (PIh1 = 2 And PIh2 > 2) Or (PIh1 > 2 And PIh2 = 2) Then FlowSheet.ShowMessage(Me.GraphicObject.Tag & ": Phase change in hot stream detected! Heat exchange result is an aproximation.", IFlowsheet.MessageType.Warning) + + End Select + + IObj?.Paragraphs.Add("

Results

") + + IObj?.Paragraphs.Add("T_{c,out} = " & Tc2 & " K") + IObj?.Paragraphs.Add("T_{h,out} = " & Th2 & " K") + IObj?.Paragraphs.Add("P_{c,out} = " & Pc2 & " Pa") + IObj?.Paragraphs.Add("P_{h,out} = " & Ph2 & " Pa") + + IObj?.Paragraphs.Add("Q = " & HeatLoad & " kW") + + IObj?.Paragraphs.Add("U = " & U & " W/[m2.K]") + + IObj?.Paragraphs.Add("\Delta T_{ml} = " & LMTD & " K") + + ExchangerEfficiency = HeatLoad / MaxHeatExchange * 100 + + IObj?.Paragraphs.Add("Q/Q_{max} = " & ExchangerEfficiency & " %") + + 'ElectricalPowerConversionFactor = HeatLoad / ActualFanSpeed + + If Not DebugMode Then + + ElectricalPowerLoad = ElectricalPowerConversionFactor * ActualFanSpeed + + GetInletEnergyStream(1).EnergyFlow = ElectricalPowerLoad + + 'Define new calculated properties. + StOutHot.Phases(0).Properties.temperature = Th2 + StOutCold.Phases(0).Properties.temperature = Tc2 + StOutHot.Phases(0).Properties.pressure = Ph2 + StOutCold.Phases(0).Properties.pressure = Pc2 + StOutHot.Phases(0).Properties.enthalpy = Hh2 + StOutCold.Phases(0).Properties.enthalpy = Hc2 + + If Th2 < Tc1 Or Tc2 > Th1 Then + FlowSheet.ShowMessage(Me.GraphicObject.Tag & ": Temperature Cross", IFlowsheet.MessageType.Warning) + End If + + Else + + AppendDebugLine("Calculation finished successfully.") + + End If + + + + End Sub + + Public Overrides Sub DeCalculate() + + Dim es As EnergyStream + Dim cp As IConnectionPoint + For Each cp In Me.GraphicObject.OutputConnectors + If cp.IsAttached Then + es = FlowSheet.SimulationObjects(cp.AttachedConnector.AttachedTo.Name) + es.EnergyFlow = Nothing + End If + Next + + End Sub + + Public Sub PopulateEditorPanel(ctner As Object) Implements IExternalUnitOperation.PopulateEditorPanel + + Dim container As DynamicLayout = ctner + + Dim su = GetFlowsheet().FlowsheetOptions.SelectedUnitSystem + Dim nf = GetFlowsheet().FlowsheetOptions.NumberFormat + + Dim cmodes As String() = {"Specify Outlet Temperature", "Specify Tube Geometry", "Specify Overall UA"} + + s.CreateAndAddDropDownRow(container, "Calculation Mode", cmodes.ToList, CalculationMode, Sub(dd, e) + CalculationMode = dd.SelectedIndex + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddLabelRow(container, "Main Properties") + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Pressure Drop ({0})", su.deltaP), + PressureDrop.ConvertFromSI(su.deltaP), + Sub(tb, e) + PressureDrop = tb.Text.ParseExpressionToDouble.ConvertToSI(su.deltaP) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Fluid Outlet Temperature ({0})", su.temperature), + OutletTemperature.ConvertFromSI(su.temperature), + Sub(tb, e) + OutletTemperature = tb.Text.ParseExpressionToDouble.ConvertToSI(su.temperature) + End Sub, Sub() FlowSheet.RequestCalculation()) + + Dim tbx = s.CreateAndAddTextBoxRow(container, nf, String.Format("Heat Load ({0})", su.heatflow), + HeatLoad.ConvertFromSI(su.heatflow), + Sub(tb, e) + End Sub, Sub() FlowSheet.RequestCalculation()) + tbx.ReadOnly = True + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Overall UA ({0})", "W/K"), + OverallUA, + Sub(tb, e) + OverallUA = tb.Text.ParseExpressionToDouble + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Air Inlet Temperature ({0})", su.temperature), + AirInletTemperature.ConvertFromSI(su.temperature), + Sub(tb, e) + AirInletTemperature = tb.Text.ParseExpressionToDouble.ConvertToSI(su.temperature) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Air Inlet Pressure ({0})", su.pressure), + AirPressure.ConvertFromSI(su.temperature), + Sub(tb, e) + AirPressure = tb.Text.ParseExpressionToDouble.ConvertToSI(su.pressure) + End Sub, Sub() FlowSheet.RequestCalculation()) + + Dim tbx2 = s.CreateAndAddTextBoxRow(container, nf, String.Format("Air Outlet Temperature ({0})", su.temperature), + AirOutletTemperature.ConvertFromSI(su.temperature), + Sub(tb, e) + AirOutletTemperature = tb.Text.ParseExpressionToDouble.ConvertToSI(su.temperature) + End Sub, Sub() FlowSheet.RequestCalculation()) + tbx2.ReadOnly = True + + Dim tbx3 = s.CreateAndAddTextBoxRow(container, nf, String.Format("Heat Load ({0})", su.heatflow), + HeatLoad.ConvertFromSI(su.heatflow), + Sub(tb, e) + HeatLoad = tb.Text.ParseExpressionToDouble.ConvertToSI(su.heatflow) + End Sub, Sub() FlowSheet.RequestCalculation()) + tbx3.ReadOnly = True + + Dim tbx4 = s.CreateAndAddTextBoxRow(container, nf, String.Format("Maximum Heat Load ({0})", su.heatflow), + MaxHeatExchange.ConvertFromSI(su.heatflow), + Sub(tb, e) + MaxHeatExchange = tb.Text.ParseExpressionToDouble.ConvertToSI(su.heatflow) + End Sub, Sub() FlowSheet.RequestCalculation()) + tbx4.ReadOnly = True + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Exchanger Efficiency ({0})", "%"), + ExchangerEfficiency, + Sub(tb, e) + ExchangerEfficiency = tb.Text.ParseExpressionToDouble + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddLabelRow(container, "Fan Properties") + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Reference Fan Speed ({0})", "rpm"), + ReferenceFanSpeed, + Sub(tb, e) + ReferenceFanSpeed = tb.Text.ParseExpressionToDouble + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Reference Air Flow ({0})", su.volumetricFlow), + ReferenceAirFlow.ConvertFromSI(su.volumetricFlow), + Sub(tb, e) + ReferenceAirFlow = tb.Text.ParseExpressionToDouble.ConvertToSI(su.volumetricFlow) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Actual Fan Speed ({0})", "rpm"), + ActualFanSpeed, + Sub(tb, e) + ActualFanSpeed = tb.Text.ParseExpressionToDouble + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Actual Air Flow ({0})", su.volumetricFlow), + ActualAirFlow.ConvertFromSI(su.volumetricFlow), + Sub(tb, e) + ActualAirFlow = tb.Text.ParseExpressionToDouble.ConvertToSI(su.volumetricFlow) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Electrical Power Conversion Factor ({0})", "kW/rpm"), + ElectricalPowerConversionFactor, + Sub(tb, e) + ElectricalPowerConversionFactor = tb.Text.ParseExpressionToDouble + End Sub, Sub() FlowSheet.RequestCalculation()) + + Dim tbx5 = s.CreateAndAddTextBoxRow(container, nf, String.Format("Electrical Power Load ({0})", su.heatflow), + ElectricalPowerLoad.ConvertFromSI(su.heatflow), + Sub(tb, e) + ElectricalPowerLoad = tb.Text.ParseExpressionToDouble.ConvertToSI(su.heatflow) + End Sub, Sub() FlowSheet.RequestCalculation()) + tbx5.ReadOnly = True + + s.CreateAndAddLabelRow(container, "Tube Properties") + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube Internal Diameter ({0})", su.diameter), + Tube_Di.ConvertFromSI(su.diameter), + Sub(tb, e) + Tube_Di = tb.Text.ParseExpressionToDouble.ConvertToSI(su.diameter) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube External Diameter ({0})", su.diameter), + Tube_De.ConvertFromSI(su.diameter), + Sub(tb, e) + Tube_De = tb.Text.ParseExpressionToDouble.ConvertToSI(su.diameter) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube Length ({0})", su.distance), + Tube_Length.ConvertFromSI(su.distance), + Sub(tb, e) + Tube_Length = tb.Text.ParseExpressionToDouble.ConvertToSI(su.distance) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube Pitch ({0})", su.thickness), + Tube_Pitch.ConvertFromSI(su.thickness), + Sub(tb, e) + Tube_Length = tb.Text.ParseExpressionToDouble.ConvertToSI(su.thickness) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube Fouling Factor ({0})", su.foulingfactor), + Tube_Fouling.ConvertFromSI(su.foulingfactor), + Sub(tb, e) + Tube_Fouling = tb.Text.ParseExpressionToDouble.ConvertToSI(su.foulingfactor) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube Roughness ({0})", su.distance), + Tube_Roughness.ConvertFromSI(su.distance), + Sub(tb, e) + Tube_Roughness = tb.Text.ParseExpressionToDouble.ConvertToSI(su.distance) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube Thermal Conductivity ({0})", su.thermalConductivity), + Tube_ThermalConductivity.ConvertFromSI(su.thermalConductivity), + Sub(tb, e) + Tube_ThermalConductivity = tb.Text.ParseExpressionToDouble.ConvertToSI(su.thermalConductivity) + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Number of Tubes"), + Tube_NumberPerShell, + Sub(tb, e) + Tube_NumberPerShell = tb.Text.ParseExpressionToDouble + End Sub, Sub() FlowSheet.RequestCalculation()) + + s.CreateAndAddTextBoxRow(container, nf, String.Format("Tube Passes"), + Tube_PassesPerShell, + Sub(tb, e) + Tube_PassesPerShell = tb.Text.ParseExpressionToDouble + End Sub, Sub() FlowSheet.RequestCalculation()) + + End Sub + + Private Sub CallSolverIfNeeded() + If GlobalSettings.Settings.CallSolverOnEditorPropertyChanged Then + FlowSheet.RequestCalculation() + End If + End Sub + + Public Overrides Function GetPropertyDescription(p As String) As String + Return p + End Function + + Public Overrides Function GetPropertyValue(ByVal prop As String, Optional ByVal su As Interfaces.IUnitsOfMeasure = Nothing) As Object + + If su Is Nothing Then su = New SystemsOfUnits.SI + + Select Case prop + Case "Pressure Drop" + Return PressureDrop.ConvertFromSI(su.deltaP) + Case "Outlet Temperature" + Return OutletTemperature.ConvertFromSI(su.temperature) + Case "Overall UA" + Return OverallUA + Case "Reference Fan Speed" + Return ReferenceFanSpeed + Case "Reference Air Flow" + Return ReferenceAirFlow.ConvertFromSI(su.volumetricFlow) + Case "Actual Fan Speed" + Return ActualFanSpeed + Case "Actual Air Flow" + Return ActualAirFlow.ConvertFromSI(su.volumetricFlow) + Case "Air Inlet Temperature" + Return AirInletTemperature.ConvertFromSI(su.temperature) + Case "Air Pressure" + Return AirPressure.ConvertFromSI(su.pressure) + Case "Air Outlet Temperature" + Return AirOutletTemperature.ConvertFromSI(su.temperature) + Case "Electrical Power Conversion Factor" + Return ElectricalPowerConversionFactor + Case "Heat Load" + Return HeatLoad.ConvertFromSI(su.heatflow) + Case "Electrical Power Load" + Return ElectricalPowerLoad.ConvertFromSI(su.heatflow) + Case "Tube Internal Diameter" + Return Tube_Di.ConvertFromSI(su.diameter) + Case "Tube External Diameter" + Return Tube_De.ConvertFromSI(su.diameter) + Case "Tube Length" + Return Tube_Length.ConvertFromSI(su.distance) + Case "Tube Pitch" + Return Tube_Pitch.ConvertFromSI(su.thickness) + Case "Tube Fouling" + Return Tube_Fouling.ConvertFromSI(su.foulingfactor) + Case "Tube Passes" + Return Tube_PassesPerShell + Case "Tube Number" + Return Tube_NumberPerShell + Case "Tube Roughness" + Return Tube_Roughness.ConvertFromSI(su.distance) + Case "Tube Thermal Conductivity" + Return Tube_ThermalConductivity.ConvertFromSI(su.thermalConductivity) + Case "Max Heat Exchange" + Return MaxHeatExchange.ConvertFromSI(su.heatflow) + Case "Exchanger Efficiency" + Return ExchangerEfficiency + Case Else + Return 0 + End Select + + End Function + + Public Overloads Overrides Function GetProperties(ByVal proptype As Interfaces.Enums.PropertyType) As String() + + Dim list As New List(Of String) + + list.Add("Pressure Drop") + list.Add("Outlet Temperature") + list.Add("Overall UA") + list.Add("Reference Fan Speed") + list.Add("Reference Air Flow") + list.Add("Actual Fan Speed") + list.Add("Actual Air Flow") + list.Add("Air Inlet Temperature") + list.Add("Air Pressure") + list.Add("Air Outlet Temperature") + list.Add("Electrical Power Conversion Factor") + list.Add("Heat Load") + list.Add("Electrical Power Load") + list.Add("Tube Internal Diameter") + list.Add("Tube External Diameter") + list.Add("Tube Length") + list.Add("Tube Pitch") + list.Add("Tube Fouling") + list.Add("Tube Passes") + list.Add("Tube Number") + list.Add("Tube Roughness") + list.Add("Tube Thermal Conductivity") + list.Add("Max Heat Exchange") + list.Add("Exchanger Efficiency") + + Return list.ToArray + + End Function + + Public Overloads Overrides Function GetDefaultProperties() As String() + + Dim list As New List(Of String) + + list.Add("Outlet Temperature") + list.Add("Overall UA") + list.Add("Heat Load") + list.Add("Electrical Power Load") + list.Add("Actual Air Flow") + list.Add("Air Inlet Temperature") + list.Add("Air Outlet Temperature") + list.Add("Max Heat Exchange") + list.Add("Exchanger Efficiency") + + Return list.ToArray + + End Function + + Public Overrides Function SetPropertyValue(ByVal prop As String, ByVal propval As Object, Optional ByVal su As Interfaces.IUnitsOfMeasure = Nothing) As Boolean + + If su Is Nothing Then su = New SystemsOfUnits.SI + + Select Case prop + Case "Pressure Drop" + PressureDrop = propval.ConvertToSI(su.deltaP) + Case "Outlet Temperature" + OutletTemperature = propval.ConvertToSI(su.temperature) + Case "Overall UA" + OverallUA = propval + Case "Reference Fan Speed" + ReferenceFanSpeed = propval + Case "Reference Air Flow" + ReferenceAirFlow = propval.ConvertToSI(su.volumetricFlow) + Case "Actual Fan Speed" + ActualFanSpeed = propval + Case "Actual Air Flow" + ActualAirFlow = propval.ConvertToSI(su.volumetricFlow) + Case "Air Inlet Temperature" + AirInletTemperature = propval.ConvertToSI(su.temperature) + Case "Air Pressure" + AirPressure = propval.ConvertToSI(su.pressure) + Case "Air Outlet Temperature" + AirOutletTemperature = propval.ConvertToSI(su.temperature) + Case "Electrical Power Conversion Factor" + ElectricalPowerConversionFactor = propval + Case "Heat Load" + HeatLoad = propval.ConvertToSI(su.heatflow) + Case "Electrical Power Load" + ElectricalPowerLoad = propval.ConvertToSI(su.heatflow) + Case "Tube Internal Diameter" + Tube_Di = propval.ConvertToSI(su.diameter) + Case "Tube External Diameter" + Tube_De = propval.ConvertToSI(su.diameter) + Case "Tube Length" + Tube_Length = propval.ConvertToSI(su.distance) + Case "Tube Pitch" + Tube_Pitch = propval.ConvertToSI(su.thickness) + Case "Tube Fouling" + Tube_Fouling = propval.ConvertToSI(su.foulingfactor) + Case "Tube Passes" + Tube_PassesPerShell = propval + Case "Tube Number" + Tube_NumberPerShell = propval + Case "Tube Roughness" + Tube_Roughness = propval.ConvertToSI(su.distance) + Case "Tube Thermal Conductivity" + Tube_ThermalConductivity = propval.ConvertToSI(su.thermalConductivity) + Case "Max Heat Exchange" + MaxHeatExchange = propval.ConvertToSI(su.heatflow) + Case "Exchanger Efficiency" + ExchangerEfficiency = propval + End Select + + Return True + + End Function + + Public Overrides Function GetPropertyUnit(ByVal prop As String, Optional ByVal su As Interfaces.IUnitsOfMeasure = Nothing) As String + + If su Is Nothing Then su = New SystemsOfUnits.SI + + Select Case prop + Case "Pressure Drop" + Return su.deltaP + Case "Outlet Temperature" + Return su.temperature + Case "Overall UA" + Return "W/K" + Case "Reference Fan Speed" + Return "rpm" + Case "Reference Air Flow" + Return su.volumetricFlow + Case "Actual Fan Speed" + Return "rpm" + Case "Actual Air Flow" + Return su.volumetricFlow + Case "Air Inlet Temperature" + Return su.temperature + Case "Air Pressure" + Return su.pressure + Case "Air Outlet Temperature" + Return su.temperature + Case "Electrical Power Conversion Factor" + Return "" + Case "Heat Load" + Return su.heatflow + Case "Electrical Power Load" + Return su.heatflow + Case "Tube Internal Diameter" + Return su.diameter + Case "Tube External Diameter" + Return su.diameter + Case "Tube Length" + Return su.distance + Case "Tube Pitch" + Return su.thickness + Case "Tube Fouling" + Return su.foulingfactor + Case "Tube Passes" + Return "" + Case "Tube Number" + Return "" + Case "Tube Roughness" + Return su.distance + Case "Tube Thermal Conductivity" + Return su.thermalConductivity + Case "Max Heat Exchange" + Return su.heatflow + Case "Exchanger Efficiency" + Return "%" + Case Else + Return "" + End Select + + End Function + + Public Overrides Function GetReport(su As IUnitsOfMeasure, ci As Globalization.CultureInfo, numberformat As String) As String + + Dim str As New Text.StringBuilder + + Dim istr, ostr As MaterialStream + istr = Me.GetInletMaterialStream(0) + ostr = Me.GetOutletMaterialStream(0) + + istr.PropertyPackage.CurrentMaterialStream = istr + + str.AppendLine("Air Cooler: " & Me.GraphicObject.Tag) + str.AppendLine("Property Package: " & Me.PropertyPackage.ComponentName) + str.AppendLine() + str.AppendLine("Inlet conditions") + str.AppendLine() + str.AppendLine(" Temperature: " & SystemsOfUnits.Converter.ConvertFromSI(su.temperature, istr.Phases(0).Properties.temperature.GetValueOrDefault).ToString(numberformat, ci) & " " & su.temperature) + str.AppendLine(" Pressure: " & SystemsOfUnits.Converter.ConvertFromSI(su.pressure, istr.Phases(0).Properties.pressure.GetValueOrDefault).ToString(numberformat, ci) & " " & su.pressure) + str.AppendLine(" Mass flow: " & SystemsOfUnits.Converter.ConvertFromSI(su.massflow, istr.Phases(0).Properties.massflow.GetValueOrDefault).ToString(numberformat, ci) & " " & su.massflow) + str.AppendLine(" Volumetric flow: " & SystemsOfUnits.Converter.ConvertFromSI(su.volumetricFlow, istr.Phases(0).Properties.volumetric_flow.GetValueOrDefault).ToString(numberformat, ci) & " " & su.volumetricFlow) + str.AppendLine(" Vapor fraction: " & istr.Phases(2).Properties.molarfraction.GetValueOrDefault.ToString(numberformat, ci)) + str.AppendLine(" Compounds: " & istr.PropertyPackage.RET_VNAMES.ToArrayString) + str.AppendLine(" Molar composition: " & istr.PropertyPackage.RET_VMOL(PropertyPackages.Phase.Mixture).ToArrayString()) + str.AppendLine() + str.AppendLine("Results") + str.AppendLine() + str.AppendLine(" Pressure drop: " & SystemsOfUnits.Converter.ConvertFromSI(su.pressure, Me.PressureDrop).ToString(numberformat, ci) & " " & su.deltaP) + str.AppendLine(" Fluid outlet temperature: " & SystemsOfUnits.Converter.ConvertFromSI(su.temperature, Me.OutletTemperature).ToString(numberformat, ci) & " " & su.temperature) + str.AppendLine(" Air outlet temperature: " & SystemsOfUnits.Converter.ConvertFromSI(su.temperature, Me.AirOutletTemperature).ToString(numberformat, ci) & " " & su.temperature) + str.AppendLine(" Heat load: " & SystemsOfUnits.Converter.ConvertFromSI(su.heatflow, Me.HeatLoad).ToString(numberformat, ci) & " " & su.heatflow) + + Return str.ToString + + End Function + + Public Overrides Function GetStructuredReport() As List(Of Tuple(Of ReportItemType, String())) + + Dim su As IUnitsOfMeasure = GetFlowsheet().FlowsheetOptions.SelectedUnitSystem + Dim nf = GetFlowsheet().FlowsheetOptions.NumberFormat + + Dim list As New List(Of Tuple(Of ReportItemType, String())) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.Label, New String() {"Results Report for Air Cooler '" & Me.GraphicObject.Tag + "'"})) + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.SingleColumn, New String() {"Calculated successfully on " & LastUpdated.ToString})) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.Label, New String() {"Calculation Parameters"})) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.DoubleColumn, + New String() {"Calculation Mode", + CalculationMode.ToString})) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.Label, New String() {"Results"})) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.TripleColumn, + New String() {"Pressure Drop", + Me.PressureDrop.ConvertFromSI(su.deltaP).ToString(nf), + su.deltaP})) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.TripleColumn, + New String() {"Fluid Outlet Temperature", + Me.OutletTemperature.ConvertFromSI(su.temperature).ToString(nf), + su.temperature})) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.TripleColumn, + New String() {"Air Outlet Temperature", + Me.AirOutletTemperature.ConvertFromSI(su.temperature).ToString(nf), + su.temperature})) + + list.Add(New Tuple(Of ReportItemType, String())(ReportItemType.TripleColumn, + New String() {"Heat Load", + Me.HeatLoad.ConvertFromSI(su.heatflow).ToString(nf), + su.heatflow})) + + Return list + + End Function + + +End Class + +End Namespace diff --git a/DWSIM.UnitOperations/UnitOperations/CleanEnergy/CleanEnergyUnitOpBase.vb b/DWSIM.UnitOperations/UnitOperations/CleanEnergy/CleanEnergyUnitOpBase.vb new file mode 100644 index 000000000..77f515847 --- /dev/null +++ b/DWSIM.UnitOperations/UnitOperations/CleanEnergy/CleanEnergyUnitOpBase.vb @@ -0,0 +1,77 @@ +Imports DWSIM.Interfaces +Imports DWSIM.Interfaces.Enums + +Namespace UnitOperations + + Public MustInherit Class CleanEnergyUnitOpBase + + Inherits DWSIM.UnitOperations.UnitOperations.UnitOpBaseClass + + Implements DWSIM.Interfaces.IExternalUnitOperation + + Public Overrides ReadOnly Property IsSource As Boolean + Get + Return True + End Get + End Property + + Private _name = "" + Private _desc = "" + + Public Overrides Function GetDisplayName() As String + Return _name + End Function + + Public Overrides Function GetDisplayDescription() As String + Return _desc + End Function + + Public Overrides Property ComponentName As String = _name + + Public Overrides Property ComponentDescription As String = _desc + + Private ReadOnly Property IExternalUnitOperation_Name As String = _name Implements IExternalUnitOperation.Name + + Public MustOverride Property Prefix As String Implements IExternalUnitOperation.Prefix + + Public ReadOnly Property Description As String = _desc Implements IExternalUnitOperation.Description + + Public Overrides Property ObjectClass As SimulationObjectClass = SimulationObjectClass.CleanPowerSources + + Public Overrides ReadOnly Property MobileCompatible As Boolean = False + + Public MustOverride Function ReturnInstance(typename As String) As Object Implements IExternalUnitOperation.ReturnInstance + + Public MustOverride Sub Draw(g As Object) Implements IExternalUnitOperation.Draw + + Public MustOverride Sub CreateConnectors() Implements IExternalUnitOperation.CreateConnectors + + Public Sub New(ByVal Name As String, ByVal Description As String) + + MyBase.CreateNew() + Me.ComponentName = Name + Me.ComponentDescription = Description + + End Sub + + Public Sub New() + + MyBase.New() + + End Sub + + Public Overrides Sub PerformPostCalcValidation() + + End Sub + + Public MustOverride Sub PopulateEditorPanel(ctner As Object) Implements IExternalUnitOperation.PopulateEditorPanel + + Private Sub CallSolverIfNeeded() + If GlobalSettings.Settings.CallSolverOnEditorPropertyChanged Then + FlowSheet.RequestCalculation() + End If + End Sub + + End Class + +End Namespace diff --git a/DWSIM.UnitOperations/UnitOperations/Electrolyzers/PEMElectrolyzerBase.vb b/DWSIM.UnitOperations/UnitOperations/Electrolyzers/PEMElectrolyzerBase.vb new file mode 100644 index 000000000..eb4610325 --- /dev/null +++ b/DWSIM.UnitOperations/UnitOperations/Electrolyzers/PEMElectrolyzerBase.vb @@ -0,0 +1,79 @@ + +Imports DWSIM.Interfaces.Enums + +Namespace UnitOperations + + Public MustInherit Class PEMElectrolyzerUnitOpBase + + Inherits DWSIM.UnitOperations.UnitOperations.UnitOpBaseClass + + Implements DWSIM.Interfaces.IExternalUnitOperation + + Public Overrides ReadOnly Property IsSource As Boolean + Get + Return True + End Get + End Property + + Private _name = "" + Private _desc = "" + + Public Overrides Function GetDisplayName() As String + Return _name + End Function + + Public Overrides Function GetDisplayDescription() As String + Return _desc + End Function + + Public Overrides Property ComponentName As String = _name + + Public Overrides Property ComponentDescription As String = _desc + + Private ReadOnly Property IExternalUnitOperation_Name As String = _name Implements IExternalUnitOperation.Name + + Public MustOverride Property Prefix As String Implements IExternalUnitOperation.Prefix + + Public ReadOnly Property Description As String = _desc Implements IExternalUnitOperation.Description + + Public Overrides Property ObjectClass As SimulationObjectClass = SimulationObjectClass.CleanPowerSources + + Public Overrides ReadOnly Property MobileCompatible As Boolean = False + + Public MustOverride Function ReturnInstance(typename As String) As Object Implements IExternalUnitOperation.ReturnInstance + + Public MustOverride Sub Draw(g As Object) Implements IExternalUnitOperation.Draw + + Public MustOverride Sub CreateConnectors() Implements IExternalUnitOperation.CreateConnectors + + Public Sub New(ByVal Name As String, ByVal Description As String) + + MyBase.CreateNew() + Me.ComponentName = Name + Me.ComponentDescription = Description + + End Sub + + Public Sub New() + + MyBase.New() + + End Sub + + Public Overrides Sub PerformPostCalcValidation() + + End Sub + + Public MustOverride Sub PopulateEditorPanel(ctner As Object) Implements IExternalUnitOperation.PopulateEditorPanel + + Private Sub CallSolverIfNeeded() + If GlobalSettings.Settings.CallSolverOnEditorPropertyChanged Then + FlowSheet.RequestCalculation() + End If + End Sub + + End Class + + +End Namespace + diff --git a/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.en.resx b/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.en.resx index 53beaa756..b8445bc81 100644 --- a/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.en.resx +++ b/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.en.resx @@ -286,16 +286,16 @@ iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIPSURBVEhL7ZE/aBNRHMcziLuLgULb5OKke72zB4oIgkun - rHYSUYRMTVAsgjg4OKjNnYOLhLo4WFARQpAzIW1Ken/acJfcy70DCx21pjmXYODne+XOyOWdMbbd+oEv - 78G73+f37v1ixxwaqnteVB2hpGHe1Rz+me7yV0zz7En/+P8ZiAUIp45mdsn6Rnf4641t8ZRf8m/8TcwM - mulrbaFK9jnDmT3na4YZWxwOaUKfz9cNODJxQB2JnIqFDG1Sx0KPKWFllJgFHRhplFYxX6hsXfZY4ofv - 78GZrNKfyG5ZCfnH/JTcGW/IXL4rxu/b6PTNCqSyZZiTl+Fl+QY8eLcIqYUKxO/UYPLRF0hKXUjKHiSX - Ov2E5FUTUjeXynvRQ6bi6fxeab+IRtqDycc7MHHXhPjttd/ihOyLQ6FNyDr8ZENiViSaMcUB5A058lGG - NpnKd3phQVRGilnQgZGiNLltgXvR9f4UBrm6/A2efmz+LK4a1kYTzzca2+MNedN2RaWuoRWlBs+LFtx6 - uwMXXn2Ha6+/wlLRhA/ldajqJhgtBwwbg2Ghvma1q2SfMywneshUTIpK+0UkOhGsbVrwaV0n0tpA7J+H - Q5voyB1+srA4MsGNQ4kUBzQQ4vQWztAmqo17LAkrI8Us6MAM20kbLVxQbbR7aGIWiqKcIH91iUifqHYb - kfWz3mxf9I+POSix2C/pbepL8lj/ngAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIPSURBVEhL7ZE/iNNQHMc7iLuLhYNq/zjpfJhoQBFBcHHq + 6k3HoQidbFEUQRwcHPRs4uAi5VwcFPQcSjliS72ebZrUkrTvNS/gwY169RqXYuHne0diJX2xVs/tPvDl + PXj5fX4v7xfZZ8/QnJOSZoulJhGcpi080h3hvGkeP+gd/z1jsQjB1PH8Nl1f6LZwub0pHfJK/ozfiblB + 86NmT6zSfc6wT5/wNJPMLA6GNmHP5+nG/DexTx1LSY2IGdbkAxGHXAkv08Q82MBoo7RGhEKldc7lie++ + uQnHsupoLvvRiivfFo4oX2cbcjI/kKK3ED68VIFUtgyXlBV4Wl6EO69vQ+p6BaLXahC79wkS8gASiguJ + 5f4oLrvVuDzIpfJu+JCZ+Gh+p7RbxCLvQOz+FszdMCF6df2nOK544kBYE7pOPtmEmBeZZUaxD33DJP0o + w5rE8v1hUBCWqWIebGC0KE1vW0g8Gbi/Cv1cWPkCD992vhffG1ajQxba7c3ZhtxCjqTWNfxKrcFy0YIr + L7fg1LM+XHz+GR4XTVgtb0BVN8Ho2mAgAoaJRk2rV6X7nGHZ4UNmYlpU2i2i0algvWXB2oZOpbWx2DsP + hjXRsTP5ZEFxaPwbBxIq9mljnNS7JMOaNBAZ8iS8TBXzYAMzkJ02uqTQQHh7z8Q8VFU9QP/qLJU+0FAP + 0/Wd3umd8Y73+VcikR+h3eo7YxH4agAAAABJRU5ErkJggg== @@ -307,32 +307,32 @@ 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 - qf8AcF7XQTki50QAAAAASUVORK5CYII= + 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 + CIIgxJxE4j8QV9ch5FNr6wAAAABJRU5ErkJggg== diff --git a/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.resx b/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.resx index 6157e680c..84c073d61 100644 --- a/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.resx +++ b/DWSIM/Forms/FlowsheetComponents/FlowsheetSurfaceSkiaSharp/FlowsheetSurface_SkiaSharp.resx @@ -130,9 +130,6 @@ Conectar a... - - SplitContainerHorizontal - 1 @@ -222,9 +219,6 @@ 338, 22 - - 120, 24 - 100% @@ -261,8 +255,8 @@ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Live Flow + + Inserir Figura 33, 290 @@ -288,6 +282,9 @@ 23, 22 + + False + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -300,9 +297,6 @@ 317 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ToolStripSeparator14 @@ -381,8 +375,8 @@ 23, 22 - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ToolStripMenuItem6 Inserir Caixa de Texto @@ -462,6 +456,9 @@ True + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ToolStripMenuItem1 @@ -510,6 +507,9 @@ 40, 27 + + ToolStripContainer1 + HorizontalmenteToolStripMenuItem @@ -552,6 +552,9 @@ Dock Top + + designSurfacePrintDocument + DesconectarDeToolStripMenuItem @@ -567,9 +570,6 @@ tsbControlPanelMode - - 96 - ToolStripSeparator5 @@ -609,6 +609,9 @@ 196, 22 + + 23, 22 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -624,9 +627,6 @@ False - - SplitToolStripMenuItem - UpgradeDistillationColumnToProToolStripMenuItem @@ -663,6 +663,9 @@ tssepPro2 + + Live Flow + ToolStripButton3 @@ -681,15 +684,15 @@ 116, 22 + + ToolStripLabel1 + Magenta False - - 197, 224 - Magenta @@ -711,8 +714,8 @@ 23, 22 - - Tamanho do Texto + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 @@ -729,6 +732,9 @@ ToolStripButton17 + + System.Windows.Forms.PrintPreviewDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -744,8 +750,8 @@ tsbAlignVertical - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -762,9 +768,6 @@ System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - DockTopToolStripMenuItem - 96, 96 @@ -780,6 +783,9 @@ Clonar + + 0, 0, 0, 0 + Mostrar Grid de Encaixe @@ -804,9 +810,6 @@ Flat - - 3, 0 - Desconectar de... @@ -837,8 +840,8 @@ 6, 25 - - ToolStripMenuItem6 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 23, 22 @@ -891,8 +894,8 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - SplitAndInsertValveTSMI + + 2 Document @@ -900,12 +903,12 @@ 6, 25 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6, 27 + 3 @@ -954,6 +957,9 @@ System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ToolStripMenuItem13 + Segoe UI, 9pt @@ -990,9 +996,6 @@ False - - Dock Right Auto-Hide - Dock Bottom @@ -1104,6 +1107,9 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Misturar Correntes + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m @@ -1119,9 +1125,6 @@ srDnTkDWX/RpuzlDyY7pAAAAAElFTkSuQmCC - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 24, 251 @@ -1167,15 +1170,15 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - LayoutAutomaticoToolStripMenuItem - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tbFontSize + + tsmiLiveFlow + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1233,9 +1236,6 @@ Configurar Página - - 2 - tsbPrint @@ -1287,6 +1287,9 @@ Right + + 1 + False @@ -1326,8 +1329,8 @@ 998, 417 - - 6, 25 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ToolStripButton19 @@ -1380,12 +1383,12 @@ Ativar Modo de Multiseleção - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + False + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1440,11 +1443,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3 - - - 0, 0, 0, 0 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 932, 24 @@ -1476,8 +1476,8 @@ Alinhar centros - - System.Windows.Forms.PrintPreviewDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + SplitToolStripMenuItem ToolStripContainer1 @@ -1485,11 +1485,8 @@ 0 - - 1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ToolStripSeparator18 Fluxograma @@ -1503,6 +1500,9 @@ Alinhar direitas + + Fill + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1515,8 +1515,8 @@ 196, 22 - - False + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Fill @@ -1539,6 +1539,9 @@ Magenta + + Dividir Corrente e Inserir Reciclo + 183, 24 @@ -1617,9 +1620,6 @@ 121, 23 - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1671,6 +1671,9 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 338, 22 @@ -1719,8 +1722,8 @@ Magenta - - tsbAlignMiddles + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Heatmap Layers @@ -1803,12 +1806,6 @@ 140, 27 - - ToolStripSeparator18 - - - Copiar como Imagem (300%) - 338, 22 @@ -1830,8 +1827,8 @@ Fill - - Inserir Figura + + Tamanho do Texto 3 @@ -1851,14 +1848,14 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ToolStripLabel1 + + Dock Right Auto-Hide Magenta - - Dividir Corrente e Inserir Reciclo + + 120, 24 SplitContainerVertical.Panel1 @@ -1905,6 +1902,9 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tsbAlignMiddles + 0, 0 @@ -2001,8 +2001,11 @@ DepurarObjetoToolStripMenuItem - - Fill + + False + + + SplitAndInsertValveTSMI tsbAlignCenters @@ -2010,7 +2013,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vQAADr0BR/uQrQAAAgNJREFUOE+lkutLk2EYxvePhJaHShFBUTEPiCieQOmDiEZgrEbpYGiCQxkqA80I + vAAADrwBlbxySQAAAgNJREFUOE+lkutLk2EYxvePhJaHShFBUTEPiCieQOmDiEZgrEbpYGiCQxkqA80I RUkUEZ0YRMS+DDI70MkTmzJnDc8iU8QT2mAEItnle90wHwTDyBduXnie5/rd133Q4ZKfAJqHFs9E08A8 zD1emDpmYXjqRlnTFIrMk8iuGkNaxWekGEaQrHecBfw+/vPXODw6hj9whN2fh/Bt/8LSRgA3cxr/DeBZ 9kvmTNMoHGNbIrYN+3Aj23IxgJkpds0doP3VstgmsNexhutZ9QrAms8T0zYzU5xXM46kcjsmvfvoeL2i @@ -2140,17 +2143,14 @@ 998, 417 - - None + + ToolStripMenuItem12 System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + DockTopToolStripMenuItem System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2209,11 +2209,11 @@ DockTopAutoHideToolStripMenuItem - - 23, 22 + + LayoutAutomaticoToolStripMenuItem - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + None 196, 22 @@ -2230,11 +2230,11 @@ System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ToolStripContainer1 + + SplitContainerHorizontal - - designSurfacePrintDocument + + 96 0 @@ -2251,8 +2251,8 @@ 335, 6 - - ToolStripMenuItem12 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ToolStripButton20 @@ -2278,14 +2278,14 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 27 + + 3 Magenta - - tsmiLiveFlow + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 False @@ -2305,8 +2305,8 @@ 335, 6 - - Misturar Correntes + + Copiar como Imagem (300%) 338, 22 @@ -2314,14 +2314,14 @@ False - - ToolStripMenuItem13 + + 6, 25 0, 0 - - System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 197, 224 tsbDisplayGrid @@ -2332,8 +2332,8 @@ Manter aspecto - - False + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ToolStripSeparator12 @@ -2362,8 +2362,8 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - False + + 3, 0 23, 22 diff --git a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.Designer.vb b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.Designer.vb index fc5d5dadc..3fef745ab 100644 --- a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.Designer.vb +++ b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.Designer.vb @@ -42,7 +42,8 @@ Partial Class SimulationObjectsPanel Me.TabPage8 = New System.Windows.Forms.TabPage() Me.PanelSolids = New System.Windows.Forms.FlowLayoutPanel() Me.TabPage9 = New System.Windows.Forms.TabPage() - Me.PanelCO = New System.Windows.Forms.FlowLayoutPanel() + Me.PanelCE = New System.Windows.Forms.FlowLayoutPanel() + Me.TabPage15 = New System.Windows.Forms.TabPage() Me.TabPage10 = New System.Windows.Forms.TabPage() Me.PanelUser = New System.Windows.Forms.FlowLayoutPanel() Me.TabPage11 = New System.Windows.Forms.TabPage() @@ -53,6 +54,7 @@ Partial Class SimulationObjectsPanel Me.PanelControllers = New System.Windows.Forms.FlowLayoutPanel() Me.TabPage12 = New System.Windows.Forms.TabPage() Me.PanelOther = New System.Windows.Forms.FlowLayoutPanel() + Me.PanelELEC = New System.Windows.Forms.FlowLayoutPanel() Me.TabControl1.SuspendLayout() Me.TabPage1.SuspendLayout() Me.TabPage2.SuspendLayout() @@ -63,6 +65,7 @@ Partial Class SimulationObjectsPanel Me.TabPage7.SuspendLayout() Me.TabPage8.SuspendLayout() Me.TabPage9.SuspendLayout() + Me.TabPage15.SuspendLayout() Me.TabPage10.SuspendLayout() Me.TabPage11.SuspendLayout() Me.TabPage13.SuspendLayout() @@ -87,6 +90,7 @@ Partial Class SimulationObjectsPanel Me.TabControl1.Controls.Add(Me.TabPage7) Me.TabControl1.Controls.Add(Me.TabPage8) Me.TabControl1.Controls.Add(Me.TabPage9) + Me.TabControl1.Controls.Add(Me.TabPage15) Me.TabControl1.Controls.Add(Me.TabPage10) Me.TabControl1.Controls.Add(Me.TabPage11) Me.TabControl1.Controls.Add(Me.TabPage13) @@ -189,14 +193,21 @@ Partial Class SimulationObjectsPanel 'TabPage9 ' resources.ApplyResources(Me.TabPage9, "TabPage9") - Me.TabPage9.Controls.Add(Me.PanelCO) + Me.TabPage9.Controls.Add(Me.PanelCE) Me.TabPage9.Name = "TabPage9" Me.TabPage9.UseVisualStyleBackColor = True ' - 'PanelCO + 'PanelCE ' - resources.ApplyResources(Me.PanelCO, "PanelCO") - Me.PanelCO.Name = "PanelCO" + resources.ApplyResources(Me.PanelCE, "PanelCE") + Me.PanelCE.Name = "PanelCE" + ' + 'TabPage15 + ' + resources.ApplyResources(Me.TabPage15, "TabPage15") + Me.TabPage15.Controls.Add(Me.PanelELEC) + Me.TabPage15.Name = "TabPage15" + Me.TabPage15.UseVisualStyleBackColor = True ' 'TabPage10 ' @@ -258,11 +269,15 @@ Partial Class SimulationObjectsPanel resources.ApplyResources(Me.PanelOther, "PanelOther") Me.PanelOther.Name = "PanelOther" ' + 'PanelELEC + ' + resources.ApplyResources(Me.PanelELEC, "PanelELEC") + Me.PanelELEC.Name = "PanelELEC" + ' 'SimulationObjectsPanel ' resources.ApplyResources(Me, "$this") Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi -Me.AutoScaleDimensions = New System.Drawing.SizeF(96, 96) Me.BackColor = System.Drawing.Color.White Me.Controls.Add(Me.TabControl1) Me.Name = "SimulationObjectsPanel" @@ -276,6 +291,7 @@ Me.AutoScaleDimensions = New System.Drawing.SizeF(96, 96) Me.TabPage7.ResumeLayout(False) Me.TabPage8.ResumeLayout(False) Me.TabPage9.ResumeLayout(False) + Me.TabPage15.ResumeLayout(False) Me.TabPage10.ResumeLayout(False) Me.TabPage11.ResumeLayout(False) Me.TabPage13.ResumeLayout(False) @@ -305,7 +321,7 @@ Me.AutoScaleDimensions = New System.Drawing.SizeF(96, 96) Friend WithEvents PanelReactors As FlowLayoutPanel Friend WithEvents PanelColumns As FlowLayoutPanel Friend WithEvents PanelSolids As FlowLayoutPanel - Friend WithEvents PanelCO As FlowLayoutPanel + Friend WithEvents PanelCE As FlowLayoutPanel Friend WithEvents PanelUser As FlowLayoutPanel Friend WithEvents PanelLogical As FlowLayoutPanel Friend WithEvents PanelOther As FlowLayoutPanel @@ -313,4 +329,6 @@ Me.AutoScaleDimensions = New System.Drawing.SizeF(96, 96) Friend WithEvents PanelIndicators As FlowLayoutPanel Friend WithEvents TabPage14 As TabPage Friend WithEvents PanelControllers As FlowLayoutPanel + Friend WithEvents TabPage15 As TabPage + Friend WithEvents PanelELEC As FlowLayoutPanel End Class diff --git a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.en.resx b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.en.resx index a0d9be412..c95c1571a 100644 --- a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.en.resx +++ b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.en.resx @@ -126,15 +126,12 @@ 7, 6, 7, 6 - 1944, 216 + 1952, 238 True - - 8, 40 - 7, 6, 7, 6 @@ -142,7 +139,7 @@ 7, 6, 7, 6 - 1958, 228 + 1966, 250 Streams @@ -154,14 +151,11 @@ 7, 6, 7, 6 - 1944, 176 + 1952, 238 True - - 8, 40 - 7, 6, 7, 6 @@ -169,7 +163,7 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 Pressure Changers @@ -178,19 +172,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Separators/Tanks @@ -199,19 +190,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Mixers/Splitters @@ -220,19 +208,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Exchangers @@ -241,19 +226,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Reactors @@ -262,19 +244,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Columns @@ -283,58 +262,79 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Solids - - 7, 6, 7, 6 + + True - - 1958, 188 + + Fill - - True + + 7, 6, 7, 6 - - 8, 40 + + 1966, 250 7, 6, 7, 6 - 1958, 188 + 1966, 250 + + + Clean Energy + + + True + + + Fill + + + 0, 0 + + + 7, 6, 7, 6 + + + 1966, 250 + + + 5 + + + 1966, 250 + + + Electrolyzers 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 User Models @@ -343,19 +343,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Logical Blocks @@ -364,19 +361,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Indicators @@ -385,19 +379,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Controllers @@ -406,19 +397,16 @@ 7, 6, 7, 6 - 1958, 188 + 1966, 250 True - - 8, 40 - 7, 6, 7, 6 - 1958, 188 + 1966, 250 Other @@ -429,9 +417,6 @@ 1974, 276 - - 13, 26 - 7, 6, 7, 6 diff --git a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.resx b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.resx index 8c3350555..880399b35 100644 --- a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.resx +++ b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.resx @@ -117,809 +117,869 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6 + + Energia Limpa + + + + 1109, 137 - - True + + False - - Separadores/Tanques + + 4, 22 - - 9 + + 1109, 137 - - False + + 11 - - 4 + + 0 - - 4 + + 1109, 137 - - - 4, 22 + + 0 - - PanelMixers + + 0, 0 - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + False - - 903, 92 + + PanelPressure - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - 903, 92 + + 3 - - TabPage4 + + TabPage8 - - TabControl1 + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Indicadores + + 3 - - 0 + + True - + 0 - - CAPE-OPEN - - - 903, 92 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Fill - - 3 + + TabControl1 - - 13 + + 0 - - 903, 92 + + Eletrolisadores - - PanelReactors + + Fill - - 0, 0 + + TabControl1 TabControl1 - - 0, 0 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - TabPage11 + + 4, 22 - + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 14 + + + Fill + + 3 - - 903, 92 + + 0, 0 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + TabPage10 - + + Pressão + + + 4, 22 + + 0 - - TabPage13 + + PanelExchangers - - TabPage1 + + Fill - - 0 + + PanelSeparators - - 903, 92 + + TabControl1 - - 903, 92 + + Fill - - 3, 3, 3, 3 + + TabPage12 - - PanelPressure + + 4 - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - Fill + + 3, 3 - - Outros + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + 0, 0 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 903, 92 + + TabPage12 - - 0 + + 3 - - True + + 3, 3 - - 903, 92 + + 3 - - TabPage9 + + 1109, 137 - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 12 - - False + + TabPage7 - - Fill + + TabPage10 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1117, 163 - - 903, 92 + + Outros - - True + + 11 - + True - - 0 + + Térmicos - - TabControl1 + + True - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + SimulationObjectsPanel - - TabPage5 + + PanelELEC - - 3, 3, 3, 3 + + 0 - - 0, 0 + + 0 - - 96, 96 + + PanelOther - - 903, 92 + + 7 - - 0, 0 + + 1109, 137 - + + TabControl1 + + False - - Fill + + 0 - - TabPage12 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 TabControl1 - - TabPage6 + + True - - TabPage6 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fill + + 1109, 137 - - 897, 86 + + 3 - - False + + 4, 22 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6 - - 8 + + 0, 0 - - 1 + + TabControl1 - + Fill - - TabControl1 + + 4 - - TabPage12 + + 10 - + False - - 10 + + False - - 0 + + TabPage9 - - 2 + + 4 - - TabPage1 + + 4, 22 - - False + + 1109, 137 - - 3 + + 10 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1109, 137 - - Misturadores/Divisores + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 0 - - PanelControllers + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - TabPage2 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 PanelStreams - - TabControl1 + + 5 - + + Usuário/CAPE-OPEN + + + 1109, 137 + + + 0 + + + 1103, 131 + + 4, 22 - - 12 + + 0, 0 + + + PanelCE + + + 5 4, 22 - - False + + TabPage8 - - Térmicos + + 8 - - True + + Microsoft Sans Serif, 8.25pt - - True + + 0 - + + TabPage9 + + + PanelControllers + + + 4 + + TabControl1 - - 897, 86 + + 3, 3, 3, 3 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1103, 131 - - SimulationObjectsPanel + + False - + + 5 + + + 1109, 137 + + Fill - + False - - TabPage7 - - + 3 - - TabControl1 + + 96, 96 - + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 + + 1109, 137 - - 903, 92 + + 3 - - 5 + + PanelMixers - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this - - 903, 92 + + 1109, 137 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - 10 + + True - - 11 + + Sólidos - - Reatores + + 2 - - 4 + + 1109, 137 - + 4, 22 - - False + + TabPage13 - - Fill + + 2 - - True + + Misturadores/Divisores - - Fill + + 1 - + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 903, 92 + + Reatores - - 0 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 9 - - TabPage14 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 3 + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4, 22 + + True - - TabControl1 + + 4 TabPage3 - - 3 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 2 - - 4, 22 + + 12 - - TabControl1 + + TabPage5 - - 3 + + 1117, 163 - - 0 + + 0, 0 - - False + + True - + TabControl1 - - TabPage4 + + 1 - - PanelCO + + 3 - - PanelLogical + + Separadores/Tanques - - 0 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 903, 92 + + TabPage11 - - Microsoft Sans Serif, 8.25pt + + 14 - - 8 + + TabPage5 - + + 4, 22 + + TabPage14 - - 13 + + False - - TabPage11 + + Colunas - - True + + 0, 0 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1109, 137 - - Controladores + + 0, 0 - - TabPage10 + + TabPage3 - - Fill + + False - - 0 + + TabPage4 - - 0, 0 + + 1109, 137 - - 4, 22 + + 1109, 137 - - 0, 0 + + True - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + TabPage2 - - 0, 0 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - TabPage5 + + TabPage2 - - TabControl1 + + 3 - + + False + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - + False - - 911, 118 + + 4 - - 4, 22 + + PanelReactors - + True - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1109, 137 - - PanelOther + + 0, 0 - - TabPage10 + + 0, 0 - - 4, 22 + + 3, 3, 3, 3 - + TabControl1 - - 903, 92 - - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1109, 137 - - TabControl1 + + True - - $this + + TabPage1 - - Sólidos + + 6 - - TabPage9 + + Fill - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - Colunas + + 6 - - 3, 3 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 903, 92 + + PanelIndicators - - 4, 22 + + 0, 0 - + 0 - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + PanelUser - - 3 + + 4, 22 - - 0 + + TabPage1 - - Pressão + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True + + TabPage4 - - 4 + + 7 - - PanelColumns + + TabPage9 - - 903, 92 + + Fill - - PanelIndicators + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Correntes + + 13 - - True + + TabPage6 - - 903, 92 + + Fill - - TabPage8 + + 4, 22 - + Fill - - 0 + + Fill - - 0, 0 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 903, 92 + + 0 - + + 1109, 137 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fill + + 13 - - 2 + + 1109, 137 - - 4, 22 + + TabPage15 - - 2 + + 1109, 137 - - TabPage3 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 903, 92 + + Fill - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Fill - + 0, 0 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0 + + 0 4, 22 - - PanelSolids + + TabPage15 - + + 0, 0 + + + Lógicos + + + False + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 9 + + 1109, 137 - - 911, 118 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - PanelSeparators + + Indicadores - - 11 + + PanelCO 0, 0 - - 4 + + TabPage11 - - 0, 0 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True + + TabPage6 - - False + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + TabControl1 + + False - - 1 + + TabPage13 - - 903, 92 + + 1109, 137 - - 903, 92 + + False - + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3 + + 0, 0 - - Fill + + 0 - - PanelUser + + Controladores - - 7 + + 4, 22 - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - Fill + + 4, 22 - - 0, 0 + + 1109, 137 - - 6 + + TabControl1 - - Lógicos + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3 + + TabPage14 - - 3 + + PanelColumns - - 7 + + TabControl1 - + + TabControl1 + + 4 - - 5 + + 4, 22 - - 903, 92 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + PanelSolids - - TabPage2 + + 1109, 137 - + True - - 5 - - - TabPage8 + + TabControl1 - + TabPage7 - - 4, 22 - - - TabPage13 - - - 4, 22 + + 8 - - PanelExchangers + + 5 - - 903, 92 + + 1109, 137 - - 0 + + PanelLogical - + TabControl1 - - False - - - Fill + + 1109, 137 - - Usuário + + True - - 903, 92 + + Fill - - 6 + + Correntes - - 12 + + 9 True diff --git a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.vb b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.vb index ef92026b8..9126bf9c5 100644 --- a/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.vb +++ b/DWSIM/Forms/FlowsheetComponents/SimulationObjectsPanel.vb @@ -88,7 +88,7 @@ Public Class SimulationObjectsPanel For Each item In litems Select Case DirectCast(item.Tag, Interfaces.Enums.SimulationObjectClass) Case SimulationObjectClass.CAPEOPEN - Me.PanelCO.Controls.Add(item) + Me.PanelUser.Controls.Add(item) Case SimulationObjectClass.Columns Me.PanelColumns.Controls.Add(item) Case SimulationObjectClass.Exchangers @@ -115,6 +115,10 @@ Public Class SimulationObjectsPanel Me.PanelIndicators.Controls.Add(item) Case SimulationObjectClass.Controllers Me.PanelControllers.Controls.Add(item) + Case SimulationObjectClass.CleanPowerSources + Me.PanelCE.Controls.Add(item) + Case SimulationObjectClass.Electrolyzers + Me.PanelELEC.Controls.Add(item) End Select Next