


ERRORS_2D Computes errors for 2D b.v.p.
Input:
x = npdx LGL nodes in [-1,1], previously generated by xwlgl
wx = npdx LGL weigths in [-1,1], previously generated by xwlgl
dx = LGL 1-st derivative matrix previously generated by derlgl
xx = 2-indexes array of size (4,ne)
xx(1:4,ie)=[x_V1_ie;x_V2_ie;x_V3_ie;x_V4_ie]
(ne=nex*ney is the global number of spectral elements)
jacx = array (length(jacx)=ne); jacx(ie)= (x_V2_ie-x_V1_ie)/2
y = npdx LGL nodes in [-1,1], previously generated by xwlgl
wy = npdx LGL weigths in [-1,1], previously generated by xwlgl
dy = LGL 1-st derivative matrix previously generated by derlgl
yy = 2-indexes array of size (4,ne)
yy(1:4,ie)=[y_V1_ie;y_V2_ie;y_V3_ie;y_V4_ie]
(ne=nex*ney is the global number of spectral elements)
jacy = array (length(jacy)=ne); jacy(ie)= (y_V3_ie-y_V1_ie)/2
xy = column array with global mesh, length: noe=nov(npdx*npdy,ne)
ww = column array with global weigths, length: noe=nov(npdx*npdy,ne)
diag(ww) is the mass matrix associated to SEM discretization
nov = local -global map, previously generated by cosnov_2d
un = numerical solution
uex = exact solution (uex=@(x,y)[uex(x,y)], with .*, .^, ./)
uex_x = exact first x-derivative (uex_x=@(x,y)[uex_x(x,y)], with .*, .^, ./)
uex_y = exact first y-derivative (uex_y=@(x,y)[uex_y(x,y)], with .*, .^, ./)
param(4) = 1: compute errors (L^inf-norm, L2-norm, H1-norm)
on the exact solution
2: no errors are computed
param(5) = 0: LG quadrature formulas with high precision degree are
used to compute norms (exact norms)
1: LGL quadrature formulas with npdx,npdy nodes are
used to compute norms (discrete norms)
(used only if param(4) == 1)
param(6) = number of nodes for high degree quadrature formula,
(used only if param(5) == 0 & param(4) == 1)
param(7) = 0: absolute errors are computed
1: relative errors are computed
(used only if param(4) == 1)
Output:
err_inf = ||u_ex-u_N|| with respect to discrete maximum-norm
err_h1 = ||u_ex-u_N|| with respect to discrete H1-norm
err_l2 = ||u_ex-u_N|| with respect to discrete L2-norm
Reference: CHQZ2 = C. Canuto, M.Y. Hussaini, A. Quarteroni, T.A. Zang,
"Spectral Methods. Fundamentals in Single Domains"
Springer Verlag, Berlin Heidelberg New York, 2006.

