Ausleiten von (reduzierten) Matrizen

Sie finden etwas nicht oder wünschen sich Funktionalitäten? Hier können Sie es los werden! /
You are looking for functionalities? Go ahead!

Moderatoren: ccad, mz15, auroraIco, Lehrstuhl

Antworten
Fritz
Newbie
Beiträge: 4
Registriert: Fr 1. Mär 2013, 21:33
Wohnort: Heroldsberg

Ausleiten von (reduzierten) Matrizen

Beitrag von Fritz »

Ist es möglich die Steifigkeitsmatrix einer linear elastischen Rechnung auszuleiten? (als Text File oder ähnliches)
Habe noch keine Möglichkeit dazu entdeckt.

Natürlich ist es möglich sich viele Lastfälle mit Einheitsverschiebungen (-kräften) zu definieren und damit die Steifigkeits(Nachbiebigkeits-)matrix sozusagen spaltenweise auszuleiten. Das ist jedoch bei vielen Freiheitsgraden (zumindest ohne zusätzliches Skript, welches Z88 über die Komanndozeile steuert) nicht praktikabel und ineffizient oberdrein.

Das wäre insbesondere dann für mich interessant, wenn man das mit Reduktionsverfahren (Guyan oder ähnliches) kombinieren könnte.

Hintergrund ist hierbei, dass ich für elastiasche MKS Berechnungen des Öfteren Massen- und Steifigkeitsmatrizen von Bauteilen benötige.
Da diese in Z88 sowieso schon intern vorhanden sind, wäre es für mich sehr praktisch diese auch herraus zu bekommen.
mifris
Alumni
Beiträge: 153
Registriert: Mo 27. Sep 2010, 20:41

Re: Ausleiten von (reduzierten) Matrizen

Beitrag von mifris »

Hallo Fritz,

ich verstehe sehr gut, was Sie meinen. Leider geht das in Z88Aurora nicht. Hierfür kann ich Ihnen nur empfehlen, dass Sie sich die Z88OS V14 herunterladen. Dort sind alle C-Quellen der Elastostatik frei verfügbar. Die Steifigkeitsmatrix könnten Sie sich relativ einfach mit einem printf-Befehl an der richtigen Stelle ausgeben lassen, bei der Massenmatrix jedoch wird es schwieriger. Hier müssten Sie diese selbst programmieren.
Wir werden Ihre Anregung auf jedenfall besprechen. Vielen Dank hierfür. :-)

Viele Grüße

Michael Frisch
Benutzeravatar
mz15
Site Admin
Beiträge: 266
Registriert: Do 5. Aug 2010, 19:23

Re: Ausleiten von (reduzierten) Matrizen

Beitrag von mz15 »

Hallo Fritz,

wie Sie schon gesagt haben
Fritz hat geschrieben: Natürlich ist es möglich sich viele Lastfälle mit Einheitsverschiebungen (-kräften) zu definieren und damit die Steifigkeits(Nachbiebigkeits-)matrix sozusagen spaltenweise auszuleiten.
ist das ein moeglicher Weg. Um das Probelem mit den Lastfaellen zu umgehen, kann ein "MASTER-Projekt" weiterhelfen. Sie machen sich einen Ordner in dem alle Eingabedaten liegen und aendern dann ueber ein kleines PERL oder C-Programm die Eingabedatei z88i2.txt. Der Solver kann leicht ueber Konsole angesteuert werden und die Ausgabedaten enthalten die Wert die Sie auch nur ueber eine eigenens kleines Skript auslesen koennen. Das ann dann alles automatisch laufen und wenn Sie einen Kaffee getrunken haben ist die Matrix da :D (wenn das Beispiel klein genug ist).

Bei Grossen Beispielen koennen Sie das ja ueber Nacht laufen lassen.

Gruss
mz15
0711amr
Newbie
Beiträge: 3
Registriert: Mo 4. Dez 2017, 20:59

Re: Ausleiten von (reduzierten) Matrizen

Beitrag von 0711amr »

mifris hat geschrieben: Mo 15. Apr 2013, 21:57 ...Dort sind alle C-Quellen der Elastostatik frei verfügbar. Die Steifigkeitsmatrix könnten Sie sich relativ einfach mit einem printf-Befehl an der richtigen Stelle ausgeben lassen, ...
Hallo Michael,
hallo Z88-Forum,

gerne würde ich diesem Hinweis folgendermaßen nachgehen:
In meinem Fall möchte ich von einem 3D-Fachwerk (Typ 4 Stäbe im Raum: 6780 Stäbe) die Matrix ausgeben lassen (direkt ermittelte, per Cholesky-Löser Steifigkeitsmatrix: 5088x5088 Einträge).

