Forest fire detection system

PROJECT VIDEO

SCENARIO

1- Deploy nodes in the forest.

2- All the nodes in the equal range.

3- All the nodes that are in the one range having a one cluster head they work as a cluster coordinator.

4- Data aggregation happening on that point.

5- In the scenario first we send packet from source to destinatiosink,n when environment having no problem.

6- In the second when the fire happen that time those will detect the fire this node working as a source sent information to destination (base station).

7- Third case when fire destroy the cluster head then election algorithm elect the new cluster head and communicate with other nodes sent information to destination.

MATLAB SOURCE CODE

Instructions to run the code

1- Copy each of below codes in different M files.
2- Place all the files in same folder

3- Use the Excel files from below link and download them into the same folder as the source codes

Timeframe

4- Also note that these codes are not in a particular order. Copy them all and then run the program.
5- Run the “FINAL.m” file

Code 1 – Script M File – FINAL.m

clc
clear all
close all

disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('%%%%%%%%%%%  WELCOME TO JUNGLE FIRE DETECTION PROGRAMME  %%%%%%%%%%%')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')

hn=input('Please enter the approx number of HEAD NODES (minimum 5): '); % number of head nodes
while hn<5 % minimum number of head nodes must be 5
    disp('Too few sensors, please enter again')
    hn=input('Please enter the approx number of HEAD NODES (minimum 5): ');
end
%hn=30;
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('Placing the sensors')
disp('Press enter to continue..')
pause

figure(1)
[x,y,x1,y1,row,col,bp]=placing_sensors(hn);
title('Placement of the sensors with networking between the head nodes and base station')
hold off

disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('Condition of no fire')
disp('Press enter to continue..')
pause

for i=1:2
    figure(2)
    normal_condition(hn)
    title('Flow of information when there is no fire')
    hold off
    pause(0.3)
    if i==3
        break
    else
        set(gca,'Color','w')
    end
end

disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('Condition of fire')
disp('Press enter to continue..')
pause

figure(3)
start_fire=fire_condition(hn);
title('Condition of fire increasing through the jungle')
hold off

disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('Condition of  fire detection')
disp('Press enter to continue..')
pause

figure(4)
%firedetection2(hn,x,y,x1,y1,row,col)
[axis,time,burntnodes,basetime,times,unik]=fire_detection3(hn,bp,x,y,x1,y1,row,col);
title('Detecting the fire(scenario 1)')

% figure(5)
% [axis,time,burntnodes,basetime]=fire_detection(hn,bp,x,y,x1,y1,row,col);
% %test_scene(hn)
% title('Detecting the fire(scenario 1)')

disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('Graphs')
disp('Press enter to continue..')
pause
% 
graphs(axis,time,burntnodes,x1,y1,basetime,x,y,times,unik,start_fire)

Code 2 – Function M File – fire_condition.m

function [start_fire]=fire_condition(hn)

[x,y,x1,y1,row,col,bp]=placing_sensors(hn);

[r c]=size(x);
dh=sqrt((x(1,1)-x(1,c))^2 + (y(1,1)-y(1,c))^2);
dv=sqrt((x(1,1)-x(r,1))^2 + (y(1,1)-y(r,1))^2);

start_fire=[((dh/2)+x(1,1)) ((dv/2)+4)];
plot(start_fire(1),start_fire(2),'ko')

div=row/col;

if (start_fire(2)-y(1,1))<(start_fire(1)-x(1,1))
    ii=1;
    ij=1;
    while ii<(start_fire(2)-y(1,1)) || ij<(start_fire(2)-y(1,1))    
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
    end
elseif (start_fire(2)-y(1,1))>(start_fire(1)-x(1,1))
    ii=1;
    ij=1;
    while ii<(start_fire(1)-x(1,1)) || ij<(start_fire(1)-x(1,1))    
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
    end
end

end

Code 3 – Function M File – placing_sensors.m

function [x,y,x1,y1,row,col,bp]=placing_sensors(hn)

col=5*ceil(hn/30); %0-30hn=5col, 30-60hn=10col...
row=ceil(hn/col); 

rectangle('Position',[0 ((row*4)+6) 5 4],'Facecolor','r')
text(1,((row*4)+8),'BASE')
hold on
[x y]=meshgrid(linspace(1,(col*4),col),linspace(4,(row*4),row));
plot(x,y,'go','LineWidth',5)
axis([-5 ((col*4)+5) 0 ((row*4)+10)])

bp=[5 ((4*row)+6)]; % base station reciever point
a=x(1,:);
b=y(end,:);
for i=1:length(a)
    plot([a(i) bp(1)],[b(i) bp(2)],'LineWidth',2);
end

% difference=(row*col)-hn;
% if difference~=0
%     for i=1:difference
%         plot(x(1,end-(i-1)) , y(1,end-(i-1)) , 'wo','LineWidth',5)
%     end
% end
% clear difference

%if mod(hn,col)==0 % network when number of head nodes is a multiple of col
    [r c]=size(x);
    a1=x(1,:);
    b1=x(r,:);
    c1=y(1,:);
    d1=y(r,:);
    
    a2=x(:,1);
    b2=x(:,c);
    c2=y(:,1);
    d2=y(:,c);
    
    for i=1:length(a1)
        m1=[a1(i) b1(i)];
        n1=[c1(i) d1(i)];
        plot(m1,n1,'LineWidth',2)
    end
    
    for i=1:length(a2)
        m2=[a2(i) b2(i)];
        n2=[c2(i) d2(i)];
        plot(m2,n2,'LineWidth',2)
    end
% else % network when number of head nodes is not a multiple of col
%     [r c]=size(x);
%     a1=x(r,:);
%     b1=x(2,:);
%     c1=y(r,:);
%     d1=y(2,:);
%     
%     a2=x(r:-1:2,1);
%     b2=x(r:-1:2,c);
%     c2=y(r:-1:2,1);
%     d2=y(r:-1:2,c);
%     
%     for i=1:length(a1)
%         m1=[a1(i) b1(i)];
%         n1=[c1(i) d1(i)];
%         plot(m1,n1,'LineWidth',2)
%     end
%     
%     for i=1:length(a2)
%         m2=[a2(i) b2(i)];
%         n2=[c2(i) d2(i)];
%         plot(m2,n2,'LineWidth',2)
%     end
%     
%     difference=hn-(col*(row-1));    
%     plot([x(1,1) x(1,difference)],[y(1,1) y(1,difference)],'LineWidth',2)
%     for i=1:difference
%         plot([x(1,i) x(2,i)],[y(1,i) y(2,i)],'LineWidth',2);
%     end    
% end
clear difference r c
dh=sqrt((x(1,1)-x(1,2))^2+((y(1,1)-y(1,2))^2)); % horizontal distance between two head nodes
dv=sqrt((x(1,1)-x(2,1))^2+((y(1,1)-y(2,1))^2)); % vertical distance between two head nodes

[x1 y1]=meshgrid(((x(1,1)-(dh/4)):dh/2:(x(1,end)+(dh/4))),((y(1,1)-(dv/4)):dv/2:(y(end,1)+(dv/2))));
plot(x1,y1,'g*')
[r c]=size(x1);
difference=(r*c)-(hn*4);

% if ~isempty(difference)
%     d=difference/2;
%     for i=0:d-1
%         plot(x1(1,c-i),y1(1,c-i),'w*')
%         plot(x1(2,c-i),y1(2,c-i),'w*')        
%     end
% end

for i=1:row
    column=col;    
%     if i==1 && mod(hn,col)~=0           
%         column=hn-((row-1)*col);        
%     end
    
    for j=1:column
        plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])        
        plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
        plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
        plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])        
    end
end

end

Code 4 – Function M File – fire_detection3.m

function [axis,time,burntnodes,basetime,times,unik]=fire_detection3(hn,bp,x,y,x1,y1,row,col)

%[x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%figure(4)
[r c]=size(x);
[r1 c1]=size(x1);
dh=sqrt((x(1,1)-x(1,c))^2 + (y(1,1)-y(1,c))^2); %horizontal distance
dv=sqrt((x(1,1)-x(r,1))^2 + (y(1,1)-y(r,1))^2); %vertical distance
start_fire=[((dh/2)+x(1,1)) ((dv/2)+4)]; %origin of fire
%plot(start_fire(1),start_fire(2),'ko')
div=row/col;
time=0; %time in sec for the fire to reach at the edge of forest
axis=[]; %values of axis of ellipse from the start point to the boundry of forest
burntnodes=[]; % number of burnt nodes
basetime=[]; 
times=[]; %time for each ellipse 
unik=[]; %number of nodes burnt
if (start_fire(2)-y(1,1))<(start_fire(1)-x(1,1)) %vertical distance < horizontal distance
    ii=1; %horizontal axis
    ij=1; %vertical axis
    deadnodeset_b=[];
    deadnodeset_a=[];
    n=0;    
    X1=x;
    Y1=y;    
    while ii<=(start_fire(2)-y(1,1)) || ij<=(start_fire(2)-y(1,1)) % detect vertical radius first, and then horizontal               
%        subplot(1,2,1)        
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        deadnodeset_b=deadnodeset_a;
        %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);       
        deadnodeset=dead_nodes(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij,div); % to detect and mark the dead nodes       
        deadnodeset_a=deadnodeset;        
        unik_deadnodes=checkdeadnode2(deadnodeset_a,deadnodeset_b); % to delete the dead connections        
%        flowcontrol2(unik_deadnodes,deadnodeset_a,hn,deadnodeset_b)
        [X,Y]=bully3(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1);
        X1=X;
        Y1=Y;
        %flowinfo1(row,col,hn,x,y,deadnodeset_a,ra)       
        %checkdeadnode1(deadnodeset,x,y,x1,y1,bp)
          
%         subplot(1,2,2)
%         ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
%         [x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%         % deadnodeset_b=deadnodeset_a;                
%         %deadnodeset1=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij); % to detect and mark the dead nodes       
%         %deadnodeset_a=deadnodeset;        
%         %checkdeadnode(deadnodeset1,x,y,x1,y1,bp)
%         checkdeadnode(deadnodeset,x,y,x1,y1,bp,unik_deadnodes)
        
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
        
        time=time+1;
        axis=[axis; ii ij];
        [ra ca]=size(deadnodeset);
        burntnodes=[burntnodes ra];
        [raa caa]=size(unik_deadnodes);
        if ~isequal(raa,0)
            unik=[unik raa];
            times=[times; round(clock)];
        end
        n=n+ii;
        basetime=[basetime n];   
        
    end    
elseif (start_fire(2)-y(1,1))>(start_fire(1)-x(1,1)) %vertical distance > horizontal distance
    ii=1; %horizontal axis
    ij=1; %vertical axis
    deadnodeset_b=[];
    deadnodeset_a=[];
    n=0;
    X1=x;
    Y1=y;
    
    while ii<=(start_fire(1)-x(1,1)) || ij<=(start_fire(1)-x(1,1))     % detect horizontal radius first, and then vertical
