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