Problème avec Freefem++
Bonjour,
J'ai un petit problème avec Freefem++.
J'essaie de programmer une équation d'advection-diffusion-réaction, avec coefficients de diffusion et de réaction variables avec le temps, et j'obtiens un code d'erreur à la ligne 79 que j'ai mise en rouge. Je ne vois pas où est le problème. Si vous avez une piste, je suis preneur.
Merci
Yann
J'ai un petit problème avec Freefem++.
J'essaie de programmer une équation d'advection-diffusion-réaction, avec coefficients de diffusion et de réaction variables avec le temps, et j'obtiens un code d'erreur à la ligne 79 que j'ai mise en rouge. Je ne vois pas où est le problème. Si vous avez une piste, je suis preneur.
Merci
Yann
//Equation de diffusion avec variation du coefficient de diffusion D et d'advection par intervalles de temps // saisie des données et déclaration des variables int N=25; real x0=3.25,y0=12.5,T=25,dt=T/N,dx=0.5,dy=0.5,eps=1/0.2,R0=4.30; func u0x=exp((x0+dx-x)*eps)/(exp(-(x0+dx-x)*eps)+exp((x0+dx-x)*eps))-exp((x0-dx-x)*eps)/(exp(-(x0-dx-x)*eps+exp((x0-dx-x)*eps))); func u0y=exp((y0+dy-y)*eps)/(exp(-(y0+dy-y)*eps)+exp((y0+dy-y)*eps))-exp((y0-dy-y)*eps)/(exp(-(y0-dy-y)*eps+exp((y0-dy-y)*eps))); func u0=4*u0x*u0y; real alphadv,muadv,alphdiff,mudiff; //func advx0=0; //func advy0=-0.21*exp(-(-x0)^2/2)/sqrt(2*pi); //func diff0=0*exp(-(-x0-0.23)^2/2)/sqrt(2*pi); //maillage et choix des éléments finis border gamma1(t=0,25){x = t ; y = 0;} border gamma2(t=0,25){x = 25 ; y = t;} border gamma3(t=0,25){x = 25-t ; y = 25;} border gamma4(t=0,25){x = 0 ; y = 25-t;} //on définit les problèmes variationnels : advection, diffusion //problem advection(u,w)= // int2d(Th)(u*w/dt +(dx(u)*vx+dy(u)*vy)*w +u*(dx(vx)+dy(vy))*w) // -int2d(Th)(uold*w/dt) //+on(gamma1,gamma2,gamma3,gamma4,u=0); //condition de Dirichlet homogène //problem diffusion(m,p)= // int2d(Th)(m*p/dt +D*( dx(m)*dx(p)+dy(m)*dy(p))) // -int2d(Th)(mold*p/dt) // +on(gamma1,gamma2,gamma3,gamma4,m=0); //condition de Dirichlet homogène //ofstream ff("ADR.dat"); //construction du nuage de points // (t,u(t,x)) où x=(0.5,0.5) for(int t=1;t<=T;t=t+dt) { //uold=u; if (t==1){alphadv=0.21;muadv=0;alphdiff=0;mudiff=0.23;R0=4.3;} else if (t==2){alphadv=0.21;muadv=0;alphdiff=0;mudiff=0.23;R0=1.57;} else if (t==3){alphadv=0.21;muadv=0;alphdiff=0;mudiff=0.23;R0=1.01;} else if (t==4){alphadv=1.06;muadv=3.24;alphdiff=0;mudiff=0.23;R0=0.57;} else if (t==5){alphadv=1.06;muadv=3.24;alphdiff=0;mudiff=0.23;R0=0.37;} else if (t==6){alphadv=1.06;muadv=3.24;alphdiff=0;mudiff=0.230;R0=0.31;} else if (t==7){alphadv=0.73;muadv=2.73;alphdiff=0.18;mudiff=3.49;R0=0.29;} else if (t==8){alphadv=0.73;muadv=2.73;alphdiff=0.18;mudiff=3.49;R0=0.15;} else if (t==9){alphadv=0.73;muadv=2.73;alphdiff=0.18;mudiff=3.49;R0=0.45;} else if (t==10){alphadv=0.73;muadv=2.79;alphdiff=0.62;mudiff=3.66;R0=0.39;} else if (t==11){alphadv=0.73;muadv=2.79;alphdiff=0.62;mudiff=3.66;R0=0.44;} else if (t==12){alphadv=0.73;muadv=2.79;alphdiff=0.62;mudiff=3.66;R0=0.34;} else if (t==13){alphadv=1.08;muadv=3.15;alphdiff=1.96;mudiff=3.94;R0=0.39;} else if (t==14){alphadv=1.08;muadv=3.15;alphdiff=1.96;mudiff=3.94;R0=0.35;} else if (t==15){alphadv=1.08;muadv=3.15;alphdiff=1.96;mudiff=3.94;R0=0.28;} else if (t==16){alphadv=1.12;muadv=4.25;alphdiff=1.95;mudiff=3.89;R0=0.28;} else if (t<=18){alphadv=1.12;muadv=4.25;alphdiff=1.95;mudiff=3.89;R0=0.27;} else if (t==19){alphadv=0.51;muadv=5.17;alphdiff=0.70;mudiff=4.83;R0=0.31;} else if (t==20){alphadv=0.51;muadv=5.17;alphdiff=0.70;mudiff=4.83;R0=0.30;} else if (t==21){alphadv=0.51;muadv=5.17;alphdiff=0.70;mudiff=4.83;R0=0.31;} else if (t==22){alphadv=0.57;muadv=5.42;alphdiff=0.86;mudiff=4.11;R0=0.33;} else {alphadv=0.57;muadv=5.42;alphdiff=0.86;mudiff=4.11;R0=0.30;} func advx=0; func advy=-alphadv*exp(-((x-x0-muadv)^2+(y-y0-muadv)^2)/2)/sqrt(2*3.14159265); func diff=alphdiff*exp(-((x-x0-mudiff)^2+(y-y0-mudiff)^2)/2)/sqrt(2*3.14159265); mesh Th = buildmesh (gamma1(60)+gamma2(60)+gamma3(60)+gamma4(60)); //fespace Uh(Th,P1); fespace Vh(Th,P2); //fespace Wh(Th,P2); //Uh n,q,R=R0,nold; Vh u=u0,w,uold,vx=advx,vy=advy,D=diff,R=R0; //Wh m=u0,p,mold,D=diff; uold=u; solve adr(u,w)= [color=#FF0000]int2d(Th)(u*w/dt +(dx(u)*vx+dy(u)*vy)*w[/color] +u*(dx(vx)+dy(vy))*w +D*( dx(u)*dx(w)+dy(u)*dy(w)) +R*u*w) -int2d(Th)(uold*w/dt) +on(gamma1,gamma2,gamma3,gamma4,u=0); //condition de Dirichlet homogène }
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
La version de Freefem est 14.3
Je ne peux joindre le programme car fichier non accepté.
Et le soucis est justement qu'avec un programme plus simple (dans les conditions) mais "identique", je n'avais pas de message d'erreur.
En effet, si u est une fonction définie dans un espace variationnel Vh, dx(u) représente la dérivée de u par rapport à x.
Donc nom réservé. Con, mais chronophage pour trouver l'erreur !
Merci à remarque de m'avoir répondu.
Yann