Пример #1
0
 public override bool IsOnGround(SolidRectangle incRect)
 {
     float distanceBetween = CenterY - incRect.CenterY;
     if (Radius + incRect.Height / 2 <= Math.Abs(distanceBetween) + ERROR_RATE && Radius + incRect.Height / 2 >= Math.Abs(distanceBetween) - ERROR_RATE)
     {
         mCurrentState = ArcanianState.ArcanianResting;
         return true;
     }
     else
         return false;
 }
Пример #2
0
        public void ThreeNodeBeam()
        {
            FiniteElementModel model = new FiniteElementModel(ModelType.Full3D);
            FiniteElementNode node1 = model.NodeFactory.Create(0,0,0);
            model.ConstrainNode(node1, DegreeOfFreedom.X);
            model.ConstrainNode(node1, DegreeOfFreedom.Y);
            model.ConstrainNode(node1, DegreeOfFreedom.Z);
            model.ConstrainNode(node1, DegreeOfFreedom.XX);

            FiniteElementNode node2 = model.NodeFactory.Create(1,0, 0);
            model.ConstrainNode(node2, DegreeOfFreedom.Y);

            FiniteElementNode node3 = model.NodeFactory.Create(2,0, 0);
            model.ConstrainNode(node3, DegreeOfFreedom.Y);
            model.ConstrainNode(node3, DegreeOfFreedom.Z);

            IMaterial material = new GenericElasticMaterial(0, 10000000000, 0.3, 1000000000);
            ICrossSection section = new SolidRectangle(1, 1);

            model.ElementFactory.CreateLinear3DBeam(node1, node2, material, section);
            model.ElementFactory.CreateLinear3DBeam(node2,node3,material,section);

            ForceVector force = model.ForceFactory.Create(0, 0, -10000, 0, 0, 0);
            model.ApplyForceToNode(force, node2);

            IFiniteElementSolver solver = new MatrixInversionLinearSolver(model);

            Stiffness.GlobalModelStiffnessMatrixBuilder gmsmb = new SharpFE.Stiffness.GlobalModelStiffnessMatrixBuilder(model);
            Console.WriteLine(gmsmb.BuildKnownForcesUnknownDisplacementStiffnessMatrix());

            FiniteElementResults results = solver.Solve();

            DisplacementVector node1Displacement = results.GetDisplacement(node1);
            Console.WriteLine("node1Displacement : \n" + node1Displacement);

            DisplacementVector node2Displacement = results.GetDisplacement(node2);
            Console.WriteLine("node2Displacement : \n" + node2Displacement);

            DisplacementVector node3Displacement = results.GetDisplacement(node3);
            Console.WriteLine("node3Displacement : \n" + node3Displacement);

            ReactionVector node1Reaction = results.GetReaction(node1);
            Console.WriteLine("node1Reaction : \n" + node1Reaction);

            ReactionVector node3Reaction = results.GetReaction(node3);
            Console.WriteLine("node5Reaction : \n" + node3Reaction);

            Assert.AreEqual(0, node2Displacement.XX, 0.00001);
            Assert.AreEqual(0, node2Displacement.Y, 0.00001);
            Assert.AreEqual(0, node2Displacement.ZZ, 0.0001);
            Assert.AreEqual(-0.000002, node2Displacement.Z, 0.0000001);

            Assert.AreEqual(5000, node1Reaction.Z, 0.00001);
            Assert.AreEqual(5000, node3Reaction.Z, 0.00001);
            Assert.AreEqual(0, node2Displacement.YY, 0.0001);
            Assert.AreEqual( 0.000003, node1Displacement.YY, 0.0000001);
            Assert.AreEqual(-0.000003, node3Displacement.YY, 0.0000001);
        }
