Am besten, ich mach ein Beispiel. Das Beispiel verwendet 5 Knoten und 4 Stäbe. Ein Knoten hat hier 3 Freiheitsgrade, eine Verschiebung in X-Richtung, eine Verschiebung in Y-Richtung und eine Verdrehung in Z-Richtung (Verdrehung um die Z-Achse). Man gibt die Koordinaten der Knoten vor und man gibt Stäbe an.
Ein Stab hat einen linken und einen rechten Anschlußknoten (FElements.Item[I].Left, FElements.Item[I].Right). Hier Stab 1 von Knoten 1 nach Knoten 2, Stab 2 geht von Knoten 2 nach Knoten 5, Stab 3 von Knoten 5 nach Knoten 3 und Stab 4 von Knoten 3 nach Knoten 4.
Dann gibt man an, welche Freiheitsgrade an Knoten ausgeschlossen werden (Auflager). Im Beispiel sind an den Knoten 1, 4 und 5 die Verschiebungen in Y-Richtung ausgeschlossen, am Knoten 5 zusätzlich die Verschiebung in X-Richtung.
Mit diesen Angaben kann man eine Indexliste aufbauen und damit eine Systemsteifigkeitsmatrix aufstellen. Die Indexliste gibt an, daß z.B. die Reihe/Spalte 2 der Matrix nach Reihe/Spalte 15 zu verschieben ist (IndexOfRow, IndexOfCol). Die Matrix ist symmetrisch und hat eine Bandstruktur. Wie groß die Bandbreite ist kann man berechnen.
Delphi-Quellcode:
procedure TFrame.SimulateLoad(const T1, T2: integer);
var
k1, k2, i1, i2, Row, Col: integer;
begin
i1 := FDG * (T1 - 1);
i2 := FDG * (T2 - 1);
for k1 := 1 to FDG do
begin
Row := FIndexOfU[i1 + k1];
if Row <= FNU then
for k2 := 1 to FDG do
begin
Col := FIndexOfU[i2 + k2];
if (Col >= Row) and (Col <= FNU) then
FNB := Max(FNB, Col - Row + 1);
end;
end;
end;
procedure TFrame.CalcNB; // Bandbreite;
var
I: integer;
begin
FNB := 0;
for I := 1 to FElements.Count do
begin
SimulateLoad(FElements.Item[I].Left, FElements.Item[I].Left);
SimulateLoad(FElements.Item[I].Right, FElements.Item[I].Right);
SimulateLoad(FElements.Item[I].Left, FElements.Item[I].Right);
SimulateLoad(FElements.Item[I].Right, FElements.Item[I].Left);
end;
end;
Um die Bandbreite zu optimieren, benennt man die Knoten lediglich anders. Lisa heißt jetzt Petra und Petra Lisa. Damit ergibt sich eine andere Indexliste und eine andere Bandbreite. Man tauscht z.B. die Namen der Knoten von 1 und 5. Damit geht Stab 1 nicht mehr von Knoten 1 nach Knoten 2 sondern von Knoten 5 nach Knoten 2. Mit dieser Knotenbenennung durchläuft man den Algo nochmals. Gesucht ist die Knotenbenennung, die die kleinste Bandbreite ergibt.