/* Set up compiler for maximum number of generators for future changes */ #define MAXGEN 10 /* MAXIMUM NUMBER OF GENERATORS */ #define MAXBUS 10 /* MAXIMUM NUMBER OF BUSSES */ #define MAXLINE 15 /* MAXIMUM NUMBER OF LINES */ #define CASES 1024 /* MAXIMUM POSSIBLE GOOD CASES */ #define OUTROW 2 /* SCREEN OUTPUT ROW COORDINATE */ #define OUTCOL 1 /* SCREEN OUTPUT COLUMN COORDINATE */ #define INROW 25 /* SCREEN INPUT ROW COORDINATE */ #define INCOL 1 /* SCREEN INPUT COLUMN COORDINATE */ #define TOL .1 /* CONVERGENCE TOLERANCE */ #define MAXITERATIONS 20 /* MAXIMUM ALLOWED ITERATIONS */ /* SET UP FUNCTIONS FOR I/O SUBROUTINES ---------------------------------- */ char check_gen_data(int unitno); /* CHECKS FOR GOOD GENERATOR DATA */ char get_gen_data(void); /* GET GENERATOR DAT FROM A FILE */ /* T-rue F-alse */ char get_loss_data(void); /* GET THE LOSS DATA FROM A FILE */ char input_data(void); /* INPUT DATA & EDIT DATA ROUTINE */ char save_data(void); /* SAVE DATA TO A FILE */ void show_data(void); /* SHOWS GENERATOR DATA & FEASIBLE */ /* - SET UP FUNCTIONS FOR DISPATCH -------------------------------------- */ char solve_a_case(void); /* SOLVE A CASE S-olved F-ailed */ void calc_dfdp_constants (void); /* CALCULATE FIRST DERIVATIVE F(P) */ char calc_output (void); /* GIVEN LAMBDA, CALCULAT OUTPUT */ void calc_energy_cost (void); /* ENERGY COST */ void print_solution(void); /* PRINT OUT SOLVED CASE */ char binary_solution(void); /* BINARY SOLUTION METHOD */ char slope_solution(float acceleration); /* BASE GUESS ON PREVIOUS ERR */ /* -FUNCTIONS DEDICATED TO TEACHING ------------------------------------- */ char guess_a_lambda( void ); /* GUESS LAMBDA & DISPLAY OUTPUT */ char teach_equal_lambda(void); /* TEACH MINIMUM COST AT = LAMBDA */ char input_gen_poly( int unitno); /* GENERATOR INPUT DATA */ char plot_gen_poly( float min_load, /* PLOTS GENERATOR POLYNOMIAL */ float max_load, float *mw_out, float *mw_in, int numobs, /* NUMBER OF HEAT RATE DATA POINTS */ float *coef); /* COEFFECIENTS OF POLYNOMIAL */ /* PLOT THE RESULTS OF AN ITERATIVE SOLUTION */ void plot_iterations( float *each_guess, int num_guess ); /* GRAPHS UNIT OUTPUT & LAMBDAS */ char display_unit_incrementals( float disp_lambda, char show_steps); /* UPDATE LOSS PEANALTY dPl/dPn */ char update_loss_penalty(void); /* SET UP COMPLEX VARIABLES --------------------------------------------- */ struct complex cdiv(struct complex, struct complex); /* COMPLEX DIVIDE */ struct complex far y[MAXBUS][MAXBUS]; /* Y MATRIX DEFINITION */ /* DIMENSIONED ARRAY FOR GENERATOR DATA ---------------------------------- */ /* Input Data */ float gen_name[MAXGEN]; /* NUMBER ASSIGNED TO GENERATOR */ float min_out[MAXGEN], /* MINIMUM OUTPUT OF THIS GENERATOR */ max_out[MAXGEN], /* MAXIMUM OUTPUT OF THIS GENERATOR */ fuel_cost[MAXGEN], /* FUEL COST FOR THIS GENERATOR */ h_0[MAXGEN], /* NO LOAD CONSTANT OF ENERGY = f(Pi) */ h_1[MAXGEN], /* LINEAR PORTION OF ENERGY = f(Pi) */ h_2[MAXGEN], /* SQUARED PORTION OF ENERGY = f(Pi) */ h_3[MAXGEN], /* CUBED PORTION OF ENERGY = f(Pi) */ loss_dpdl[MAXGEN], /* CHANGE IN LOSSES PER GEN. OUTPUT */ dfdp_0[MAXGEN], /* CONSTANT PORTION OF LAMBDA */ dfdp_1[MAXGEN], /* PORTION OF LAMBDA PROPORTIONAL TO Pi */ dfdp_2[MAXGEN]; /* new constant to be determined */ /* Calculated Data */ float far gen_min_lambda[MAXGEN], /* MINIMUM LAMBDA FOR THIS UNIT */ gen_max_lambda[MAXGEN], /* MAXIMUM LAMBDA FOR THIS UNIT */ gen_lambda[MAXGEN], /* CALCULATED GENERATOR LAMBDA */ gen_load[MAXGEN], /* CALCULATED GENERATOR LOAD */ gen_output_cost[MAXGEN], /* TOTAL OUTPUT COST AT A GIVEN LOAD */ gen_energy_cost[MAXGEN]; /* ENERGY COST / KWH AT A GIVEN LOAD */ char gen_status[MAXGEN]; /* STATUS R-egulating */ /* L-ow limit */ /* H-igh limit */ /* O-ff (not available) */ /* F-ixed output */ float lam_guess[MAXITERATIONS]; /* KEEPS TRACK OF LAMBDA ITERATIONS */ /* DIMENSINED ARRAYS FOR LOSS CALCULATIONS FROM LOAD FLOW ---------------- */ float far dpl_dtheta[MAXBUS]; /* LOSS CHANGE / CHANGE IN THETA */ float far a[MAXBUS][MAXGEN], /* A(j,n) COEFFECIENTS */ v[MAXBUS], /* MAGNITUDE OF VOLTAGE AT BUS j */ theta[MAXBUS]; /* ANGLE OF VOLTAGE AT BUS j */ /* - SET UP MISCELLANEOUS VARIABLES -------------------------------------- */ int num_gen = 0; /* NUMBER OF GENERATORS */ int num_line = 0; /* NUMBER OF LINES */ int num_bus = 0; /* NUMBER OF BUSSES */ int num_guesses = 0; /* NUMBER OF GUESSES FROM ITERATIONS */ float lambda = 0; /* SYSTEM LAMBDA */ float max_lambda; /* MAXIMUM LAMBDA FROM GENERATORS */ float min_lambda; /* MINIMUM LAMBDA FROM GENERATORS */ float system_load = 0; /* SYSTEM LOAD TO MEET */ float net_out = 0; /* OUTPUT TOTALIZER */ float maximum_feasable = 0; /* MAXIMUM FEASABLE GENERATION */ float minimum_feasable = 0; /* MINIMUM FEASABLE GENERATION */ /* Status Flags */ char mp[81]; /* MESSAGE STRING POINTER */ char valid_data = 'F'; /* VALID DATA CHECK T-rue F-alse */ char up_to_date = 'F'; /* MARKER FOR CURRENT DATA ON FILE */ char file_open = 'F'; /* FILE OPEN TRACKING VARIABLE */ char useloss = 'Y'; /* USE LOSS SELECTOR Y-es N-o */ char line_data = 'N'; /* HAVE WE LOADED LINE DATA Y-es N-o */ char bus_data = 'N'; /* HAVE WE LOADED BUS DATA Y-es N-o */ char a_data = 'N'; /* HAVE WE LOADED A DATA Y-es N-o */ char print_all = 'N'; /* PRINT OUT INTERMEDIATE STEPS */ char teach_mode = 'T'; /* SHOW LEARN MESSAGES? T/F */ /* File buffers */ static FILE *genfile; /* GENERATOR FILE NAME POINTER */ char genfile_buff[128] = "NONE"; /* BUFFER FOR FILE NAME */ /* Miscellaneous graphics display variables */ char buffer [81]; /* I/O BUFFER FOR _OUTTEXT */ short oldfgd; /* OLD FOREGROUND COLOR */ long oldbgd; /* OLD BACKGROUND COLOR */ struct rccoord oldpos; /* FORMER CURSOR POSITION */ int line_color[10]; /* ARRAY CONTAINING LINE COLOR DATA */ int border_color; /* COLOR NUMBER FOR GRAPH BORDERS */ int axis_color; /* COLOR NUMBER FOR AXIS */ int lambda_color; /* COLOR FOR LAMBDA ON GRAPHS */ int gen1_color; /* COLOR FOR GENERATOR 1 ON EQUAL LAMBD */ int gen2_color; /* COLOR FOR GENERATOR 2 ON EQUAL LAMBD */ int iter_color; /* COLOR FOR ITERATION PLOT */ int prompt_color; /* COLOR FOR PROMPT LINE */ float scatter_mark_size; /* SCALE FACTOR FOR SCATTER MARKING */ char font_path[40]; /* FONT PATH SPECIFICATION */