Les grilles non structurées ont leur place.
Vous voudrez peut-être regarder le cadre de modélisation du système terrestre (ESMF). Ils ont du code pour le re-maillage - spécifiquement à cet effet - et ils ont également fait des trucs astucieux avec du code parallèle. L'ensemble du système est conçu pour coupler des modèles, il peut donc y avoir également d'autres éléments utiles.
Quelques autres notes:
"aucun moyen de le faire efficacement pour un nombre significatif de points"
eh bien, efficace est une chose relative - une fois que vous avez la grille dans une structure arborescente, vous pouvez la rechercher dans O (logn), qui peut être assez rapide, mais pas O (1), comme la recherche d'une grille régulière est.
En outre, il semble que l'interpolation doive être effectuée à chaque pas de temps, si les grilles ne s'adaptent pas, le mappage d'une grille à l'autre reste constant. Ainsi, vous pouvez calculer ce mappage (c'est-à-dire quel élément dans chaque grille correspond à quel élément dans l'autre) de la manière qui vous convient, le stocker, puis vous n'avez jamais besoin de le calculer agin (jusqu'à ce que les grilles changent).
Cela vous laisse avec le code d'interpolation - où vous voudrez équilibrer la précision avec les performances - une simple interpolation linéaire à travers un triangle est rapide et peut être suffisante.
"J'ai pensé à utiliser kd-tree pour rechercher le nœud le plus proche d'un point donné, puis j'utiliserais les fonctions de forme de cet élément"
rappelez-vous que le nœud le plus proche ne vous obtient pas l'élément - vous voudrez donc faire un peu plus pour trouver l'élément que vous voulez. Une option serait d'utiliser à la place un rtree, qui stocke / recherche par boîte englobante - vous obtiendrez plus d'un élément à chaque recherche, mais vous pouvez ensuite vérifier lequel est correct directement.