function [A,b,c,r]=makebutcher(name,s) %function [A,b,c,r]=makebutcher(name,s) % %By David Ketcheson % %Set up Butcher arrays A,b,c for various methods %Also returns SSP coefficient r %For families of methods, optional input s is the number of stages if nargin<2 s=1; end switch name %=================SSP Methods========================= %=================Explicit Methods========================= case 'FE11' %Forward Euler s=1; r=1; A=[0]; b=[1]'; c=[0]'; case 'SSP22' s=2; r=1; A=[0 0; 1 0]; b=[1/2 1/2]'; c=sum(A,2); case 'SSP42' s=4; r=3; A=[0 0 0 0; 1/3 0 0 0; 1/3 1/3 0 0; 1/3 1/3 1/3 0]; b=1/4*ones(m,1); c=sum(A,2); case 'SSP33' s=3; r=1; A=[0 0 0; 1 0 0; 1/4 1/4 0]; b=[1/6 1/6 2/3]'; c=sum(A,2); case 'SSP43' s=4; r=2; A=[0 0 0 0; 1/2 0 0 0; 1/2 1/2 0 0; 1/6 1/6 1/6 0]; b=[1/6 1/6 1/6 1/2]'; c=sum(A,2); case 'SSP104' s=10; r=6; alpha0=diag(ones(1,s-1),-1); alpha0(6,5)=2/5; alpha0(6,1)=3/5; beta0 =1/6*diag(ones(1,s-1),-1); beta0(6,5)=1/15; A=(eye(s)-alpha0)\beta0; b=1/10*ones(s,1); c=sum(A,2); case 'rSSPs2' %Rational (optimal, low-storage) s-stage 2nd order SSP if s<2 error('Explicit second order SSP family requires s>=2'); end r=s-1; alpha=[zeros(1,s);eye(s);]; alpha(s+1,s)=(s-1)/s; beta=alpha/r; alpha(s+1,1)=1/s; A=(eye(s)-alpha(1:s,:))\beta(1:s,:); b=beta(s+1,:)+alpha(s+1,:)*A; b=b'; c=sum(A,2); case 'rSSPs3' %Rational (optimal, low-storage) s^2-stage 3rd order SSP if round(sqrt(s))~=sqrt(s) || s<4 error('Explicit third order SSP family requires s=n^2, n>1'); end n=s^2; r=n-s; alpha=[zeros(1,n);eye(n);]; alpha(s*(s+1)/2+1,s*(s+1)/2)=(s-1)/(2*s-1); beta=alpha/r; alpha(s*(s+1)/2+1,(s-1)*(s-2)/2+1)=s/(2*s-1); A=(eye(n)-alpha(1:n,:))\beta(1:n,:); b=beta(n+1,:)+alpha(n+1,:)*A; b=b'; c=sum(A,2); %=================Implicit Methods========================= case 'BE11' %Backward Euler s=1; r=1.e10; A=[1]; b=[1]'; c=[1]'; case 'SDIRK34' %3-stage, 4th order singly diagonally implicit (SSP) s=3; r=1.7588; g=0.5*(1-cos(pi/18)/sqrt(3)-sin(pi/18)); q=(0.5-g)^2; A=[g 0 0 0.5-g g 0 2*g 1-4*g g]; b=[1/(24*q) 1-1/(12*q) 1/(24*q)]'; c=sum(A,2); case 'ISSPm2' %Optimal DIRK SSP schemes of order 2 r=2*s; i=repmat((1:s)',1,s); j=repmat(1:s,s,1); A=1/s*(j=2'); end r=s-1+sqrt(s^2-1); i=repmat((1:s)',1,s); j=repmat(1:s,s,1); A=1/sqrt(s^2-1)*(j