Nun bin so weit, dass ich entdeckt habe, dass
1)in src/z88r/common/m1.c die lokalen und globalen Elementmatrizen von stab88.c (Stab im Raum) erstellt werden,
2)in .../m3.c die Verformungen, Kräfte am Stab (ssta88.c) ermittelt werden,
3)in src/z88r/common/choy88.c wohl (?) per Cholesky die System-Steifigkeitsmatrix ("GS", richtig?) assembliert wird,
4)in src/z88r/common/z88cr.c die Randbedingungen eingearbeitet werden,

darum habe ich folgende Fragen:
Werden zuerst in z88cr.c die Randbedingungen in GS eingebaut, und diese Matrix anschließend als Systemsteifigkeitsmatrix assembliert? oder umgekehrt? Gilt für meinen Fall icflag 1 oder 0? Das ist aus der Anleitung nicht ersichtlich. Da am Ende auf choy88 verwiesen wird, gehe ich von der zuerst beschriebenen Reihenfolge aus (und von ICFLAG=0).

Es müsste doch also ausreichen, wenn ich in die neu zu erstellende Datei z88o9.txt ausleiten möchte, unter Zeile 209 n choy88.c die Befehle
f09= fopen(co9,"w+");
fprintf(fo9,GS);
fclose(f0o9);
einzugeben...?

Klappt aber leider nicht so ganz, entweder bin ich an der falschen steööe oder meine sehr bescheidenen C-Künste kommen da nicht mit:/ :roll:

Gruß,
Andreas
JWittmann
Support
Beiträge: 20
Registriert: Mo 11. Sep 2017, 08:16

Re: Ausleiten von (reduzierten) Matrizen

Beitrag von JWittmann »

Hallo Andreas,
0711amr hat geschrieben: Werden zuerst in z88cr.c die Randbedingungen in GS eingebaut, und diese Matrix anschließend als Systemsteifigkeitsmatrix assembliert? oder umgekehrt?
Zuerst wird die Gesamtsteifigkeitsmatrix (= Systemsteifigkeitsmatrix) erstellt und anschließend werden in z88cr.c die Randbedingungen eingebaut.
0711amr hat geschrieben: Gilt für meinen Fall icflag 1 oder 0? Das ist aus der Anleitung nicht ersichtlich. Da am Ende auf choy88 verwiesen wird, gehe ich von der zuerst beschriebenen Reihenfolge aus (und von ICFLAG=0).
Der Übergangsparameter ICFLAG definiert den Solver und Sie können diesen indirekt bestimmen über den Programmaufruf:
  • z88r.exe -c -choly entspricht ICFLAG=0
  • z88r.exe -c -siccg entspricht ICFLAG=1
  • z88r.exe -c -sorcg entspricht ICFLAG=2
0711amr hat geschrieben: Es müsste doch also ausreichen, wenn ich in die neu zu erstellende Datei z88o9.txt ausleiten möchte, unter Zeile 209 n choy88.c die Befehle
f09= fopen(co9,"w+");
fprintf(fo9,GS);
fclose(f0o9);
einzugeben...?
Nein. Sie müssen an einer Stelle in z88cr.c eingreifen, welche noch vor der Skalierung ist, da fortlaufend die Diagonaleinträge auf 1 geändert werden. Um die GS-Matrix zu exportieren, bedarf es einiger Hintergrundinformationen (Pointervektoren iz und iez), da es sich um ein sparse-Format handelt. Hierfür kann ich Ihnen das Buch Finite Analyse für Ingenieure empfehlen.

Gruß,
Johannes
0711amr
Newbie
Beiträge: 3
Registriert: Mo 4. Dez 2017, 20:59

Re: Ausleiten von (reduzierten) Matrizen

Beitrag von 0711amr »

Herzlichen Dank für die Hilfe - solche Hinweise helfen mir weiter !

natürlich benötige ich also die Gesamtsteifigkeitsmatrix inkl. der eingebauten RB, noch vor Skalierung. Das beschriebene Buch habe ich zum Glück in der Bib gefunden :D

erste (unwichtigere) Frage:

Jetzt stehe ich nur vor dem Problem, dass eine Compilierung mit Visual Studio 2015 auf meinm X64 Win10 System nicht geklappt hat...
...ich habe die unveränderten Quelldateien probeweise nochmals compilieren wollen, per VS2015 X64 Native Tools Command Promt, Eingabe mit Pfad der X64 makefiles: cd C:\Z88V15OS\make\make_win_64
...anschließend Befehl nmake -f z88r.nm
...jedoch kam stets der Fehler fatal error LNK1112: Modul-Computertyp "X86" steht in Konflikt mit dem Zielcomputertyp "x64"
...eine probeweise Compilierung der unveränderten, aber auch abgeänderten Quelldateien auf X86 hat geklappt...
was mache ich anders, als im Handbuch gefordert, bzw. von den Urhebern vorgesehen??

Nun mache ich eben vorerst mit der 32-bit Version weiter...

zweite (wichtige) Frage:

Das Ausleiten hat geklappt, nur bin ich mir unsicher, ob ich das Richtige ausleite.. wie kann man das feststellen?

In Datei z88cr.r habe ich unter "icflag==0" unter "Ende Einbau RB" direkt vor "Ende icflag==0" folgendes eingefügt:

