comparison +scheme/Hypsyst3dCurve.m @ 351:7cc3d5bd3692 feature/hypsyst

Curve linear code in 3D converges for manufactures solution
author Ylva Rydin <ylva.rydin@telia.com>
date Thu, 03 Nov 2016 22:03:09 +0100
parents 5d5652fe826a
children dbac99d2c318
comparison
equal deleted inserted replaced
350:5d5652fe826a 351:7cc3d5bd3692
208 matVec=mat; 208 matVec=mat;
209 [rows,cols]=size(matVec); 209 [rows,cols]=size(matVec);
210 side=max(length(X),length(Y)); 210 side=max(length(X),length(Y));
211 cols=cols/side; 211 cols=cols/side;
212 end 212 end
213 ret=kron(ones(rows,cols),speye(side)); 213 ret=cell(rows,cols);
214
214 215
215 for ii=1:rows 216 for ii=1:rows
216 for jj=1:cols 217 for jj=1:cols
217 ret((ii-1)*side+1:ii*side,(jj-1)*side+1:jj*side)=diag(matVec(ii,(jj-1)*side+1:jj*side)); 218 ret{ii,jj}=diag(matVec(ii,(jj-1)*side+1:jj*side));
218 end 219 end
219 end 220 end
221
222 ret=cell2mat(ret);
220 end 223 end
221 224
222 225
223 function [BM]=boundary_matrices(obj,boundary) 226 function [BM]=boundary_matrices(obj,boundary)
224 params=obj.params; 227 params=obj.params;
407 if(sum(abs(y_2))>eps) 410 if(sum(abs(y_2))>eps)
408 syms y_2s; 411 syms y_2s;
409 else 412 else
410 y_2s=0; 413 y_2s=0;
411 end 414 end
412 415
413
414 if(sum(abs(z_1))>eps) 416 if(sum(abs(z_1))>eps)
415 syms z_1s 417 syms z_1s
416 else 418 else
417 z_1s=0; 419 z_1s=0;
418 end 420 end
423 z_2s=0; 425 z_2s=0;
424 end 426 end
425 427
426 syms xs ys zs 428 syms xs ys zs
427 [V, D]=eig(mat(obj,xs,ys,zs,x_1s,x_2s,y_1s,y_2s,z_1s,z_2s)); 429 [V, D]=eig(mat(obj,xs,ys,zs,x_1s,x_2s,y_1s,y_2s,z_1s,z_2s));
428 Vi=inv(V); 430 Vi=inv(V);
429 431 % syms x_1s x_2s y_1s y_2s z_1s z_2s
430 syms x_1s x_2s y_1s y_2s z_1s z_2s 432 xs=x;
431 % V= matlabFunction(V); 433 ys=y;
432 % D= matlabFunction(D); 434 zs=z;
433 % Vi= matlabFunction(Vi); 435 x_1s=x_1;
434 % 436 x_2s=x_2;
435 % xs=x; 437 y_1s=y_1;
436 % ys=y; 438 y_2s=y_2;
437 % zs=z; 439 z_1s=z_1;
438 % x_1s=x_1; 440 z_2s=z_2;
439 % x_2s=x_2;
440 % y_1s=y_1;
441 % y_2s=y_2;
442 % z_1s=z_1;
443 % z_2s=z_2;
444 441
445 side=max(length(x),length(y)); 442 side=max(length(x),length(y));
446 Dret=zeros(obj.n,side*obj.n); 443 Dret=zeros(obj.n,side*obj.n);
447 Vret=zeros(obj.n,side*obj.n); 444 Vret=zeros(obj.n,side*obj.n);
448 Viret=zeros(obj.n,side*obj.n); 445 Viret=zeros(obj.n,side*obj.n);
449 446
450 for ii=1:obj.n 447 for ii=1:obj.n
451 for jj=1:obj.n 448 for jj=1:obj.n
452 Dpart=matlabFunction(D(jj,ii),'Vars',[xs ys zs x_1s x_2s y_1s y_2s z_1s z_2s]); 449 Dret(jj,(ii-1)*side+1:side*ii)=eval(D(jj,ii));
453 Vpart=matlabFunction(V(jj,ii),'Vars',[xs ys zs x_1s x_2s y_1s y_2s z_1s z_2s]); 450 Vret(jj,(ii-1)*side+1:side*ii)=eval(V(jj,ii));
454 Vipart=matlabFunction(V(jj,ii),'Vars',[xs ys zs x_1s x_2s y_1s y_2s z_1s z_2s]); 451 Viret(jj,(ii-1)*side+1:side*ii)=eval(Vi(jj,ii));
455 Dret(jj,(ii-1)*side+1:side*ii)=sparse(Dpart(x,y,z,x_1,x_2,y_1,y_2,z_1,z_2));
456 Vret(jj,(ii-1)*side+1:side*ii)=sparse(Vpart(x,y,z,x_1,x_2,y_1,y_2,z_1,z_2));
457 Viret(jj,(ii-1)*side+1:side*ii)=sparse(Vipart(x,y,z,x_1,x_2,y_1,y_2,z_1,z_2));
458 end 452 end
459 end 453 end
460 454
461 D=sparse(Dret); 455 D=sparse(Dret);
462 V=sparse(Vret); 456 V=sparse(Vret);
463 Vi=sparse(Viret); 457 Vi=sparse(Viret);
464 V=obj.evaluateCoefficientMatrix(V,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2); 458 V=obj.evaluateCoefficientMatrix(V,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2);
465 D=obj.evaluateCoefficientMatrix(D,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2); 459 D=obj.evaluateCoefficientMatrix(D,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2);
470 zeroeig=(DD==0); 464 zeroeig=(DD==0);
471 negeig=(DD<0); 465 negeig=(DD<0);
472 466
473 D=diag([DD(poseig); DD(zeroeig); DD(negeig)]); 467 D=diag([DD(poseig); DD(zeroeig); DD(negeig)]);
474 V=[V(:,poseig) V(:,zeroeig) V(:,negeig)]; 468 V=[V(:,poseig) V(:,zeroeig) V(:,negeig)];
475 %Vi=inv(V); 469 Vi=[Vi(poseig,:); Vi(zeroeig,:); Vi(negeig,:)];
476 signVec=[sum(poseig),sum(zeroeig),sum(negeig)]; 470 signVec=[sum(poseig),sum(zeroeig),sum(negeig)];
477 end 471 end
478 end 472 end
479 end 473 end