MAPDL modal beam analysis example#

This example demonstrates how to perform a simple modal analysis and animate its results.

Objective#

This example models a simple 3D elastic beam made of BEAM188 elements. These beams elements are made of a linear elastic material similar to steel, and have a rectangular section.

Procedure#

  • Launch MAPDL instance

  • Material properties

  • Geometry

  • Finite element model

  • Boundary conditions

  • Solving the model

  • Post-processing

  • Stop MAPDL

Launch MAPDL instance#

Launch MAPDL with interactive plotting

from ansys.mapdl.core import launch_mapdl

nmodes = 10
# start MAPDL
mapdl = launch_mapdl()
print(mapdl)
Mapdl
-----
PyMAPDL Version:     0.69.dev0
Interface:           grpc
Product:             Ansys Mechanical Enterprise Academic Student
MAPDL Version:       24.2
Running on:          localhost
                     (127.0.0.1)

Define material#

Define material

mapdl.prep7()
mapdl.mp("EX", 1, 2.1e11)
mapdl.mp("PRXY", 1, 0.3)
mapdl.mp("DENS", 1, 7800)
MATERIAL          1     DENS =   7800.000

Create geometry#

Create keypoints and line

mapdl.k(1)
mapdl.k(2, 10)
mapdl.l(1, 2)
mapdl.lplot()
modal beam

Define finite element model#

Define element type/section type - Rectangular beam section.

mapdl.et(1, "BEAM188")
mapdl.sectype(1, "BEAM", "RECT")
mapdl.secoffset("CENT")
mapdl.secdata(2, 1)

# Mesh the line
mapdl.type(1)
mapdl.esize(1)
mapdl.lesize("ALL")
mapdl.lmesh("ALL")
mapdl.eplot()
mapdl.finish()
modal beam
***** ROUTINE COMPLETED *****  CP =         0.000

Specify boundary conditions#

Fully fixed (clamped) end.

mapdl.solution()  # Entering the solution processor.
mapdl.nsel("S", "LOC", "X", "0")
mapdl.d("ALL", "ALL")
mapdl.allsel()
mapdl.nplot(plot_bc=True, nnum=True)
modal beam

Solve the model#

Setting modal analysis

mapdl.antype("MODAL")
mapdl.modopt("LANB", nmodes, 0, 200)
mapdl.solve()
mapdl.finish()
FINISH SOLUTION PROCESSING


 ***** ROUTINE COMPLETED *****  CP =         0.000

Postprocess#

Enter the post processor (post1)

mapdl.post1()
output = mapdl.set("LIST")
print(output)

result = mapdl.result
*****  INDEX OF DATA SETS ON RESULTS FILE  *****

     SET   TIME/FREQ    LOAD STEP   SUBSTEP  CUMULATIVE
       1  8.3233851             1         1         1
       2  16.274527             1         2         2
       3  50.891463             1         3         3
       4  60.248510             1         4         4
       5  89.208488             1         5         5
       6  129.85203             1         6         6
       7  138.63765             1         7         7
       8  182.23482             1         8         8

Animate results

mode2plot = 2
normalizeDisplacement = 1 / result.nodal_displacement(mode2plot - 1)[1].max()

result.plot_nodal_displacement(
    mode2plot,
    show_displacement=True,
    displacement_factor=normalizeDisplacement,
    n_colors=10,
)

result.animate_nodal_displacement(
    mode2plot,
    loop=False,
    add_text=False,
    n_frames=100,
    displacement_factor=normalizeDisplacement,
    show_axes=False,
    background="w",
    movie_filename="animation.gif",
    off_screen=True,
)
  • modal beam
  • modal beam
Rendering animation:   0%|          | 0/100 [00:00<?, ?it/s]
Rendering animation:   1%|          | 1/100 [00:00<00:15,  6.22it/s]
Rendering animation:   4%|▍         | 4/100 [00:00<00:06, 14.88it/s]
Rendering animation:   7%|▋         | 7/100 [00:00<00:05, 17.54it/s]
Rendering animation:   9%|▉         | 9/100 [00:00<00:05, 18.17it/s]
Rendering animation:  12%|█▏        | 12/100 [00:00<00:04, 19.72it/s]
Rendering animation:  15%|█▌        | 15/100 [00:00<00:04, 20.70it/s]
Rendering animation:  18%|█▊        | 18/100 [00:00<00:03, 21.15it/s]
Rendering animation:  21%|██        | 21/100 [00:01<00:03, 20.95it/s]
Rendering animation:  24%|██▍       | 24/100 [00:01<00:03, 21.29it/s]
Rendering animation:  27%|██▋       | 27/100 [00:01<00:03, 21.51it/s]
Rendering animation:  30%|███       | 30/100 [00:01<00:03, 21.00it/s]
Rendering animation:  33%|███▎      | 33/100 [00:01<00:03, 20.66it/s]
Rendering animation:  36%|███▌      | 36/100 [00:01<00:03, 21.02it/s]
Rendering animation:  39%|███▉      | 39/100 [00:01<00:02, 21.42it/s]
Rendering animation:  42%|████▏     | 42/100 [00:02<00:02, 21.51it/s]
Rendering animation:  45%|████▌     | 45/100 [00:02<00:02, 20.98it/s]
Rendering animation:  48%|████▊     | 48/100 [00:02<00:02, 21.22it/s]
Rendering animation:  51%|█████     | 51/100 [00:02<00:02, 21.42it/s]
Rendering animation:  54%|█████▍    | 54/100 [00:02<00:02, 21.32it/s]
Rendering animation:  57%|█████▋    | 57/100 [00:02<00:02, 21.05it/s]
Rendering animation:  60%|██████    | 60/100 [00:02<00:01, 21.29it/s]
Rendering animation:  63%|██████▎   | 63/100 [00:03<00:01, 21.35it/s]
Rendering animation:  66%|██████▌   | 66/100 [00:03<00:01, 21.52it/s]
Rendering animation:  69%|██████▉   | 69/100 [00:03<00:01, 20.85it/s]
Rendering animation:  72%|███████▏  | 72/100 [00:03<00:01, 21.12it/s]
Rendering animation:  75%|███████▌  | 75/100 [00:03<00:01, 20.82it/s]
Rendering animation:  78%|███████▊  | 78/100 [00:03<00:01, 21.04it/s]
Rendering animation:  81%|████████  | 81/100 [00:03<00:00, 20.72it/s]
Rendering animation:  84%|████████▍ | 84/100 [00:04<00:00, 21.06it/s]
Rendering animation:  87%|████████▋ | 87/100 [00:04<00:00, 21.24it/s]
Rendering animation:  90%|█████████ | 90/100 [00:04<00:00, 21.44it/s]
Rendering animation:  93%|█████████▎| 93/100 [00:04<00:00, 21.16it/s]
Rendering animation:  96%|█████████▌| 96/100 [00:04<00:00, 20.93it/s]
Rendering animation:  99%|█████████▉| 99/100 [00:04<00:00, 21.17it/s]
Rendering animation: 100%|██████████| 100/100 [00:12<00:00,  8.23it/s]

[(16.153550716504107, 11.153550716504107, 11.153550716504107),
 (5.0, 0.0, 0.0),
 (0.0, 0.0, 1.0)]

Stop MAPDL#

mapdl.finish()
mapdl.exit()

Total running time of the script: (0 minutes 14.167 seconds)