Code: Alles auswählen

fo9 = fopen(co9, "w+");													
	    if (fo9 != NULL)														
		{																		
			for (j = 1; j <= nfg; j++)										
			{																
				for (i = 1; i <= nfg; i++)										
				{																
					fprintf(fo9, "%.4f  %d  %d %d \n", GS[ip[i]], ip[i], i, j);	
				}																
			}																	
				wlog88r(1, LOG_WRIO9);											
		}																		
		fclose(fo9);															


Ich bin mir unsicher, ob so die im Jennings-Verfahren gespeicherten GS-Einträge richtig ausgegeben werden, sodass ich sie mit dem ip-Vektor (den ich mit ausgegeben haben will) auch richtig zuorden kann..die mit ausgegebenen Werte für i und j sehe ich als angenehm an zur Überprüfung...

Würde mich sehr freuen, wenn mir da jemand Gewissheit und oder einen Tipp geben könnte ... :?

Grüße !
FHueter
Support
Beiträge: 16
Registriert: Di 18. Jul 2017, 15:13

Re: Ausleiten von (reduzierten) Matrizen

Beitrag von FHueter »

Hallo Andreas,

zunächst zur zweiten Frage: "Ausschreiben der Gesamtsteifigkeitsmatrix"

Die Gesamtsteifigkeitsmatrix liegt programmintern je nach verwendetem Solver in zwei verschiedenen Speicherformaten vor:
  • direkter Solver CHOY88: Jennings-Speicherung
  • iterative Solver SICCG88 & SORCCG88: Nichtnullelemente-Speicherung
In beiden Fällen wird aus Symmetriegründen nur die untere Hälfte der Gesamtsteifigkeitsmatrix betrachtet.
Dabei wird die Matrix im Jennings-Format programmintern durch die folgenden beiden Vektoren dargestellt:
  • GS[j]: Einträge des Gesamtsteifigkeitsmatrix (j = 1 ... ip[nfg])
  • ip[j]: Zeiger auf die Matrixdiagonalelemente (j=1 ... nfg)
Dabei gilt also: GS[ip[j]] gibt den numerischen Wert des Diagonalelements der jten Matrixzeile zurück. Dementsprechend sind GS[ip[j-1]+1] ... GS[ip[j]] alle Matrixeinträge der jten Zeile ab dem ersten Nichtnullelement bis zum Diagonalelement.
Bei der Nichtnullelemente-Speicherung wird neben GS und ip zusätzlich der Vektor iez benötigt:
  • iez[j]: gibt den Spaltenindex des Matrixeintrags GS[j] an
Damit gilt also: iez[ip[j-1]+1] ... iez[ip[j]] sind die Spaltenindizes der einzelnen Nichtnulleinträge der jten Matrixzeile GS[ip[j-1]+1] ... GS[ip[j]].
Detaillierte Informationen zu den beiden Speicherformaten findet man beispielsweise in dem Buch "Finite Elemente Analyse für Ingenieure" von Prof. Dr.-Ing. Frank Rieg.
Um sich nun die Gesamtsteifigkeitsmatrix unskaliert von Z88os in eine Datei z88o9.txt ausschreiben zu lassen, muss man im Quellcode die Datei z88cr.c modifizieren. Eine modifizierte Version der z88cr.c befindet sich im Anhang (Matrixausgabe: Z. 415-458).
Die ausgeschriebene Datei z88o9.txt ist dabei wie folgt aufgebaut:
  • erste Zeile: [Anzahl_Freiheitsgrade] [Anzahl_Matrixelemente] [Speicherformat]
  • nachfolgende Zeilen: [Matrixeintrag] [Zeilenindex] [Spaltenindex]
Ich hoffe, das hilft Ihnen weiter.

jetzt zur ersten Frage: "z88osV15 compilieren mit VS2015"

Ihre Vorgehensweise ist so, wie Sie sie beschrieben haben, grundsätzlich korrekt. Ich habe den z88osV15-Quellcode auf meinem Win10/64bit-Rechner mittels VS2015Pro (VS2015 x64 Native Tools - Eingabeaufforderung) ohne Fehlermeldung kompilieren können. Merkwürdig, dass es bei Ihnen nur mit x86 funktioniert. Leider kann ich Ihnen an dieser Stelle momentan nicht weiterhelfen. Vielleicht handelt es sich um einen Installationsfehler o. ä.

Viele Grüße
FHueter
Dateianhänge
z88cr.7z
(3.22 KiB) 173-mal heruntergeladen
Abendrot
Newbie
Beiträge: 1
Registriert: Do 21. Nov 2019, 20:26

Re: Ausleiten von (reduzierten) Matrizen

Beitrag von Abendrot »

Kann es sein, dass die angehängte Datei z88cr.7z mit einem Passwort geschützt ist?
Ich konnte das Archiv nicht entpacken (Meldung: unerwartetes Dateiende)
Antworten