Main Content

solve

Solve structural analysis, heat transfer, or electromagnetic analysis problem

Domain-specific structural, heat transfer, and electromagnetic workflows are not recommended. New features might not be compatible with these workflows. For help migrating your existing code to the unified finite element workflow, see Migration from Domain-Specific to Unified Workflow.

Description

results = solve(fem) solves the structural, thermal, or electromagnetic problem represented by the finite element analysis model fem.

example

results = solve(fem,tlist) returns the solution at the times specified in tlist.

example

results = solve(fem,flist) returns the solution at the frequencies specified in flist.

results = solve(fem,FrequencyRange=[omega1,omega2]) solves the structural modal analysis problem represented by the finite element analysis model fem for all modes in the frequency range [omega1,omega2]. Define omega1 as slightly lower than the lowest expected frequency and omega2 as slightly higher than the highest expected frequency. For example, if the lowest expected frequency is zero, then use a small negative value for omega1.

example

results = solve(fem,DecayRange=[lambda1,lambda2]) performs an eigen decomposition of a linear thermal problem represented by the finite element analysis model fem for all modes in the decay range [lambda1,lambda2]. The resulting modes enable you to:

  • Use the modal superposition method to speed up a transient thermal analysis.

  • Extract the reduced modal system to use, for example, in Simulink®.

results = solve(fem,Snapshots=Tmatrix) obtains the modal basis of a linear or nonlinear thermal problem represented by the finite element analysis model fem using proper orthogonal decomposition (POD). You can use the resulting modes to speed up a transient thermal analysis or, if your thermal model is linear, to extract the reduced modal system.

example

results = solve(fem,tlist,ModalResults=thermalModalR), results = solve(fem,tlist,ModalResults=structuralModalR), and results = solve(fem,flist,ModalResults=structuralModalR) solve a transient thermal or structural problem or a frequency response structural problem, respectively, by using the modal superposition method to speed up computations. First, perform modal analysis to compute natural frequencies and mode shapes in a particular frequency or decay range. Then, use this syntax to invoke the modal superposition method. The accuracy of the results depends on the modes in the modal analysis results.

example

results = solve(fem,tlist,ModalResults=structuralModalR,DampingZeta=z) and results = solve(fem,flist,ModalResults=structuralModalR,DampingZeta=z) solve a transient or frequency response structural problem with modal damping using the results of modal analysis. Here, z is the modal damping ratio.

results = solve(fem,omega) solves a harmonic electromagnetic problem represented in fem at the frequencies specified in omega.

example

structuralStaticResults = solve(structuralStatic) returns the solution to the static structural analysis model represented in structuralStatic.

structuralTransientResults = solve(structuralTransient,tlist) returns the solution to the transient structural dynamics model represented in structuralTransient at the times specified in tlist.

structuralFrequencyResponseResults = solve(structuralFrequencyResponse,flist) returns the solution to the frequency response model represented in structuralFrequencyResponse at the frequencies specified in flist.

example

structuralModalResults = solve(structuralModal,"FrequencyRange",[omega1,omega2]) returns the solution to the modal analysis model for all modes in the frequency range [omega1,omega2]. Define omega1 as slightly lower than the lowest expected frequency and omega2 as slightly higher than the highest expected frequency. For example, if the lowest expected frequency is zero, then use a small negative value for omega1.

structuralTransientResults = solve(structuralTransient,tlist,ModalResults=structuralModalR) and structuralFrequencyResponseResults = solve(structuralFrequencyResponse,flist,ModalResults=structuralModalR) solves a transient and a frequency response structural model, respectively, by using the modal superposition method to speed up computations. First, perform modal analysis to compute natural frequencies and mode shapes in a particular frequency range. Then, use this syntax to invoke the modal superposition method. The accuracy of the results depends on the modes in the modal analysis results.

thermalSteadyStateResults = solve(thermalSteadyState) returns the solution to the steady-state thermal model represented in thermalSteadyState.

thermalTransientResults = solve(thermalTransient,tlist) returns the solution to the transient thermal model represented in thermalTransient at the times specified in tlist.

thermalModalResults = solve(thermalModal,DecayRange=[lambda1,lambda2]) performs an eigen decomposition of a linear thermal model thermalModal for all modes in the decay range [lambda1,lambda2]. The resulting modes enable you to:

  • Use the modal superposition method to speed up a transient thermal analysis.

  • Extract the reduced modal system to use, for example, in Simulink.

thermalModalResults = solve(thermalModal,Snapshots=Tmatrix) obtains the modal basis of a linear or nonlinear thermal model using proper orthogonal decomposition (POD). You can use the resulting modes to speed up a transient thermal analysis or, if your thermal model is linear, to extract the reduced modal system.

thermalTransientResults = solve(thermalTransient,tlist,ModalResults=thermalModalR) solves a transient thermal model by using the modal superposition method to speed up computations. First, perform modal decomposition to compute mode shapes for a particular decay range. Then, use this syntax to invoke the modal superposition method. The accuracy of the results depends on the modes in the modal analysis results.

emagStaticResults = solve(emagmodel) returns the solution to the electrostatic, magnetostatic, or DC conduction model represented in emagmodel.

emagHarmonicResults = solve(emagmodel,Frequency=omega) returns the solution to the harmonic electromagnetic analysis model represented in emagmodel at the frequencies specified in omega.

Examples

collapse all

Solve a static structural problem representing a bimetallic cable under tension.

Create and plot a bimetallic cable geometry.

gm = multicylinder([0.01 0.015],0.05);
pdegplot(gm,FaceLabels="on", ...
            CellLabels="on", ...
            FaceAlpha=0.5)

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

Create an femodel object for static structural analysis and include the geometry.

model = femodel(AnalysisType="structuralStatic", ...
                Geometry=gm);

Specify Young's modulus and Poisson's ratio for each metal.

model.MaterialProperties(1) = ...
    materialProperties(YoungsModulus=110E9, ...
                       PoissonsRatio=0.28);
model.MaterialProperties(2) = ...
    materialProperties(YoungsModulus=210E9, ...
                       PoissonsRatio=0.3);

