-
Notifications
You must be signed in to change notification settings - Fork 139
Add Verification Manual VM8 #820
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 38 commits
31e56be
33aefbb
d824596
205d4bc
fe3d08a
70b259e
62a3130
111be7d
e073346
d4b8eba
a65b146
ed1e24f
b02a745
8816dd3
a6855d7
e9a440d
763a858
a1594a2
7ab16d1
c1ad655
36985e5
c1c4ca5
4f861a0
60c6dd4
ceaf516
0fd4289
ab7b7c7
a9807cf
c1ddc15
1838af2
f76861e
795697b
3c7425d
0597f27
cdbc714
92abb06
d688df7
aa75db0
ae776ba
a8842c6
dd79c00
bd05834
7f03c65
78f8555
50f0053
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
| 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) | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| ############################################################################### | ||||||||||||||||||||||||||||||||||||||
| # Start MAPDL | ||||||||||||||||||||||||||||||||||||||
| # ~~~~~~~~~~~ | ||||||||||||||||||||||||||||||||||||||
| # Start MAPDL and import Numpy and Pandas libraries. | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| # sphinx_gallery_thumbnail_path = '_static/vm8_setup.png' | ||||||||||||||||||||||||||||||||||||||
germa89 marked this conversation as resolved.
Show resolved
Hide resolved
RomanIlchenko1308 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| 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() | ||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| ############################################################################### | ||||||||||||||||||||||||||||||||||||||
| # 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 | ||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| 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) | ||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| # 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) | ||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
| 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) | ||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
| 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) | ||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
| 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)) | ||||||||||||||||||||||||||||||||||||||
RomanIlchenko1308 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| # 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}") | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
| 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:

But smaller font size.
There was a problem hiding this comment.
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.
Uh oh!
There was an error while loading. Please reload this page.