Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Beispiel für UTEMP Subroutine ?

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
Autor Thema:  Beispiel für UTEMP Subroutine ? (2768 mal gelesen)
Cosmicchaos
Mitglied
Konstrukteur / Berechner


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

Beiträge: 49
Registriert: 24.08.2005

ABAQUS 6.8.1
CAE
16 GB RAM
Windows XP 64

erstellt am: 15. Mai. 2008 13:01    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 gerne ein Temperaturfeld auf ein Modell übertragen, dessen Netz nicht 100%ig mit den Daten übereinstimmt, die ich habe.
Als Lösung dachte ich da an eine Subroutine UTEMP mit dem Parameter Coord (das Datenformat, welches ich habe ist X,Y,Z,Temp). Ich denke das sollte dort verwendbar sein.
Leider habe ich noch gar keine Erfahrung mit den Subroutines machen dürfen (oder soll ich sagen müssen) und die Beispiele sind nicht so üppig. Kann mir jemand ein Bespiel geben, wie die Routine aussehen müsste um sie ins Inputfile einbinden zu können? Würde das dann als Predefined Field definiert werden?

2. Problem: Ähnlich dem ersten, nur habe ich ich jetzt eine Druckverteilung auf Knoten gegeben(X,Y,Z, Druck in Pa). Wie kann ich das implementieren?

Danke für eure Hilfe

Christian

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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 16. Mai. 2008 00:03    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 Cosmicchaos 10 Unities + Antwort hilfreich

Wahrscheinlich brauchst du für Problem 1 und 2 keine User Subroutine. Diese wären nämlich nur sinnvoll, wenn du analytische Formeln zur Berechnung der vorgegebenen Temperatur und Drücke an jedem Knoten hättest. Ich vermute mal du hast die Daten als Tabelle und nicht als Formel.


Die kritische Frage ist: Hast du ein komplettes Netz (Knoten & Elemente) oder nur Knoten (Punkte im Raum)?

Hast du ein Netz wird es leicht für dich. Dann nimmst du es und rechnest hiermit einfach eine therm. Analyse. Die Temperatur kannst hierbei einfach via *Initial Conitions oder *Boundary an den Knoten vorgeben. Es wird so gesehen also gar nichts gerechnet - du bekommst einfach nur ein ODB mit den Temperaturen an den Knoten.
Nun definierst du ganz normal deine mechan. Analyse. Über Predefined Field kannst du dann das Temperaturfeld aus dieser vorhandenen ODB dazulesen lassen. Wenn nun die Knotenpositionen und -nummern anders sind, musst du nur die Option 'Incompatible' aktivieren. Den Rest macht der Solver.


Hast du als Daten nur Knoten bzw. Punkte im Raum, dann hast du ein Problem. Jetzt musst du nämlich eine Interpolations- bzw. Extrapolationsalgorithmus definieren. Das kannst du entweder mit Fortran in einer User Subroutine oder mit Python machen. Mit Python deshalb, weil du das auch schon vor der Analyse machen könntest. Wenn du das neue Netz hast, kannst du ja die .inp schreiben und hast dort die neuen Knotenpositionen. Mit einem Pythonscript kannst du nun für jeden neuen Knoten die nächstliegenden Knoten im alten 'Netz' suchen und definieren wie die dort gegebenen Temperaturen die Temperatur am neuen Knoten ergeben.
Nun hättest du also für jeden neuen Knoten eine Zieltemperatur und könntest diese in die .inp schreiben (via *Temperature) oder als Discrete Field in CAE vorgeben.


Bei Problem 2 ist es ähnlich wie bei Problem 1. Hast du auch Elemente zwischen deinen Knoten, kannst du dieses Netz mit dem Druck beaufschlagen. Einziger Knackpunkt ist, dass ein Druck auf eine (Element-)Fläche gegeben wird und nicht an einem Knoten vorliegt. Dieses Problem könnte man aber mit einem Pythonscript leicht lösen. Man könnte pro Elementfläche die Druckwerte aller an dieser Fläche hängenden Knoten mitteln und dann aufbringen. Nach der Analyse könnte man die entstandenen Knotenverschiebungen mit Submodeling oder *Map Solution an ein neues Netz übergeben.

Schwieriger wird es wieder wenn du wieder keine Elemente hast. Jetzt müsstest du nämlich erstmal für jeden neuen Knoten einen Druckwert aus den alten Knoten Inter- bzw. Extrapolieren. Hast du dann für jeden neuen Knoten einen Wert, kannst du auch hier für jeder Elementfläche einen Druckwert berechnen, indem du die Drücke alle an der Fläche hängenden Knoten mittelst.


Ich vermute mal deine Daten kommen aus einer CFD Analyse. Da ich selbst mit diesen Problemen noch nicht konfrontiert war, sind das die Methoden die mir erstmal eingefallen sind. Wenn du Glück hast gibt es hier jemanden der diese Probleme auch schonmal hatte und vielleicht bessere Lösungen hat. Eventuell gibt es auch schon Konverter oder kleine Programme die diese Inter- bzw. Extrapolation übernehmen.