Specify that faces 1 and 4 are fixed boundaries.

model.FaceBC([1,4]) = faceBC(Constraint="fixed");

Specify the surface traction for faces 2 and 5.

model.FaceLoad([2,5]) = faceLoad(SurfaceTraction=[0;0;100]);

Generate a mesh and solve the problem.

model = generateMesh(model);
R = solve(model)
R = 
  StaticStructuralResults with properties:

      Displacement: [1x1 FEStruct]
            Strain: [1x1 FEStruct]
            Stress: [1x1 FEStruct]
    VonMisesStress: [23098x1 double]
              Mesh: [1x1 FEMesh]

The solver finds the values of the displacement, stress, strain, and von Mises stress at the nodal locations. To access these values, use R.Displacement, R.Stress, and so on. The displacement, stress, and strain values at the nodal locations are returned as FEStruct objects with the properties representing their components. Note that properties of an FEStruct object are read-only.

R.Displacement
ans = 
  FEStruct with properties:

           ux: [23098x1 double]
           uy: [23098x1 double]
           uz: [23098x1 double]
    Magnitude: [23098x1 double]

R.Stress
ans = 
  FEStruct with properties:

    sxx: [23098x1 double]
    syy: [23098x1 double]
    szz: [23098x1 double]
    syz: [23098x1 double]
    sxz: [23098x1 double]
    sxy: [23098x1 double]

R.Strain
ans = 
  FEStruct with properties:

    exx: [23098x1 double]
    eyy: [23098x1 double]
    ezz: [23098x1 double]
    eyz: [23098x1 double]
    exz: [23098x1 double]
    exy: [23098x1 double]

Plot the deformed shape with the z-component of normal stress.

pdeplot3D(R.Mesh, ...
          ColorMapData=R.Stress.szz, ...
          Deformation=R.Displacement)

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

Solve for the transient response of a thin 3-D plate under a harmonic load at the center.

Create a geometry of a thin 3-D plate and plot it.

gm = multicuboid([5,0.05],[5,0.05],0.01);
pdegplot(gm,FaceLabels="on",FaceAlpha=0.5)

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

Zoom in to see the face labels on the small plate at the center.

figure
pdegplot(gm,FaceLabels="on",FaceAlpha=0.25)
axis([-0.2 0.2 -0.2 0.2 -0.1 0.1])

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

Create an femodel object for transient structural analysis and include the geometry.

model = femodel(AnalysisType="structuralTransient", ...
                Geometry=gm);

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

model.MaterialProperties = ...
    materialProperties(YoungsModulus=210E9, ...
                       PoissonsRatio=0.3, ...
                       MassDensity=7800);

Specify that all faces on the periphery of the thin 3-D plate are fixed boundaries.

model.FaceBC(5:8) = faceBC(Constraint="fixed");

Apply a sinusoidal pressure load on the small face at the center of the plate.

First, define a sinusoidal load function, sinusoidalLoad, to model a harmonic load. This function accepts the load magnitude (amplitude), the location and state structure arrays, frequency, and phase. Because the function depends on time, it must return a matrix of NaN of the correct size when state.time is NaN. Solvers check whether a problem is nonlinear or time-dependent by passing NaN state values and looking for returned NaN values.

function Tn = sinusoidalLoad(load,location,state,Frequency,Phase)
if isnan(state.time)
    Tn = NaN*(location.nx);
    return
end
if isa(load,"function_handle")
    load = load(location,state);
else
    load = load(:);
end
% Transient model excited with harmonic load
Tn = load.*sin(Frequency.*state.time + Phase);
end

Now, apply a sinusoidal pressure load on face 12 by using the sinusoidalLoad function.

Pressure = 5e7;
Frequency = 25;
Phase = 0;
pressurePulse = @(location,state) ...
         sinusoidalLoad(Pressure,location,state,Frequency,Phase);
model.FaceLoad(12) = faceLoad(Pressure=pressurePulse);

Generate a mesh with linear elements.

model = generateMesh(model,GeometricOrder="linear",Hmax=0.2);

Specify zero initial displacement and velocity.

model.CellIC = cellIC(Displacement=[0;0;0],Velocity=[0;0;0]);

Solve the model.

tlist = linspace(0,1,300);
R = solve(model,tlist);

The solver finds the values of the displacement, velocity, and acceleration at the nodal locations. To access these values, use R.Displacement, R.Velocity, and so on. The displacement, velocity, and acceleration values are returned as FEStruct objects with the properties representing their components. Note that properties of an FEStruct object are read-only.

R.Displacement
ans = 
  FEStruct with properties:

           ux: [2217x300 double]
           uy: [2217x300 double]
           uz: [2217x300 double]
    Magnitude: [2217x300 double]

R.Velocity
ans = 
  FEStruct with properties:

           vx: [2217x300 double]
           vy: [2217x300 double]
           vz: [2217x300 double]
    Magnitude: [2217x300 double]

R.Acceleration
ans = 
  FEStruct with properties:

           ax: [2217x300 double]
           ay: [2217x300 double]
           az: [2217x300 double]
    Magnitude: [2217x300 double]

Perform frequency response analysis of a tuning fork.

Create an femodel object for frequency response analysis and include the geometry of a tuning fork in the model.

model = femodel(AnalysisType="structuralFrequency", ...
                Geometry="TuningFork.stl");

Specify Young's modulus, Poisson's ratio, and the mass density to model linear elastic material behavior. Specify all physical properties in consistent units.

model.MaterialProperties = ...
    materialProperties(YoungsModulus=210E9, ...
                       PoissonsRatio=0.3, ...
                       MassDensity=8000);

Identify faces for applying boundary constraints and loads by plotting the geometry with the face labels.

figure("units","normalized","outerposition",[0 0 1 1])
pdegplot(model,FaceLabels="on")
view(-50,15)
title("Geometry with Face Labels")

Figure contains an axes object. The axes object with title Geometry with Face Labels contains 6 objects of type quiver, text, patch, line.

