Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  ANSYS
  Schleife mit EMODIF - Problem mit Knotendefinition

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys
Autor Thema:  Schleife mit EMODIF - Problem mit Knotendefinition (4712 mal gelesen)
Arno07
Mitglied



Sehen Sie sich das Profil von Arno07 an!   Senden Sie eine Private Message an Arno07  Schreiben Sie einen Gästebucheintrag für Arno07

Beiträge: 57
Registriert: 02.12.2008

erstellt am: 04. Dez. 2009 14:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich möchte die Spannungen an Elementen abfragen und - falls die Spannungen einen Grenzwert überschreiten - die betroffenen Elemente mit dem EMODIF Befehl ändern. Realisieren möchte ich das mit einer Schleife deren Aufbau wie folgt aussieht:

- Elemente des Materials 2 selektieren
- Zählen der Elementanzahl und bestimmen der niedrigsten Elementnummer
- Schleife über die Elementanzahl
- Knoten des ersten Elements bestimmen
- Spannungen der Knoten bestimmen
- Falls die Spannungen kleiner 0 ist soll das betrachtete Element so belassen werden wie es ist.
- Falls die Spannung größer 0 aber kleiner als ein Grenzwert ist soll das betrachtete Element ebenfalls belassen werden wie es ist
- Falls die Spannung größer als der Grenzwert ist, dem Element die Materialeigenschaften  von Material 3 zuweisen.

Soweit ich das aus der Hilfe sehen konnte muss ich, um die Spannungen zu ermitteln auf die "Knotenebene" zurückgreifen, also für das jeweils betrachtete Element die Knoten wählen und von denen kann ich dann Spannungen abfragen da mit *GET und auch *VGET nur Spannungen an Knoten ausgelesen werden können.
Derzeit sieht das bei mir wie folgt aus: 

Code:
esel,s,mat,,2 ! Elemente auswählen
*get, eanzahl, elem,,count ! Elemente zählen 
*get, emin, elem, ,num,min ! niedrigste Elementnummer bestimmen
*do,i,1,eanzahl ! Schleife über die ausgewähleten Elemente
earb=emin ! Laufvariable
*get,enodes,elem, earb, node ! Knoten des im aktuellen Schleifendurchlauf ! betrachteten Elements
*get,ns,node,earb,s,1 ! Spannung am Knoten
*if,ns,lt,0,then ! Falls Spannung negativ
earb=elnext(earb) ! gehe zum nächsthöheren Element
*elseif,ns,gt,0,and,ns,le,zul_sigma,then !Falls Spannung positiv, aber kleiner als Grenzspannung
earb=elnext(earb)
*else
mat,3
type,3
emodif,all
*endif


Ich erhalte aber zum einen die Warnmeldung, dass ein angefragter Wert für einen Knoten nicht gespeichert wurde

Code:
Requested data is not stored for node 166                             
Line= *get,ns,node,earb,s,1                                   
The *GET command is ignored.
 

Und dann die Fehlermeldung

Code:
Element 706 does not have all of its required nodes defined.  The   
EMODIF command is aborted. 

Ich vermute das das Element 706 das erste betrachtete Element ist, die Schleife also schon beim ersten Durchlauf hängen bleibt. Kann es daran liegen, das ich Volumenelemente mit mehreren Knoten pro Element verwende und mit dem *get Befehl nur einer anstatt aller Knoten des Elments "angesprochen" wird? Falls ja, gibt es eine Möglichkeit die Knoten der Reihe nach abzuarbeiten, also pro Element?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wosch
Ehrenmitglied V.I.P. h.c.
Elektrotechniker im Ruhestand


Sehen Sie sich das Profil von wosch an!   Senden Sie eine Private Message an wosch  Schreiben Sie einen Gästebucheintrag für wosch

Beiträge: 2607
Registriert: 16.12.2004

Rechne zuerst ein Problem nach, für das Du eine analytische Lösung kennst.

erstellt am: 04. Dez. 2009 18:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Arno07 10 Unities + Antwort hilfreich

Stimmt vielleicht in folgender Zeile etwas nicht?
Code:
*get,ns,node,earb,s,1 ! Spannung am Knoten

Hier soll eine Knoteneigenschaft abgefragt werden und da wo die Knotennummer erwartet wird, steht eine Elementnummer.