%        subplot(1,2,1)
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        deadnodeset_b=deadnodeset_a;
        %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);       
        deadnodeset=dead_nodes(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij,div);  % to detect and mark the dead nodes
        deadnodeset_a=deadnodeset;        
        unik_deadnodes=checkdeadnode2(deadnodeset_a,deadnodeset_b); % to delete the dead connections        
        %flowcontrol2(unik_deadnodes,deadnodeset_a,hn,deadnodeset_b)
        [X,Y]=bully3(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1);
        X1=X;
        Y1=Y;
%         subplot(1,2,2)
%         ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
%         [x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%         % deadnodeset_b=deadnodeset_a;
%         %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);                
%         %deadnodeset1=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij); % to detect and mark the dead nodes                
%         %deadnodeset_a=deadnodeset;        
%         % checkdeadnode(deadnodeset1,x,y,x1,y1,bp)
%         checkdeadnode(deadnodeset,x,y,x1,y1,bp,unik_deadnodes)
       
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
        
        time=time+1;
        axis=[axis; ii ij];
        [ra ca]=size(deadnodeset);
        burntnodes=[burntnodes ra];
        [raa caa]=size(unik_deadnodes);
        if ~isequal(raa,0)
            unik=[unik raa];
            times=[times; round(clock) ];
        end
        n=n+ii;
        basetime=[basetime n];        
    end    
end
end

Code 5 – Function M File –bully3.m

function [X,Y]=bully3(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1)
bars=0;
%t=0;
while bars>=0
    subplot(1,2,1)
    bar(bars)
    axis([0 3 0 110])
    grid on
    ylabel('Temperature')
    set(gca,'XTick',[])

    bars=bars+randi(10,1,1);
    %bars=bars+15;
    
    subplot(1,2,2)
    rectangle('Position',[0 ((row*4)+6) 5 4],'Facecolor','r')
    text(1,((row*4)+8),'BASE')
    hold on
    cp=[5 ((row*4)+6)];
%    coloring_b(X1,Y1,row,col,x,y,x1,y1)

    plot(x,y,'go','LineWidth',5)
    plot(x1,y1,'g*')
    set(gca,'XTick',[])
    set(gca,'YTick',[])

    [r c]=size(deadnodeset);
    for i=1:r
        plot(deadnodeset(i,1),deadnodeset(i,2),'ko','LineWidth',3)        
    end    
    [ra ca]=size(unik_deadnodes);
    for i=1:ra
        plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ro','LineWidth',3)    
        plot([unik_deadnodes(i,1) cp(1)],[unik_deadnodes(i,2) cp(2)],'r')
    end
    pause(0.5)
    for i=1:ra    
        plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'yo','LineWidth',3)
        plot([unik_deadnodes(i,1) cp(1)],[unik_deadnodes(i,2) cp(2)],'y')
    end
    pause(0.5)    
    
    if bars>=90   
        %bars=1;
        break
    end
end
    
for i=1:ra    
    plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ko','LineWidth',3)
    plot([unik_deadnodes(i,1) cp(1)],[unik_deadnodes(i,2) cp(2)],'w')
end

[r c]=size(X1);
for i=1:r
    for j=1:c
        if X1(i,j)==x(i,j) && Y1(i,j)==y(i,j)
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))],'w')
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))],'w')
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))],'w')
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))],'w')            
        elseif X1(i,j)~=0 && Y1(i,j)~=0
            plot([X1(i,j) x1(((2*i)-1),((2*j)-1))],[Y1(i,j) y1(((2*i)-1),((2*j)-1))],'w')
            plot([X1(i,j) x1(((2*i)-1),(2*j))],[Y1(i,j) y1(((2*i)-1),(2*j))],'w')
            plot([X1(i,j) x1((2*i),((2*j)-1))],[Y1(i,j) y1((2*i),((2*j)-1))],'w')
            plot([X1(i,j) x1((2*i),(2*j))],[Y1(i,j) y1((2*i),(2*j))],'w')
        end
    end
end


[rr cc]=size(x);
[r3 c3]=size(deadnodeset);

X=x;
Y=y;

for i=1:rr
    for j=1:cc     
        for k=1:r3
            if x(i,j)==deadnodeset(k,1) && y(i,j)==deadnodeset(k,2)               
                a1=x1(((2*i)-1),((2*j)-1));
                a2=y1(((2*i)-1),((2*j)-1));
                b1=x1(((2*i)-1),(2*j));
                b2=y1(((2*i)-1),(2*j));
                c1=x1((2*i),((2*j)-1));
                c2=y1((2*i),((2*j)-1));
                d1=x1((2*i),(2*j));
                d2=y1((2*i),(2*j));
                
                a=[a1 a2];
                b=[b1 b2];
                c=[c1 c2];
                d=[d1 d2];

                for l=1:r3 
                    if a(1)==deadnodeset(l,1) && a(2)==deadnodeset(l,2)
                        a=[];
                        break
                    else
                        X(i,j)=a(1); %a becomes the new head
                        Y(i,j)=a(2);
                    end
                end
                    
                if isempty(a)
                   for l=1:r3                       
                       if b(1)==deadnodeset(l,1) && b(2)==deadnodeset(l,2)
                           b=[];
                           break
                       else
                            X(i,j)=b(1); %b becomes the new head
                            Y(i,j)=b(2);
                       end
                   end 
                end
                
                if isempty(b)
                   for l=1:r3                       
                       if c(1)==deadnodeset(l,1) && c(2)==deadnodeset(l,2)
                           c=[];
                          break
                       else
                            X(i,j)=c(1); %c becomes the new head
                            Y(i,j)=c(2);                            
                       end
                   end 
                end
               
                if isempty(c)
                   for l=1:r3                       
                       if d(1)==deadnodeset(l,1) && d(2)==deadnodeset(l,2)
                           d=[];
                           break
                       else
                            X(i,j)=d(1); %d becomes the new head
                            Y(i,j)=d(2);
                       end
                   end 
                end
                
                if isempty(d)
                    X(i,j)=0; %the whole cluster is burnt
                    Y(i,j)=0;
                end
            end
        end
    end
end
% new head nodes obtained (up)
for i=1:rr
    for j=1:cc
        xyz=0;
        if x(i,j)==X(i,j) && y(i,j)==Y(i,j)
            xyz=1;
        else
            xyz=0;
            break
        end        
    end
    if xyz==0
        break
    end
end

if xyz==1
    for i=1:row    
        for j=1:col
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])        
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])        
        end
    end
end  

[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot(X(i,j),Y(i,j),'go','LineWidth',5)
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    abc=plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    %delete(abc)
%                    disp('br')
                    plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
                    abc=plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))],'w')

                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1((2*i),((2*j)-1)))
                    abc=plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && isequal(deadnodeset(k,2),y1((2*i),((2*j)-1))) 
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))],'w')
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),(2*j))) && ~isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
                    abc=plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),(2*j))) && isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))],'w')        
                    break
                end
            end        
            
            clear k abc
            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot(X(i,j),Y(i,j),'go','LineWidth',5)
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    abc=plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
                    abc=plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))],'w')
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1((2*i),((2*j)-1)))
                    abc=plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && isequal(deadnodeset(k,2),y1((2*i),((2*j)-1))) 
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))],'w')
                    break
                end
            end
            
            clear k abc
        
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),(2*j))) && ~isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
                    abc=plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),(2*j))) && isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))],'w')        
                    break
                end
            end                    
        end
    end
end

[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))])
            plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))])
            plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))])
        end
    end
end

%clear rr cc
%coloring_w(X1,Y1,row,col,x,y,x1,y1)
%coloring_c(X,Y,row,col,x,y,x1,y1)



%pause    
end

Code 6 – Function M File –bully2.m

function [X,Y]=bully2(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1)
    
[rr cc]=size(x);
[r3 c3]=size(deadnodeset);

X=x;
Y=y;

for i=1:rr
    for j=1:cc     
        for k=1:r3
            if x(i,j)==deadnodeset(k,1) && y(i,j)==deadnodeset(k,2)               
                a1=x1(((2*i)-1),((2*j)-1));
                a2=y1(((2*i)-1),((2*j)-1));
                b1=x1(((2*i)-1),(2*j));
                b2=y1(((2*i)-1),(2*j));
                c1=x1((2*i),((2*j)-1));
                c2=y1((2*i),((2*j)-1));
                d1=x1((2*i),(2*j));
                d2=y1((2*i),(2*j));
                
                a=[a1 a2];
                b=[b1 b2];
                c=[c1 c2];
                d=[d1 d2];

                for l=1:r3 
                    if a(1)==deadnodeset(l,1) && a(2)==deadnodeset(l,2)
                        a=[];
                        break
                    else
                        X(i,j)=a(1); %a becomes the new head
                        Y(i,j)=a(2);
                    end
                end
                    
                if isempty(a)
                   for l=1:r3                       
                       if b(1)==deadnodeset(l,1) && b(2)==deadnodeset(l,2)
                           b=[];
                           break
                       else
                            X(i,j)=b(1); %b becomes the new head
                            Y(i,j)=b(2);
                       end
                   end 
                end
                
                if isempty(b)
                   for l=1:r3                       
                       if c(1)==deadnodeset(l,1) && c(2)==deadnodeset(l,2)
                           c=[];
                          break
                       else
                            X(i,j)=c(1); %c becomes the new head
                            Y(i,j)=c(2);                            
                       end
                   end 
                end
               
                if isempty(c)
                   for l=1:r3                       
                       if d(1)==deadnodeset(l,1) && d(2)==deadnodeset(l,2)
                           d=[];
                           break
                       else
                            X(i,j)=d(1); %d becomes the new head
                            Y(i,j)=d(2);
                       end
                   end 
                end
                
                if isempty(d)
                    X(i,j)=0; %the whole cluster is burnt
                    Y(i,j)=0;
                end
            end
        end
    end
end
% new head nodes obtained (up)
for i=1:rr
    for j=1:cc
        xyz=0;
        if x(i,j)==X(i,j) && y(i,j)==Y(i,j)
            xyz=1;
        else
            xyz=0;
            break
        end        
    end
    if xyz==0
        break
    end
end

if xyz==1
    for i=1:row    
        for j=1:col
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])        
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])        
        end
    end
end  

