Skip to content
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
31e56be
VM8 almost finishe code, idea how to modify NDIST
RomanIlchenko1308 Jan 10, 2022
33aefbb
Merge branch 'main' into doc/vm8
RomanIlchenko1308 Jan 13, 2022
d824596
Merge branch 'main' into doc/vm8
RomanIlchenko1308 Jan 13, 2022
205d4bc
check kp distances and use updates of kdist
RomanIlchenko1308 Jan 13, 2022
fe3d08a
vm8 check
RomanIlchenko1308 Jan 13, 2022
70b259e
almost all code without comments
RomanIlchenko1308 Jan 13, 2022
62a3130
Merge branch 'main' into doc/vm8
RomanIlchenko1308 Jan 17, 2022
111be7d
deleted unnecessary files
RomanIlchenko1308 Jan 17, 2022
e073346
deleted old file without ndist and kdist functionality
RomanIlchenko1308 Jan 17, 2022
d4b8eba
removed old file and created new one to check kdist functionality
RomanIlchenko1308 Jan 17, 2022
a65b146
Full script without comments
RomanIlchenko1308 Jan 17, 2022
ed1e24f
extra modifications
RomanIlchenko1308 Jan 17, 2022
b02a745
check vm8
RomanIlchenko1308 Jan 17, 2022
8816dd3
updated and simplified pandas dataframe with output results
RomanIlchenko1308 Jan 18, 2022
a6855d7
Modified Output dataframe and added comments
RomanIlchenko1308 Jan 18, 2022
e9a440d
Modified LaTex style at the Check Output
RomanIlchenko1308 Jan 18, 2022
763a858
add numbers of the kps and nodes
RomanIlchenko1308 Jan 18, 2022
a1594a2
Added f-string properties to the print outputs
RomanIlchenko1308 Jan 18, 2022
7ab16d1
Added vtk and numbering to the kps and nodes plotting
RomanIlchenko1308 Jan 18, 2022
c1ad655
adding description
RomanIlchenko1308 Jan 18, 2022
36985e5
chaged a style inside of the keypoint and node topic
RomanIlchenko1308 Jan 18, 2022
c1c4ca5
fixed some mistakes of the description
RomanIlchenko1308 Jan 18, 2022
4f861a0
fixing style of script for pandas data frame settings
RomanIlchenko1308 Jan 18, 2022
60c6dd4
check unit testing
RomanIlchenko1308 Jan 18, 2022
ceaf516
added Analysis Assumptions description
RomanIlchenko1308 Jan 18, 2022
0fd4289
VM is ready to review
RomanIlchenko1308 Jan 18, 2022
ab7b7c7
VM is ready to review
RomanIlchenko1308 Jan 18, 2022
a9807cf
VM is ready to review1
RomanIlchenko1308 Jan 18, 2022
c1ddc15
VM8 is ready to review
RomanIlchenko1308 Jan 18, 2022
1838af2
VM8 changed name of the class block
RomanIlchenko1308 Jan 20, 2022
f76861e
Merge branch 'main' into doc/vm8
RomanIlchenko1308 Jan 20, 2022
795697b
Delete misc.xml
germa89 Jan 21, 2022
3c7425d
Delete pymapdl.iml
germa89 Jan 21, 2022
0597f27
removed idea files
RomanIlchenko1308 Jan 22, 2022
cdbc714
Merge branch 'main' into doc/vm8
RomanIlchenko1308 Jan 22, 2022
92abb06
Merge branch 'doc/vm8' of https://github.com/pyansys/pymapdl into doc…
RomanIlchenko1308 Jan 22, 2022
d688df7
changed names of the methods
RomanIlchenko1308 Jan 22, 2022
aa75db0
VM8 is ready to be merged, almost all suggestions were added
RomanIlchenko1308 Jan 22, 2022
ae776ba
VM8 is rebuilt with decorator property and ready to review
RomanIlchenko1308 Jan 24, 2022
a8842c6
Removed styling setting, left just format style for decimals
RomanIlchenko1308 Jan 25, 2022
dd79c00
Unit test check
RomanIlchenko1308 Jan 25, 2022
bd05834
Unit test check2
RomanIlchenko1308 Jan 25, 2022
7f03c65
VM8 Last update, ready to be merged
RomanIlchenko1308 Jan 26, 2022
78f8555
VM8 check
RomanIlchenko1308 Jan 26, 2022
50f0053
VM10 check test
RomanIlchenko1308 Jan 26, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .idea/.gitignore

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/inspectionProfiles/profiles_settings.xml

