Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  ANSYS
  Schleife: Wechsel zwischen /solu und /post1

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: Wechsel zwischen /solu und /post1 (1752 mal gelesen)
climbon
Mitglied



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

Beiträge: 17
Registriert: 30.05.2018

erstellt am: 06. Jun. 2018 22:49    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

Guten Abend allerseits,

Ich habe eine DO Schleife, die zwischen dem preprocessor und der solution Umgebung hin und her wechselt. Der prinzipielle Aufbau sieht folgendermaßen aus (nicht der vollständige code nur die grobe Struktur):

*do,ii,1,schritte

/solu
bf,all,hgen,Last !Aufbringen der Wärmelast
time,ii

/post1
etable,schmelz,temp,
esel,s,etab,schmelz,0,25

/solu
(Hier muss anscheinend noch ein antype,,rest hin)
ealive,all

*enddo

Ziel des ganzen ist es zunächst die Elemente mit einer Wärmelast zu beaufschlagen, später im postprocessor die elementtemperaturen zu registrieren und später in der solution umgebung die entsprechenden Elemente unterhalb einer definierten Temperatur zum Leben zu erwecken. Dieses Vorgehen habe ich gemäß: https://sites.ualberta.ca/~wmoussa/AnsysTutorial/AT/BirthDeath/BirthDeath.html versucht umzusetzen.

Das Probelm das auftaucht ist, dass nach jedem Iterationsschritt der Lastschritt überschrieben wird und ich somit am Ende nur noch den letzten Schritt sehe.

Ich wäre sehr dankbar wenn mir jemand helfen könnte 

Grüße C.O.

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

arnd13
Mitglied
Dipl. Ing.


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

Beiträge: 735
Registriert: 05.11.2008

erstellt am: 07. Jun. 2018 13:42    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 climbon 10 Unities + Antwort hilfreich

Hi C.O.,

Ich verstehe zwar Dein Problem nicht im Detail, aber wenn es darum geht, dass Du die Ergebnisse der Zwischenschritte benötigst, die im finalen rst nicht mehr enthalten sind, kann ich folgendes Vorgehen vorschlagen:

- Nach jedem Zwischenschritt die aktuelle .rst in einem separaten Ordner speichern (Befehl: /copy,...) und die Namen dabei durchnummerieren.
- Am Ende können dann entweder diese rst zum jeweiligen Postprozessing wieder eingelesen werden (file,...),
- oder um das Ganze komfortabler zu gestalten können die einzelnen rst zu einem großen rst mit mehreren Loadsteps kombiniert werden (/Aux3; Combine,...; modify,..., weitere)

------------------
Gruß, A.

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

climbon
Mitglied



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

Beiträge: 17
Registriert: 30.05.2018

erstellt am: 08. Jun. 2018 00: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

Hallo arnd13 und danke für deine Antwort.

Dadurch, dass ich die solution Umgebung verlasse, muss ich auf die Ergebnisse des Loadsteps ii zurückgreifen.

Mittlerweile denke ich, dass es eigentlich sinnvoller ist erst garnicht diese Umgebung zu verlassen und die aktuellen Elementtemperaturen über den *VGET Befehl ausgeben lasse.

Hat da jemand ein Beispiel für mich wie ich das am besten hinbekomme?

Grüße C.O.

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

arnd13
Mitglied
Dipl. Ing.


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

Beiträge: 735
Registriert: 05.11.2008

erstellt am: 08. Jun. 2018 08:48    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 climbon 10 Unities + Antwort hilfreich

Wenn Du mit *vget auf Temperaturergebnisse zugreifen willst, musst Du in den /post1 wechseln. Das löst also nicht Dein Problem. Was spricht dagegen, die temporäre file.rst direkt nach dem solve-Befehl zu speichern? Diese kannst Du dann wann immer Du willst wieder einlesen (im Postprozessor).

------------------
Gruß, A.

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

arnd13
Mitglied
Dipl. Ing.


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

Beiträge: 735
Registriert: 05.11.2008

erstellt am: 12. Jun. 2018 12:48    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 climbon 10 Unities + Antwort hilfreich

Ein paar Codeschnipsel, die Dir eventuell weiter helfen:

Direkt nach dem Solve-Befehl die RST kopieren:

