Untitled

 avatar
unknown
c_cpp
3 years ago
3.0 kB
2
Indexable
#include <bits/stdc++.h>
using namespace std;


class Matrix {

    public:
        double conductivePart;
        double susceptivePart;
};






int main() {

    int busBar;
    printf("Enter the number of the bus bar: ");
    scanf("%d", &busBar);

    int genBus;
    printf("Enter the number of the generator connected bus: ");
    scanf("%d", &genBus);
    printf("\n\nConsider zero(0) if there is no value\n");

    int nonGenBus = busBar - genBus;

    Matrix admittanceBusValue[busBar][busBar];


    for(int i=0; i<busBar; i++) {
        for(int j=0; j<busBar; j++) {

            if(i>j) {

                admittanceBusValue[i][j].conductivePart = admittanceBusValue[j][i].conductivePart;
                admittanceBusValue[i][j].susceptivePart = admittanceBusValue[j][i].susceptivePart;

                continue;
            }

            printf("\nFor Z%d%d\n", i+1, j+1);
            printf("Conductive Part <space> Susceptive Part: ");

            scanf("%lf %lf", &admittanceBusValue[i][j].conductivePart, &admittanceBusValue[i][j].susceptivePart);
        }
    }






    printf("\n\n");

    for(int n=busBar-1; n>=nonGenBus; n--) {

        for(int j=0; j<n; j++) {
            for(int k=0; k<n; k++) {

                double mulRe = (admittanceBusValue[j][n].conductivePart * admittanceBusValue[n][k].conductivePart) - (admittanceBusValue[j][n].susceptivePart * admittanceBusValue[n][k].susceptivePart);
                double mulIm = (admittanceBusValue[j][n].susceptivePart * admittanceBusValue[n][k].conductivePart) + (admittanceBusValue[j][n].conductivePart * admittanceBusValue[n][k].susceptivePart);

                double divRe = ((mulRe * admittanceBusValue[n][n].conductivePart) + (mulIm * admittanceBusValue[n][n].susceptivePart)) / (pow(admittanceBusValue[n][n].conductivePart,2) + pow(admittanceBusValue[n][n].susceptivePart,2));
                double divIm = ((mulIm * admittanceBusValue[n][n].conductivePart) - (mulRe * admittanceBusValue[n][n].susceptivePart)) / (pow(admittanceBusValue[n][n].conductivePart,2) + pow(admittanceBusValue[n][n].susceptivePart,2));


                admittanceBusValue[j][k].conductivePart = admittanceBusValue[j][k].conductivePart - divRe;
                admittanceBusValue[j][k].susceptivePart = admittanceBusValue[j][k].susceptivePart - divIm;
            }
        }
    }





    printf("\n\nReduced Admittance Bus Matrix:\n\n");

    for(int i=0; i<genBus; i++) {
        for(int j=0; j<genBus; j++) {

            if(admittanceBusValue[i][j].susceptivePart < 0) {
                printf("%0.2lf-j%0.2lf \t", admittanceBusValue[i][j].conductivePart, (-1)*admittanceBusValue[i][j].susceptivePart);
            }

            else {
                printf("%0.2lf+j%0.2lf \t", admittanceBusValue[i][j].conductivePart, admittanceBusValue[i][j].susceptivePart);
            }

            if(j+1==genBus) {
                printf("\n");
            }
        }
    }
}