• Aucun résultat trouvé

Description du code fourni 1/7

Code en Scilab `a vocation p´edagogique (B. - Krell): http://www.cmi.univ-mrs.fr/~fboyer/publications/VF_scilab.tar.gz

On se place dans le sous-r´epertoire :1D 3 librairies de fonctions :

donnees1D.sci

Diff´erents jeux de donn´ees maillages1D.sci

Cr´eation de maillages, calculs de normes discr`etes schemas1D.sci

Fonctions d’assemblage des sch´emas 2 programmes principaux :

VF1D.sce

Calcul et trac´e des solutions approch´ees/exactes courbes_erreur1D.sce

Trac´e de courbes d’erreurs

33/ 237 F. Boyer VF pour les milieux poreux

Impl´ ementation en Scilab

Description du code fourni 2/7

Jeux de donn´ees

Un jeu de donn´eesdonneesest unestructurequi contient donnees.nom: le nom du cas test.

donnees.source: le terme source (une fonctionR→R).

donnees.bordD: les donn´ees au bord (une fonctionR→R).

donnees.uexacte: la solution exacte (une fonctionR→R).

donnees.coeff_k: le coeff de diffusion (une fonctionR→R).

Certains contiennent d’autres informations...

Liste de jeux de donn´ees :cas_test=list(...,...,...) Pour tout entiericonvenablecas_test(i)est un jeu de donn´ees.

Pour rajouter un jeu de donn´ees :

cas test($+1)=struct("nom",xxxx,...

"uexacte",xxxx,...

"bordD",xxxx,...

"source",xxxx,...

"coeff k",xxxx);

Impl´ ementation en Scilab

Description du code fourni 2/7

Jeux de donn´ees

Un jeu de donn´eesdonneesest unestructurequi contient donnees.nom: le nom du cas test.

donnees.source: le terme source (une fonctionR→R).

donnees.bordD: les donn´ees au bord (une fonctionR→R).

donnees.uexacte: la solution exacte (une fonctionR→R).

donnees.coeff_k: le coeff de diffusion (une fonctionR→R).

Certains contiennent d’autres informations...

Liste de jeux de donn´ees :cas_test=list(...,...,...) Pour tout entiericonvenablecas_test(i)est un jeu de donn´ees.

Pour rajouter un jeu de donn´ees :

cas test($+1)=struct("nom",xxxx,...

"uexacte",xxxx,...

"bordD",xxxx,...

"source",xxxx,...

"coeff k",xxxx);

34/ 237 F. Boyer VF pour les milieux poreux

Impl´ ementation en Scilab

Description du code fourni 3/7

Maillages :

•Forme g´en´erique des fonctions de cr´eation

function [maillage] = maillage xxxx(N);

Avec :xxxx∈ {uniforme , alterne , aleatoire , stretch}

•Chacune renvoie une structuremaillagecontenant maillage.nom : le nom du maillage.

maillage.nb_vol: le nombre de volumes de contrˆole. maillage.centres: coordonn´ees des centres

maillage.centres(i)=xi, 1≤i≤maillage.nb_vol maillage.sommets: coordonn´ees des sommets

maillage.sommets(i)=xi−1/2, 1≤i≤maillage.nb_vol+1 maillage.mes : mesures des volumes de contrˆoles

maillage.mes(i)=hi, 1≤i≤maillage.nb_vol maillage.dist: distances entre centres voisins

maillage.dist(i)=hi−1/2, 1≤i≤maillage.nb_vol+1

Impl´ ementation en Scilab

Description du code fourni 3/7

Maillages :

•Forme g´en´erique des fonctions de cr´eation

function [maillage] = maillage xxxx(N);

Avec :xxxx∈ {uniforme , alterne , aleatoire , stretch}

•Chacune renvoie une structuremaillagecontenant maillage.nom : le nom du maillage.

maillage.nb_vol: le nombre de volumes de contrˆole.