[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot(X(i,j),Y(i,j),'go','LineWidth',5)
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    abc=plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    %delete(abc)
%                    disp('br')
                    plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
                    abc=plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))],'w')

                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1((2*i),((2*j)-1)))
                    abc=plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && isequal(deadnodeset(k,2),y1((2*i),((2*j)-1))) 
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))],'w')
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),(2*j))) && ~isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
                    abc=plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),(2*j))) && isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))],'w')        
                    break
                end
            end        
            
            clear k abc
            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot(X(i,j),Y(i,j),'go','LineWidth',5)
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    abc=plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
                    abc=plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))],'w')
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1((2*i),((2*j)-1)))
                    abc=plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && isequal(deadnodeset(k,2),y1((2*i),((2*j)-1))) 
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))],'w')
                    break
                end
            end
            
            clear k abc
        
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),(2*j))) && ~isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
                    abc=plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),(2*j))) && isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))],'w')        
                    break
                end
            end                    
        end
    end
end

[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])
            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))])
            plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))])
            plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))])
        end
    end
end
%pause    
end

Code 7 – Function M File –  firedetection2.m

%function [axis,time,burntnodes,basetime]=firedetection2(hn,bp,x,y,x1,y1,row,col)
function firedetection2(hn,x,y,x1,y1,row,col)
%[x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%figure(4)
[r c]=size(x);
[r1 c1]=size(x1);
dh=sqrt((x(1,1)-x(1,c))^2 + (y(1,1)-y(1,c))^2); %horizontal distance
dv=sqrt((x(1,1)-x(r,1))^2 + (y(1,1)-y(r,1))^2); %vertical distance
start_fire=[((dh/2)+x(1,1)) ((dv/2)+4)]; %origin of fire
%plot(start_fire(1),start_fire(2),'ko')
div=row/col;
% time=0; %time in sec for the fire to reach at the edge of forest
% axis=[]; %values of axis of ellipse from the start point to the boundry of forest
% burntnodes=[]; % number of burnt nodes
% basetime=[]; 
if (start_fire(2)-y(1,1))<(start_fire(1)-x(1,1)) %vertical distance < horizontal distance
    ii=1; %horizontal axis
    ij=1; %vertical axis
    deadnodeset_b=[];
    deadnodeset_a=[];
%    n=0;    
    X1=x;
    Y1=y;
    while ii<=(start_fire(2)-y(1,1)) || ij<=(start_fire(2)-y(1,1)) % detect vertical radius first, and then horizontal               
%        subplot(1,2,1)        
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        deadnodeset_b=deadnodeset_a;
        %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);       
        deadnodeset=dead_nodes(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij,div); % to detect and mark the dead nodes              
        deadnodeset_a=deadnodeset;        
        unik_deadnodes=checkdeadnode2(deadnodeset_a,deadnodeset_b); % to delete the dead connections        
        [X,Y]=scene2(deadnodeset,unik_deadnodes,x,y,x1,y1,row,col,X1,Y1,hn);
%        flowcontrol2(unik_deadnodes,deadnodeset_a,hn,deadnodeset_b)
%         [X,Y]=bully(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1);
        X1=X;
        Y1=Y;
        %flowinfo1(row,col,hn,x,y,deadnodeset_a,ra)       
        %checkdeadnode1(deadnodeset,x,y,x1,y1,bp)
          
%         subplot(1,2,2)
%         ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
%         [x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%         % deadnodeset_b=deadnodeset_a;                
%         %deadnodeset1=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij); % to detect and mark the dead nodes       
%         %deadnodeset_a=deadnodeset;        
%         %checkdeadnode(deadnodeset1,x,y,x1,y1,bp)
%         checkdeadnode(deadnodeset,x,y,x1,y1,bp,unik_deadnodes)
        
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
        
%         time=time+1;
%         axis=[axis; ii ij];
%         [ra ca]=size(deadnodeset);
%         burntnodes=[burntnodes ra];
%         n=n+ii;
%         basetime=[basetime n];        
    end    
elseif (start_fire(2)-y(1,1))>(start_fire(1)-x(1,1)) %vertical distance > horizontal distance
    ii=1; %horizontal axis
    ij=1; %vertical axis
    deadnodeset_b=[];
    deadnodeset_a=[];
%     n=0;
    X1=x;
    Y1=y;
    while ii<=(start_fire(1)-x(1,1)) || ij<=(start_fire(1)-x(1,1))     % detect horizontal radius first, and then vertical
%        subplot(1,2,1)
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        deadnodeset_b=deadnodeset_a;
        %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);       
        deadnodeset=dead_nodes(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij,div);  % to detect and mark the dead nodes
        deadnodeset_a=deadnodeset;        
        unik_deadnodes=checkdeadnode2(deadnodeset_a,deadnodeset_b); % to delete the dead connections        
        [X,Y]=scene2(deadnodeset,unik_deadnodes,x,y,x1,y1,row,col,X1,Y1,hn);
%         %flowcontrol2(unik_deadnodes,deadnodeset_a,hn,deadnodeset_b)
%         [X,Y]=bully(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1);
        X1=X;
        Y1=Y;
%         subplot(1,2,2)
%         ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
%         [x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%         % deadnodeset_b=deadnodeset_a;
%         %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);                
%         %deadnodeset1=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij); % to detect and mark the dead nodes                
%         %deadnodeset_a=deadnodeset;        
%         % checkdeadnode(deadnodeset1,x,y,x1,y1,bp)
%         checkdeadnode(deadnodeset,x,y,x1,y1,bp,unik_deadnodes)
       
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
        
%         time=time+1;
%         axis=[axis; ii ij];
%         [ra ca]=size(deadnodeset);
%         burntnodes=[burntnodes ra];
%         n=n+ii;
%         basetime=[basetime n];
    end    
end
end

Code 8 – Function M File –scene2.m

function [X,Y]=scene2(deadnodeset,unik_deadnodes,x,y,x1,y1,row,col,X1,Y1,hn)
bars=0;
while bars>=0
    subplot(1,2,1)
    bar(bars)
    axis([0 3 0 110])
    grid on
    ylabel('Temperature')
    set(gca,'XTick',[])

    bars=bars+randi(10,1,1);
    
    subplot(1,2,2)
    rectangle('Position',[0 ((row*4)+6) 5 4],'Facecolor','r')
    text(1,((row*4)+8),'BASE')
    hold on
    cp=[5 ((row*4)+6)]; % connectiong point of the base station
    
    plot(x,y,'go','LineWidth',5)
    plot(x1,y1,'g*')
    [r c]=size(deadnodeset);
    for i=1:r
        plot(deadnodeset(i,1),deadnodeset(i,2),'ko','LineWidth',5)
    end    
    set(gca,'XTick',[])
    set(gca,'YTick',[])
    
    [X,Y]=bully2(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1);

    [ra ca]=size(unik_deadnodes);
    for i=1:ra
        plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ro','LineWidth',3)    
        plot([unik_deadnodes(i,1) cp(1)],[unik_deadnodes(i,2) cp(2)],'c');
    end
    pause(0.5)
    for i=1:ra    
        plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'yo','LineWidth',3)
        plot([unik_deadnodes(i,1) cp(1)],[unik_deadnodes(i,2) cp(2)],'c');
    end
    pause(0.5)    
    if bars>=90
        break
    end
end
    
for i=1:ra    
    plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ko','LineWidth',3)
    plot([unik_deadnodes(i,1) cp(1)],[unik_deadnodes(i,2) cp(2)],'w')
end

Code 9 – Function M File –coloring_b.m

function coloring_b(X,Y,row,col,x,y,x1,y1)

%coloring blue
[rr cc]=size(X);
for i=1:rr
    a=X(i,:);
    b=Y(i,:);    
    nn1=[];
    nn2=[];
    for j=1:length(a)
        if a(j)==0
            nn1=[nn1 j];
        end        
        if b(j)==0
            nn2=[nn2 j];
        end
    end
    a(nn1)=[];
    b(nn2)=[];    
    for k=1:length(a)-1
        a1=a(k);
        a2=b(k);
        b1=a(k+1);
        b2=b(k+1);        
        plot([a1 b1],[a2 b2],'b','LineWidth',2) %horizontal 
    end
    %pause(0.3)       
    if ~isequal(i,rr)
        c=X(i+1,:);
        d=Y(i+1,:);
        c(nn1)=[];
        d(nn2)=[];        
        for k=1:length(a)
            a1=a(k);
            a2=b(k);
            b1=c(k);
            b2=d(k);            
            if ~isequal(b1,0) || ~isequal(b2,0)
                plot([a1 b1],[a2 b2],'b','LineWidth',2) %vertical
            end
        end
    end    
    if isequal(i,rr)
        for k=1:length(a)
            plot([a(k) 5],[b(k) ((row*4)+6)],'b','LineWidth',2)
        end
    end    
end

[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])
            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))])
            plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))])
            plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))])
        end
    end
end

Code 10 – Function M File – bully.m

function [X,Y]=bully(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1)
bars=0;
while bars>=0
    subplot(1,2,1)
    bar(bars)
    axis([0 3 0 110])
    grid on
    ylabel('Temperature')
    set(gca,'XTick',[])

    bars=bars+10;
    
    subplot(1,2,2)
    rectangle('Position',[0 ((row*4)+6) 5 4],'Facecolor','r')
    text(1,((row*4)+8),'BASE')
    hold on
    coloring_b(X1,Y1,row,col,x,y,x1,y1)

    plot(x,y,'go','LineWidth',5)
    plot(x1,y1,'g*')
    set(gca,'XTick',[])
    set(gca,'YTick',[])

    [r c]=size(deadnodeset);
    for i=1:r
        plot(deadnodeset(i,1),deadnodeset(i,2),'ko','LineWidth',3)
    end    
    [ra ca]=size(unik_deadnodes);
    for i=1:ra
        plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ro','LineWidth',3)    
    end
    pause(0.5)
    for i=1:ra    
        plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'yo','LineWidth',3)
    end
    pause(0.5)    
    if bars>=90
        %bars=1;
        break
    end
end
    
for i=1:ra    
    plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ko','LineWidth',3)
end

[rr cc]=size(x);
[r3 c3]=size(deadnodeset);

X=x;
Y=y;

for i=1:rr
    for j=1:cc     
        for k=1:r3
            if x(i,j)==deadnodeset(k,1) && y(i,j)==deadnodeset(k,2)               
                a1=x1(((2*i)-1),((2*j)-1));
                a2=y1(((2*i)-1),((2*j)-1));
                b1=x1(((2*i)-1),(2*j));
                b2=y1(((2*i)-1),(2*j));
                c1=x1((2*i),((2*j)-1));
                c2=y1((2*i),((2*j)-1));
                d1=x1((2*i),(2*j));
                d2=y1((2*i),(2*j));
                
                a=[a1 a2];
                b=[b1 b2];
                c=[c1 c2];
                d=[d1 d2];

                for l=1:r3 
                    if a(1)==deadnodeset(l,1) && a(2)==deadnodeset(l,2)
                        a=[];
                        break
                    else
                        X(i,j)=a(1); %a becomes the new head
                        Y(i,j)=a(2);
                    end
                end
                    
                if isempty(a)
                   for l=1:r3                       
                       if b(1)==deadnodeset(l,1) && b(2)==deadnodeset(l,2)
                           b=[];
                           break
                       else
                            X(i,j)=b(1); %b becomes the new head
                            Y(i,j)=b(2);
                       end
                   end 
                end
                
                if isempty(b)
                   for l=1:r3                       
                       if c(1)==deadnodeset(l,1) && c(2)==deadnodeset(l,2)
                           c=[];
                          break
                       else
                            X(i,j)=c(1); %c becomes the new head
                            Y(i,j)=c(2);                            
                       end
                   end 
                end
               
                if isempty(c)
                   for l=1:r3                       
                       if d(1)==deadnodeset(l,1) && d(2)==deadnodeset(l,2)
                           d=[];
                           break
                       else
                            X(i,j)=d(1); %d becomes the new head
                            Y(i,j)=d(2);
                       end
                   end 
                end
                
                if isempty(d)
                    X(i,j)=0; %the whole cluster is burnt
                    Y(i,j)=0;
                end
            end
        end
    end
