private List <List <int> > GetDistinctRigidElements(Model model, LoadCase loadCase) { for (int i = 0; i < model.Nodes.Count; i++) { model.Nodes[i].Index = i; } var n = model.Nodes.Count; var crd = new CoordinateStorage <double>(n, n, 1); foreach (var elm in model.RigidElements) { if (IsAppliableRigidElement(elm, loadCase)) { for (var i = 0; i < elm.Nodes.Count; i++) { crd.At(elm.Nodes[i].Index, elm.Nodes[i].Index, 1.0); } for (var i = 0; i < elm.Nodes.Count - 1; i++) { crd.At(elm.Nodes[i].Index, elm.Nodes[i + 1].Index, 1.0); crd.At(elm.Nodes[i + 1].Index, elm.Nodes[i].Index, 1.0); } } } var graph = Converter.ToCompressedColumnStorage(crd); var buf = CalcUtil.EnumerateGraphParts(graph); return(buf); }
private static List <List <int> > GetDistinctRigidElements(Model model, LoadCase loadCase) { for (int i = 0; i < model.Nodes.Count; i++) { model.Nodes[i].Index = i; } var n = model.Nodes.Count; var ecrd = new CoordinateStorage <double>(n, n, 1); //for storing existence of rigid elements var crd = new CoordinateStorage <double>(n, n, 1); //for storing hinged connection of rigid elements for (int ii = 0; ii < model.RigidElements.Count; ii++) { var elm = model.RigidElements[ii]; if (IsAppliableRigidElement(elm, loadCase)) { for (var i = 0; i < elm.Nodes.Count; i++) { ecrd.At(elm.Nodes[i].Index, elm.Nodes[i].Index, 1.0); } for (var i = 0; i < elm.Nodes.Count - 1; i++) { ecrd.At(elm.Nodes[i].Index, elm.Nodes[i + 1].Index, 1.0); ecrd.At(elm.Nodes[i + 1].Index, elm.Nodes[i].Index, 1.0); } } } var graph = Converter.ToCompressedColumnStorage(ecrd); var buf = CalcUtil.EnumerateGraphParts(graph); return(buf); }