--- tags: HW2.1 & 2.2 --- # ***Computational Hydraulics*** ## **Group 01:** N88071053 洪豪男 N88091011 黃彥鈞 ## **HW2.1:** Please try (a) centrial scheme; (b) up-wind scheme, for the traveling wave problem. ### (a) central scheme $\quad\quad u_{i+1/2}^{n} = \frac{1}{2}\left(u_{i+1}^{n}+u_{i}^{n}\right)$ $\quad\quad u_{i-1/2}^{n} = \frac{1}{2}\left(u_{i}^{n}+u_{i-1}^{n}\right)$ ``` % Traveling wave (jump) Central Scheme (Example 2.2) % % u_t + a u_x = 0, a = 1.0 % clear all; % a = 4.0; x = -180:1:180; dx = x(2) - x(1); nx = length(x); % u = zeros(size(x)); % % Initial condition % A = 0.5; % amplitude for ii = 1:length(u) if x(ii)>-180.0 & x(ii)<180.0 agl = (x(ii)-30.)*2*pi/60.; tmp = sin(agl); u(ii) = A*tmp; else u(ii) = 0.0; end end % figure(1); plot(x,u,'b-o'); xlabel('x'); ylabel('u'); title('initial condition'); axis([-100 100 -1.8 1.8]); % u0 = u; u_new = zeros(size(u)); % stepNo = 0; TotalStep = 200; % CFL = 0.8; dt = CFL*dx/abs(a); % v = VideoWriter('central.avi'); open(v); % figure(2); for ss = 1:TotalStep stepNo = stepNo + 1; for jj = 2:nx-1 upls = 0.5*(u(jj)+u(jj+1)); umns = 0.5*(u(jj)+u(jj-1)); Fpls = a*upls; Fmns = a*umns; u_new(jj) = u(jj) - dt/dx*(Fpls-Fmns); end % B.C. (Periodic BC) u_new(1) = u_new(nx-1); u_new(nx) = u_new(2); % u = u_new; % plot(x,u0,'-r',x,u,'b-'); xlabel('x'); ylabel('u'); axis([-100 100 -1.8 1.8]); text(-10,1.6,['Step No.= ',num2str(stepNo)]); pause(0.01); frame = getframe(gcf); writeVideo(v,frame); end close(v); % ``` https://youtu.be/ZyY5cXBxliA ### (b) up-wind scheme $\quad\quad u_{i+1/2}^{n} = \left\{\begin{array}{left} u_i^n\;\;\quad\hbox{for}\quad a >0\\ u_{i+1}^n\quad\hbox{for}\quad a <0 \end{array}\right.$ $\quad\quad u_{i-1/2}^{n} = \left\{\begin{array}{left} u_{i-1}^n\quad\hbox{for}\quad a >0\\ u_{i}^n\;\;\quad\hbox{for}\quad a <0 \end{array}\right.$ ``` % % Traveling wave (jump) Upwind Scheme (Example 2.2) % % u_t + a u_x = 0, a = 1.0 % clear all; % a = 4.0; x = -180:1:180; dx = x(2) - x(1); nx = length(x); % u = zeros(size(x)); % % Initial condition % A = 0.5; % amplitude for ii = 1:length(u) if x(ii)>-180.0 & x(ii)<180.0 agl = (x(ii)-30.)*2*pi/60.; tmp = sin(agl); u(ii) = A*tmp; else u(ii) = 0.0; end end % figure(1); plot(x,u,'b-o'); xlabel('x'); ylabel('u'); title('initial condition'); axis([-100 100 -1.8 1.8]); % u0 = u; u_new = zeros(size(u)); % stepNo = 0; TotalStep = 200; % CFL = 0.8; dt = CFL*dx/abs(a); % v = VideoWriter('upwind.avi'); open(v); % figure(2); for ss = 1:TotalStep stepNo = stepNo + 1; for jj = 2:nx-1 if a>=0 upls = u(jj); umns = u(jj-1); else upls = u(jj+1); umns = u(jj); end Fpls = a*upls; Fmns = a*umns; u_new(jj) = u(jj) - dt/dx*(Fpls-Fmns); end % B.C. (Periodic BC) u_new(1) = u_new(nx-1); u_new(nx) = u_new(2); % u = u_new; % plot(x,u0,'-r',x,u,'b-'); xlabel('x'); ylabel('u'); axis([-100 100 -1.8 1.8]); text(-10,1.6,['Step No.= ',num2str(stepNo)]); pause(0.01); frame = getframe(gcf); writeVideo(v,frame); end close(v); % ``` https://youtu.be/vSk9Ou6m0tM ## **HW2.2:** Please use the CFL number (a) $C=0.8\,$; and (b) $C=1.2\,$, for the above traveling wave problem. (PS either centrial scheme or up-wind scheme) $C=\dfrac{|a|\,\Delta t}{\Delta x}<C_{\rm max}=1\Rightarrow\quad \Delta t=\dfrac{C\,\Delta x}{|a|}$ ### (a) central scheme $C=1.2$ https://youtu.be/aCySIU15Ius ### (b) up-wind scheme $C=1.2$ https://youtu.be/LLbGH1JthbQ