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 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); }
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]); }
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]); }
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]); }
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]); }
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); }
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; }
/// <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); }
/// <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); }