Unstrukturierte Gitter haben ihren Platz.
Vielleicht möchten Sie sich das Earth System Modeling Framework (ESMF) ansehen. Sie haben einen Code zum erneuten Gittern - speziell für diesen Zweck - und sie haben auch einige raffinierte Dinge mit parallelem Code gemacht. Das gesamte System ist so konzipiert, dass Modelle gekoppelt werden können, sodass möglicherweise auch andere nützliche Dinge vorhanden sind.
Einige andere Hinweise:
"Keine Möglichkeit, dies für eine signifikante Anzahl von Punkten effizient zu tun"
Nun, effizient ist eine relative Sache - sobald Sie das Raster in einer Baumstruktur haben, können Sie es in O (logn) suchen, was verdammt schnell sein kann, wenn auch nicht in O (1), wie das Durchsuchen eines regulären Rasters ist.
Es hört sich auch so an, als ob die Interpolation bei jedem Zeitschritt durchgeführt werden muss. Wenn sich die Gitter nicht anpassen, bleibt die Zuordnung von einem Gitter zu einem anderen konstant. Sie können diese Zuordnung (dh welches Element in jedem Raster welchem Element im anderen entspricht) auf beliebige Weise berechnen, speichern und müssen sie dann nie wieder berechnen (bis sich die Raster ändern).
So bleibt Ihnen der Interpolationscode - wo Sie Genauigkeit und Leistung in Einklang bringen möchten - eine einfache lineare Interpolation über ein Dreieck ist schnell und möglicherweise gut genug.
"Ich habe darüber nachgedacht, kd-tree zum Suchen des nächsten Knotens eines bestimmten Punkts zu verwenden, dann würde ich die Formfunktionen dieses Elements verwenden."
Denken Sie daran, dass der nächste Knoten Ihnen das Element nicht liefert. Sie sollten also etwas mehr tun, um das gewünschte Element zu finden. Eine Möglichkeit wäre, stattdessen einen Baum zu verwenden, der nach Begrenzungsrahmen speichert / sucht - Sie erhalten bei jeder Suche mehr als ein Element, können dann aber direkt überprüfen, welches davon korrekt ist.