Apply Thermostat-controlled Heat Power for Transient Thermal Study
Example (VBA)
This example shows how to apply thermostat-controlled heat power for
a transient thermal study.
'---------------------------------------------------------------------------
' Preconditions:
' 1. Add the SolidWorks Simulation as an add-in
' (in
SolidWorks, click Tools > Add-ins
> SolidWorks Simulation).
' 2. Add the SolidWorks Simulation type library as a reference
' (in
the IDE, click Tools > References
> SolidWorks
' Simulation
version type
library).
' 3. Modify the path to solidworks
materials.sldmat if needed.
' 4. Open the Immediate window.
' 5. Run the macro.
'
' Postconditions:
' 1. Document is opened.
' 2. Thermal study is created.
' 3. Default thermal study results plot and plot options are defined.
' 4. User-defined and SolidWorks materials are applied to components.
' 5. Initial temperatures are assigned for assembly components.
' 6. Thermostat location and the temperature range are assigned.
' 7. Mesh is created.
' 8. Analysis runs.
' 9. Results (minimum and maximum temperatures) are returned.
' 10. Plots are generated.
' 11. Iso clipping is added to the Thermal1 plot.
' 12. Thermal1 results plot is saved as an eDrawings document in c:\temp.
' 13. Study is exported to the NASTRAN finite-element analysis program in
c:\temp.
' 14. Study is renamed "TransientThermal".
'
' NOTES:
' *
To get persistent reference identifiers (PIDs) for model selections,
' you
can use
pidcollector.exe
or IModelDocExtension::GetPersistReference3.
' *
Solving this study can take some time. Examine the Immediate window
' to
monitor the macro's progress. Done!
indicates that the macro
' has
finished.
' *
Because this assembly document is used by a SolidWorks Simulation
' online
tutorial, do not save any changes when closing the
' document.
'--------------------------------------------------------------------
Option Explicit
Sub main()
Dim
swApp As SldWorks.SldWorks
Dim
COSMOSWORKS As CosmosWorksLib.COSMOSWORKS
Dim
CWObject As CosmosWorksLib.CwAddincallback
Dim
ActDoc As CosmosWorksLib.CWModelDoc
Dim
StudyMngr As CosmosWorksLib.CWStudyManager
Dim
Study As CosmosWorksLib.CWStudy
Dim
SolidMgr As CosmosWorksLib.CWSolidManager
Dim
SolidComp As CosmosWorksLib.CWSolidComponent
Dim
SolidBody As CosmosWorksLib.CWSolidBody
Dim
ThermalOptions As CosmosWorksLib.CWThermalStudyOptions
Dim
CWConv As CosmosWorksLib.CWConvection
Dim
CWHeatPower As CosmosWorksLib.CWHeatPower
Dim
CwMesh As CosmosWorksLib.CwMesh
Dim
CWResult As CosmosWorksLib.CWResults
Dim
CWMat As CosmosWorksLib.CWMaterial
Dim
CWTemp As CosmosWorksLib.CWTemperature
Dim
Part As SldWorks.ModelDoc2
Dim
LBCMgr As CosmosWorksLib.CWLoadsAndRestraintsManager
Dim
oselect1 As Object, oselect2 As Object, oselect3 As Object
Dim
oselect4 As Object, oselect5 As Object, oselect6 As Object
Dim
oselect7 As Object, oselect8 As Object, oselect9 As Object, oselect10
As Object
Dim
therm1 As Object
Dim
var1 As Variant, var2 As Variant, var3 As Variant, var4 As Variant
Dim
var5 As Variant, var6 As Variant, var7 As Variant, var8 As Variant
Dim
var9 As Variant, var10 As Variant, var11 As Variant
Dim
Temp As Variant
Dim
varArray1 As Variant
Dim
varArray2 As Variant
Dim
varArray3 As Variant
Dim
varArray4 As Variant
Dim
varArray5 As Variant
Dim
varArray6 As Variant
Dim
bApp As Boolean
Dim
selection1 As String, selection2 As String, selection3 As String
Dim
selection4 As String, selection5 As String, selection6 As String
Dim
selection7 As String, selection8 As String, selection9 As String
Dim
selection10 As String, selection11 As String
Dim
longstatus As Long, longwarnings As Long
Dim
errCode As Long
Dim
el As Double, tl As Double
Dim
nStep As Long
Dim res As Long
'
Connect to SolidWorks
If
swApp Is Nothing Then Set swApp = Application.SldWorks
'
Open document
Debug.Print
"Opening document..."
Set
Part = swApp.OpenDoc6("C:\Program
Files\SolidWorks Corp\SolidWorks\Simulation\Examples\Thermal\CoffeeJar.SLDASM",
swDocASSEMBLY, swOpenDocOptions_Silent, "", longstatus, longwarnings)
If
Part Is Nothing Then ErrorMsg swApp, "Failed to open document.",
True
'
Get the SolidWorks Simulation add-in object
Set
CWObject = swApp.GetAddInObject("SldWorks.Simulation")
If
CWObject Is Nothing Then ErrorMsg swApp, "CWObject object not found.
", True
Set
COSMOSWORKS = CWObject.COSMOSWORKS
If
COSMOSWORKS Is Nothing Then ErrorMsg swApp, "COSMOSWORKS object not
found.", True
'
Get active document
Set
ActDoc = COSMOSWORKS.ActiveDoc()
If
ActDoc Is Nothing Then ErrorMsg swApp, "No active document.",
True
' Add a default thermal study results plot
res = ActDoc.AddDefaultThermalStudyPlot(swsThermalResultComponentTypes_TEMP,
True)
' Set default thermal plot options
' Show maximum value annotation on the plot
bApp = ActDoc.SetSimulationOptionToggle(swsPlotAnnotationShowMaxValue,
True)
Debug.Print "Show maximum value annotation on the plot? " &
ActDoc.GetSimulationOptionToggle(swsPlotAnnotationShowMaxValue)
' Set sub-folder option
bApp = ActDoc.SetSimulationOptionToggle(swsResultFolderUnderSubFolder,
True)
Debug.Print "Set sub-folder option? " & ActDoc.GetSimulationOptionToggle(swsResultFolderUnderSubFolder)
' Put results in sub-folder, "temp", of model document folder
bApp = ActDoc.SetSimulationOptionStringValue(swsSolidWorksDocumentFolderSubFolderLocation,
"temp")
Debug.Print "Results in sub-folder, " & ActDoc.GetSimulationOptionStringValue(swsSolidWorksDocumentFolderSubFolderLocation)
' Set boundary settings option to translucent single color
bApp = ActDoc.SetSimulationOptionIntegerValue(swsPlotSettingsBoundaryOption,
swsPlotBoundaryTranslucentSingleColor)
Debug.Print "Boundary settings option as defined in
swsPlotSettingsBoundaryOption is " & ActDoc.GetSimulationOptionIntegerValue(swsPlotSettingsBoundaryOption)
' Set boundary color; Red 1 is 0xFF0000 in
http://cloford.com/resources/colours/500col.htm
' Reverse the hexadecimal (&H0000FF) in the call below
bApp = ActDoc.SetSimulationOptionIntegerValue(swsPlotBoundaryOptionTranslucentSingleColorSetting,
&HFF)
Debug.Print "Boundary color is " & ActDoc.GetSimulationOptionIntegerValue(swsPlotBoundaryOptionTranslucentSingleColorSetting)
' Set boundary transparency of translucent part color to 50%
bApp = ActDoc.SetSimulationOptionDoubleValue(swsPlotBoundaryTransparency,
50#)
Debug.Print "Transparency of boundary translucent part color
is " & ActDoc.GetSimulationOptionDoubleValue(swsPlotBoundaryTransparency)
'
Create new thermal study
Debug.Print
"Creating thermal study..."
Set
StudyMngr = ActDoc.StudyManager()
If
StudyMngr Is Nothing Then ErrorMsg swApp, "StudyMngr object not there.",
True
Set
Study = StudyMngr.CreateNewStudy3("Thermal_One",
swsAnalysisStudyTypeThermal, swsMeshTypeSolid, errCode)
If
Study Is Nothing Then ErrorMsg swApp, "Study not created.",
True
'
Get first solid component
Set
SolidMgr = Study.SolidManager
If
SolidMgr Is Nothing Then ErrorMsg swApp, "SolidMgr object not there.",
True
Set
SolidComp = SolidMgr.GetComponentAt(0,
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No solid component.",
True
Set
SolidBody = SolidComp.GetSolidBodyAt(0,
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No solid body.", True
'
Add material
Set
CWMat = SolidBody.GetDefaultMaterial
If
CWMat Is Nothing Then ErrorMsg swApp, "No default material.",
True
CWMat.MaterialName = "Coffee"
Call
CWMat.SetPropertyByName("DENS",
1000, 0)
Call
CWMat.SetPropertyByName("KX",
40, 0)
Call
CWMat.SetPropertyByName("C",
4200#, 0)
errCode
= SolidBody.SetSolidBodyMaterial(CWMat)
If
errCode <> 0 Then ErrorMsg swApp, "Solid body material not
set.", True
'
Get second solid component
Set
SolidComp = SolidMgr.GetComponentAt(1,
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No solid component.",
True
Set
SolidBody = SolidComp.GetSolidBodyAt(0,
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No solid body.", True
'
Add material
bApp
= SolidBody.SetLibraryMaterial("C:\Program
Files\SolidWorks Corp\SolidWorks\lang\english\sldmaterials\solidworks
materials.sldmat", "Glass")
If
bApp = False Then ErrorMsg swApp, "No glass material applied.",
True
'
Get third solid component
Set
SolidComp = SolidMgr.GetComponentAt(2,
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No solid component.",
True
Set
SolidBody = SolidComp.GetSolidBodyAt(0,
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No solid body.", True
'
Add material
bApp
= SolidBody.SetLibraryMaterial("C:\Program
Files\SolidWorks Corp\SolidWorks\lang\english\sldmaterials\solidworks
materials.sldmat", "Nylon 6/10")
If
bApp = False Then ErrorMsg swApp, " No Nylon 6/10 material applied.",
True
'Get
components
'
CoffeePot
selection1
= "216,14,0,0,5,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,0,0,0"
selection1
= selection1 & ",Type=1"
StringtoArray
selection1, var1
Set
oselect1 = Part.Extension.GetObjectByPersistReference3((var1),
longstatus)
'
Coffee
selection2
= "216,14,0,0,5,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0"
selection2
= selection2 & ",Type=1"
StringtoArray
selection2, var2
Set
oselect2 = Part.Extension.GetObjectByPersistReference3((var2),
longstatus)
'
Top
selection3
= "216,14,0,0,5,0,0,0,255,254,255,15,84,0,111,0,112,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,13,0,0,0"
selection3
= selection3 & ",Type=1"
StringtoArray
selection3, var3
Set
oselect3 = Part.Extension.GetObjectByPersistReference3((var3),
longstatus)
'
Get the four coffee faces that make up the surface of coffee in the coffee
pot
selection4
= "216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,10"
selection4
= selection4 & "8,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,5,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,19,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,0,0,0,0,0,0"
selection4
= selection4 & ",Type=1"
StringtoArray
selection4, var4
Set
oselect4 = Part.Extension.GetObjectByPersistReference3((var4),
longstatus)
'
selection5
= "216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,"
selection5
= selection5 & "108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,6,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,1,0,0,0,19,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,0,0,0,0,0,0"
selection5
= selection5 & ",Type=1"
StringtoArray
selection5, var5
Set
oselect5 = Part.Extension.GetObjectByPersistReference3((var5),
longstatus)
'
selection6
= "216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,"
selection6
= selection6 & "108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,2,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,19,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,0,0,0,0,0,0"
selection6
= selection6 & ",Type=1"
StringtoArray
selection6, var6
Set
oselect6 = Part.Extension.GetObjectByPersistReference3((var6),
longstatus)
'
selection7
= "216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,"
selection7
= selection7 & "108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,21,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,0,0,0,0,0,0"
selection7
= selection7 & ",Type=1"
StringtoArray
selection7, var7
Set
oselect7 = Part.Extension.GetObjectByPersistReference3((var7),
longstatus)
'
Get the selections for convection
'
Top-outer face of coffee pot
selection8
= "216,14,0,0,3,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,9,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,174,232,47,63,11,128,255,254,255,60,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,"
selection8
= selection8 & "114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,108,0,92,0,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,153,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,5,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,234,237,47,63,3,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,2,0,0,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,4,0,0,0,0,0,0,0,0,0"
selection8
= selection8 & ",Type=1"
StringtoArray
selection8, var8
Set
oselect8 = Part.Extension.GetObjectByPersistReference3((var8),
longstatus)
'
Lower-outer face of coffee pot
selection9
= "216,14,0,0,3,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,9,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,174,232,47,63,11,128,255,254,255,60,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,"
selection9
= selection9 & "0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,108,0,92,0,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,153,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,5,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,234,237,47,63,2,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,3,0,0,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,1,0,0,0,0,0,0,0,0,0"
selection9
= selection9 & ",Type=1"
StringtoArray
selection9, var9
Set
oselect9 = Part.Extension.GetObjectByPersistReference3((var9),
longstatus)
'
Get the selections for heat power
'
Vertex located on the top of the bottom face of the coffee pot
selection10
= "216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,99,0,111,0,102,0,102,0,101,0,101,0,106,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0,255,255,1,0,13,0,109,111,86,101,114,116,101,120,82,101,102,95,99,255,255,255,255,255,255,255,255,8,0,0,0,0,2,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,"
selection10
= selection10 & "1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,"
selection10
= selection10 & "0,101,0,114,0,109,0,97,0,108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,241,69,48,63,255,255,1,0,18,0,109,111,80,76,105,110,101,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,90,0,0,0,219,69,48,63,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,"
selection10
= selection10 & "110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,1,0,0,0,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,3,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,"
selection10
= selection10 & "135,69,48,63,5,0,0,0,1,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,5,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,"
selection10
= selection10 & "5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,2,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0"
selection10
= selection10 & ",Type=1"
StringtoArray
selection10, var10
Set
therm1 = Part.Extension.GetObjectByPersistReference3((var10),
longstatus)
'
Vertex where sensor (thermostat) is located
selection11
= "216,14,0,0,3,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,3,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,9,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,174,232,47,63,11,128,255,254,255,60,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,"
selection11
= selection11 & "114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,108,0,92,0,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,153,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,5,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,234,237,47,63,1,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,2,0,0,0,0,0,0,0,0,0"
selection11
= selection11 & ",Type=1"
StringtoArray
selection11, var11
Set
oselect10 = Part.Extension.GetObjectByPersistReference3((var11),
longstatus)
'
Create arrays
varArray1
= Array(oselect1, oselect3)
varArray2
= Array(oselect2)
varArray3
= Array(oselect4, oselect5, oselect6, oselect7)
varArray4
= Array(oselect8, oselect9)
varArray5
= Array(therm1)
varArray6
= Array(oselect10)
'
Set transient thermal study with solver type FFEPlus
Debug.Print
"Setting transient thermal study with solver type FFEPlus..."
Set
ThermalOptions = Study.ThermalStudyOptions
Study.ThermalStudyOptions.SolutionType = 0
If
ThermalOptions Is Nothing Then ErrorMsg swApp, "No ThermalOptions
object.", False
ThermalOptions.SolverType = 2
ThermalOptions.TotalTime = 3600
ThermalOptions.TimeIncrement = 60
'
Apply initial temperature to coffee pot and top
Debug.Print
"Applying initial temperature to coffee pot and top..."
Set
LBCMgr = Study.LoadsAndRestraintsManager
If
LBCMgr Is Nothing Then ErrorMsg swApp, "No Loads and Restraints manager.",
False
Set
CWTemp = LBCMgr.AddTemperature((varArray1),
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No temperature applied.",
True
Call
CWTemp.TemperatureBeginEdit
CWTemp.TemperatureType = 0
CWTemp.Unit = 1
CWTemp.TemperatureValue = 72
errCode
= CWTemp.TemperatureEndEdit
If
errCode <> 0 Then ErrorMsg swApp, "No temperature applied.",
True
'
Apply initial temperature to coffee
Debug.Print
"Applying initial temperature to coffee..."
Set
CWTemp = LBCMgr.AddTemperature((varArray2),
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No temperature applied.",
True
Call
CWTemp.TemperatureBeginEdit
CWTemp.TemperatureType = 0
CWTemp.Unit = 1
CWTemp.TemperatureValue = 195
errCode
= CWTemp.TemperatureEndEdit
If
errCode <> 0 Then ErrorMsg swApp, "No temperature applied.",
True
'
Create convection for coffee component
Debug.Print
"Creating convection for coffee component..."
Set
CWConv = LBCMgr.AddConvection((varArray3),
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No convection added.",
True
Call
CWConv.ConvectionBeginEdit
CWConv.Unit = 1
CWConv.ConvectionCoefficient = 0.0000085
CWConv.BulkAmbientTemperature = 72
errCode
= CWConv.ConvectionEndEdit
If
errCode <> 0 Then ErrorMsg swApp, "Convection end-edit failed
for coffee.", True
'
Create convection for coffee pot component
Debug.Print
"Creating convection for coffee pot component..."
Set
CWConv = LBCMgr.AddConvection((varArray4),
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No convection added.",
True
Call
CWConv.ConvectionBeginEdit
CWConv.Unit = 1
CWConv.ConvectionCoefficient = 0.000061
CWConv.BulkAmbientTemperature = 72
errCode
= CWConv.ConvectionEndEdit
If
errCode <> 0 Then ErrorMsg swApp, "Convection end-edit failed
for coffee pot.", True
'
Create heat power for face
Debug.Print
"Creating heat power for face..."
Set
CWHeatPower = LBCMgr.AddHeatPower((varArray6),
errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No heat power created.",
True
Call
CWHeatPower.HeatPowerBeginEdit
CWHeatPower.Unit = 0
CWHeatPower.HPValue = 2000
'
Set thermostat to a vertex
Debug.Print
"Setting thermostat to a vertex..."
CWHeatPower.IncludeThermostat = True
Call
CWHeatPower.SetThermostat(therm1)
CWHeatPower.ThermostatUnits = 1
Call
CWHeatPower.SetCutOffTemperatures(190,
200)
errCode
= CWHeatPower.HeatPowerEndEdit
If
errCode <> 0 Then ErrorMsg swApp, "Heat power not updated.",
True
'
Create mesh
Debug.Print
"Creating mesh..."
Set
CwMesh = Study.Mesh
If
CwMesh Is Nothing Then ErrorMsg swApp, "No mesh object.", False
CwMesh.Quality = 1
Call
CwMesh.GetDefaultElementSizeAndTolerance(0,
el, tl)
errCode
= Study.CreateMesh(0, el, tl)
If
errCode <> 0 Then ErrorMsg swApp, "Mesh failed.", True
'
Run analysis
Debug.Print
"Running analysis..."
errCode
= Study.RunAnalysis
If
errCode <> 0 Then ErrorMsg swApp, "Analysis failed.",
True
'
Get results
Debug.Print
"Getting results..."
Set
CWResult = Study.Results
If
CWResult Is Nothing Then ErrorMsg swApp, "No result object.",
False
'
Get temperature at vertex
Debug.Print
"Getting temperature at vertex..."
nStep
= CWResult.GetMaximumAvailableSteps
Temp
= CWResult.GetThermalForEntities(0,
nStep, Nothing, (varArray5), 2, errCode)
If
errCode <> 0 Then ErrorMsg swApp, "No temperature result.",
True
Dim varVals As Variant
varVals = Array(1264)
' View surfaces in the Thermal1 plot at 1264
Kelvin
res = CWResult.AddIsoClippingToPlot("Thermal1", 1, varVals,
False, True)
' Save plots as eDrawings
CWResult.SavePlotsAseDrawings "c:\temp", "ThermalPlot",
"Thermal1"
' Export this study to the NASTRAN
finite-element analysis program
res = Study.ExportSimulationStudy("c:\temp",
"ThermalStudyExport", swsNastranExportOption_LongFixed, 0, 0,
swsStudyExportOption_Nastran, swsNastranExportUnit_IPS)
' Rename the study
res = StudyMngr.RenameStudyFromName("Thermal_One", "TransientThermal")
Debug.Print
"Done!"
End Sub
' Error function
Function ErrorMsg(swApp As Object, Message As String,
EndTest As Boolean)
swApp.SendMsgToUser2 Message, 0, 0
swApp.RecordLine "'*** WARNING - General"
swApp.RecordLine "'*** " & Message
swApp.RecordLine ""
End Function
' Parse string into array
Function StringtoArray(inputSTR As String, varEntity As
Variant)
Dim
PID() As Byte
Dim
i As Integer
varEntity
= Split(inputSTR, ",")
ReDim
PID(UBound(varEntity))
For
i = 0 To (UBound(varEntity) - 1)
PID(i)
= varEntity(i)
Next
i
varEntity
= PID
End Function