/// <inheritdoc/> public Matrix CalcLocalStiffnessMatrix(Element targetElement) { //edit var b = GetBMatrixAt(targetElement, 0, 0, 0); var d = GetDMatrixAt(targetElement, 0, 0, 0); var k = b.Transpose() * d * b; var v = GetJMatrixAt(targetElement, 0, 0, 0).Determinant() / 6.0; k.Scale(v); return(k); return(ElementHelperExtensions.CalcLocalKMatrix_Tetrahedron(this, targetElement)); }
/// <inheritdoc/> public Matrix GetNMatrixAt(Element targetElement, params double[] isoCoords) { var xi = isoCoords[0]; if (xi < -1 || xi > 1) { throw new ArgumentOutOfRangeException(nameof(isoCoords)); } var bar = targetElement as BarElement; if (bar == null) { throw new Exception(); } var L = (bar.EndNode.Location - bar.StartNode.Location).Length; var n1 = 1 / 4.0 * (1 - xi) * (1 - xi) * (2 + xi); //[slope(-1) = slope(1) = val(1) = 0, val(-1) = 1] var m1 = L / 8.0 * (1 - xi) * (1 - xi) * (xi + 1); //[slope(-1) = 1, slope(1) = val(1) = val(-1) = 0] var n2 = 1 / 4.0 * (1 + xi) * (1 + xi) * (2 - xi); //[val(1) = 1, slope(-1) = slope(1) = val(-1) = 0] var m2 = L / 8.0 * (1 + xi) * (1 + xi) * (xi - 1); //[slope(1) = 1, slope(-1) = val(1) = val(-1) = 0] var buf = new Matrix(1, 4); double[] arr; if (_direction == BeamDirection.Z) { arr = new double[] { n1, -m1, n2, -m2 } } ; else { arr = new double[] { n1, m1, n2, m2 } }; buf.FillRow(0, arr); ElementHelperExtensions.RemoveReleasedMembers_bar(this, targetElement, buf); return(buf); }
/// <inheritdoc/> public Matrix CalcLocalStiffnessMatrix(Element targetElement) { /**/ var tetra = targetElement as TetrahedronElement; var X = (Matrix)targetElement.AllocateFromPool(4, 4); { var ps = tetra.Nodes.Select(i => i.Location).ToArray(); {//9.11 X.SetRow(0, new double[] { 1, 1, 1, 1 }); X.SetRow(1, new double[] { ps[0].X, ps[1].X, ps[2].X, ps[3].X }); X.SetRow(2, new double[] { ps[0].Y, ps[1].Y, ps[2].Y, ps[3].Y }); X.SetRow(3, new double[] { ps[0].Z, ps[1].Z, ps[2].Z, ps[3].Z }); } } /**/ //edit var b = GetBMatrixAt(targetElement, 0, 0, 0); var d = GetDMatrixAt(targetElement, 0, 0, 0); var k = (b.Transpose() * d) * b; var v = X.Determinant() / 6.0; if (v < 0) { throw new Exception(); } k.Scale(v); return(k); return(ElementHelperExtensions.CalcLocalKMatrix_Tetrahedron(this, targetElement)); }
/// <inheritdoc/> public Matrix CalcLocalCMatrix(Element targetElement) { return(ElementHelperExtensions.CalcLocalCMatrix_Bar(this, targetElement)); }
/// <inheritdoc/> public Matrix CalcLocalMMatrix(Element targetElement) { var buf = ElementHelperExtensions.CalcLocalMMatrix_Bar(this, targetElement); return(buf); }
public Matrix CalcLocalStiffnessMatrix(Element targetElement) { var buf = ElementHelperExtensions.CalcLocalKMatrix_Triangle(this, targetElement); return(buf); }
/// <inheritdoc/> public Matrix CalcLocalKMatrix(Element targetElement) { return(ElementHelperExtensions.CalcLocalKMatrix_Triangle(this, targetElement)); }