Exemplo n.º 1
0
def test_SpecBeam_const_mat_midpoint_defl():
    """Test SpecBeam for constant mat: Figure 8, displacement vs time at beam midpoint"""

    # expected values are digitised from Ding et al 2012.
    expected_50terms_t = np.array(
      [ 3.511,  3.553,  3.576,  3.605,  3.621,  3.637,  3.651,  3.661,
        3.676,  3.693,  3.701,  3.717,  3.733,  3.743,  3.761,  3.777,
        3.79 ,  3.804,  3.822,  3.833,  3.848,  3.862,  3.877,  3.899,
        3.919,  3.94 ,  3.956,  3.97 ,  3.978,  3.99 ,  4.001,  4.014,
        4.025,  4.041,  4.052,  4.064,  4.076,  4.086,  4.094,  4.104,
        4.112,  4.123,  4.134,  4.146,  4.159,  4.172,  4.18 ,  4.192,
        4.212,  4.221,  4.234,  4.255,  4.273,  4.292,  4.324,  4.357,
        4.373,  4.399,  4.418,  4.445])

    expected_50terms_displacement = np.array(
      [ -1.30900000e-04,   8.85900000e-05,   2.63900000e-04,
         3.30200000e-04,   3.30500000e-04,   2.87100000e-04,
         2.00000000e-04,   9.09500000e-05,  -8.36000000e-05,
        -3.01800000e-04,  -4.32800000e-04,  -6.07300000e-04,
        -7.59900000e-04,  -8.90900000e-04,  -9.99800000e-04,
        -1.02100000e-03,  -9.99100000e-04,  -8.67700000e-04,
        -5.61300000e-04,  -2.11300000e-04,   2.04300000e-04,
         7.29200000e-04,   1.42900000e-03,   2.41300000e-03,
         3.46300000e-03,   4.29400000e-03,   5.08100000e-03,
         5.62800000e-03,   5.86800000e-03,   6.19600000e-03,
         6.39300000e-03,   6.52500000e-03,   6.59100000e-03,
         6.48200000e-03,   6.32900000e-03,   6.02300000e-03,
         5.69600000e-03,   5.45500000e-03,   5.06200000e-03,
         4.75600000e-03,   4.40700000e-03,   3.90400000e-03,
         3.35800000e-03,   2.87800000e-03,   2.35300000e-03,
         1.82900000e-03,   1.52300000e-03,   9.98700000e-04,
         5.18300000e-04,   2.12500000e-04,  -4.95200000e-05,
        -2.67600000e-04,  -3.76500000e-04,  -3.76100000e-04,
        -2.00600000e-04,   1.87300000e-05,   1.06500000e-04,
         1.94500000e-04,   1.94900000e-04,   1.30000000e-04])

    expected_200terms_t = np.array(
      [ 3.503,  3.519,  3.539,  3.556,  3.576,  3.595,  3.613,  3.632,
        3.651,  3.667,  3.69 ,  3.708,  3.727,  3.746,  3.766,  3.782,
        3.801,  3.822,  3.84 ,  3.856,  3.878,  3.896,  3.915,  3.933,
        3.951,  3.97 ,  3.99 ,  4.009,  4.027,  4.046,  4.067,  4.085,
        4.102,  4.122,  4.141,  4.159,  4.178,  4.197,  4.217,  4.234,
        4.252,  4.273,  4.291,  4.31 ,  4.329,  4.347,  4.368,  4.386,
        4.405,  4.423,  4.442,  4.46 ,  4.479,  4.495])

    expected_200terms_displacement = np.array(
      [  7.04000000e-08,   2.22800000e-05,   2.27000000e-05,
         1.23200000e-06,   2.35100000e-05,   2.39300000e-05,
         2.46400000e-06,  -1.89700000e-05,  -6.22700000e-05,
        -1.27500000e-04,  -1.70700000e-04,  -2.57800000e-04,
        -3.44800000e-04,  -4.53600000e-04,  -5.40600000e-04,
        -5.84000000e-04,  -5.61700000e-04,  -4.73800000e-04,
        -2.54900000e-04,   1.17100000e-04,   6.85900000e-04,
         1.51700000e-03,   2.50100000e-03,   3.70300000e-03,
         5.01500000e-03,   6.26200000e-03,   7.20200000e-03,
         7.61800000e-03,   7.39900000e-03,   6.74400000e-03,
         5.91400000e-03,   5.01800000e-03,   4.10100000e-03,
         3.22700000e-03,   2.50600000e-03,   1.85000000e-03,
         1.32600000e-03,   9.11400000e-04,   5.84000000e-04,
         3.00200000e-04,   1.47600000e-04,   3.87500000e-05,
        -4.82900000e-05,  -1.13400000e-04,  -1.13000000e-04,
        -1.34500000e-04,  -1.34000000e-04,  -1.33600000e-04,
        -1.11400000e-04,  -6.72600000e-05,  -6.68400000e-05,
        -6.64500000e-05,  -4.41700000e-05,  -4.38200000e-05])

    t = np.linspace(0, 4.5, 400)

    #see Dingetal2012 Table 2 for material properties
    pdict = OrderedDict(
            E = 6.998*1e9, #Pa
            rho = 2373, #kg/m3
            L = 160, #m
            #v_norm=0.01165,
            kf=5.41e-4,
            #Fz_norm=1.013e-4,
            mu_norm=39.263,
            k1_norm=97.552,
            k3_norm=2.497e6,
            nterms=50,
            BC="SS",
            nquad=20,
            k1bar=PolyLine([0,0.5],[0.5,1],[1,1],[1,1]),
            moving_loads_x_norm=[[0]],
            moving_loads_Fz_norm=[[1.013e-4]],
            moving_loads_v_norm=[0.01165,],
            tvals=t,
            xvals_norm=0.5)



    a = SpecBeam(**pdict)
    a.calulate_qk(t=t)

    yall = a.wofx(x_norm=0.5, normalise_w=False)
    ycompare = np.interp(expected_50terms_t, t, yall)



    if DEBUG:


        title ='SpecBeam, const mat prop vs Ding et al (2012) \nFigure 8 Displacement at Midpoint of beam'
        print(title)
        print(' '.join(['{:>9s}']*4).format('t', 'expect', 'calc', 'diff'))
        for i, j, k in zip(expected_50terms_t, expected_50terms_displacement, ycompare):
            print(' '.join(['{:9.4f}']*4).format(i, j, k, j-k))
        print()




        fig = plt.figure(figsize=(10,6))
        ax = fig.add_subplot("111")
        ax.set_xlabel("time, s")
        ax.set_ylabel("w, m")
        ax.set_xlim(3.5, 4.5)
        ax.set_title(title)

        ax.plot(expected_50terms_t, expected_50terms_displacement,
                label="expect n=50", color='green', marker='o', ls='-')
        ax.plot(expected_200terms_t, expected_200terms_displacement,
                label="expect n=200", color='black', marker=None, ls='-')


        ax.plot(t, yall, label="calc n=50")
        ax.plot(expected_50terms_t, ycompare, label="calc, n=50 (compare)",
                color='red', marker='s', ms=4, ls=':')

        leg = ax.legend(loc='upper left')
        leg.draggable()

        plt.show()

    assert_allclose(expected_50terms_displacement, ycompare, atol=2.4e-4)
