private static string Initialize(IFrameSection frameSection, string characters) { var result = new StringBuilder(); result.AppendLine($"{characters}Section"); result.AppendLine($"{characters}ID: {frameSection.Number}"); result.AppendLine($"{characters}Name: {frameSection.Name}"); result.AppendLine($"{characters}Type: {frameSection.Type}"); result.AppendLine($"{characters}Area: {frameSection.Area}"); result.AppendLine($"{characters}Local moment of inertia Y: {frameSection.MomentOfInertiaY}"); result.AppendLine($"{characters}Local moment of inertia Z: {frameSection.MomentOfInertiaZ}"); result.AppendLine($"{characters}Torsional constant X: {frameSection.TorsionalConstantX}"); result.AppendLine($"{characters}Mju: {frameSection.Mju}"); result.AppendLine($"{characters}----"); return(result.ToString()); }
public override string Execute(IList <string> parameters) { int sectionId; try { sectionId = int.Parse(parameters[0]); } catch { throw new ArgumentException("Failed to parse ShowFrameSection command parameters."); } IFrameSection frameSection = base.dbctx.FrameSections[sectionId]; string result = SectionService.AsString(frameSection); return(result); }
public override string Execute(IList <string> parameters) { int sectionId; int elementId; try { sectionId = int.Parse(parameters[0]); elementId = int.Parse(parameters[1]); } catch { throw new ArgumentException("Failed to parse AssignFrameSection command parameters."); } IFrameElement frameElement = base.dbctx.FrameElements[elementId]; IFrameSection frameSection = base.dbctx.FrameSections[sectionId]; frameElement.SectionProp = frameSection; return($"Section with ID {frameSection.Number} has been assigned to element with ID {frameElement.Number}."); }
public static string AsString(IFrameSection frameSection) { return(Initialize(frameSection, string.Empty)); }
public static string AsString(IFrameSection frameSection, string characters) { return(Initialize(frameSection, characters)); }
public static Matrix <double> GenerateLocalMatrix(IFrameElement element) { Guard.WhenArgument(element, "element").IsNull().Throw(); IMaterial materialProp = element.MaterialProp; IFrameSection sectionProp = element.SectionProp; Guard.WhenArgument(materialProp, "materialProp").IsNull().Throw(); Guard.WhenArgument(sectionProp, "sectionProp").IsNull().Throw(); double eModule = materialProp.EModule; double gModule = materialProp.GModule; double area = sectionProp.Area; double momentY = sectionProp.MomentOfInertiaY; double momentZ = sectionProp.MomentOfInertiaZ; double torsionX = sectionProp.TorsionalConstantX; double mju = sectionProp.Mju; double elementLength = element.ElementLength; double Alfa = element.Alfa; double cosineAlfa = Math.Cos(Alfa); double sineAlfa = Math.Sin(Alfa); double index11, index17, index22, index26, index28, index212, index33, index35, index39, index311, index44, index410, index55, index59, index511, index66, index68, index612, index77, index88, index812, index99, index911, index1010, index1111, index1212; //Check for invalid releases if ((element.ShearYReleaseNode1 == true && element.ShearYReleaseNode2 == true) || (element.ShearZReleaseNode1 == true && element.ShearZReleaseNode2 == true)) { throw new ArgumentException("Invalid releases - you can not have shear releases at both ends in the same plane, the element is not stable."); } if ((element.MomentAroundZReleaseNode1 == true && element.MomentAroundZReleaseNode2 == true && (element.ShearYReleaseNode1 == true || element.ShearYReleaseNode2 == true)) || (element.MomentAroundYReleaseNode1 == true && element.MomentAroundYReleaseNode2 == true && (element.ShearZReleaseNode1 == true || element.ShearZReleaseNode2 == true))) { throw new ArgumentException("Invalid releases - you can not have moment releases at both ends and a shear release at either end (in the same plane), the element is not stable."); } if (element.NormalReleaseNode1 == true && element.NormalReleaseNode2 == true) { throw new ArgumentException("Invalid releases - you can not have normal force releases at both ends, the element is not stable."); } if (element.TorsionReleaseNode1 == true && element.TorsionReleaseNode2 == true) { throw new ArgumentException("Invalid releases - you can not have torsion releases at both ends, the element is not stable."); } //Releases XY plane if (element.MomentAroundZReleaseNode1 == false && element.MomentAroundZReleaseNode2 == false && element.ShearYReleaseNode1 == false && element.ShearYReleaseNode2 == false) { index22 = (12.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 12.0 * eModule * momentZ); index26 = (6.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentZ); index28 = (12.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 12.0 * eModule * momentZ); index212 = (6.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentZ); index66 = ((4.0 * elementLength * eModule * momentZ * gModule * area) / (elementLength * elementLength * gModule * area + mju * 12.0 * eModule * momentZ)) + ((12.0 * mju * eModule * eModule * momentZ * momentZ) / (elementLength * elementLength * elementLength * gModule * area + 12.0 * elementLength * mju * eModule * momentZ)); index68 = (6.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentZ); index612 = ((2.0 * elementLength * eModule * momentZ * gModule * area) / (elementLength * elementLength * gModule * area + 12.0 * mju * eModule * momentZ)) - ((12.0 * mju * eModule * eModule * momentZ * momentZ) / (elementLength * elementLength * elementLength * gModule * area + 12.0 * elementLength * mju * eModule * momentZ)); index88 = (12.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 12.0 * eModule * momentZ); index812 = (6.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentZ); index1212 = ((4.0 * elementLength * eModule * momentZ * gModule * area) / (elementLength * elementLength * gModule * area + mju * 12.0 * eModule * momentZ)) + ((12.0 * mju * eModule * eModule * momentZ * momentZ) / (elementLength * elementLength * elementLength * gModule * area + 12.0 * elementLength * mju * eModule * momentZ)); } else if (element.MomentAroundZReleaseNode1 == true && element.MomentAroundZReleaseNode2 == true && element.ShearYReleaseNode1 == false && element.ShearYReleaseNode2 == false) { index22 = double.Epsilon; index26 = 0.0; index28 = 0.0; index212 = 0.0; index66 = double.Epsilon; index68 = 0.0; index612 = 0.0; index88 = double.Epsilon; index812 = 0.0; index1212 = double.Epsilon; } else if (element.MomentAroundZReleaseNode1 == true && element.MomentAroundZReleaseNode2 == false && element.ShearYReleaseNode1 == false && element.ShearYReleaseNode2 == false) { index22 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentZ); index26 = 0.0; index28 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentZ); index212 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentZ); index66 = double.Epsilon; index68 = 0.0; index612 = 0.0; index88 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentZ); index812 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentZ); index1212 = (3.0 * eModule * momentZ * gModule * area * elementLength) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentZ); } else if (element.MomentAroundZReleaseNode1 == false && element.MomentAroundZReleaseNode2 == true && element.ShearYReleaseNode1 == false && element.ShearYReleaseNode2 == false) { index22 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentZ); index26 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentZ); index28 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentZ); index212 = 0.0; index66 = (3.0 * eModule * momentZ * gModule * area * elementLength) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentZ); index68 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentZ); index612 = 0.0; index88 = (3.0 * eModule * momentZ * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentZ); index812 = 0.0; index1212 = double.Epsilon; } else if (element.MomentAroundZReleaseNode1 == true && element.MomentAroundZReleaseNode2 == false && element.ShearYReleaseNode1 == true && element.ShearYReleaseNode2 == false) { index22 = double.Epsilon; index26 = 0.0; index28 = 0.0; index212 = 0.0; index66 = double.Epsilon; index68 = 0.0; index612 = 0.0; index88 = double.Epsilon; index812 = 0.0; index1212 = double.Epsilon; } else if (element.MomentAroundZReleaseNode1 == false && element.MomentAroundZReleaseNode2 == true && element.ShearYReleaseNode1 == false && element.ShearYReleaseNode2 == true) { index22 = double.Epsilon; index26 = 0.0; index28 = 0.0; index212 = 0.0; index66 = double.Epsilon; index68 = 0.0; index612 = 0.0; index88 = double.Epsilon; index812 = 0.0; index1212 = double.Epsilon; } else if (element.MomentAroundZReleaseNode1 == true && element.MomentAroundZReleaseNode2 == false && element.ShearYReleaseNode1 == false && element.ShearYReleaseNode2 == true) { index22 = double.Epsilon; index26 = 0.0; index28 = 0.0; index212 = 0.0; index66 = double.Epsilon; index68 = 0.0; index612 = 0.0; index88 = double.Epsilon; index812 = 0.0; index1212 = double.Epsilon; } else if (element.MomentAroundZReleaseNode1 == false && element.MomentAroundZReleaseNode2 == true && element.ShearYReleaseNode1 == true && element.ShearYReleaseNode2 == false) { index22 = double.Epsilon; index26 = 0.0; index28 = 0.0; index212 = 0.0; index66 = double.Epsilon; index68 = 0.0; index612 = 0.0; index88 = double.Epsilon; index812 = 0.0; index1212 = double.Epsilon; } else if (element.MomentAroundZReleaseNode1 == false && element.MomentAroundZReleaseNode2 == false && element.ShearYReleaseNode1 == true && element.ShearYReleaseNode2 == false) { index22 = double.Epsilon; index26 = 0.0; index28 = 0.0; index212 = 0.0; index66 = (eModule * momentZ) / elementLength; index68 = 0.0; index612 = (-1) * (eModule * momentZ) / elementLength; index88 = double.Epsilon; index812 = 0.0; index1212 = (eModule * momentZ) / elementLength; } else if (element.MomentAroundZReleaseNode1 == false && element.MomentAroundZReleaseNode2 == false && element.ShearYReleaseNode1 == false && element.ShearYReleaseNode2 == true) { index22 = double.Epsilon; index26 = 0.0; index28 = 0.0; index212 = 0.0; index66 = (eModule * momentZ) / elementLength; index68 = 0.0; index612 = (-1) * (eModule * momentZ) / elementLength; index88 = double.Epsilon; index812 = 0.0; index1212 = (eModule * momentZ) / elementLength; } else { index22 = double.NaN; index26 = double.NaN; index28 = double.NaN; index212 = double.NaN; index66 = double.NaN; index68 = double.NaN; index612 = double.NaN; index88 = double.NaN; index812 = double.NaN; index1212 = double.NaN; } //Releases XZ plane if (element.MomentAroundYReleaseNode1 == false && element.MomentAroundYReleaseNode2 == false && element.ShearZReleaseNode1 == false && element.ShearZReleaseNode2 == false) { index33 = (12.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 12.0 * eModule * momentY); index35 = (6.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentY); index39 = (12.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 12.0 * eModule * momentY); index311 = (6.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentY); index55 = ((4.0 * elementLength * eModule * momentY * gModule * area) / (elementLength * elementLength * gModule * area + mju * 12.0 * eModule * momentY)) + ((12.0 * mju * eModule * eModule * momentY * momentY) / (elementLength * elementLength * elementLength * gModule * area + 12.0 * elementLength * mju * eModule * momentY)); index59 = (6.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentY); index511 = ((2.0 * elementLength * eModule * momentY * gModule * area) / (elementLength * elementLength * gModule * area + 12.0 * mju * eModule * momentY)) - ((12.0 * mju * eModule * eModule * momentY * momentY) / (elementLength * elementLength * elementLength * gModule * area + 12.0 * elementLength * mju * eModule * momentY)); index99 = (12.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 12.0 * eModule * momentY); index911 = (6.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 12.0 * eModule * momentY); index1111 = ((4.0 * elementLength * eModule * momentY * gModule * area) / (elementLength * elementLength * gModule * area + mju * 12.0 * eModule * momentY)) + ((12.0 * mju * eModule * eModule * momentY * momentY) / (elementLength * elementLength * elementLength * gModule * area + 12.0 * elementLength * mju * eModule * momentY)); } else if (element.MomentAroundYReleaseNode1 == true && element.MomentAroundYReleaseNode2 == true && element.ShearZReleaseNode1 == false && element.ShearZReleaseNode2 == false) { index33 = double.Epsilon; index35 = 0.0; index39 = 0.0; index311 = 0.0; index55 = double.Epsilon; index59 = 0.0; index511 = 0.0; index99 = double.Epsilon; index911 = 0.0; index1111 = double.Epsilon; } else if (element.MomentAroundYReleaseNode1 == true && element.MomentAroundYReleaseNode2 == false && element.ShearZReleaseNode1 == false && element.ShearZReleaseNode2 == false) { index33 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentY); index35 = 0.0; index39 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentY); index311 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentY); index55 = double.Epsilon; index59 = 0.0; index511 = 0.0; index99 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentY); index911 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentY); index1111 = (3.0 * eModule * momentY * gModule * area * elementLength) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentY); } else if (element.MomentAroundYReleaseNode1 == false && element.MomentAroundYReleaseNode2 == true && element.ShearZReleaseNode1 == false && element.ShearZReleaseNode2 == false) { index33 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentY); index35 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentY); index39 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentY); index311 = 0.0; index55 = (3.0 * eModule * momentY * gModule * area * elementLength) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentY); index59 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength + mju * 3.0 * eModule * momentY); index511 = 0.0; index99 = (3.0 * eModule * momentY * gModule * area) / (gModule * area * elementLength * elementLength * elementLength + mju * elementLength * 3.0 * eModule * momentY); index911 = 0.0; index1111 = double.Epsilon; } else if (element.MomentAroundYReleaseNode1 == true && element.MomentAroundYReleaseNode2 == false && element.ShearZReleaseNode1 == true && element.ShearZReleaseNode2 == false) { index33 = double.Epsilon; index35 = 0.0; index39 = 0.0; index311 = 0.0; index55 = double.Epsilon; index59 = 0.0; index511 = 0.0; index99 = double.Epsilon; index911 = 0.0; index1111 = double.Epsilon; } else if (element.MomentAroundYReleaseNode1 == false && element.MomentAroundYReleaseNode2 == true && element.ShearZReleaseNode1 == false && element.ShearZReleaseNode2 == true) { index33 = double.Epsilon; index35 = 0.0; index39 = 0.0; index311 = 0.0; index55 = double.Epsilon; index59 = 0.0; index511 = 0.0; index99 = double.Epsilon; index911 = 0.0; index1111 = double.Epsilon; } else if (element.MomentAroundYReleaseNode1 == true && element.MomentAroundYReleaseNode2 == false && element.ShearZReleaseNode1 == false && element.ShearZReleaseNode2 == true) { index33 = double.Epsilon; index35 = 0.0; index39 = 0.0; index311 = 0.0; index55 = double.Epsilon; index59 = 0.0; index511 = 0.0; index99 = double.Epsilon; index911 = 0.0; index1111 = double.Epsilon; } else if (element.MomentAroundYReleaseNode1 == false && element.MomentAroundYReleaseNode2 == true && element.ShearZReleaseNode1 == true && element.ShearZReleaseNode2 == false) { index33 = double.Epsilon; index35 = 0.0; index39 = 0.0; index311 = 0.0; index55 = double.Epsilon; index59 = 0.0; index511 = 0.0; index99 = double.Epsilon; index911 = 0.0; index1111 = double.Epsilon; } else if (element.MomentAroundYReleaseNode1 == false && element.MomentAroundYReleaseNode2 == false && element.ShearZReleaseNode1 == true && element.ShearZReleaseNode2 == false) { index33 = double.Epsilon; index35 = 0.0; index39 = 0.0; index311 = 0.0; index55 = (eModule * momentY) / elementLength; index59 = 0.0; index511 = (-1) * (eModule * momentY) / elementLength; index99 = double.Epsilon; index911 = 0.0; index1111 = (eModule * momentY) / elementLength; } else if (element.MomentAroundYReleaseNode1 == false && element.MomentAroundYReleaseNode2 == false && element.ShearZReleaseNode1 == false && element.ShearZReleaseNode2 == true) { index33 = double.Epsilon; index35 = 0.0; index39 = 0.0; index311 = 0.0; index55 = (eModule * momentY) / elementLength; index59 = 0.0; index511 = (-1) * (eModule * momentY) / elementLength; index99 = double.Epsilon; index911 = 0.0; index1111 = (eModule * momentY) / elementLength; } else { index33 = double.NaN; index35 = double.NaN; index39 = double.NaN; index311 = double.NaN; index55 = double.NaN; index59 = double.NaN; index511 = double.NaN; index99 = double.NaN; index911 = double.NaN; index1111 = double.NaN; } //Normal Releases if (element.NormalReleaseNode1 == false && element.NormalReleaseNode2 == false) { index11 = (eModule * area) / elementLength; index17 = (eModule * area) / elementLength; index77 = (eModule * area) / elementLength; } else if ((element.NormalReleaseNode1 == true && element.NormalReleaseNode2 == false) || (element.NormalReleaseNode1 == false && element.NormalReleaseNode2 == true)) { index11 = double.Epsilon; index17 = 0.0; index77 = double.Epsilon; } else { index11 = double.NaN; index17 = double.NaN; index77 = double.NaN; } //Torsional Releases if (element.TorsionReleaseNode1 == false && element.TorsionReleaseNode2 == false) { index44 = (gModule * torsionX) / elementLength; index410 = (gModule * torsionX) / elementLength; index1010 = (gModule * torsionX) / elementLength; } else if ((element.TorsionReleaseNode1 == true && element.TorsionReleaseNode2 == false) || (element.TorsionReleaseNode1 == false && element.TorsionReleaseNode2 == true)) { index44 = double.Epsilon; index410 = 0.0; index1010 = double.Epsilon; } else { index44 = double.NaN; index410 = double.NaN; index1010 = double.NaN; } Matrix <double> localMatrix = SparseMatrix.OfArray(new double[, ] { //First row { index11, 0.0, 0.0, 0.0, 0.0, 0.0, (-1) * index17, 0.0, 0.0, 0.0, 0.0, 0.0 }, //Second row { 0.0, index22, 0.0, 0.0, 0.0, index26, 0.0, (-1) * index28, 0.0, 0.0, 0.0, index212 }, //Third row { 0.0, 0.0, index33, 0.0, (-1) * index35, 0.0, 0.0, 0.0, (-1) * index39, 0.0, (-1) * index311, 0.0 }, //Fourth row { 0.0, 0.0, 0.0, index44, 0.0, 0.0, 0.0, 0.0, 0.0, (-1) * index410, 0.0, 0.0 }, //Fifth row { 0.0, 0.0, (-1) * index35, 0.0, index55, 0.0, 0.0, 0.0, index59, 0.0, index511, 0.0 }, //Sixth row { 0.0, index26, 0.0, 0.0, 0.0, index66, 0.0, (-1) * index68, 0.0, 0.0, 0.0, index612 }, //Seventh row { (-1) * index17, 0.0, 0.0, 0.0, 0.0, 0.0, index77, 0.0, 0.0, 0.0, 0.0, 0.0 }, //Eighth row { 0.0, (-1) * index28, 0.0, 0.0, 0.0, (-1) * index68, 0.0, index88, 0.0, 0.0, 0.0, (-1) * index812 }, //Ninth row { 0.0, 0.0, (-1) * index39, 0.0, index59, 0.0, 0.0, 0.0, index99, 0.0, index911, 0.0 }, //Tenth row { 0.0, 0.0, 0.0, (-1) * index410, 0.0, 0.0, 0.0, 0.0, 0.0, index1010, 0.0, 0.0 }, //Eleventh row { 0.0, 0.0, (-1) * index311, 0.0, index511, 0.0, 0.0, 0.0, index911, 0.0, index1111, 0.0 }, //Twelfth row { 0.0, index212, 0.0, 0.0, 0.0, index612, 0.0, (-1) * index812, 0.0, 0.0, 0.0, index1212 } }); return(localMatrix); }