maillage.centres: coordonn´ees des centres

maillage.centres(i)=xi, 1≤i≤maillage.nb_vol maillage.sommets: coordonn´ees des sommets

maillage.sommets(i)=xi−1/2, 1≤i≤maillage.nb_vol+1 maillage.mes : mesures des volumes de contrˆoles

maillage.mes(i)=hi, 1≤i≤maillage.nb_vol maillage.dist: distances entre centres voisins

maillage.dist(i)=hi−1/2, 1≤i≤maillage.nb_vol+1

35/ 237 F. Boyer VF pour les milieux poreux

Impl´ ementation en Scilab

Description du code fourni 4/7

Exemples d’utilisation

On supposedonneesetmaillageconnus

Evaluation du terme source au centre des mailles

source centres=feval(maillage.centres,donnees.source);

Evaluation du coefficient de diffusion aux interfaces

ck=feval(maillage.sommets,donnees.coeff k); Evaluation de la solution exacte au centre des mailles, si elle est fournie

if (isfield(donnees,’uexacte’)) then

solexacte=feval(maillage.centres,donnees.uexacte); end;

Impl´ ementation en Scilab

Description du code fourni 4/7

Exemples d’utilisation

On supposedonneesetmaillageconnus

Evaluation du terme source au centre des mailles

source centres=feval(maillage.centres,donnees.source);

Evaluation du coefficient de diffusion aux interfaces

ck=feval(maillage.sommets,donnees.coeff k);

Evaluation de la solution exacte au centre des mailles, si elle est fournie

if (isfield(donnees,’uexacte’)) then

solexacte=feval(maillage.centres,donnees.uexacte); end;

36/ 237 F. Boyer VF pour les milieux poreux

Impl´ ementation en Scilab

Description du code fourni 4/7

Exemples d’utilisation

On supposedonneesetmaillageconnus

Evaluation du terme source au centre des mailles

source centres=feval(maillage.centres,donnees.source);

Evaluation du coefficient de diffusion aux interfaces

ck=feval(maillage.sommets,donnees.coeff k);

Evaluation de la solution exacte au centre des mailles, si elle est fournie

if (isfield(donnees,’uexacte’)) then

solexacte=feval(maillage.centres,donnees.uexacte);

end;

Impl´ ementation en Scilab

Description du code fourni 5/7

Fonctions d’assemblage des sch´emas

Syntaxe g´en´erale :[A,b]=vf_xxxx(m,donnees)

Entr´ee :mest un maillage etdonneesun jeu de donn´ees.

Sortie :Aest la matrice du syst`eme etble second membre.

Sont cod´ees pour l’instant : xxxx=laplacien_dirh:

−u00=f, avecu(0) =u(1) = 0.

xxxx=laplacien_dirnh:

−u00=f, avec

 u(0) =bordD(0) u(1) =bordD(1) xxxx=diffusion_dirnh:

−∂x(k(x)∂xu) =f, avec

 u(0) =bordD(0) u(1) =bordD(1) xxxx=diffusion_neunh:

−∂x(k(x)∂xu) =f, avec

 −k(0)u0(0) =bordN(0) k(1)u0(1) =bordN(1)

37/ 237 F. Boyer VF pour les milieux poreux

Impl´ ementation en Scilab

Description du code fourni 6/7

Structure du programmeVF1D.sce Chargement des libraires de fonctions.

Interrogation utilisateur : Choix du cas test

Choix du probl`eme `a r´esoudre et de variantes du sch´emas.

Choix du maillage

Choix du nombre de volumes de contrˆole Assemblage du sch´ema

R´esolution du syst`eme lin´eaire (par UMFPACK siScilab>=5.2) Trac´e de la solution approch´ee (et exacte si disponible) et

´

evaluation de l’erreur.

Impl´ ementation en Scilab

Description du code fourni 7/7

Structure du programmecourbes erreur1D.sce Chargement des libraires de fonctions.

