# Layup 1 Box beam (0.5 x 0.923 in^2 box with laminate schedule [0]_6) # Before we make a beam, we must first make the cross-section of that beam. We # are going to start with a cross-section we used in the third tutorial. c2 = 0.53 # Establish the non-dimensional starting and stopping points of the cross- # section. xdim2 = [-.953/(c2*2),.953/(c2*2)] # Generate the airfoil box: af2 = Airfoil(c2,name='box') # Now let's make all of the laminate objects we will need for the box beam. In # this case it's 4: n_i_Lay1 = [6] m_i_Lay1 = [2] th_Lay1 = [0.] lam1_Lay1 = Laminate(n_i_Lay1, m_i_Lay1, matLib, th=th_Lay1) lam2_Lay1 = Laminate(n_i_Lay1, m_i_Lay1, matLib, th=th_Lay1) lam3_Lay1 = Laminate(n_i_Lay1, m_i_Lay1, matLib, th=th_Lay1) lam4_Lay1 = Laminate(n_i_Lay1, m_i_Lay1, matLib, th=th_Lay1) # Assemble the laminates into an array. laminates_Lay1 = [lam1_Lay1,lam2_Lay1,lam3_Lay1,lam4_Lay1] # Create the cross-section vector: xsect_Lay1 = XSect(2,af2,xdim2,laminates_Lay1,matLib,typeXSect='rectBox',\ meshSize=2) # Create the cross-section object. xsect_Lay1.xSectionAnalysis() # Having created the cross-section, we can now generate a superbeam. A # superbeam is just a collection of beam elements. In other words, a superbeam # is just there to fascilitate beam meshing and other pre/post processing # benefits. In order to make a superbeam, we need to initialize a few things. # First, let's initialize the starting and stopping location of the beam:
# Convert it back to a stiffness matrix Cp = np.linalg.inv(Sp) print('The rotated stiffness matrix:') print(tabulate(np.around(Cp-C,decimals=3),tablefmt="fancy_grid")) # ============================================================================= # CLT VALIDATION # ============================================================================= # Initialize the number of plies per each orientation n_i = [1,1,1,1] # Initialize the materials to be used at each orientation m_i = [4,4,4,4] # Initialize the angle orientations for the plies th = [30,-30,0,45] # Create a laminate with default orientations (for 4 orientations, this will # default to th_defalt = [0,45,90,-45]) lam1 = Laminate(n_i,m_i,matlib) # Print a summary of laminate 1 print('Laminate 1 summary:') lam1.printSummary(decimals=3) # Create a laminate with default orientations (for more or less than 4 # orientations, th_default = [0]*len(n_i)) lam2 = Laminate(n_i+n_i,m_i+m_i,matlib) # Print summary of laminate 2 print('Laminate 2 summary:') lam2.printSummary(decimals=3) # Create a laminate using the above rotation orientations lam3 = Laminate(n_i,m_i,matlib,th=th) # Print Summary of laminate 3 print('Laminate 3 summary:') lam3.printSummary(decimals=3)
# Convert it back to a stiffness matrix Cp = np.linalg.inv(Sp) print('The rotated stiffness matrix:') print(tabulate(np.around(Cp - C, decimals=3), tablefmt="fancy_grid")) # ============================================================================= # CLT VALIDATION # ============================================================================= # Initialize the number of plies per each orientation n_i = [1, 1, 1, 1] # Initialize the materials to be used at each orientation m_i = [4, 4, 4, 4] # Initialize the angle orientations for the plies th = [30, -30, 0, 45] # Create a laminate with default orientations (for 4 orientations, this will # default to th_defalt = [0,45,90,-45]) lam1 = Laminate(n_i, m_i, matlib) # Print a summary of laminate 1 print('Laminate 1 summary:') lam1.printSummary(decimals=3) # Create a laminate with default orientations (for more or less than 4 # orientations, th_default = [0]*len(n_i)) lam2 = Laminate(n_i + n_i, m_i + m_i, matlib) # Print summary of laminate 2 print('Laminate 2 summary:') lam2.printSummary(decimals=3) # Create a laminate using the above rotation orientations lam3 = Laminate(n_i, m_i, matlib, th=th) # Print Summary of laminate 3 print('Laminate 3 summary:') lam3.printSummary(decimals=3)
# meshing routines for this. This is the less restrictive than the 'rectBox' # routine, and has different laminate mesh interfaces. This time we will also # make a slightly more interesting mesh using unbalanced and unsymetric # laminates. First let's initialize the airfoil shape: # Initialize a chord length of four inches c3 = 17.68515 # Initialize the non-dimesional locations for the airfoil points to be # generated: xdim3 = [.19, .582] # Create the airfoil object: af3 = Airfoil(c3, name='NACA2412') # Create the laminates to make up the cross-section n_i_1 = [8] m_i_1 = [1] th_1 = [10] lam1 = Laminate(n_i_1, m_i_1, matLib, th=th_1) n_i_2 = [1, 1, 1, 1] m_i_2 = [1, 1, 1, 1] th_2 = [45, -45, 45, -45] lam2 = Laminate(n_i_2, m_i_2, matLib, th=th_2) n_i_3 = [8] m_i_3 = [1] th_3 = [-10] lam3 = Laminate(n_i_3, m_i_3, matLib, th=th_3) n_i_4 = [1, 1, 1, 1] m_i_4 = [1, 1, 1, 1] th_4 = [45, -45, 45, -45] lam4 = Laminate(n_i_4, m_i_4, matLib, th=th_4) # Organize the laminates into an array laminates_Lay3 = [lam1, lam2, lam3, lam4] # Create the cross-section object and mesh it
lam2 = Laminate(n_i_2, m_i_2, matLib, th=th_2) n_i_3 = [1,1,1,1,1,1] m_i_3 = [2,2,2,2,2,2] th_3 = [15,15,15,15,15,15] lam3 = Laminate(n_i_3, m_i_3, matLib, th=th_3) n_i_4 = [1,1,1,1,1,1] m_i_4 = [2,2,2,2,2,2] th_4 = [-15,15,-15,15,-15,15] lam4 = Laminate(n_i_4, m_i_4, matLib, th=th_4) ''' # AL Box Beam n_i_1 = [1,1,1,1,1,1] m_i_1 = [2,2,2,2,2,2] th_1 = [-15,-15,-15,-15,-15,-15] lam1 = Laminate(n_i_1, m_i_1, matLib, th=th_1) n_i_2 = [1,1,1,1,1,1] m_i_2 = [2,2,2,2,2,2] th_2 = [15,-15,15,-15,15,-15] lam2 = Laminate(n_i_2, m_i_2, matLib, th=th_2) n_i_3 = [1,1,1,1,1,1] m_i_3 = [2,2,2,2,2,2] th_3 = [15,15,15,15,15,15] lam3 = Laminate(n_i_3, m_i_3, matLib, th=th_3) n_i_4 = [1,1,1,1,1,1] m_i_4 = [2,2,2,2,2,2] th_4 = [-15,15,-15,15,-15,15] lam4 = Laminate(n_i_4, m_i_4, matLib, th=th_4) ''' laminates_Lay3 = [lam1,lam2,lam3,lam4] xsect_Lay3 = XSect(4,af2,xdim2,laminates_Lay3,matLib,typeXsect='box',meshSize=1)
c1 = 1. # Initialize the non-dimensional starting and stopping points of the cross- # section. These bounds when dimensionalized will determine the overall # dimesions of the cross-section. Therefore the total width of the laminate is: # xdim[1]*c1-xdim[0]*c1. In this case, the total width is 2! xdim1 = [-1., 1.] af1 = Airfoil(c1, name='box') # Create a layup schedule for the laminate. In this case, we will select a # layup schedule of [0_2/45/90/3]_s th_1 = [0, 45, 90] n_1 = [2, 1, 3] m_1 = [1, 1, 1] # Notice how the orientations are stored in the 'th_1' array, the subscripts are # stored in the 'n_1' array, and the material information is held in 'm_1'. # Create the laminate object: lam1 = Laminate(n_1, m_1, matLib, th=th_1, sym=True) # In order to make a cross-section, we must add all of the laminates to be used # to an array: laminates1 = [lam1] # We now have all the information necessary to make a laminate beam cross- # section: xsect1 = XSect(1, af1, xdim1, laminates1, matLib, typeXSect='laminate', meshSize=2) # With the cross-section object initialized, let's run the cross-sectional # analysis to get cross-section stiffnesses, etc. xsect1.xSectionAnalysis()
# ================== # Now let's mesh a NACA2412 box beam. We will use the last of the supported # meshing routines for this. This is the less restrictive than the 'rectBox' # routine, and has different laminate mesh interfaces. This time we will also # make a slightly more interesting mesh using unbalanced and unsymetric # laminates. First let's initialize the airfoil shape: # Initialize a chord length of four inches # Initialize the non-dimesional locations for the airfoil points to be # generated: a = 0.91 b = 0.75 r = 0.437 * 2 / 3 xdim3 = [a, b, r] n_i_1 = [1] m_i_1 = [1] lam1 = Laminate(n_i_1, m_i_1, matLib) # Organize the laminates into an array laminates_Lay3 = [lam1] af3 = Airfoil(1., name='NACA2412') # Create the cross-section object and mesh it xsect_Lay3 = XSect(4, af3, xdim3, laminates_Lay3, matLib, typeXSect='rectHole', nelem=40) # Run the cross-sectional analysis. Since this is an airfoil and for this, # symmetric airfoils the AC is at the 1/c chord, we will put the reference axis # here xsect_Lay3.xSectionAnalysis() #ref_ax=[0.25*c3,0.])