def test_reduced_dof_freq_plate(): models = ['plate_clt_donnell_bardell', 'cpanel_clt_donnell_bardell'] for model in models: print('Test reduced_dof solver, prestress=True, model={0}'.format(model)) p = Panel() p.model = model p.a = 1. p.b = 0.5 p.r = 100. p.alphadeg = 0. p.stack = [0, 90, -45, +45] p.plyt = 1e-3*0.125 p.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) p.mu = 1.3e3 p.m = 11 p.n = 12 p.Nxx = -60. p.Nyy = -5. k0 = p.calc_k0(silent=True) M = p.calc_kM(silent=True) kG0 = p.calc_kG0(silent=True) k0 += kG0 eigvals, eigvecs = freq(k0, M, sparse_solver=True, reduced_dof=False, silent=True) reduced_false = eigvals[0] freq(k0, M, sparse_solver=True, reduced_dof=True, silent=True) reduced_true = eigvals[0] assert np.isclose(reduced_false, reduced_true, rtol=0.001)
def test_reduced_dof_freq_plate(): models = ['plate_clt_donnell_bardell', 'cpanel_clt_donnell_bardell'] for model in models: print( 'Test reduced_dof solver, prestress=True, model={0}'.format(model)) p = Panel() p.model = model p.a = 1. p.b = 0.5 p.r = 100. p.alphadeg = 0. p.stack = [0, 90, -45, +45] p.plyt = 1e-3 * 0.125 p.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) p.mu = 1.3e3 p.m = 11 p.n = 12 p.Nxx = -60. p.Nyy = -5. k0 = p.calc_k0(silent=True) M = p.calc_kM(silent=True) kG0 = p.calc_kG0(silent=True) k0 += kG0 eigvals, eigvecs = freq(k0, M, sparse_solver=True, reduced_dof=False, silent=True) reduced_false = eigvals[0] freq(k0, M, sparse_solver=True, reduced_dof=True, silent=True) reduced_true = eigvals[0] assert np.isclose(reduced_false, reduced_true, rtol=0.001)
def test_freq(): for model in ['plate_clt_donnell_bardell', 'plate_clt_donnell_bardell_w', 'cpanel_clt_donnell_bardell', 'kpanel_clt_donnell_bardell']: for atype in [3, 4]: print('Frequency Analysis, atype={0}, model={1}'.format( atype, model)) p = Panel() p.model = model p.bc_ssss() p.a = 1. p.b = 0.5 p.r = 1.e8 p.alphadeg = 0. p.stack = [0, 90, -45, +45] p.plyt = 1e-3*0.125 p.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) p.mu = 1.3e3 p.m = 11 p.n = 12 p.Nxx = -60. p.Nyy = -5. p.freq(sparse_solver=True, reduced_dof=False, silent=True, atype=atype) if atype == 3: if '_w' in model: assert np.allclose(p.eigvals[0], 19.9271684726) else: assert np.allclose(p.eigvals[0], 17.8587479369) elif atype == 4: if '_w' in model: assert np.allclose(p.eigvals[0], 40.3728103572) else: assert np.allclose(p.eigvals[0], 39.3147553173)
def test_panel_aero(): for model in ['plate_clt_donnell_bardell', 'plate_clt_donnell_bardell_w', 'cpanel_clt_donnell_bardell']: for atype in [1, 2]: print('Flutter Analysis Piston Theory, atype={0}, model={1}'. format(atype, model)) p = Panel() p.model = model p.a = 1. p.b = 0.5 p.r = 1.e8 p.alphadeg = 0. p.stack = [0, 90, -45, +45] p.plyt = 1e-3*0.125 E2 = 8.7e9 p.laminaprop = (142.5e9, E2, 0.28, 5.1e9, 5.1e9, 5.1e9) p.mu = 1.5e3 p.m = 8 p.n = 9 # pre-stress applied when atype == 1 p.Nxx = -60. p.Nyy = -5. # testing commong methodology based on betastar if atype == 1: betasstar = np.linspace(150, 350, 40) elif atype == 2: betasstar = np.linspace(670, 690, 40) betas = betasstar/(p.a**3/E2/(len(p.stack)*p.plyt)**3) p.beta = betas[0] p.freq(atype=1, reduced_dof=False, sparse_solver=False, silent=True) out = np.zeros((len(betasstar), p.eigvals.shape[0]), dtype=p.eigvals.dtype) for i, beta in enumerate(betas): p.beta = beta p.freq(atype=2, reduced_dof=False, sparse_solver=False, silent=True) eigvals = p.eigvals*p.a**2/(np.pi**2*sum(p.plyts))*np.sqrt(p.mu/E2) out[i, :] = eigvals ind = np.where(np.any(out.imag != 0, axis=1))[0][0] if atype == 1: if not model.endswith('_w'): assert np.isclose(betas[ind], 347.16346, atol=0.1, rtol=0) else: assert np.isclose(betas[ind], 174.27885, atol=0.1, rtol=0) elif atype == 2: if not model.endswith('_w'): assert np.isclose(betas[ind], 728.625, atol=0.1, rtol=0) else: assert np.isclose(betas[ind], 728.625, atol=0.1, rtol=0)
def test_panel_freq(): for model in [ 'plate_clt_donnell_bardell', 'plate_clt_donnell_bardell_w', 'cpanel_clt_donnell_bardell', 'kpanel_clt_donnell_bardell' ]: for prestress in [True, False]: print('Frequency Analysis, prestress={0}, model={1}'.format( prestress, model)) p = Panel() p.model = model p.a = 1. p.b = 0.5 p.r = 1.e8 p.alphadeg = 0. p.stack = [0, 90, -45, +45] p.plyt = 1e-3 * 0.125 p.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) p.mu = 1.3e3 p.m = 11 p.n = 12 p.Nxx = -60. p.Nyy = -5. k0 = p.calc_k0(silent=True) M = p.calc_kM(silent=True) if prestress: kG0 = p.calc_kG0(silent=True) k0 += kG0 eigvals, eigvecs = freq(k0, M, sparse_solver=True, reduced_dof=False, silent=True) if prestress: if '_w' in model: assert np.isclose(eigvals[0], 19.9272, rtol=0.001) else: assert np.isclose(eigvals[0], 17.85875, rtol=0.001) else: if '_w' in model: assert np.isclose(eigvals[0], 40.37281, rtol=0.001) else: assert np.isclose(eigvals[0], 39.31476, rtol=0.001)
def test_panel_freq(): for model in ['plate_clt_donnell_bardell', 'plate_clt_donnell_bardell_w', 'cpanel_clt_donnell_bardell', 'kpanel_clt_donnell_bardell']: for prestress in [True, False]: print('Frequency Analysis, prestress={0}, model={1}'.format( prestress, model)) p = Panel() p.model = model p.a = 1. p.b = 0.5 p.r = 1.e8 p.alphadeg = 0. p.stack = [0, 90, -45, +45] p.plyt = 1e-3*0.125 p.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) p.mu = 1.3e3 p.m = 11 p.n = 12 p.Nxx = -60. p.Nyy = -5. k0 = p.calc_k0(silent=True) M = p.calc_kM(silent=True) if prestress: kG0 = p.calc_kG0(silent=True) k0 += kG0 eigvals, eigvecs = freq(k0, M, sparse_solver=True, reduced_dof=False, silent=True) if prestress: if '_w' in model: assert np.isclose(eigvals[0], 19.9272, rtol=0.001) else: assert np.isclose(eigvals[0], 17.85875, rtol=0.001) else: if '_w' in model: assert np.isclose(eigvals[0], 40.37281, rtol=0.001) else: assert np.isclose(eigvals[0], 39.31476, rtol=0.001)
def add_panel(self, y1, y2, stack=None, plyts=None, plyt=None, laminaprops=None, laminaprop=None, model=None, mu=None, **kwargs): """Add a new panel to the current panel bay Parameters ---------- y1 : float Position of the first panel edge along `y`. y2 : float Position of the second panel edge along `y`. stack : list, optional Panel stacking sequence. If not given the stacking sequence of the bay will be used. plyts : list, optional Thicknesses for each panel ply. If not supplied the bay ``plyts`` attribute will be used. plyt : float, optional Unique thickness to be used for all panel plies. If not supplied the bay ``plyt`` attribute will be used. laminaprops : list, optional Lamina properties for each panel ply. laminaprop : list, optional Unique lamina properties for all panel plies. model : str, optional Not recommended to pass this parameter, but the user can use a different model for each panel. It is recommended to defined ``model`` for the bay object. mu : float, optional Panel material density. If not given the bay density will be used. Notes ----- Additional parameters can be passed using the ``kwargs``. """ p = Panel() p.m = self.m p.n = self.n p.a = self.a p.b = self.b p.r = self.r p.y1 = y1 p.y2 = y2 p.d = 0. p.model = model if model is not None else self.model p.stack = stack if stack is not None else self.stack p.plyt = plyt if plyt is not None else self.plyt p.plyts = plyts if plyts is not None else self.plyts p.laminaprop = laminaprop if laminaprop is not None else self.laminaprop p.laminaprops = laminaprops if laminaprops is not None else self.laminaprops p.mu = mu if mu is not None else self.mu p.u1tx = self.u1tx p.u1rx = self.u1rx p.u2tx = self.u2tx p.u2rx = self.u2rx p.v1tx = self.v1tx p.v1rx = self.v1rx p.v2tx = self.v2tx p.v2rx = self.v2rx p.w1tx = self.w1tx p.w1rx = self.w1rx p.w2tx = self.w2tx p.w2rx = self.w2rx p.u1ty = self.u1ty p.u1ry = self.u1ry p.u2ty = self.u2ty p.u2ry = self.u2ry p.v1ty = self.v1ty p.v1ry = self.v1ry p.v2ty = self.v2ty p.v2ry = self.v2ry p.w1ty = self.w1ty p.w1ry = self.w1ry p.w2ty = self.w2ty p.w2ry = self.w2ry for k, v in kwargs.items(): setattr(p, k, v) self.panels.append(p)
def test_panel_aero(): for model in [ 'plate_clt_donnell_bardell', 'plate_clt_donnell_bardell_w', 'cpanel_clt_donnell_bardell' ]: for atype in [1, 2]: print( 'Flutter Analysis Piston Theory, atype={0}, model={1}'.format( atype, model)) p = Panel() p.model = model p.a = 1. p.b = 0.5 p.r = 1.e8 p.alphadeg = 0. p.stack = [0, 90, -45, +45] p.plyt = 1e-3 * 0.125 E2 = 8.7e9 p.laminaprop = (142.5e9, E2, 0.28, 5.1e9, 5.1e9, 5.1e9) p.mu = 1.5e3 p.m = 8 p.n = 9 # pre-stress applied when atype == 1 p.Nxx = -60. p.Nyy = -5. # testing commong methodology based on betastar if atype == 1: betasstar = np.linspace(150, 350, 40) elif atype == 2: betasstar = np.linspace(670, 690, 40) betas = betasstar / (p.a**3 / E2 / (len(p.stack) * p.plyt)**3) p.beta = betas[0] p.freq(atype=1, reduced_dof=False, sparse_solver=False, silent=True) out = np.zeros((len(betasstar), p.eigvals.shape[0]), dtype=p.eigvals.dtype) for i, beta in enumerate(betas): p.beta = beta p.freq(atype=2, reduced_dof=False, sparse_solver=False, silent=True) eigvals = p.eigvals * p.a**2 / ( np.pi**2 * sum(p.plyts)) * np.sqrt(p.mu / E2) out[i, :] = eigvals ind = np.where(np.any(out.imag != 0, axis=1))[0][0] if atype == 1: if not model.endswith('_w'): assert np.isclose(betas[ind], 347.16346, atol=0.1, rtol=0) else: assert np.isclose(betas[ind], 174.27885, atol=0.1, rtol=0) elif atype == 2: if not model.endswith('_w'): assert np.isclose(betas[ind], 728.625, atol=0.1, rtol=0) else: assert np.isclose(betas[ind], 728.625, atol=0.1, rtol=0)