| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | KISTERS 3DViewStation: verbesserte Effizienz durch optimierte Bedienoberfläche, eine Pressemitteilung
|
Autor
|
Thema: Ergebnisausgabe in externe Datei ueber Subroutinen (OHNE CAE) (2716 mal gelesen)
|
Nicksen Mitglied wissenschaftlicher Mitarbeiter
 
 Beiträge: 239 Registriert: 04.05.2007
|
erstellt am: 18. Sep. 2008 13:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo liebe Gemeinde, nachdem ich die Suchfunktion dieses Bereiches eine ganze Weile benutzt und noch nichts gefunden habe, moechte ich eine Frage in den Raum stellen, welche den einen oder anderen evtl. auch interessieren koennte. Die Sache ist eigentlich ganz einfach. Ich moechte waehrend einer Rechnung fuer einzelne Knoten oder auch Elemente bestimmte Ergebnisse in eine externe Datei schreiben. Diese Ausgabe moechte ich selbst formatieren, damit ich effektiv damit weiterarbeiten kann. Mustaine und andere verweisen sehr oft auf die Report- Funktion. Mir scheint jedoch, dass diese nur ueber CAE verwendbar ist. Auch die Ausgabe in das *.dat File ist zur Nachbearbeitung ungeeignet. Hier mein Wunsch: Ich wuerde gern meinen Job mit einer USER-Subroutine abschicken, welche nach jedem Inkrement mir die gewuenschten Ergebnisse sucht und in meine Datei ausgibt. Mit entsprechenden Zeilen im *.inp File muesste das ja irgendwie gehen. Im Manual hab ich gesehen, dass Ergebnisse ueber UVARM erreichbar sind. Diese Routine wird allerdings nur von UMESHMOTION aufgerufen, welche ich wiederum nicht brauche. Die Rechnung selbst und auch das Netz und das Material moechte ich NICHT BEEINFLUSSEN. Das rechnet alles wunderbar, aber ich haette am Ende gern eine Datei, die mir ueber bestimmte Dinge Auskunft erteilt, OHNE das CAE nutzen zu muessen. In meinen Augen kann das ja nicht so schwierig sein, denn der Verschiebungsvektor und die Verzerrungen und Spannungen sind ja nach der Loesung des Gleichungssystems vorhanden. Gibt es eine solche Moeglichkeit? Fuer Vorschlaege waere ich sehr dankbar. beste Grueße vom Nicksen ------------------ ========== == Dingsen == ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
milasan Mitglied
 
 Beiträge: 165 Registriert: 24.04.2007
|
erstellt am: 18. Sep. 2008 13:34 <-- editieren / zitieren --> Unities abgeben:          Nur für Nicksen
Hallo Nicksen, das geht über die Subroutine UEXTERNALDB. Die UEXTERNALDB wird für jedes Increment aufgerufen und gibt Dir die Möglichkeit mit externen Programmen (oder eigenen Dateien) zu kommunizieren. Innerhalb des Aufrufes von UEXTERNALDB kannst Du dann an Deine Daten kommen. Entweder mit einer weiteren Subroutine, z.B. USDFLD oder UVARM oder auch über ein Python-script, denn das Ergebnis eines fertig gerechneten Increments kann man schon aus der Odb auslesen. Gruß, M. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 3585 Registriert: 04.08.2005 Abaqus
|
erstellt am: 18. Sep. 2008 13:53 <-- editieren / zitieren --> Unities abgeben:          Nur für Nicksen
Woher hast du die Information dass UVARM nur in Verbindung mit UMESHMOTION funktioniert? Bei der Beschreibung der User Subroutine steht das nicht. Und wenn ich dem Link ganz unten zu den Beispielen im Verification Manual folge, kann ich dort auch keinen Zusammenhang zu UMESHMOTION erkennen. Insofern sehe ich nicht was gegen die Verwendung von UVARM spricht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nicksen Mitglied wissenschaftlicher Mitarbeiter
 
 Beiträge: 239 Registriert: 04.05.2007