/solu
!...
solve
/copy,file,rst,,X:\Beispielpfad\Beispiel_,rst 
!!!!Der Filename kann auch mit einer Laufvariable verknüpft werden, z.B.file_%LS%, wobei LS eine Laufvariable einer *do-Schleife ist (Bsp.:*do,Ls,1,20). Die Ergebnisdateien im Ordner X:\Beispielpfad heißen dann file_1, file_2, file_3 usw. !!!

!Wenn Du die Ergebnisse dann später auslesen willst, folgende Befehle eingeben:
/post1
file,X:\Beispielpfad\file_%LS%,rst  !Ergebnisfile einlesen
set,last    !letzten Lastschritt (oder einen beliebigen anderen eingeben) auswählen
!...
plnsol,u,sum  !z.B. die Verformung plotten

------------------
Gruß, A.

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

climbon
Mitglied



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

Beiträge: 17
Registriert: 30.05.2018

erstellt am: 12. Jun. 2018 18:41    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

Danke für deine Antwort!

Ich habe wie du es beschrieben hast aus jedem Iterationsschritt eine Ergebnisdatei nach dem solve abgespeichert.

Später im Post1 rufe ich die jeweilige Datei auf mit:

/post1
file,RST/Ergebnisdatei_%ii%,rst

Wenn ich dann aber ein etable aus den Ergebnissen erstellen möchte:

...
etable,schmelz,temp,
esel,r,etab,schmelz,0,1500

kann er leider nicht auf die Temperaturen zugreifen oder sie "sind keine DOF der Lösung".

Hat da jmd eine Idee?

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

DeeJot
Mitglied
Berechner


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

Beiträge: 39
Registriert: 05.06.2012

ANSYS
CAELINUX

erstellt am: 13. Jun. 2018 10:44    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 climbon 10 Unities + Antwort hilfreich

arnd13
Mitglied
Dipl. Ing.


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

Beiträge: 735
Registriert: 05.11.2008

erstellt am: 13. Jun. 2018 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 climbon 10 Unities + Antwort hilfreich

DeeJot hat natürlich recht:
In der file.rst sind die strukturellen Ergebnisse gespeichert, die Temperaturen sind in der file.rth

Danke DeeJot!

------------------
Gruß, A.

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

climbon
Mitglied



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

Beiträge: 17
Registriert: 30.05.2018

erstellt am: 14. Jun. 2018 22:55    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

Danke soweit. Ich habe nun nach der solution schleife im post1 in jedem Schritt ii zwei Arrays erstellt, die zum einen die Knoten und dann die dazugehörigen Temperaturen in einem anderen array speichern:


*do,ii,1,schritte
/post1
file,RTH/Ergebnisdatei_%ii%,rth
set,last
allsel
vsel,s,,,2
NSLV,s,1
nsel,r,loc,z,toleranz,-toleranz-ebreite*ii
*get,ANZ_KNOTEN,nodes,,count !Aktuell selektiert
*dim,ARRAY_NODES_%ii%,ARRAY,ANZ_KNOTEN,1
*dim,ARRAY_TEMP_%ii%,ARRAY,ANZ_KNOTEN,1

*vget,ARRAY_NODES_%ii%,node,,nlist
*vget,ARRAY_TEMP_%ii%,node,,temp
*enddo

Meine Frage an euch:
- Wie kann ich jetzt für jeden erstellten Array die Knoten auswählen, die unter einer bestimmten Temperatur liegen? Ich würde also im ARRAY_TEMP prüfen welche Temperaturen unterhalb eines bestimmten Wert liegen, den Spalteneintrag y_i abspeichern und dann die entsprechenden Knoten aus dem ARRAY_NODES auswählen. Wie lässt sich das bewerkstelligen? Ich habe den gleichen Vorgang mit ETABLE versucht, aber leider ohne erfolg.

Danke im Vorausv 

EDIT:

Ich habe die Schleife mithilfe von woschs Beitrag hier im Forum anders aufgebaut. Kontennummer und Temperaturen sind nun in einem Array.

*do,ii,1,schritte

/post1
file,RTH/Ergebnisdatei_%ii%,rth
set,last
allsel
vsel,s,,,2
NSLV,s,1
nsel,r,loc,z,toleranz,-toleranz-ebreite*ii
!ESLN,s,1