------------------
Viel Erfolg wünscht
Wolfgang Schätzing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arno07
Mitglied



Sehen Sie sich das Profil von Arno07 an!   Senden Sie eine Private Message an Arno07  Schreiben Sie einen Gästebucheintrag für Arno07

Beiträge: 57
Registriert: 02.12.2008

erstellt am: 05. Dez. 2009 19:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für den Hinweis Herr Schätzing. Die von Ihnen zitierte Zeile ist in der Tat fehlerhaft. Ich habe meine Schleife jetzt mal
bezüglich der Knoten überarbeitet. Ich habe mehrere Knoten pro Element und an denen kann ich Spannungen abfragen. An Elementen dagegen - wie schon erwähnt - soweit ich weiß nicht.
Ich habe also zwei DO Schleifen:
Eine äußere über die Anzahl der betrachteten Elemente und eine innere über die Knoten des jeweils betrachteten Elements


Code:
esel, s, mat, , 2 ! Elemente auswaehlen
*get, eanzahl, elem, , count ! Zaehlen der Elemente
*get, emin, elem, , num, min ! Niedrigster Elementnummer den Namen emin geben
*do, i, 1, eanzahl ! Schleife über Elementanzahl
earb=emin ! Laufvariable Eemente
esel, r, elem, earb {i]! Aus den selektierten Elemente emin=earb waehlen  [/i]
nsle, s, all ! Alle Knoten des Elements emin=earb waehlen
*get, nanzahl, node, ,count ! Knoten des betrachteten Elements zählen
*get, nmin, node, ,num, min ! Niedrigster Knotennummer den Namen nmin geben
*do, j, 1, nanzahl ! Schleife über alle Knoten des betracheten Elements
narb=nmin ! Laufvariable Knoten
nsel, r, node, narb ! Aus den selektierten Knoten nmin=narb waehlen
/POST1 ! Wechseln in Postprozessor zwecks Spannungsabfrage
*get, ns, node, narb, s, 1 ! Spannung am Knoten  nmin=narb abfragen
*if, ns, lt, 0, then ! Falls Spannung kleiner 0
narb=ndnext(narb) ! Betrachte den nächsthöheren Knoten (aus der selektierten Gruppe)
*cycle ! und starte den nächsten Durchlauf
*elseif, ns, lt, zul_sigma, then ! Falls Spannung kleiner als zul_sigma
narb=ndnext(narb) ! Betrachte den nächsthöheren Knoten (aus der selektierten Gruppe)
*cycle ! und starte den nächsten Durchlauf
*else
/PREP77 ! Wechsel zurück in PREP7
mat, 3
type, 3
emodif, earb ! Modifiziere das betrachtete Element und
*exit ! beende die DO Schleife, da das aktuell betrachtete Element modifiziert wurde
*endif ! Beendigung der If Abfrage
*enddo ! Beendigung der DO Schleife über Knoten eines (des aktuell betrachteten) Elements
earb=elnext(earb) ! Element mit der nächst höheren Elementnummer betrachten und DO Schleife erneut beginnen
*enddo                              

Diese Abfolge erscheint mir zumindest als sinnvolles Vorgehen.
Ich betrachte die Elemente einzeln nacheinander und durch die zweite (innere) DO Schleife werden alle Knoten des jeweiligen Elements abgearbeitet. Leider bekomme ich zwei nicht endende Warmeldungen, so ich ANSYS "gewaltsam", also durch schließen des Output Fensters beenden muss.

Diese beiden Warnmeldungen erhalte ich:


Code:
*** WARNING ***                       
For item= NODE, the component ( narb) is invalid.                 
The NSEL command is ignored.                                       

*** WARNING ***                       
Requested data is not stored for node 193.                           
Line= *get, ns, node, narb, s, 1                                     
The *GET command is ignored.


 

Die Knotennummer ändert sich dabei nicht, sondern bleibt immer bei 193.

Der NSEL Befehl hat laut Hilfe folgenden Syntax
NSEL,Type,Item,Comp,Vmin,Vmax,Vinc,Kabs

Comp steht dabei für die Knotennummer. Diese ist bei mir aber doch gleich narb, sollte also keine Warnmeldung/Fehler produzieren.
Beim *get Befehl wird dann ja offenbar die Knotennummer 193 als dem Knoten narb zugehörig identifiziert - wenn der zugehörige Wert auch nicht gespeichert wird/werden kann (Warum auch immer?).
Ich müsste dann doch weiter oben bei der Selektion des Elements (earb) die gleiche Warnmeldung/Fehler erhalten - bekomme ich aber nicht. "earb" wird also offenbar richtig erkannt, warum aber narb dann nicht? Wer weiß Rat?

