Please unsubscribe me from your email list. I did not ask to be on this list.
On Mon, Jan 13, 2020 at 10:57 AM Brunswick Computers < k...@brunswickcomputerservice.com> wrote: > > > > > REMOVE this email address from your spam. > > > > > > *From:* bounce-124269900-85421...@list.cornell.edu < > bounce-124269900-85421...@list.cornell.edu> *On Behalf Of *Florian > Bennewitz > *Sent:* Monday, January 13, 2020 10:43 AM > *To:* MATPOWER-DEV-L@cornell.edu > *Subject:* implementation of generator reactive power capability curve in > load flow > > > > Hello everybody, > > > > first of all I wish you a happy new year. > > > > For the purpose of my thesis, I needed to consider more detailed reactive > power limits of synchronous generators. This mainly includes the influence > of the terminal voltage to the operation chart of the generators. Hence I > wrote the function genreacpowercapcurve_rev() (see attachment), which is > implemented in runpf_rev() directly before the lines, where gens with > violated Q constraints are identified (see further annotations to > runpf_rev() below). Basically, genreacpowercapcurve_rev() calculates the > Q-limits of each generator according to the well-known operating chart. > > > > Some annotations regarding genreacpowercapcurve_rev(): > > - The calculation of the operation chart of a round-rotor-generator > needs one further parameter, the stationary reactance in the d-axis. For my > purpose, I wrote that number in gen(:,13), because I do not use any > OPF-code from Matpower. However, salient-pole-generators are currently not > considered. > - One further parameter needed is the so called practical static > stability limit, which defines a safety margin to the theoretical static > stability limit at theta=90° at the under-excited side of the operating > chart. I included this as mpopt.pf.static_stab_lim, which is by default > 70°. > - The set point regarding active power injection can be inadmissible > in the theoretical case of very low terminal voltages. Currently, this is > considered to be an infeasible problem. > - The rated voltage of the generator is currently set to the base > voltage of the terminal bus, which might not be true in general. > > > > Some annotations regarding runpf_rev(): > > - The application of the reactive power capability curve is activated > with mpopt.pf.consider_q_cap_curve, which is 0 by default. > - The application of voltage-dependent-reactive-power-limits yielded a > problem with the PV-PQ-change of generator-busses, which violate their > reactive power limits. In the original runpf(), in this case a generator is > fixed to the reactive power limit by converting its [Pg,Qg_lim] to a > negative load, i.e. -[Pg,Qg_lim] are stored in mpc.bus. Thereafter, the > limited power injection remains unchanged in further iterations. This is > correct, if the respective reactive power limit does not change further; > but it is wrong, if the reactive power limit changes with terminal voltage > magnitude. Hence, further iterations are needed, until the limited reactive > power injection shows convergence with the terminal voltage magnitude. > However, this issue caused some changes in the runpf_rev(), which I tried > to comment thoroughly. The relevant rows in runpf_rev() are the following > ones: > - rows 196, 203-205: some initializations > - rows 246-256: implementation of genreacpowercapcurve() > - row 263: adaption of if-clause > - rows 301-346: correction of PV-PQ-change and calculation of > ratio_qg_change, which indicates the aforementioned convergence behavior > - The convergence of the outer loop is assumed, if ratio_qg_change < > mpopt.pf. q_lim_gen_tol, which is 0.01 by default. > > > > A first small test looks fine for me. However, I guess there are major > possibilities to improve this, at least my style of writing this code. ;) > So hopefully there will be some good ideas on this. > > > > Last but not least a huge thank-you for the tremendous work on Matpower to > Dr. Zimmermann and all the others! > > Kind regards from Germany, > > Florian Bennewitz >