1*c4762a1bSJed Brown #ifndef PF_H 2*c4762a1bSJed Brown #define PF_H 3*c4762a1bSJed Brown 4*c4762a1bSJed Brown #include <petscsnes.h> 5*c4762a1bSJed Brown #include <petscdmnetwork.h> 6*c4762a1bSJed Brown 7*c4762a1bSJed Brown #define MAXLINE 1000 8*c4762a1bSJed Brown #define REF_BUS 3 9*c4762a1bSJed Brown #define PV_BUS 2 10*c4762a1bSJed Brown #define PQ_BUS 1 11*c4762a1bSJed Brown #define ISOLATED_BUS 4 12*c4762a1bSJed Brown #define NGEN_AT_BUS_MAX 15 13*c4762a1bSJed Brown #define NLOAD_AT_BUS_MAX 1 14*c4762a1bSJed Brown 15*c4762a1bSJed Brown struct _p_UserCtx_Power{ 16*c4762a1bSJed Brown PetscScalar Sbase; 17*c4762a1bSJed Brown PetscBool jac_error; /* introduce error in the jacobian */ 18*c4762a1bSJed Brown PetscInt compkey_branch; 19*c4762a1bSJed Brown PetscInt compkey_bus; 20*c4762a1bSJed Brown PetscInt compkey_gen; 21*c4762a1bSJed Brown PetscInt compkey_load; 22*c4762a1bSJed Brown } PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar)); 23*c4762a1bSJed Brown 24*c4762a1bSJed Brown typedef struct _p_UserCtx_Power UserCtx_Power; 25*c4762a1bSJed Brown 26*c4762a1bSJed Brown /* 2. Bus data */ 27*c4762a1bSJed Brown /* 11 columns */ 28*c4762a1bSJed Brown struct _p_VERTEX_Power{ 29*c4762a1bSJed Brown PetscInt bus_i; /* Integer bus number .. used by some formats like Matpower */ 30*c4762a1bSJed Brown char i[20]; /* Bus Number */ 31*c4762a1bSJed Brown char name[20]; /* Bus Name */ 32*c4762a1bSJed Brown PetscScalar basekV; /* Bus Base kV */ 33*c4762a1bSJed Brown PetscInt ide; /* Bus type code */ 34*c4762a1bSJed Brown PetscScalar gl; /* Active component of shunt admittance to ground */ 35*c4762a1bSJed Brown PetscScalar bl; /* Reactive component of shunt admittance to ground */ 36*c4762a1bSJed Brown PetscInt area; /* Area number */ 37*c4762a1bSJed Brown PetscInt zone; /* Zone number */ 38*c4762a1bSJed Brown PetscScalar vm; /* Bus voltage magnitude; in pu */ 39*c4762a1bSJed Brown PetscScalar va; /* Bus voltage phase angle */ 40*c4762a1bSJed Brown PetscInt owner; /* Owner number */ 41*c4762a1bSJed Brown PetscInt internal_i; /* Internal Bus Number */ 42*c4762a1bSJed Brown PetscInt ngen; /* Number of generators incident at this bus */ 43*c4762a1bSJed Brown PetscInt gidx[NGEN_AT_BUS_MAX]; /* list of inndices for accessing the generator data in GEN structure */ 44*c4762a1bSJed Brown PetscInt nload; 45*c4762a1bSJed Brown PetscInt lidx[NLOAD_AT_BUS_MAX]; 46*c4762a1bSJed Brown } PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar)); 47*c4762a1bSJed Brown 48*c4762a1bSJed Brown typedef struct _p_VERTEX_Power *VERTEX_Power; 49*c4762a1bSJed Brown 50*c4762a1bSJed Brown /* 3. Load data */ 51*c4762a1bSJed Brown /* 12 columns */ 52*c4762a1bSJed Brown struct _p_LOAD{ 53*c4762a1bSJed Brown PetscInt bus_i; /* Bus number */ 54*c4762a1bSJed Brown char i[20]; /* Bus Number or extended bus name*/ 55*c4762a1bSJed Brown char id[20]; /* Load identifier, in case of multiple loads. 1 by default */ 56*c4762a1bSJed Brown PetscInt status; /* Load status */ 57*c4762a1bSJed Brown PetscInt area; /* Area to which load is assigned */ 58*c4762a1bSJed Brown PetscInt zone; /* Zone to which load is assigned */ 59*c4762a1bSJed Brown PetscScalar pl; /* Active power component of constant MVA load */ 60*c4762a1bSJed Brown PetscScalar ql; /* Reactive power component of constant MVA load */ 61*c4762a1bSJed Brown PetscScalar ip; /* Active power component of constant current load: MW pu V */ 62*c4762a1bSJed Brown PetscScalar iq; /* Reactive power component of constant current load: Mvar pu V */ 63*c4762a1bSJed Brown PetscScalar yp; /* Active power component of constant admittance load: MW pu V */ 64*c4762a1bSJed Brown PetscScalar yq; /* Reactive power component of constant admittance load: Mvar pu V */ 65*c4762a1bSJed Brown PetscScalar scale_load; 66*c4762a1bSJed Brown PetscInt owner; /* Owner number */ 67*c4762a1bSJed Brown PetscInt internal_i; /* Internal Bus Number */ 68*c4762a1bSJed Brown } PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar)); 69*c4762a1bSJed Brown 70*c4762a1bSJed Brown typedef struct _p_LOAD *LOAD; 71*c4762a1bSJed Brown 72*c4762a1bSJed Brown /* 4. Generator data */ 73*c4762a1bSJed Brown /* 20+ columns */ 74*c4762a1bSJed Brown /******* 20, USING ONLY 1 OWNER's WORTH OF DATA. COME BACK TO THIS LATER, if necessary ******/ 75*c4762a1bSJed Brown struct _p_GEN{ 76*c4762a1bSJed Brown PetscInt bus_i; 77*c4762a1bSJed Brown char i[20]; /* Bus Number or extended bus name*/ 78*c4762a1bSJed Brown char id[20]; /* Generator identifier, in case of multiple generators at same bus. 1 by default */ 79*c4762a1bSJed Brown PetscScalar pg; /* Generator active power output */ 80*c4762a1bSJed Brown PetscScalar qg; /* Generator reactive power output */ 81*c4762a1bSJed Brown PetscScalar qt; /* Maximum reactive power output: Mvar */ 82*c4762a1bSJed Brown PetscScalar qb; /* Minimum reactive power output: Mvar */ 83*c4762a1bSJed Brown PetscScalar vs; /* Regulated voltage setpoint: pu */ 84*c4762a1bSJed Brown PetscInt ireg; /* Remote bus number/identifier */ 85*c4762a1bSJed Brown PetscScalar mbase; /* MVA base of the machine */ 86*c4762a1bSJed Brown PetscScalar zr; /* Complex machine impedance ZSOURCE in pu on mbase */ 87*c4762a1bSJed Brown PetscScalar zx; /* ----------------------"------------------------- */ 88*c4762a1bSJed Brown PetscScalar rt; /* Step-up transformer impedance XTRAN in pu on mbase */ 89*c4762a1bSJed Brown PetscScalar xt; /* -----------------------"-------------------------- */ 90*c4762a1bSJed Brown PetscScalar gtap; /* Step-up transformer turns ratio */ 91*c4762a1bSJed Brown PetscInt status; /* Machine status */ 92*c4762a1bSJed Brown PetscScalar rmpct; /* Mvar % required to hold voltage at remote bus */ 93*c4762a1bSJed Brown PetscScalar pt; /* Gen max active power output: MW */ 94*c4762a1bSJed Brown PetscScalar pb; /* Gen min active power output: MW */ 95*c4762a1bSJed Brown PetscInt o1; /* Owner number */ 96*c4762a1bSJed Brown PetscScalar f1; /* Fraction of ownership */ 97*c4762a1bSJed Brown PetscScalar scale_gen; 98*c4762a1bSJed Brown PetscInt internal_i; /* Internal Bus Number */ 99*c4762a1bSJed Brown } PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar)); 100*c4762a1bSJed Brown 101*c4762a1bSJed Brown typedef struct _p_GEN *GEN; 102*c4762a1bSJed Brown 103*c4762a1bSJed Brown /* 17+ columns */ 104*c4762a1bSJed Brown struct _p_EDGE_Power{ 105*c4762a1bSJed Brown PetscInt fbus; 106*c4762a1bSJed Brown PetscInt tbus; 107*c4762a1bSJed Brown char i[20]; /* Bus Number or extended bus name*/ 108*c4762a1bSJed Brown char j[20]; /* Bus Number or extended bus name*/ 109*c4762a1bSJed Brown char ckt[20]; /* Circuit identifier. 1 by default */ 110*c4762a1bSJed Brown PetscScalar r; /* Branch resistance: pu */ 111*c4762a1bSJed Brown PetscScalar x; /* Branch reactance: pu */ 112*c4762a1bSJed Brown PetscScalar b; /* Branch charging susceptance: pu */ 113*c4762a1bSJed Brown PetscScalar rateA; /* rate A in MVA */ 114*c4762a1bSJed Brown PetscScalar rateB; /* rate B in MVA */ 115*c4762a1bSJed Brown PetscScalar rateC; /* rate C in MVA */ 116*c4762a1bSJed Brown PetscScalar tapratio; 117*c4762a1bSJed Brown PetscScalar phaseshift; 118*c4762a1bSJed Brown PetscScalar gi; /* Complex admittance at 'i' end: pu */ 119*c4762a1bSJed Brown PetscScalar bi; /* Complex admittance at 'i' end: pu */ 120*c4762a1bSJed Brown PetscScalar gj; /* Complex admittance at 'j' end: pu */ 121*c4762a1bSJed Brown PetscScalar bj; /* Complex admittance at 'j' end: pu */ 122*c4762a1bSJed Brown PetscInt status; /* Service status */ 123*c4762a1bSJed Brown PetscScalar length; /* Line length */ 124*c4762a1bSJed Brown PetscInt o1; /* Owner number */ 125*c4762a1bSJed Brown PetscScalar f1; /* Fraction of ownership */ 126*c4762a1bSJed Brown PetscScalar yff[2],yft[2],ytf[2],ytt[2]; /* [G,B] */ 127*c4762a1bSJed Brown PetscInt internal_i; /* Internal From Bus Number */ 128*c4762a1bSJed Brown PetscInt internal_j; /* Internal To Bus Number */ 129*c4762a1bSJed Brown } PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar)); 130*c4762a1bSJed Brown 131*c4762a1bSJed Brown typedef struct _p_EDGE_Power *EDGE_Power; 132*c4762a1bSJed Brown 133*c4762a1bSJed Brown /* PTI format data structure */ 134*c4762a1bSJed Brown typedef struct{ 135*c4762a1bSJed Brown PetscScalar sbase; /* System base MVA */ 136*c4762a1bSJed Brown PetscInt nbus,ngen,nbranch,nload; /* # of buses,gens,branches, and loads (includes elements which are 137*c4762a1bSJed Brown out of service */ 138*c4762a1bSJed Brown VERTEX_Power bus; 139*c4762a1bSJed Brown LOAD load; 140*c4762a1bSJed Brown GEN gen; 141*c4762a1bSJed Brown EDGE_Power branch; 142*c4762a1bSJed Brown } PFDATA PETSC_ATTRIBUTEALIGNED(sizeof(PetscScalar)); 143*c4762a1bSJed Brown 144*c4762a1bSJed Brown extern PetscErrorCode PFReadMatPowerData(PFDATA*,char*); 145*c4762a1bSJed Brown extern PetscErrorCode GetListofEdges_Power(PFDATA*,PetscInt*); 146*c4762a1bSJed Brown extern PetscErrorCode FormJacobian_Power(SNES,Vec, Mat,Mat,void*); 147*c4762a1bSJed Brown extern PetscErrorCode FormJacobian_Power_private(DM,Vec,Mat,PetscInt,PetscInt,const PetscInt*,const PetscInt*,void*); 148*c4762a1bSJed Brown extern PetscErrorCode FormFunction_Power(DM,Vec,Vec,PetscInt,PetscInt,const PetscInt*,const PetscInt*,void*); 149*c4762a1bSJed Brown extern PetscErrorCode SetInitialGuess_Power(DM,Vec,PetscInt,PetscInt,const PetscInt *,const PetscInt *,void*); 150*c4762a1bSJed Brown #endif 151