示例#1
0
        public static void ElasticK(double[,] k, List <Vec3Float> xyz, float[] r,
                                    double L, double Le,
                                    int n1, int n2,
                                    double Ax, double Asy, double Asz,
                                    double J, double Iy, double Iz,
                                    double E, double G, float p,
                                    bool shear)
        {
            double Ksy, Ksz;       /* shear deformatn coefficients	*/
            int    i, j;

            double[] t = Coordtrans.coordTrans(xyz, L, n1, n2, p);

            for (i = 0; i < 12; i++)
            {
                for (j = 0; j < 12; j++)
                {
                    k[i, j] = 0.0;
                }
            }

            if (shear)
            {
                Ksy = 12.0 * E * Iz / (G * Asy * Le * Le);
                Ksz = 12.0 * E * Iy / (G * Asz * Le * Le);
            }
            else
            {
                Ksy = Ksz = 0.0;
            }

            k[0, 0] = k[6, 6] = E * Ax / Le;
            k[1, 1] = k[7, 7] = 12.0 * E * Iz / (Le * Le * Le * (1.0 + Ksy));
            k[2, 2] = k[8, 8] = 12.0 * E * Iy / (Le * Le * Le * (1.0 + Ksz));
            k[3, 3] = k[9, 9] = G * J / Le;
            k[4, 4] = k[10, 10] = (4.0 + Ksz) * E * Iy / (Le * (1.0 + Ksz));
            k[5, 5] = k[11, 11] = (4.0 + Ksy) * E * Iz / (Le * (1.0 + Ksy));

            k[4, 2] = k[2, 4] = -6.0 * E * Iy / (Le * Le * (1.0 + Ksz));
            k[5, 1] = k[1, 5] = 6.0 * E * Iz / (Le * Le * (1.0 + Ksy));
            k[6, 0] = k[0, 6] = -k[0, 0];

            k[11, 7] = k[7, 11] = k[7, 5] = k[5, 7] = -k[5, 1];
            k[10, 8] = k[8, 10] = k[8, 4] = k[4, 8] = -k[4, 2];
            k[9, 3]  = k[3, 9] = -k[3, 3];
            k[10, 2] = k[2, 10] = k[4, 2];
            k[11, 1] = k[1, 11] = k[5, 1];

            k[7, 1]  = k[1, 7] = -k[1, 1];
            k[8, 2]  = k[2, 8] = -k[2, 2];
            k[10, 4] = k[4, 10] = (2.0 - Ksz) * E * Iy / (Le * (1.0 + Ksz));
            k[11, 5] = k[5, 11] = (2.0 - Ksy) * E * Iz / (Le * (1.0 + Ksy));

            k = Coordtrans.Atma(t, k, r[n1], r[n2]);

            for (i = 0; i < 12; i++)
            {
                for (j = i + 1; j < 12; j++)
                {
                    if (k[i, j] != k[j, i])
                    {
                        if (Math.Abs(k[i, j] / k[j, i] - 1.0) > 1.0e-6 &&
                            (Math.Abs(k[i, j] / k[i, i]) > 1e-6 ||
                             Math.Abs(k[j, i] / k[i, i]) > 1e-6
                            )
                            )
                        {
                            Console.WriteLine($"elastic_K: element stiffness matrix not symetric ...");
                            Console.WriteLine($" ... k[{i}][{j}] = {k[i, j]} ");
                            Console.WriteLine($" ... k[{j}][{i}] = {k[j, i]}   ");
                            Console.WriteLine($" ... relative error = {Math.Abs(k[i, j] / k[j, i] - 1.0)} ");
                            Console.WriteLine($" ... element matrix saved in file 'kt'");
                        }

                        k[i, j] = k[j, i] = 0.5 * (k[i, j] + k[j, i]);
                    }
                }
            }
        }