Interpolation dans Fudaa

publié le 13 juillet 2011 (modifié le 19 juillet 2011)

Ce document décrit comment sont gérées les interpolations dans Fudaa.

Une attention particulière a été apportée à l’interpolation des vecteurs. Pour l’instant 2 méthodes d’interpolations sont implantées :

  • interpolation bilinéaire ou méthode des 4 voisins les plus proches (nom à confirmer)
  • interpolation à partir d’un maillage

Les packages et les classes à utiliser

Les classes de bases se trouvent dans le package org.fudaa.ctulu.interpolation.

Les classes concernant l’interpolation sur ou à partir d’un maillage se trouvent dans le package org.fudaa.dodico.ef.interpolation.

Les classes de base (package ctulu)

La classe abstraite Interpolator est le classe à utiliser pour lancer une interpolation.

Les données de référence (utilisées par l’interpolateur pour déterminer les valeurs) sont données par les classes suivantes :

  • InterpolationSupportLocationI qui donne les localisations des données
  • InterpolationSupportValuesI et InterpolationSupportValuesMultiI qui donnent les valeurs des attributs sur ces données

Les points sur lesquels nous voulons obtenir des valeurs sont donnés par l’interface InterpolationTarget.

Les résultats d’une interpolation sont stockés dans la classe InterpolationResultsHolder.

Les propriétés concernant les vecteurs sont stockées dans la classe InterpolationVectorContainer. Cette classe permet de lier les composantes des vecteurs entre elles. Elle offre également des méthodes pour transformer une représentation cartésienne (vx,vy) en représentation polaire (r,theta).

La classe InterpolationParameters permet de passer tous les paramètres à un Interpolator et de récupérer les résultats correctement. Elle permet ainsi de traiter correctement les interpolations des vecteurs et de rendre ce cas transparent pour l’interpolateur.

L’implémentation bilinéaire est faite par la classe InterpolatorBilinear du package org.fudaa.ctulu.interpolation.bilinear. La classe InterpolationBilinearSupportSorted permet d’optimiser les données d’entrées.

Ce package de base offre également des adaptateurs simples.

Les classes pour le maillage dodico.ef.interpolation

L’interpolation basée sur un maillage est implantée par la classe EfInterpolator. En résumé, cette interpolation recherche l’élément contenant le point cible et interpole la valeur à partir des nœuds de cet élément.

Les autres classes de ce maillage sont des adaptateurs qui permettent de transformer un maillage en source de données ou en points cibles pour une interpolation.

Le problème avec l’interpolation des vecteurs

Voici une image qui explique le problème : normalement le vecteur interpolé au milieu devrait avoir une norme de 5 ( la moyenne des normes de 2 vecteurs utilisés).

Dans Fudaa, ce problème est pris en compte. C’est la classe InterpolationVectorContainer qui permet de connaître les vecteurs et leurs composantes. Un exemple d’utilisation de cette classe est visible dans la classe H2dParameters et la méthode getVectorContainer.

Les interpolations très simples (moyennes, …)

Il existe plusieurs cas où il est nécessaire de faire des moyennes sur des valeurs. Par exemple, si on a des résultats définis sur les nœuds et que l’on veut les transformer en des résultats définis sur les éléments. Dans ce cas, la valeur sur l’élément est égal à la moyenne des valeurs aux nœuds de cet éléments (c’est clair ?).

  • Voir la classe utilitaire EfLib et la méthode getElementData par exemple.

Il faut être vigilant sur ces petits calculs qui semblent anodins : on a tendance à oublier que l’on fait une interpolation et que les vecteurs doivent être également traités spécifiquement.