end
% new head nodes obtained (up)
for i=1:rr
    for j=1:cc
        xyz=0;
        if x(i,j)==X(i,j) && y(i,j)==Y(i,j)
            xyz=1;
        else
            xyz=0;
            break
        end        
    end
    if xyz==0
        break
    end
end

if xyz==1
    for i=1:row    
        for j=1:col
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])        
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])        
        end
    end
end  

[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot(X(i,j),Y(i,j),'go','LineWidth',5)
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    abc=plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    %delete(abc)
%                    disp('br')
                    plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
                    abc=plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))],'w')

                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1((2*i),((2*j)-1)))
                    abc=plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && isequal(deadnodeset(k,2),y1((2*i),((2*j)-1))) 
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))],'w')
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),(2*j))) && ~isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
                    abc=plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),(2*j))) && isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
%                    delete(abc)
%                    disp('br')
                    plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))],'w')        
                    break
                end
            end        
            
            clear k abc
            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot(X(i,j),Y(i,j),'go','LineWidth',5)
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
                    abc=plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),((2*j)-1))) && isequal(deadnodeset(k,2),y1(((2*i)-1),((2*j)-1)))
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && ~isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
                    abc=plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1(((2*i)-1),(2*j))) && isequal(deadnodeset(k,2),y1(((2*i)-1),(2*j)))
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))],'w')
                    break
                end
            end
            
            clear k abc
            
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && ~isequal(deadnodeset(k,2),y1((2*i),((2*j)-1)))
                    abc=plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),((2*j)-1))) && isequal(deadnodeset(k,2),y1((2*i),((2*j)-1))) 
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))],'w')
                    break
                end
            end
            
            clear k abc
        
            for k=1:r3
                if ~isequal(deadnodeset(k,1),x1((2*i),(2*j))) && ~isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
                    abc=plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))]);
                elseif isequal(deadnodeset(k,1),x1((2*i),(2*j))) && isequal(deadnodeset(k,2),y1((2*i),(2*j)))                
%                    delete(abc)
%                    disp('br')
                    plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))],'w')        
                    break
                end
            end                    
        end
    end
end

%clear rr cc
coloring_w(X1,Y1,row,col,x,y,x1,y1)
coloring_c(X,Y,row,col,x,y,x1,y1)



%pause    
end

Code 11 – Function M File – fire_detection.m

function [axis,time,burntnodes,basetime]=fire_detection(hn,bp,x,y,x1,y1,row,col)

%[x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%figure(4)
[r c]=size(x);
[r1 c1]=size(x1);
dh=sqrt((x(1,1)-x(1,c))^2 + (y(1,1)-y(1,c))^2); %horizontal distance
dv=sqrt((x(1,1)-x(r,1))^2 + (y(1,1)-y(r,1))^2); %vertical distance
start_fire=[((dh/2)+x(1,1)) ((dv/2)+4)]; %origin of fire
%plot(start_fire(1),start_fire(2),'ko')
div=row/col;
time=0; %time in sec for the fire to reach at the edge of forest
axis=[]; %values of axis of ellipse from the start point to the boundry of forest
burntnodes=[]; % number of burnt nodes
basetime=[]; 
if (start_fire(2)-y(1,1))<(start_fire(1)-x(1,1)) %vertical distance < horizontal distance
    ii=1; %horizontal axis
    ij=1; %vertical axis
    deadnodeset_b=[];
    deadnodeset_a=[];
    n=0;    
    X1=x;
    Y1=y;
    while ii<=(start_fire(2)-y(1,1)) || ij<=(start_fire(2)-y(1,1)) % detect vertical radius first, and then horizontal               
%        subplot(1,2,1)        
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        deadnodeset_b=deadnodeset_a;
        %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);       
        deadnodeset=dead_nodes(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij,div); % to detect and mark the dead nodes       
        deadnodeset_a=deadnodeset;        
        unik_deadnodes=checkdeadnode2(deadnodeset_a,deadnodeset_b); % to delete the dead connections        
%        flowcontrol2(unik_deadnodes,deadnodeset_a,hn,deadnodeset_b)
        [X,Y]=bully(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1);
        X1=X;
        Y1=Y;
        %flowinfo1(row,col,hn,x,y,deadnodeset_a,ra)       
        %checkdeadnode1(deadnodeset,x,y,x1,y1,bp)
          
%         subplot(1,2,2)
%         ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
%         [x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%         % deadnodeset_b=deadnodeset_a;                
%         %deadnodeset1=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij); % to detect and mark the dead nodes       
%         %deadnodeset_a=deadnodeset;        
%         %checkdeadnode(deadnodeset1,x,y,x1,y1,bp)
%         checkdeadnode(deadnodeset,x,y,x1,y1,bp,unik_deadnodes)
        
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
        
        time=time+1;
        axis=[axis; ii ij];
        [ra ca]=size(deadnodeset);
        burntnodes=[burntnodes ra];
        n=n+ii;
        basetime=[basetime n];        
    end    
elseif (start_fire(2)-y(1,1))>(start_fire(1)-x(1,1)) %vertical distance > horizontal distance
    ii=1; %horizontal axis
    ij=1; %vertical axis
    deadnodeset_b=[];
    deadnodeset_a=[];
    n=0;
    X1=x;
    Y1=y;
    while ii<=(start_fire(1)-x(1,1)) || ij<=(start_fire(1)-x(1,1))     % detect horizontal radius first, and then vertical
%        subplot(1,2,1)
        ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
        deadnodeset_b=deadnodeset_a;
        %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);       
        deadnodeset=dead_nodes(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij,div);  % to detect and mark the dead nodes
        deadnodeset_a=deadnodeset;        
        unik_deadnodes=checkdeadnode2(deadnodeset_a,deadnodeset_b); % to delete the dead connections        
        %flowcontrol2(unik_deadnodes,deadnodeset_a,hn,deadnodeset_b)
        [X,Y]=bully(deadnodeset,x,y,x1,y1,hn,unik_deadnodes,row,col,X1,Y1);
        X1=X;
        Y1=Y;
%         subplot(1,2,2)
%         ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);
%         [x,y,x1,y1,row,col,bp]=placing_sensors(hn);
%         % deadnodeset_b=deadnodeset_a;
%         %ellipse((ii),(ij),0,start_fire(1),start_fire(2),100);                
%         %deadnodeset1=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij); % to detect and mark the dead nodes                
%         %deadnodeset_a=deadnodeset;        
%         % checkdeadnode(deadnodeset1,x,y,x1,y1,bp)
%         checkdeadnode(deadnodeset,x,y,x1,y1,bp,unik_deadnodes)
       
        pause(0.3)
        ii=ii+1;
        ij=ii*div;
        
        time=time+1;
        axis=[axis; ii ij];
        [ra ca]=size(deadnodeset);
        burntnodes=[burntnodes ra];
        n=n+ii;
        basetime=[basetime n];
    end    
end
end

Code 12 – Function M File – coloring_w.m

function coloring_w(X,Y,row,col,x,y,x1,y1)

%coloring blue
[rr cc]=size(X);
for i=1:rr
    a=X(i,:);
    b=Y(i,:);    
    nn1=[];
    nn2=[];
    for j=1:length(a)
        if a(j)==0
            nn1=[nn1 j];
        end        
        if b(j)==0
            nn2=[nn2 j];
        end
    end
    a(nn1)=[];
    b(nn2)=[];    
    for k=1:length(a)-1
        a1=a(k);
        a2=b(k);
        b1=a(k+1);
        b2=b(k+1);        
        plot([a1 b1],[a2 b2],'w','LineWidth',2) %horizontal white
    end
    %pause(0.3)       
    if ~isequal(i,rr)
        c=X(i+1,:);
        d=Y(i+1,:);
        c(nn1)=[];
        d(nn2)=[];        
        for k=1:length(a)
            a1=a(k);
            a2=b(k);
            b1=c(k);
            b2=d(k);            
            if ~isequal(b1,0) || ~isequal(b2,0)
                plot([a1 b1],[a2 b2],'w','LineWidth',2) %vertical white
            end
        end
    end    
    if isequal(i,rr)
        for k=1:length(a)
            plot([a(k) 5],[b(k) ((row*4)+6)],'w','LineWidth',2)
        end
    end    
end
[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))],'w')
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))],'w')
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))],'w')
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))],'w')
            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))],'w')
            plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))],'w')
            plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))],'w')
            plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))],'w')
        end
    end
end

Code 13 – Function M File – coloring_c.m

function coloring_c(X,Y,row,col,x,y,x1,y1)

%coloring blue
[rr cc]=size(X);
for i=1:rr
    a=X(i,:);
    b=Y(i,:);    
    nn1=[];
    nn2=[];
    for j=1:length(a)
        if a(j)==0
            nn1=[nn1 j];
        end        
        if b(j)==0
            nn2=[nn2 j];
        end
    end
    a(nn1)=[];
    b(nn2)=[];    
    for k=1:length(a)-1
        a1=a(k);
        a2=b(k);
        b1=a(k+1);
        b2=b(k+1);        
        plot([a1 b1],[a2 b2],'c','LineWidth',2) %horizontal white
    end
    pause(0.3)       
    if ~isequal(i,rr)
        c=X(i+1,:);
        d=Y(i+1,:);
        c(nn1)=[];
        d(nn2)=[];        
        for k=1:length(a)
            a1=a(k);
            a2=b(k);
            b1=c(k);
            b2=d(k);            
            if ~isequal(b1,0) || ~isequal(b2,0)
                plot([a1 b1],[a2 b2],'c','LineWidth',2) %vertical white
            end
        end
    end    
    pause(0.3)
    if isequal(i,rr)
        for k=1:length(a)
            plot([a(k) 5],[b(k) ((row*4)+6)],'c','LineWidth',2)
        end
    end    
