function [A, b] = Assembler_1(p, e, t); %clc %clear all %[p,e,t]=S_shapeadaptiv(2); nnodes = size(p, 2); % Antal noder. (= antal kolonner i p) nedges = size(e,1); % Antal triangelsidor som ligger på ett randsegment. ntri = size(t, 2); % Antal trianglar. (= antal kolonner i t) %A = zeros(nnodes, nnodes); % Initiera styvhetsmatris. A=sparse(nnodes,nnodes); b = zeros(nnodes, 1); % Initiera lastvektor. rv = zeros(nnodes, 1); % Initiera randvektor. q=0; for n = 1:ntri % Ta reda på hörnens nodnummer: i = t(1, n); % Nodnummer för hörn nummer 1 i triangel nummer n. j = t(2, n); % Nodnummer för hörn nummer 2 i triangel nummer n. k = t(3, n); % Nodnummer för hörn nummer 3 i triangel nummer n. % % 1 -> 2 -> 3 moturs riktning. % Ta reda på hörnens koordinater: xnodi = p(1, i); % x-koordinat för nod nummer i. xnodj = p(1, j); % x-koordinat för nod nummer j. xnodk = p(1, k); % x-koordinat för nod nummer k. ynodi = p(2, i); % y-koordinat för nod nummer i. ynodj = p(2, j); % y-koordinat för nod nummer j. ynodk = p(2, k); % y-koordinat för nod nummer k % Räkna ut triangelns area: triangelarea = 0.5.*abs((xnodj - xnodi)*(ynodk - ynodi) - (xnodk - xnodi)*(ynodj - ynodi)); Triangelarea(n) = 0.5.*abs((xnodj - xnodi)*(ynodk - ynodi) - (xnodk - xnodi)*(ynodj - ynodi)); % Räkna ut (de konstanta) gradienterna av phi_i, phi_j, och phi_k: Dphi_iDx = (ynodj-ynodk)./-((xnodj-xnodk).*(ynodi-ynodk)-(xnodi-xnodk).*(ynodj-ynodk)); %(ynodj - ynodk)/(2*triangelarea); Dphi_iDy = (xnodk-xnodj)./-((xnodj-xnodk).*(ynodi-ynodk)-(xnodi-xnodk).*(ynodj-ynodk)); %(xnodk - xnodj)/(2*triangelarea); gradphi_i = [Dphi_iDx; Dphi_iDy]; Dphi_jDx = (ynodk-ynodi)./-((xnodk-xnodi).*(ynodj-ynodi)-(xnodj-xnodi).*(ynodk-ynodi)); %%(ynodk - ynodi)/(2*triangelarea); Dphi_jDy = (xnodi-xnodk)./-((xnodk-xnodi).*(ynodj-ynodi)-(xnodj-xnodi).*(ynodk-ynodi)); %%(xnodi - xnodk)/(2*triangelarea); gradphi_j = [Dphi_jDx; Dphi_jDy]; Dphi_kDx = (ynodi-ynodj)./-((xnodi-xnodj).*(ynodk-ynodj)-(xnodk-xnodj).*(ynodi-ynodj)); %(ynodi - ynodj)/(2*triangelarea); Dphi_kDy = (xnodj-xnodi)./-((xnodi-xnodj).*(ynodk-ynodj)-(xnodk-xnodj).*(ynodi-ynodj)); %(xnodj - xnodi)/(2*triangelarea); gradphi_k = [Dphi_kDx; Dphi_kDy]; anodi =1; anodj =1; anodk =1; fnodi = f(xnodi,ynodi);32.*xnodi.*(1-xnodi)+32.*ynodi.*(1-ynodi);% Värdet i nod i av f. fnodj = f(xnodj,ynodj);32.*xnodj.*(1-xnodj)+32.*ynodj.*(1-ynodj); % Värdet i nod j av f. fnodk = f(xnodk,ynodk);32.*xnodk.*(1-xnodk)+32.*ynodk.*(1-ynodk); % Värdet i nod k av f. A(i,i)=A(i,i)+gradphi_i'*gradphi_i*triangelarea;%./3; A(i,j)=A(i,j)+gradphi_i'*gradphi_j*triangelarea;%./3; A(j,i)=A(i,j); A(i,k)=A(i,k)+gradphi_i'*gradphi_k*triangelarea;%./3; A(k,i)=A(i,k); A(j,j)=A(j,j)+gradphi_j'*gradphi_j*triangelarea;%./3; A(k,k)=A(k,k)+gradphi_k'*gradphi_k*triangelarea;%./3; A(j,k)=A(j,k)+gradphi_j'*gradphi_k*triangelarea;%./3; A(k,j)=A(j,k); A=sparse(A); b(i) = b(i) + fnodi.*triangelarea./3; b(j) = b(j) + fnodj.*triangelarea./3; b(k) = b(k) + fnodk.*triangelarea./3; %A=sparse(A); end T=sum(Triangelarea) A=sparse(A); b=b;