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