Exemplo n.º 2
0
def test_SpecBeam_const_mat_midpoint_defl():
    """Test SpecBeam for constant mat: Figure 8, displacement vs time at beam midpoint"""

    # expected values are digitised from Ding et al 2012.
    expected_50terms_t = np.array([
        3.511, 3.553, 3.576, 3.605, 3.621, 3.637, 3.651, 3.661, 3.676, 3.693,
        3.701, 3.717, 3.733, 3.743, 3.761, 3.777, 3.79, 3.804, 3.822, 3.833,
        3.848, 3.862, 3.877, 3.899, 3.919, 3.94, 3.956, 3.97, 3.978, 3.99,
        4.001, 4.014, 4.025, 4.041, 4.052, 4.064, 4.076, 4.086, 4.094, 4.104,
        4.112, 4.123, 4.134, 4.146, 4.159, 4.172, 4.18, 4.192, 4.212, 4.221,
        4.234, 4.255, 4.273, 4.292, 4.324, 4.357, 4.373, 4.399, 4.418, 4.445
    ])

    expected_50terms_displacement = np.array([
        -1.30900000e-04, 8.85900000e-05, 2.63900000e-04, 3.30200000e-04,
        3.30500000e-04, 2.87100000e-04, 2.00000000e-04, 9.09500000e-05,
        -8.36000000e-05, -3.01800000e-04, -4.32800000e-04, -6.07300000e-04,
        -7.59900000e-04, -8.90900000e-04, -9.99800000e-04, -1.02100000e-03,
        -9.99100000e-04, -8.67700000e-04, -5.61300000e-04, -2.11300000e-04,
        2.04300000e-04, 7.29200000e-04, 1.42900000e-03, 2.41300000e-03,
        3.46300000e-03, 4.29400000e-03, 5.08100000e-03, 5.62800000e-03,
        5.86800000e-03, 6.19600000e-03, 6.39300000e-03, 6.52500000e-03,
        6.59100000e-03, 6.48200000e-03, 6.32900000e-03, 6.02300000e-03,
        5.69600000e-03, 5.45500000e-03, 5.06200000e-03, 4.75600000e-03,
        4.40700000e-03, 3.90400000e-03, 3.35800000e-03, 2.87800000e-03,
        2.35300000e-03, 1.82900000e-03, 1.52300000e-03, 9.98700000e-04,
        5.18300000e-04, 2.12500000e-04, -4.95200000e-05, -2.67600000e-04,
        -3.76500000e-04, -3.76100000e-04, -2.00600000e-04, 1.87300000e-05,
        1.06500000e-04, 1.94500000e-04, 1.94900000e-04, 1.30000000e-04
    ])

    expected_200terms_t = np.array([
        3.503, 3.519, 3.539, 3.556, 3.576, 3.595, 3.613, 3.632, 3.651, 3.667,
        3.69, 3.708, 3.727, 3.746, 3.766, 3.782, 3.801, 3.822, 3.84, 3.856,
        3.878, 3.896, 3.915, 3.933, 3.951, 3.97, 3.99, 4.009, 4.027, 4.046,
        4.067, 4.085, 4.102, 4.122, 4.141, 4.159, 4.178, 4.197, 4.217, 4.234,
        4.252, 4.273, 4.291, 4.31, 4.329, 4.347, 4.368, 4.386, 4.405, 4.423,
        4.442, 4.46, 4.479, 4.495
    ])

    expected_200terms_displacement = np.array([
        7.04000000e-08, 2.22800000e-05, 2.27000000e-05, 1.23200000e-06,
        2.35100000e-05, 2.39300000e-05, 2.46400000e-06, -1.89700000e-05,
        -6.22700000e-05, -1.27500000e-04, -1.70700000e-04, -2.57800000e-04,
        -3.44800000e-04, -4.53600000e-04, -5.40600000e-04, -5.84000000e-04,
        -5.61700000e-04, -4.73800000e-04, -2.54900000e-04, 1.17100000e-04,
        6.85900000e-04, 1.51700000e-03, 2.50100000e-03, 3.70300000e-03,
        5.01500000e-03, 6.26200000e-03, 7.20200000e-03, 7.61800000e-03,
        7.39900000e-03, 6.74400000e-03, 5.91400000e-03, 5.01800000e-03,
        4.10100000e-03, 3.22700000e-03, 2.50600000e-03, 1.85000000e-03,
        1.32600000e-03, 9.11400000e-04, 5.84000000e-04, 3.00200000e-04,
        1.47600000e-04, 3.87500000e-05, -4.82900000e-05, -1.13400000e-04,
        -1.13000000e-04, -1.34500000e-04, -1.34000000e-04, -1.33600000e-04,
        -1.11400000e-04, -6.72600000e-05, -6.68400000e-05, -6.64500000e-05,
        -4.41700000e-05, -4.38200000e-05
    ])

    t = np.linspace(0, 4.5, 400)

    #see Dingetal2012 Table 2 for material properties
    pdict = OrderedDict(
        E=6.998 * 1e9,  #Pa
        rho=2373,  #kg/m3
        L=160,  #m
        #v_norm=0.01165,
        kf=5.41e-4,
        #Fz_norm=1.013e-4,
        mu_norm=39.263,
        k1_norm=97.552,
        k3_norm=2.497e6,
        nterms=50,
        BC="SS",
        nquad=20,
        k1bar=PolyLine([0, 0.5], [0.5, 1], [1, 1], [1, 1]),
        moving_loads_x_norm=[[0]],
        moving_loads_Fz_norm=[[1.013e-4]],
        moving_loads_v_norm=[
            0.01165,
        ],
        tvals=t,
        xvals_norm=0.5)

    a = SpecBeam(**pdict)
    a.calulate_qk(t=t)

    yall = a.wofx(x_norm=0.5, normalise_w=False)
    ycompare = np.interp(expected_50terms_t, t, yall)

    if DEBUG:

        title = 'SpecBeam, const mat prop vs Ding et al (2012) \nFigure 8 Displacement at Midpoint of beam'
        print(title)
        print(' '.join(['{:>9s}'] * 4).format('t', 'expect', 'calc', 'diff'))
        for i, j, k in zip(expected_50terms_t, expected_50terms_displacement,
                           ycompare):
            print(' '.join(['{:9.4f}'] * 4).format(i, j, k, j - k))
        print()

        fig = plt.figure(figsize=(10, 6))
        ax = fig.add_subplot("111")
        ax.set_xlabel("time, s")
        ax.set_ylabel("w, m")
        ax.set_xlim(3.5, 4.5)
        ax.set_title(title)

        ax.plot(expected_50terms_t,
                expected_50terms_displacement,
                label="expect n=50",
                color='green',
                marker='o',
                ls='-')
        ax.plot(expected_200terms_t,
                expected_200terms_displacement,
                label="expect n=200",
                color='black',
                marker=None,
                ls='-')

        ax.plot(t, yall, label="calc n=50")
        ax.plot(expected_50terms_t,
                ycompare,
                label="calc, n=50 (compare)",
                color='red',
                marker='s',
                ms=4,
                ls=':')

        leg = ax.legend(loc='upper left')
        leg.draggable()

        plt.show()

    assert_allclose(expected_50terms_displacement, ycompare, atol=2.4e-4)
