# Copyright (c) 2026 JSOL CORPORATION # # This script is released under the MIT License. # See the full license text at: # https://www.jmag-international.com/scriptlibrary/jmag_script_library_mit/ app = designer.GetApplication() # Condition names CircularChannelName = u"circle" RectangularChannelName = u"rectangle" HeatTransferConditionName = u"left" HeatTransferLayeredConditionName = u"right" # Circular channel settings CircularDiameter = 8 CircularNumberOfChannel = 2 CircularChannelLengthUpper = 80 CircularChannelLengthLower = 0 CircularReferenceAxisAngle = 45 CircularPitchDiameter = 40 CircularOriginX = -100 CircularOriginY = 50 CircularOriginZ = 0 CircularAxisX = 0 CircularAxisY = 0 CircularAxisZ = 1 CircularReferenceDirectionX = 1 CircularReferenceDirectionY = 0 CircularReferenceDirectionZ = 0 # Rectangular channel settings RectangularChannelWidth = 20 RectangularChannelHeight = 20 RectangularNumberOfChannel = 2 RectangularChannelLengthUpper = 80 RectangularChannelLengthLower = 0 RectangularReferenceAxisAngle = 0 RectangularPitchDiameter = 50 RectangularOriginX = 60 RectangularOriginY = 50 RectangularOriginZ = 40 RectangularAxisX = 1 RectangularAxisY = 0 RectangularAxisZ = 0 RectangularReferenceDirectionX = 0 RectangularReferenceDirectionY = 1 RectangularReferenceDirectionZ = 0 def createCircularMeshChannel(meshControl): """Create an axial mesh channel with a circular cross-section.""" channel = meshControl.CreateCondition(u"MeshChannel", CircularChannelName) channel.SetValue(u"ChannelType", u"AxialDirection") channel.SetValue(u"ChannelShape", u"CircularChannel") channel.SetValue(u"CircularDiameter", CircularDiameter) channel.SetValue(u"NumberOfChannel", CircularNumberOfChannel) channel.SetValue(u"ChannelLengthUpper", CircularChannelLengthUpper) channel.SetValue(u"ChannelLengthLower", CircularChannelLengthLower) channel.SetValue(u"ReferenceAxisAngle", CircularReferenceAxisAngle) channel.SetValue(u"PitchDiameter", CircularPitchDiameter) origin = app.CreatePoint(CircularOriginX, CircularOriginY, CircularOriginZ) axis = app.CreatePoint(CircularAxisX, CircularAxisY, CircularAxisZ) referenceDirection = app.CreatePoint( CircularReferenceDirectionX, CircularReferenceDirectionY, CircularReferenceDirectionZ ) channel.SetPoint(u"Origin", origin) channel.SetPoint(u"Axis", axis) channel.SetPoint(u"ReferenceDirection", referenceDirection) return channel def createRectangularMeshChannel(meshControl): """Create an axial mesh channel with a rectangular cross-section.""" channel = meshControl.CreateCondition(u"MeshChannel", RectangularChannelName) channel.SetValue(u"ChannelType", u"AxialDirection") channel.SetValue(u"ChannelShape", u"RectangularChannel") channel.SetValue(u"RectangularChannelWidth", RectangularChannelWidth) channel.SetValue(u"RectangularChannelHeight", RectangularChannelHeight) channel.SetValue(u"NumberOfChannel", RectangularNumberOfChannel) channel.SetValue(u"ChannelLengthUpper", RectangularChannelLengthUpper) channel.SetValue(u"ChannelLengthLower", RectangularChannelLengthLower) channel.SetValue(u"ReferenceAxisAngle", RectangularReferenceAxisAngle) channel.SetValue(u"PitchDiameter", RectangularPitchDiameter) origin = app.CreatePoint(RectangularOriginX, RectangularOriginY, RectangularOriginZ) axis = app.CreatePoint(RectangularAxisX, RectangularAxisY, RectangularAxisZ) referenceDirection = app.CreatePoint( RectangularReferenceDirectionX, RectangularReferenceDirectionY, RectangularReferenceDirectionZ ) channel.SetPoint(u"Origin", origin) channel.SetPoint(u"Axis", axis) channel.SetPoint(u"ReferenceDirection", referenceDirection) return channel def setMeshChannelToHeatTransferCondition(condition, meshChannel): """Set a mesh channel as the target of a heat transfer boundary condition.""" condition.SetValue(u"TargetType", u"Mesh") condition.SetLinkWithType(u"LinkedMeshChannel", meshChannel.GetName()) def main(): """Create mesh channels and set them as targets of heat transfer boundary conditions.""" study = app.GetCurrentStudy() meshControl = study.GetMeshControl() circularChannel = createCircularMeshChannel(meshControl) rectangularChannel = createRectangularMeshChannel(meshControl) heatTransferCondition = study.GetCondition(HeatTransferConditionName) setMeshChannelToHeatTransferCondition(heatTransferCondition, circularChannel) heatTransferLayeredCondition = study.GetCondition(HeatTransferLayeredConditionName) setMeshChannelToHeatTransferCondition( heatTransferLayeredCondition, rectangularChannel ) main()