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
        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
            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
        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
        q=q+1;
        ee(q)=i;
    end
end 
e=ee;
Lista3=[];            
Lista4=[];
qq=0;
q=1;
hang=hang;
t=t;
e=e;
p=p;
Listaqf=Listaqf;


