xref: /petsc/src/snes/tutorials/network/power/power.h (revision c4762a1b19cd2af06abeed90e8f9d34fb975dd94)
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