In this example, using the support files, you will open a Random Vibration analysis in Mechanical and execute a series of scripts to solve and complete an entire analysis. First, you must prepare certain aspects of the analysis on the Workbench Project Schematic. This example begins in the Workbench application. It requires you to download the following Ansys DesignModeler and python files.
Mechanical_Random_Vibration_Example012_Geometry.agdb
Mechanical_Random_Vibration_Example012_Script.py
These files are available here.
Procedure
The following procedure assumes you understand how to add a system in Workbench and make changes to system cells and properties as well as saving the support files to a known location.
Add a Modal analysis to the Project Schematic.
Right-click the Solution cell of the Modal analysis and select > . This links the two necessary systems.

This analysis requires a new material. Double-click the Engineering Data cell of the Modal analysis to open the Engineering Data workspace.
Right-click Structural Steel material and select .

Double-click the new field and rename the material "Rod_Mat."

Set the Density to 0.1 Kg/m3.
Open the Isotropic Elasticity property and set the following values:
Young's Modulus = 2E+8 Pa
Poisson's Ratio = 0
Return to the Project Schematic and select the Geometry cell of the Modal system. Right-click and select .
Under the Basic Geometry Options group of the properties, activate the Named Selections property.

Right-click the Geometry cell and select > and select the Mechanical_Random_Vibration_Example012_Geometry.agdb file.
Right-click the Model cell and select . This action launches the Mechanical application.
Select the Automation tab and select the Scripting option to open the Mechanical Scripting pane.
Select the Open Script option (
) from the Editor toolbar. Navigate to the
proper folder location and select
Mechanical_Random_Vibration_Example012_Script.py.Select the Run Script option (
) from the Editor toolbar.
Scripts Illustrated
In this example, the python file automatically performs the following actions:
# Scenario 1 Store main Tree Object items
MODEL = Model
GEOMETRY = Model.Geometry
ROD1 = [x for x in ExtAPI.DataModel.Tree.AllObjects if x.Name == 'Rod1'][0]
BLOCK1 = [x for x in ExtAPI.DataModel.Tree.AllObjects if x.Name == 'Block1'][0]
ROD2 = [x for x in ExtAPI.DataModel.Tree.AllObjects if x.Name == 'Rod2'][0]
BLOCK2 = [x for x in ExtAPI.DataModel.Tree.AllObjects if x.Name == 'Block2'][0]
ROD3 = [x for x in ExtAPI.DataModel.Tree.AllObjects if x.Name == 'Rod3'][0]
BLOCK3 = [x for x in ExtAPI.DataModel.Tree.AllObjects if x.Name == 'Block3'][0]
MATERIALS = MODEL.Materials
MATERIAL_RM = [i for i in MATERIALS.GetChildren[Ansys.ACT.Automation.Mechanical.Material](True) if i.Name == 'Rod_Mat'][0]
MATERIAL_SS = [i for i in MATERIALS.GetChildren[Ansys.ACT.Automation.Mechanical.Material](True) if i.Name == 'Structural Steel'][0]
COORDINATE_SYSTEMS = Model.CoordinateSystems
GLOBAL_COORDINATE_SYSTEM = [i for i in COORDINATE_SYSTEMS.GetChildren[Ansys.ACT.Automation.Mechanical.CoordinateSystem](True) if i.Name == 'Global Coordinate System'][0]
MESH = Model.Mesh
NAMED_SELECTIONS = ExtAPI.DataModel.Project.Model.NamedSelections
NS_BLOCK_SIDES = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'NS_Block_Sides'][0]
NS_ROD_SIDES = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'NS_Rod_Sides'][0]
NS_BASE = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'NS_Base'][0]
NS_BLOCK_ROD_SIDES = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'NS_Block_Rod_Sides'][0]
NS_BLOCK1_SIDES = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'NS_Block1_Side_Faces'][0]
NS_BLOCK2_SIDES = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'NS_Block2_Side_Faces'][0]
NS_BLOCK3_SIDES = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'NS_Block3_Side_Faces'][0]
NS_BLOCK1_VERTEX = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'Block1_Vertex'][0]
NS_BLOCK2_VERTEX = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'Block2_Vertex'][0]
NS_BLOCK3_VERTEX = [i for i in NAMED_SELECTIONS.GetChildren[Ansys.ACT.Automation.Mechanical.NamedSelection](True) if i.Name == 'Block3_Vertex'][0]
MODAL = DataModel.AnalysisByName("Modal")
ANALYSIS_SETTINGS_MODAL = MODAL.AnalysisSettings
SOLUTION_MODAL = MODAL.Solution
PSD = DataModel.AnalysisByName("Random Vibration")
ANALYSIS_SETTINGS_PSD = PSD.AnalysisSettings
SOLUTION_PSD = PSD.Solution
# Scenario 2 Set Display Unit
ExtAPI.Application.ActiveUnitSystem = MechanicalUnitSystem.StandardMKS
# Scenario 3 Set Brick Integration Scheme for all bodies
GEOMETRY.Activate()
GEOMETRY.ElementControl = ElementControl.Manual
ROD1.Activate()
ROD1.BrickIntegrationScheme = BrickIntegrationScheme.Full
BLOCK1.Activate()
BLOCK1.BrickIntegrationScheme = BrickIntegrationScheme.Full
ROD2.Activate()
ROD2.BrickIntegrationScheme = BrickIntegrationScheme.Full
BLOCK2.Activate()
BLOCK2.BrickIntegrationScheme = BrickIntegrationScheme.Full
ROD3.Activate()
ROD3.BrickIntegrationScheme = BrickIntegrationScheme.Full
BLOCK3.Activate()
BLOCK3.BrickIntegrationScheme = BrickIntegrationScheme.Full
# Scenario 4 Assign material to Rod bodies
ROD1.Activate()
ROD1.Material = MATERIAL_RM.Name
ROD2.Activate()
ROD2.Material = MATERIAL_RM.Name
ROD3.Activate()
ROD3.Material = MATERIAL_RM.Name
# Scenario 5 Add local Coordinate System and Remote Point
COORDINATE_SYSTEMS.Activate()
COORDINATE_SYSTEM = COORDINATE_SYSTEMS.AddCoordinateSystem()
COORDINATE_SYSTEM.OriginLocation = NS_BLOCK1_SIDES
MODEL.Activate()
REMOTE_POINT = MODEL.AddRemotePoint()
REMOTE_POINT.Location = NS_BLOCK2_SIDES
REMOTE_POINT.Behavior=LoadBehavior.Deformable
# Scenario 6 Define global mesh size and generate mesh
MESH.Activate()
MESH.ElementSize = Quantity('0.105 [m]')
MESH.GenerateMesh()
# Scenario 7 Define Analysis Settings for Modal system
# Modify Analysis Settings of Modal to find first three modes only
ANALYSIS_SETTINGS_MODAL.Activate()
ANALYSIS_SETTINGS_MODAL.MaximumModesToFind = 3
# Scenario 8 Define boundary conditions for Modal system
MODAL.Activate()
FIXED_SUPPORT = MODAL.AddFixedSupport()
FIXED_SUPPORT.Location = NS_BASE
MODAL.Activate()
FRICTIONLESS_SUPPORT = MODAL.AddFrictionlessSupport()
FRICTIONLESS_SUPPORT.Location = NS_BLOCK_ROD_SIDES
# Scenario 9 Add results for Modal system
# Add Total Deformation results in Modal analysis for each modes
SOLUTION_MODAL.Activate()
TOTAL_DEFORMATION_MODAL = SOLUTION_MODAL.AddTotalDeformation()
TOTAL_DEFORMATION_MODAL.Mode = 1
TOTAL_DEFORMATION2_MODAL = SOLUTION_MODAL.AddTotalDeformation()
TOTAL_DEFORMATION2_MODAL.Mode = 2
TOTAL_DEFORMATION2_MODAL = SOLUTION_MODAL.AddTotalDeformation()
TOTAL_DEFORMATION2_MODAL.Mode = 3
# Scenario 10 Define Analysis Settings for Random Vibration system
# Modify Analysis Settings of Random Vibration to enable Velocity Acceleration calculations and add Damping
ANALYSIS_SETTINGS_PSD.Activate()
ANALYSIS_SETTINGS_PSD.CalculateVelocity = True
ANALYSIS_SETTINGS_PSD.CalculateAcceleration = True
ANALYSIS_SETTINGS_PSD.ConstantDamping=ConstantDampingType.Manual
ANALYSIS_SETTINGS_PSD.ConstantDampingRatio = 0
ANALYSIS_SETTINGS_PSD.StiffnessCoefficient = 0.0028
# Scenario 11 Add PSD Acceleration for Random Vibration system
PSD.Activate()
PSD_ACCELERATION = PSD.AddPSDAcceleration()
PSD_ACCELERATION.BoundaryCondition = PSDBoundaryConditionSelectionType.AllFixedSupports
PSD_ACCELERATION.LoadData.Inputs[0].DiscreteValues = [Quantity("1.e-003 [Hz]"), Quantity("1000 [Hz]")]
PSD_ACCELERATION.LoadData.Output.DiscreteValues = [Quantity("0.62832 [(m sec^-2)^2 Hz^-1]"), Quantity("0.62832 [(m sec^-2)^2 Hz^-1]")]
PSD_ACCELERATION.Direction = NormalOrientationType.XAxis
# Scenario 12 Add regular and probe results for PSD analysis
SOLUTION_PSD.Activate()
DIRECTIONAL_DEFORMATION_PSD = SOLUTION_PSD.AddDirectionalDeformation()
DIRECTIONAL_DEFORMATION_PSD.NormalOrientation=NormalOrientationType.XAxis
DIRECTIONAL_DEFORMATION_PSD.ScaleFactor = ScaleFactorType.Sigma1
DIRECTIONAL_VELOCITY_PSD = SOLUTION_PSD.AddDirectionalVelocityPSD()
DIRECTIONAL_VELOCITY_PSD.NormalOrientation=NormalOrientationType.XAxis
DIRECTIONAL_VELOCITY_PSD.ScaleFactor = ScaleFactorType.Sigma2
DIRECTIONAL_ACCELERATION_PSD = SOLUTION_PSD.AddDirectionalAccelerationPSD()
DIRECTIONAL_ACCELERATION_PSD.NormalOrientation=NormalOrientationType.XAxis
DIRECTIONAL_ACCELERATION_PSD.ScaleFactor = ScaleFactorType.Sigma3
NORMAL_ELASTIC_STRAIN_PSD = SOLUTION_PSD.AddNormalElasticStrain()
NORMAL_ELASTIC_STRAIN_PSD.NormalOrientation=NormalOrientationType.XAxis
NORMAL_ELASTIC_STRAIN_PSD.ScaleFactor = ScaleFactorType.Sigma1
NORMAL_STRESS_PSD = SOLUTION_PSD.AddNormalStress()
NORMAL_STRESS_PSD.NormalOrientation=NormalOrientationType.XAxis
NORMAL_STRESS_PSD.ScaleFactor = ScaleFactorType.Sigma1
SOLUTION_PSD.Activate()
RESPONSE_PSD_PROBE = SOLUTION_PSD.AddResponsePSD()
RESPONSE_PSD_PROBE.LocationMethod = LocationDefinitionMethod.CoordinateSystem
RESPONSE_PSD_PROBE.CoordinateSystemSelection=COORDINATE_SYSTEM
RESPONSE_PSD_PROBE.Reference=ResultRelativityType.Relative
RESPONSE_PSD_PROBE.ResultType = ProbeResultType.DeformationProbe
RESPONSE_PSD_PROBE.ResultSelection=ProbeDisplayFilter.XAxis
RESPONSE_PSD_PROBE2 = SOLUTION_PSD.AddResponsePSD()
RESPONSE_PSD_PROBE2.LocationMethod = LocationDefinitionMethod.RemotePoint
RESPONSE_PSD_PROBE2.RemotePointSelection = REMOTE_POINT
RESPONSE_PSD_PROBE2.Reference=ResultRelativityType.Relative
RESPONSE_PSD_PROBE2.ResultType = ProbeResultType.DeformationProbe
RESPONSE_PSD_PROBE2.ResultSelection=ProbeDisplayFilter.XAxis
SOLUTION_PSD.Activate()
SEL=ExtAPI.SelectionManager.AddSelection(NS_BLOCK3_VERTEX)
RS_PSD_TOOL = PSD.Solution.AddResponsePSDTool()
CLRSEL = ExtAPI.SelectionManager.ClearSelection()
RESPONSE_PSD_PROBE3 = RS_PSD_TOOL.Children[0]
RESPONSE_PSD_PROBE3.Name="Response PSD 3"
RESPONSE_PSD_PROBE3.Reference=ResultRelativityType.Relative
RESPONSE_PSD_PROBE3.ResultType = ProbeResultType.DeformationProbe
RESPONSE_PSD_PROBE3.ResultSelection=ProbeDisplayFilter.XAxis
# Scenario 13 Solve and review results
PSD.Activate()
PSD.Solve(True)
SOLUTION_MODAL.Activate()
FREQUENCY = MODAL.GetResultsData()
MODAL_FREQ_1ST = FREQUENCY.ListTimeFreq[0]
MODAL_FREQ_2ND = FREQUENCY.ListTimeFreq[1]
MODAL_FREQ_3RD = FREQUENCY.ListTimeFreq[2]
DIRECTIONAL_DEFORMATION_PSD.Activate()
MAX_X_AXIS_DEF_PSD = DIRECTIONAL_DEFORMATION_PSD.Maximum.Value
DIRECTIONAL_VELOCITY_PSD.Activate()
MIN_X_AXIS_VEL_PSD = DIRECTIONAL_VELOCITY_PSD.Minimum.Value
MAX_X_AXIS_VEL_PSD = DIRECTIONAL_VELOCITY_PSD.Maximum.Value
DIRECTIONAL_ACCELERATION_PSD.Activate()
MIN_X_AXIS_ACC_PSD = DIRECTIONAL_ACCELERATION_PSD.Minimum.Value
MAX_X_AXIS_ACC_PSD = DIRECTIONAL_ACCELERATION_PSD.Maximum.Value
NORMAL_ELASTIC_STRAIN_PSD.Activate()
MAX_X_AXIS_STRAIN_PSD = NORMAL_ELASTIC_STRAIN_PSD.Maximum.Value
NORMAL_STRESS_PSD.Activate()
MAX_X_AXIS_STRESS_PSD = NORMAL_STRESS_PSD.Maximum.Value
RESPONSE_PSD_PROBE.Activate()
RMS_VALUE_RES_PSD = RESPONSE_PSD_PROBE.RMSValue.Value
EXP_FREQ_RES_PSD = RESPONSE_PSD_PROBE.ExpectedFrequency.Value
RESPONSE_PSD_PROBE2.Activate()
RMS_VALUE_RES_PSD2 = RESPONSE_PSD_PROBE2.RMSValue.Value
EXP_FREQ_RES_PSD2 = RESPONSE_PSD_PROBE2.ExpectedFrequency.Value
RESPONSE_PSD_PROBE3.Activate()
RMS_VALUE_RES_PSD3 = RESPONSE_PSD_PROBE3.RMSValue.Value
EXP_FREQ_RES_PSD3 = RESPONSE_PSD_PROBE3.ExpectedFrequency.ValueSummary
This example demonstrates how scripting in Mechanical can be used to automate your actions.