Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft:Feature/constraints check #164

Open
wants to merge 50 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
321ec37
Read DC line data from file
abhyshr Jul 26, 2023
3f68f15
Data file for DC line
abhyshr Jul 26, 2023
f83398e
More work on DC line
abhyshr Aug 5, 2023
9ede518
Added DC line model equations to power flow
abhyshr Aug 29, 2023
7342992
Power flow works now for dc line. Reactive power calculation for DC l…
abhyshr Aug 29, 2023
ac2bda9
Exclude isolated buses.
abhyshr Sep 1, 2023
d5e6ab3
MAX_KVLEVELS set to 200, removed -Werror flag, rebased develop
abhyshr Nov 7, 2023
6c72545
Set up number of variables and constraints in OPFLOW.
abhyshr Nov 15, 2023
a8cf206
Added variable and constraint bounds
abhyshr Nov 15, 2023
0e7d2e4
First functioning version of OPF with DC line
abhyshr Nov 15, 2023
ea7d546
Added sanity check for input data, fixed set but unsed warnings.
abhyshr Dec 1, 2023
4e516ba
Added sanity check for data reading, fixed handling of isolated buses…
abhyshr Dec 2, 2023
86b87fb
Update code.
abhyshr Feb 20, 2024
cdd65e0
Fix bug in parsing data.
abhyshr Feb 21, 2024
71eb3b9
Added smoke test and TOML test
abhyshr May 8, 2024
5875434
Apply pre-commmit fixes
abhyshr May 8, 2024
3e48fa8
Removed some unused variables and constants
abhyshr May 9, 2024
6ca1d68
Apply pre-commmit fixes
abhyshr May 9, 2024
baa707e
Added some flop count for operations.
abhyshr May 9, 2024
c3ad0c1
Apply pre-commmit fixes
abhyshr May 9, 2024
79839e5
Added DC line implementation for DCOPF
abhyshr May 9, 2024
33b0f96
Added constraints checker
abhyshr May 24, 2024
e0bf961
Added Lazy line flow implementation
abhyshr May 28, 2024
8229b2d
Forgot to add opflow2.cpp
abhyshr May 30, 2024
42713e8
Removed build errors.
abhyshr May 30, 2024
1d600be
Fixed Ignore line flow constraints with DC line implementation.
abhyshr May 31, 2024
3ae5200
More fixes to lazy_lineflow_constraints. Display overloaded lines. Co…
abhyshr May 31, 2024
9f7e17e
Remove -Werror for unused variables.
abhyshr May 31, 2024
5bd1905
Enable iterations for lazy_lineflow_constraints
ovasios Jun 19, 2024
7034566
Fix typo
ovasios Jun 21, 2024
f69dcb5
Read line overloads inside the while loop
ovasios Jun 21, 2024
b6c5282
Restore opflow object options for lazy_lineflow_constraints loop
ovasios Jun 28, 2024
17045e3
Avoid shedding for loads that have negative values in datafile
abhyshr Sep 20, 2024
b74c74a
Added load scaling factor
abhyshr Sep 21, 2024
bbe2c25
Turn off generator in scenario creation if its output is zero in the …
abhyshr Dec 14, 2024
1d4866e
Major fix for OPFLOW with line flow constraints.
abhyshr Dec 19, 2024
5ac6738
POWER_BALANCE_POLAR model: Replace VecSetValues with direct array ins…
abhyshr Dec 19, 2024
dccb978
Code optimization.
abhyshr Dec 19, 2024
39dc66c
Fix bug in JSON output.
abhyshr Dec 19, 2024
a94635c
Display load loss instead of load.
abhyshr Dec 20, 2024
3644751
Increase the number of outages per contingency
abhyshr Dec 20, 2024
a25d58d
Some updates to POWER BALANCE POLAR model.
abhyshr Dec 20, 2024
de87d9e
Supporting setting GIC file for SCOPFLOW.
abhyshr Dec 20, 2024
e0e187c
Trying to fix the flow layer for visualization. Needs more work so re…
abhyshr Dec 21, 2024
9a25e2d
Added zone and area info to JSON output
abhyshr Jan 4, 2025
4e90387
Visualization of zones and areas
abhyshr Jan 4, 2025
71a9a91
Updated multiplier scaling for output
abhyshr Jan 5, 2025
67bcf96
Small bug-fixes and additions to visualization.
abhyshr Jan 6, 2025
382f43d
Increase the number of zones/areas as some networks seem to have more…
abhyshr Jan 19, 2025
a562bff
Apply pre-commmit fixes
abhyshr Jan 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion applications/scopflow_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ int main(int argc, char **argv) {
SCOPFLOW scopflow;
char file[PETSC_MAX_PATH_LEN];
char ctgcfile[PETSC_MAX_PATH_LEN];
char gicfile[PETSC_MAX_PATH_LEN];
char outputdir[PETSC_MAX_PATH_LEN];
PetscBool outputdir_set;
PetscBool flg = PETSC_FALSE, flgctgc = PETSC_FALSE;
PetscBool flg = PETSC_FALSE, flgctgc = PETSC_FALSE, flggic = PETSC_FALSE;
PetscBool print_output = PETSC_FALSE, save_output = PETSC_FALSE;
PetscLogStage stages[3];
char appname[] = "scopflow";
Expand Down Expand Up @@ -53,6 +54,11 @@ int main(int argc, char **argv) {
PETSC_MAX_PATH_LEN, &flgctgc);
CHKERRQ(ierr);

/* Get gic data file from command line */
ierr = PetscOptionsGetString(NULL, NULL, "-gicfile", gicfile,
PETSC_MAX_PATH_LEN, &flggic);
ExaGOCheckError(ierr);

/* Stage 1 - Application creation and reading data */
ierr = PetscLogStagePush(stages[0]);
CHKERRQ(ierr);
Expand Down Expand Up @@ -86,6 +92,12 @@ int main(int argc, char **argv) {
CHKERRQ(ierr);
}

/* Set gicdata */
if (flggic) {
ierr = SCOPFLOWSetGICData(scopflow, gicfile);
ExaGOCheckError(ierr);
}

/* Set a subset of contingencies to be selected. Can use the option
* -scopflow_Nc instead */
/* ierr = SCOPFLOWSetNumContingencies(scopflow,2);CHKERRQ(ierr); */
Expand Down
80 changes: 80 additions & 0 deletions datafiles/case9/case9_dcline.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
function mpc = case9_dcline
%T_CASE9_DCLINE Same as T_CASE9_OPFV2 with addition of DC line data.
% Please see CASEFORMAT for details on the case file format.
%
% See also: TOGGLE_DCLINE, IDX_DCLINE.

% MATPOWER

%% MATPOWER Case Format : Version 2
mpc.version = '2';

%%----- Power Flow Data -----%%
%% system MVA base
mpc.baseMVA = 100;

%% bus data
% bus_i type Pd Qd Gs Bs area Vm Va baseKV zone Vmax Vmin
mpc.bus = [
1 3 0 0 0 0 1 1 0 345 1 1.1 0.9;
2 2 0 0 0 0 1 1 0 345 1 1.1 0.9;
30 2 0 0 0 0 1 1 0 345 1 1.1 0.9;
4 1 0 0 0 0 1 1 0 345 1 1.1 0.9;
5 1 90 30 0 0 1 1 0 345 1 1.1 0.9;
6 1 0 0 0 0 1 1 0 345 1 1.1 0.9;
7 1 100 35 0 0 1 1 0 345 1 1.1 0.9;
8 1 0 0 0 0 1 1 0 345 1 1.1 0.9;
9 1 125 50 0 0 1 1 0 345 1 1.1 0.9;
];

%% generator data
% bus Pg Qg Qmax Qmin Vg mBase status Pmax Pmin Pc1 Pc2 Qc1min Qc1max Qc2min Qc2max ramp_agc ramp_10 ramp_30 ramp_q apf
mpc.gen = [
1 0 0 300 -300 1 100 1 250 90 0 0 0 0 0 0 0 0 0 0 0;
2 163 0 300 -300 1 100 1 300 10 0 200 -20 20 -10 10 0 0 0 0 0;
30 85 0 300 -300 1 100 1 270 10 0 200 -30 30 -15 15 0 0 0 0 0;
];

%% branch data
% fbus tbus r x b rateA rateB rateC ratio angle status angmin angmax
mpc.branch = [
1 4 0 0.0576 0 0 250 250 0 0 1 -360 2.48;
4 5 0.017 0.092 0.158 0 250 250 0 0 1 -360 360;
5 6 0.039 0.17 0.358 150 150 150 0 0 1 -360 360;
30 6 0 0.0586 0 0 300 300 0 0 1 -360 360;
6 7 0.0119 0.1008 0.209 40 150 150 0 0 1 -360 360;
7 8 0.0085 0.072 0.149 250 250 250 0 0 1 -360 360;
8 2 0 0.0625 0 250 250 250 0 0 1 -360 360;
8 9 0.032 0.161 0.306 250 250 250 0 0 1 -360 360;
9 4 0.01 0.085 0.176 250 250 250 0 0 1 -2 360;
];

%%----- OPF Data -----%%
%% generator cost data
% 1 startup shutdown n x1 y1 ... xn yn
% 2 startup shutdown n c(n-1) ... c0
mpc.gencost = [
2 1500.00 0.00 3 0.11 5 150;
2 2000.00 0.00 3 0.085 1.2 600;
2 3000 0 3 0.1225 1 335;
];

%%----- DC Line Data -----
%% Change 30-4 Vf to 1.0 from 1.01 to match with gen set-point voltage
% fbus tbus status Pf Pt Qf Qt Vf Vt Pmin Pmax QminF QmaxF QminT QmaxT loss0 loss1
mpc.dcline = [
30 4 1 10 8.9 0 0 1 1 1 10 -10 10 -10 10 1 0.01;
7 9 1 2 1.96 0 0 1 0.98 2 10 0 0 0 0 0 0;
5 8 1 0 0 0 0 1 1 1 10 -10 10 -10 10 0 0;
5 9 1 10 9.5 0 0 1 0.98 0 10 -10 10 -10 10 0 0.05;
];

%% DC line cost data
% 1 startup shutdown n x1 y1 ... xn yn
% 2 startup shutdown n c(n-1) ... c0
mpc.dclinecost = [
2 0 0 2 0 0 0 0 0 0 0 0 0 0;
2 0 0 2 0 0 0 0 0 0 0 0 0 0;
2 0 0 2 0 0 0 0 0 0 0 0 0 0;
2 0 0 2 7.3 0 0 0 0 0 0 0 0 0;
];
3 changes: 2 additions & 1 deletion include/constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
*/
#define NLOAD_AT_BUS_MAX 32 /**< Maximum number of loads allowed at a bus */
#define NPHASE 1 /**< Per-phase analysis */
#define MAX_KV_LEVELS 20 /**< Maximum KV levels */
#define MAX_KV_LEVELS \
200 /**< Maximum KV (voltage) levels allowed in input file */

/* Fuel types for generators */
#define GENFUEL_COAL 0 /* Coal */
Expand Down
35 changes: 30 additions & 5 deletions include/opflow.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ const auto tolerance =
const auto ignore_lineflow_constraints =
ExaGOBoolOption("-opflow_ignore_lineflow_constraints",
"Ignore line flow constraints?", PETSC_FALSE);
const auto lazy_lineflow_constraints =
ExaGOBoolOption("-opflow_lazy_lineflow_constraints",
"Apply line flow constraints lazily?", PETSC_FALSE);
const auto allow_lineflow_violation =
ExaGOBoolOption("-opflow_allow_lineflow_violation",
"Allow line flow limit violation?", PETSC_FALSE);
Expand All @@ -152,6 +155,9 @@ const auto include_powerimbalance_variables =
const auto powerimbalance_penalty = ExaGORealOption(
"-opflow_powerimbalance_penalty", "Power imbalance penalty", 1e4);

const auto load_scaling_factor = ExaGORealOption("-opflow_load_scaling_factor",
"Scale factor for load", 1.0);

#ifdef EXAGO_ENABLE_HIOP
const auto hiop_compute_mode =
ExaGOStringOption("-hiop_compute_mode", "Set compute mode for HiOp solver",
Expand Down Expand Up @@ -263,6 +269,8 @@ OPFLOWGetInitializationType(OPFLOW, OPFLOWInitializationType *);
PETSC_EXTERN PetscErrorCode OPFLOWIgnoreLineflowConstraints(OPFLOW, PetscBool);
PETSC_EXTERN PetscErrorCode OPFLOWGetIgnoreLineflowConstraints(OPFLOW,
PetscBool *);
PETSC_EXTERN PetscErrorCode OPFLOWGetLineOverloads(OPFLOW, PetscInt *,
PetscInt **, PetscBool *);
PETSC_EXTERN PetscErrorCode OPFLOWAllowLineflowViolation(OPFLOW, PetscBool);
PETSC_EXTERN PetscErrorCode OPFLOWGetAllowLineflowViolation(OPFLOW,
PetscBool *);
Expand All @@ -277,6 +285,7 @@ PETSC_EXTERN PetscErrorCode OPFLOWSetBusPowerImbalancePenalty(OPFLOW,
PetscReal);
PETSC_EXTERN PetscErrorCode OPFLOWGetBusPowerImbalancePenalty(OPFLOW,
PetscReal *);
PETSC_EXTERN PetscErrorCode OPFLOWSetLoadScalingFactor(OPFLOW, PetscReal);
PETSC_EXTERN PetscErrorCode OPFLOWSetWeight(OPFLOW, PetscScalar);

PETSC_EXTERN PetscErrorCode OPFLOWSkipOptions(OPFLOW, PetscBool);
Expand Down Expand Up @@ -333,12 +342,16 @@ PETSC_EXTERN PetscErrorCode OPFLOWSolutionToPS(OPFLOW);

Input Parameter:
+ opflow - OPFLOW object
. nkvlevels - Number of kvlevels to monitor (Use -1 to monitor all kvlevels)
. kvlevels - line kvlevels to monitor
- monitorfile - File with list of lines to monitor.
. mon_mode - Monitor Mode (0 = Input lines, 1 = KV levels, 2 = from file)
. nlinesmon - Number of lines to be monitored (active when mon_mode = 0)
. linesmon - List of lines to be monitored (active with mon_mode = 0)
. nkvlevels - Number of kvlevels to monitor (active with mon_mode = 1, use -1
to monitor all kvlevels) . kvlevels - line kvlevels to monitor (active with
mon_mode = 1)
- monitorfile - File with list of lines to monitor (active with mon_mode = 2)

Notes:
The lines to monitor are either specified through a file OR by
The lines to monitor are either specified via API, through a file OR by
kvlevels, but not both. Use NULL for monitorfile if file is not set.
If monitorfile is given then the kvlevels are ignored.

Expand All @@ -347,7 +360,8 @@ PETSC_EXTERN PetscErrorCode OPFLOWSolutionToPS(OPFLOW);

This function should be called after OPFLOWSetupPS() is called
*/
PETSC_EXTERN PetscErrorCode OPFLOWSetLinesMonitored(OPFLOW, PetscInt,
PETSC_EXTERN PetscErrorCode OPFLOWSetLinesMonitored(OPFLOW, PetscInt, PetscInt,
PetscInt *, PetscInt,
const PetscScalar *,
const char *);

Expand All @@ -365,4 +379,15 @@ PETSC_EXTERN PetscErrorCode OPFLOWSetAuxillaryObjective(
PETSC_EXTERN PetscErrorCode OPFLOWSetUpdateVariableBoundsFunction(
OPFLOW, PetscErrorCode (*)(OPFLOW, Vec, Vec, void *), void *);

/*
OPFLOWCheckConstraints - Displays information about OPFLOW constraints

Input Parameters:
. opflow - the OPFLOW oject

Notes: This is called by OPFLOWSolutionToPS. If called exterenally then
OPFLOWSolutionToPS() needs to be called first.
*/
PETSC_EXTERN PetscErrorCode OPFLOWCheckConstraints(OPFLOW opflow);

#endif
2 changes: 1 addition & 1 deletion include/private/contingencylist.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ typedef enum {
LOAD_OUTAGE = 4
} OutageType;

#define MAX_SIMULTANEOUS_OUTAGES 5
#define MAX_SIMULTANEOUS_OUTAGES 250
#define MAX_CONTINGENCIES 20000

struct _p_Outage {
Expand Down
10 changes: 9 additions & 1 deletion include/private/opflowimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ struct _p_OPFLOWModelOps {
PetscErrorCode (*computeinequalityconstraintsarray)(
OPFLOW, const double *, double *); /* Set equality constraints */
PetscErrorCode (*computeconstraints)(OPFLOW, Vec, Vec);
PetscErrorCode (*checkconstraints)(
OPFLOW); /* Check and display constraints info */
PetscErrorCode (*computeconstraintsarray)(
OPFLOW, double *, double *); /* Array version of compute constraints */
PetscErrorCode (*computeequalityconstraintjacobian)(OPFLOW, Vec, Mat);
Expand Down Expand Up @@ -234,7 +236,8 @@ struct _p_OPFLOW {
PetscBool OPFLOWSolverRegisterAllCalled;

PetscBool ignore_lineflow_constraints; /* Ignore line flow constraints */
PetscBool allow_lineflow_violation; /* Allow line flow violation */
PetscBool lazy_lineflow_constraints; /* Apply line flow constraints lazily */
PetscBool allow_lineflow_violation; /* Allow line flow violation */
PetscReal
lineflowviolation_penalty; /* Penalty for exceeding line flow limits */

Expand All @@ -245,6 +248,8 @@ struct _p_OPFLOW {
imbalance */
PetscReal powerimbalance_penalty;

PetscReal load_scaling_factor; /* scaling factor for load */

PetscBool has_powersetpoint; /* Use real power set-point */

PetscInt numits; /* Number of solver iterations */
Expand Down Expand Up @@ -306,6 +311,9 @@ struct _p_OPFLOW {
/** @brief user provided data struct for auxillary objective */
void *userctx;

OPFLOW
*address; /* Address for this OPFLOW object, used with lazy constraints */

PetscBool skip_options; /* Skip run-time options */

PetscScalar weight; /* Weight for this system condition (0,1) */
Expand Down
70 changes: 56 additions & 14 deletions include/private/psimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
/**
* @brief A bogus value for load loss cost
*/
#define BOGUSLOSSCOST -1234.0
#define BOGUSLOSSCOST 12345.0

/**
* @brief private bus data struct
Expand Down Expand Up @@ -298,8 +298,29 @@ struct _p_PSLINE {
PetscScalar kvlevel; /* Kv level for lines, for transformers uses the HV side
voltage */

PetscInt areaf, areat; /**< Areas for from and to buses */
PetscInt zonef, zonet; /**< Zones for from and to buses */

PSBUS connbuses[2]; /**< From and to buses */

/****** For DC lines **********/
PetscBool isdcline; /**< Is line a DC line? */
PetscScalar pmin; /**< lower limit on PF (MW flow at "from" end) */
PetscScalar pmax; /**< upper limit on PF (MW flow at "from" end) */
PetscScalar Vf; /**<Voltage set-point at "from" bus (p.u.) */
PetscScalar Vt; /**<Voltage set-point at "to" bus (p.u.) */
PetscScalar qminf; /**< lower limit on QF (MVAr flow at "from" end) */
PetscScalar qmaxf; /**< upper limit on QF (MVAr flow at "from" end) */
PetscScalar qmint; /**< lower limit on QT (MVAr flow at "to" end) */
PetscScalar qmaxt; /**< upper limit on QT (MVAr flow at "to" end) */
PetscScalar loss0, loss1; /* constant and linear term for loss function (loss
= loss0 + loss1*PF) */
/* loss0 given in terms of MW, loss1 is dimensionless */
PetscScalar mult_pmin, mult_pmax;
PetscScalar mult_qminf, mult_qmaxf, mult_qmint, mult_qmaxt;
PetscScalar mult_pf;
/*******************/

PetscScalar
mult_sf; /* Lagrange multiplier for from bus injection (set by OPFLOW) */
PetscScalar
Expand All @@ -323,6 +344,8 @@ struct _p_PSLINE {
PetscInt nconeq; /* Number of equality constraints */
PetscInt nconineq; /* Number of inequality constraints */

PetscInt startxdcloc; /* Location of starting variable for dc line */

PetscInt starteqloc; /* Starting location for equality constraints */
PetscInt startineqloc; /* Starting location for inequality constraints */
};
Expand Down Expand Up @@ -351,6 +374,7 @@ typedef struct {
PSConngroupi *ci;
} PSConngroup;

/* Substation data */
struct _p_PSSUBST {
PetscInt num; /* Substation number */
PetscInt intnum; /* Internal number */
Expand All @@ -360,15 +384,20 @@ struct _p_PSSUBST {
PSBUS bus[20]; /* Pointers for buses */
PetscInt nkvlevels; /* Number of KV levels at this substation */
PetscScalar kvlevels[10]; /* Substation KV levels */
PetscInt zone; /* zone number */
PetscInt area; /* area number */
};

/* Struct to save system summary stats */
typedef struct {
PetscInt Nbus; /* Number of buses */
PetscInt Ngen; /* Number of generators */
PetscInt NgenON; /* Number of committed generators */
PetscInt Nline; /* Number of lines */
PetscInt NlineON; /* Number of lines ON */
PetscInt Nbus; /* Number of buses */
PetscInt Ngen; /* Number of generators */
PetscInt NgenON; /* Number of committed generators */
PetscInt Nline; /* Number of lines (includes DC lines) */
PetscInt NlineON; /* Number of lines ON (includes DC lines) */
PetscInt Ndcline; /* Number of dc lines */
PetscInt NdclineON; /* Number of dc lines ON */

PetscInt Nload; /* Number of loads */
PetscScalar total_pgencap; /* Total active generation capacity */

Expand All @@ -384,19 +413,23 @@ typedef struct {
*/
struct _p_PS {
PetscScalar MVAbase; /* System base MVA */
PetscInt Nbus, Ngen, Nline,
Nload; /* global # of buses,gens,branches, and loads (includes elements
which are out of service */
PetscInt nbus, ngen, nline,
nload; /* local # of buses,gens,branches,and loads */
PetscInt NlineON, nlineON; /* Number of active lines */
PetscInt NgenON, ngenON; /* Number of active generators */
PetscInt Nref, nref; /* Number of reference buses */
PetscInt Nbus, Ngen, Nline, Nload,
Ndcline; /* global # of buses,gens,branches,loads, and dclines (includes
elements which are out of service */
PetscInt nbus, ngen, nline, nload,
ndcline; /* local # of buses,gens,branches,and loads */
PetscInt NlineON, nlineON; /* Number of active lines (includes DC lines) */
PetscInt NdclineON, ndclineON; /* Number of active dc lines */
PetscInt NgenON, ngenON; /* Number of active generators */
PetscInt Nref, nref; /* Number of reference buses */
/* Number of generator types */
PetscInt ngencoal, ngenwind, ngensolar, ngenng, ngennuclear, ngenhydro,
ngenundefined;
/* Number of renewable generators (solar, wind) */
PetscInt ngenrenew;
/* Number of isolated buses */
PetscInt nisolated_buses, Nisolated_buses;
PetscInt *isolated_buses; /* Array to hold isolated buses */

PSBUS bus;
PSLOAD load;
Expand Down Expand Up @@ -446,13 +479,22 @@ struct _p_PS {
PetscInt nkvlevels; /* Number of different kV levels */
PetscScalar *kvlevels; /* kV levels */

PetscInt nlines_overloaded; /* Number of lines overloaded */
PetscInt *lines_overloaded; /* Indices (line numbers) for overloaded lines */
PetscBool has_overloaded_lines; /* False if no lines are overloaded */

PSSUBST substations;
PetscInt nsubstations;

PSSystemSummary sys_info;

PetscBool read_load_cost; /* are individual load costs assigned? */

PetscInt nzones; /* Number of zones */
PetscInt nareas; /* Number of areas */
PetscInt *areas; /* Areas */
PetscInt *zones; /* Zones */

PetscBool setupcalled; /* Is setup called on PS? */

PetscLogDouble solve_real_time;
Expand Down
Loading