sandbox/easystab/stab2014/NavierStokesStationnaryCylindric

    clear all; clf; format compact; %{

    Cylindric ,Stationnary, Uncompressible, Navier-Stokes with Jacobian resolution

    Coded by Stab2014/Lus.m and Stab2014/PaulValcke.m, as a mix between ventury.m an /NavierStokesStationnary.m code.

    This is a little change from /NavierStokesStationnary.m, here you have an axiscylindrical flow instead of a rectangular one. The derivatives on Y are differents in consequences. We just changed the expression of few elements. We also changed the written structure.

    See /NavierStokesStationnary.mfor more details about the structure of the code.

    Instead of just doing a classic poiseuille, we added a geometry shape of ventury, see ventury.m an /geometry.m for more informations

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %PHYSICAL PARAMETERS Re=1000; % reynolds number, it change the impact of the diffusion term compared to pression %GEOMETRIC PARAMETERS Lx = 30; Ly=2; amp=0.8; % radius at venturi xpos=8; % position of the neck %NUMERICAL PARAMETERS Nx=50; % number of grid nodes in x Ny=10; %number of grid nodes in y alpha=0.7; % Under-relaxation maxIter = 200; % Maximum number of iteration for Newton method. resSTOP = 1e-5; % Precision required to stop convergence %FIXED PARAMETERS OR INTERMEDIATE FORMULAS Ymin=-Ly/2; pts=5; % number of points in finite difference stencils %%%%%%%%%%%%%%%%%%%%%%%%%%%%%DIFFERENTIATION MATRIXES%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DIFFERENTIATION [d.x,d.xx,d.wx,x]=dif1D(‘fd’,0,Lx,Nx,pts); [d.y,d.yy,d.wy,y]=dif1D(‘cheb’,Ymin,Ly,Ny); [D,l,X,Y,Z,I,NN]=dif2D(d,x,y); % PLAN TRANSFORMATION etay=1-(1-amp)exp(-((x-xpos)/3).^2); Y=Y.repmat(etay’,Ny,1);
    D=map2D(X,Y,D); ym1=spd(1./Y); % FORMULAS ARE EASIER TO WRITE WITH THESES ym2=spd(1./Y.^2); D.lap=D.yy+D.xx+ym1D.y; %WE ADD A TERM COMPARED TO CARTESIAN COORDINATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%BOUNDARIES GESTION%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% POSITIONS OF EVERY VECTORS u=(1:NN)‘; v=u+NN; p=v+NN; II=speye(3NN); % EXAMPLE OF DIRICHLET ENTRY dirInlet = [l.left]; % PRESSURE CONDITIONS neuploc=[l.ctl;l.ctr;l.ctr-Ny]; % where to impose the neumann condition on the pressure p0loc=2Ny; % where to impose zero pressure % BOUNDARY POSITIONS dir=[l.ctl;l.ctr;l.left;l.top;l.bot;]; % where to put Dirichlet on u and v % Loc will be used to apply boundary condition to the function loc=[u(dir); v(dir);p(p0loc); … u(l.right); … v(l.right); … p(neuploc)]; %MATRIX OF CONSTRAINTS
    C=[II([u(dir);v(dir);p(p0loc)],:); % … % Dirichlet on u,v,p D.x(l.right,:), Z(l.right,:), Z(l.right,:); … % Neuman on u at outflow Z(l.right,:), D.x(l.right,:),Z(l.right,:); … -Z(neuploc,:), D.lap(neuploc,:)/Re, -D.x(neuploc,:)]; % Neumann on v at outflow %%%%%%%%%%%%%%%%%%%%%%%%%%%%%INITIAL GUESS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Initial condition on U U=zeros(NN,1); U=(1-2(Y(:,1)/Lyones(1,Nx)).^2); %Initial condition on V V=zeros(NN,1); %Initial condition on P P=-X/Re; %Constant gradient of pressure P=P-P(p0loc); %Change of scale %Initial Solution sol0=[U(:);V(:);P(:)]; %%%%%%%%%%%%%%%%%RESOLUTION ALGORITHM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % NEWTON ALGORITHM sol=sol0; solM=sol; quit=0;count=0; while ~quit
    % RELAXATION METHOD % DEFINITION OF THE UNKNOWS USED U=alpha.sol(u) + (1-alpha).solM(u); V=alpha.sol(v) + (1-alpha).solM(v); P=alpha.sol(p) + (1-alpha).solM(p); % DEFINITION OF THE DERIVATES
    Ux=D.xU; Uy=D.yU; Vx=D.xV; Vy=D.yV; Px=D.xP; Py=D.yP; %DEFINITION OF THE FUNCTIONS YOU WANT TO RESOLVE f=[-(U.Ux+V.Uy)+D.lapU/Re-Px; … -(U.Vx+V.Vy)+(D.lapV-ym2V)/Re-Py; … D.xU+(ym1+D.y)*V]; %JACOBIAN OF THE EQUATIONS A=[-( spd(Ux) + spd(U)D.x + spd(V)D.y )+(D.lap)/Re, -spd(Uy), -D.x; … -spd(Vx), -(spd(Vy) + spd(V)D.y + spd(U)D.x )+(D.lap-ym2)/Re, -D.y; … D.x, ym1+D.y, Z]; %BOUNDARY CONDITIONS f(loc)=C(sol-sol0); A(loc,:)=C; %CONVERGENCE TEST res=norm(f); disp([num2str(count) ’ ’ num2str(res)]); if (count>maxIter) || (res>1e8); disp(’no convergence’);break; end if res<resSTOP; quit=1; disp(’converged’); continue; end %NEWTON STEP FOR RESOLUTION solM = sol; sol=solM - A;%-gmres( A , f, 1000, 1e-7);
    count=count+1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%PLOTTING%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Place here figures you want at each step of the iterations %Plot of the Module figure(1) subplot(2,1,1); Module = sqrt((U.2+V.2)); surf(X,Y,reshape(Module,Ny,Nx)); view(2); shading interp; hold on axis ([0,Lx,Ymin,-Ymin]) quiver3(X,Y,ones(Ny,Nx).
    max(Module),reshape(U,Ny,Nx),reshape(V,Ny,Nx),… zeros(Ny,Nx),’k’);
    xlabel(‘x’); ylabel(‘r’); title(‘Module of the speed’); grid off;hold off %colorbar; subplot(2,1,2); surf(X,Y,reshape(Px,Ny,Nx)); view(2); shading interp; hold on axis ([0,Lx,Ymin,-Ymin])
    xlabel(‘x’); ylabel(‘r’); title(‘Pressure variation Px’); grid off;hold off %colorbar; drawnow set(gcf,‘paperpositionmode’,‘auto’) print(‘-dpng’,‘-r80’,‘NSRSUmodpre.png’)
    figure(2) subplot(2,1,1); surf(X,Y,reshape(U-1,Ny,Nx)); view(2); shading interp; hold on sely=1:Ny; selx=1:6:Nx; ww=reshape(V,Ny,Nx); uu=reshape(U,Ny,Nx); quiver3(X,Y,ones(Ny,Nx).
    max(Module),reshape(U,Ny,Nx),reshape(V,Ny,Nx),… zeros(Ny,Nx),‘k’);
    axis([0,Lx,-1,1]); xlabel(‘z’); ylabel(‘r’); title(‘radial velocity U’); grid off;hold off subplot(2,1,2); surf(X,Y,reshape(V,Ny,Nx)); view(2); shading interp; xlabel(‘x’); ylabel(‘r’); title(‘axial velocity W’); grid off drawnow set(gcf,‘paperpositionmode’,‘auto’) print(‘-dpng’,‘-r80’,‘NSRSUvelVel.png’) end %Place here figures you only want once at the end

    Figures

    Here for the parameters written in the code

    alt text alt text