From: Jip <[email protected]> Reply-To: MATPOWER discussion forum <[email protected]> Date: Wed, 23 Apr 2014 17:06:51 +0200 To: <[email protected]> Subject: Power flow with voltage dependent load
>Power flow with voltage dependent load Hi all, >I would like to model constant impedance and constant current loads in >Matpower. With some help of the manual and Ray Zimmerman I managed to >change the newtonpf.m file as follows: > >mis = V .* conj(Ybus * V) - Sbus .* (V.^n); (line 74) >mis = V .* conj(Ybus * V) - Sbus .* (V.^n); (line 124) A couple of things to note: i) Note that the Sbus vector is the complex bus injection, i.e., Sbus = (P_G + j*Q_G) - (P_D + j*Q_D). The equations you have above would work only in the case with generators and loads not being incident at the same bus. In this case where generators and loads are incident on the same bus, the generator injection will be also scaled which is incorrect. ii) Constant impedance and constant current load models are scaled using the voltage magnitude 'Vm' and not the complex voltage 'V' as you have in the equations above. See this IEEE Task Force paper on load models for steady state and dynamic simulations. http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=00466523 So the equations you should implement are mis = V .* conj(Ybus * V) - ((P_G+j*Q_G) - (P_D+j*Q_D).* (Vm.^n)); (1) The easiest way to implement (1) would be to pass the vectors P_G, Q_G, P_D, Q_D to newtonpf (See how these vectors can be created from makeSbus routine) >with n = 0 for constant power, n =1 for constant current and n = 2 for >constant impedance. >However, this affects the Jacobian therefore I must edit dSbus_dV.m as >well. In my attempt to do this I am stuck since I do not know how to do >this properly. I know, from TN2-OPF-Derivatives.pdf, that: >I_load = [Y_load] V - see (22) and (23) >S_load = [V] I_load* - see (27) - (32) >Where [Yload] = [conj(Sd)]. >This leads to g(x) = Sbus + Sd Cg Sg. With Sbus = [V] Ibus* and Sd = >[V] Iload*. >For the partial derivatives of the Jacobian dSbus_dVm and dSbus_dVa I >found: >dSbus_dVm = diagV * conj(Ybus * diagVnorm) + conj(diagIbus) * diagVnorm >+ diagV * conj(Yload * diagVnorm) + conj(diagIload) * diagVnorm; >dSbus_dVa = 1j * diagV * conj(diagIbus - Ybus * diagV) + 1j * diagV * >conj(diagIload - Yload * diagV); >Are these two equations for the partial derivatives correct? Any help >would be appreciated. Thanks in advance. For the Jacobian, you don't need to modify dSbus_dV file, you could simply create the matrix of partial derivatives for (P_D+j*Q_D).* (Vm.^n) in newtonpf and then add it to dSbus_dVm dSload_dVm = sparse(diag(n*(P_D+j*Q_D).*Vm.^(n-1))); dSbus_dVm = dSbus_dVm + dSload_dVm; Shri >Regards, Jip >