Exemplo n.º 3
0
def test_SpecBeam_const_mat_deflection_shape():
    """Test SpecBeam for constant mat: Figure 7, deflection with load at midpoint"""

    # expected values are digitised from Ding et al 2012.
    expected_50terms_x = np.array(
      [ 70.68 ,  71.275,  71.785,  72.189,  72.529,  72.848,  73.209,
        73.677,  74.06 ,  74.378,  74.74 ,  75.122,  75.505,  75.781,
        76.079,  76.312,  76.525,  76.716,  76.95 ,  77.12 ,  77.418,
        77.715,  77.907,  78.204,  78.459,  78.778,  79.224,  79.522,
        79.883,  80.181,  80.436,  80.606,  80.776,  81.01 ,  81.137,
        81.307,  81.477,  81.626,  81.902,  82.179,  82.497,  82.774,
        82.986,  83.263,  83.539,  84.028,  84.368,  84.623,  84.878,
        85.239,  85.728,  86.153,  86.684,  87.386,  87.853,  88.363,
        88.81 ,  89.341,  89.788])

    expected_50terms_displacement = np.array(
      [  3.23100000e-06,   1.48600000e-04,   1.80900000e-04,
         1.64800000e-04,   1.00200000e-04,   1.93900000e-05,
        -1.09900000e-04,  -2.55300000e-04,  -3.52200000e-04,
        -3.68300000e-04,  -3.19900000e-04,  -1.26000000e-04,
         1.64800000e-04,   5.04000000e-04,   9.24100000e-04,
         1.27900000e-03,   1.66700000e-03,   2.10300000e-03,
         2.58800000e-03,   3.00800000e-03,   3.59000000e-03,
         4.17100000e-03,   4.70400000e-03,   5.27000000e-03,
         5.70600000e-03,   6.17400000e-03,   6.49800000e-03,
         6.57800000e-03,   6.44900000e-03,   6.15800000e-03,
         5.91600000e-03,   5.64100000e-03,   5.30200000e-03,
         4.88200000e-03,   4.51100000e-03,   4.17100000e-03,
         3.81600000e-03,   3.38000000e-03,   2.79800000e-03,
         2.05500000e-03,   1.42500000e-03,   7.78700000e-04,
         3.26300000e-04,  -9.37000000e-05,  -5.29900000e-04,
        -9.01500000e-04,  -9.98400000e-04,  -1.01500000e-03,
        -9.66100000e-04,  -8.04500000e-04,  -5.29900000e-04,
        -2.22900000e-04,   8.40100000e-05,   3.42500000e-04,
         3.74800000e-04,   3.10200000e-04,   1.80900000e-04,
         1.93900000e-05,  -1.26000000e-04])

    expected_200terms_x = np.array(
      [ 70.064,  70.404,  70.723,  71.02 ,  71.36 ,  71.679,  71.955,
        72.317,  72.614,  72.976,  73.273,  73.571,  73.911,  74.23 ,
        74.527,  74.867,  75.165,  75.505,  75.866,  76.164,  76.483,
        76.801,  77.12 ,  77.418,  77.779,  78.098,  78.438,  78.693,
        79.033,  79.352,  79.671,  79.989,  80.308,  80.648,  80.967,
        81.286,  81.583,  81.924,  82.264,  82.582,  82.88 ,  83.199,
        83.539,  83.815,  84.134,  84.495,  84.793,  85.112,  85.43 ,
        85.749,  86.047,  86.429,  86.727,  87.046,  87.365,  87.683,
        87.981,  88.342,  88.64 ,  88.959,  89.277,  89.617,  89.958])

    expected_200terms_displacement = np.array(
      [ -2.90800000e-05,  -2.90800000e-05,  -6.13900000e-05,
        -7.75400000e-05,  -7.75400000e-05,  -1.09900000e-04,
        -1.26000000e-04,  -1.26000000e-04,  -1.26000000e-04,
        -1.42200000e-04,  -1.09900000e-04,  -1.09900000e-04,
        -9.37000000e-05,  -2.90800000e-05,   3.55400000e-05,
         1.64800000e-04,   2.94000000e-04,   4.55600000e-04,
         7.30200000e-04,   1.02100000e-03,   1.40900000e-03,
         1.86100000e-03,   2.37800000e-03,   2.99200000e-03,
         3.68700000e-03,   4.43000000e-03,   5.22100000e-03,
         5.96400000e-03,   6.67500000e-03,   7.27300000e-03,
         7.58000000e-03,   7.48300000e-03,   6.95000000e-03,
         6.06100000e-03,   4.99500000e-03,   3.88000000e-03,
         2.83000000e-03,   1.94200000e-03,   1.16600000e-03,
         5.20200000e-04,   5.17000000e-05,  -2.55300000e-04,
        -4.33000000e-04,  -5.46000000e-04,  -5.78400000e-04,
        -5.62200000e-04,  -4.81400000e-04,  -4.33000000e-04,
        -3.19900000e-04,  -2.39100000e-04,  -1.74500000e-04,
        -1.26000000e-04,  -4.52300000e-05,  -1.29200000e-05,
         1.93900000e-05,   1.93900000e-05,   3.55400000e-05,
         6.78500000e-05,   3.55400000e-05,   5.17000000e-05,
         3.55400000e-05,   1.93900000e-05,   1.93900000e-05])


    t = np.linspace(0, 160/2/20, 400)

    xvals = np.linspace(0, 160, 200)
    #see Dingetal2012 Table 2 for material properties
    pdict = OrderedDict(
            E = 6.998*1e9, #Pa
            rho = 2373, #kg/m3
            L = 160, #m
            #v_norm=0.01165,
            kf=5.41e-4,
            #Fz_norm=1.013e-4,
            mu_norm=39.263,
            k1_norm=97.552,
            k3_norm=2.497e6,
            nterms=50,
            BC="SS",
            nquad=20,
            moving_loads_x_norm=[[0]],
            moving_loads_Fz_norm=[[1.013e-4]],
            moving_loads_v_norm=[0.01165,],
            tvals=t,
            xvals=xvals)



    a = SpecBeam(**pdict)

    a.calulate_qk(t=t)

    yall = a.wofx(x=xvals, tslice=slice(-1, None, None), normalise_w=False)[:,0]
    ycompare = np.interp(expected_50terms_x, xvals, yall)



    if DEBUG:


        title ='SpecBeam, const mat prop vs Ding et al (2012) \nFigure 7 deflection when load at Midpoint of beam'
        print(title)
        print(' '.join(['{:>9s}']*4).format('t', 'expect', 'calc', 'diff'))
        for i, j, k in zip(expected_50terms_x, expected_50terms_displacement, ycompare):
            print(' '.join(['{:9.4f}']*4).format(i, j, k, j-k))
        print()




        fig = plt.figure(figsize=(10,6))
        ax = fig.add_subplot("111")
        ax.set_xlabel("x, m")
        ax.set_ylabel("w, m")
        ax.set_xlim(70, 90)
        ax.set_title(title)

        ax.plot(expected_50terms_x, expected_50terms_displacement,
                label="expect n=50", color='green', marker='o', ls='-')
        ax.plot(expected_200terms_x, expected_200terms_displacement,
                label="expect n=200", color='black', marker=None, ls='-')


        ax.plot(xvals, yall, label="calc n=50")
        ax.plot(expected_50terms_x, ycompare, label="calc, n=50 (compare)",
                color='red', marker='s', ms=4, ls=':')

        leg = ax.legend(loc='upper left')
        leg.draggable()

        plt.show()

    assert_allclose(expected_50terms_displacement, ycompare, atol=2.4e-4)
