| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys |
Autor
|
Thema: mehrere Lastfälle per Do-Schleife (1914 mal gelesen)
|
magerhirn Mitglied Dipl.-Ing.
Beiträge: 25 Registriert: 15.10.2010
|
erstellt am: 15. Dez. 2010 00:43 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Experten, ich möchte mehrere Lastfälle per Do-Schleife nacheinander durchrechnen. Dabei treffe ich auf mehrere Probleme: zwar wird die Last per *set Befehl tatsächlich um 50mm weitergesetzt, allerdings wird das nicht bei der Berechnung berücksichtigt. Die Do-Schleife wird mit der korrekten Anzahl an Wiederholungen durchgeführt. Das Ergebnis ist dabei bei jedem Durchlauf dasselbe, obwohl die Lasteinleitungsstelle (LF) verändert wird.. Die input-file beginnt mit einem
Code:
FINISH PARSAV /CLEAR,NOSTART PARRES
... Das zweite Problem ist, dass das Ergebnis des *get-Befehls nur im ersten Durchlauf in die output-Datei geschrieben wird. Woran liegt das?Danke schon mal!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rico80634 Mitglied
Beiträge: 82 Registriert: 20.07.2010
|
erstellt am: 15. Dez. 2010 08:41 <-- editieren / zitieren --> Unities abgeben: Nur für magerhirn
In einer *do Schleife wird nur der erste Durchgang in den Output geschrieben. Wenn du Ergebnisse innerhalb der *do Schleife auslesen willst, musst du mit dem *vwrite Befehl arbeiten. Mehr dazu in anderen Forenbeiträgen. Jetzt weiss man natürlich nicht, was dein "/INPUT,'file_e1.mac',,'pfad',0,0" genau macht, vielleicht hierzu das Macro online stellen? Wenn du deine Variable LF neu definierst, also LF = LF+50 schreibst, heisst das noch lange nicht, dass die Last neu aufgebracht wird. Es ist NICHT so, dass der Ort der Lasteinleitung automatisch aktualisiert wird. Du musst die alte Last löschen, und dann die neue Last definieren. Hierzu kannst du dann den gleichen Befehl, der von LF abhängig ist, verwenden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magerhirn Mitglied Dipl.-Ing.
Beiträge: 25 Registriert: 15.10.2010
|
erstellt am: 15. Dez. 2010 08:52 <-- editieren / zitieren --> Unities abgeben:
hey danke für die schnelle Antwort erstmal! Die input-Datei beinhaltet die komplette Modell-, Netz- und Lastgenerierung, sowie die solution, als auch den postprocess. Dachte, die Variable LF wird dahingehend geändert, dass bei dem nächsten Schleifendurchlauf bei der Lastaufbringung der neue Wert der Variable genutzt wird? Hab hier noch so einen Schnipsel mit einer *vwrite-Anweisung herumliegen. Allerdings bekomme ich da die Fehlermeldung:"Label MAXE not recognized"
Code:
*cfopen,file,txt,,APPEND !Ergebnis-Datei öffnen *set,report !Definion Werte-Array *dim,report,,4,,,MAXEQV, !mit 4 Spalten pro Zeile *vget,report(1,1),node,max_eqv_node,MAXEQV !Einlesen der interessanten Werte *vget,report(1,2),node,max_eqv_node,MAXEQV,loc,X *vget,report(1,3),node,max_eqv_node,MAXEQV,loc,Y *vget,report(1,4),node,max_eqv_node,MAXEQV,loc,Z /nopr *vwrite,report(1,1),report(1,2),report(1,3),report(1,4) (4f6.3) *cfclos
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rico80634 Mitglied
Beiträge: 82 Registriert: 20.07.2010
|
erstellt am: 15. Dez. 2010 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für magerhirn
Fall du in Deiner zweiten Input-Datei ein RESUME oder CLEAR hast, wird LF natürlich auch zurückgesetzt. Es ist nicht so, dass dann nur das Unterprogramm behandelt wird, sondern immer die komplette ANSYS db. Übergib doch einfach dem Macro ein Argument, indem du file_e1,LF mit LF als Argument 1 eingibst. Dann innerhlab von file_e1 statt mit LF einfach mit arg1 arbeiten. Zu deinem *vwrite: du hast *vget falsch definiert, einfach nochmal in der Hilfe nachlesen. [Diese Nachricht wurde von Rico80634 am 15. Dez. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magerhirn Mitglied Dipl.-Ing.
Beiträge: 25 Registriert: 15.10.2010
|
erstellt am: 15. Dez. 2010 15:10 <-- editieren / zitieren --> Unities abgeben:
Danke für die Hilfe. LF=arg1 funktioniert wunderbar. Das Problem mit der Ausgabe habe ich jetzt etwas unelegant gelöst, indem ich ein /gopr in die Do-Schleife eingebaut habe. So wird jetzt das MAXEQV bei jedem Durchgang in die output-Datei geschrieben. Zwar nicht so schön wie das Speichern in ein Array und die Ausgabe über *vwrite aber es funktioniert. Was ist an dem *vget falsch definiert? max_eqv_node ist der Knoten, an dem MAXEQV auftritt.
Code: *get,max_eqv_node,sort,,imax
oder habe ich was übersehen?Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|