*get,ANZ_KNOTEN,nodes,,count
*get,NODE_MIN,node,,num,min
*dim,ARRAY_NODETEMP_%ii%,ARRAY,ANZ_KNOTEN,2
NARB=NODE_MIN

*do,jj,1,ANZ_KNOTEN

ARRAY_NODETEMP_%ii%(jj,1)=NARB
ARRAY_NODETEMP_%ii%(jj,2)=temp(NARB)
NARB=ndnext(NARB)

*enddo
*enddo

[Diese Nachricht wurde von climbon am 15. Jun. 2018 editiert.]

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

arnd13
Mitglied
Dipl. Ing.


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

Beiträge: 735
Registriert: 05.11.2008

erstellt am: 15. Jun. 2018 12:50    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 climbon 10 Unities + Antwort hilfreich

Hi,

Der Befehl, den Du benötigst heißt *VMASK

Das Prinzip:
Du erstellst Dir einen Maskingvektor (Array) in dem Du die Ergebnisse der Abfrage, ob die Temp über einem bestimmten Wert liegt mit 0 bzw. 1 abspeicherst.
Diesen Maskingvektor kannst Du dann mit *VMASK auf den Knotenvektor (oder auf die Spalte der Gesamtmatrix, je nachdem wie das Array nun aufgebaut ist) anwenden und damit die Knoten auswählen, für die das zutrifft.

------------------
Gruß, A.

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

climbon
Mitglied



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

Beiträge: 17
Registriert: 30.05.2018

erstellt am: 15. Jun. 2018 15:06    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

Danke soweit, es geht immer weiter Richtung Lösung!

Ich habe wie beschrieben eine Abfrage über *IF eingebaut und einen Maskingvektor aufgebaut, siehe code.
Mir ist jetzt jedoch nicht ganz klar, wie ich über mit dem *VMASK Befehl mit dem Maskingvektor die Knoten des anderen Array selektieren kann. Die Dokumentation dafür ist sehr mager gehalten.

*do,ii,1,schritte

/post1
file,RTH/Ergebnisdatei_%ii%,rth
set,last
allsel
vsel,s,,,2
NSLV,s,1
nsel,r,loc,z,toleranz,-toleranz-ebreite*ii
!ESLN,s,1

*get,ANZ_KNOTEN,nodes,,count
*get,NODE_MIN,node,,num,min
*dim,ARRAY_NODETEMP_%ii%,ARRAY,ANZ_KNOTEN,2
*dim,MASKARR_%ii%,ARRAY,ANZ_KNOTEN,1
NARB=NODE_MIN

*do,jj,1,ANZ_KNOTEN

ARRAY_NODETEMP_%ii%(jj,1)=NARB
ARRAY_NODETEMP_%ii%(jj,2)=temp(NARB)
NARB=ndnext(NARB)

*if,ARRAY_NODETEMP_%ii%(jj,2),GT,500,THEN
MASKARR_%ii%(jj)=0
*else
MASKARR_%ii%(jj)=1
*endif

*enddo
*enddo

Grüße C.O.  

[Diese Nachricht wurde von climbon am 15. Jun. 2018 editiert.]

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

arnd13
Mitglied
Dipl. Ing.


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

Beiträge: 735
Registriert: 05.11.2008

erstellt am: 19. Jun. 2018 12:21    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 climbon 10 Unities + Antwort hilfreich

Mir ist nicht ganz klar, was Du mit selektieren meinst. Wenn Du die Knoten einfach nur auswählen willst, brauchst Du auch keinen Maskingvektor.

Knoten auswählen in der *do-Schleife:

!....
nsel,none

*do,jj,1,ANZ_KNOTEN

ARRAY_NODETEMP_%ii%(jj,1)=NARB
ARRAY_NODETEMP_%ii%(jj,2)=temp(NARB)
NARB=ndnext(NARB)

*if,ARRAY_NODETEMP_%ii%(jj,2),GT,500,THEN
nsel,a,node,,%ARRAY_NODETEMP_%ii%(jj,XY)%  !Für XY die Spalte eintragen, in der die Knotennummer steht, bzw. den Array einsetzen, in dem die Knotennummern stehen.
*endif

*enddo

Eleganter geht das sicher mit *vmask, aber da müsste ich mich im Detail erst mal wieder schlau machen. Das habe ich lange nicht mehr gebraucht.

------------------
Gruß, A.

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