コード例 #1
0
        public static void TestEndReleaseStyiffness()
        {
            //A NUMERICAL PROCEDURE FOR THE NONLINEAR ANALYSIS OF REINFORCED CONCRETE FRAMES WITH INFILL WALLS
            //by MURAT EFE GÜNEY
            //p. 51: 2.3 Condensation and Constraint Equations

            var elm = new BarElement(2);

            elm.Nodes[0] = new Node(-1, 0, 0);
            elm.Nodes[1] = new Node(0, 0, 0);
            //elm.Nodes[2] = new Node(1, 0, 0);


            //elm.StartReleaseCondition = Constraints.FixedRX;
            elm.Section  = new UniformParametric1DSection(1, 2, 3, 4);
            elm.Material = new UniformIsotropicMaterial(1, 0.3);



            var newConds = new Constraint[elm.NodeCount];

            {
                for (int i = 0; i < newConds.Length; i++)
                {
                    newConds[i] = Constraints.Fixed;
                }

                newConds[0].DZ = DofConstraint.Released;
            }



            Array.Copy(newConds, elm._nodalReleaseConditions, newConds.Length);

            var kr2 = elm.GetLocalStifnessMatrix();

            for (var i = 0; i < elm.NodeCount; i++)
            {
                elm.NodalReleaseConditions[i] = Constraint.Fixed;
            }

            var kfull = elm.GetLocalStifnessMatrix();
            var kr    = GetCondensedStiffness(kfull, newConds);


            var ratio = Matrix.DotDivide(kr, kr2);

            ratio.Replace(double.NaN, 0);

            var d = (kr - kr2);

            var dmax = d.Max(i => Math.Abs(i));
        }
コード例 #2
0
        private static void TestBar()
        {
            var iy = 0.03;
            var iz = 0.02;
            var a  = 0.01;
            var j  = iy + iz;

            var e   = 7;
            var g   = 11;
            var rho = 13;

            var model = new Model();

            model.Nodes.Add(new Node(0, 0, 0));
            model.Nodes.Add(new Node(1, 0, 0));

            var barElement = new BarElement(model.Nodes[0], model.Nodes[1]);

            barElement.Behavior = BarElementBehaviours.FullFrame;

            var frameElement = new FrameElement2Node(model.Nodes[0], model.Nodes[1])
            {
                Iy          = iy,
                Iz          = iz,
                A           = a,
                J           = j,
                E           = e,
                G           = g,
                MassDensity = rho
            };


            //barElement.Material = new UniformBarMaterial(e, g, rho);
            barElement.Section = new UniformParametric1DSection()
            {
                Iy = iy, Iz = iz, A = a
            };

            frameElement.MassFormulationType = MassFormulation.Consistent;

            //barElement.EndConnection = BarElementEndConnection.TotallyHinged;
            //barElement.StartConnection = BarElementEndConnection.TotallyHinged;

            frameElement.HingedAtStart = true;
            //frameElement.HingedAtEnd = true;


            var frameM = frameElement.GetLocalStiffnessMatrix();
            //MathUtil.FillLowerTriangleFromUpperTriangle(frameM);

            var barM = barElement.GetLocalStifnessMatrix();

            var t = 1;                      //- 1e-10;

            var d    = (frameM - t * barM); //
            var dMax = d.CoreArray.Max(i => Math.Abs(i));

            model.Nodes[0].Constraints = Constraint.Fixed;

            model.Solve();
        }