Пример #3
0
        public void Calculate3DTrussOf4BarsAnd15Dof()
        {
            FiniteElementModel model = new FiniteElementModel(ModelType.Truss3D);

            FiniteElementNode node1 = model.NodeFactory.Create(4, 4, 3);

            FiniteElementNode node2 = model.NodeFactory.Create(0, 4, 0);
            model.ConstrainNode(node2, DegreeOfFreedom.X);
            model.ConstrainNode(node2, DegreeOfFreedom.Y);
            model.ConstrainNode(node2, DegreeOfFreedom.Z);

            FiniteElementNode node3 = model.NodeFactory.Create(0, 4, 6);
            model.ConstrainNode(node3, DegreeOfFreedom.X);
            model.ConstrainNode(node3, DegreeOfFreedom.Y);
            model.ConstrainNode(node3, DegreeOfFreedom.Z);

            FiniteElementNode node4 = model.NodeFactory.Create(4, 0, 3);
            model.ConstrainNode(node4, DegreeOfFreedom.X);
            model.ConstrainNode(node4, DegreeOfFreedom.Y);
            model.ConstrainNode(node4, DegreeOfFreedom.Z);

            FiniteElementNode node5 = model.NodeFactory.Create(8, -1, 1);
            model.ConstrainNode(node5, DegreeOfFreedom.X);
            model.ConstrainNode(node5, DegreeOfFreedom.Y);
            model.ConstrainNode(node5, DegreeOfFreedom.Z);

            IMaterial material = new GenericElasticMaterial(0, 210000000000, 0, 0);
            ICrossSection section = new SolidRectangle(0.01, 0.01);

            model.ElementFactory.CreateLinearTruss(node1, node2, material, section);
            model.ElementFactory.CreateLinearTruss(node1, node3, material, section);
            model.ElementFactory.CreateLinearTruss(node1, node4, material, section);
            model.ElementFactory.CreateLinearTruss(node1, node5, material, section);

            ForceVector externalForce = model.ForceFactory.Create(0, -10000, 0, 0, 0, 0);
            model.ApplyForceToNode(externalForce, node1);

            IFiniteElementSolver solver = new MatrixInversionLinearSolver(model);
            FiniteElementResults results = solver.Solve();

            ReactionVector reactionAtNode2 = results.GetReaction(node2);
            Assert.AreEqual(270.9, reactionAtNode2.X, 1);
            Assert.AreEqual(0, reactionAtNode2.Y, 1);
            Assert.AreEqual(203.2, reactionAtNode2.Z, 1);

            ReactionVector reactionAtNode3 = results.GetReaction(node3);
            Assert.AreEqual(1354.6, reactionAtNode3.X, 1);
            Assert.AreEqual(0, reactionAtNode3.Y, 1);
            Assert.AreEqual(-1016, reactionAtNode3.Z, 1);

            ReactionVector reactionAtNode4 = results.GetReaction(node4);
            Assert.AreEqual(0, reactionAtNode4.X, 1);
            Assert.AreEqual(7968.1, reactionAtNode4.Y, 1);
            Assert.AreEqual(0, reactionAtNode4.Z, 1);

            ReactionVector reactionAtNode5 = results.GetReaction(node5);
            Assert.AreEqual(-1625.5, reactionAtNode5.X, 1);
            Assert.AreEqual(2031.9, reactionAtNode5.Y, 1);
            Assert.AreEqual(812.8, reactionAtNode5.Z, 1);

            DisplacementVector displacementAtNode1 = results.GetDisplacement(node1);
            Assert.AreEqual(-0.0003024, displacementAtNode1.X, 0.0001); //NOTE the results given in the book are 1E03
            Assert.AreEqual(-0.0015177, displacementAtNode1.Y, 0.0001);
            Assert.AreEqual(0.0002688, displacementAtNode1.Z, 0.0001);
        }
