Actual source code: power.h

      1: #pragma once

      3: #include <petscsnes.h>
      4: #include <petscdmnetwork.h>

      6: #define MAXLINE          1000
      7: #define REF_BUS          3
      8: #define PV_BUS           2
      9: #define PQ_BUS           1
     10: #define ISOLATED_BUS     4
     11: #define NGEN_AT_BUS_MAX  15
     12: #define NLOAD_AT_BUS_MAX 1

     14: struct _p_UserCtx_Power {
     15:   PetscScalar Sbase;
     16:   PetscBool   jac_error; /* introduce error in the jacobian */
     17:   PetscInt    compkey_branch;
     18:   PetscInt    compkey_bus;
     19:   PetscInt    compkey_gen;
     20:   PetscInt    compkey_load;
     21: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));

     23: typedef struct _p_UserCtx_Power UserCtx_Power;

     25: /* 2. Bus data */
     26: /* 11 columns */
     27: struct _p_VERTEX_Power {
     28:   PetscInt    bus_i;                 /* Integer bus number .. used by some formats like Matpower */
     29:   char        i[20];                 /* Bus Number */
     30:   char        name[20];              /* Bus Name */
     31:   PetscScalar basekV;                /* Bus Base kV */
     32:   PetscInt    ide;                   /* Bus type code */
     33:   PetscScalar gl;                    /* Active component of shunt admittance to ground */
     34:   PetscScalar bl;                    /* Reactive component of shunt admittance to ground */
     35:   PetscInt    area;                  /* Area number */
     36:   PetscInt    zone;                  /* Zone number */
     37:   PetscScalar vm;                    /* Bus voltage magnitude; in pu */
     38:   PetscScalar va;                    /* Bus voltage phase angle */
     39:   PetscInt    owner;                 /* Owner number */
     40:   PetscInt    internal_i;            /* Internal Bus Number */
     41:   PetscInt    ngen;                  /* Number of generators incident at this bus */
     42:   PetscInt    gidx[NGEN_AT_BUS_MAX]; /* list of inndices for accessing the generator data in GEN structure */
     43:   PetscInt    nload;
     44:   PetscInt    lidx[NLOAD_AT_BUS_MAX];
     45: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));

     47: typedef struct _p_VERTEX_Power *VERTEX_Power;

     49: /* 3. Load data */
     50: /* 12 columns */
     51: struct _p_LOAD {
     52:   PetscInt    bus_i;  /* Bus number */
     53:   char        i[20];  /* Bus Number or extended bus name*/
     54:   char        id[20]; /* Load identifier, in case of multiple loads. 1 by default */
     55:   PetscInt    status; /* Load status */
     56:   PetscInt    area;   /* Area to which load is assigned */
     57:   PetscInt    zone;   /* Zone to which load is assigned */
     58:   PetscScalar pl;     /* Active power component of constant MVA load */
     59:   PetscScalar ql;     /* Reactive power component of constant MVA load */
     60:   PetscScalar ip;     /* Active power component of constant current load: MW pu V */
     61:   PetscScalar iq;     /* Reactive power component of constant current load: Mvar pu V */
     62:   PetscScalar yp;     /* Active power component of constant admittance load: MW pu V */
     63:   PetscScalar yq;     /* Reactive power component of constant admittance load: Mvar pu V */
     64:   PetscScalar scale_load;
     65:   PetscInt    owner;      /* Owner number */
     66:   PetscInt    internal_i; /* Internal Bus Number */
     67: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));

     69: typedef struct _p_LOAD *LOAD;

     71: /* 4. Generator data */
     72: /* 20+ columns */
     73: /******* 20, USING ONLY 1 OWNER's WORTH OF DATA. COME BACK TO THIS LATER, if necessary ******/
     74: struct _p_GEN {
     75:   PetscInt    bus_i;
     76:   char        i[20];  /* Bus Number or extended bus name*/
     77:   char        id[20]; /* Generator identifier, in case of multiple generators at same bus. 1 by default */
     78:   PetscScalar pg;     /* Generator active power output */
     79:   PetscScalar qg;     /* Generator reactive power output */
     80:   PetscScalar qt;     /* Maximum reactive power output: Mvar */
     81:   PetscScalar qb;     /* Minimum reactive power output: Mvar */
     82:   PetscScalar vs;     /* Regulated voltage setpoint: pu */
     83:   PetscInt    ireg;   /* Remote bus number/identifier */
     84:   PetscScalar mbase;  /* MVA base of the machine */
     85:   PetscScalar zr;     /* Complex machine impedance ZSOURCE in pu on mbase */
     86:   PetscScalar zx;     /* ----------------------"------------------------- */
     87:   PetscScalar rt;     /* Step-up transformer impedance XTRAN in pu on mbase */
     88:   PetscScalar xt;     /* -----------------------"-------------------------- */
     89:   PetscScalar gtap;   /* Step-up transformer turns ratio */
     90:   PetscInt    status; /* Machine status */
     91:   PetscScalar rmpct;  /* Mvar % required to hold voltage at remote bus */
     92:   PetscScalar pt;     /* Gen max active power output: MW */
     93:   PetscScalar pb;     /* Gen min active power output: MW */
     94:   PetscInt    o1;     /* Owner number */
     95:   PetscScalar f1;     /* Fraction of ownership */
     96:   PetscScalar scale_gen;
     97:   PetscInt    internal_i; /* Internal Bus Number */
     98: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));

    100: typedef struct _p_GEN *GEN;

    102: /* 17+ columns */
    103: struct _p_EDGE_Power {
    104:   PetscInt    fbus;
    105:   PetscInt    tbus;
    106:   char        i[20];   /* Bus Number or extended bus name*/
    107:   char        j[20];   /* Bus Number or extended bus name*/
    108:   char        ckt[20]; /* Circuit identifier. 1 by default */
    109:   PetscScalar r;       /* Branch resistance: pu */
    110:   PetscScalar x;       /* Branch reactance: pu */
    111:   PetscScalar b;       /* Branch charging susceptance: pu */
    112:   PetscScalar rateA;   /* rate A in MVA */
    113:   PetscScalar rateB;   /* rate B in MVA */
    114:   PetscScalar rateC;   /* rate C in MVA */
    115:   PetscScalar tapratio;
    116:   PetscScalar phaseshift;
    117:   PetscScalar gi;                             /* Complex admittance at 'i' end: pu */
    118:   PetscScalar bi;                             /* Complex admittance at 'i' end: pu */
    119:   PetscScalar gj;                             /* Complex admittance at 'j' end: pu */
    120:   PetscScalar bj;                             /* Complex admittance at 'j' end: pu */
    121:   PetscInt    status;                         /* Service status */
    122:   PetscScalar length;                         /* Line length */
    123:   PetscInt    o1;                             /* Owner number */
    124:   PetscScalar f1;                             /* Fraction of ownership */
    125:   PetscScalar yff[2], yft[2], ytf[2], ytt[2]; /* [G,B] */
    126:   PetscInt    internal_i;                     /* Internal From Bus Number */
    127:   PetscInt    internal_j;                     /* Internal To Bus Number */
    128: } PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));

    130: typedef struct _p_EDGE_Power *EDGE_Power;

    132: /* PTI format data structure */
    133: typedef struct {
    134:   PetscScalar  sbase;                      /* System base MVA */
    135:   PetscInt     nbus, ngen, nbranch, nload; /* # of buses,gens,branches, and loads (includes elements which are
    136:                                           out of service */
    137:   VERTEX_Power bus;
    138:   LOAD         load;
    139:   GEN          gen;
    140:   EDGE_Power   branch;
    141: } PFDATA PETSC_ATTRIBUTEALIGNED(PetscMax(sizeof(double), sizeof(PetscScalar)));

    143: extern PetscErrorCode PFReadMatPowerData(PFDATA *, char *);
    144: extern PetscErrorCode GetListofEdges_Power(PFDATA *, PetscInt *);
    145: extern PetscErrorCode FormJacobian_Power(SNES, Vec, Mat, Mat, void *);
    146: extern PetscErrorCode FormJacobian_Power_private(DM, Vec, Mat, PetscInt, PetscInt, const PetscInt *, const PetscInt *, void *);
    147: extern PetscErrorCode FormFunction_Power(DM, Vec, Vec, PetscInt, PetscInt, const PetscInt *, const PetscInt *, void *);
    148: extern PetscErrorCode SetInitialGuess_Power(DM, Vec, PetscInt, PetscInt, const PetscInt *, const PetscInt *, void *);