end
[r c]=size(X);
for i=1:r
    for j=1:c
        if X(i,j)==x(i,j) && Y(i,j)==y(i,j)
            plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))])
            plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))])
            plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))])
            
        elseif X(i,j)~=0 && Y(i,j)~=0
            plot([X(i,j) x1(((2*i)-1),((2*j)-1))],[Y(i,j) y1(((2*i)-1),((2*j)-1))])
            plot([X(i,j) x1(((2*i)-1),(2*j))],[Y(i,j) y1(((2*i)-1),(2*j))])
            plot([X(i,j) x1((2*i),((2*j)-1))],[Y(i,j) y1((2*i),((2*j)-1))])
            plot([X(i,j) x1((2*i),(2*j))],[Y(i,j) y1((2*i),(2*j))])
        end
    end
end

Code 14 – Function M File – normal_condition.m

function normal_condition(hn)

[x,y,x1,y1,row,col,bp]=placing_sensors(hn);

for i=1:row
    column=col;
%     if i==1 && mod(hn,col)~=0           
%         column=hn-((row-1)*col);        
%     end
    
    a1=[x(i,1) x(i,column)];
    b1=[y(i,1) y(i,column)];
    
    abc=plot(a1,b1,'c','LineWidth',2);
    pause(0.3)
        
    if i==row
        break
    end
    
    a2=x(i,1:column);
    b2=y(i,1:column);
    a3=x(i+1,1:column);
    b3=y(i+1,1:column);
    
    for j=1:length(a2)
        plot([a2(j) a3(j)],[b2(j) b3(j)],'c','LineWidth',2)
    end      
    pause(0.3)
end

a4=x(row,:);
b4=y(row,:);

for i=1:length(a4)
    plot([bp(1) a4(i)],[bp(2) b4(i)],'c','LineWidth',2)
end

end

Code 15 – Function M File –flowcontrol2.m

function flowcontrol2(unik_deadnodes,deadnodeset_a,hn,deadnodeset_b)

%pause(0.3)
%set(gca,'Color','w')

% col=5*ceil(hn/30); %0-30hn=5col, 30-60hn=10col...
% row=ceil(hn/col); 
% 
% rectangle('Position',[0 ((row*4)+6) 5 4],'Facecolor','r')
% text(1,((row*4)+8),'BASE')
% hold on
% 
% plot(x,y,'go','LineWidth',5)
% plot(x1,y1,'g*')
% axis([-5 ((col*4)+5) 0 ((row*4)+10)])
% 
% bp=[5 ((4*row)+6)]; % base station's reciever point
% a=x(1,:);
% b=y(end,:);
% for i=1:length(a)
%     plot([a(i) bp(1)],[b(i) bp(2)],'LineWidth',2);
% end
% 
% difference=(row*col)-hn;
% if difference~=0
%     for i=1:difference
%         plot(x(1,end-(i-1)) , y(1,end-(i-1)) , 'wo','LineWidth',5)
%     end
% end
% clear difference

[x,y,x1,y1,row,col,bp]=placing_sensors(hn);
% fresh=freshnodes(deadnodeset_a,deadnodeset_b);

% [ra ca]=size(fresh);
% for i=1:ra
%     plot(fresh(i,1),fresh(i,2),'ro','LineWidth',3)    
% end
% pause(0.3)
% for i=1:ra    
%     plot(fresh(i,1),fresh(i,2),'yo','LineWidth',3)
% end
% pause(0.3)
% for i=1:ra    
%     plot(fresh(i,1),fresh(i,2),'ko','LineWidth',3)
% end

[ra ca]=size(unik_deadnodes);
for i=1:ra
    plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ro','LineWidth',3)    
end
pause(0.5)
for i=1:ra    
    plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'yo','LineWidth',3)
end
pause(0.5)
for i=1:ra    
    plot(unik_deadnodes(i,1),unik_deadnodes(i,2),'ko','LineWidth',3)
end



% [r c]=size(unik_deadnodes);
% for i=1:r
%     plot(unik_deadnodes(i,1),unik_deadnodes(1,2),'ko')
% end

for i=1:row
    column=col;
    if i==1 && mod(hn,col)~=0           
        column=hn-((row-1)*col);        
    end
    
    a1=[x(i,1) x(i,column)];
    b1=[y(i,1) y(i,column)];
    
    abc=plot(a1,b1,'c','LineWidth',2);
    
%     dead=[];
%     for j=1:column
%         for k=1:ra
%             if x(i,j)==deadnodeset_a(k,1) && y(i,j)==deadnodeset_a(k,2)                
%                 dead=[dead; x(i,j) y(i,j)];                
%             end
%         end       
%     end
%     if ~isempty(dead)
%         plot([dead(1,1) dead(end,1)],[dead(1,2) dead(end,2)],'w','LineWidth',2)       
%     end
[r1 c1]=size(x);
[r2 c2]=size(x1);
[r3 c3]=size(deadnodeset_a);

for ii=1:r1
    for j=1:c1
        for k=1:r3
            if x(ii,j)==deadnodeset_a(k,1) && y(ii,j)==deadnodeset_a(k,2)
               if ii+1<=r1
                    plot([x(ii,j) x(ii+1,j)],[y(ii,j) y(ii+1,j)],'w','LineWidth',2)                    
               end
                if ii-1>=1
                    plot([x(ii,j) x(ii-1,j)],[y(ii,j) y(ii-1,j)],'w','LineWidth',2)
                end
                if j+1<=c1
                    plot([x(ii,j) x(ii,j+1)],[y(ii,j) y(ii,j+1)],'w','LineWidth',2)
                end
                if j-1>=1
                    plot([x(ii,j) x(ii,j-1)],[y(ii,j) y(ii,j-1)],'w','LineWidth',2)
                end
                
                if ii==r1
                    plot([bp(1) x(ii,j)],[bp(2) y(ii,j)],'w','LineWidth',2)
                end
            end
        end
    end
end

        
    pause(0.3)
        
    if i==row
        break
    end
    
    a2=x(i,1:column);
    b2=y(i,1:column);
    a3=x(i+1,1:column);
    b3=y(i+1,1:column);
    
    for j=1:length(a2)
        plot([a2(j) a3(j)],[b2(j) b3(j)],'c','LineWidth',2)
    end      
    pause(0.3)
end

a4=x(row,:);
b4=y(row,:);

for i=1:length(a4)
    plot([bp(1) a4(i)],[bp(2) b4(i)],'c','LineWidth',2)
end

[r1 c1]=size(deadnodeset_a);
for i=1:r1
    plot(deadnodeset_a(i,1),deadnodeset_a(i,2),'ko','LineWidth',3)    
end

end

Code 16 – Function M File –ellipse.m

function  [x,y] = ellipse(a,b,phi,x0,y0,n)

n_dflt = 100;   % Default for number of points

if nargin < 6, n = n_dflt; end
if nargin < 5, y0 = 0; end
if nargin < 4, x0 = 0; end
if nargin < 3, phi = 0; end
if nargin < 2, b = 1; end
if nargin < 1, a = 1; end

th = linspace(0,2*pi,n+1);
x = a*cos(th);
y = b*sin(th);

c = cos(phi);
s = sin(phi);

th = x*c-y*s+x0;
y = x*s+y*c+y0;
x = th;

if nargout==0, plot(x,y,'r'); end

end

Code 17 – Function M File –checkdeadnode.m

function checkdeadnode(deadnodeset,x,y,x1,y1,bp,unik_deadnodes)

[r c]=size(x);
[r1 c1]=size(x1);
[r2 c2]=size(deadnodeset);

% for i=1:r1
%     for j=1:c1
%         for k=1:r2
%             if x1(i,j)==deadnodeset(k,1) && y1(i,j)==deadnodeset(k,2)
%                 plot([x1(i,j) x(ceil(i/2),ceil(j/2))],[y1(i,j) y(ceil(i/2),ceil(j/2))],'w')
%                 %plot(deadnodeset(k,1),deadnodeset(k,2),'ko','LineWidth',3)
%                 %[ra ca]=size(deadnodeset);
%                 
%             end
%         end
%     end
% end

[rr cc]=size(unik_deadnodes);
for ii=1:rr
    plot(unik_deadnodes(ii,1),unik_deadnodes(ii,2),'ro','LineWidth',3)    
end
pause(0.5)
for ii=1:rr    
    plot(unik_deadnodes(ii,1),unik_deadnodes(ii,2),'yo','LineWidth',3)
end
pause(0.5)
for ii=1:rr    
    plot(unik_deadnodes(ii,1),unik_deadnodes(ii,2),'ko','LineWidth',3)
end

