Main Content

structuralBodyLoad

Specify body load for structural model

Domain-specific structural workflow is not recommended. New features might not be compatible with this workflow. For help migrating your existing code to the unified finite element workflow, see Migration from Domain-Specific to Unified Workflow.

Description

structuralBodyLoad(structuralmodel,"GravitationalAcceleration",GAval) specifies acceleration due to gravity as a body load for a static or transient structural model. Structural models for modal analysis cannot have body loads.

example

structuralBodyLoad(structuralmodel,"AngularVelocity",omega) specifies an angular velocity to model centrifugal loading for an axisymmetric structural model.

example

structuralBodyLoad(structuralmodel,"Temperature",Tval) specifies a thermal load on a static structural analysis model.

Tip

If Tval is the temperature itself, and not a change in temperature, you must specify a reference temperature using structuralmodel.ReferenceTemperature. Otherwise, the toolbox uses the default value (zero) for the reference temperature. For details, see StructuralModel.

example

structuralBodyLoad(structuralmodel,"Temperature",Tresults) uses the steady-state or transient thermal analysis results Tresults to specify a thermal load on a static structural analysis model. If Tresults is the solution of a transient thermal problem, then this syntax uses the temperature and its gradients from the last time step.

example

structuralBodyLoad(structuralmodel,"Temperature",Tresults,"TimeStep",iT) uses the transient thermal analysis results Tresults and the time step index iT to specify a thermal load on a static structural analysis model.

example

structuralBodyLoad(structuralmodel,___) specifies several body loads for the same structural model. Use any arguments from the previous syntaxes applicable to your structuralmodel. For example, specify the gravity and thermal loads as structuralBodyLoad(structuralmodel,"GravitationalAcceleration",[0;0;-9.8],"Temperature",300). Do not use subsequent function calls when assigning several body loads because the toolbox uses only the last assignment.

structuralBodyLoad(___,"Label",labeltext) adds a label for the structural body load to be used by the linearizeInput function. This function lets you pass body loads to the linearize function that extracts sparse linear models for use with Control System Toolbox™.

bodyLoad = structuralBodyLoad(___) returns the body load object.

Examples

collapse all

Create a structural model.

structuralModel = createpde("structural","static-solid");

Create and plot the geometry.

gm = multicuboid(0.5,0.1,0.1);
structuralModel.Geometry = gm;
pdegplot(structuralModel,"FaceAlpha",0.5)

Figure contains an axes object. The axes object contains 6 objects of type quiver, text, patch, line.

Specify Young's modulus, Poisson's ratio, and the mass density. The mass density value is required for modeling gravitational effects.

structuralProperties(structuralModel,"YoungsModulus",210E3, ...
                                     "PoissonsRatio",0.3, ...
                                     "MassDensity",2.7E-6);

Specify the gravity load on the beam.

structuralBodyLoad(structuralModel, ...
    "GravitationalAcceleration",[0;0;-9.8])
ans = 
  BodyLoadAssignment with properties:

                   RegionType: 'Cell'
                     RegionID: 1
    GravitationalAcceleration: [0 0 -9.8000]
              AngularVelocity: []
                  Temperature: []
                     TimeStep: []
                        Label: []

Analyze a spinning disk with radial compression at the hub due to press-fit. The inner radius of the disk is 0.05, and the outer radius is 0.2. The thickness of the disk is 0.05 with an interference fit of 50E-6. For this analysis, simplify the 3-D axisymmetric model to a 2-D model.

Create a static structural analysis model for solving an axisymmetric problem.

structuralmodel = createpde("structural","static-axisymmetric");

The 2-D model is a rectangular strip whose x-dimension extends from the hub to the outer surface, and whose y-dimension extends over the height of the disk. Create the geometry by specifying the coordinates of the strip's four corners. For axisymmetric models, the toolbox assumes that the axis of rotation is the vertical axis passing through r = 0, which is equivalent to x = 0.

