Exemple #1
0
    // in global 3D coordinate system
    bp::tuple computeShearAndBending() {

        PolyVec Vx, Vy, Fz, Mx, My, Tz;
        beam->shearAndBending(Vx, Vy, Fz, Mx, My, Tz);


        bp::list Vx0, Vy0, Fz0, Mx0, My0, Tz0;

        int n = beam->getNumNodes() - 1;

        for(int i = 0; i < n; i++)
        {
            Vx0.append(Vx(i).eval(0.0));
            Vy0.append(Vy(i).eval(0.0));
            Fz0.append(Fz(i).eval(0.0));
            Mx0.append(-My(i).eval(0.0));  // translate back to global coordinates
            My0.append(Mx(i).eval(0.0));  // translate back to global coordinates
            Tz0.append(Tz(i).eval(0.0));
        }

        Vx0.append(Vx(n-1).eval(1.0));
        Vy0.append(Vy(n-1).eval(1.0));
        Fz0.append(Fz(n-1).eval(1.0));
        Mx0.append(-My(n-1).eval(1.0));  // translate back to global coordinates
        My0.append(Mx(n-1).eval(1.0));  // translate back to global coordinates
        Tz0.append(Tz(n-1).eval(1.0));


        return bp::make_tuple(bpn::array(Vx0), bpn::array(Vy0), bpn::array(Fz0), bpn::array(Mx0), bpn::array(My0), bpn::array(Tz0));

    }
Exemple #2
0
void foo(PV const& pv) {
	PV tmp;
	//tmp.front() = pv.front();
	//tmp.push_back(&pv.front());
	My const &mc1 = pv[0];
	PV tmp2 = pv;
	My &mc2 = tmp2[0];

	boost::range::copy(pv, boost::ptr_container::ptr_back_inserter(tmp));
	//pv[0] = My();
	My const &mc3 = tmp[0];
	tmp[0] = My(1);
	My const &mc4 = tmp[0];
	My const &mc5 = pv[0];
}
Exemple #3
0
void cal_fun(vector<QPointF> point_v, vector<Func> &func_v)
{
    if(point_v.size() <= 2)
    {
        func_v.clear();
        return;
    }

    int n = point_v.size();
    func_v.clear();
    func_v.resize(n-1);


    vector<double> Mx(n);
    vector<double> My(n);
    vector<double> A(n-2);
    vector<double> B(n-2);
    vector<double> C(n-2);
    vector<double> Dx(n-2);
    vector<double> Dy(n-2);
    vector<double> h(n-1);

    for(int i = 0; i < n-1; i++)
    {
        h[i] = sqrt(pow(point_v[i+1].x() - point_v[i].x(), 2) + pow(point_v[i+1].y() - point_v[i].y(), 2));
    }

    for(int i = 0; i < n-2; i++)
    {
        A[i] = h[i];
        B[i] = 2*(h[i]+h[i+1]);
        C[i] = h[i+1];

        Dx[i] =  6*( (point_v[i+2].x() - point_v[i+1].x())/h[i+1] - (point_v[i+1].x() - point_v[i].x())/h[i] );
        Dy[i] =  6*( (point_v[i+2].y() - point_v[i+1].y())/h[i+1] - (point_v[i+1].y() - point_v[i].y())/h[i] );
    }

    //TDMA
    C[0] = C[0] / B[0];
    Dx[0] = Dx[0] / B[0];
    Dy[0] = Dy[0] / B[0];
    for(int i = 1; i < n-2; i++)
    {
        double tmp = B[i] - A[i]*C[i-1];
        C[i] = C[i] / tmp;
        Dx[i] = (Dx[i] - A[i]*Dx[i-1]) / tmp;
        Dy[i] = (Dy[i] - A[i]*Dy[i-1]) / tmp;
    }
    Mx[n-2] = Dx[n-3];
    My[n-2] = Dy[n-3];
    for(int i = n-4; i >= 0; i--)
    {
        Mx[i+1] = Dx[i] - C[i]*Mx[i+2];
        My[i+1] = Dy[i] - C[i]*My[i+2];
    }

    Mx[0] = 0;
    Mx[n-1] = 0;
    My[0] = 0;
    My[n-1] = 0;

    for(int i = 0; i < n-1; i++)
    {
        func_v[i].a_x = point_v[i].x();
        func_v[i].b_x = (point_v[i+1].x() - point_v[i].x())/h[i] - (2*h[i]*Mx[i] + h[i]*Mx[i+1]) / 6;
        func_v[i].c_x = Mx[i]/2;
        func_v[i].d_x = (Mx[i+1] - Mx[i]) / (6*h[i]);

        func_v[i].a_y = point_v[i].y();
        func_v[i].b_y = (point_v[i+1].y() - point_v[i].y())/h[i] - (2*h[i]*My[i] + h[i]*My[i+1]) / 6;
        func_v[i].c_y = My[i]/2;
        func_v[i].d_y = (My[i+1] - My[i]) / (6*h[i]);

        func_v[i].h = h[i];
    }
}