This file was deleted.

4 changes: 0 additions & 4 deletions .idea/misc.xml

This file was deleted.

8 changes: 0 additions & 8 deletions .idea/modules.xml

This file was deleted.

17 changes: 0 additions & 17 deletions .idea/pymapdl.iml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/vcs.xml

This file was deleted.

Binary file added doc/source/_static/vm8_setup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
219 changes: 219 additions & 0 deletions examples/06-verif-manual/vm-008-parametric_calculation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
r"""
.. _ref_vm8_example:

Parametric Calculation
----------------------
Problem Description:
- Write a user file macro to calculate the distance ``d`` between either nodes
or keypoints in ``PREP7``. Define abbreviations for calling the macro and
verify the parametric expressions by using the macro to calculate
the distance between nodes :math:`N_1` and :math:`N_2` and
between keypoints :math:`K_3` and :math:`K_4`.

Reference:
- None.

Analysis Type(s):
- Parametric Arithmetic.

Element Type:
- None.

Geometric Properties(Coordinates):
- :math:`N_{\mathrm{1(x,y,z)}} = 1.5, 2.5, 3.5`
- :math:`N_{\mathrm{2(x,y,z)}} = -3.7, 4.6, -3`
- :math:`K_{\mathrm{3(x,y,z)}} = 100, 0, 30`
- :math:`K_{\mathrm{4(x,y,z)}} = -200,25,80`

.. image:: ../../_static/vm8_setup.png
:width: 300
:alt: VM8 Problem Sketch

Analysis Assumptions and Modeling Notes:
- Instead of ``*CREATE``, ``*USE``, etc., we have created a class
``Create`` with methods that correspond to each type of simulation.
This class gives a possibility to change coordinates and reuse it.
The simulation can be checked not just by target values, but also
with the simple distances' formula between keypoints as:

* Calculate distance between two keypoints in the Cartesian coordinate system:
:math:`D = \sqrt[2]{(x_2 - x_1)^2 + (y_2 - y_1)^2 + (z_2 - z_1)^2}`
* Python representation of the distance formula:
.. doctest::

import math
# Define coordinates for keypoints K3 and K4.
x1, y1, z1 = 100, 0, 30
x2, y2, z2 = -200, 25, 80
dist_kp = math.sqrt((x2 - x1)**2 + (y2 - y1)**2 + (z2 - z1)**2)
print(dist_kp)

"""

###############################################################################
# Start MAPDL
# ~~~~~~~~~~~
# Start MAPDL and import Numpy and Pandas libraries.

# sphinx_gallery_thumbnail_path = '_static/vm8_setup.png'

import numpy as np
import pandas as pd

from ansys.mapdl.core import launch_mapdl

# Start MAPDL.
mapdl = launch_mapdl()


###############################################################################
# Pre-Processing
# ~~~~~~~~~~~~~~
# Enter verification example mode and the pre-processing routine.

mapdl.clear()
mapdl.verify()
_ = mapdl.prep7()


###############################################################################
# Define Class
# ~~~~~~~~~~~~
# Identifying the class ``create`` with methods ``create_kp_method`` and
# ``create_node_method`` to calculate and plot the distances between keypoints
# and nodes.

class Create:
def __init__(self, x1, y1, z1, x2, y2, z2):
# Coordinate Attributes.
self.x1 = x1
self.y1 = y1
self.z1 = z1
self.x2 = x2
self.y2 = y2
self.z2 = z2

def kp_distances(self):

# Define keypoints by coordinates.
kp1 = mapdl.k(npt=3, x=self.x1, y=self.y1, z=self.z1)
kp2 = mapdl.k(npt=4, x=self.x2, y=self.y2, z=self.z2)