g = decsg([3 4 0.05 0.2 0.2 0.05 -0.025 -0.025 0.025 0.025]');

Include the geometry in the model.

geometryFromEdges(structuralmodel,g);

Plot the geometry with the edge and vertex labels.

figure
pdegplot(structuralmodel,"EdgeLabels","on","VertexLabels","on")
xlim([0 0.3])
ylim([-0.05 0.05])

Figure contains an axes object. The axes object contains 9 objects of type line, text.

Specify Young's modulus, Poisson's ratio, and the mass density.

structuralProperties(structuralmodel,"YoungsModulus",210e9, ...
                                     "PoissonsRatio",0.28, ...
                                     "MassDensity",7700);

Apply centrifugal load due to spinning of the disk. Assume that the disk is spinning at 104.7 rad/s.

structuralBodyLoad(structuralmodel,"AngularVelocity",104.7);

Apply radial displacement at the hub of the disk to model press-fit.

structuralBC(structuralmodel,"Edge",4,"RDisplacement",50e-6);

Fix axial displacement of a point on the hub to prevent rigid body motion.

structuralBC(structuralmodel,"Vertex",1,"ZDisplacement",0);

Generate a mesh.

generateMesh(structuralmodel);

Solve the model.

structuralresults = solve(structuralmodel);

Plot the radial displacement of the disk.

figure
pdeplot(structuralmodel, ...
        "XYData",structuralresults.Displacement.ur, ...
        "ColorMap","jet")
axis equal
xlim([0 0.3])
ylim([-0.05 0.05])

Figure contains an axes object. The axes object contains an object of type patch.

Plot circumferential (hoop) stress.

figure
pdeplot(structuralmodel, ...
        "XYData",structuralresults.Stress.sh, ...
        "ColorMap","jet")
axis equal
xlim([0 0.3])
ylim([-0.05 0.05])

Figure contains an axes object. The axes object contains an object of type patch.

Specify a constant temperature rise for a thermal stress analysis of a bimetallic cantilever beam.

Create a static structural model.

structuralmodel = createpde("structural","static-solid");

Create and plot the geometry.

gm = multicuboid(0.5,0.04,[0.03,0.03],"Zoffset",[0,0.03]);
structuralmodel.Geometry = gm;
pdegplot(structuralmodel,"CellLabels","on")

Figure contains an axes object. The axes object contains 6 objects of type quiver, text, patch, line.

Set the reference temperature. This temperature corresponds to the state of zero thermal stress of the model.

structuralmodel.ReferenceTemperature = 20
structuralmodel = 
  StructuralModel with properties:

              AnalysisType: "static-solid"
                  Geometry: [1x1 DiscreteGeometry]
        MaterialProperties: []
                 BodyLoads: []
        BoundaryConditions: []
      ReferenceTemperature: 20
    SuperelementInterfaces: []
                      Mesh: []
             SolverOptions: [1x1 pde.PDESolverOptions]

Apply the constant temperature as a structural body load.

structuralBodyLoad(structuralmodel,"Temperature",300)
ans = 
  BodyLoadAssignment with properties:

                   RegionType: 'Cell'
                     RegionID: [1 2]
    GravitationalAcceleration: []
              AngularVelocity: []
                  Temperature: 300
                     TimeStep: []
                        Label: []

Specify a thermal load using the solution from a steady-state thermal analysis on the same geometry and mesh.

Steady-State Thermal Model Analysis

Create a steady-state thermal model.

thermalmodel = createpde("thermal","steadystate");

Create and plot the geometry.

gm = multicuboid(0.5,0.1,0.05);
thermalmodel.Geometry = gm;
pdegplot(thermalmodel,"FaceLabels","on","FaceAlpha",0.5)

Figure contains an axes object. The axes object contains 6 objects of type quiver, text, patch, line.

Generate a mesh.

generateMesh(thermalmodel);

Specify the thermal conductivity of the material.

thermalProperties(thermalmodel,"ThermalConductivity",5e-3);

Specify constant temperatures on the left and right ends on the beam.

thermalBC(thermalmodel,"Face",3,"Temperature",100);
thermalBC(thermalmodel,"Face",5,"Temperature",0);

Specify the heat source over the entire geometry.

internalHeatSource(thermalmodel,10);

Solve the model.

thermalresults = solve(thermalmodel)
thermalresults = 
  SteadyStateThermalResults with properties:

    Temperature: [3915x1 double]
     XGradients: [3915x1 double]
     YGradients: [3915x1 double]
     ZGradients: [3915x1 double]
           Mesh: [1x1 FEMesh]

Plot the temperature distribution.

pdeplot3D(thermalmodel,"ColorMapData",thermalresults.Temperature)

Figure contains an axes object. The hidden axes object contains 5 objects of type patch, quiver, text.

Static Structural Analysis with Thermal Load

Create a static structural model.

structuralmodel = createpde("structural","static-solid");

Include the same geometry as for the thermal model.

structuralmodel.Geometry = gm;

Apply the solution of the thermal model analysis as a body load for the structural model.

structuralBodyLoad(structuralmodel,"Temperature",thermalresults)
ans = 
  BodyLoadAssignment with properties:

                   RegionType: 'Cell'
                     RegionID: 1
    GravitationalAcceleration: []
              AngularVelocity: []
                  Temperature: [1x1 pde.SteadyStateThermalResults]
                     TimeStep: []
                        Label: []

Specify a thermal load using the solution from a transient thermal analysis on the same geometry and mesh.

Transient Thermal Model Analysis

Create a transient thermal model.

thermalmodel = createpde("thermal","transient");

Create and plot the geometry.

gm = multicuboid(0.5,0.1,0.05);
thermalmodel.Geometry = gm;
pdegplot(thermalmodel,"FaceLabels","on","FaceAlpha",0.5)

Figure contains an axes object. The axes object contains 6 objects of type quiver, text, patch, line.

Generate a mesh.

generateMesh(thermalmodel);

Specify the thermal properties of the material.

thermalProperties(thermalmodel,"ThermalConductivity",5e-3, ...
                               "MassDensity",2.7*10^(-6), ...
                               "SpecificHeat",10);

Specify the constant temperatures on the left and right ends on the beam.

thermalBC(thermalmodel,"Face",3,"Temperature",100);
thermalBC(thermalmodel,"Face",5,"Temperature",0);

Specify the heat source over the entire geometry.

internalHeatSource(thermalmodel,10);

Set the initial temperature.

thermalIC(thermalmodel,0);

Solve the model.

tlist = 0:1e-4:2e-4;
thermalresults = solve(thermalmodel,tlist)
thermalresults = 
  TransientThermalResults with properties:

      Temperature: [3915x3 double]
    SolutionTimes: [0 1.0000e-04 2.0000e-04]
       XGradients: [3915x3 double]
       YGradients: [3915x3 double]
       ZGradients: [3915x3 double]
             Mesh: [1x1 FEMesh]

Plot the temperature distribution for each time step.

for n = 1:numel(thermalresults.SolutionTimes)
    figure
    pdeplot3D(thermalmodel,"ColorMapData", ...
          thermalresults.Temperature(:,n))
    title(["Time = " num2str(tlist(n))])
end

Figure contains an axes object. The hidden axes object with title Time = 0 contains 5 objects of type patch, quiver, text.

Figure contains an axes object. The hidden axes object with title Time = 0.0001 contains 5 objects of type patch, quiver, text.

Figure contains an axes object. The hidden axes object with title Time = 0.0002 contains 5 objects of type patch, quiver, text.

Static Structural Analysis with Thermal Load

Create a static structural model.

structuralmodel = createpde("structural","static-solid");

Include the same geometry as for the thermal model.

structuralmodel.Geometry = gm;

Apply the solution of the thermal model analysis as a body load for the structural model. By default, structuralBodyLoad uses the thermal model solution for the last time step.

structuralBodyLoad(structuralmodel,"Temperature",thermalresults);

You also can specify the time step you want to use. For example, apply the thermal model solution for the second time step as a body load for the structural model.

structuralBodyLoad(structuralmodel,"Temperature",thermalresults, ...
                                   "TimeStep",2);

Input Arguments

collapse all

Static or transient structural model, specified as a StructuralModel object. The model contains the geometry, mesh, structural properties of the material, body loads, boundary loads, and boundary conditions.

Example: structuralmodel = createpde("structural","transient-solid")

Acceleration due to gravity, specified as a numeric vector. GAval must be specified in units consistent with those of the geometry and material properties.

Example: structuralBodyLoad(structuralmodel,"GravitationalAcceleration",[0;0;-9.8])

Data Types: double

Angular velocity for an axisymmetric model, specified as a positive number. omega must be specified in units consistent with those of the geometry and material properties.

For axisymmetric models, the toolbox assumes that the axis of rotation is the vertical axis passing through r = 0, which is equivalent to x = 0.

Example: structuralBodyLoad(structuralmodel,"AngularVelocity",2.3)

Data Types: double

Constant thermal load on a static structural model, specified as a real number. Tval must be specified in units consistent with those of the geometry and material properties.

Example: structuralBodyLoad(structuralmodel,"Temperature",300)

Data Types: double

Thermal model solution applied as a body load on a static structural model, specified as a SteadyStateThermalResults or TransientThermalResults object. Create Tresults by using solve.

Example: Tresults = solve(thermalmodel); structuralBodyLoad(structuralmodel,"Temperature",Tresults)

Time index, specified as a positive integer.

Example: structuralBodyLoad(structuralmodel,"Temperature",Tresults,"TimeStep",21)

Data Types: double

Label for the structural body load, specified as a character vector or a string.

Data Types: char | string

Output Arguments

collapse all

Handle to body load, returned as a BodyLoadAssignment object. See BodyLoadAssignment Properties.

Version History

Introduced in R2017b

expand all