Using Inline Functions (Query)

Inline functions like UX have been implemented in PyMAPDL as methods on the mapdl.inline_functions.Query object. In this example we set up a simple simulation and use Query to demonstrate some of its functionality.

First, create an instance of ansys.mapdl.core.inline_functions.Query below, using the mapdl instance as a required argument.

from ansys.mapdl.core import launch_mapdl
from ansys.mapdl.core.inline_functions import Query

mapdl = launch_mapdl()

# clear at the start and enter the preprocessing routine
mapdl.clear()
mapdl.prep7()
q = Query(mapdl)

Setup Mesh

  • Assign element type SOLID5 to element type 1

  • Create a cuboid mapdl.block 10 x 20 x 30 in dimension

  • Set element size to 2

  • Mesh the block

  • Plot the elements created

mapdl.et(1, 'SOLID5')
mapdl.block(0, 10, 0, 20, 0, 30)
mapdl.esize(2)
mapdl.vmesh('ALL')
mapdl.eplot()
03 using inline functions and Query

Out:

[(46.73276542716538, 51.73276542716538, 56.73276542716538),
 (5.000000000000002, 10.0, 15.0),
 (0.0, 0.0, 1.0)]

Setup Boundary Conditions

  • Assign an Elastic modulus in the x-direction to material 1 of 21e9

  • And a poisson’s ratio of 0.3

  • Select all nodes at the z = 30 end of the block

  • Remove all degrees of freedom for all nodes in the selection

  • Select all nodes at the z = 0 end

  • Apply a x-direction force of 10000 to all of these

  • Finish preprocessing

mapdl.mp('EX', 1, 210E9)
mapdl.mp('PRXY', 1, 0.3)
mapdl.nsel('S', 'LOC', 'Z', 30)
mapdl.d('ALL', 'UX')
mapdl.d('ALL', 'UY')
mapdl.d('ALL', 'UZ')
mapdl.nsel('S', 'LOC', 'Z', 0)
mapdl.f('ALL', 'FX', 10000)
mapdl.finish()

Out:

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

Setup Boundary Conditions

  • Enter solution (mapdl.slashsolu also works)

  • Set the analysis type to STATIC

  • Select all nodes

  • Solve the model

  • Finish solution

mapdl.run('/SOLU')
mapdl.antype('STATIC')
mapdl.nsel('ALL')
mapdl.solve()
mapdl.finish()

Out:

'FINISH SOLUTION PROCESSING\n\n\n ***** ROUTINE COMPLETED *****  CP =         0.000'

Post-Processing

  • Get the result from the mapdl instance

  • Plot the equivalent stress results - Show the edges so that we can see the element boundaries - Use the “plasma” colormap because it is perceptually uniform

result = mapdl.result
result.plot_principal_nodal_stress(0,
                                   'SEQV',
                                   show_edges=True,
                                   cmap='plasma')
03 using inline functions and Query

Out:

[(46.73276542716538, 51.73276542716538, 56.73276542716538),
 (5.000000000000002, 10.0, 15.0),
 (0.0, 0.0, 1.0)]

Using Query

  • Use Query to get the nodes nearest to (5, 0, 0) and (5, 10, 0)

  • Use the Query instance to examine the x, y, and z displacement.

  • Print the results in a formatted string.

node1 = q.node(5., 0., 0.)
node2 = q.node(5., 10., 0.)

for node in [node1, node2]:
    x_displacement = q.ux(node)
    y_displacement = q.uy(node)
    z_displacement = q.uz(node)

    message = f"""
    ************************
    Displacement at Node {node}:
    ************************
    X | {x_displacement}
    Y | {y_displacement}
    Z | {z_displacement}

    """
    print(message)

Out:

************************
Displacement at Node 28:
************************
X | 1.757716378e-05
Y | 3.036257547e-09
Z | -7.982690758e-07



************************
Displacement at Node 49:
************************
X | 1.761241768e-05
Y | 1.196049608e-19
Z | 8.070989839e-07

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

Gallery generated by Sphinx-Gallery