| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys |
Autor
|
Thema: Problem beim Einlese von Daten mit *vread (1396 mal gelesen)
|
pminf Mitglied
Beiträge: 16 Registriert: 04.06.2013
|
erstellt am: 23. Sep. 2013 14:35 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein kleines Problem beim Einlesen einer Textfile in ANSYS. Und zwar verwende ich den *vread-Befehl, jedoch wird nicht die komplette Textdatei eingelesen, sondern nur der erste Wert. Ich habe die Textdatei auch mal angehängt (sie enthält 150 Einträge). Der Ansys-Quelltext zum Einlesen sieht bei mir so aus: *DIM,node94inp,array,150 *create,knotenarea94macroinp *vread,node94inp(1),knotenarea94,txt (F8.0) *end *use,knotenarea94macroinp Wenn ich danach node94inp über den *status-Befehl abfrage, steht darin nur 190 (also der erste Eintrag der Textdatei). Wo kann mein Fehler liegen? Viele Grüße PMinf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MESHPARTS Mitglied
Beiträge: 411 Registriert: 08.03.2013 Meshparts Software (https://www.meshparts.de/products) Ansys SolidWorks
|
erstellt am: 23. Sep. 2013 17:28 <-- editieren / zitieren --> Unities abgeben: Nur für pminf
|
pminf Mitglied
Beiträge: 16 Registriert: 04.06.2013
|
erstellt am: 23. Sep. 2013 18:58 <-- editieren / zitieren --> Unities abgeben:
|
MESHPARTS Mitglied
Beiträge: 411 Registriert: 08.03.2013 Meshparts Software (https://www.meshparts.de/products) Ansys SolidWorks
|
erstellt am: 23. Sep. 2013 19:58 <-- editieren / zitieren --> Unities abgeben: Nur für pminf
genau das habe ich vermutet... Der Befehl *vread und einige andere APDL-Befehle funktionieren nur innerhalb einer Makrodatei (das wird beim jeweiligen Befehl in der Hilfe spezifiziert). Du musst deine Befehle in eine Makrodatei kopieren und dann die Makrodatei ausführen. Wenn die Endung der Makrodatei mac ist, dann lässt sich die Datei ausführen durch einfach Eingeben des Dateinamens in die Kommandozeile. Vorteil der mac-Endung ist noch, dass man dem Makro Parameter wie einer Funktion übergeben kann. Viele Grüße Alex ------------------ MESHPARTS Tuning Your Simulation www.meshparts.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pminf Mitglied
Beiträge: 16 Registriert: 04.06.2013
|
erstellt am: 24. Sep. 2013 08:50 <-- editieren / zitieren --> Unities abgeben:
danke für den Hinweis, aber soweit ich das richtig verstanden habe, erzeuge ich mir doch durch *create,knotenarea94macroinp *vread,node94inp(1),knotenarea94,txt (F8.0) *end eine Makro namens "knotenarea94macroinp", dass ich dann durch den *use-befehl aufrufe? Auf jeden Fall habe ich es jetzt noch einmal mit dem Quelltext aus meinem ersten Beitrag versucht und es funktioniert tatsächlich. Problem dabei ist nur, dass ich eigentlich nicht die feste Zuweisung auf eine Länge von 150 in dem Befehl "*DIM,node94inp,array,150" haben möchte, sondern dort die Länge entsprechend eines Parameters festlegen will (also irgendwie sowas: "*DIM,node94inp,array,nodeanz94inp"). Der *status-Befehl liefert für nodeanz94inp einen Wert von 150, aber das Einlesen von node94inp wie bereits oben erwähnt nur den ersten Eintrag 190? Vielleicht kurz zum Hintergrund: Ich speichere mir einerseits die Knotennummern in einem Textfile "knotenarea94" ab und andererseits die Anzahl der Knoten in einem File "knotenanzarea94", worin also in diesem Fall nur die 150 steht. Das gesamte Kommmando sieht dann so aus: *DIM,nodeanz94inp,array,1 *create,knotenanzarea94macroinp *vread,nodeanz94inp,knotenanzarea94,txt (F8.0) *end *use,knotenanzarea94macroinp !Anzahl der Knoten in !Fläche 94 bestimmen *DIM,node94inp,array,nodeanz94inp *create,knotenarea94macroinp *vread,node94inp(1),knotenarea94,txt (F8.0) *end *use,knotenarea94macroinp Für den Fall, dass ich das ganze in ein externes Makro schreibe, können die *create-, *end- und *use-Befehle dann natürlich weggelassen werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MESHPARTS Mitglied
Beiträge: 411 Registriert: 08.03.2013 Meshparts Software (https://www.meshparts.de/products) Ansys SolidWorks
|
erstellt am: 24. Sep. 2013 08:56 <-- editieren / zitieren --> Unities abgeben: Nur für pminf
|
pminf Mitglied
Beiträge: 16 Registriert: 04.06.2013
|
erstellt am: 24. Sep. 2013 09:17 <-- editieren / zitieren --> Unities abgeben:
ja, war vielleicht etwas komisch formuliert. Also das Problem ist ja, dass die Zuweisung bzw. das Einlesen funktioniert, wenn ich das Array mit der festen Länge von 150 definiere. Definiere ich es aber über den Parameter nodeanz94inp, dann funktioniert es nicht mehr (d.h. nur der erste Wert wird zugewiesen). Woran kann das liegen? PS: Ich habe die Datei "knotenanzarea94.txt" nochmal angehängt, so dass du es vielleicht nochmal bei dir versuchen kannst? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MESHPARTS Mitglied
Beiträge: 411 Registriert: 08.03.2013 Meshparts Software (https://www.meshparts.de/products) Ansys SolidWorks
|
erstellt am: 24. Sep. 2013 09:24 <-- editieren / zitieren --> Unities abgeben: Nur für pminf
Du hast vergessen den Index des Vektors nodeanz94inp anzugeben. Das Funktioniert bei mir aus einer Makro-Datei: *DIM,nodeanz94inp,array,1 *vread,nodeanz94inp,knotenanzarea94,txt (F8.0) *DIM,node94inp,array,nodeanz94inp(1) *vread,node94inp(1),knotenarea94,txt (F8.0) ------------------ MESHPARTS Tuning Your Simulation www.meshparts.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pminf Mitglied
Beiträge: 16 Registriert: 04.06.2013
|
erstellt am: 24. Sep. 2013 10:09 <-- editieren / zitieren --> Unities abgeben:
|
MESHPARTS Mitglied
Beiträge: 411 Registriert: 08.03.2013 Meshparts Software (https://www.meshparts.de/products) Ansys SolidWorks
|
erstellt am: 24. Sep. 2013 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für pminf
Super! Vieleicht noch eine kleine Anmerkung: Das Einlesen von Vektoren oder Matrizen aus Textdateien mit APDL ist relativ umständlich, weil man vorher die Anzahl der Zeilen und Spalten wissen muss. Wir haben bei uns eine benutzerfreundlichere Tcl-Funktion implementiert, die Matrizen aus Textdateien direkt einliest. Die Größe der Matrix muss nicht mehr apriori bekannt sein. In deinem Fall lauten die APDL-Befehle dann so: ~eui,'package require meshparts' ~eui,'meshparts::vread knotenarea94.txt knotenarea94' Mit ~eui lassen sich Tcl-Befehle aus APDL-Code ausführen. Die Funktion ist Teil der Meshparts Add-On Software für Ansys MAPDL (kann von http://www.meshparts.de/license heruntergeladen werden) und hat eine unbegrenzte Benutzungsdauer. Bei Lust und Laune einfach mal testen. Viele Grüße Alex ------------------ MESHPARTS Tuning Your Simulation www.meshparts.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|