public void AreEqualIfPropertiesAreEqual()
        {
            NodeFactory          factory = new NodeFactory(ModelType.Truss1D);
            FiniteElementNode    node1   = factory.Create(0);
            NodalDegreeOfFreedom SUT     = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.X);
            NodalDegreeOfFreedom equalNodalDegreeOfFreedom = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.X);

            Assert.IsTrue(SUT.Equals(equalNodalDegreeOfFreedom));
            Assert.IsTrue(SUT == equalNodalDegreeOfFreedom);
            Assert.IsFalse(SUT != equalNodalDegreeOfFreedom);
            Assert.AreEqual(SUT.GetHashCode(), equalNodalDegreeOfFreedom.GetHashCode());

            NodalDegreeOfFreedom notEqualDegreeOfFreedom = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.Y);

            Assert.IsFalse(SUT.Equals(notEqualDegreeOfFreedom));
            Assert.IsFalse(SUT == notEqualDegreeOfFreedom);
            Assert.IsTrue(SUT != notEqualDegreeOfFreedom);
            Assert.AreNotEqual(SUT.GetHashCode(), notEqualDegreeOfFreedom.GetHashCode());

            FiniteElementNode    node2        = factory.Create(1);
            NodalDegreeOfFreedom notEqualNode = new NodalDegreeOfFreedom(node2, DegreeOfFreedom.X);

            Assert.IsFalse(SUT.Equals(notEqualNode));
            Assert.IsFalse(SUT == notEqualNode);
            Assert.IsTrue(SUT != notEqualNode);
            Assert.AreNotEqual(SUT.GetHashCode(), notEqualNode.GetHashCode());
        }
        public void AreEqualIfPropertiesAreEqual()
        {
            NodeFactory factory = new NodeFactory(ModelType.Truss1D);
            FiniteElementNode node1 = factory.Create(0);
            NodalDegreeOfFreedom SUT = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.X);
            NodalDegreeOfFreedom equalNodalDegreeOfFreedom = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.X);

            Assert.IsTrue(SUT.Equals(equalNodalDegreeOfFreedom));
            Assert.IsTrue(SUT == equalNodalDegreeOfFreedom);
            Assert.IsFalse(SUT != equalNodalDegreeOfFreedom);
            Assert.AreEqual(SUT.GetHashCode(), equalNodalDegreeOfFreedom.GetHashCode());

            NodalDegreeOfFreedom notEqualDegreeOfFreedom = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.Y);

            Assert.IsFalse(SUT.Equals(notEqualDegreeOfFreedom));
            Assert.IsFalse(SUT == notEqualDegreeOfFreedom);
            Assert.IsTrue(SUT != notEqualDegreeOfFreedom);
            Assert.AreNotEqual(SUT.GetHashCode(), notEqualDegreeOfFreedom.GetHashCode());

            FiniteElementNode node2 = factory.Create(1);
            NodalDegreeOfFreedom notEqualNode = new NodalDegreeOfFreedom(node2, DegreeOfFreedom.X);

            Assert.IsFalse(SUT.Equals(notEqualNode));
            Assert.IsFalse(SUT == notEqualNode);
            Assert.IsTrue(SUT != notEqualNode);
            Assert.AreNotEqual(SUT.GetHashCode(), notEqualNode.GetHashCode());
        }
Esempio n. 3
0
        public void CanAddMultipleDisplacements()
        {
            FiniteElementNode node1 = model.NodeFactory.Create(1);

            NodalDegreeOfFreedom ndof1 = new NodalDegreeOfFreedom(node, DegreeOfFreedom.X);
            NodalDegreeOfFreedom ndof2 = new NodalDegreeOfFreedom(node, DegreeOfFreedom.Y);
            NodalDegreeOfFreedom ndof3 = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.Y);

            IList <NodalDegreeOfFreedom> identifiers = new List <NodalDegreeOfFreedom>(3);

            identifiers.Add(ndof1);
            identifiers.Add(ndof2);
            identifiers.Add(ndof3);

            KeyedVector <NodalDegreeOfFreedom> displacements = new KeyedVector <NodalDegreeOfFreedom>(identifiers);

            displacements[ndof1] = 10;
            displacements[ndof2] = 12;
            displacements[ndof3] = 13;

            SUT.AddMultipleDisplacements(displacements);

            Assert.AreEqual(10, SUT.GetDisplacement(node).X);
            Assert.AreEqual(12, SUT.GetDisplacement(node).Y);
            Assert.AreEqual(13, SUT.GetDisplacement(node1).Y);
        }
