function [p,e,t,hang,Listaqf]=S_shapeadaptiv(T_list,p,t,index) qf=0; k2=0; for kk=1:length(T_list(1,:)) k2=k2+1; pp2(:,k2)=(p(:,T_list(1,kk))+p(:,T_list(2,kk)))./2; k2=k2+1; pp2(:,k2)=(p(:,T_list(1,kk))+p(:,T_list(3,kk)))./2; % Lägger till mittpunkterna på triangelsidorna k2=k2+1; pp2(:,k2)=(p(:,T_list(3,kk))+p(:,T_list(2,kk)))./2; end pp2; q=0; index22=[]; for k=1:length(pp2(1,:)) for k3=k:length(pp2(1,:)) if pp2(1,k)==pp2(1,k3) && pp2(2,k)==pp2(2,k3) && k3~=k %%% letar upp dubletterna i pp2 q=q+1; index22(q)=k3; %% index22 innehåller de punkter som skall bort från pp2 end end end if length(index22) > 0 q2=0; for k=1:length(pp2) q=0; for k2=1:length(index22) if k~=index22(k2) q=q+1; if q==length(index22) q2=q2+1; pp3(:,q2)=pp2(:,k);% här finns de nya punkterna end end end end end if length(index22) < 1 pp3=pp2; end L=length(p); L2=length(pp3); for k=1:length(pp3) for k2=1:length(T_list) %% Letar upp villket nytt nummer i p-vektorn de nya punkterna skall ha if (p(1,T_list(1,k2))+p(1,T_list(2,k2)))./2 == pp3(1,k) && (p(2,T_list(1,k2))+p(2,T_list(2,k2)))./2 == pp3(2,k) Lista(1,k2)=k+L; end if (p(1,T_list(3,k2))+p(1,T_list(2,k2)))./2 == pp3(1,k) && (p(2,T_list(3,k2))+p(2,T_list(2,k2)))./2 == pp3(2,k) Lista(2,k2)=k+L; end if (p(1,T_list(1,k2))+p(1,T_list(3,k2)))./2 == pp3(1,k) && (p(2,T_list(1,k2))+p(2,T_list(3,k2)))./2 == pp3(2,k) Lista(3,k2)=k+L; end end end for k=1:length(T_list) % Här lääggs de nya trianglarna till if p(1,T_list(1,k)) == p(1,T_list(2,k)) t(:,index(k))=[T_list(1,k);Lista(1,k);Lista(3,k);1]; qf=qf+1; Listaqf(qf)=index(k); t(:,length(t)+1)=[Lista(1,k);T_list(2,k);Lista(2,k);1]; qf=qf+1; Listaqf(qf)=length(t)+1; t(:,length(t)+1)=[Lista(1,k);Lista(2,k);Lista(3,k);1]; qf=qf+1; Listaqf(qf)=length(t)+1; t(:,length(t)+1)=[Lista(3,k);Lista(2,k);T_list(3,k);1]; qf=qf+1; Listaqf(qf)=length(t)+1; end if p(1,T_list(2,k)) == p(1,T_list(3,k)) t(:,index(k))=[T_list(1,k);Lista(1,k);Lista(3,k);1]; qf=qf+1; Listaqf(qf)=index(k); t(:,length(t)+1)=[Lista(1,k);T_list(2,k);Lista(2,k);1]; qf=qf+1; Listaqf(qf)=length(t)+1; t(:,length(t)+1)=[Lista(3,k);Lista(1,k);Lista(2,k);1]; qf=qf+1; Listaqf(qf)=length(t)+1; t(:,length(t)+1)=[Lista(3,k);Lista(2,k);T_list(3,k);1]; qf=qf+1; Listaqf(qf)=length(t)+1; end end p(:,L+1:L+L2)=pp3;%% lägger till de nya punkterna sist i p-vektorn q2=0; hang=[]; for i2=1:length(p) q=0; for j=1:length(t(1,:)) if t(1,j)==i2 || t(2,j)==i2 || t(3,j)==i2 %% tar reda på i hur många trianglar en punkt är med i q=q+1; end end if q==3 && p(1,i2)~= 0 && p(1,i2)~=1 && p(2,i2)~=0 && p(2,i2)~=1 && (p(1,i2) < 0.5 || p(2,i2) > 0) && (p(2,i2) > 0.5 || p(1,i2) < 0.5) q2=q2+1;%% om den bara är med i tre trianglar och den inte ligger på randen hang(q2)=i2;%% här är de hängande noderna end end hang2=hang; q=0; q2=0; Lista4=[]; while length(hang2) > 0 for i=1:length(t(1,:)) for j=1:length(hang2) if (p(1,t(1,i))+p(1,t(2,i))).*0.5==p(1,hang2(j)) && (p(2,t(1,i))+p(2,t(2,i))).*0.5==p(2,hang2(j)) q2=q2+1; Lista3(q2)=i; Lista4=[]; Lista4(1,1)=t(1,i); Lista4(3,1)=t(3,i); Lista4(2,1)=hang2(j); ab=p(:,Lista4(2,1))-p(:,Lista4(1,1)); ac=p(:,Lista4(3,1))-p(:,Lista4(1,1)); ab=[ab;0]; ac=[ac;0]; if sum(cross(ab,ac)) < 0 aa=Lista4(1,1); Lista4(1,1)=Lista4(2,1); Lista4(2,1)=aa; end Lista4(4,1)=1; t(:,length(t)+1)=Lista4; Lista4=[]; Lista4(1,1)=t(2,i); Lista4(3,1)=t(3,i); Lista4(2,1)=hang2(j); ab=p(:,Lista4(2,1))-p(:,Lista4(1,1)); ac=p(:,Lista4(3,1))-p(:,Lista4(1,1)); ab=[ab;0]; ac=[ac;0]; if sum(cross(ab,ac)) < 0 aa=Lista4(1,1); Lista4(1,1)=Lista4(2,1); Lista4(2,1)=aa; end Lista4(4,1)=1; t(:,length(t)+1)=Lista4; Lista4=[]; tt(:,1:i-1)=t(:,1:i-1); tt(:,i:length(t)-1)=t(:,i+1:length(t)); t=tt; end if (p(1,t(1,i))+p(1,t(3,i))).*0.5==p(1,hang2(j)) && (p(2,t(1,i))+p(2,t(3,i))).*0.5==p(2,hang2(j)) q2=q2+1; Lista3(q2)=i; Lista4=[]; Lista4(1,1)=t(1,i); Lista4(3,1)=t(2,i); Lista4(2,1)=hang2(j); ab=p(:,Lista4(2,1))-p(:,Lista4(1,1)); ac=p(:,Lista4(3,1))-p(:,Lista4(1,1)); ab=[ab;0]; ac=[ac;0]; if sum(cross(ab,ac)) < 0 aa=Lista4(1,1); Lista4(1,1)=Lista4(2,1); Lista4(2,1)=aa; end Lista4(4,1)=1; t(:,length(t)+1)=Lista4; Lista4=[]; Lista4(3,1)=t(2,i); Lista4(1,1)=t(3,i); Lista4(2,1)=hang2(j); ab=p(:,Lista4(2,1))-p(:,Lista4(1,1)); ac=p(:,Lista4(3,1))-p(:,Lista4(1,1)); ab=[ab;0]; ac=[ac;0]; if sum(cross(ab,ac)) < 0 aa=Lista4(1,1); Lista4(1,1)=Lista4(2,1); Lista4(2,1)=aa; end Lista4(4,1)=1; t(:,length(t)+1)=Lista4; Lista4=[]; tt(:,1:i-1)=t(:,1:i-1); tt(:,i:length(t)-1)=t(:,i+1:length(t)); t=tt; end if (p(1,t(3,i))+p(1,t(2,i))).*0.5==p(1,hang2(j)) && (p(2,t(3,i))+p(2,t(2,i))).*0.5==p(2,hang2(j)) q2=q2+1; Lista3(q2)=i; Lista4(3,1)=t(1,i); Lista4(1,1)=t(3,i); Lista4(2,1)=hang2(j); ab=p(:,Lista4(2,1))-p(:,Lista4(1,1)); ac=p(:,Lista4(3,1))-p(:,Lista4(1,1)); ab=[ab;0]; ac=[ac;0]; if sum(cross(ab,ac)) < 0 aa=Lista4(1,1); Lista4(1,1)=Lista4(2,1); Lista4(2,1)=aa; end Lista4(4,1)=1; t(:,length(t)+1)=Lista4; Lista4=[]; Lista4(3,1)=t(2,i); Lista4(1,1)=t(1,i); Lista4(2,1)=hang2(j); ab=p(:,Lista4(2,1))-p(:,Lista4(1,1)); ac=p(:,Lista4(3,1))-p(:,Lista4(1,1)); ab=[ab;0]; ac=[ac;0]; if sum(cross(ab,ac)) < 0 aa=Lista4(1,1); Lista4(1,1)=Lista4(2,1); Lista4(2,1)=aa; end Lista4(4,1)=1; t(:,length(t)+1)=Lista4; tt(:,1:i-1)=t(:,1:i-1); tt(:,i:length(t)-1)=t(:,i+1:length(t)); t=tt; end end end hang2=[]; q2=0; for i2=1:length(p) q=0; for j=1:length(t(1,:)) if t(1,j)==i2 || t(2,j)==i2 || t(3,j)==i2 %% tar reda på i hur många trianglar en punkt är med i q=q+1; end end if q==3 && p(1,i2)~= 0 && p(1,i2)~=1 && p(2,i2)~=0 && p(2,i2)~=1 && (p(1,i2) < 0.5 || p(2,i2) > 0) && (p(2,i2) > 0.5 || p(1,i2) < 0.5) q2=q2+1;%% om den bara är med i tre trianglar och den inte ligger på randen hang2(q2)=i2;%% här är de hängande noderna %% här måste ändras beroende på villken domän end end end q=0; for i=1:length(p(1,:)) if p(1,i)==0 || p(1,i)==1 || p(2,i)==1 || p(2,i)==0 || (p(1,i)==0.5 && p(2,i) <= 0.5) || (p(2,i)==0.5 && p(1,i) >= 0.5) % här måste ändras q=q+1;%%%%%%%%%%%%%%% beroende på villken domän som problemet skall lösas på ee(q)=i; end end e=ee; Lista3=[]; Lista4=[]; qq=0; q=1; hang=hang; t=t; e=e; p=p; Listaqf=Listaqf;