00001
00010 #ifndef _POWERFLOW_H
00011 #define _POWERFLOW_H
00012
00013 #include "gridlabd.h"
00014 #include "solver_nr.h"
00015
00016 #ifdef _POWERFLOW_CPP
00017 #define GLOBAL
00018 #define INIT(A) = (A)
00019 #else
00020 #define GLOBAL extern
00021 #define INIT(A)
00022 #endif
00023
00024 #ifdef _DEBUG
00025 void print_matrix(complex mat[3][3]);
00026 #endif
00027
00028 #define GETOBJECT(obj) ((OBJECT *) obj - 1)
00029 #define IMPORT_CLASS(name) extern CLASS *name##_class
00030
00031
00032 #define TSNVRDBL 9223372036854775808.0
00033
00034 typedef enum {SM_FBS=0, SM_GS=1, SM_NR=2} SOLVERMETHOD;
00035 typedef enum {MM_SUPERLU=0, MM_EXTERN=1} MATRIXSOLVERMETHOD;
00036 typedef enum {
00037 MD_NONE=0,
00038 MD_ONCE=1,
00039 MD_PERCALL=2,
00040 MD_ALL=3
00041 } MATRIXDUMPMETHOD;
00042
00043 typedef enum {
00044 LS_OPEN=0,
00045 LS_CLOSED=1
00046 } LINESTATUS;
00047
00048 typedef enum {
00049 IRM_NONE=0,
00050 IRM_UNDEFINED=1,
00051 IRM_TRAPEZOIDAL=2,
00052 IRM_BACKEULER=3
00053 } INRUSHINTMETHOD;
00054
00055 typedef enum {
00056 FMM_NONE=0,
00057 FMM_SIMPLE=1,
00058 FMM_PLL=2
00059 } FREQMEASDEFAULT;
00060
00061
00062 typedef struct s_ext_fxn {
00063 void *dllLink;
00064 void *ext_init;
00065 void *ext_alloc;
00066 void *ext_solve;
00067 void *ext_destroy;
00068 } EXT_LU_FXN_CALLS;
00069
00070 GLOBAL char256 LUSolverName INIT("");
00071 GLOBAL EXT_LU_FXN_CALLS LUSolverFcns;
00072 GLOBAL SOLVERMETHOD solver_method INIT(SM_FBS);
00073 GLOBAL char256 MDFileName INIT("");
00074 GLOBAL MATRIXDUMPMETHOD NRMatDumpMethod INIT(MD_NONE);
00075 GLOBAL bool NRMatReferences INIT(false);
00076 GLOBAL bool use_line_cap INIT(false);
00077 GLOBAL bool use_link_limits INIT(true);
00078 GLOBAL MATRIXSOLVERMETHOD matrix_solver_method INIT(MM_SUPERLU);
00079 GLOBAL unsigned int NR_bus_count INIT(0);
00080 GLOBAL unsigned int NR_branch_count INIT(0);
00081 GLOBAL BUSDATA *NR_busdata INIT(NULL);
00082 GLOBAL BRANCHDATA *NR_branchdata INIT(NULL);
00083 GLOBAL NR_SOLVER_STRUCT NR_powerflow;
00084 GLOBAL int NR_islands_detected INIT(0);
00085 GLOBAL bool NR_island_fail_method INIT(false);
00086 GLOBAL bool NR_solver_working INIT(false);
00087 GLOBAL int NR_curr_bus INIT(-1);
00088 GLOBAL int NR_curr_branch INIT(-1);
00089 GLOBAL int64 NR_iteration_limit INIT(500);
00090 GLOBAL bool NR_dyn_first_run INIT(true);
00091 GLOBAL bool NR_admit_change INIT(true);
00092 GLOBAL int NR_superLU_procs INIT(1);
00093 GLOBAL TIMESTAMP NR_retval INIT(TS_NEVER);
00094 GLOBAL OBJECT *NR_swing_bus INIT(NULL);
00095 GLOBAL int NR_swing_bus_reference INIT(-1);
00096 GLOBAL int64 NR_delta_iteration_limit INIT(10);
00097 GLOBAL bool FBS_swing_set INIT(false);
00098 GLOBAL bool show_matrix_values INIT(false);
00099 GLOBAL double primary_voltage_ratio INIT(60.0);
00100 GLOBAL double nominal_frequency INIT(60.0);
00101 GLOBAL double warning_underfrequency INIT(55.0);
00102 GLOBAL double warning_overfrequency INIT(65.0);
00103 GLOBAL double warning_undervoltage INIT(0.8);
00104 GLOBAL double warning_overvoltage INIT(1.2);
00105 GLOBAL double warning_voltageangle INIT(2.0);
00106 GLOBAL bool require_voltage_control INIT(false);
00107 GLOBAL double geographic_degree INIT(0.0);
00108 GLOBAL complex fault_Z INIT(complex(1e-6,0));
00109 GLOBAL complex ground_Z INIT(complex(1e-6,0));
00110 GLOBAL double default_maximum_voltage_error INIT(1e-6);
00111 GLOBAL double default_maximum_power_error INIT(0.0001);
00112 GLOBAL OBJECT *restoration_object INIT(NULL);
00113 GLOBAL OBJECT *fault_check_object INIT(NULL);
00114 GLOBAL bool fault_check_override_mode INIT(false);
00115 GLOBAL bool meshed_fault_checking_enabled INIT(false);
00116 GLOBAL bool restoration_checks_active INIT(false);
00117 GLOBAL double reliability_metrics_recloser_counts INIT(0.0);
00118
00119 GLOBAL bool enable_subsecond_models INIT(false);
00120 GLOBAL bool all_powerflow_delta INIT(false);
00121 GLOBAL FREQMEASDEFAULT all_powerflow_freq_measure_method INIT(FMM_NONE);
00122 GLOBAL unsigned long deltamode_timestep INIT(10000000);
00123 GLOBAL double deltamode_timestep_publish INIT(10000000.0);
00124 GLOBAL OBJECT **delta_objects INIT(NULL);
00125 GLOBAL FUNCTIONADDR *delta_functions INIT(NULL);
00126 GLOBAL FUNCTIONADDR *post_delta_functions INIT(NULL);
00127 GLOBAL int pwr_object_count INIT(0);
00128 GLOBAL int pwr_object_current INIT(-1);
00129 GLOBAL TIMESTAMP deltamode_starttime INIT(TS_NEVER);
00130 GLOBAL TIMESTAMP deltamode_endtime INIT(TS_NEVER);
00131 GLOBAL double deltamode_endtime_dbl INIT(TSNVRDBL);
00132 GLOBAL TIMESTAMP deltamode_supersec_endtime INIT(TS_NEVER);
00133 GLOBAL double current_frequency INIT(60.0);
00134 GLOBAL bool master_frequency_update INIT(false);
00135 GLOBAL bool enable_frequency_dependence INIT(false);
00136 GLOBAL double default_resistance INIT(1e-4);
00138
00139 GLOBAL bool enable_inrush_calculations INIT(false);
00140 GLOBAL INRUSHINTMETHOD default_inrush_integration_method INIT(IRM_TRAPEZOIDAL);
00141 GLOBAL double impedance_conversion_low_pu INIT(0.7);
00142 GLOBAL double deltatimestep_running INIT(-1.0);
00144
00145 GLOBAL bool enable_mesh_fault_current INIT(false);
00147
00148 GLOBAL char1024 market_price_name INIT("current_market.clearing_price");
00149
00150
00151 void schedule_deltamode_start(TIMESTAMP tstart);
00152
00153
00154 #define UNKNOWN 0
00155 #define ROUNDOFF 1e-6 // numerical accuracy for zero in float comparisons
00156
00157
00158 #include "powerflow_object.h"
00159
00160 #endif // _POWERFLOW_H
00161