|
erstellt am: 18. Sep. 2008 13:59 <-- editieren / zitieren --> Unities abgeben:         
Hi milasan, ueber ein python script??? Wie geht das? Ich meine, sind das dieselben Befehle, die man auch im CLI nutzt? Manche dieser Befehle funktionieren doch nur mit dem CAE oder? UVARM nutzen... Versteh ich das richtig, dass ich folgendes schreiben kann: SUBROUTINE UEXTERNALDB(...) call GETJOBNAME(job,Ljob) fout = 'job.out' open(101,FILE=fout,STATUS='UNKNOWN') write(101,*)'blabla' IF(LOP.EQ.3) THEN (LOP=3 => sollte Ende der Rechnung sein) SUBROUTINE UVARM(...) call GETVRN('S',...) UVAR(1) = ARRAY(1) UVAR(2) = ARRAY(2) ... 111 FORMAT(...) write(101,111) UVAR(1) ... Mal sehen, ob das klappt. Im *.inp File muss ich dann ja nur eine Zeile einfuegen: *USER OUTPUT VARIABLES <<<Anzahl>>> Danke erstmal. Ich probier das mal aus. @mustaine: Mein Fehler! Das war GETVRN. Sorry, zuviele Gedanken und zuwenig Uebersicht ;o) ------------------ ========== == Dingsen == ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 3585 Registriert: 04.08.2005 Abaqus
|
erstellt am: 18. Sep. 2008 14:24 <-- editieren / zitieren --> Unities abgeben:          Nur für Nicksen
Zitat: Original erstellt von Nicksen:
ueber ein python script??? Wie geht das? Ich meine, sind das dieselben Befehle, die man auch im CLI nutzt? Manche dieser Befehle funktionieren doch nur mit dem CAE oder?
Man kann mit Python oder C++ auch ohne CAE auf die ODB zugreifen und Daten lesen oder schreiben. Schau mal ins Scripting Users Manual (v6.8) Kapitel 9. Using the Abaqus Scripting Interface to access an output database und 10. Using C++ to access an output database Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
milasan Mitglied
 
 Beiträge: 165 Registriert: 24.04.2007
|
erstellt am: 18. Sep. 2008 14:33 <-- editieren / zitieren --> Unities abgeben:          Nur für Nicksen
Hallo Nicksen, der Aufruf eines Pythonscriptes sieht etwa so aus: -------------- subroutine uexternaldb(lop,lrestart,time,dtime,kstep,kinc) C INCLUDE 'ABA_PARAM.INC' character*256 command c command = "abaqus script=meinscript.py" c if (kstep.eq.XX) then if (lop.eq.YY) then call system(command) endif endif return end ----------- Im Pythonscript greifst Du dann einfach auf die Odb zu, wie im Scripting Handbuch beschrieben, ich glaube da sind auch Beispiele drin. So hast Du die Wahl und kannst den Zugriff auf die Daten in der Sprache programmieren, in der Du besser zurechtkommst: Fortran wie in Deinem Beispiel oder eben über Python. Gruß, M. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nicksen Mitglied wissenschaftlicher Mitarbeiter
 
 Beiträge: 239 Registriert: 04.05.2007
|
erstellt am: 18. Sep. 2008 14:36 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank an alle. Ich mach mich sofort mal drueber her. Klingt alles sehr vielversprechend. Riesendank fuer die mehr als schnelle Antwort!!! ------------------ ========== == Dingsen == ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nicksen Mitglied wissenschaftlicher Mitarbeiter
 
 Beiträge: 239 Registriert: 04.05.2007
|
erstellt am: 19. Sep. 2008 12:13 <-- editieren / zitieren --> Unities abgeben:         
So Leute, ich hab da mal was geschrieben und es funktioniert auch. Ich kann die Spannungen und die Verzerrungen ausgeben, genau wie ich es auch wollte. Im Anhang findet ihr eine moegliche inp-Datei und die Routine. Im Moment funktioniert das zwar nur fuer ein einziges Element, aber eine Erweiterung ist kein Problem. Die Loesung mag ein wenig umstaendlich erscheinen, denn ich speichere die Spannungen und Verzerrungen fuer jeden Integrationspunkt in ein Feld, das global zugaenglich ist und schreibe am Ende jeden Inkrementes dieses Feld in eine Datei heraus. Wer sich den Quellcode anschaut, sollte sich mal nicht von den vielen ueberfluessigen Format-Definitionen verwirren lassen. Ich habe eine alte bestehende Routine als "Geruest" genommen und noch nicht bereinigt. Wie gesagt, es funktioniert fuer Ergebnisse an Integrationspunkten. Meine weitere Frage ist nun: Wie klappt das mit den Knotenverschiebungen? Ich habe versucht, GETVRN in der UVAR aufzurufen und die Verschiebungswerte in ein weiteres Feld zu speichern. Da gab es eigenartige Effekte. Deshalb hab ich mir nach dem GETVRN Aufruf die Variable NODE ausgeben lassen. Ergebnis waren utopische Zahlen. Die Hilfe sagt, dass NODE die Knotennummer sein soll, aber mein Element hat nur 8 Knoten. In meiner Ausgabedatei erscheinen 5stellige Zahlen und der Durchlauf bricht mit Fehlern ab. Ist denn GETVRN ausschließlich aus der UMESHMOTION aufrufbar? Oder muss ich selbst die Variable NODE besetzen und so die Abfrage der Verschiebungswerte steuern? Die Philosophie ist mir im Moment nicht so ganz klar und vielleicht kann mir da einer von euch auf die Spruenge helfen. Dankbar waere ich natuerlich in jedem Fall. Und wenn die Routine dann ueberarbeitet und lauffaehig ist, stelle ich sie natuerlich auch zur Verfuegung. Kann ja sein, dass der ein oder andere daran Interesse hat. Grueße vom Nicksen ------------------ ========== == Dingsen == ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |