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