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)); }
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(); }