Falls du wenigstens an das Oberflächennetz (Knoten mit Dreieckselementen dazwischen) aus der CFD Analyse herankommst, hätte ich noch eine Idee wie du dieses Netz als Grundlage für ein neues Volumentetraedernetz verwenden könntest. Somit hättest auf dieser Oberfläche dieselben Knotenpositionen und vieles würde sich stark vereinfachen.

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

carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 16. Mai. 2008 09:00    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 Cosmicchaos 10 Unities + Antwort hilfreich


loeschen.pdf

 
Hallo, ich weiß zwar nicht was du genau vorhast, aber ich glaube ich hatte mal ein ähnliches Problem. Bei mir ging es darum die Materialrichtungen wie sie aus einer Strömungssimultion kommen von einem Tetraedernetz (bzw. Dreiecksnetz) auf ein beliebiges Netz in Abaqus zu mappen. Hierfür bin ich den Weg gegangen den Mustaine vorgeschlagen hat. Die Grundidee war, dass die Eigenschaften eines Abaquselementes über die relative Lage der Knoten zu den CFD-elementen definiert sind. Das heißt es wird im wesentlichen nur eine Funktion benötigt die erkennt ob ein Abaqusknoten in einem CFD-element liegt. Mit diesen Informationen (Zuordnung aller Abqusknoten zu einem CFD-elemnt) könnte dann eine Mittelung über die Abaqusknoten eines jeden Elementes vorgenommen werden, und diese mittlere Eigenschaft auf das Element geschrieben werden.

Wie's der Zufall will kann ich sogar zu dem Thema noch ein buntes Bildchen anhängen, welches vielleicht den Sachverhalt illustriert den ich beschreiben wollte.


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

Cosmicchaos
Mitglied
Konstrukteur / Berechner


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

Beiträge: 49
Registriert: 24.08.2005

ABAQUS 6.8.1
CAE
16 GB RAM
Windows XP 64

erstellt am: 27. Mai. 2008 16:51    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,

danke für die guten Tips. Habe an der Abaqus-Hotline eine ähnliche Vorgehensweise empfohlen bekommen. Das mit dem Druck habe ich jetzt etwas anders gelöst. Möchte das hier nur mal erklären, falls jemand mal das gleiche Problem hat.
Ich habe ein Netz (Knoten und Elemente) und kann den Positionen aus dem ASCI-File die entsprechende Knotennummer zuordnen (ist schon die halbe Miete).
Nur das Auflösen des Druckes ist etwas umständlich. Also:
1. Druck als Temperatur definiert auf Knoten aufbringen und in 1 step lösen lassen
2. Skin auf Modell legen (dadurch fliegt leider das Natz weg, deswegen Schritt 1 nötig)
3. Temperatur aus ODB (Schritt 1) aufbringen und an den Shell-Elementen die Element-Mitten-Temperaturen ausgeben lassen (POSITION=CENTROIDAL)
4. In eine Drucklast umwandeln und in Rechnung einbinden.

Da wäre wieder mein Problem: Wie geht's?

Habe jetzt die Mitten-"Temperaturen", was ja bei mir die Drücke sind, als ASCI-File (aus DAT-File) im Format  "Element-Nr.  Face-Nr.  Druck".
Wie bekomme ich daraus jetzt eine Druckverteilung ins Input-Deck?
Habe mit *DLOAD noch nichts gemacht. Muss ich da eine Subroutine schreiben oder geht das irgendwie leichter?

Vielen Dank

Christian

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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 27. Mai. 2008 22: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 Cosmicchaos 10 Unities + Antwort hilfreich

Es kann nie schaden eine Programmier- oder Scritsprache zu können...

Wenn das Format wirklich so ist, dann könnte das funktionieren:

Code:

datei = raw_input('Name der Datei (mit Endung): ')

input=file(datei,'r')
lines=input.readlines()
input.close()

output1=file('Surfaces.txt', 'w')
output2=file('Pressure.txt', 'w')

print >> output2, '*Dsload'

n = 0

for i in range(len(lines)):
    line = lines[i].split()
    print >> output1, '*Surface, Type=Element, Name=Surf-'+str(i+1)
    print >> output1, str(line[0])+', '+str(line[1])
    print >> output2, 'Surf-'+str(i+1)+', P, '+str(line[2])
    n = n + 1

output1.close()
output2.close()

print '\n'+str(n)+' Zeilen aus '+datei+' verarbeitet'


Inhalt in eine Datei mit der Endung .py legen und diese Datei in einen Ordner mit der anderen legen. Mit Command-Fenster in diesen Ordner gehen und die Datei aufrufen.
abaqus python dateiname.py

Das was dann 'raus kommt kannst du in deine .inp kopieren.

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