Danke
Arno 
   

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ChristophN
Mitglied
Berechnungsingenieur


Sehen Sie sich das Profil von ChristophN an!   Senden Sie eine Private Message an ChristophN  Schreiben Sie einen Gästebucheintrag für ChristophN

Beiträge: 773
Registriert: 13.12.2008

erstellt am: 06. Dez. 2009 12:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Arno07 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Arno07:
Comp steht dabei für die Knotennummer.

Nein, VMIN steht für die Nummer, keine Ahnung, warum das bei den Elementen funktioniert!?
Um den zweiten Fehler zu beheben (der ist nicht schlimm, kostet aber viel Rechenzeit), musst du nach dem nsle, s, all noch ein nsel, r, s, 1 einfügen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wosch
Ehrenmitglied V.I.P. h.c.
Elektrotechniker im Ruhestand


Sehen Sie sich das Profil von wosch an!   Senden Sie eine Private Message an wosch  Schreiben Sie einen Gästebucheintrag für wosch

Beiträge: 2607
Registriert: 16.12.2004

Rechne zuerst ein Problem nach, für das Du eine analytische Lösung kennst.

erstellt am: 06. Dez. 2009 12:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Arno07 10 Unities + Antwort hilfreich

Es lassen sich mehrere Fehler erkennen:
narb=nmin ist eine Startwertvorgabe, muss also vor Schleifenbeginn stehen.
Gleiches gilt für earb=emin
nsel, r, node, narb  muss richtig heißen: nsel,r,node,,narb

Warum werden eigentlich nicht nur alle Knoten abgefragt, wenn eine Knotenlösung existiert?

------------------
Viel Erfolg wünscht
Wolfgang Schätzing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arno07
Mitglied



Sehen Sie sich das Profil von Arno07 an!   Senden Sie eine Private Message an Arno07  Schreiben Sie einen Gästebucheintrag für Arno07

Beiträge: 57
Registriert: 02.12.2008

erstellt am: 06. Dez. 2009 22:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für ihre/eure Antworten/Hilfe. Leider bin ich trotzdem noch nicht weitergekommen. Ich habe die beiden Startwertvorgaben/Laufvariablen vor die jeweilige DO-Schleife gezogen und in der nsel Befehlszeile noch ein Komma eingefügt, so daß narb jetzt an der Stelle von VMIN steht anstatt Comp. Gleiches habe ich in der esel Befehlszeile getan. Außerdem habe ich wie von ChristophN vorgeschlagen noch ein nsel, r, s, 1 eingefügt, so daß mein Code jetzt wie folgt aussieht:


Code:
esel, s, mat, , 2 ! Elemente auswaehlen
*get, eanzahl, elem, , count ! Zaehlen der Elemente
*get, emin, elem, , num, min ! Niedrigster Elementnummer den Namen emin geben
earb=emin ! Laufvariable Eemente
*do, i, 1, eanzahl ! Schleife über Elementanzahl
esel, r, elem, ,earb ! Aus den selektierten Elemente emin=earb waehlen 
nsle, s, all ! Alle Knoten des Elements emin=earb waehlen
*get, nanzahl, node, ,count ! Knoten des betrachteten Elements zählen
*get, nmin, node, ,num, min ! Niedrigster Knotennummer den Namen nmin geben
narb=nmin ! Laufvariable Knoten
*do, j, 1, nanzahl ! Schleife über alle Knoten des betracheten Elements
nsel, r, node, , narb ! Aus den selektierten Knoten nmin=narb waehlen
nsel, r, s, 1
/POST1 ! Wechseln in Postprozessor zwecks Spannungsabfrage
*get, ns, node, narb, s, 1 ! Spannung am Knoten  nmin=narb abfragen
*if, ns, lt, 0, then ! Falls Spannung kleiner 0
narb=ndnext(narb) ! Betrachte den nächsthöheren Knoten (aus der selektierten Gruppe)
*cycle ! und starte den nächsten Durchlauf
*elseif, ns, lt, zul_sigma, then ! Falls Spannung kleiner als zul_sigma
narb=ndnext(narb) ! Betrachte den nächsthöheren Knoten (aus der selektierten Gruppe)
*cycle ! und starte den nächsten Durchlauf
*else
/PREP77 ! Wechsel zurück in PREP7
mat, 3
type, 3
emodif, earb ! Modifiziere das betrachtete Element und
*exit ! beende die DO Schleife, da das aktuell betrachtete Element modifiziert wurde
*endif ! Beendigung der If Abfrage
*enddo ! Beendigung der DO Schleife über Knoten eines (des aktuell betrachteten) Elements
earb=elnext(earb) ! Element mit der nächst höheren Elementnummer betrachten und DO Schleife erneut beginnen
*enddo                               