Esempio n. 4
0
        public void GetKnownDisplacementVector()
        {
            KeyedVector<NodalDegreeOfFreedom> result = SUT.KnownDisplacementVector();
            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Count);

            // can be accessed by a key
            NodalDegreeOfFreedom ndof1 = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.X);
            NodalDegreeOfFreedom ndof2 = new NodalDegreeOfFreedom(node3, DegreeOfFreedom.X);
            Assert.AreEqual(0, result[ndof1]);
            Assert.AreEqual(0, result[ndof2]);
        }
Esempio n. 5
0
        public void GetKnownForceVector()
        {
            KeyedVector <NodalDegreeOfFreedom> result = SUT.KnownForceVector();

            Assert.IsNotNull(result);
            Assert.AreEqual(1, result.Count);

            // can be accessed by a key
            NodalDegreeOfFreedom ndof1 = new NodalDegreeOfFreedom(node2, DegreeOfFreedom.X);

            Assert.AreEqual(20, result[ndof1]);
        }
Esempio n. 6
0
        public void GetKnownDisplacementVector()
        {
            KeyedVector <NodalDegreeOfFreedom> result = SUT.KnownDisplacementVector();

            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Count);

            // can be accessed by a key
            NodalDegreeOfFreedom ndof1 = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.X);
            NodalDegreeOfFreedom ndof2 = new NodalDegreeOfFreedom(node3, DegreeOfFreedom.X);

            Assert.AreEqual(0, result[ndof1]);
            Assert.AreEqual(0, result[ndof2]);
        }
Esempio n. 7
0
        public void CanGetCombinedForcesOnMultipleNodalDegreeOfFreedom()
        {
            NodalDegreeOfFreedom nodeDof = new NodalDegreeOfFreedom(node, DegreeOfFreedom.X);
            IList<NodalDegreeOfFreedom> nodeDofList  = new List<NodalDegreeOfFreedom>(1)
            {
                nodeDof
            };

            KeyedVector<NodalDegreeOfFreedom> result = SUT.GetCombinedForcesFor(nodeDofList);
            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(0, result[nodeDof]);

            SUT.ApplyForceToNode(exampleForce2, node);
            result = SUT.GetCombinedForcesFor(nodeDofList);
            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(2, result[nodeDof]);
        }
        public void CanGetCombinedForcesOnMultipleNodalDegreeOfFreedom()
        {
            NodalDegreeOfFreedom         nodeDof     = new NodalDegreeOfFreedom(node, DegreeOfFreedom.X);
            IList <NodalDegreeOfFreedom> nodeDofList = new List <NodalDegreeOfFreedom>(1)
            {
                nodeDof
            };

            KeyedVector <NodalDegreeOfFreedom> result = SUT.GetCombinedForcesFor(nodeDofList);

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(0, result[nodeDof]);

            SUT.ApplyForceToNode(exampleForce2, node);
            result = SUT.GetCombinedForcesFor(nodeDofList);
            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(2, result[nodeDof]);
        }
Esempio n. 9
0
        public void CanAddMultipleDisplacements()
        {
            FiniteElementNode node1 = model.NodeFactory.Create(1);

            NodalDegreeOfFreedom ndof1 = new NodalDegreeOfFreedom(node, DegreeOfFreedom.X);
            NodalDegreeOfFreedom ndof2 = new NodalDegreeOfFreedom(node, DegreeOfFreedom.Y);
            NodalDegreeOfFreedom ndof3 = new NodalDegreeOfFreedom(node1, DegreeOfFreedom.Y);

            IList<NodalDegreeOfFreedom> identifiers = new List<NodalDegreeOfFreedom>(3);
            identifiers.Add(ndof1);
            identifiers.Add(ndof2);
            identifiers.Add(ndof3);

            KeyedVector<NodalDegreeOfFreedom> displacements = new KeyedVector<NodalDegreeOfFreedom>(identifiers);
            displacements[ndof1] = 10;
            displacements[ndof2] = 12;
            displacements[ndof3] = 13;

            SUT.AddMultipleDisplacements(displacements);

            Assert.AreEqual(10, SUT.GetDisplacement(node).X);
            Assert.AreEqual(12, SUT.GetDisplacement(node).Y);
            Assert.AreEqual(13, SUT.GetDisplacement(node1).Y);
        }
        /// <summary>
        /// Sums all the stiffnesses across all elements which are connected to the given nodes
        /// </summary>
        /// <param name="elementsDirectlyConnectingRowAndColumnNodes">The list of all directly connected elements between both the row and column node</param>
        /// <param name="row">The node and degree of freedom which define the row</param>
        /// <param name="column">The node and degree of freedom which define the column</param>
        /// <returns>A double representing the stiffness for this element</returns>
        private double SumStiffnessesForAllElementsAt(IList <IFiniteElement> elementsDirectlyConnectingRowAndColumnNodes, NodalDegreeOfFreedom row, NodalDegreeOfFreedom column)
        {
            double totalStiffness = 0.0;

            Tuple <NodalDegreeOfFreedom, NodalDegreeOfFreedom> cacheKey = new Tuple <NodalDegreeOfFreedom, NodalDegreeOfFreedom>(row, column);

            if (this.stiffnessCache.TryGetValue(cacheKey, out totalStiffness))
            {
                return(totalStiffness);
            }

            foreach (IFiniteElement e in elementsDirectlyConnectingRowAndColumnNodes)
            {
                IElementStiffnessCalculator elementStiffnessMatrixBuilder = this.GetElementStiffnessProvider(e);
                totalStiffness += elementStiffnessMatrixBuilder.GetStiffnessInGlobalCoordinatesAt(row.Node, row.DegreeOfFreedom, column.Node, column.DegreeOfFreedom);
            }

            this.stiffnessCache[cacheKey] = totalStiffness;

            return(totalStiffness);
        }
