static void TestTet()
        {
            //new Validation.Case_03.Validator().Validate();

            var tet =
                new TetrahedronElement();

            //new Tetrahedral();

            tet.Nodes[0] = new Node(-1, -1, 0);
            tet.Nodes[1] = new Node(1, -1, 0);
            tet.Nodes[2] = new Node(1, 1, 0);
            tet.Nodes[3] = new Node(0, 0, 5);

            tet.Material = UniformIsotropicMaterial.CreateFromYoungPoisson(210e9, 0.3);
            //tet.E = 1000;tet.Nu = 0.3;

            var stf = tet.GetGlobalStifnessMatrix();

            var ctrl = new MatrixVisualizerControl();

            ctrl.VisualizeMatrix(stf);

            new Window()
            {
                Content = ctrl, Title = "epsi1on Matrix Visualizer!", Width = 24 * 50, Height = 24 * 50
            }
            .ShowDialog();
        }
        /// <summary>
        /// Reads an element from an Abaqus input file
        /// </summary>
        /// <param name="elementline">A line with the element props</param>
        /// <param name="delimiter">The separator char</param>
        /// <param name="nodes">A list of nodes - starts at 0 -> = node-1</param>
        /// <returns>An element</returns>
        private static TetrahedronElement ReadTetraElement(string elementline, char delimiter, NodeCollection nodes)
        {
            TetrahedronElement elm = new TetrahedronElement();

            string[] split;
            int      elementNr, nodeNr1, nodeNr2, nodeNr3, nodeNr4;

            try
            {
                split = elementline.Split(delimiter);

                elementNr = Convert.ToInt32(split[0]);
                //subtract 1. The nodes are numbered from 1-> end and are stored as 0-> end-1
                elm.Nodes[0] = nodes[Convert.ToInt32(split[1]) - 1];
                elm.Nodes[1] = nodes[Convert.ToInt32(split[2]) - 1];
                elm.Nodes[2] = nodes[Convert.ToInt32(split[3]) - 1];
                elm.Nodes[3] = nodes[Convert.ToInt32(split[4]) - 1];
                elm.label    = elementNr.ToString();
            }
            catch (Exception)
            {
                throw new Exception("Something went wrong with reading the nodes! Error with line: " + elementline);
            }

            return(elm);
        }
Exemple #3
0
        public static Model Generate3DTetrahedralElementGrid(int m, int n, int l)
        {
            var buf = new Model();

            var dx = 1.0;
            var dy = 1.0;
            var dz = 1.0;

            var nodes = new Node[m, n, l];

            for (int k = 0; k < l; k++)
            {
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < m; j++)
                    {
                        var pos = new Point(i * dx, j * dy, k * dz);
                        var nde = new Node()
                        {
                            Location = pos
                        };
                        buf.Nodes.Add(nde);

                        nde.Constraints = Constraints.RotationFixed;

                        nodes[j, i, k] = nde;
                    }
                }
            }


            var elm = new Func <Node, Node, Node, Node, TetrahedronElement>((n1, n2, n3, n4) =>
            {
                var buff = new TetrahedronElement();

                buff.Nodes[0] = n1;
                buff.Nodes[1] = n2;
                buff.Nodes[2] = n3;
                buff.Nodes[3] = n4;

                buff.Material = UniformIsotropicMaterial.CreateFromYoungPoisson(210e9, 0.3);

                buff.FixNodeOrder();
                return(buff);
            });

            var elms = new List <Element>();

            for (int i = 0; i < m - 1; i++)
            {
                for (int j = 0; j < n - 1; j++)
                {
                    for (int k = 0; k < l - 1; k++)
                    {
                        var ns = new Node[] {
                            nodes[i, j, k],
                            nodes[i + 1, j, k],
                            nodes[i + 1, j + 1, k],
                            nodes[i, j + 1, k],

                            nodes[i, j, k + 1],
                            nodes[i + 1, j, k + 1],
                            nodes[i + 1, j + 1, k + 1],
                            nodes[i, j + 1, k + 1],
                        };


                        elms.Add(elm(ns[0], ns[1], ns[3], ns[4]));
                        elms.Add(elm(ns[2], ns[1], ns[3], ns[6]));

                        elms.Add(elm(ns[1], ns[3], ns[4], ns[6]));

                        elms.Add(elm(ns[4], ns[5], ns[6], ns[1]));
                        elms.Add(elm(ns[4], ns[6], ns[7], ns[3]));
                    }
                }
            }

            buf.Elements.Add(elms.ToArray());

            for (int i = 0; i < n * m; i++)
            {
                buf.Nodes[i].Constraints = Constraints.Fixed;
            }


            return(buf);
        }