% Program to form Admittance Bus Formation
% with Transformer Tap setting.
function ybus = ybusppg(num)  % Returns Ybus

linedata = linedatas(num); % Calling for Line Data
fb = linedata(:,1);     % From bus number
tb = linedata(:,2);     % To bus number
r = linedata(:,3);      % Resistance, R
x = linedata(:,4);      % Reactance, X
b = linedata(:,5);      % Ground Admittance, B/2
a = linedata(:,6);      % Tap setting value
z = r + i*x;            % Z matrix
y = 1./z;               % To get inverse of each element
b = i*b;                % Make B imaginary

nbus = max(max(fb),max(tb));    % no. of buses
nbranch = length(fb);           % no. of branches
ybus = zeros(nbus,nbus);        % Initialise Ybus
 
 % Formation of the Off Diagonal Elements
 for k=1:nbranch
     ybus(fb(k),tb(k)) = ybus(fb(k),tb(k))-y(k)/a(k);
     ybus(tb(k),fb(k)) = ybus(fb(k),tb(k));
 end
 
 % Formation of Diagonal Elements
 for m =1:nbus
     for n =1:nbranch
         if fb(n) == m
             ybus(m,m) = ybus(m,m) + y(n)/(a(n)^2) + b(n);
         elseif tb(n) == m
             ybus(m,m) = ybus(m,m) + y(n) + b(n);
         end
     end
 end
 %ybus;                  % Bus Admittance Matrix
 %zbus = inv(ybus);      % Bus Impedance Matrix