Esempio n. 11
0
        public void GetKnownForceVector()
        {
            KeyedVector<NodalDegreeOfFreedom> result = SUT.KnownForceVector();
            Assert.IsNotNull(result);
            Assert.AreEqual(1, result.Count);

            // can be accessed by a key
            NodalDegreeOfFreedom ndof1 = new NodalDegreeOfFreedom(node2, DegreeOfFreedom.X);
            Assert.AreEqual(20, result[ndof1]);
        }
        /// <summary>
        /// Sums all the stiffnesses across all elements which are connected to the given nodes
        /// </summary>
        /// <param name="elementsDirectlyConnectingRowAndColumnNodes">The list of all directly connected elements between both the row and column node</param>
        /// <param name="row">The node and degree of freedom which define the row</param>
        /// <param name="column">The node and degree of freedom which define the column</param>
        /// <returns>A double representing the stiffness for this element</returns>
        private double SumStiffnessesForAllElementsAt(IList<IFiniteElement> elementsDirectlyConnectingRowAndColumnNodes, NodalDegreeOfFreedom row, NodalDegreeOfFreedom column)
        {
            double totalStiffness = 0.0;

            Tuple<NodalDegreeOfFreedom, NodalDegreeOfFreedom> cacheKey = new Tuple<NodalDegreeOfFreedom, NodalDegreeOfFreedom>(row, column);
            if (this.stiffnessCache.TryGetValue(cacheKey, out totalStiffness))
            {
                return totalStiffness;
            }

            foreach (IFiniteElement e in elementsDirectlyConnectingRowAndColumnNodes)
            {
                IElementStiffnessCalculator elementStiffnessMatrixBuilder = this.GetElementStiffnessProvider(e);
                totalStiffness += elementStiffnessMatrixBuilder.GetStiffnessInGlobalCoordinatesAt(row.Node, row.DegreeOfFreedom, column.Node, column.DegreeOfFreedom);
            }

            this.stiffnessCache[cacheKey] = totalStiffness;

            return totalStiffness;
        }
Esempio n. 13
0
        /// <summary>
        /// Adds a displacement result to this set of results
        /// </summary>
        /// <param name="nodalDegreeOfFreedom">The node and global degree of freedom identifier of the displacement component.</param>
        /// <param name="displacementComponent">The value of the displacement in this global direction</param>
        public void AddDisplacement(NodalDegreeOfFreedom nodalDegreeOfFreedom, double displacementComponent)
        {
            if (!this.displacements.ContainsKey(nodalDegreeOfFreedom.Node))
            {
                this.displacements.Add(nodalDegreeOfFreedom.Node, new DisplacementVector(nodalDegreeOfFreedom.Node));
            }

            this.displacements[nodalDegreeOfFreedom.Node].SetValue(nodalDegreeOfFreedom.DegreeOfFreedom, displacementComponent);
        }
Esempio n. 14
0
        /// <summary>
        /// Adds a reaction result to this set of results.
        /// </summary>
        /// <param name="nodalDegreeOfFreedom">The node and global degree of freedom identifier for this reaction component.</param>
        /// <param name="forceComponent">The value of the reaction in this global direction</param>
        public void AddReaction(NodalDegreeOfFreedom nodalDegreeOfFreedom, double forceComponent)
        {
            if (!this.reactions.ContainsKey(nodalDegreeOfFreedom.Node))
            {
                this.reactions.Add(nodalDegreeOfFreedom.Node, new ReactionVector(nodalDegreeOfFreedom.Node));
            }

            this.reactions[nodalDegreeOfFreedom.Node].SetValue(nodalDegreeOfFreedom.DegreeOfFreedom, forceComponent);
        }