Impose sufficient boundary constraints to prevent rigid body motion under applied loading. Typically, you hold a tuning fork by hand or mount it on a table. To create a simple approximation of this boundary condition, fix a region near the intersection of tines and the handle (faces 21 and 22).

model.FaceBC([21,22]) = faceBC(Constraint="fixed");

Specify the pressure loading on a tine (face 11) as a short rectangular pressure pulse.

model.FaceLoad(11) = faceLoad(Pressure=1);

Generate a mesh. Specify the Hface name-value argument to generate a finer mesh for small faces.

model = generateMesh(model,Hmax=0.005,Hface={[3 4 9 10],0.0003});

In the frequency domain, this pressure pulse is a unit load uniformly distributed across all frequencies.

flist = linspace(0,4000,150);
R = solve(model,2*pi*flist);

Plot the vibration frequency of the tine tip, which is face 12. Find nodes on the tip face and plot the y-component of the displacement over the frequency, using one of these nodes.

excitedTineTipNodes = findNodes(model.Mesh,"region",Face=12);
tipDisp = R.Displacement.uy(excitedTineTipNodes(1),:);

figure 
plot(flist,abs(tipDisp)) 
xlabel("Frequency");
ylabel("|Y-Displacement|");

Figure contains an axes object. The axes object with xlabel Frequency, ylabel |Y-Displacement| contains an object of type line.

Find the fundamental (lowest) mode of a 2-D cantilevered beam, assuming prevalence of the plane-stress condition.

Specify geometric and structural properties of the beam, along with a unit plane-stress thickness.

length = 5;
height = 0.1;
E = 3E7;
nu = 0.3;
rho = 0.3/386;

Create a geometry.

