Photo non disponible

Accueil

Publications

Exposés

Enseignement

Page personnelle de Stella Krell

Codes SCILAB

Codes SCILAB


A l'occasion des journées numériques de Lille 2010, nous (F. Boyer et moi-même) avons réalisé des TPs pour donner aux participants une expérience des méthodes Volumes Finis pour les problèmes de diffusion anisotrope.
Nous avons implémenté un code Scilab en dimension 1 et 2

En dimension 1 :

La dimension 1 constitue les premiers pas : familiarisation avec les méthodes VF, prise en main du code, principes de mise en oeuvre.
  • On peut résoudre le problème de Laplace avec des conditions aux bords de Dirichlet ou/et de Neumann non homogène. L'écriture du schéma est donnée de deux manières différentes tout d'abord avec l'approche différences finies puis en assemblant les termes par interface.

  • - u′′ = f, avec u(0) = ubord(0),u(1) = ubord(1).

  • Ensuite, on ajoute un coefficient de diffusion variable k(x) et la prise en compte d'un éventuel terme source de Dirac.

  • - ∂x(k(x)∂xu) = f, avec u(0) = ubord(0), u(1) = ubord(1).

    En dimension 2 :

    - div(K ∇u ) = f,   dans Ω,
u = g, sur Γ_D,
(K∇u )⋅ ⃗n = h, sur Γ

    L'une des difficultés de la dimension 2 est la gestion du maillage. On travaille à l'aide de la structure suivante :
  • maillage.nom : un nom qui décrit le maillage,

  • maillage.nb_vol : nombre de volumes de contrôle,

  • maillage.nb_som : nombre de sommets,

  • maillage.nb_are : nombre d'arêtes,

  • maillage.sommets : une matrice de taille nb_som x 2 qui contient les coordonnées du sommet i
  • maillage.sommets(i,_X), ; maillage.sommets(i,_Y),
  • maillage.centres : une matrice de taille nb_vol x 2 qui contient les coordonnées du centre du volume j
    maillage.centres(j,_X), ; maillage.centres(j,_Y),
  • maillage.aretes : une matrice de taille nb_are x 17 qui contient les informations suivantes de l'arête k
    *Numéro des deux sommets
    maillage.aretes(k,_DEB), maillage.aretes(k,_FIN)
    *
    Numéros des deux volumes K et L
    maillage.aretes(k,_K), maillage.aretes(k,_L)
    * Mesure de l'arête et la distance entre K et L
    maillage.aretes(k,_MES), maillage.aretes(k,_DKL)
    * Mesure des quarts de diamant
    maillage.aretes(k,_MES_K_DEB), ...
    * Label (>=0 à l'intérieur, =-1 sur le bord Dirichlet, <-1 sur le bord Neumann
    maillage.aretes(k,_LABEL).

    Grâce à cette structure de maillage, on a implémenté le schéma VF classique à 2 points (VF4) ou le schéma DDFV pour les problèmes de diffusion anisotrope. Deux programmes sont donnés, le premier permet de tracer la solution et d'évaluer l'erreur faite, le second permet de mettre en évidence l'ordre de convergence du schéma. De plus, la structure de maillage fournie rend complétement exploitable notre code scilab pour approcher d'autres problèmes.
  • Résultats :

    Utilisation du schéma VF4 sur des maillages ne vérifiant pas la condition d'orthogonalité  ---> Perte de convergence
    VF4
    Utilisation du schéma DDFV pour un problème de diffusion anisotrope discontinue sur des maillages ne vérifiant pas la condition d'orthogonalité   ---> Ordre de convergence optimal avec la "bonne approche"
    DDFV