for i=1:r
    for j=1:c
        for k=1:r2 
            if x(i,j)==deadnodeset(k,1) && y(i,j)==deadnodeset(k,2)
                plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))],'w')
                plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))],'w')
                plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))],'w')                       
                              
                if (x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2)) && (x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2)) % all four subnodes of the head are out of fire range. 
                    %plot(x1(((2*i)-1),((2*j)-1)),y1(((2*i)-1),((2*j)-1)),'go','LineWidth',5)
                    plot([x1(((2*i)-1),((2*j)-1)) x1((2*i)-1)],[y1(((2*i)-1),((2*j)-1)) y1(((2*i)-1),(2*j))],'r')
                    plot([x1(((2*i)-1),((2*j)-1)) x1((2*i),((2*j)-1))],[y1(((2*i)-1),((2*j)-1)) y1((2*i),((2*j)-1))],'r')
                    plot([x1(((2*i)-1),((2*j)-1)) x1((2*i),(2*j))],[y1(((2*i)-1),((2*j)-1)) y1((2*i),(2*j))],'r')
                    
                    % a is head
                    if i+1<=r && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i+1,j)],[y1(((2*i)-1),((2*j)-1)) y(i+1,j)],'b','LineWidth',2)
                    end
                    if i-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i-1,j)],[y1(((2*i)-1),((2*j)-1)) y(i-1,j)],'b','LineWidth',2)
                    end
                    if j+1<=c && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j+1)],[y1(((2*i)-1),((2*j)-1)) y(i,j+1)],'b','LineWidth',2)
                    end
                    if j-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j-1)],[y1(((2*i)-1),((2*j)-1)) y(i,j-1)],'b','LineWidth',2)
                    end                   
                    
                elseif (x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2)) && (x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2))
                    plot([x1(((2*i)-1),((2*j)-1)) x1((2*i)-1)],[y1(((2*i)-1),((2*j)-1)) y1(((2*i)-1),(2*j))],'r')
                    plot([x1(((2*i)-1),((2*j)-1)) x1((2*i),((2*j)-1))],[y1(((2*i)-1),((2*j)-1)) y1((2*i),((2*j)-1))],'r')
                    
                    % a is head
                    if i+1<=r && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i+1,j)],[y1(((2*i)-1),((2*j)-1)) y(i+1,j)],'b','LineWidth',2)
                    end
                    if i-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i-1,j)],[y1(((2*i)-1),((2*j)-1)) y(i-1,j)],'b','LineWidth',2)
                    end
                    if j+1<=c && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j+1)],[y1(((2*i)-1),((2*j)-1)) y(i,j+1)],'b','LineWidth',2)
                    end
                    if j-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j-1)],[y1(((2*i)-1),((2*j)-1)) y(i,j-1)],'b','LineWidth',2)
                    end                   
                    
                elseif (x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2)) && (x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2))
                    plot([x1((2*i)-1) x1(2*i)],[y1(((2*i)-1),(2*j)) y1((2*i),((2*j)-1))],'r')
                    plot([x1((2*i)-1) x1((2*i),(2*j))],[y1(((2*i)-1),(2*j)) y1((2*i),(2*j))],'r')
                    
                    %b is head
                    if i+1<=r && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i+1,j)],[y1(((2*i)-1),(2*j)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i-1,j)],[y1(((2*i)-1),(2*j)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i,j+1)],[y1(((2*i)-1),(2*j)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i,j-1)],[y1(((2*i)-1),(2*j)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2)) && (x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)) 
                    plot([x1((2*i),((2*j)-1)) x1((2*i),(2*j))],[y1((2*i),((2*j)-1)) y1((2*i),(2*j))],'r')
                    plot([x1((2*i),((2*j)-1)) x1(((2*i)-1),((2*j)-1))],[y1((2*i),((2*j)-1)) y1(((2*i)-1),((2*j)-1))],'r')
                    
                    % c is head
                    if i+1<=r && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i+1,j)],[y1((2*i),((2*j)-1)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i-1,j)],[y1((2*i),((2*j)-1)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i,j+1)],[y1((2*i),((2*j)-1)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i,j-1)],[y1((2*i),((2*j)-1)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2)) && (x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2))
                    plot([x1((2*i),(2*j)) x1(((2*i)-1),((2*j)-1))],[y1((2*i),(2*j)) y1(((2*i)-1),((2*j)-1))],'r')
                    plot([x1((2*i),(2*j)) x1((2*i)-1)],[y1((2*i),(2*j)) y1(((2*i)-1),(2*j))],'r')
                    
                    % d is head
                    if i+1<=r && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i+1,j)],[y1((2*i),(2*j)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i-1,j)],[y1((2*i),(2*j)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i,j+1)],[y1((2*i),(2*j)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i,j-1)],[y1((2*i),(2*j)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2))
                    plot([x1(((2*i)-1),((2*j)-1)) x1((2*i)-1)],[y1(((2*i)-1),((2*j)-1)) y1(((2*i)-1),(2*j))],'r')
                    
                    % a is head
                    if i+1<=r && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i+1,j)],[y1(((2*i)-1),((2*j)-1)) y(i+1,j)],'b','LineWidth',2)
                    end
                    if i-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i-1,j)],[y1(((2*i)-1),((2*j)-1)) y(i-1,j)],'b','LineWidth',2)
                    end
                    if j+1<=c && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j+1)],[y1(((2*i)-1),((2*j)-1)) y(i,j+1)],'b','LineWidth',2)
                    end
                    if j-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j-1)],[y1(((2*i)-1),((2*j)-1)) y(i,j-1)],'b','LineWidth',2)
                    end                   
                    
                elseif (x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2)) && (x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2))
                    plot([x1((2*i)-1) x1((2*i),((2*j)-1))],[y1(((2*i)-1),(2*j)) y1((2*i),((2*j)-1))],'r')              
                    
                    %b is head
                    if i+1<=r && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i+1,j)],[y1(((2*i)-1),(2*j)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i-1,j)],[y1(((2*i)-1),(2*j)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i,j+1)],[y1(((2*i)-1),(2*j)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i,j-1)],[y1(((2*i)-1),(2*j)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2)) && (x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2))
                    plot([(x1((2*i),((2*j)-1))) x1((2*i),(2*j))],[y1((2*i),((2*j)-1)) y1((2*i),(2*j))],'r')
                    
                    % c is head
                    if i+1<=r && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i+1,j)],[y1((2*i),((2*j)-1)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i-1,j)],[y1((2*i),((2*j)-1)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i,j+1)],[y1((2*i),((2*j)-1)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i,j-1)],[y1((2*i),((2*j)-1)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2)) && (x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2))
                    plot([x1((2*i),(2*j)) x1(((2*i)-1),((2*j)-1))],[y1((2*i),(2*j)) y1(((2*i)-1),((2*j)-1))],'r')
                    
                    % d is head
                    if i+1<=r && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i+1,j)],[y1((2*i),(2*j)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i-1,j)],[y1((2*i),(2*j)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i,j+1)],[y1((2*i),(2*j)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i,j-1)],[y1((2*i),(2*j)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)) 
                    % a is head
                    if i+1<=r && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i+1,j)],[y1(((2*i)-1),((2*j)-1)) y(i+1,j)],'b','LineWidth',2)
                    end
                    if i-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i-1,j)],[y1(((2*i)-1),((2*j)-1)) y(i-1,j)],'b','LineWidth',2)
                    end
                    if j+1<=c && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j+1)],[y1(((2*i)-1),((2*j)-1)) y(i,j+1)],'b','LineWidth',2)
                    end
                    if j-1>=1 && x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1(((2*i)-1),((2*j)-1)) x(i,j-1)],[y1(((2*i)-1),((2*j)-1)) y(i,j-1)],'b','LineWidth',2)
                    end                   
                    
                elseif (x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2))
                    %b is head
                    if i+1<=r && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i+1,j)],[y1(((2*i)-1),(2*j)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i-1,j)],[y1(((2*i)-1),(2*j)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i,j+1)],[y1(((2*i)-1),(2*j)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i)-1)~=deadnodeset(k,1) && y1(((2*i)-1),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i)-1) x(i,j-1)],[y1(((2*i)-1),(2*j)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2))
                    % c is head
                    if i+1<=r && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i+1,j)],[y1((2*i),((2*j)-1)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i-1,j)],[y1((2*i),((2*j)-1)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i,j+1)],[y1((2*i),((2*j)-1)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i),((2*j)-1))~=deadnodeset(k,1) && y1((2*i),((2*j)-1))~=deadnodeset(k,2)
                        plot([x1((2*i),((2*j)-1)) x(i,j-1)],[y1((2*i),((2*j)-1)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
                elseif (x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2))
                    % d is head
                    if i+1<=r && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i+1,j)],[y1((2*i),(2*j)) y(i+1,j)],'b','LineWidth',3)                    
                    end
                    if i-1>=1 && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i-1,j)],[y1((2*i),(2*j)) y(i-1,j)],'b','LineWidth',3)
                    end
                    if j+1<=c && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i,j+1)],[y1((2*i),(2*j)) y(i,j+1)],'b','LineWidth',3)
                    end
                    if j-1>=1 && x1((2*i),(2*j))~=deadnodeset(k,1) && y1((2*i),(2*j))~=deadnodeset(k,2)
                        plot([x1((2*i),(2*j)) x(i,j-1)],[y1((2*i),(2*j)) y(i,j-1)],'b','LineWidth',3)
                    end                                                          
                    
%                 a=(x1(((2*i)-1),((2*j)-1))~=deadnodeset(k,1)) && (y1(((2*i)-1),((2*j)-1))~=deadnodeset(k,2)) 
%                 b=(x1((2*i)-1)~=deadnodeset(k,1)) &&  (y1(((2*i)-1),(2*j))~=deadnodeset(k,2))
%                 c=(x1((2*i),((2*j)-1))~=deadnodeset(k,1)) &&  (y1((2*i),((2*j)-1))~=deadnodeset(k,2))
%                 d=(x1((2*i),(2*j))~=deadnodeset(k,1)) &&  (y1((2*i),(2*j))~=deadnodeset(k,2))

                    
                                   
                end         
                
                 
                if i+1<=r
                    plot([x(i,j) x(i+1,j)],[y(i,j) y(i+1,j)],'w','LineWidth',3)                    
                end
                if i-1>=1
                    plot([x(i,j) x(i-1,j)],[y(i,j) y(i-1,j)],'w','LineWidth',3)
                end
                if j+1<=c
                    plot([x(i,j) x(i,j+1)],[y(i,j) y(i,j+1)],'w','LineWidth',3)
                end
                if j-1>=1
                    plot([x(i,j) x(i,j-1)],[y(i,j) y(i,j-1)],'w','LineWidth',3)
                end
                                
                if i==r
                    plot([bp(1) x(i,j)],[bp(2) y(i,j)],'w','LineWidth',2)
                end
                                
                plot(deadnodeset(k,1),deadnodeset(k,2),'ko','LineWidth',3)
            end
        end
    end
end

Code 18 – Function M File –checkdeadnode2.m

function unik_deadnodes=checkdeadnode2(deadnodeset_a,deadnodeset_b)

[ra ca]=size(deadnodeset_a);
[rb cb]=size(deadnodeset_b);
unik_deadnodes=deadnodeset_a;
x=[];
% deadnodeset_a
% deadnodeset_b

for i=1:ra
    for j=1:rb
        if deadnodeset_b(j,1)==deadnodeset_a(i,1) && deadnodeset_b(j,2)==deadnodeset_a(i,2)
            x=[x i];
        end
    end
end

unik_deadnodes(x,:)=[];

% is=[];
% for i=1:ra
%     for j=1:rb
%         if deadnodeset_b(j,1)==deadnodeset_a(i,1) && deadnodeset_b(j,2)==deadnodeset_a(i,2)
%             is=[is i];
%         end
%     end
% end
% %is
% if isempty(is)
%     unik_deadnodes=deadnodeset_a;
% else    
%     ind=1;
%     unik_deadnodes=[];
%     for i=1:ra        
%         if i<=length(is)
%             if i==is(ind)
%                 ind=ind+1;
%                 continue        
%             end
%         end
%         unik_deadnodes=[unik_deadnodes; deadnodeset_a(i,1) deadnodeset_a(i,2)];
%     end
% end




% [r1 c1]=size(x);
% [r2 c2]=size(x1);
% [r3 c3]=size(unik_deadnodes);
% 
% for i=1:r1
%     for j=1:c1
%         for k=1:r3
%             if x(i,j)==unik_deadnodes(k,1) && y(i,j)==unik_deadnodes(k,2)
%                 if i+1<=r1
%                     plot([x(i,j) x(i+1,j)],[y(i,j) y(i+1,j)],'w','LineWidth',2)                    
%                 end
%                 if i-1>=1
%                     plot([x(i,j) x(i-1,j)],[y(i,j) y(i-1,j)],'w','LineWidth',2)
%                 end
%                 if j+1<=c1
%                     plot([x(i,j) x(i,j+1)],[y(i,j) y(i,j+1)],'w','LineWidth',2)
%                 end
%                 if j-1>=1
%                     plot([x(i,j) x(i,j-1)],[y(i,j) y(i,j-1)],'w','LineWidth',2)
%                 end
%                 
%                 if i==r1
%                     plot([bp(1) x(i,j)],[bp(2) y(i,j)],'w','LineWidth',2)
%                 end
%             end
%         end
%     end
% end
% 
% for i=1:r2
%     for j=1:c2
%         for k=1:r3
%             if x1(i,j)==unik_deadnodes(k,1) && y1(i,j)==unik_deadnodes(k,2)
%                 plot([x1(i,j) x(ceil(i/2),ceil(j/2))],[y1(i,j) y(ceil(i/2),ceil(j/2))],'w')
%             end
%         end
%     end
% end

