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