Hide Table of Contents

Apply Thermostat-controlled Heat Power for Transient Thermal Study Example (VBA)

This example shows how to apply thermostat-controlled heat power and flux in a transient thermal study.

'---------------------------------------------------------------------------
' Preconditions:
'  1. Add the SOLIDWORKS Simulation as an add-in
'     (in SOLIDWORKS, click Tools > Add-ins > SOLIDWORKS Simulation,
'      and click OK).
'  2. Add the SOLIDWORKS Simulation type library as a reference
'     (in the IDE, select Tools > References > SOLIDWORKS Simulation version type library,
'      and click OK).
'  3. Ensure that c:\temp exists.
'  4. Ensure that the specified material library exists.
'  5. Ensure that the specified model document exists.
'  6. Open the Immediate window.
'
' Postconditions:
'  1. Opens the specified model document.
'  2. Creates Thermal_One study.
'  3. Defines default thermal study results plot and plot options.
'  4. Applies user-defined and SOLIDWORKS materials to components.
'  5. Specifies initial temperatures for assembly components.
'  6. Specifies thermostat location and the temperature range.
'  7. Prints heat flux properties to the Immediate window.
'  8. Prints radiation properties to the Immediate window.
'  9. Meshes the model.
' 10. Analyzes Thermal_One.
' 11. Creates 60 thermal plots.
' 12. Saves the Thermal1 results plot as an eDrawings document in c:\temp.
' 13. Exports Thermal_One study to the NASTRAN finite-element analysis program
'     in c:\temp.
' 14. Renames Thermal_One study to TransientThermal.
' 15. Inspect the Immediate window, the Simulation study tree,
'     and the graphics area.
'
' 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 the assembly is used elsewhere, do not save any changes.
'--------------------------------------------------------------------

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 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 heatFlux As CosmosWorksLib.CWHeatFlux
    Dim CWHeatPower As CosmosWorksLib.CWHeatPower
    Dim rad As CosmosWorksLib.CWRadiation
    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

    If swApp Is Nothing Then Set swApp = Application.SldWorks

    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, "Failed to get Simulation add-in. ", True

    Set COSMOSWORKS = CWObject.COSMOSWORKS
    If COSMOSWORKS Is Nothing Then ErrorMsg swApp, "Failed to get CosmosWorks object.", True

    ' Get active document
    Set ActDoc = COSMOSWORKS.ActiveDoc()
    If ActDoc Is Nothing Then ErrorMsg swApp, "Failed to get 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 C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\Simulation\Examples\Thermal\temp
    bApp = ActDoc.SetSimulationOptionStringValue(swsSOLIDWORKSDocumentFolderSubFolderLocation, "temp")
    Debug.Print "Place results in model document 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, "Failed to get study manager.", True

    Set Study = StudyMngr.CreateNewStudy3("Thermal_One", swsAnalysisStudyTypeThermal, swsMeshTypeSolid, errCode)
    If Study Is Nothing Then ErrorMsg swApp, "Failed to create study.", True

    ' Get first solid component
    Set SolidMgr = Study.SolidManager
    If SolidMgr Is Nothing Then ErrorMsg swApp, "Failed to get solid manager.", True

    Set SolidComp = SolidMgr.GetComponentAt(0, errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to get component.", True

    Set SolidBody = SolidComp.GetSolidBodyAt(0, errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to get component body.", True

    ' Add material
    Set CWMat = SolidBody.GetDefaultMaterial
    If CWMat Is Nothing Then ErrorMsg swApp, "Failed to get 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, "Failed to set material.", True

    ' Get second solid component
    Set SolidComp = SolidMgr.GetComponentAt(1, errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to get component.", True

    Set SolidBody = SolidComp.GetSolidBodyAt(0, errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to get component 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, "Failed to apply glass material.", True

    ' Get third solid component
    Set SolidComp = SolidMgr.GetComponentAt(2, errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to get component.", True

    Set SolidBody = SolidComp.GetSolidBodyAt(0, errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to get component 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, "Failed to apply Nylon 6/10 material.", True

    ' 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
    ' Face 1
    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)

    ' Face 2
    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)

    ' Face 3
    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)

    ' Face 4
    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)

    ' Bottom-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)

    ' Thermostat sensor 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)

    ' Face to which to apply heat power and flux
    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 options
    Debug.Print "Setting transient thermal study options..."
    Set ThermalOptions = Study.ThermalStudyOptions
    If ThermalOptions Is Nothing Then ErrorMsg swApp, "Failed to get thermal study options.", False

    ThermalOptions.SolutionType = 0
    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, "Failed to get loads and restraints manager.", False

    Set CWTemp = LBCMgr.AddTemperature((varArray1), errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to add temperature load.", True

    CWTemp.TemperatureBeginEdit
    CWTemp.TemperatureType = 0
    CWTemp.Unit = 1
    CWTemp.TemperatureValue = 72

    errCode = CWTemp.TemperatureEndEdit
    If errCode <> 0 Then ErrorMsg swApp, "Failed to edit temperature load.", 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, "Failed to add temperature load.", True

    CWTemp.TemperatureBeginEdit
    CWTemp.TemperatureType = 0
    CWTemp.Unit = 1
    CWTemp.TemperatureValue = 195

    errCode = CWTemp.TemperatureEndEdit
    If errCode <> 0 Then ErrorMsg swApp, "Failed to edit temperature load.", 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, "Failed to add convection load.", True

    CWConv.ConvectionBeginEdit
    CWConv.Unit = 1
    CWConv.ConvectionCoefficient = 0.0000085
    CWConv.BulkAmbientTemperature = 72

    errCode = CWConv.ConvectionEndEdit
    If errCode <> 0 Then ErrorMsg swApp, "Failed to edit convection load.", 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, "Failed to add convection.", True

    CWConv.ConvectionBeginEdit
    CWConv.Unit = 1
    CWConv.ConvectionCoefficient = 0.000061
    CWConv.BulkAmbientTemperature = 72

    errCode = CWConv.ConvectionEndEdit
    If errCode <> 0 Then ErrorMsg swApp, "Failed to edit convection load.", True
 

    ' Add heat power
    Debug.Print "Creating heat power for face..."
    Set CWHeatPower = LBCMgr.AddHeatPower((varArray6), errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to add heat power.", True
    CWHeatPower.HeatPowerBeginEdit
    CWHeatPower.Unit = 0
    CWHeatPower.HPValue = 2000
    Debug.Print "  Setting thermostat to a vertex..."
    CWHeatPower.IncludeThermostat = True
    CWHeatPower.SetThermostat therm1
    CWHeatPower.ThermostatUnits = 1
    CWHeatPower.SetCutOffTemperatures 190, 200
    errCode = CWHeatPower.HeatPowerEndEdit
    If errCode <> 0 Then ErrorMsg swApp, "Failed to edit heat power.", True
   

    ' Add heat flux
    Debug.Print "Creating heat flux for face..."
    Set heatFlux = LBCMgr.AddHeatFlux((varArray6), errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to add heat flux.", True
    heatFlux.HeatFluxBeginEdit
    heatFlux.HFValue = 100
    heatFlux.SetThermostat therm1
    errCode = heatFlux.HeatFluxEndEdit
    If errCode <> 0 Then ErrorMsg swApp, "Failed to edit heat flux.", True
    Dim dval1 As Double, dval2 As Double
    heatFlux.GetCutOffTemperatures dval1, dval2
    Debug.Print "  Thermostat lower-bound temperature: " & dval1
    Debug.Print "  Thermostat upper-bound temperature: " & dval2
    Debug.Print "  Heat flux: " & heatFlux.HFValue
    Debug.Print "  Include thermostat effects? (0 = no, 1 = yes) " & heatFlux.IncludeThermostat
    Debug.Print "  Use temperature curve? (0 = no, 1 = yes) " & heatFlux.UseTemperatureCurve
    Debug.Print "  Use time curve? (0 = no, 1 = yes) " & heatFlux.UseTimeCurve
    Debug.Print "  Units as defined in swsTemperatureUnit_e: " & heatFlux.Unit
 

    ' Add radiation
    Debug.Print "Creating radiation for face..."
    Set rad = LBCMgr.AddRadiation(swsRadiationTypeSurfaceToAmbient, (varArray6), errCode)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to add radiation.", True
    rad.RadiationBeginEdit
    rad.Emmisivity = 0.5
    rad.ViewFactor = 0.5
    errCode = rad.RadiationEndEdit
    Debug.Print "  Ambient temperature: " & rad.AmbientTemperature
    Debug.Print "  Emissivity: " & rad.Emmisivity
    Debug.Print "  View factor: " & rad.ViewFactor
    Debug.Print "  System as defined in swsRadiationOpenSystem_e: " & rad.OpenSystem
    Debug.Print "  Use temperature curve? (0 = no, 1 = yes) " & rad.UseTemperatureCurve
    Debug.Print "  Use time curve? (0 = no, 1 = yes) " & rad.UseTimeCurve
    Debug.Print "  Units as defined in swsTemperatureUnit_e: " & rad.Unit
    If errCode <> 0 Then ErrorMsg swApp, "Failed to edit radiation.", True
 

    ' Mesh model
    Debug.Print "Creating mesh..."
    Set CwMesh = Study.Mesh
    If CwMesh Is Nothing Then ErrorMsg swApp, "Failed to get study mesh.", False

    CwMesh.Quality = 1
    Call CwMesh.GetDefaultElementSizeAndTolerance(0, el, tl)
    errCode = Study.CreateMesh(0, el, tl)
    If errCode <> 0 Then ErrorMsg swApp, "Failed to create mesh.", True

    ' Analyze study
    Debug.Print "Running analysis..."
    errCode = Study.RunAnalysis
    If errCode <> 0 Then ErrorMsg swApp, "Analysis failed.", True
   

    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

    ' Save Thermal1 plot as eDrawing
    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

Sub ErrorMsg(swApp As SldWorks.SldWorks, Message As String, EndTest As Boolean)
   swApp.SendMsgToUser2 Message, 0, 0
   swApp.RecordLine "'*** WARNING - General"
   swApp.RecordLine "'*** " & Message
   swApp.RecordLine ""

End Sub

Sub 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 Sub



Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Apply Thermostat-controlled Heat Power for Transient Thermal Study Example (VBA)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:




x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2015 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.