xref: /petsc/src/snes/tutorials/network/power/power.h (revision f2c6b1a247e0aba1e6cff92019aae48a2a13617a)
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(PetscMax(sizeof(double), 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(PetscMax(sizeof(double), 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(PetscMax(sizeof(double), 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(PetscMax(sizeof(double), 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(PetscMax(sizeof(double), 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(PetscMax(sizeof(double), 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