Bonjour tout le monde. Merci de m'aider à résoudre mon problème de formulation des conditions aux limites. Pour votre information, le problème réside exclusivement dans la façon d'établir les conditions aux limites: Primo, parce que l'expression de F(p) marche impeccablement dans un autre code. Secondo, dans ce code j'ai affecté un scalaire à F(p) et malgré tout le problème persiste, c'est à dire le code n'affiche aucune erreur et tourne sans fin. MerciCode:clc;clear all;close all; Nx=5; Nz=5; R=3; h0=.4; h1=.2; deltax=R/Nx; D=10; B=.35; L=100; deltaz=L/Nz; deltax=R/Nx; a=.1; dt=(a*deltaz^2)/D; b=B*(dt/(2*deltaz)); pz=[2:Nz]; px=[2:Nx]; Z=[0:deltaz:L]; x=[0:deltax:R]; colorstflex = 'bkgrmcy'; plotStyle = {'s','*','-','o','^','-+',':'}; %%%%%%Initial condition %%%%%%%%%%%%%%%%%%% t=0; F(1,:)=h0*ones(1,Nz+1); % Z=F(1,:); % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot(x,Z,plotStyle{1},'color',colorstflex(1),'LineWidth',1.5,'MarkerSize',3),hold on for i=2:3%7 if i==2 T=60/30;%60*60/12; end if i==3 T=60/12;%60*60/6; end % if i==4 % T=60*60/3; % end % if i==5 % T=60*60/2; % end % if i==6 % T=60*60;%1*60; % end % if i==7 % T=120*60;%2*60;3 % end Ndt=round(T/dt); % Nombre de pas de temps for n=1:Ndt % Incrément de temps t=t+dt; Fn=F; %%%%Boundary conditionns %%%%%%%%%%%%%%%%%%%%%%%%% while (px = 1) % F(1)=h0; % endwhile % F(1)=Fn(2); % while (px = Nx) % AN(2:pz)=Fn(2:pz); % endwhile % while (px = Nx+1) % BN(2:pz)=Fn(2:pz); % Fn(pz:round(h0-h1)/deltaz)=-pz*deltaz; % Fn(round(h0-h1)/deltaz:h0/deltaz)=h1-pz*deltaz; % endwhile % AN(2:pz)=BN(2:pz); % F(Nz+1)=Fn(Nz); % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Expression de F(p) en fonction de Fn Z=-F(p); end if i > 1 && i <5% T=[00 5 10];%T=[00 5 10 20 30 60 120]; plot(x,Z,plotStyle{i},'color',colorstflex(i),'LineWidth',1.5,'MarkerSize',3), hold on legendInfo{1} = ['T = ' num2str(00) "\ \mn"]; end end legend(legendInfo,"location", "southeast") xlabel('x Coordinates (m)') ylabel('Z (m)') xlim([0 R]) ylim([0 h0]) % set(gca,"ydir","reverse")
-----