def DisplayCellQual(meshtype='tet'): """ Displays minimum scaled jacobian of a sample mesh For an ANSYS analysis to run properly, the minimum scaled jacobian of each cell must be greater than 0. Parameters ---------- meshtype string, optional Set to 'hex' to display cell quality of a hexahedral meshed beam. """ # load archive file and parse for subsequent FEM queries if meshtype == 'hex': archive = pyansys.ReadArchive(hexarchivefile) else: archive = pyansys.ReadArchive(tetarchivefile) # create vtk object grid = archive.ParseVTK() # get cell quality qual = pyansys.CellQuality(grid) # plot cell quality grid.Plot(scalars=qual, stitle='Cell Minimum Scaled\nJacobian', rng=[0, 1])
def SolveKM(): """ Loads and solves a mass and stiffness matrix from an ansys full file """ try: from scipy.sparse import linalg from scipy import sparse except ImportError: print('scipy not installed, aborting') return # load the mass and stiffness matrices full = pyansys.FullReader(pyansys.examples.fullfile) dofref, k, m = full.LoadKM(sort=True) # make symmetric k += sparse.triu(k, 1).T m += sparse.triu(m, 1).T k += sparse.diags(np.random.random(k.shape[0]) / 1E20, shape=k.shape) # Solve w, v = linalg.eigsh(k, k=20, M=m, sigma=1000) # System natural frequencies f = (np.real(w))**0.5 / (2 * np.pi) # %% Plot result # Get the 4th mode shape full_mode_shape = v[:, 3] # x, y, z displacement for each node # reshape and compute the normalized displacement disp = full_mode_shape.reshape((-1, 3)) n = (disp * disp).sum(1)**0.5 n /= n.max() # normalize # load an archive file and create a vtk unstructured grid archive = pyansys.ReadArchive(pyansys.examples.hexarchivefile) grid = archive.ParseVTK() # Fancy plot the displacement plobj = vtkInterface.PlotClass() # add two meshes to the plotting class plobj.AddMesh(grid.Copy(), style='wireframe') plobj.AddMesh(grid, scalars=n, stitle='Normalized\nDisplacement', flipscalars=True) # Update the coordinates by adding the mode shape to the grid plobj.UpdateCoordinates(grid.GetNumpyPoints() + disp / 80, render=False) plobj.AddText('Cantliver Beam 4th Mode Shape at {:.4f}'.format(f[3]), fontsize=30) plobj.Plot()
#============================================================================== # Load a beam and write it #============================================================================== import pyansys from pyansys import examples # Sample *.cdb filename = examples.hexarchivefile # Read ansys archive file archive = pyansys.ReadArchive(filename) # Print raw data from cdb for key in archive.raw: print "%s : %s" % (key, archive.raw[key]) # Create a vtk unstructured grid from the raw data and plot it archive.ParseFEM() archive.uGrid.Plot() # write this as a vtk xml file archive.SaveAsVTK('hex.vtu') # Load this from vtk import vtkInterface grid = vtkInterface.LoadGrid('hex.vtk') grid.Plot() #============================================================================== # load beam results #==============================================================================
def DisplayHexBeam(): """ Displays a hex beam mesh """ # Load an archive file archive = pyansys.ReadArchive(hexarchivefile) grid = archive.ParseVTK() grid.Plot()
def SolveKM(): """ Loads and solves a mass and stiffness matrix from an ansys full file """ import numpy as np from scipy.sparse import linalg import pyansys # load the mass and stiffness matrices full = pyansys.FullReader(pyansys.examples.fullfile) dofref, k, m = full.LoadKM(utri=False) # removing constrained nodes (this is not efficient) free = np.logical_not(full.const).nonzero()[0] k = k[free][:, free] m = m[free][:, free] # Solve w, v = linalg.eigsh(k, k=20, M=m, sigma=10000) # System natural frequencies f = (np.real(w))**0.5 / (2 * np.pi) #%% Plot result import vtkInterface # Get the 4th mode shape mode_shape = v[:, 3] # x, y, z displacement for each node # create the full mode shape including the constrained nodes full_mode_shape = np.zeros(dofref.shape[0]) full_mode_shape[np.logical_not(full.const)] = mode_shape # reshape and compute the normalized displacement disp = full_mode_shape.reshape((-1, 3)) n = (disp * disp).sum(1)**0.5 n /= n.max() # normalize # load an archive file and create a vtk unstructured grid archive = pyansys.ReadArchive(pyansys.examples.hexarchivefile) grid = archive.ParseVTK() # plot the normalized displacement # grid.Plot(scalars=n) # Fancy plot the displacement plobj = vtkInterface.PlotClass() # add two meshes to the plotting class. Meshes are copied on load plobj.AddMesh(grid, style='wireframe') plobj.AddMesh(grid, scalars=n, stitle='Normalized\nDisplacement', flipscalars=True) # Update the coordinates by adding the mode shape to the grid plobj.UpdateCoordinates(grid.GetNumpyPoints() + disp / 80, render=False) plobj.AddText('Cantliver Beam 4th Mode Shape at {:.4f}'.format(f[3]), fontsize=30) plobj.Plot() del plobj
def DisplayHexBeam(): """ Displays a hex beam mesh """ # Load an archive file archive = pyansys.ReadArchive(hexarchivefile) archive.ParseFEM() archive.uGrid.Plot()