예제 #1
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)
예제 #2
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)
예제 #3
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)
예제 #4
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)
예제 #5
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)
예제 #6
0
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_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)
예제 #8
0
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)
예제 #9
0
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)
예제 #10
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)
예제 #11
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)
예제 #12
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)
예제 #13
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)
예제 #14
0
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)
예제 #15
0
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)
예제 #16
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)
예제 #17
0
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)
예제 #18
0
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)
예제 #19
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)
예제 #20
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.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)
예제 #21
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)
예제 #22
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)
예제 #23
0
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
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.
예제 #25
0
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.