% for i=1:ra
%     plot(deadnodeset_a(i,1),deadnodeset_a(i,2),'ko','LineWidth',3)
% end

end

Code 19 – Function M File –dead_nodes.m

function [deadnodeset]=dead_nodes(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij,div)

deadnodeset=[];
for i=1:r
    for j=1:c                
        if (((x(i,j)-start_fire(1))^2)/(ii^2)) + (((y(i,j)-start_fire(2))^2)/(ij^2)) <= 1
            deadnodeset=[deadnodeset ; x(i,j) y(i,j)];
        end                    
    end
end
        
for i=1:r1
    for j=1:c1
        if (((x1(i,j)-start_fire(1))^2)/(ii^2)) + (((y1(i,j)-start_fire(2))^2)/(ij^2)) <= 1
            deadnodeset=[deadnodeset ; x1(i,j) y1(i,j)];
        end                                    
    end
end
        
%         difference=(r*c)-hn;
%         if difference~=0
%             for i=1:difference
%                 plot(x(1,end-(i-1)) , y(1,end-(i-1)) , 'wo','LineWidth',5)
%             end
%         end
%         clear difference
%         difference=(r1*c1)-(hn*4);
%         if ~isempty(difference)
%         d=difference/2;
%             for i=0:d-1
%                 plot(x1(1,c1-i),y1(1,c1-i),'wo','LineWidth',5)
%                 plot(x1(2,c1-i),y1(2,c1-i),'wo','LineWidth',5)        
%             end
%         end
        
end

Code 20 – Function M File –freshnodes.m

function fresh=freshnodes(deadnodeset_a,deadnodeset_b)

fresh=[];
fresh2=[];
if isempty(deadnodeset_b)
    fresh=deadnodeset_a;
else
    [r1 c1]=size(deadnodeset_a);
    [r2 c2]=size(deadnodeset_b);
    
%     for i=1:r1
%         for j=1:r2    
%             if deadnodeset_a(i,1)~=deadnodeset_b(j,1) && deadnodeset_a(i,2)~=deadnodeset_b(j,2)
%                 fresh=[fresh; deadnodeset_a(i,1) deadnodeset_a(i,2)];
%             end 
%         end
%     end               
end

end

Code 21 – Function M File –dead_nodes1.m

function [deadnodeset]=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij)

deadnodeset=[];
        for i=1:r
            for j=1:c                
                a1=sqrt(((start_fire(1)-x(i,j))^2) + ((start_fire(2)-y(i,j))^2));
                if a1<ii || a1<ij                    
                    deadnodeset=[deadnodeset ; x(i,j) y(i,j)];
                    plot(x(i,j),y(i,j),'ko','LineWidth',3)
                end
            end
        end
        
        for i=1:r1
            for j=1:c1
                a2=sqrt(((start_fire(1)-x1(i,j))^2) + ((start_fire(2)-y1(i,j))^2));
                if a2<ii || a2<ij                    
                    deadnodeset=[deadnodeset ; x1(i,j) y1(i,j)];
                    plot(x1(i,j),y1(i,j),'ko','LineWidth',3)
                end
            end
        end
        
        difference=(r*c)-hn;
        if difference~=0
            for i=1:difference
                plot(x(1,end-(i-1)) , y(1,end-(i-1)) , 'wo','LineWidth',5)
            end
        end
        clear difference
        difference=(r1*c1)-(hn*4);
        if ~isempty(difference)
        d=difference/2;
            for i=0:d-1
                plot(x1(1,c1-i),y1(1,c1-i),'wo','LineWidth',5)
                plot(x1(2,c1-i),y1(2,c1-i),'wo','LineWidth',5)        
            end
        end
        
end

Code 22 – Function M File –dead_nodes1.m

function [deadnodeset]=dead_nodes1(r,c,r1,c1,start_fire,x,y,x1,y1,hn,ii,ij)

deadnodeset=[];
        for i=1:r
            for j=1:c                
                a1=sqrt(((start_fire(1)-x(i,j))^2) + ((start_fire(2)-y(i,j))^2));
                if a1<ii || a1<ij                    
                    deadnodeset=[deadnodeset ; x(i,j) y(i,j)];
                    plot(x(i,j),y(i,j),'ko','LineWidth',3)
                end
            end
        end
        
        for i=1:r1
            for j=1:c1
                a2=sqrt(((start_fire(1)-x1(i,j))^2) + ((start_fire(2)-y1(i,j))^2));
                if a2<ii || a2<ij                    
                    deadnodeset=[deadnodeset ; x1(i,j) y1(i,j)];
                    plot(x1(i,j),y1(i,j),'ko','LineWidth',3)
                end
            end
        end
        
        difference=(r*c)-hn;
        if difference~=0
            for i=1:difference
                plot(x(1,end-(i-1)) , y(1,end-(i-1)) , 'wo','LineWidth',5)
            end
        end
        clear difference
        difference=(r1*c1)-(hn*4);
        if ~isempty(difference)
        d=difference/2;
            for i=0:d-1
                plot(x1(1,c1-i),y1(1,c1-i),'wo','LineWidth',5)
                plot(x1(2,c1-i),y1(2,c1-i),'wo','LineWidth',5)        
            end
        end
        
end

Code 23 – Function M File –flowinfo1.m

function flowinfo1(row,col,hn,x,y,deadnodeset_a,ra)

% flow of info during fire

for i=1:row
    column=col;
    if i==1 && mod(hn,col)~=0           
        column=hn-((row-1)*col);        
    end 
    
    a1=[x(i,1) x(i,column)];
    b1=[y(i,1) y(i,column)];
    
    abc=plot(a1,b1,'c','LineWidth',2);
    blanks=[];
    for j=1:col
        for k=1:ra
            if deadnodeset_a(k,1)==x(i,j) && deadnodeset_a(k,2)==y(i,j)
                blanks=[blanks;  x(i,j) y(i,j)];
            end
        end
    end
    if ~isempty(blanks)
        plot([blanks(1,1) blanks(end,1)],[blanks(1,2) blanks(end,2)],'w','LineWidth',2)
        
    end
            
    pause(0.3)
        
    if i==row
        break
    end
    
    a2=x(i,1:column);
    b2=y(i,1:column);
    a3=x(i+1,1:column);
    b3=y(i+1,1:column);
    
    for j=1:length(a2)
        plot([a2(j) a3(j)],[b2(j) b3(j)],'c','LineWidth',2)
    end      
    pause(0.3)
end

a4=x(row,:);
b4=y(row,:);

for i=1:length(a4)
    plot([bp(1) a4(i)],[bp(2) b4(i)],'c','LineWidth',2)
end

Code 24 – Function M File –test_scene.m

function test_scene(hn)

[x,y,x1,y1,row,col,bp]=placing_sensors(hn);
% stage 1
plot([x(3,3) x(4,3)],[y(3,3) y(4,3)],'w','LineWidth',2) %up
plot([x(3,3) x(2,3)],[y(3,3) y(2,3)],'w','LineWidth',2) %down
plot([x(3,3) x(3,2)],[y(3,3) y(3,2)],'w','LineWidth',2) %left
plot([x(3,3) x(3,4)],[y(3,3) y(3,4)],'w','LineWidth',2) %right
plot(x(3,3),y(3,3),'ko','LineWidth',5)

plot([x(4,3) x(5,3)],[y(4,3) y(5,3)],'w','LineWidth',2) %up
plot([x(4,3) x(3,3)],[y(4,3) y(3,3)],'w','LineWidth',2) %down
plot([x(4,3) x(4,2)],[y(4,3) y(4,2)],'w','LineWidth',2) %left
plot([x(4,3) x(4,4)],[y(4,3) y(4,4)],'w','LineWidth',2) %right
plot(x(4,3),y(4,3),'ko','LineWidth',5)

plot(x1(6,5),y1(6,5),'k*')
plot(x1(6,6),y1(6,6),'k*')
plot([x1(6,5) x(3,3)],[y1(6,5) y(3,3)],'w')
plot([x1(6,6) x(3,3)],[y1(6,6) y(3,3)],'w')
plot([x1(5,5) x(3,3)],[y1(5,5) y(3,3)],'w')
plot([x1(5,6) x(3,3)],[y1(5,6) y(3,3)],'w')


plot(x1(7,5),y1(7,5),'k*')
plot(x1(7,6),y1(7,6),'k*')
plot([x1(7,5) x(4,3)],[y1(7,5) y(4,3)],'w')
plot([x1(7,6) x(4,3)],[y1(7,6) y(4,3)],'w')
plot([x1(8,5) x(4,3)],[y1(8,5) y(4,3)],'w')
plot([x1(8,6) x(4,3)],[y1(8,6) y(4,3)],'w')

plot([x1(8,5) x(4,2)],[y1(8,5) y(4,2)],'LineWidth',2)
plot([x1(8,5) x(4,4)],[y1(8,5) y(4,4)],'LineWidth',2)
plot([x1(8,5) x(5,3)],[y1(8,5) y(5,3)],'LineWidth',2)
plot(x1(8,5),y1(8,5),'go','LineWidth',5)
plot([x1(8,5) x1(8,6)],[y1(8,5) y1(8,6)])

plot([x1(5,5) x(3,2)],[y1(5,5) y(3,2)],'LineWidth',2)
plot([x1(5,5) x(3,4)],[y1(5,5) y(3,4)],'LineWidth',2)
plot([x1(5,5) x(2,3)],[y1(5,5) y(2,3)],'LineWidth',2)
plot(x1(5,5),y1(5,5),'go','LineWidth',5)
plot([x1(5,5) x1(5,6)],[y1(5,5) y1(5,6)])

Code 25 – Function M File – checkdeadnode1.m

function checkdeadnode1(deadnodeset,x,y,x1,y1,bp)

[r c]=size(x);
[r1 c1]=size(x1);
[r2 c2]=size(deadnodeset);

for i=1:r1
    for j=1:c1
        for k=1:r2
            if x1(i,j)==deadnodeset(k,1) && y1(i,j)==deadnodeset(k,2)
                plot([x1(i,j) x(ceil(i/2),ceil(j/2))],[y1(i,j) y(ceil(i/2),ceil(j/2))],'w')
                plot(deadnodeset(k,1),deadnodeset(k,2),'ko','LineWidth',3)
            end
        end
    end