Interrogation utilisateur : Choix du cas test

Choix du probl`eme `a r´esoudre et de variantes du sch´emas.

Choix du maillage

Choix du nombre de volumes de contrˆole du maillage grossier.

Choix de l’incr´ement du nombre de volumes de contrˆole d’un maillage `a l’autre.

Choix du nombre de volumes de contrˆole maximal souhait´e.

Pour chaque taille de maillage : Assemblage du sch´ema

R´esolution du syst`eme lin´eaire (par UMFPACK siScilab>=5.2) Evaluation et stockage de l’erreur dans diff´erentes normes.

Trac´e des courbes d’erreur en fonction du pas du maillage en

´

echelle logarithmique.

39/ 237 F. Boyer VF pour les milieux poreux

Impl´ ementation en Scilab

Regardons de plus pr`es

R´esolution du Laplacien Dirichlet homog`ene

Extrait de la fonction[A,b]=vf laplacien dirh(m,donnees) Impl´ementation “diff´erences finies”

for i=2:m.nb_vol-1

A(i,i) = 1/m.dist(i) + 1/m.dist(i+1);

A(i,i-1) = - 1/m.dist(i);

A(i,i+1) = - 1/m.dist(i+1);

end

A(1,1) = 1/m.dist(1) + 1/m.dist(2);

A(1,2) = - 1/m.dist(2);

A(m.nb_vol,m.nb_vol) = 1/m.dist(m.nb_vol+1) ...

+ 1/m.dist(m.nb_vol);

A(m.nb_vol,m.nb_vol-1)= - 1/m.dist(m.nb_vol);

b=feval(m.centres,donnees.source).*m.mes;

Impl´ ementation en Scilab

Regardons de plus pr`es

R´esolution du Laplacien Dirichlet homog`ene

Extrait de la fonction[A,b]=vf laplacien dirh(m,donnees) Impl´ementation “volumes finis”

for i=2:m.nb_vol tau = 1/m.dist(i);

A(i-1,i-1) = A(i-1,i-1) + tau;

A(i,i) = A(i,i) + tau;

A(i-1,i) = A(i-1,i) - tau;

A(i,i-1) = A(i,i-1) - tau;

end

A(1,1) = A(1,1) + 1/m.dist(1);

A(m.nb_vol,m.nb_vol) = A(m.nb_vol,m.nb_vol) + 1/m.dist(1+m.nb_vol);

b=feval(m.centres,donnees.source).*m.mes;

⇒Assemblage par parcours des interfaces/arˆetes.

Remarque :le second membre peut aussi ˆetre construit par arˆetes ! 41/ 237 F. Boyer VF pour les milieux poreux

Impl´ ementation en Scilab

Regardons de plus pr`es

R´esolution du pb de diffusion avec donn´ee au bord Extrait de la fonction[A,b]=vf diffusion dirnh(m,donnees) Impl´ementation “volumes finis”

ck=calcul_coeff_k_interf(m,donnees);

for i=2:m.nb_vol

tau = ck(i)/m.dist(i);

A(i-1,i-1) = A(i-1,i-1) + tau;

A(i,i) = A(i,i) + tau;

A(i-1,i) = A(i-1,i) - tau;

A(i,i-1) = A(i,i-1) - tau;

end

A(1,1) = A(1,1) + ck(1)/m.dist(1);

A(m.nb_vol,m.nb_vol) = A(m.nb_vol,m.nb_vol) + ck(1)/m.dist(1+m.nb_vol);

Plan

1

Introduction

Ecoulements complexes en milieux poreux Autres mod`eles

Cahier des charges

2

Sch´ ema Volumes Finis 1D

Notations. Construction

Analyse du sch´ema. Approche DF Analyse du sch´ema. Approche VF Impl´ementation en Scilab

Extensions

43/ 237 F. Boyer VF pour les milieux poreux

Documents relatifs