Esempio n. 1
0
        public static double[] bar3gfBarnes(double[][] ec,double[] ep, double[] ed, double ten)
        {
            // Compute the internal force vector for a cable element according to:
            // FORM-FINDING  AND  ANALYSIS  OF  PRESTRESSED NETS  AND  MEMBRANES
            // by M. R. BARNES (1988)
            //ed = [a_1 a_2 ... a_6]; Element nodal displacements
            //ep = [E A]; element properties
            //ten = [ten]; Specified initial element tension

            //OUTPUT:
            //ef = F_int = [f_1 f_2 ... f_6]';
            //ec format: [x,y,z][node1,node2...]
            //ed format: [node1x, node1y, node1z, node2x...]

            double l0 = getElementLength(ec);
            double[][] ecUpdated = updateEcWithDisp(ec, ed);
            double l = getElementLength(ecUpdated); //Current length

            //Current element force
            double tm = ten + (ep[0] * ep[1] / l0) * (l - l0);

            //Direction vector
            Vector v = new DenseVector(3);

            for (int i = 0; i < 3; i++)
            {
                v[i] = ecUpdated[i][0] - ecUpdated[i][1];
            }

            double vl = v.Norm(2);
            Vector x = new DenseVector(6);

            for (int i = 0; i < 3; i++)
            {
                x[i] = v[i] / vl;
            }

            //Reverse direction vector
            for (int i = 0; i < 3; i++)
            {
                x[i+3] = -v[i] / vl;
            }

            return x.Multiply(tm).ToArray();
        }
 public virtual double Norm(double[] a, double p)
 {
     Double.DenseVector vector_a = new Double.DenseVector(a);
     return(vector_a.Norm(p));
 }