def test_dynamic_with_TStiff2D(): print('Testing dynamic analysis with TStiff2D') spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.m = 12 spb.n = 13 spb.mu = 1.3e3 spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt) bb = spb.b / 5. bf = bb stiff = spb.add_tstiff2d(ys=spb.b / 2., bf=bf, bb=bb, fstack=[0, 90, 90, 0] * 2, fplyt=spb.plyt * 1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0] * 1, bplyt=spb.plyt * 1., blaminaprop=spb.laminaprop, mb=12, nb=13, mf=12, nf=13) k0 = spb.calc_k0() M = spb.calc_kM() eigvals, eigvecs = freq(k0, M, silent=True)
def test_static_with_BladeStiff2D(): print('Testing linear statics with BladeStiff2D') spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.m = 12 spb.n = 13 spb.stack = [0, +45, -45, 90, -45, +45, 0] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt) bb = spb.b / 5. bf = bb stiff = spb.add_bladestiff2d(ys=spb.b / 2., bf=bf, bb=bb, fstack=[0, 90, 90, 0] * 8, fplyt=spb.plyt * 1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0] * 4, bplyt=spb.plyt * 1., blaminaprop=spb.laminaprop, mf=17, nf=16) stiff.flange.forces.append( [stiff.flange.a / 2., stiff.flange.b, 0., 0., 1000.]) spb.calc_k0() fext = spb.calc_fext() inc, cs = static(spb.k0, fext, silent=True) wpanelmin = spb.uvw_skin(cs[0])[2].min() #NOTE repeated call on purpose to evaluate if cs[0] is being messed up # somewhere wpanelmin = spb.uvw_skin(cs[0])[2].min() wflangemax = spb.uvw_stiffener(cs[0], 0, region='flange')[2].max() #NOTE repeated call on purpose wflangemax = spb.uvw_stiffener(cs[0], 0, region='flange')[2].max() assert np.isclose(wpanelmin, -0.30581458201781481, atol=1.e-4, rtol=0.001) assert np.isclose(wflangemax, 0.331155797371884, atol=1.e-4, rtol=0.001) spb.plot_skin(cs[0], filename='tmp_test_bladestiff2d_static_skin.png', colorbar=True, vec='w', clean=False) spb.plot_stiffener( cs[0], si=0, region='flange', filename='tmp_test_bladestiff2d_stiff_static_flange.png', colorbar=True, clean=False)
def test_static_with_TStiff2D(): print('Testing static analysis with TStiff2D') spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.stack = [0, +45, -45, 90, -45, +45, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.m = 12 spb.n = 13 spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt) bb = spb.b/5. bf = bb stiff = spb.add_tstiff2d(ys=spb.b/2., bf=bf, bb=bb, fstack=[0, 90, 90, 0]*8, fplyt=spb.plyt*1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0]*4, bplyt=spb.plyt*1., blaminaprop=spb.laminaprop, mb=14, nb=13, mf=13, nf=12) stiff.flange.forces.append([spb.a/2., bf, 0., 0., 1000.]) k0 = spb.calc_k0() fext = spb.calc_fext() inc, cs = static(spb.k0, fext, silent=True) wpanelmin = spb.uvw_skin(cs[0])[2].min() wbasemin = spb.uvw_stiffener(cs[0], 0, region='base')[2].min() wflangemax = spb.uvw_stiffener(cs[0], 0, region='flange')[2].max() spb.plot_skin(cs[0], filename='tmp_test_tstiff2d_static_skin.png', colorbar=True, vec='w', clean=False) spb.plot_stiffener(cs[0], si=0, region='base', filename='tmp_test_tstiff2d_static_stiff_base.png', colorbar=True, vec='w', clean=False) spb.plot_stiffener(cs[0], si=0, region='flange', filename='tmp_test_tstiff2d_static_stiff_flange.png', colorbar=True, clean=False)
def test_Lee_and_Lee_table4(): print('Testing Lee and Lee Table 4') # Lee and Lee. "Vibration analysis of anisotropic plates with eccentric # stiffeners". Computers & Structures, Vol. 57, No. 1, pp. 99-105, # 1995. models = ( ('model4', 0.00208, 0.0060, 138.801067988), ('model5', 0.00260, 0.0075, 174.624343202), ('model7', 0.00364, 0.0105, 205.433509024)) for model, hf, bf, value in models: spb = StiffPanelBay() spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.500e3 # plate material density in kg / m^3 spb.laminaprop = (128.e9, 11.e9, 0.25, 4.48e9, 1.53e9, 1.53e9) spb.stack = [0, -45, +45, 90, 90, +45, -45, 0] plyt = 0.00013 spb.plyt = plyt spb.a = 0.5 spb.b = 0.250 spb.m = 14 spb.n = 15 hf = hf bf = bf n = int(hf/plyt) fstack = [0]*(n//4) + [90]*(n//4) + [90]*(n//4) + [0]*(n//4) # clamping spb.w1rx = 0. spb.w2rx = 0. spb.w1ry = 0. spb.w2ry = 0. spb.add_panel(y1=0, y2=spb.b/2.) spb.add_panel(y1=spb.b/2., y2=spb.b) spb.add_bladestiff1d(mu=spb.mu, ys=spb.b/2., bb=0., bf=bf, fstack=fstack, fplyt=plyt, flaminaprop=spb.laminaprop) spb.freq(atype=4, silent=True, reduced_dof=False) assert np.isclose(spb.eigvals[0].real/2/np.pi, value)
def test_lb_Stiffener2D(): print('Testing linear buckling for StiffPanelBay with a 2D Stiffener') spb = StiffPanelBay() spb.a = 1. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 15 spb.n = 16 spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt, Nxx=-1.) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt, Nxx_cte=1000.) spb.add_bladestiff2d(ys=spb.b/2., m1=14, n1=11, bf=0.05, fstack=[0, 90, 90, 0], fplyt=spb.plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) kG = spb.calc_kG0(silent=True) eigvals, eigvecs = lb(k0, kG, silent=True) assert np.isclose(eigvals[0].real, 301.0825234, atol=0.1, rtol=0)
from compmech.stiffpanelbay import StiffPanelBay spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.r = 2. spb.stack = [0] spb.plyt = 1e-3*1.6 E = 71.e9 nu = 0.33 G = E/(2.*(1. + nu)) spb.laminaprop = (E, E, nu, G, G, G) spb.model = 'cpanel_clt_donnell_bardell' spb.m = 22 spb.n = 22 spb.u1tx = 0. spb.u1rx = 1. spb.u2tx = 0. spb.u2rx = 1. spb.u1ty = 0. spb.u1ry = 1. spb.u2ty = 0. spb.u2ry = 1. spb.v1tx = 0. spb.v1rx = 1. spb.v2tx = 0. spb.v2rx = 1. spb.v1ty = 0. spb.v1ry = 1. spb.v2ty = 0.
def test_freq_Stiffener2D(): print('Testing frequency analysis for StiffPanelBay with a 2D Stiffener') spb = StiffPanelBay() spb.a = 1. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 11 spb.n = 12 spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt) spb.add_bladestiff2d(ys=spb.b / 2., m1=14, n1=11, bf=0.08, fstack=[0, 90, 90, 0] * 5, fplyt=spb.plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True) assert np.isclose(eigvals[0].real, 137.97927190657148, atol=0.01, rtol=0)
def test_Lee_and_Lee_table4(): print('Testing Lee and Lee Table 4') # Lee and Lee. "Vibration analysis of anisotropic plates with eccentric # stiffeners". Computers & Structures, Vol. 57, No. 1, pp. 99-105, # 1995. models = ( ('model4', 0.00208, 0.0060, 138.99917796302756), ('model5', 0.00260, 0.0075, 175.00597239286196), ('model7', 0.00364, 0.0105, 205.433509024)) for model, hf, bf, value in models: spb = StiffPanelBay() spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.500e3 # plate material density in kg / m^3 spb.laminaprop = (128.e9, 11.e9, 0.25, 4.48e9, 1.53e9, 1.53e9) spb.stack = [0, -45, +45, 90, 90, +45, -45, 0] plyt = 0.00013 spb.plyt = plyt spb.a = 0.5 spb.b = 0.250 spb.m = 14 spb.n = 15 hf = hf bf = bf n = int(hf/plyt) fstack = [0]*(n//4) + [90]*(n//4) + [90]*(n//4) + [0]*(n//4) # clamping spb.w1rx = 0. spb.w2rx = 0. spb.w1ry = 0. spb.w2ry = 0. spb.add_panel(y1=0, y2=spb.b/2.) spb.add_panel(y1=spb.b/2., y2=spb.b) spb.add_bladestiff1d(mu=spb.mu, ys=spb.b/2., bb=0., bf=bf, fstack=fstack, fplyt=plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True) herz = eigvals[0].real/2/np.pi assert np.isclose(herz, value, atol=0.001, rtol=0.001)
def test_tstiff2d_lb(): #NOTE reference values taken from # compmech.panel.assembly.tstiff2d_1stiff_compression a_b_list = [0.5, 2., 10.] ref_values = [-152.607275551, -80.15391295315146, -79.39137361313862] for a_b, ref_value in zip(a_b_list, ref_values): print('Testing linear buckling') spb = StiffPanelBay() spb.b = 1. spb.a = spb.b * a_b spb.stack = [0, +45, -45, 90, -45, +45] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.m = 12 spb.n = 13 Nxx = -10. spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt, Nxx=Nxx) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt, Nxx=Nxx) bb = spb.b/5. if False: stiff = spb.add_tstiff2d(ys=spb.b/2., bf=bb/2, bb=bb, fstack=[0, 90, 90, 0]*8, fplyt=spb.plyt*1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0]*4, bplyt=spb.plyt*1., blaminaprop=spb.laminaprop, mb=13, nb=12, mf=13, nf=12, Nxxf=Nxx) spb.calc_k0() spb.calc_kG0() eigvals, eigvecs = lb(spb.k0, spb.kG0, silent=True) calc = eigvals[0]*Nxx assert np.isclose(calc, ref_value, rtol=0.05)
def test_freq_Stiffener1D(): print('Testing frequency analysis for StiffPanelBay with a 1D Stiffener') spb = StiffPanelBay() spb.a = 2. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 15 spb.n = 16 spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt) spb.add_bladestiff1d(ys=spb.b / 2., Fx=0., bf=0.08, fstack=[0, 90, 90, 0] * 5, fplyt=spb.plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True, num_eigvalues=10) assert np.isclose(eigvals[0].real, 79.5906673583, atol=0.1, rtol=0)
def test_dynamic_with_BladeStiff2D(): print('Testing dynamic analysis with TStiff2D') spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.m = 10 spb.n = 10 spb.mu = 1.3e3 spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt) bb = spb.b / 5. bf = bb stiff = spb.add_bladestiff2d(ys=spb.b / 2., bf=bf, bb=bb, fstack=[0, 90, 90, 0] * 2, fplyt=spb.plyt * 1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0] * 1, bplyt=spb.plyt * 1., blaminaprop=spb.laminaprop, mf=10, nf=10) k0 = spb.calc_k0() M = spb.calc_kM() eigvals, eigvecs = freq(k0, M, silent=True) spb.plot_skin(eigvecs[:, 0], filename='tmp_test_bladestiff2d_dynamic_skin.png', colorbar=True) spb.plot_stiffener( eigvecs[:, 0], si=0, region='flange', filename='tmp_test_bladestiff2d_dynamic_stiff_flange.png', colorbar=True) assert np.isclose(eigvals[0], 25.865835238236173, atol=0.01, rtol=0.001)
def test_freq_Stiffener1D(): print('Testing frequency analysis for StiffPanelBay with a 1D Stiffener') spb = StiffPanelBay() spb.a = 1. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 15 spb.n = 16 spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt) spb.add_bladestiff1d(ys=spb.b/2., Fx=0., bf=0.08, fstack=[0, 90, 90, 0]*5, fplyt=spb.plyt, flaminaprop=spb.laminaprop) spb.freq(silent=True, atype=4) assert np.isclose(spb.eigvals[0].real, 81.9342050889)
def test_lb_Stiffener1D(): print('Testing linear buckling for StiffPanelBay with a 1D Stiffener') spb = StiffPanelBay() spb.a = 1. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 15 spb.n = 16 spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt, Nxx=-1.) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt, Nxx_cte=1000.) spb.add_bladestiff1d(ys=spb.b/2., Fx=0., bf=0.05, fstack=[0, 90, 90, 0], fplyt=spb.plyt, flaminaprop=spb.laminaprop) spb.lb(silent=True) assert np.isclose(spb.eigvals[0].real, 297.54633249887456)
from compmech.stiffpanelbay import StiffPanelBay spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.r = 2. spb.stack = [0, 90, 90, 0, -45, +45] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'cpanel_clt_donnell_bardell' spb.m = 15 spb.n = 16 spb.u1tx = 0. spb.u1rx = 1. spb.u2tx = 0. spb.u2rx = 1. spb.u1ty = 0. spb.u1ry = 1. spb.u2ty = 0. spb.u2ry = 1. spb.v1tx = 0. spb.v1rx = 1. spb.v2tx = 0. spb.v2rx = 1. spb.v1ty = 0. spb.v1ry = 1. spb.v2ty = 0. spb.v2ry = 1. spb.w1tx = 0. spb.w1rx = 1.
def test_Lee_and_Lee_table4(): print('Testing Lee and Lee Table 4') # Lee and Lee. "Vibration analysis of anisotropic plates with eccentric # stiffeners". Computers & Structures, Vol. 57, No. 1, pp. 99-105, # 1995. models = (('model4', 0.00208, 0.0060, 138.99917796302756), ('model5', 0.00260, 0.0075, 175.00597239286196), ('model7', 0.00364, 0.0105, 205.433509024)) for model, hf, bf, value in models: spb = StiffPanelBay() spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.500e3 # plate material density in kg / m^3 spb.laminaprop = (128.e9, 11.e9, 0.25, 4.48e9, 1.53e9, 1.53e9) spb.stack = [0, -45, +45, 90, 90, +45, -45, 0] plyt = 0.00013 spb.plyt = plyt spb.a = 0.5 spb.b = 0.250 spb.m = 14 spb.n = 15 hf = hf bf = bf n = int(hf / plyt) fstack = [0] * (n // 4) + [90] * (n // 4) + [90] * (n // 4) + [0] * (n // 4) # clamping spb.w1rx = 0. spb.w2rx = 0. spb.w1ry = 0. spb.w2ry = 0. spb.add_panel(y1=0, y2=spb.b / 2.) spb.add_panel(y1=spb.b / 2., y2=spb.b) spb.add_bladestiff1d(mu=spb.mu, ys=spb.b / 2., bb=0., bf=bf, fstack=fstack, fplyt=plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True) herz = eigvals[0].real / 2 / np.pi assert np.isclose(herz, value, atol=0.001, rtol=0.001)
def test_freq_Stiffener2D(): print('Testing frequency analysis for StiffPanelBay with a 2D Stiffener') spb = StiffPanelBay() spb.a = 1. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 11 spb.n = 12 spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt) spb.add_bladestiff2d(ys=spb.b/2., m1=14, n1=11, bf=0.08, fstack=[0, 90, 90, 0]*5, fplyt=spb.plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True) assert np.isclose(eigvals[0].real, 137.97927190657148, atol=0.01, rtol=0)
def test_freq_models(): print('Testing frequency analysis for StiffPanelBay with 2 plates') # From Table 4 of # Lee and Lee. "Vibration analysis of anisotropic plates with eccentric # stiffeners". Computers & Structures, Vol. 57, No. 1, pp. 99-105, # 1995. for model in [ 'plate_clt_donnell_bardell', 'cpanel_clt_donnell_bardell', 'kpanel_clt_donnell_bardell' ]: spb = StiffPanelBay() spb.a = 0.5 spb.b = 0.250 spb.plyt = 0.00013 spb.laminaprop = (128.e9, 11.e9, 0.25, 4.48e9, 1.53e9, 1.53e9) spb.stack = [0, -45, +45, 90, 90, +45, -45, 0] spb.model = model spb.r = 1.e6 spb.alphadeg = 0. spb.mu = 1.5e3 spb.m = 9 spb.n = 10 # clamping spb.w1rx = 0. spb.w2rx = 0. spb.w1ry = 0. spb.w2ry = 0. spb.add_panel(0, spb.b / 2., plyt=spb.plyt) spb.add_panel(spb.b / 2., spb.b, plyt=spb.plyt) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True) ref = [ 85.12907802 - 0.j, 134.16422850 - 0.j, 206.77295186 - 0.j, 216.45992453 - 0.j, 252.24546171 - 0.j ] assert np.allclose(eigvals[:5] / 2 / np.pi, ref, atol=0.1, rtol=0)
def test_freq_models(): print('Testing frequency analysis for StiffPanelBay with 2 plates') # From Table 4 of # Lee and Lee. "Vibration analysis of anisotropic plates with eccentric # stiffeners". Computers & Structures, Vol. 57, No. 1, pp. 99-105, # 1995. for model in ['plate_clt_donnell_bardell', 'cpanel_clt_donnell_bardell', 'kpanel_clt_donnell_bardell']: spb = StiffPanelBay() spb.a = 0.5 spb.b = 0.250 spb.plyt = 0.00013 spb.laminaprop = (128.e9, 11.e9, 0.25, 4.48e9, 1.53e9, 1.53e9) spb.stack = [0, -45, +45, 90, 90, +45, -45, 0] spb.model = model spb.r = 1.e6 spb.alphadeg = 0. spb.mu = 1.5e3 spb.m = 9 spb.n = 10 # clamping spb.w1rx = 0. spb.w2rx = 0. spb.w1ry = 0. spb.w2ry = 0. spb.add_panel(0, spb.b/2., plyt=spb.plyt) spb.add_panel(spb.b/2., spb.b, plyt=spb.plyt) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True) ref = [85.12907802-0.j, 134.16422850-0.j, 206.77295186-0.j, 216.45992453-0.j, 252.24546171-0.j] assert np.allclose(eigvals[:5]/2/np.pi, ref, atol=0.1, rtol=0)
def test_lb_Stiffener2D(): print('Testing linear buckling for StiffPanelBay with a 2D Stiffener') spb = StiffPanelBay() spb.a = 1. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 15 spb.n = 16 spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt, Nxx=-1.) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt, Nxx_cte=1000.) spb.add_bladestiff2d(ys=spb.b / 2., m1=14, n1=11, bf=0.05, fstack=[0, 90, 90, 0], fplyt=spb.plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) kG = spb.calc_kG0(silent=True) eigvals, eigvecs = lb(k0, kG, silent=True) assert np.isclose(eigvals[0].real, 301.0825234, atol=0.1, rtol=0)
def test_freq_Stiffener1D(): print('Testing frequency analysis for StiffPanelBay with a 1D Stiffener') spb = StiffPanelBay() spb.a = 2. spb.b = 0.5 spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 15 spb.n = 16 spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt) spb.add_bladestiff1d(ys=spb.b/2., Fx=0., bf=0.08, fstack=[0, 90, 90, 0]*5, fplyt=spb.plyt, flaminaprop=spb.laminaprop) k0 = spb.calc_k0(silent=True) M = spb.calc_kM(silent=True) eigvals, eigvecs = freq(k0, M, silent=True, num_eigvalues=10) assert np.isclose(eigvals[0].real, 79.5906673583, atol=0.1, rtol=0)
def test_tstiff2d_lb(): #NOTE reference values taken from # compmech.panel.assembly.tstiff2d_1stiff_compression a_b_list = [0.5, 2., 10.] ref_values = [-152.607275551, -80.15391295315146, -79.39137361313862] for a_b, ref_value in zip(a_b_list, ref_values): print('Testing linear buckling') spb = StiffPanelBay() spb.b = 1. spb.a = spb.b * a_b spb.stack = [0, +45, -45, 90, -45, +45] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.m = 12 spb.n = 13 Nxx = -10. spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt, Nxx=Nxx) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt, Nxx=Nxx) bb = spb.b / 5. if False: stiff = spb.add_tstiff2d(ys=spb.b / 2., bf=bb / 2, bb=bb, fstack=[0, 90, 90, 0] * 8, fplyt=spb.plyt * 1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0] * 4, bplyt=spb.plyt * 1., blaminaprop=spb.laminaprop, mb=13, nb=12, mf=13, nf=12, Nxxf=Nxx) spb.calc_k0() spb.calc_kG0() eigvals, eigvecs = lb(spb.k0, spb.kG0, silent=True) calc = eigvals[0] * Nxx assert np.isclose(calc, ref_value, rtol=0.05)
def test_bladestiff2d_lb(): print('Testing linear buckling with BladeStiff2D') spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.stack = [0, +45, -45, 90, -45, +45] spb.plyt = 1e-3 * 0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.m = 17 spb.n = 16 Nxx = -50. spb.add_panel(y1=0, y2=spb.b / 2., plyt=spb.plyt, Nxx=Nxx) spb.add_panel(y1=spb.b / 2., y2=spb.b, plyt=spb.plyt, Nxx=Nxx) bb = spb.b / 5. bf = bb stiff = spb.add_bladestiff2d(ys=spb.b / 2., bf=bf, bb=bb, fstack=[0, 90, 90, 0] * 8, fplyt=spb.plyt * 1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0] * 4, bplyt=spb.plyt * 1., blaminaprop=spb.laminaprop, mf=17, nf=16) spb.calc_k0() spb.calc_kG0() eigvals, eigvecs = lb(spb.k0, spb.kG0, silent=True) spb.plot_skin(eigvecs[:, 0], filename='tmp_test_bladestiff2d_lb_skin.png', colorbar=True) spb.plot_stiffener(eigvecs[:, 0], si=0, region='flange', filename='tmp_test_bladestiff2d_lb_stiff_flange.png', colorbar=True) calc = eigvals[0] * Nxx spb.plot_skin(eigvecs[:, 0], filename='tmp_test_bladestiff2d_lb_skin.png', colorbar=True, vec='w', clean=False) assert np.isclose(calc, -759.05689868085778, atol=0.0001, rtol=0.001)
from compmech.stiffpanelbay import StiffPanelBay spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.r = 10. spb.stack = [0, 90, 90, 0, -45, +45] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'cpanel_clt_donnell_bardell' spb.mu = 1.3e3 spb.m = 13 spb.n = 14 spb.add_panel(y1=0, y2=spb.b/3., plyt=spb.plyt, Nxx=-100.) spb.add_panel(y1=spb.b/3., y2=2*spb.b/3., plyt=spb.plyt, Nxx=-100.) spb.add_panel(y1=2*spb.b/3., y2=spb.b, plyt=spb.plyt, Nxx=-100.) spb.add_bladestiff1d(ys=spb.b/3., Fx=-100., bf=0.05, fstack=[0, 90, 90, 0]*4, fplyt=spb.plyt, flaminaprop=spb.laminaprop) spb.add_bladestiff1d(ys=2*spb.b/3., Fx=-100., bf=0.05, fstack=[0, 90, 90, 0]*4, fplyt=spb.plyt, flaminaprop=spb.laminaprop) spb.lb(silent=False) print 'Fx', spb.bladestiff1ds[0].Fx print 'ys', spb.bladestiff1ds[0].ys print 'bf', spb.bladestiff1ds[0].bf print 'df', spb.bladestiff1ds[0].df
def test_dynamic_with_BladeStiff2D(): print('Testing dynamic analysis with TStiff2D') spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.stack = [0, 90, 90, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.model = 'plate_clt_donnell_bardell' spb.m = 10 spb.n = 10 spb.mu = 1.3e3 spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt) bb = spb.b/5. bf = bb stiff = spb.add_bladestiff2d(ys=spb.b/2., bf=bf, bb=bb, fstack=[0, 90, 90, 0]*2, fplyt=spb.plyt*1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0]*1, bplyt=spb.plyt*1., blaminaprop=spb.laminaprop, mf=10, nf=10) k0 = spb.calc_k0() M = spb.calc_kM() eigvals, eigvecs = freq(k0, M, silent=True) spb.plot_skin(eigvecs[:, 0], filename='tmp_test_bladestiff2d_dynamic_skin.png', colorbar=True) spb.plot_stiffener(eigvecs[:, 0], si=0, region='flange', filename='tmp_test_bladestiff2d_dynamic_stiff_flange.png', colorbar=True) assert np.isclose(eigvals[0], 25.865835238236173, atol=0.01, rtol=0.001)
def test_static_with_BladeStiff2D(): print('Testing linear statics with BladeStiff2D') spb = StiffPanelBay() spb.a = 2. spb.b = 1. spb.m = 12 spb.n = 13 spb.stack = [0, +45, -45, 90, -45, +45, 0] spb.plyt = 1e-3*0.125 spb.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9) spb.add_panel(y1=0, y2=spb.b/2., plyt=spb.plyt) spb.add_panel(y1=spb.b/2., y2=spb.b, plyt=spb.plyt) bb = spb.b/5. bf = bb stiff = spb.add_bladestiff2d(ys=spb.b/2., bf=bf, bb=bb, fstack=[0, 90, 90, 0]*8, fplyt=spb.plyt*1., flaminaprop=spb.laminaprop, bstack=[0, 90, 90, 0]*4, bplyt=spb.plyt*1., blaminaprop=spb.laminaprop, mf=17, nf=16) stiff.flange.forces.append([stiff.flange.a/2., stiff.flange.b, 0., 0., 1000.]) spb.calc_k0() fext = spb.calc_fext() inc, cs = static(spb.k0, fext, silent=True) wpanelmin = spb.uvw_skin(cs[0])[2].min() #NOTE repeated call on purpose to evaluate if cs[0] is being messed up # somewhere wpanelmin = spb.uvw_skin(cs[0])[2].min() wflangemax = spb.uvw_stiffener(cs[0], 0, region='flange')[2].max() #NOTE repeated call on purpose wflangemax = spb.uvw_stiffener(cs[0], 0, region='flange')[2].max() assert np.isclose(wpanelmin, -0.30581458201781481, atol=1.e-4, rtol=0.001) assert np.isclose(wflangemax, 0.331155797371884, atol=1.e-4, rtol=0.001) spb.plot_skin(cs[0], filename='tmp_test_bladestiff2d_static_skin.png', colorbar=True, vec='w', clean=False) spb.plot_stiffener(cs[0], si=0, region='flange', filename='tmp_test_bladestiff2d_stiff_static_flange.png', colorbar=True, clean=False)