Als Folge haben sich die Warnmeldungen leider nicht um zwei verringert, sondern um zwei erhöht. Und wieder muss ich ANSYS "gewaltsam beenden.

*** WARNING ***                        
The requested s data is not available.
The NSEL command is ignored.   

*** WARNING ***                        
Requested data is not stored for node 194.                             
  Line= *get, ns, node, narb, s, 1                                     
  The *GET command is ignored.                                          

*** WARNING ***                        
Specified range of 0 to 0 is not permitted. 
The NSEL command is ignored.                                                               

*** WARNING ***                        
Node 0 of *GET command is undefined.                                   
  Line= *get, ns, node, narb, s, 1                                     
  The *GET command is ignored. 

Wenn ich die Befehlszeile
nsel, r, s, 1        
rauslasse verschwindet auch die erste Warnmeldung. Anscheinend liest ANSYS den Knoten narb als 0 obwohl in der *GET Befehlszeile  Knoten 194 angesprochen wird?! Ich verstehe gerade nicht was los ist                                    


@wosch: Wenn ich alle Knoten abfrage müsste ich wohl bei erfülltem Kriterium (Spannung oberhalb einer Grenzspannung) mit ESLN das zum  Knoten zugehörige Element selektieren und dann den EMODIF Befehl anwenden. Da hat sich mir aber die Frage gestellt wie ich vorgehe wenn zum Beispiel Knoten 2 eine 8-knotigen Elements das Kriterium erfüllt. Dann müsste ich das zugehörige Element selektieren, modifizieren und dann aber 6 Knoten überspringen um zum nächsten Element zu kommen. Dort ist es dann vielleicht Knoten 7 der das Kriterium erfüllt usw. Vielleicht würde es durch wegselektieren der Knoten gehen, aber wann sollten die wegselektiert werden?   

[Diese Nachricht wurde von Arno07 am 06. Dez. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wosch
Ehrenmitglied V.I.P. h.c.
Elektrotechniker im Ruhestand


Sehen Sie sich das Profil von wosch an!   Senden Sie eine Private Message an wosch  Schreiben Sie einen Gästebucheintrag für wosch

Beiträge: 2607
Registriert: 16.12.2004

Rechne zuerst ein Problem nach, für das Du eine analytische Lösung kennst.

erstellt am: 07. Dez. 2009 09:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Arno07 10 Unities + Antwort hilfreich

Was die von ChristophN empfohlene Anweisung bewirken soll, kann ich nicht verstehen.

Ein Fehler in den Schleifen lässt sich sinnvoll nur mit einem Testbeispiel finden. Normalerweise geht man dabei so vor, dass man die Schleifen schrittweise mit vorgegebenem Schleifenindex abarbeitet und auf jede Fehlermeldung sofort reagiert.

------------------
Viel Erfolg wünscht
Wolfgang Schätzing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ChristophN
Mitglied
Berechnungsingenieur


Sehen Sie sich das Profil von ChristophN an!   Senden Sie eine Private Message an ChristophN  Schreiben Sie einen Gästebucheintrag für ChristophN

Beiträge: 773
Registriert: 13.12.2008

erstellt am: 07. Dez. 2009 10:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Arno07 10 Unities + Antwort hilfreich

Der Befehl selektiert alle Knoten, für die die erste Hauptspannung als Ergebnis vorliegt. Dann meckert ANSYS nicht mehr, dass für den ausgewählten Knoten kein Ergebnis vorliegt, denn das hat man ausgeschlossen. Ich würde den Befehl jedoch ein wenig anders plazieren, eben so, wie ich es geschrieben hatte und nicht mit in die Schleife.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz