Testen und Visualisieren großer Index-Arrays

8

Ich werde bald eine diskontinuierliche Knoten-Galerkin-Methode implementieren, und nachdem ich dies getan habe, bevor ich die grundlegenden Indizierungsarrays kenne, die ich angesichts eines Netzes und von Polynomdaten berechnen muss.

Das Problem, auf das ich im vorherigen Code gestoßen bin, waren subtile Fehler, die ich bei der Berechnung von Dingen wie der Indizierung von inneren / äußeren Spuren gemacht habe. Probleme, die bei einfacheren Testfällen nicht auftraten, traten bei größeren Maschen auf, und dies führt normalerweise zu einem instabilen Schema, da die Randbedingungen nicht ordnungsgemäß auferlegt werden (also keine Chance, die Simulation nur etwa alle 10 Schritte zu beobachten und ein lokalisiertes Problem zu erkennen). .

Ich hoffe, dass einige erfahrene Leute hier gute Tests kennen, die auf den Index-Arrays ausgeführt werden müssen, um ein gewisses Vertrauen zu gewinnen, dass sie richtig sind. Quadraturen, Derivate und dergleichen sind sehr einfach zu testen, aber andere Dinge kann ich nicht herausfinden.

Einige Tests, die ich in der Vergangenheit durchgeführt habe, sind das Hinzufügen von inneren Normalen zu äußeren Normalen, die 0 oder + -2 ergeben sollten. Es ist hilfreich, das Ergebnis einer Codeänderung schnell zu sehen, aber ich kann mir keinen sinnvollen Weg vorstellen, dies mit der Indizierung zu tun.

Ich sollte auch erwähnen, dass diese für Quads und Hexes gelten, mit dem Potenzial für krummlinige Elemente. Es gibt nicht viel vorhandenen Code, der bereits mit einer funktionierenden Bibliothek verglichen werden kann.

Bonuspunkte, wenn es gute Unit-Tests gibt, die ich schreiben kann und die nicht auf einer vorhandenen richtigen Antwort zum Vergleich beruhen. Ich werde mich mit vielen guten Heuristiken zufrieden geben.

Reid.Atcheson
quelle

Antworten:

7

Die offensichtliche Antwort wäre natürlich, nicht alles selbst zu implementieren, sondern das zu verwenden, was andere zuvor getan haben. Zum Beispiel enthält deal.II (http://www.dealii.org - Haftungsausschluss: Ich bin einer der Autoren dieser Bibliothek) bereits DG-Elemente für Quads, Hexes und gekrümmte Elemente, Lernprogramme, die zeigen, wie man sie verwendet all dies wurde bereits seit einem Jahrzehnt getestet und wird nach jeder Änderung am Repository über 2.700 Regressionstests getestet. Es gibt viel Arbeit für Sie zu sparen.

Kf(x)xiuh(x)=iUiφi(x)Ui=f(xi)uhf2=K|uh(x)f(x)|2dxfuh

Der Sinn all dessen ist, dass Sie in Ihrem Test zwei unabhängige Methoden verwenden, um mit der Indizierung umzugehen (Ihr Wissen, wenn Sie DoFs von Hand Werte zuweisen, und was Ihr Code bei der Bewertung von für richtig hält ), und sie müssen übereinstimmen. Wenn nicht, ist mindestens einer von ihnen falsch.uh

Sobald Sie dies ausgeführt haben, müssen Sie den Testfall natürlich speichern und regelmäßig ausführen, um sicherzustellen, dass Sie diese Art von Funktionalität nicht versehentlich erneut beeinträchtigen.

Wolfgang Bangerth
quelle
Wenn nicht, ist mindestens einer von ihnen korrekt. -> einer von ihnen ist falsch?
Ondřej Čertík
Ja natürlich. Ich habe es korrigiert.
Wolfgang Bangerth
Danke für die gute Antwort. Der Grund, warum ich das meiste selbst mache, ist, dass die Implementierung Teil der Neuheit der Forschung ist. Ich interessiere mich weniger für die Simulation selbst als dafür, wie ich sie mit verschiedenen Implementierungsstrategien verbessern kann.
Reid.Atcheson
Das ist ein gültiges Ziel. Sie konkurrieren jedoch mit Software, die seit einem Jahrzehnt optimiert wurde. Warum nicht versuchen, herauszufinden, was Sie in einem der vorhandenen Pakete verbessern können?
Wolfgang Bangerth