# Get the distance between keypoints.
dist_kp, kx, ky, kz = mapdl.kdist(kp1, kp2)

# Plot keypoints.
mapdl.kplot(show_keypoint_numbering=True,
vtk=True,
background="grey",
show_bounds=True,
font_size=26)
return dist_kp

def node_distances(self):

# Define nodes by coordinates.
node1 = mapdl.n(node=1, x=self.x1, y=self.y1, z=self.z1)
node2 = mapdl.n(node=2, x=self.x2, y=self.y2, z=self.z2)

# Get the distance between nodes.
dist_node, node_x, node_y, node_z = mapdl.ndist(node1, node2)

# Plot nodes.
mapdl.nplot(nnum=True,
vtk=True,
color="grey",
show_bounds=True,
font_size=26)
return dist_node


###############################################################################
# Distance between keypoints
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
# Using already created method for keypoints to get the distance between them
# and print out an output. The keypoints have got next coordinates:
#
# * :math:`K_{\mathrm{3(x,y,z)}} = 100, 0, 30`
# * :math:`K_{\mathrm{4(x,y,z)}} = -200,25,80`

kp = Create(100, 0, 30, -200, 25, 80)
kp_dist = kp.kp_distances()
print(f"Distance between keypoint is: {kp_dist:.2f}\n\n")

# Print the list of keypoints.
print(mapdl.klist())


###############################################################################
# Distance between nodes.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
# Using already created method for nodes to get the distance between them and
# print out an output. The nodes have got next coordinates:
#
# * :math:`N_{\mathrm{1(x,y,z)}} = 1.5, 2.5, 3.5`
# * :math:`N_{\mathrm{2(x,y,z)}} = -3.7, 4.6, -3`

nodes = Create(1.5, 2.5, 3.5, -3.7, 4.6, -3)
node_dist = nodes.node_distances()
print(f"Distance between nodes is: {node_dist:.2f}\n\n")

# Print the list of nodes.
print(mapdl.nlist())


###############################################################################
# Check Results
# ~~~~~~~~~~~~~
# Finally we have the results of the distances for both simulations,
# which can be compared with expected target values:
#
# - 1st simulation to get the distance between keypoints :math:`K_3` and :math:`K_4`, where :math:`LEN_1 = 305.16\,(in)`
# - 2nd simulation to get the distance between nodes :math:`N_1` and :math:`N_2`, where :math:`LEN_2 = 8.58\,(in)`
#
# For better representation of the results we can use ``pandas`` dataframe
# with following settings below:

# Define the names of the rows.
row_names = ["N1 - N2 distance (LEN2)",
"K3 - K4 distance (LEN1)"]

# Define the names of the columns.
col_names = ['Target',
'Mechanical APDL',
'RATIO']

# Define the values of the target results.
target_res = np.asarray([8.5849, 305.16])

# Create an array with outputs of the simulations.
simulation_res = np.asarray([node_dist, kp_dist])

# Identifying and filling corresponding columns.
main_columns = {
"Target": target_res,
"Mechanical APDL": simulation_res,
"Ratio": list(np.divide(simulation_res, target_res))
}

# Create and fill the output dataframe with pandas.
df2 = pd.DataFrame(main_columns, index=row_names)

# Apply style settings for the dataframe.
df2.style.set_table_styles([
{
"selector": "th",
"props": [('font-size', '16px')]
},
{
"selector": "td",
"props": [('font-size', '16px')]
},
{
"selector": "td:hover",
"props": [("background-color", "#FFF8DC")]
}]).set_properties(**
{
"color": "black",
"text-align": "center"
}).format("{:.2f}")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
df2.style.set_table_styles([
{
"selector": "th",
"props": [('font-size', '16px')]
},
{
"selector": "td",
"props": [('font-size', '16px')]
},
{
"selector": "td:hover",
"props": [("background-color", "#FFF8DC")]
}]).set_properties(**
{
"color": "black",
"text-align": "center"
}).format("{:.2f}")
df2.style

You could just use this, and the output is similar:
image

But smaller font size.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really think this block of code is not needed.