前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kappa格式和Lax-wendroff格式的耗散与色散图。

kappa格式和Lax-wendroff格式的耗散与色散图。

作者头像
裴来凡
发布2022-05-28 15:34:45
2400
发布2022-05-28 15:34:45
举报

exact_solution.m

代码语言:javascript
复制
function ye = exact_solution(t,x,c)

  % Function called: profile
  
yyy = x;
for j = 1:length(x),   yyy(j) = profile(x(j) - c*t); end
ye = yyy;

kappa_scheme.m

代码语言:javascript
复制
kappa = 0;  % Parameter of kappa-scheme 
c = 1;    % Velocity  
sigma = 0.7;  % CFL number   
J = 31;    % Number of grid cells
bc = 2;    % Governs choice of numerical boundary conditions; see page 350
    % Enter 1 for boundary conditions using upwind schemes
    %    or 2 for extrapolation using  equation (9.36)
T = 0.4;  % Final time
    % ..............End of input...................................

h = 1.0/(J-1);    % Size of grid cells 
dt = sigma*h/c;    % Time step
n = floor(T/dt);  % Number of time steps

%   Definition of grid numbering 
    
%     x=0            x=1
% grid |------|------|------|------|
%      1      2      3             J

x = [0:J-1]'*h;    % Location of grid nodes

sig2 = sigma^2; sig4 = sigma/4;

ynew = zeros(J,1); yright = zeros(n+1,1);  
t = 0;  yright(1) = exact_solution(t,1,c);  yold = exact_solution(t,x,c);
for i = 1:n,  t = t + dt;
  a = 2*yold(1) - yold(2);  % Extrapolated inflow value
  ynew(1) = exact_solution(t,0,c);
  if bc == 1
    ynew(2) =  yold(2) - sigma*(yold(2) - yold(1));
  else
    ynew(2) =  yold(2) +sig4*(-1+kappa + (1-3*kappa)*sigma +2*kappa*sig2)*a +...
    sig4*(5-3*kappa+(9*kappa-1)*sigma-6*kappa*sig2)*yold(1)...
    +sig4*(-3+3*kappa -(1+9*kappa)*sigma+6*kappa*sig2)*yold(2)+...
    sig4*(-1-kappa+(1+3*kappa)*sigma-2*kappa*sig2)*yold(3);
  end
  for j = 3:J-1
    ynew(j) = yold(j) +sig4*(-1+kappa + (1-3*kappa)*sigma +2*kappa*sig2)*...
    yold(j-2)+sig4*(5-3*kappa+(9*kappa-1)*sigma-6*kappa*sig2)*yold(j-1)...
    +sig4*(-3+3*kappa -(1+9*kappa)*sigma+6*kappa*sig2)*yold(j)+...
    sig4*(-1-kappa+(1+3*kappa)*sigma-2*kappa*sig2)*yold(j+1);
  end
  if bc == 1    % Fully upwind scheme at outflow
    ynew(J) = (1-1.5*sigma+0.5*sig2)*yold(J) + sigma*(2-sigma)*yold(J-1)...
    +sigma*0.5*(sigma-1)*yold(J-2);      
  else      % Extrapolation at outflow
      ynew(J) = yold(J) +sig4*(-1+kappa + (1-3*kappa)*sigma +2*kappa*sig2)*...
    yold(J-2)+sig4*(5-3*kappa+(9*kappa-1)*sigma-6*kappa*sig2)*yold(J-1)...
    +sig4*(-3+3*kappa -(1+9*kappa)*sigma+6*kappa*sig2)*yold(J)+... 
      sig4*(-1-kappa+(1+3*kappa)*sigma-2*kappa*sig2)*(2*yold(J) - yold(J-1));
  end
  yright(i+1) = ynew(J);  yold = ynew;
end

yexact =  exact_solution(t,x,c);  error = ynew - yexact;
norm1 = norm(error,1)/J      % Compute error norms
norm2 = norm(error,2)/sqrt(J)
norminf = norm(error,inf)

figure(1), clf, hold on
xx = 0:0.005:1;  plot (xx,exact_solution(t,xx,c),'-'); plot (x,ynew,'o');
s1 = ['kappa=',num2str(kappa),' bc =', num2str(bc),' sigma=',...
  num2str(sigma),' cells=',num2str(J-1),' t=',num2str(t)];
title(s1,'fontsize',18);

Lax_Wendroff_scheme.m

代码语言:javascript
复制
c = 1;    % Velocity
sigma = 0.7;  % CFL number 
J = 31;    % Number of grid cells
bc = 1;    % Governs choice of numerical boundary conditions; see page 350
    % Enter 1 for boundary conditions using upwind schemes
    %    or 2 for extrapolation using  equation (9.36)
T = 0.4;  % Final time
    % ..............End of input...................................

h = 1.0/(J-1);    % Size of grid cells  
dt = sigma*h/c;    % Time step
n = floor(T/dt);  % Number of time steps

%       Definition of grid numbering
%       x=0               x=1
%   grid |------|------|---.........---|------|
%        1      2      3                  J

x = [0:J-1]'*h;    % Location of grid nodes

sig2 = sigma^2;
t = 0;
yold = exact_solution(t,x,c);   ynew = zeros(J,1);
yright = zeros(n+1,1);    yright(1) = exact_solution(t,1,c);

for i = 1:n,  t = t + dt;  ynew(1) = exact_solution(t,0,c);
  for j = 2:J-1
    ynew(j) = 0.5*(sig2+sigma)*yold(j-1)+(1-sig2)*yold(j)+...
     0.5*(sig2-sigma)*yold(j+1);
  end
  if bc == 1,    % First order upwind at outflow
     ynew(J) = yold(J) + sigma*(yold(J-1) - yold(J));
  else      % Extrapolation at outflow
     ynew(J) = 0.5*(sig2+sigma)*yold(J-1)+(1-sig2)*yold(J)+...
     0.5*(sig2-sigma)*(2*yold(J) - yold(J-1));
  end
  yright(i+1) = ynew(J);  yold = ynew;
end

yexact =  exact_solution(t,x,c);  error = ynew - yexact;
norm1 = norm(error,1)/J      % Compute error norms
norm2 = norm(error,2)/sqrt(J)
norminf = norm(error,inf)

figure(1), clf, hold on
xx = 0:0.005:1;  plot (xx,exact_solution(t,xx,c),'-'); plot (x,ynew,'o');
s1 = ['Lax-Wendroff',' bc =', num2str(bc),' sigma=',...
num2str(sigma),' cells=',num2str(J-1),' t=',num2str(t)];
title(s1,'fontsize',18);





本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档