Kennt jemand einen FDTD solver, welcher mit tetraedischen meshes
arbeiten kann? Der sollte open source sein. Bisher nutze ich openems,
aber das meshing ist eine qual. Wenn ich komplexere Strukturen habe
werden die meshlinien nach dem smoothing immer zu klein und der
Zeitschritt dadurch extrem klein.
Ich habe schon diverse tools ausprobiert. Pyems war bisher am besten,
hat aber keine komplexen Strukturen das gleiche Problem.
Lars M. schrieb:> Kennt jemand einen FDTD solver, welcher mit tetraedischen meshes> arbeiten kann?
Tetraeder sind typisches FEM-Mesh, also Finite-Elemente-Solver im
Frequenzbereich wie HFSS oder CST. Bei FDTD gibt's das Würfel-Mesh das
du bereits kennst.
Hochfrequenz-FEM-Solver als Freeware sind mir keine bekannt, aber von
Ansys oder CST gibt es kostenlose Studentenversionen die in der
Projektgröße limitiert sind.
Einige Hersteller bzw. Hochschulgruppen haben mit FDTD Subgrid
experimentiert, also lokal verfeinertem FDTD-Mesh, aber soweit mir
bekannt ist hat es das nie zur Produktreife geschafft.
Simulant schrieb:> also Finite-Elemente-Solver im Frequenzbereich wie HFSS oder CST.
Ergänzung: die Tools dieser Hersteller haben viele unterschiedliche
Solvermethoden, unter anderem eben auch FEM-Solver.
Bei den Freeware-Solvern findet man ganz überwiegend FDTD, das ist
relativ einfach zu implementieren vom Meshing und vom Solvercode. Die
Herausforderung ist dann, dass es auch SCHNELL wird.
Simulant schrieb:> Hochfrequenz-FEM-Solver als Freeware sind mir keine bekannt, aber von> Ansys oder CST gibt es kostenlose Studentenversionen die in der> Projektgröße limitiert sind.
Doch die gibt es. Alexandre Halbach hat sparselizard programmiert. Ich
habe da aufgrund Zeitmangel nicht mehr weiter reingeschaut. Da muss man
allerdings die Formulierung selber machen. Insgesamt scheint das eine
tolle Arbeit zu sein.
Openems kenne ich schon und Thorsten Liebig hat das ziemlich nutzbar
gemacht auch wenn das Prinzip einem eben manchmal in die Karten spielt.
Insgesamt finde ich es ganz toll, dass die beiden das auch unter einer
freien Lizenz weiterpflegen. Das ist scheinbar nach deren Promotion
komplett Freizeit, die draufgeht.
Ich hatte ja irgendwann mal die Idee, dass man für numerical engineering
mal eine Open Source foundation oder Allianz bildet, die fundraising
betreibt und Kommunikation zwischen den tools erleichtert. Das ist ja
ein Flickenteppich.
Mit anderen gebieten hat das bisher auch funktioniert und kleine
unternehmen können oder wollen such CST und Konsorten eben nicht
leisten. Schon gar nicht diese dummen abo Modelle.
Niemand. Will. Tetraedernetze.
Lerne die blockstrukturierten Netze zu lieben oder lass es. Netze und
Solver müssen übrigens nicht aus dem gleichen Programmpaket kommen. Das
sind sehr einfache Datenstrukturen, für die sich leicht Konvertierer
schreiben lassen.
Walter T. schrieb:> Niemand. Will. Tetraedernetze.
Du redest jetzt aber nur von FDTD, oder? Die Tetraeder bei FEM sind
schon hilfreich, je nach Aufgabenstellung. Es gibt für beides (FDTD und
FEM) gute Gründe, wo die jeweilige Methode besonders vorteilhaft und
effizient ist. Und dann gibt's noch einen ganzen Strauß anderer Methoden
wie MoM mit Oberflächenmesh der Leiter.
FDTD ist bei Freeware beliebt, weil die mathematischen Grundlagen an
einem Vormittag in der Vorlesung angehandelt werden können, und am
nächsten Tag in der Übung wird's gleich in Matlab ausprobiert. Das ist
einfach und enstprechend starten viele Leute daraus ein Projekt.
Lars M. schrieb:> Mit anderen gebieten hat das bisher auch funktioniert und kleine> unternehmen können oder wollen such CST und Konsorten eben nicht> leisten. Schon gar nicht diese dummen abo Modelle.
Als Anwender zahlt man mit Arbeitszeit beim Benutzen der freien Solver,
weil alles länger dauert sofern es überhaupt möglich ist.
Ich verfolge die Entwicklung eines kommerziellen FDTD Solvers (Empire
XPU) und da stecken zwei Jahrzehnte Entwicklung eines ganzen Teams drin.
Allein das Meshing (was dich bei der Freeware ärgert) sind dort einige
Mannjahre an Entwicklungsarbeit und dafür findet es nun automatisch
einen sehr guten Kompromiss aus Auflösung und Zeitschritt auch bei
komplexen Geometrien mit 100 Millionen Zellen.
Simulant schrieb:> Allein das Meshing (was dich bei der Freeware ärgert) sind dort einige> Mannjahre an Entwicklungsarbeit und dafür findet es nun automatisch> einen sehr guten Kompromiss
Woher hast du die information. Die Firma hat auch keine Mitarbeiterzahl
wie US unternehmen und ist eher Mittelstand.
Simulant schrieb:> Du redest jetzt aber nur von FDTD, oder?
Nö, das zieht sich quer durch die Disziplinen. Bei FEM ist es auch eine
Katastrophe, bei BEM auch (bei letzterem sind es dann Dreiecke).
Lars M. schrieb:> Woher hast du die information. Die Firma hat auch keine Mitarbeiterzahl> wie US unternehmen und ist eher Mittelstand.
Ich kenne die Entwickler gut, weil ich seit 20 Jahren mit diversen
Anbietern im Bereich der HF-EM Simulation zusammenarbeite. Da bekommt
man den Entwicklungsaufwand mit, der bei manchen vermeintlich trivalen
Details nötig wird.
Hat denn einer der simulationsgurus hier vielleicht Hinweise, wie das
meshing gut automatisiert werden kann um den kommerziellen solvern im
nichts nachstehen?
Aus meiner Perspektive als Nutzer kann ich was zum Ergebnis beschreiben:
es werden zuerst alle Kanten erkannt und in eine Liste gepackt. Dabei
wird unterschieden nach Objekttypen (gerade Kante vs. runde Objekte),
deren Auflösungen können unterschiedlich gewichtet werden.
Über die Liste der potentiellen Meshlinien läuft dann ein iterativer
Optimierer, der Kompromisse aushandelt wo mit begrenzter Anzahl an
Meshlinien nur geringe Abweichungen zu den exakten Werten aus der Liste
entstehen und dabei die kleinen Abstände (kleine Zeitschritte) möglichst
vermieden werden. Das löst u.a. das Problem von zufällig sehr eng
benachbarten Kanten von Strukturen, die unkritisch sind und die man zu
einer ausgemittelten Meshlinie zusammenfassen kann.
Als Nutzer kann man dann noch harte oder weiche Limits in jede
Raumrichtung angeben, welcher Abstand der Meshlinien nicht
unter/überschritten werden soll. Das nutze ich zB bei Simulation von PCB
wo bestimmte Bereiche nicht HF-relevant sind aber trotzdem mit moderater
Auflösung im Modell enthalten sein sollen. Oder umgekehrt hohe Auflösung
in Bereichen erzwingen wo das automatische Mesh zu grob war.
Zeig mal ein Beispiel der Struktur, wo dein Mesh Probleme macht, dann
kann man vielleicht konkretere Vorschläge machen.
Nachtrag: was ich für komplexe Modell auch sehr intensiv nutze sind
individuelle Mesh-Steuerungen für einzelne Gruppen (z.B. Layer). Das ist
eigentlich unverzichtbar bei komplexen FDTD-Modellen, damit man als
Anwender dem Mesher helfen kann welche Strukturen abweichend von den
Defaults besonders grob oder fein gemesht werden sollen.
Lars M. schrieb:> Nochmal ganz anders gefragt. Könnte man die zu kleinen meshzellen> nicht> so lange löschen, bis die kleinste metallauflösung erreicht ist?
Deinen Vorschlag verstehe ich nicht. Zeig bitte mal ein konkretes
Beispiel.
Lars M. schrieb:> Könnte man die zu kleinen meshzellen nicht> so lange löschen, bis die kleinste metallauflösung erreicht ist?
Nein. Ein Element pro Strukturbreite reicht nicht.
Walter T. schrieb:> Lars M. schrieb:>>> Könnte man die zu kleinen meshzellen nicht>> so lange löschen, bis die kleinste metallauflösung erreicht ist?>> Nein. Ein Element pro Strukturbreite reicht nicht.
Mit kleinster metallauflösung meine ich sowas wie kleinste Wellenlänge /
20, so wie es von vielen solvern empfohlen wird.
Lars M. schrieb:> Mit kleinster metallauflösung meine ich sowas wie kleinste Wellenlänge /> 20, so wie es von vielen solvern empfohlen wird.
Das ist ja nur die OBERGRENZE für den Meshabstand. Durch die Geometrie
kann es notwendig sein, auch sehr viel kleinere Abstände aufzulösen.
Beispiel Leitungsbreiten, da würde ein falsches Setzen der Meshlinien zu
einer anderen wirksamen Leitungsbreite führend und entsprechend ungenau
wäre das Ergebnis.
Also nochmals, zeig mal die konkrete Aufgabenstellung um die es DIR
aktuell geht.
Gutes Vernetzen braucht Erfahrung. Einen guten Netzgenerator zu
schreiben noch mehr.
Lars M. schrieb:> Mit kleinster metallauflösung meine ich sowas wie kleinste Wellenlänge /> 20, so wie es von vielen solvern empfohlen wird.
Wenn die Strukturbreiten der Komponenten kleiner sind, als die Netzgüte
es aufgrund der Wellenlänge erfordert, passt das aber auch wieder nicht.
Dann braucht man Spezialelemente oder Netzverfeinerung. (Ich nutze mal
den Begriff "Elemente" für die programmierte räumlichen
Differenzialgleichungen, egal ob FEM, FDM, BEM oder FDH.)
Außerdem ist die Wellenlänge oder die Frequenz ja oft erst das Ergebnis
der Simulation. Da beisst sich die Katze in den Schwanz.
Edit: Hoppla, hatte vergessen, dass es um time domain geht. Da trifft
der letzte Satz ja nicht zu. Da ist die Wellenlänge ja eine Frage der
initial gewählten Auflösung.
Walter T. schrieb:> Außerdem ist die Wellenlänge oder die Frequenz ja oft erst das Ergebnis> der Simulation. Da beisst sich die Katze in den Schwanz.
Nein, bei der hier diskutierten FDTD-Simulation für Hochfrequenz
zumindest DIESER Aspekt einfach. Man setzt man für das Meshing die
höchste Frequenz an im Frequenzbereich, den man simuliert.
Dabei kann man für große Auflösung durchaus auf lambda/10 runtergehen.
Beim von mir verwendeten Solver ist der Default bei 15 Zellen/Lamda. Die
geometrieabhängige Auflösung ist per Default auf 4 Zellen pro
Leiterbreite gesetzt, die Dicke der Leiter wird mit 0 oder 1 Zelle
aufgelöst.
Simulant schrieb:> Lars M. schrieb:>> Mit kleinster metallauflösung meine ich sowas wie kleinste Wellenlänge />> 20, so wie es von vielen solvern empfohlen wird.>> Das ist ja nur die OBERGRENZE für den Meshabstand. Durch die Geometrie> kann es notwendig sein, auch sehr viel kleinere Abstände aufzulösen.
Um das nochmal zu verdeutlichen als Beispiel ein Rillenhorn
(Hohlleiterantenne) mit grobem Mesh. Da ist zwar die Anzahl der Zellen
pro Wellenlänge eingehalten, aber es kommt trotzdem zu Geometriefehlern
im Form ungewollter Metallbrücken.
Es ist deshalb wichtig, beide Kriterien zu erfüllen: Geometrie und
Wellenlänge müssen BEIDE ausreichend fein aufgelöst werden.
Als Beispiel für planare Strukturen habe ich noch das Mesh einer
PCB-Antenne dargestellt. Man erkennt blauen Meshlinien, das sind
Geometriekanten die erkannt wurden. Und dazwischen sind die roten
Meshlinien die der Bauregel "4 Zellen pro Leiterbreite" folgen.
Man erkennt dort auch eine unerwünschte Stelle, wo zwei Geometriekanten
von Antenne und Via zufällig eng benachbart liegen, siehe roter Pfeil.
Das würde zu einem kleinen Zeitschritt führen, solche eng benachbarten
Meshlinien würde man ggf zusammenfassen wollen.
Ui. Das sind ja üble Netze. Womit wurden die erzeugt?
(Gefühlt würde ich behaupten: Bis auf Strukturoptimierung habe ich
solche Minecraft-Netze die letzten 20 Jahre nicht mehr gesehen.)
Walter T. schrieb:> Ui. Das sind ja üble Netze. Womit wurden die erzeugt?
Empire XPU, das ist der aktuell schnellste FDTD EM-Solver weltweit.
Mir scheint, auch wegen deiner Kommentare zum Tetraedermesh, dass du mit
den EM-Solvern in der Hochfrequenztechnik nicht vertraut bist. Ich
arbeite seit über 20 Jahren auf dem Gebiet und kenne den Stand der
Technik ganz gut. Es geht hier nicht um Mechanik, dort mögen ganz andere
Meshes sinnvoll sein.
Simulant schrieb:> Mir scheint, auch wegen deiner Kommentare zum Tetraedermesh, dass du mit> den EM-Solvern in der Hochfrequenztechnik nicht vertraut bist.
Bin ich auch nicht. Als ich das letzte Mal etwas mit HF simuliert habe,
war FDM noch viel zu langsam und BEM das Maß aller Dinge. Ansonsten eben
viel FEM und etwas CFD über FDM.
Simulant schrieb:> Walter T. schrieb:>> Ui. Das sind ja üble Netze. Womit wurden die erzeugt?>> Empire XPU, das ist der aktuell schnellste FDTD EM-Solver weltweit.
Klassisch unterscheidet man zwischen Präprozessor, Solver und
Postprozessor, wobei die meisten Programmpakete alles drei beinhalten.
Schon immer war es so, dass die Programmpakete mit den besten Solvern
die übelsten Netzgeneratoren (Teil des Preprocessors) hatten.
Ich gehe davon aus, dass sich das bei Open Source eher noch verschärft
hat, weil die Doktoranden für neue Solver-"Elemente" belohnt werden und
nicht für bessere Netzgeneratoren. Die Postdocs hätten wohl die
Erfahrung, bessere Netzgeneratoren zu entwickeln, aber da gehen die
Anreize auch in komplett andere Richtungen.
Wie das bei kommerziellen Paketen momentan aussieht, weiß ich nicht. Man
bleibt ja schon allein wegen der riesigen Kosten immer in seiner
Filterblase.
Walter T. schrieb:> Schon immer war es so, dass die Programmpakete mit den besten> Solvern die übelsten Netzgeneratoren (Teil des Preprocessors) hatten.
Kann man in der HF-Feldsimulation nicht trennen, weil jeder Solver eine
sehr spezielle Meshkonfiguration benötigt. Bei FEM sind das Tetraeder,
beim hier diskutierten FDTD ein Rechteckmesh. Das ist hochoptimiert, das
schlechte Mesh am Beispiel des Rillenhorns war von mir bewusst so
gewählt um Lars zu zeigen wo die Grenzen des groben Mesh zu falschen
Ergebnissen führen.
> Wie das bei kommerziellen Paketen momentan aussieht, weiß ich nicht.
Stimmt :-)
Da dominiert für 3D-Meshing FEM mit dem Tetraeder-Mesh, das du nicht
magst.
Das hier diskutierte FDTD mit dem dafür erforderlichen Rechteckgitter
ist in kommerziellen Tools vor allem für Antennensimulationen
gebräuchlich. Bei elektrisch großen Modellen (viele Wellenlängen in alle
Raumrichtigen) explodiert bei FEM der Speicherbedarf während er bei FDTD
linear mit der Anzahl der Meshzellen skaliert.
Simulant schrieb:> FDTD mit dem dafür erforderlichen Rechteckgitter
Verstehe ich das richtig: "Rechteck" = Rechteck?
"Rechteck" ist kein Slang für eine x-beliebige bilineare Abbildung?
Simulant schrieb:> Empire XPU, das ist der aktuell schnellste FDTD EM-Solver weltweit.
Der scheinbar auch einen Klasse netzgenerator hat. Kann ich mir trotzdem
nicht leisten. Was macht Empire denn im Gegensatz zu openems so
schnell? Also was machen die so super innovatives, was alle anderen
nicht machen?
Walter T. schrieb:> Simulant schrieb:>> FDTD mit dem dafür erforderlichen Rechteckgitter>> Verstehe ich das richtig: "Rechteck" = Rechteck?> "Rechteck" ist kein Slang für eine x-beliebige bilineare Abbildung?
Bei den kommerziellen Solver sind's tatsächlich Würfel in einem
karthesischen Koordinatensystem.
https://de.wikipedia.org/wiki/Finite_Difference_Time_Domain
Wer sich eine spezielle Lösung für ein spezielles Problem selbst baut
mag abweichende Koordinatensysteme nutzen ... da stecke ich nicht drin.
Mein Thema sind die "universellen" Solver.
Lars M. schrieb:> Was macht Empire denn im Gegensatz zu openems so> schnell? Also was machen die so super innovatives, was alle anderen> nicht machen?
Die erzeugen "on the fly" einen optimerten Solver für das jeweilige
Problem für die jeweilige CPU und rechnen viele Zeitschritte im Cache
der CPU, bevor sie wieder Daten aus dem RAM nachladen müssen.
Das alternative Verfahren was Konkurrent CST zur Beschleunigung der
Zeitbereichssimulationen verwendet wäre die Berechnung auf einer GPU
(Nvidia).
Simulant schrieb:> Die erzeugen "on the fly" einen optimerten Solver für das jeweilige> Problem für die jeweilige CPU und rechnen viele Zeitschritte im Cache> der CPU, bevor sie wieder Daten aus dem RAM nachladen müssen.
Soll der solver nicht immer gleich sein? Die zeitschritte müssten doch
für jede CPU gleich sein, nur rechnet jede CPU andere Zellen.
Die CPU haben unterschiedliche Features zur Beschleunigung von
Vektorberechnungen (zB AVX 512) und unterschiedliche Cachegrössen. Da
wird je nach CPU anderer Code genutzt, zB auf meiner Hardware
unterschiedlich zwischen Intel Core i9 und AMD Ryzen 5xxx.
Und wenn ein Modell zB keine Metallverluste hat so wird DAFÜR ein Solver
compiliert der die FDTD Berechnung ohne Metallverluste macht und damit
etwas schneller ist. Das gilt für viele Berechnungsdetails: der Solver
berechnet genau das, was DIESES Modell an Komplexität der FDTD
Berechnung benötigt. Ansonsten müsste der Solver alle Features
mitschleppen egal ob sie benötigt werden und jeder Zeitschritt wäre dann
wegen der universellen Berechnung komplexer. Ich hoffe das Konzept ist
verständlich? Der Solver kann damit sehr spezielle Dinge anbieten ohne
für ALLE Berechnungen fett und langsam zu werden. Die erscheinen am Ende
nur im Solvercode wo sie auch benötigt werden vom konkreten
Simulationsmodell. Nachteil ist, dass der Bau des Solvers erstmal einige
Sekunden braucht bevor irgendwas berechnet wird.
Simulant schrieb:> Bei den kommerziellen Solver sind's tatsächlich Würfel in einem> karthesischen Koordinatensystem.
Jetzt kommt ich mir wirklich wie in einem Steampunk-Paralleluniversum
vor, in dem mein kompletter Erfahrungsschatz nutzlos ist.
Ich verabschiede mich hiermit und wünsche dem TO bei seinem Vorhaben
viel Erfolg.
Walter T. schrieb:> Jetzt kommt ich mir wirklich wie in einem Steampunk-Paralleluniversum> vor, in dem mein kompletter Erfahrungsschatz nutzlos ist.>> Ich verabschiede mich hiermit und wünsche dem TO bei seinem Vorhaben> viel Erfolg.
Was ist denn daran so schwer zu verstehen. Kommerzielle FDTD Solver
arbeiten mit Würfelmesh. Es gibt mehr als eine Solvermethode. Andere
arbeiten eben mit Tetraedermesh.
Dennis E. schrieb:> Was ist denn daran so schwer zu verstehen.
Stell Dir einfach einen modernen Stahlbauer vor, der in ein Universum
katapultiert wird, in dem Bronze als Standardmaterial gilt.
Prinzipiell wird der schon ganz gut beurteilen können, was vorgeht, aber
alle Feinheiten, die er mal über Stahlbau gelernt hat, sind nutzlos.
Andere Aufgabestellung!
Im Gegensatz zum Stahlbauer muss der Hochfrequenztechniker den gesamten
Raum meshen und berechnen, weil die elektrischen und magnetischen Felder
sich auch in Luft und anderen Isolatoren ausbreiten.
Es gibt den Sonderfall der Momentenmethode-Solver, die meshen nur die
Oberflächen der Leiter. Die Methode skaliert aber ungünstig wenn man
sehr viele Meshzellen hat.
Walter T. schrieb:> Stell Dir einfach einen modernen Stahlbauer vor, der in ein Universum> katapultiert wird, in dem Bronze als Standardmaterial gilt.
Es geht hier nicht um Stahlbau. Das sind Feldgleichungen, die es hier zu
lösen gilt und da interessieren keine Kräfte wie du in deiner
Stahlberechnung hast.
Ich habe es nun hin bekommen und entferne extrem kleine Abstände
iterativ mit einem kleinen Algorithmus. Der Zeitschritt ist dann zwar
immer noch klein weil die Struktur ja erhalten bleiben muss.
Soweit sogut. Ich merke das meshen ist die wahre Kunst. Es müsste einen
freien mesher geben, der das schön automatisiert wie gmsh macht.
Außerdem wäre es klasse, wenn openems submeshes unterstützen würde. Hat
jemand zufällig Kontakt zum Autor? Ich würde vielleicht ein paar Leute
fragen, die Lust darauf haben openems zu erweitern.