private void GetForces(WR_Element3d elem) { // Initialise dictionaries N1 = elem.AllNormalForce(); Vy = elem.AllShearForceY(); Vz = elem.AllShearForceZ(); T = elem.AllTorsionalForce(); My = elem.AllMomentY(); Mz = elem.AllMomentZ(); }
private void ScalePositionList(WR_Element3d elem) { pos = new List <double>(); List <double> unScaled = elem.ResultPosition(); double sFac = 1 / Utilities.GetScalingFactorFromRhino(); for (int i = 0; i < unScaled.Count; i++) { pos.Add(unScaled[i] * sFac); } }
private void GetDisplacements(WR_Element3d elem) { //u = elem.AllDisplacementX(); //v = elem.AllDisplacementY(); //w = elem.AllDisplacementZ(); double sfac = Utilities.GetScalingFactorFromRhino(); u = GetScaledDisplacementList(elem.AllDisplacementX(), sfac); v = GetScaledDisplacementList(elem.AllDisplacementY(), sfac); w = GetScaledDisplacementList(elem.AllDisplacementZ(), sfac); fi = elem.AllDisplacementTorsion(); }
private void GetElementGeometricData(WR_Element3d elem) { // Node positions sPos = CreateRhinoPt(elem.GetStartPos()); ePos = CreateRhinoPt(elem.GetEndPos()); Length = sPos.DistanceTo(ePos); // Orientation elNormal = CreateRhinoVector(elem.GetElementNormal(), false); SetLocalVectors(); // Section property string SectionPropertyString = elem.GetSectionString(); }
public ResultElement(WR_Element3d elem) { // Element data GetElementGeometricData(elem); // Positions ScalePositionList(elem); // Forces GetForces(elem); // Displacements GetDisplacements(elem); // Utilisations GetUtilisations(elem); }
protected override void SolveInstance(IGH_DataAccess DA) { // Indata bool go = false; List <WR_Node3d> nodes = new List <WR_Node3d>(); List <WR_IElemRcp> beams = new List <WR_IElemRcp>(); int mode = 0; if (!DA.GetDataList(0, nodes)) { return; } if (!DA.GetDataList(1, beams)) { return; } if (!DA.GetData(2, ref mode)) { return; } if (!DA.GetData(3, ref go)) { return; } if (go) { resElems = new List <ResultElement>(); log.Clear(); log.Add("Structure invokation started"); // Create structure wrapper _structure = new WR_Structure(); // Add restraint nodes foreach (WR_Node3d n in nodes) { _structure.AddNode(n); } log.Add("" + nodes.Count + " nodes added to structure"); // Add elements foreach (WR_Elem3dRcp e in beams) { _structure.AddElementRcp(e); } log.Add("" + beams.Count + " elements added to structure"); // Add forces // Solve _solver = new WR_EigenSolver(_structure); _solver.Solve(); //structure.EigenSolve(mode); } if (_solver != null && _structure != null) { _eigVal = _solver.SetResultsToMode(mode); // Extract results List <WR_IElement> elems = _structure.GetAllElements(); resElems.Clear(); for (int i = 0; i < elems.Count; i++) { if (elems[i] is WR_Element3d) { WR_Element3d el3d = (WR_Element3d)elems[i]; ResultElement re = new ResultElement(el3d); resElems.Add(re); } } } DA.SetData(0, log); DA.SetDataList(1, resElems); DA.SetData(2, _eigVal); }
protected override void SolveInstance(IGH_DataAccess DA) { // Indata WR_Structure structure = null; List <WR_LoadCombination> loadCombinations = new List <WR_LoadCombination>(); bool go = false; int maxIter = 0; System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); if (!DA.GetData(0, ref structure)) { return; } if (!DA.GetDataList(1, loadCombinations)) { return; } if (!DA.GetData(2, ref go)) { return; } if (!DA.GetData(3, ref maxIter)) { return; } if (go) { _log.Clear(); watch.Reset(); watch.Start(); _resElems = new List <ResultElement>(); // Solve WR_StandardSectionSizer secSizer = new WR_StandardSectionSizer(structure); foreach (WR_LoadCombination lc in loadCombinations) { secSizer.AddLoadCombination(lc); } watch.Stop(); _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); _nbIterations = secSizer.Run(maxIter); watch.Stop(); _log.Add(String.Format("Run section sizer: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); // Extract results List <WR_IElement> elems = structure.GetAllElements(); for (int i = 0; i < elems.Count; i++) { if (elems[i] is WR_Element3d) { WR_Element3d el3d = (WR_Element3d)elems[i]; ResultElement re = new ResultElement(el3d); _resElems.Add(re); } } watch.Stop(); _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds)); } DA.SetDataList(0, _log); DA.SetDataList(1, _resElems); DA.SetData(2, _nbIterations); }
protected override void SolveInstance(IGH_DataAccess DA) { // Indata WR_Structure structure = null; List <WR_LoadCombination> loadCombinations = new List <WR_LoadCombination>(); bool go = false; bool check = true; System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); if (!DA.GetData(0, ref structure)) { return; } if (!DA.GetDataList(1, loadCombinations)) { return; } if (!DA.GetData(2, ref go)) { return; } if (!DA.GetData(3, ref check)) { return; } if (go) { _resElems = new List <ResultElement>(); _log.Clear(); watch.Restart(); // Solve WR_LinearSolver solver = new WR_LinearSolver(structure); foreach (WR_LoadCombination lc in loadCombinations) { solver.AddLoadCombination(lc); } watch.Stop(); _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); // Check structure if (check) { solver.CheckStructure(); if (!structure.IsValidForLinearSolver()) { return; } } watch.Stop(); _log.Add(String.Format("Check of structure: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); // Solve try { solver.Solve(); } catch (Exception e) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message); return; } watch.Stop(); _log.Add(String.Format("Solve system: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); // Extract results List <WR_IElement> elems = structure.GetAllElements(); for (int i = 0; i < elems.Count; i++) { if (elems[i] is WR_Element3d) { WR_Element3d el3d = (WR_Element3d)elems[i]; ResultElement re = new ResultElement(el3d); _resElems.Add(re); } } watch.Stop(); _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds)); } DA.SetDataList(0, _log); DA.SetDataList(1, _resElems); }
private void ScalePositionList(WR_Element3d elem) { pos = new List<double>(); List<double> unScaled = elem.ResultPosition(); double sFac = 1 / Utilities.GetScalingFactorFromRhino(); for (int i = 0; i < unScaled.Count; i++) pos.Add(unScaled[i] * sFac); }
private void GetUtilisations(WR_Element3d elem) { util = elem.AllUtilisations(); }
protected override void SolveInstance(IGH_DataAccess DA) { // Indata WR_Structure structure = null; bool go = false; double maxRatio = 0; System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); if (!DA.GetData(0, ref structure)) { return; } if (!DA.GetData(1, ref go)) { return; } if (!DA.GetData(2, ref maxRatio)) { return; } if (go) { _resElems = new List <ResultElement>(); _log.Clear(); watch.Restart(); // Solve WR_ModeShapeOptimizer optimizer = new WR_ModeShapeOptimizer(structure); watch.Stop(); _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); //Runs optimizer.Run(maxRatio); watch.Stop(); _log.Add(String.Format("Run mode shape optimization: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); // Extract results List <WR_IElement> elems = structure.GetAllElements(); for (int i = 0; i < elems.Count; i++) { if (elems[i] is WR_Element3d) { WR_Element3d el3d = (WR_Element3d)elems[i]; ResultElement re = new ResultElement(el3d); _resElems.Add(re); } } watch.Stop(); _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds)); } DA.SetDataList(0, _log); DA.SetDataList(1, _resElems); }
protected override void SolveInstance(IGH_DataAccess DA) { // Indata bool go = false; WR_Structure structure = null; List <int> modes = new List <int>(); System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); if (!DA.GetData(0, ref structure)) { return; } if (!DA.GetDataList(1, modes)) { return; } if (!DA.GetData(2, ref go)) { return; } if (go) { _resElems = new List <ResultElement>(); _log.Clear(); watch.Restart(); // Solve _solver = new WR_EigenSolver(structure); _solver.Solve(); watch.Stop(); _log.Add(String.Format("Solve system: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); if (_solver != null && structure != null) { _eigVals = new List <double>(); foreach (int mode in modes) { _eigVals.Add(_solver.SetResultsToMode(mode)); } watch.Stop(); _log.Add(String.Format("Analyse modes: {0}ms", watch.ElapsedMilliseconds)); watch.Restart(); // Extract results List <WR_IElement> elems = structure.GetAllElements(); _resElems.Clear(); for (int i = 0; i < elems.Count; i++) { if (elems[i] is WR_Element3d) { WR_Element3d el3d = (WR_Element3d)elems[i]; ResultElement re = new ResultElement(el3d); _resElems.Add(re); } } watch.Stop(); _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds)); } } DA.SetDataList(0, _log); DA.SetDataList(1, _resElems); DA.SetDataList(2, _eigVals); }
protected override void SolveInstance(IGH_DataAccess DA) { // Indata bool go = false; List <WR_Node3d> nodes = new List <WR_Node3d>(); List <WR_IElemRcp> beams = new List <WR_IElemRcp>(); if (!DA.GetDataList(0, nodes)) { return; } if (!DA.GetDataList(1, beams)) { return; } if (!DA.GetData(2, ref go)) { return; } if (go) { resElems = new List <ResultElement>(); log.Clear(); log.Add("Structure invokation started"); // Create structure wrapper WR_Structure structure = new WR_Structure(); // Add restraint nodes foreach (WR_Node3d n in nodes) { structure.AddNode(n); } log.Add("" + nodes.Count + " nodes added to structure"); // Add elements foreach (WR_Elem3dRcp e in beams) { structure.AddElementRcp(e); } log.Add("" + beams.Count + " elements added to structure"); // Add forces // Solve WR_LinearSolver solver = new WR_LinearSolver(structure, true); solver.Solve(); // Extract results List <WR_IElement> elems = structure.GetAllElements(); for (int i = 0; i < elems.Count; i++) { if (elems[i] is WR_Element3d) { WR_Element3d el3d = (WR_Element3d)elems[i]; ResultElement re = new ResultElement(el3d); resElems.Add(re); } } //Extract Points pts = new List <Rhino.Geometry.Point3d>(); List <WR_XYZ> xyzs = structure.GetAllPoints(); for (int i = 0; i < xyzs.Count; i++) { pts.Add(new Rhino.Geometry.Point3d(xyzs[i].X, xyzs[i].Y, xyzs[i].Z)); } } DA.SetData(0, log); DA.SetDataList(1, resElems); DA.SetDataList(2, pts); }