0001 function [err_inf,err_h1,err_l2]=errors_2d(x,wx,dx,xx,jacx,y,wy,dy,yy,jacy,... 0002 xy,ww,nov,un,uex,uex_x,uex_y,param) 0003 % ERRORS_2D Computes errors for 2D b.v.p. 0004 % 0005 % Input: 0006 % x = npdx LGL nodes in [-1,1], previously generated by xwlgl 0007 % wx = npdx LGL weigths in [-1,1], previously generated by xwlgl 0008 % dx = LGL 1-st derivative matrix previously generated by derlgl 0009 % xx = 2-indexes array of size (4,ne) 0010 % xx(1:4,ie)=[x_V1_ie;x_V2_ie;x_V3_ie;x_V4_ie] 0011 % (ne=nex*ney is the global number of spectral elements) 0012 % jacx = array (length(jacx)=ne); jacx(ie)= (x_V2_ie-x_V1_ie)/2 0013 % y = npdx LGL nodes in [-1,1], previously generated by xwlgl 0014 % wy = npdx LGL weigths in [-1,1], previously generated by xwlgl 0015 % dy = LGL 1-st derivative matrix previously generated by derlgl 0016 % yy = 2-indexes array of size (4,ne) 0017 % yy(1:4,ie)=[y_V1_ie;y_V2_ie;y_V3_ie;y_V4_ie] 0018 % (ne=nex*ney is the global number of spectral elements) 0019 % jacy = array (length(jacy)=ne); jacy(ie)= (y_V3_ie-y_V1_ie)/2 0020 % xy = column array with global mesh, length: noe=nov(npdx*npdy,ne) 0021 % ww = column array with global weigths, length: noe=nov(npdx*npdy,ne) 0022 % diag(ww) is the mass matrix associated to SEM discretization 0023 % nov = local -global map, previously generated by cosnov_2d 0024 % un = numerical solution 0025 % uex = exact solution (uex=@(x,y)[uex(x,y)], with .*, .^, ./) 0026 % uex_x = exact first x-derivative (uex_x=@(x,y)[uex_x(x,y)], with .*, .^, ./) 0027 % uex_y = exact first y-derivative (uex_y=@(x,y)[uex_y(x,y)], with .*, .^, ./) 0028 % param(4) = 1: compute errors (L^inf-norm, L2-norm, H1-norm) 0029 % on the exact solution 0030 % 2: no errors are computed 0031 % param(5) = 0: LG quadrature formulas with high precision degree are 0032 % used to compute norms (exact norms) 0033 % 1: LGL quadrature formulas with npdx,npdy nodes are 0034 % used to compute norms (discrete norms) 0035 % (used only if param(4) == 1) 0036 % param(6) = number of nodes for high degree quadrature formula, 0037 % (used only if param(5) == 0 & param(4) == 1) 0038 % param(7) = 0: absolute errors are computed 0039 % 1: relative errors are computed 0040 % (used only if param(4) == 1) 0041 % 0042 % Output: 0043 % 0044 % err_inf = ||u_ex-u_N|| with respect to discrete maximum-norm 0045 % err_h1 = ||u_ex-u_N|| with respect to discrete H1-norm 0046 % err_l2 = ||u_ex-u_N|| with respect to discrete L2-norm 0047 % 0048 % Reference: CHQZ2 = C. Canuto, M.Y. Hussaini, A. Quarteroni, T.A. Zang, 0049 % "Spectral Methods. Fundamentals in Single Domains" 0050 % Springer Verlag, Berlin Heidelberg New York, 2006. 0051 0052 % Written by Paola Gervasio 0053 % $Date: 2007/04/01$ 0054 0055 fdq=param(5); 0056 if fdq ==0 0057 nq=param(6); 0058 else 0059 nq=length(wx); 0060 end 0061 errtype=param(7); 0062 0063 % compute errors on the exact solution 0064 0065 npdx=length(wx); npdy=length(wy); 0066 [ldnov,ne]=size(nov); 0067 noe=length(un); 0068 0069 % Evaluate exact solution 0070 0071 u=zeros(noe,1)+uex(xy(:,1),xy(:,2)); 0072 0073 % compute difference 0074 0075 err=u-un; 0076 0077 % ||u_ex-u_N|| with respect to discrete maximum-norm 0078 0079 err_inf=norm(err,inf); 0080 if errtype~=0 0081 err_inf=err_inf/norm(u,inf); 0082 end 0083 % ||u_ex-u_N|| with respect to H1 norm 0084 0085 % fdq=0 LG quadrature formula with nq nodes on each element 0086 % fdq=1 LGL quadrature formula with npdx nodes on each element 0087 0088 [err_h1]=normah1_2d(fdq,nq,errtype,x,wx,dx,xx,jacx,y,wy,dy,yy,jacy,... 0089 xy,ww,nov,un,u,uex,uex_x,uex_y); 0090 0091 % ||u_ex-u_N|| with respect to L2 norm 0092 0093 [err_l2]=normal2_2d(fdq,nq,errtype,x,wx,xx,jacx,y,wy,yy,jacy,... 0094 xy,ww,nov,un,u,uex); 0095 0096 return