Exemplo n.º 4
0
def test_SpecBeam_const_mat_deflection_shape():
    """Test SpecBeam for constant mat: Figure 7, deflection with load at midpoint"""

    # expected values are digitised from Ding et al 2012.
    expected_50terms_x = np.array([
        70.68, 71.275, 71.785, 72.189, 72.529, 72.848, 73.209, 73.677, 74.06,
        74.378, 74.74, 75.122, 75.505, 75.781, 76.079, 76.312, 76.525, 76.716,
        76.95, 77.12, 77.418, 77.715, 77.907, 78.204, 78.459, 78.778, 79.224,
        79.522, 79.883, 80.181, 80.436, 80.606, 80.776, 81.01, 81.137, 81.307,
        81.477, 81.626, 81.902, 82.179, 82.497, 82.774, 82.986, 83.263, 83.539,
        84.028, 84.368, 84.623, 84.878, 85.239, 85.728, 86.153, 86.684, 87.386,
        87.853, 88.363, 88.81, 89.341, 89.788
    ])

    expected_50terms_displacement = np.array([
        3.23100000e-06, 1.48600000e-04, 1.80900000e-04, 1.64800000e-04,
        1.00200000e-04, 1.93900000e-05, -1.09900000e-04, -2.55300000e-04,
        -3.52200000e-04, -3.68300000e-04, -3.19900000e-04, -1.26000000e-04,
        1.64800000e-04, 5.04000000e-04, 9.24100000e-04, 1.27900000e-03,
        1.66700000e-03, 2.10300000e-03, 2.58800000e-03, 3.00800000e-03,
        3.59000000e-03, 4.17100000e-03, 4.70400000e-03, 5.27000000e-03,
        5.70600000e-03, 6.17400000e-03, 6.49800000e-03, 6.57800000e-03,
        6.44900000e-03, 6.15800000e-03, 5.91600000e-03, 5.64100000e-03,
        5.30200000e-03, 4.88200000e-03, 4.51100000e-03, 4.17100000e-03,
        3.81600000e-03, 3.38000000e-03, 2.79800000e-03, 2.05500000e-03,
        1.42500000e-03, 7.78700000e-04, 3.26300000e-04, -9.37000000e-05,
        -5.29900000e-04, -9.01500000e-04, -9.98400000e-04, -1.01500000e-03,
        -9.66100000e-04, -8.04500000e-04, -5.29900000e-04, -2.22900000e-04,
        8.40100000e-05, 3.42500000e-04, 3.74800000e-04, 3.10200000e-04,
        1.80900000e-04, 1.93900000e-05, -1.26000000e-04
    ])

    expected_200terms_x = np.array([
        70.064, 70.404, 70.723, 71.02, 71.36, 71.679, 71.955, 72.317, 72.614,
        72.976, 73.273, 73.571, 73.911, 74.23, 74.527, 74.867, 75.165, 75.505,
        75.866, 76.164, 76.483, 76.801, 77.12, 77.418, 77.779, 78.098, 78.438,
        78.693, 79.033, 79.352, 79.671, 79.989, 80.308, 80.648, 80.967, 81.286,
        81.583, 81.924, 82.264, 82.582, 82.88, 83.199, 83.539, 83.815, 84.134,
        84.495, 84.793, 85.112, 85.43, 85.749, 86.047, 86.429, 86.727, 87.046,
        87.365, 87.683, 87.981, 88.342, 88.64, 88.959, 89.277, 89.617, 89.958
    ])

    expected_200terms_displacement = np.array([
        -2.90800000e-05, -2.90800000e-05, -6.13900000e-05, -7.75400000e-05,
        -7.75400000e-05, -1.09900000e-04, -1.26000000e-04, -1.26000000e-04,
        -1.26000000e-04, -1.42200000e-04, -1.09900000e-04, -1.09900000e-04,
        -9.37000000e-05, -2.90800000e-05, 3.55400000e-05, 1.64800000e-04,
        2.94000000e-04, 4.55600000e-04, 7.30200000e-04, 1.02100000e-03,
        1.40900000e-03, 1.86100000e-03, 2.37800000e-03, 2.99200000e-03,
        3.68700000e-03, 4.43000000e-03, 5.22100000e-03, 5.96400000e-03,
        6.67500000e-03, 7.27300000e-03, 7.58000000e-03, 7.48300000e-03,
        6.95000000e-03, 6.06100000e-03, 4.99500000e-03, 3.88000000e-03,
        2.83000000e-03, 1.94200000e-03, 1.16600000e-03, 5.20200000e-04,
        5.17000000e-05, -2.55300000e-04, -4.33000000e-04, -5.46000000e-04,
        -5.78400000e-04, -5.62200000e-04, -4.81400000e-04, -4.33000000e-04,
        -3.19900000e-04, -2.39100000e-04, -1.74500000e-04, -1.26000000e-04,
        -4.52300000e-05, -1.29200000e-05, 1.93900000e-05, 1.93900000e-05,
        3.55400000e-05, 6.78500000e-05, 3.55400000e-05, 5.17000000e-05,
        3.55400000e-05, 1.93900000e-05, 1.93900000e-05
    ])

    t = np.linspace(0, 160 / 2 / 20, 400)

    xvals = np.linspace(0, 160, 200)
    #see Dingetal2012 Table 2 for material properties
    pdict = OrderedDict(
        E=6.998 * 1e9,  #Pa
        rho=2373,  #kg/m3
        L=160,  #m
        #v_norm=0.01165,
        kf=5.41e-4,
        #Fz_norm=1.013e-4,
        mu_norm=39.263,
        k1_norm=97.552,
        k3_norm=2.497e6,
        nterms=50,
        BC="SS",
        nquad=20,
        moving_loads_x_norm=[[0]],
        moving_loads_Fz_norm=[[1.013e-4]],
        moving_loads_v_norm=[
            0.01165,
        ],
        tvals=t,
        xvals=xvals)

    a = SpecBeam(**pdict)

    a.calulate_qk(t=t)

    yall = a.wofx(x=xvals, tslice=slice(-1, None, None), normalise_w=False)[:,
                                                                            0]
    ycompare = np.interp(expected_50terms_x, xvals, yall)

    if DEBUG:

        title = 'SpecBeam, const mat prop vs Ding et al (2012) \nFigure 7 deflection when load at Midpoint of beam'
        print(title)
        print(' '.join(['{:>9s}'] * 4).format('t', 'expect', 'calc', 'diff'))
        for i, j, k in zip(expected_50terms_x, expected_50terms_displacement,
                           ycompare):
            print(' '.join(['{:9.4f}'] * 4).format(i, j, k, j - k))
        print()

        fig = plt.figure(figsize=(10, 6))
        ax = fig.add_subplot("111")
        ax.set_xlabel("x, m")
        ax.set_ylabel("w, m")
        ax.set_xlim(70, 90)
        ax.set_title(title)

        ax.plot(expected_50terms_x,
                expected_50terms_displacement,
                label="expect n=50",
                color='green',
                marker='o',
                ls='-')
        ax.plot(expected_200terms_x,
                expected_200terms_displacement,
                label="expect n=200",
                color='black',
                marker=None,
                ls='-')

        ax.plot(xvals, yall, label="calc n=50")
        ax.plot(expected_50terms_x,
                ycompare,
                label="calc, n=50 (compare)",
                color='red',
                marker='s',
                ms=4,
                ls=':')

        leg = ax.legend(loc='upper left')
        leg.draggable()

        plt.show()

    assert_allclose(expected_50terms_displacement, ycompare, atol=2.4e-4)