Пример #4
0
        public void Calculate3DTrussOf3BarsAnd12Dof()
        {
            FiniteElementModel model = new FiniteElementModel(ModelType.Truss3D);

            FiniteElementNode node1 = model.NodeFactory.Create(72,0,0);
            model.ConstrainNode(node1, DegreeOfFreedom.Y);

            FiniteElementNode node2 = model.NodeFactory.Create(0, 36, 0);
            model.ConstrainNode(node2, DegreeOfFreedom.X);
            model.ConstrainNode(node2, DegreeOfFreedom.Y);
            model.ConstrainNode(node2, DegreeOfFreedom.Z);

            FiniteElementNode node3 = model.NodeFactory.Create(0, 36, 72);
            model.ConstrainNode(node3, DegreeOfFreedom.X);
            model.ConstrainNode(node3, DegreeOfFreedom.Y);
            model.ConstrainNode(node3, DegreeOfFreedom.Z);

            FiniteElementNode node4 = model.NodeFactory.Create(0, 0, -48);
            model.ConstrainNode(node4, DegreeOfFreedom.X);
            model.ConstrainNode(node4, DegreeOfFreedom.Y);
            model.ConstrainNode(node4, DegreeOfFreedom.Z);

            IMaterial material = new GenericElasticMaterial(0, 1200000, 0, 0);
            ICrossSection section1 = new SolidRectangle(1, 0.302);
            ICrossSection section2 = new SolidRectangle(1, 0.729); ///NOTE example also refers to this as A1.  Assume errata in book
            ICrossSection section3 = new SolidRectangle(1, 0.187); ///NOTE example also refers to this as A1.  Assume errata in book

            model.ElementFactory.CreateLinearTruss(node1, node2, material, section1);
            model.ElementFactory.CreateLinearTruss(node1, node3, material, section2);
            model.ElementFactory.CreateLinearTruss(node1, node4, material, section3);

            ForceVector externalForce = model.ForceFactory.Create(0, 0, -1000, 0, 0, 0);
            model.ApplyForceToNode(externalForce, node1);

            IFiniteElementSolver solver = new MatrixInversionLinearSolver(model);
            FiniteElementResults results = solver.Solve();

            ReactionVector reactionAtNode1 = results.GetReaction(node1);
            Assert.AreEqual(0, reactionAtNode1.X, 1);
            Assert.AreEqual(-223.1632, reactionAtNode1.Y, 1);
            Assert.AreEqual(0, reactionAtNode1.Z, 1);

            ReactionVector reactionAtNode2 = results.GetReaction(node2);
            Assert.AreEqual(256.1226, reactionAtNode2.X, 1);
            Assert.AreEqual(-128.0613, reactionAtNode2.Y, 1);
            Assert.AreEqual(0, reactionAtNode2.Z, 1);

            ReactionVector reactionAtNode3 = results.GetReaction(node3);
            Assert.AreEqual(-702.4491, reactionAtNode3.X, 1);
            Assert.AreEqual(351.2245, reactionAtNode3.Y, 1);
            Assert.AreEqual(702.4491, reactionAtNode3.Z, 1);

            ReactionVector reactionAtNode4 = results.GetReaction(node4);
            Assert.AreEqual(446.3264, reactionAtNode4.X, 1);
            Assert.AreEqual(0, reactionAtNode4.Y, 1);
            Assert.AreEqual(297.5509, reactionAtNode4.Z, 1);

            DisplacementVector displacementAtNode1 = results.GetDisplacement(node1);
            Assert.AreEqual(-0.0711, displacementAtNode1.X, 0.0001);
            Assert.AreEqual(0, displacementAtNode1.Y, 0.0001);
            Assert.AreEqual(-0.2662, displacementAtNode1.Z, 0.0001);
        }
 private static void SetAlphaAndColorValues(SolidRectangle solidRectangle, RecursiveVariableFinder rvf)
 {
     solidRectangle.Color = ColorFromRvf(rvf);
 }
Пример #6
0
 public void Remove(SolidRectangle solidRectangle)
 {
     mSolidRectangles.Remove(solidRectangle);
     Renderer.RemoveRenderable(solidRectangle);
 }