gdm = [3;4;0;length;length;0;0;0;height;height];
g = decsg(gdm,'S1',('S1')');

Create an femodel object for modal structural analysis and include the geometry.

model = femodel(Analysistype="structuralModal", ...
                Geometry=g);

Define a maximum element size (five elements through the beam thickness).

hmax = height/5;

Generate a mesh.

model=generateMesh(model,Hmax=hmax);

Specify the structural properties and boundary constraints.

model.MaterialProperties = ...
    materialProperties(YoungsModulus=E, ...
                       MassDensity=rho, ... 
                       PoissonsRatio=nu);
model.EdgeBC(4) = edgeBC(Constraint="fixed");

Compute the analytical fundamental frequency (Hz) using the beam theory.

I = height^3/12;
analyticalOmega1 = 3.516*sqrt(E*I/(length^4*(rho*height)))/(2*pi)
analyticalOmega1 = 
126.9498

Specify a frequency range that includes an analytically computed frequency and solve the model.

R = solve(model,FrequencyRange=[0,1e6])
R = 
  ModalStructuralResults with properties:

    NaturalFrequencies: [32x1 double]
            ModeShapes: [1x1 FEStruct]
                  Mesh: [1x1 FEMesh]

The solver finds natural frequencies and modal displacement values at nodal locations. To access these values, use R.NaturalFrequencies and R.ModeShapes.

R.NaturalFrequencies/(2*pi)
ans = 32×1
105 ×

    0.0013
    0.0079
    0.0222
    0.0433
    0.0711
    0.0983
    0.1055
    0.1462
    0.1930
    0.2455
      ⋮

R.ModeShapes
ans = 
  FEStruct with properties:

           ux: [6511x32 double]
           uy: [6511x32 double]
    Magnitude: [6511x32 double]

Plot the y-component of the solution for the fundamental frequency.

pdeplot(R.Mesh,XYData=R.ModeShapes.uy(:,1))
title(['First Mode with Frequency ', ...
        num2str(R.NaturalFrequencies(1)/(2*pi)),' Hz'])
axis equal

Figure contains an axes object. The axes object with title First Mode with Frequency 126.9416 Hz contains an object of type patch.

Solve for the transient response at the center of a 3-D beam under a harmonic load on one of its corners.

Modal Analysis

Create a beam geometry.

gm = multicuboid(0.05,0.003,0.003);

Plot the geometry with the edge and vertex labels.

pdegplot(gm,EdgeLabels="on",VertexLabels="on");
view([95 5])

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

Create an femodel object for modal structural analysis and include the geometry.

model = femodel(AnalysisType="structuralModal", ...
                Geometry=gm);

Generate a mesh.

model = generateMesh(model);

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

model.MaterialProperties = ...
    materialProperties(YoungsModulus=210E9, ...
                       PoissonsRatio=0.3, ...
                       MassDensity=7800);

Specify minimal constraints on one end of the beam to prevent rigid body modes. For example, specify that edge 4 and vertex 7 are fixed boundaries.

model.EdgeBC(4) = edgeBC(Constraint="fixed");
model.VertexBC(7) = vertexBC(Constraint="fixed");

Solve the problem for the frequency range from 0 to 500,000. The recommended approach is to use a value that is slightly lower than the expected lowest frequency. Thus, use -0.1 instead of 0.

Rm = solve(model,FrequencyRange=[-0.1,500000]);

Transient Analysis

Switch the analysis type of the model to structural transient.

model.AnalysisType = "structuralTransient";

Apply a sinusoidal force on the corner opposite of the constrained edge and vertex.

First, define a sinusoidal load function, sinusoidalLoad, to model a harmonic load. This function accepts the load magnitude (amplitude), the location and state structure arrays, frequency, and phase. Because the function depends on time, it must return a matrix of NaN of the correct size when state.time is NaN. Solvers check whether a problem is nonlinear or time-dependent by passing NaN state values and looking for returned NaN values.

function Tn = sinusoidalLoad(load,location,state,Frequency,Phase)
if isnan(state.time)
    normal = [location.nx location.ny];
    if isfield(location,"nz")
        normal = [normal location.nz];
    end
    Tn = NaN*normal;
    return
end
if isa(load,"function_handle")
    load = load(location,state);
else
    load = load(:);
end
% Transient model excited with harmonic load
Tn = load.*sin(Frequency.*state.time + Phase);
end

Now, apply a sinusoidal force on vertex 5 by using the sinusoidalLoad function.

Force = [0,0,10];
Frequency = 7600;
Phase = 0;
forcePulse = @(location,state) ...
         sinusoidalLoad(Force,location,state,Frequency,Phase);
model.VertexLoad(5) = vertexLoad(Force=forcePulse);

Specify zero initial displacement and velocity.

model.CellIC = cellIC(Velocity=[0;0;0], ...
                      Displacement=[0;0;0]);

Specify the relative and absolute tolerances for the solver.

model.SolverOptions.RelativeTolerance = 1E-5;
model.SolverOptions.AbsoluteTolerance = 1E-9;

Solve the model using the modal results.

tlist = linspace(0,0.004,120);
Rdm = solve(model,tlist,ModalResults=Rm);

Interpolate and plot the displacement at the center of the beam.

intrpUdm = interpolateDisplacement(Rdm,0,0,0.0015);

plot(Rdm.SolutionTimes,intrpUdm.uz)
grid on
xlabel("Time");
ylabel("Center of beam displacement")

Figure contains an axes object. The axes object with xlabel Time, ylabel Center of beam displacement contains an object of type line.

Find the deflection of a 3-D cantilever beam under a nonuniform thermal load. Specify the thermal load for the structural problem using the solution from a transient thermal analysis on the same geometry and mesh.

Transient Thermal Model Analysis

Create and plot the geometry.

gm = multicuboid(0.5,0.1,0.05);
pdegplot(gm,FaceLabels="on",FaceAlpha=0.3)

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

Create an femodel object for transient thermal analysis and include the geometry.

model = femodel(AnalysisType="thermalTransient", ...
                Geometry = gm);

Generate a mesh.

model = generateMesh(model);

Specify the thermal properties of the material.

model.MaterialProperties = ...
    materialProperties(ThermalConductivity=5e-3, ...
                       MassDensity=2.7*10^(-6), ...
                       SpecificHeat=10);

Specify the constant temperatures applied to the left and right ends of the beam.

model.FaceBC(3) = faceBC(Temperature=100);
model.FaceBC(5) = faceBC(Temperature=0);

Specify the heat source over the entire geometry.

model.CellLoad = cellLoad(Heat=10);

Set the initial temperature.

model.CellIC = cellIC(Temperature=0);

Solve the model.

tlist = 0:1e-4:2e-4;
thermalresults = solve(model,tlist);

Plot the temperature distribution for each time step.

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

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

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

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

Structural Analysis with Thermal Load

Switch the analysis type of the model to structural static.

model.AnalysisType = "structuralStatic";

Specify Young's modulus, Poisson's ratio, and the coefficient of thermal expansion.

model.MaterialProperties = ...
    materialProperties(YoungsModulus=1e10, ...
                       PoissonsRatio=0.3, ...
                       CTE=11.7e-6);

Apply a fixed boundary condition on face 5.

model.FaceBC(5) = faceBC(Constraint="fixed");

Apply a thermal load using the transient thermal results. By default, the toolbox uses the solution for the last time step.

model.CellLoad = cellLoad(Temperature=thermalresults);

Specify the reference temperature.

model.ReferenceTemperature = 10;

Solve the structural problem.

thermalstressresults = solve(model);

Plot the deformed shape of the beam corresponding to the last step of the transient thermal solution.

pdeplot3D(thermalstressresults.Mesh, ...
            "ColorMapData", ...
             thermalstressresults.Displacement.Magnitude, ...
            "Deformation", ...
             thermalstressresults.Displacement)
title(["Thermal Expansion at Solution Time = " ...
                         num2str(tlist(end))])

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

Now specify the thermal loads as the thermal results for all time steps. Access the results for each step by using the filterByIndex function. For each thermal load, solve the structural problem and plot the corresponding deformed shape of the beam.

for n = 1:numel(thermalresults.SolutionTimes)
    resultsByStep = filterByIndex(thermalresults,n);
    model.CellLoad = ...
        cellLoad(Temperature=resultsByStep);
    thermalstressresults = solve(model);
    figure
    pdeplot3D(thermalstressresults.Mesh, ...
              ColorMapData = ...
              thermalstressresults.Displacement.Magnitude, ...
              Deformation =  ...
              thermalstressresults.Displacement)
    title(["Thermal Results at Solution Time = " ...
                             num2str(tlist(n))])
end

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

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

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

Solve a 3-D steady-state thermal problem.

Create an femodel object for a steady-state thermal problem and include a geometry representing a block.

model = femodel(AnalysisType="thermalSteady", ...
                Geometry="Block.stl");

Plot the block geometry.

pdegplot(model.Geometry, ...
         FaceLabels="on", ...
         FaceAlpha=0.5)
axis equal

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

Assign material properties.

model.MaterialProperties = ...
    materialProperties(ThermalConductivity=80);

Apply a constant temperature of 100 °C to the left side of the block (face 1) and a constant temperature of 300 °C to the right side of the block (face 3). All other faces are insulated by default.

model.FaceBC(1) = faceBC(Temperature=100);
model.FaceBC(3) = faceBC(Temperature=300);

Mesh the geometry and solve the problem.

model = generateMesh(model);
thermalresults = solve(model)
thermalresults = 
  SteadyStateThermalResults with properties:

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

The solver finds the temperatures and temperature gradients at the nodal locations. To access these values, use thermalresults.Temperature, thermalresults.XGradients, and so on. For example, plot temperatures at the nodal locations.

pdeplot3D(thermalresults.Mesh,ColorMapData=thermalresults.Temperature)

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

Solve a 2-D transient thermal problem.

Create a geometry representing a square plate with a diamond-shaped region in its center.

SQ1 = [3; 4; 0; 3; 3; 0; 0; 0; 3; 3];
D1 = [2; 4; 0.5; 1.5; 2.5; 1.5; 1.5; 0.5; 1.5; 2.5];
gd = [SQ1 D1];
sf = 'SQ1+D1';
ns = char('SQ1','D1');
ns = ns';
g = decsg(gd,sf,ns);
pdegplot(g,EdgeLabels="on",FaceLabels="on")
xlim([-1.5 4.5])
ylim([-0.5 3.5])
axis equal

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

Create an femodel object for transient thermal analysis and include the geometry.

model = femodel(AnalysisType="thermalTransient", ...
                Geometry=g);

For the square region, assign these thermal properties:

  • Thermal conductivity is 10W/(mC)

  • Mass density is 2kg/m3

  • Specific heat is 0.1J/(kgC)

model.MaterialProperties(1) = ...
    materialProperties(ThermalConductivity=10, ...
                       MassDensity=2, ...
                       SpecificHeat=0.1);

For the diamond region, assign these thermal properties:

  • Thermal conductivity is 2W/(mC)

  • Mass density is 1kg/m3

  • Specific heat is 0.1J/(kgC)

model.MaterialProperties(2) = ...
    materialProperties(ThermalConductivity=2, ...
                       MassDensity=1, ...
                       SpecificHeat=0.1);

Assume that the diamond-shaped region is a heat source with a density of 4W/m2.

model.FaceLoad(2) = faceLoad(Heat=4);

Apply a constant temperature of 0 °C to the sides of the square plate.

model.EdgeBC([1 2 7 8]) = edgeBC(Temperature=0);

Set the initial temperature to 0 °C.

model.FaceIC = faceIC(Temperature=0);

Generate the mesh.

model = generateMesh(model);

The dynamics for this problem are very fast. The temperature reaches a steady state in about 0.1 second. To capture the most active part of the dynamics, set the solution time to logspace(-2,-1,10). This command returns 10 logarithmically spaced solution times between 0.01 and 0.1.

tlist = logspace(-2,-1,10);

Solve the equation.

thermalresults = solve(model,tlist);

Plot the solution with isothermal lines by using a contour plot.

T = thermalresults.Temperature;
msh = thermalresults.Mesh;
pdeplot(msh,XYData=T(:,10),Contour="on",ColorMap="hot")

Figure contains an axes object. The axes object contains 12 objects of type patch, line.

Solve a transient thermal problem by first obtaining mode shapes for a particular decay range and then using the modal superposition method.

Modal Decomposition

Create a geometry representing a square plate with a diamond-shaped region in its center.

SQ1 = [3; 4; 0; 3; 3; 0; 0; 0; 3; 3];
D1 = [2; 4; 0.5; 1.5; 2.5; 1.5; 1.5; 0.5; 1.5; 2.5];
gd = [SQ1 D1];
sf = 'SQ1+D1';
ns = char('SQ1','D1');
ns = ns';
g = decsg(gd,sf,ns);
pdegplot(g,EdgeLabels="on",FaceLabels="on")
xlim([-1.5 4.5])
ylim([-0.5 3.5])
axis equal

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

Create an femodel object for modal thermal analysis and include the geometry.

model = femodel(AnalysisType="thermalModal", ...
                Geometry=g);

For the square region, assign these thermal properties:

  • Thermal conductivity is 10W/(mC).

  • Mass density is 2kg/m3.

  • Specific heat is 0.1J/(kgC).

model.MaterialProperties(1) = ...
    materialProperties(ThermalConductivity=10, ...
                       MassDensity=2, ...
                       SpecificHeat=0.1);

For the diamond region, assign these thermal properties:

  • Thermal conductivity is 2W/(mC).

  • Mass density is 1kg/m3.

  • Specific heat is 0.1J/(kgC).

model.MaterialProperties(2) = ...
    materialProperties(ThermalConductivity=2, ...
                       MassDensity=1, ...
                       SpecificHeat=0.1);

Assume that the diamond-shaped region is a heat source with a density of 4W/m2.

model.FaceLoad(2) = faceLoad(Heat=4);

Apply a constant temperature of 0 °C to the sides of the square plate.

model.EdgeBC([1 2 7 8]) = edgeBC(Temperature=0);

Set the initial temperature to 0 °C.

model.FaceIC = faceIC(Temperature=0);

Generate the mesh.

model = generateMesh(model);

Compute eigenmodes of the model in the decay range [100,10000] s-1.

RModal = solve(model,DecayRange=[100,10000])
RModal = 
  ModalThermalResults with properties:

    DecayRates: [171x1 double]
    ModeShapes: [1461x171 double]
      ModeType: "EigenModes"
          Mesh: [1x1 FEMesh]

Transient Analysis

Knowing the mode shapes, you can now use the modal superposition method to solve the transient thermal problem. First, switch the model analysis type to thermal transient.

model.AnalysisType = "thermalTransient";

The dynamics for this problem are very fast. The temperature reaches a steady state in about 0.1 second. To capture the most active part of the dynamics, set the solution time to logspace(-2,-1,100). This command returns 100 logarithmically spaced solution times between 0.01 and 0.1.

tlist = logspace(-2,-1,10);

Solve the equation.

Rtransient = solve(model,tlist,ModalResults=RModal);

Plot the solution with isothermal lines by using a contour plot.

msh = Rtransient.Mesh
msh = 
  FEMesh with properties:

             Nodes: [2x1461 double]
          Elements: [6x694 double]
    MaxElementSize: 0.1697
    MinElementSize: 0.0849
     MeshGradation: 1.5000
    GeometricOrder: 'quadratic'

T = Rtransient.Temperature;
pdeplot(msh,XYData=T(:,end),Contour="on", ...
                            ColorMap="hot")

Figure contains an axes object. The axes object contains 12 objects of type patch, line.

Obtain POD modes of a linear thermal problem using several instances of the transient solution (snapshots).

Create an femodel object for transient thermal analysis and include a unit square geometry in the model.

model = femodel(AnalysisType="thermalTransient", ...
                Geometry=@squareg);

Plot the geometry, displaying edge labels.

pdegplot(model.Geometry,EdgeLabels="on")
xlim([-1.1 1.1])
ylim([-1.1 1.1])

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

Specify the thermal conductivity, mass density, and specific heat of the material.

model.MaterialProperties = ...
    materialProperties(ThermalConductivity=400, ...
                       MassDensity=1300, ...
                       SpecificHeat=600);

Set the temperature on the right edge to 100.

model.EdgeBC(2) = edgeBC(Temperature=100);

Set an initial value of 0 for the temperature.

model.FaceIC = faceIC(Temperature=0);

Generate a mesh.

model = generateMesh(model);

Solve the model for three different values of heat source and collect snapshots.

tlist = 0:10:600;
snapShotIDs = [1:10 59 60 61];
Tmatrix = [];

heatVariation = [10000 15000 20000];
for q = heatVariation
    model.FaceLoad = faceLoad(Heat=q);
    results = solve(model,tlist);
    Tmatrix = [Tmatrix,results.Temperature(:,snapShotIDs)];
end

Switch the model analysis type to thermal modal.

model.AnalysisType = "thermalModal";

Compute the POD modes.

RModal = solve(model,Snapshots=Tmatrix)
RModal = 
  ModalThermalResults with properties:

          DecayRates: [6x1 double]
          ModeShapes: [1529x6 double]
    SnapshotsAverage: [1529x1 double]
            ModeType: "PODModes"
                Mesh: [1x1 FEMesh]

Solve an electromagnetic problem and find the electric potential and field distribution for a 2-D geometry representing a plate with a hole.

Create an femodel object for electrostatic analysis and include a geometry representing a plate with a hole.

model = femodel(AnalysisType="electrostatic",...
                Geometry="PlateHolePlanar.stl");

Plot the geometry with edge labels.

pdegplot(model.Geometry,EdgeLabels="on")

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

Specify the vacuum permittivity value in the SI system of units.

model.VacuumPermittivity = 8.8541878128E-12;

Specify the relative permittivity of the material.

model.MaterialProperties = ...
    materialProperties(RelativePermittivity=1);

Apply the voltage boundary conditions on the edges framing the rectangle and the circle.

model.EdgeBC(1:4) = edgeBC(Voltage=0);
model.EdgeBC(5) = edgeBC(Voltage=1000);

Specify the charge density for the entire geometry.

model.FaceLoad = faceLoad(ChargeDensity=5E-9);

Generate the mesh.

model = generateMesh(model);

Solve the model.

R = solve(model)
R = 
  ElectrostaticResults with properties:

      ElectricPotential: [1231x1 double]
          ElectricField: [1x1 FEStruct]
    ElectricFluxDensity: [1x1 FEStruct]
                   Mesh: [1x1 FEMesh]

Plot the electric potential and field.

pdeplot(R.Mesh,XYData=R.ElectricPotential, ...
               FlowData=[R.ElectricField.Ex ...
                         R.ElectricField.Ey])
axis equal

Figure contains an axes object. The axes object contains 2 objects of type patch, quiver.

Solve a 3-D electromagnetic problem on a geometry representing a plate with a hole in its center. Plot the resulting magnetic potential and field distribution.

Create an femodel object for magnetostatic analysis and include a geometry representing a plate with a hole.

model = femodel(AnalysisType="magnetostatic", ...
                Geometry="PlateHoleSolid.stl");

Plot the geometry.

pdegplot(model.Geometry,FaceLabels="on",FaceAlpha=0.3)

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

Specify the vacuum permeability value in the SI system of units.

model.VacuumPermeability = 1.2566370614e-6;

Specify the relative permeability of the material.

model.MaterialProperties = ...
    materialProperties(RelativePermeability=5000);

Apply the magnetic potential boundary conditions on the side faces and the face bordering the hole.

model.FaceBC(3:6) = faceBC(MagneticPotential=[0;0;0]); 
model.FaceBC(7) = faceBC(MagneticPotential=[0;0;0.01]);

Specify the current density for the entire geometry.

model.CellLoad = cellLoad(CurrentDensity=[0;0;0.5]);

Generate the mesh.

model = generateMesh(model);

Solve the model.

R = solve(model)
R = 
  MagnetostaticResults with properties:

      MagneticPotential: [1x1 FEStruct]
          MagneticField: [1x1 FEStruct]
    MagneticFluxDensity: [1x1 FEStruct]
                   Mesh: [1x1 FEMesh]

Plot the z-component of the magnetic potential.

pdeplot3D(R.Mesh,ColormapData=R.MagneticPotential.Az)

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

Plot the magnetic field.

pdeplot3D(R.Mesh,FlowData=[R.MagneticField.Hx ...
                           R.MagneticField.Hy ...
                           R.MagneticField.Hz])

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

Solve a DC conduction problem on a geometry representing a 3-D plate with a hole in its center. Plot the electric potential and the components of the current density.

Create an femodel object for DC conduction analysis and include a geometry representing a plate with a hole.

model = femodel(AnalysisType="dcConduction", ...
                Geometry="PlateHoleSolid.stl");

Plot the geometry.

pdegplot(model.Geometry,FaceLabels="on",FaceAlpha=0.3)

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

Specify the conductivity of the material.

model.MaterialProperties = ...
    materialProperties(ElectricalConductivity=6e4);

Apply the voltage boundary conditions on the left, right, top, and bottom faces of the plate.

model.FaceBC(3:6) = faceBC(Voltage=0);

Specify the surface current density on the face bordering the hole.

model.FaceLoad(7) = faceLoad(SurfaceCurrentDensity=100);

Generate the mesh.

model = generateMesh(model);

Solve the model.

R = solve(model)
R = 
  ConductionResults with properties:

    ElectricPotential: [4747x1 double]
        ElectricField: [1x1 FEStruct]
       CurrentDensity: [1x1 FEStruct]
                 Mesh: [1x1 FEMesh]

Plot the electric potential.

figure
pdeplot3D(R.Mesh,ColorMapData=R.ElectricPotential)

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

Plot the x-component of the current density.

figure
pdeplot3D(R.Mesh,ColorMapData=R.CurrentDensity.Jx)
title("x-Component of Current Density")

Figure contains an axes object. The hidden axes object with title x-Component of Current Density contains 5 objects of type patch, quiver, text.

Plot the y-component of the current density.

figure
pdeplot3D(R.Mesh,ColorMapData=R.CurrentDensity.Jy)
title("y-Component of Current Density")

Figure contains an axes object. The hidden axes object with title y-Component of Current Density contains 5 objects of type patch, quiver, text.

Plot the z-component of the current density.

figure
pdeplot3D(R.Mesh,ColorMapData=R.CurrentDensity.Jz)
title("z-Component of Current Density")

Figure contains an axes object. The hidden axes object with title z-Component of Current Density contains 5 objects of type patch, quiver, text.

Use a solution obtained by performing a DC conduction analysis to specify current density for a magnetostatic problem.

Create an femodel object for DC conduction analysis and include a geometry representing a plate with a hole.

model = femodel(AnalysisType="dcConduction", ...
                Geometry="PlateHoleSolid.stl");

Plot the geometry.

pdegplot(model.Geometry,FaceLabels="on",FaceAlpha=0.3)

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

Specify the conductivity of the material.

model.MaterialProperties = ...
    materialProperties(ElectricalConductivity=6e4);

Apply the voltage boundary conditions on the left, right, top, and bottom faces of the plate.

model.FaceBC(3:6) = faceBC(Voltage=0);

Specify the surface current density on the face bordering the hole.

model.FaceLoad(7) = faceLoad(SurfaceCurrentDensity=100);

Generate the mesh.

model = generateMesh(model);

Solve the model.

R = solve(model);

Change the analysis type of the model to magnetostatic.

model.AnalysisType = "magnetostatic";

This model already has a quadratic mesh that you generated for the DC conduction analysis. For a 3-D magnetostatic model, the mesh must be linear. Generate a new linear mesh. The generateMesh function creates a linear mesh by default if the model is 3-D and magnetostatic.

model = generateMesh(model);

Specify the vacuum permeability value in the SI system of units.

model.VacuumPermeability = 1.2566370614e-6;

Specify the relative permeability of the material.

model.MaterialProperties = ...
    materialProperties(RelativePermeability=5000);

Apply the magnetic potential boundary conditions on the side faces and the face bordering the hole.

model.FaceBC(3:6) = faceBC(MagneticPotential=[0;0;0]);
model.FaceBC(7) = faceBC(MagneticPotential=[0;0;0.01]);

Specify the current density for the entire geometry using the DC conduction solution.

model.CellLoad = cellLoad(CurrentDensity=R);

Solve the problem.

Rmagnetostatic = solve(model);

Plot the x- and z-components of the magnetic potential.

pdeplot3D(Rmagnetostatic.Mesh, ...
          ColormapData=Rmagnetostatic.MagneticPotential.Ax)

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

pdeplot3D(Rmagnetostatic.Mesh, ...
          ColormapData=Rmagnetostatic.MagneticPotential.Az)

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

Solve a magnetostatic problem of a copper square with a permanent neodymium magnet in its center.

Create the unit square geometry with a circle in its center.

L = 0.8;
r = 0.25;
sq = [3 4 -L L L -L -L -L L L]';
circ = [1 0 0 r 0 0 0 0 0 0]';
gd = [sq,circ];
sf = "sq + circ";
ns = char('sq','circ');
ns = ns';
g = decsg(gd,sf,ns);

Plot the geometry with the face and edge labels.

pdegplot(g,FaceLabels="on",EdgeLabels="on")

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

Create an femodel object for magnetostatic analysis and include the geometry in the model.

model = femodel(AnalysisType="magnetostatic", ...
                Geometry=g);

Specify the vacuum permeability value in the SI system of units.

model.VacuumPermeability = 1.2566370614e-6;

Specify the relative permeability of the copper for the square.

model.MaterialProperties(1) = ...
    materialProperties(RelativePermeability=1);

Specify the relative permeability of the neodymium for the circle.

model.MaterialProperties(2) = ...
    materialProperties(RelativePermeability=1.05);

Specify the magnetization magnitude for the neodymium magnet.

M = 1e6;

Specify magnetization on the circular face in the positive x-direction. Magnetization for a 2-D model is a column vector of two elements.

dir = [1;0];
model.FaceLoad(2) = faceLoad(Magnetization=M*dir);

Apply the magnetic potential boundary conditions on the edges framing the square.

model.EdgeBC(1:4) = edgeBC(MagneticPotential=0);

Generate the mesh with finer meshing near the edges of the circle.

model = generateMesh(model,Hedge={5:8,0.007});
figure
pdemesh(model)

Figure contains an axes object. The axes object contains 2 objects of type line.

Solve the problem, and find the resulting magnetic fields B and H. Here, B=μH+μ0M, where μ is the absolute magnetic permeability of the material, μ0 is the vacuum permeability, and M is the magnetization.

R = solve(model);
Bmag = sqrt(R.MagneticFluxDensity.Bx.^2 + R.MagneticFluxDensity.By.^2);
Hmag = sqrt(R.MagneticField.Hx.^2 + R.MagneticField.Hy.^2);

Plot the magnetic field B.

figure
pdeplot(R.Mesh,XYData=Bmag, ...
               FlowData=[R.MagneticFluxDensity.Bx ...
                         R.MagneticFluxDensity.By])

Figure contains an axes object. The axes object contains 2 objects of type patch, quiver.

Plot the magnetic field H.

figure
pdeplot(R.Mesh,XYData=Hmag, ...
               FlowData=[R.MagneticField.Hx R.MagneticField.Hy])

Figure contains an axes object. The axes object contains 2 objects of type patch, quiver.

For an electromagnetic harmonic analysis problem, find the x- and y-components of the electric field. Solve the problem on a domain consisting of a square with a circular hole.

For the geometry, define a circle in a square, place them in one matrix, and create a set formula that subtracts the circle from the square.

SQ = [3,4,-5,-5,5,5,-5,5,5,-5]';
C = [1,0,0,1]';
C = [C;zeros(length(SQ) - length(C),1)];
gm = [SQ,C];
sf = 'SQ-C';

Create the geometry.

ns = char('SQ','C');
ns = ns';
g = decsg(gm,sf,ns);

Create an femodel object for electromagnetic harmonic analysis with an electric field type. Include the geometry in the model.

model = femodel(AnalysisType="electricHarmonic", ...
                Geometry=g);

Plot the geometry with the edge labels.

pdegplot(model.Geometry,EdgeLabels="on")
xlim([-5.5 5.5])
ylim([-5.5 5.5])

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

Specify the vacuum permittivity and permeability values as 1.

model.VacuumPermittivity = 1;
model.VacuumPermeability = 1;

Specify the relative permittivity, relative permeability, and conductivity of the material.

model.MaterialProperties = ...
    materialProperties(RelativePermittivity=1, ...
                       RelativePermeability=1, ...
                       ElectricalConductivity=0);

Apply the absorbing boundary condition with a thickness of 2 on the edges of the square. Use the default attenuation rate for the absorbing region.

ffbc = farFieldBC(Thickness=2);
model.EdgeBC(1:4) = edgeBC(FarField=ffbc);

Specify an electric field on the edges of the hole.

E = @(location,state) [1;0]*exp(-1i*2*pi*location.y); 
model.EdgeBC(5:8) = edgeBC(ElectricField=E);

Generate a mesh.

model = generateMesh(model,Hmax=1/2^3);

Solve the model for a frequency of 2π.

result = solve(model,2*pi);

Plot the real part of the x-component of the resulting electric field.

figure
pdeplot(result.Mesh,XYData=real(result.ElectricField.Ex));
title("Real Part of x-Component of Electric Field")

Figure contains an axes object. The axes object with title Real Part of x-Component of Electric Field contains an object of type patch.

Plot the real part of the y-component of the resulting electric field.

figure
pdeplot(result.Mesh,XYData=real(result.ElectricField.Ey));
title("Real Part of y-Component of Electric Field")

Figure contains an axes object. The axes object with title Real Part of y-Component of Electric Field contains an object of type patch.

Input Arguments

collapse all

Finite element analysis model, specified as an femodel object. The model contains information about a finite element problem: analysis type, geometry, material properties, boundary conditions, loads, initial conditions, and other parameters. Depending on the analysis type, it represents a structural, thermal, or electromagnetic problem.

Example: model = femodel(AnalysisType = "structuralStatic")

Static structural analysis 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","static-solid")

Transient structural analysis 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")

Frequency response analysis 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","frequency-solid")

Modal analysis 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","modal-solid")

Solution times for structural or thermal transient analysis, specified as a real vector of monotonically increasing or decreasing values.

Example: 0:20

Data Types: double

Solution frequencies for a frequency response structural analysis, specified as a real vector of monotonically increasing or decreasing values.

Example: linspace(0,4000,150)

Data Types: double

Frequency range for a structural modal analysis, specified as a vector of two elements. Define omega1 as slightly lower than the lowest expected frequency and omega2 as slightly higher than the highest expected frequency. For example, if the lowest expected frequency is zero, then use a small negative value for omega1.

Example: [-0.1,1000]

Data Types: double

Modal analysis results for a structural model, specified as a ModalStructuralResults object.

Example: structuralModalR = solve(structuralmodel,FrequencyRange=[0,1e6])

Steady-state thermal analysis model, specified as a ThermalModel object. ThermalModel contains the geometry, mesh, thermal properties of the material, internal heat source, Stefan-Boltzmann constant, boundary conditions, and initial conditions.

Example: thermalmodel = createpde("thermal","steadystate")

Transient thermal analysis model, specified as a ThermalModel object. ThermalModel contains the geometry, mesh, thermal properties of the material, internal heat source, Stefan-Boltzmann constant, boundary conditions, and initial conditions.

Modal thermal analysis model, specified as a ThermalModel object. ThermalModel contains the geometry, mesh, thermal properties of the material, internal heat source, Stefan-Boltzmann constant, boundary conditions, and initial conditions.

Decay range for modal thermal analysis, specified as a vector of two elements. The solve function solves a modal thermal analysis model for all modes in the decay range.

Data Types: double

Thermal model solution snapshots, specified as a matrix.

Data Types: double

Modal analysis results for a thermal model, specified as a ModalThermalResults object.

Example: thermalModalR = solve(thermalmodel,DecayRange=[0,1000])

Modal damping ratio, specified as a nonnegative number or a function handle. Use a function handle when each mode has its own damping ratio. The function must accept a vector of natural frequencies as an input argument and return a vector of corresponding damping ratios. It must cover the full frequency range for all modes used for modal solution. For details, see Modal Damping Depending on Frequency.

Data Types: double | function_handle

Electromagnetic model for electrostatic, magnetostatic, or DC conduction analysis, specified as an ElectromagneticModel object. The model contains the geometry, mesh, material properties, electromagnetic sources, and boundary conditions.

Example: emagmodel = createpde("electromagnetic","magnetostatic")

Solution frequencies for a harmonic electromagnetic analysis, specified as a nonnegative number or a vector of nonnegative numbers.

Data Types: double

Output Arguments

collapse all

Static structural analysis results, returned as a StaticStructuralResults object.

Transient structural analysis results, returned as a TransientStructuralResults object.

Frequency response structural analysis results, returned as a FrequencyStructuralResults object.

Modal structural analysis results, returned as a ModalStructuralResults object.

Steady-state thermal analysis results, returned as a SteadyStateThermalResults object.

Transient thermal analysis results, returned as a TransientThermalResults object.

Modal thermal analysis results, returned as a ModalThermalResults object.

Electrostatic, magnetostatic, or DC conduction analysis results, returned as an ElectrostaticResults, MagnetostaticResults, or ConductionResults object.

Harmonic electromagnetic analysis results, returned as a HarmonicResults object.

Tips

  • When you use modal analysis results to solve a transient structural dynamics model, the modalresults argument must be created in Partial Differential Equation Toolbox™ from R2019a or newer.

  • For a frequency response model with damping, the results are complex. Use functions such as abs and angle to obtain real-valued results, such as the magnitude and phase.

Version History

Introduced in R2017a

expand all