end

for i=1:r
    for j=1:c
        for k=1:r2 
            if x(i,j)==deadnodeset(k,1) && y(i,j)==deadnodeset(k,2)
                plot([x(i,j) x1(((2*i)-1),((2*j)-1))],[y(i,j) y1(((2*i)-1),((2*j)-1))],'w')        
                plot([x(i,j) x1(((2*i)-1),(2*j))],[y(i,j) y1(((2*i)-1),(2*j))],'w')
                plot([x(i,j) x1((2*i),((2*j)-1))],[y(i,j) y1((2*i),((2*j)-1))],'w')
                plot([x(i,j) x1((2*i),(2*j))],[y(i,j) y1((2*i),(2*j))],'w')                       
                
                for l=1:r2
                    if x1(((2*i)-1),((2*j)-1))~=deadnodeset(l,1) && y1(((2*i)-1),((2*j)-1))~=deadnodeset(l,2) % a is not dead and a is head
                        for m=1:r2
                            if x1((2*i)-1)~=deadnodeset(m,1) && y1(((2*i)-1),(2*j))~=deadnodeset(m,2) %b is not dead
                                plot([x1(((2*i)-1),((2*j)-1)) x1((2*i)-1)],[y1(((2*i)-1),((2*j)-1)) y1(((2*i)-1),(2*j))],'r') %ab
                            end
                        end
                        for m=1:r2
                            if x1((2*i),((2*j)-1))~=deadnodeset(m,1) && y1((2*i),((2*j)-1))~=deadnodeset(m,2)%c is not dead
                                plot([x1(((2*i)-1),((2*j)-1)) x1((2*i),((2*j)-1))],[y1(((2*i)-1),((2*j)-1))  y1((2*i),((2*j)-1))],'r') %ac
                            end
                        end
                        for m=1:r2
                           if x1((2*i),(2*j))~=deadnodeset(m,1) && y1((2*i),(2*j))~=deadnodeset(m,2) %d is not dead
                                plot([x1(((2*i)-1),((2*j)-1)) x1((2*i),(2*j))],[y1(((2*i)-1),((2*j)-1))  y1((2*i),(2*j))],'r') %ad
                            end
                        end 
                        
                        
                        
                    else %a is dead
                        if x1((2*i)-1)~=deadnodeset(l,1) && y1(((2*i)-1),(2*j))~=deadnodeset(l,2) %b is not dead
                            for m=1:r2
                                if x1((2*i),((2*j)-1))~=deadnodeset(m,1) && y1((2*i),((2*j)-1))~=deadnodeset(m,2) %c is not dead
                                    plot([x1((2*i)-1) x1((2*i),((2*j)-1))],[y1(((2*i)-1),(2*j))  y1((2*i),((2*j)-1))],'r') %bc
                                end
                            end
                            for m=1:r2
                                if x1((2*i),(2*j))~=deadnodeset(m,1) && y1((2*i),(2*j))~=deadnodeset(m,2) % d is not dead
                                    plot([x1((2*i)-1) x1((2*i),(2*j))],[y1(((2*i)-1),(2*j))  y1((2*i),(2*j))],'r') %bd
                                end
                            end 
                        else % b is dead
                            if x1((2*i),((2*j)-1))~=deadnodeset(l,1) && y1((2*i),((2*j)-1))~=deadnodeset(l,2)% c is not dead
                                for m=1:r2
                                    if x1((2*i),(2*j))~=deadnodeset(m,1) && y1((2*i),(2*j))~=deadnodeset(m,2) % d is not dead
                                        plot([x1((2*i),((2*j)-1)) x1((2*i),(2*j))],[y1((2*i),((2*j)-1))  y1((2*i),(2*j))],'r') %cd
                                    end
                                end 
                            else % c is dead
                                if x1((2*i),(2*j))~=deadnodeset(l,1) && y1((2*i),(2*j))~=deadnodeset(l,2) %d is not dead
                                    
                                end
                            end
                        end
                    end
                end
            
                                    
                                
                            
                                   
%                 a=x1(((2*i)-1),((2*j)-1))    y1(((2*i)-1),((2*j)-1)) 
%                 b=x1((2*i)-1)       y1(((2*i)-1),(2*j))
%                 c=x1((2*i),((2*j)-1))      y1((2*i),((2*j)-1))
%                 d=x1((2*i),(2*j))       y1((2*i),(2*j))
                if i+1<=r
                    plot([x(i,j) x(i+1,j)],[y(i,j) y(i+1,j)],'w','LineWidth',3)                    
                end
                if i-1>=1
                    plot([x(i,j) x(i-1,j)],[y(i,j) y(i-1,j)],'w','LineWidth',3)
                end
                if j+1<=c
                    plot([x(i,j) x(i,j+1)],[y(i,j) y(i,j+1)],'w','LineWidth',3)
                end
                if j-1>=1
                    plot([x(i,j) x(i,j-1)],[y(i,j) y(i,j-1)],'w','LineWidth',3)
                end
                                
                if i==r
                    plot([bp(1) x(i,j)],[bp(2) y(i,j)],'w','LineWidth',2)
                end
                                
                plot(deadnodeset(k,1),deadnodeset(k,2),'ko','LineWidth',3)
            end
        end
    end
end

        

Code 26 – Function M File – graphs.m

function graphs(axis,time,burntnodes,x1,y1,basetime,x,y,times,unik,start_fire)

figure(5)
subplot(2,2,1)
area=[];
for i=1:time
    a=(axis(i,1))*axis(i,2)*pi;
    area=[area a];
end

plot(1:time,area)
title('Area of fire VS Time')
xlabel('Time(hr)')
ylabel('Area(sq mts)')

%figure(6)
subplot(2,2,2)
plot(1:time,burntnodes,'r*','LineWidth',4)
title('Number of nodes burnt VS Time')
xlabel('Time(hrs)')
ylabel('Number of nodes')

%figure(7)
subplot(2,2,3)
base_distance=200; %distance of base station from the origin of fire (in this case centre of forest)
rem_time=[];
for i=1:length(basetime)
    rem=base_distance-basetime(i);
    rem_time=[rem_time rem];
end
plot(1:time,rem_time)
title('Time taken for fire to reach the base station')
xlabel('Levels of fire advancement')
ylabel('Time taken to reach base')

[r1 c1]=size(x);
[r2 c2]=size(x1);
totalnodes=(r1*c1)+(r2*c2);

%figure(8)
subplot(2,2,4)
pktratio=[];
for i=1:length(burntnodes)
    pktratio=[pktratio (totalnodes-burntnodes(i))];    
end

plot(1:time,pktratio)
title('Packet Ratio VS Time')
xlabel('Time')
ylabel('Packet Ratio')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('Press enter to continue..')
pause
disp('Number of nodes burnt along with time taken for them to burn')
disp('Shown in the excel file')

%mat={'Nodes burnt at time t' 'Total nodes burnt' 'Year' 'Month' 'Date' 'Hrs' 'Minutes' 'Seconds'};
tot=[];
t=0;
for i=1:length(unik)
    t=t+unik(i);
    tot=[tot t];
end    
% unik
% tot
% times
answers=[unik' tot' times];

[num,txt,raw]=xlsread('Timeframe');
[row col]=size(num);
blank_mat=[];
for i=1:row
    blank_mat(i,:)= zeros(1,col);
end
xlswrite('Timeframe',blank_mat,1,'A3')

xlswrite('Timeframe',answers,1,'A3')
% answers
% mat1=[mat; num2cell(answers)];
% disp(mat1)

figure(6)
long=sqrt((x1(1,1)-x1(end,end))^2+(y1(1,1)-y1(end,end))^2); %longest distance between 2 sensors
short=sqrt((x1(1,1)-x(1,1))^2+(y1(1,1)-y(1,1))^2); %shortest distance between 2 sensors

dist=linspace(short,long,10); %distances between the sensors from "short" to "long"
e=linspace(90,20,10); %remaining energy levels
gap=e(2)-e(1);
energy=[];
for i=1:length(e)
    a=e(i);
    b=e(i)+gap;
    x=a + (b-a).*rand(1,1);
    energy=[energy x]; %declining energy of the nodes as distance between them increases
end
plot(dist,energy)
title('Remaining energy level of deployed nodes')
xlabel('Average distance between sensors')
ylabel('Remaining energy level (%)')

clear long short dist
figure(7)
long=sqrt((start_fire(1)-x1(1,1))^2+((start_fire(2)-y1(1,1))^2)); %longest distance between the fire start point and a sensor
dist1=[];
[r c]=size(x1);
for i=1:r
    for j=1:c
        d=sqrt((start_fire(1)-x1(i,j))^2+((start_fire(2)-y1(i,j))^2));
        dist1=[dist1;i j d]; %distances of start point with all the sub nodes
    end
end
dist2=[];
[r c]=size(x);
for i=1:r
    for j=1:c
        d=sqrt((start_fire(1)-x(i,j))^2+((start_fire(2)-y(i,j))^2));
        dist2=[dist2;i j d]; %distances of start point with all the head nodes
    end
end

[a,ind1]=sort(dist1(:,3));
[b,ind2]=sort(dist2(:,3));
if a(1)<b(1)
    i=dist1(ind1(1),1);
    j=dist1(ind1(1),2);
    short=sqrt((start_fire(1)-x1(i,j))^2+((start_fire(2)-y1(i,j))^2)); %shortest distance between the start point and a sub node
elseif a(1)>b(1)
    i=dist2(ind1(1),1);
    j=dist2(ind1(1),2);
    short=sqrt((start_fire(1)-x(i,j))^2+((start_fire(2)-y(i,j))^2)); %shortest distance between the start point and a head node
elseif a(1)==b(1)
    i=dist2(ind1(1),1);
    j=dist2(ind1(1),2);
    short=sqrt((start_fire(1)-x(i,j))^2+((start_fire(2)-y(i,j))^2)); %shortest distance between the start point and a head node
end

e=linspace(short,long,10); %making partitions from short to long
plot(e)
title('Time required for the sensor nodes to sense the fire threat from various distances')
xlabel('Average distance between fire ignition location and sensor node')
ylabel('Time required for the sensor node to sense threat')

 

 

Recent Posts

Tags

ad-hoc networks AODV boundary detection process classification clustering clustering algorithm Colour Information computer vision Decryption Encryption EZRP ICM (Iterated Conditional Modes) image denoising image enhancement IMAGE PROCESSING image segmentation Imaging and image processing MANET Markov Random Fields neutrosophic logic optical network proposed method PSNR QLab system region growing Robert’s operator Seed point selection segmentation semi-automatic algorithm Shadow Detection shadow removal wall motion wireless communication Wireless network wireless networks Wireless Sensor Network wireless sensor networks ZRP