Thanks for sending me the example, Samuel, and I agree it was a bug. I fixed it
for the next version by changing line 76 of makeBdc() to:
Bf = sparse(i, [f; t], [b; -b], nl, nb);
However, to avoid other errors, when removing branches from service one should
always check for isolated buses and set their BUS_TYPE to NONE.
Ray
> On Aug 17, 2016, at 11:23 AM, Samuel Perkin <[email protected]> wrote:
>
> Hi Ray,
>
> No problem at all, I will strip down my code to a minimal working example and
> then send it to you privately.
>
> Kind regards,
>
> Samuel
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Ray Zimmerman
> Sent: 17. ágúst 2016 13:31
> To: MATPOWER discussion forum <[email protected]>
> Subject: Re: Matpower6.0b1 - bug report: makeBdc() dimensioning of Bf
>
> Any chance you could share with me (off-line) the files needed to reproduce
> the error you saw? Without it, I’m not 100% certain its actually a bug.
> Better to fail (even if the reason isn’t immediately obvious) than to
> silently proceed with incorrect inputs. I just want to be sure that your fix
> doesn’t somehow cause a wrongly sized A matrix to be used incorrectly when it
> should be throwing and error.
>
> Thanks,
>
> Ray
>
>
>> On Aug 16, 2016, at 11:41 AM, Samuel Perkin <[email protected]> wrote:
>>
>> Hi Ray,
>>
>> Thank you for the reply.
>>
>> I didn't change the BUS_TYPE, and doing so may have avoided the error
>> entirely (I can't verify at the moment, sorry). Regardless, it may still be
>> reasonable to add the pre-allocation of Bf to makeBdc() to ensure the code
>> is robust against odd use-cases like mine. Otherwise I'm sure people running
>> into the error will google this discussion and be able to solve the problem
>> on their own.
>>
>> Kind Regards,
>>
>> Samuel
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Ray
>> Zimmerman
>> Sent: 15. ágúst 2016 19:56
>> To: MATPOWER Discussion List <[email protected]>
>> Subject: Re: Matpower6.0b1 - bug report: makeBdc() dimensioning of Bf
>>
>> Thank you for your detailed description.
>>
>> Did you make bus 24 as an isolated bus after disconnecting it, by setting
>> it’s BUS_TYPE to NONE? MATPOWER does not automatically check for
>> connectivity, so an isolated bus that is not marked as such will produce
>> errors.
>>
>> As to the reasons for the syntax used in line 66 of makeBdc()
>> <http://www.pserc.cornell.edu/matpower/docs/ref/matpower6.0b1/makeBdc.html>,
>> I’m pretty sure it was computational efficiency.
>>
>> Ray
>>
>>
>>> On Aug 9, 2016, at 12:05 PM, Samuel Perkin <[email protected]> wrote:
>>>
>>> Dear all/any,
>>>
>>> Whilst using Matpower for contingency analysis I was recieving a fatal
>>> error, which I tracked back to the makeBdc() function. I have provided a
>>> description of the scenario, the fatal error output, and a description of
>>> the underlying bug, followed by a solution.
>>>
>>> Scenario: IEEE RTS96 test case with user-defined constraints related to
>>> interface flows, and failure of lines 27 and 7 which disconnects the 24th
>>> bus (of 24) from the rest of the system.
>>> Fatal error output: Error using opt_model/add_constraints (line
>>> 168) @opt_model/add_constraints: number of columns of A does not match
>>> number of variables, A is 1 x 23, nv = 24
>>> Error in
>>> toggle_iflims>userfcn_iflims_formulation (line 158) om=
>>> add_constraints(om,‘iflims‘,Aif,lif,uif,{‚Va‘})
>>> Error in run_userfcn (line
>>> 37) rv = feval(userfcn.(stage)(k).fcn,rv,args); TCL MERGE ERROR (
>>> 08/15/2016 15:55:43 ): "extra characters after close-quote"
>> OutmailID: 120690811, List: 'matpower-l', MemberID: 76238625
>> SCRIPT: "nifs > Error in
>> opf_setup (line 260) om = run_userfcn(userfcn, ‚formulation´,om); >
>> Error in opf (line 198) om =
>> opf_setup(mpc,mpopt); >
>> Error in runopf (line 75) [r, success] = opf(casedata,mpopt); > > I traced
>> this fatal error back to the formulation of ‚Bf‘ on line 66 of makeBdc(): >
>> > Bf = sparse(i, [f; t], [b; -b]); % = spdiags(b, 0, nl, nl) * Cft; >
>> > The size of the sparse array is defined by [f;t], which contains the from
>> and to bus for all active branches, and therefore the maximum value of ‚f‘
>> or ‚t‘ will be 23 if the 24th bus is disconnected. This error then
>> propagates through a few functions until it results in the fatal error
>> stated above. Calculating Bf using the commented out part of line 66: > >
>> Bf = spdiags(b, 0, nl, nl) * Cft; %solution option 1 > > results in the
>> correct dimensions, and solves the error. I wonder why this formulation was
>> replaced? Is it for syntax or readability reasons? If the new syntax is
>> preferred, the problem can also be address by adding the following
>> preallocation of ‚Bf‘ before line 66 in makeBdc(): > > Bf =
>> sparse(0,nl,nb); %solution option 2 > > After implementing either of the
>> above solutions in makeBdc(), the fatal error no longer occurred. I hope
>> that this is useful. > > Kind Regards, > > Samuel Perkin
>> --Apple-Mail=_678BB122-59B1-42C2-9B13-C203C7D3D134
>> Content-Transfer-Encoding: quoted-printable Content-Type: text/html;
>> charset="utf-8" <html><head><meta http-equiv="Content-Type"
>> content="text/html charset=utf-8"></head><body style="word-wrap: break-word;
>> -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"
>> class=""><div class="">Thank you for your detailed description.</div><div
>> class=""><br class=""></div>Did you make bus 24 as an isolated bus after
>> disconnecting it, by setting it’s BUS_TYPE to NONE? MATPOWER does not
>> automatically check for connectivity, so an isolated bus that is not marked
>> as such will produce errors.<div class=""><br class=""></div><div
>> class="">As to the reasons for the syntax used in line 66 of <a
>> href="http://www.pserc.cornell.edu/matpower/docs/ref/matpower6.0b1/makeBdc.html"
>> class=""><font face="Courier" class="">makeBdc()</font></a>, I’m pretty
>> sure it was computational efficiency.</div><div class=""><br
>> class=""></div><div class=""> Ray<br class=""><div class=""><br
>> class=""><div class=""><br class=""><div><blockquote type="cite"
>> class=""><div class="">On Aug 9, 2016, at 12:05 PM, Samuel Perkin <<a
>> href="mailto:[email protected]" class="">[email protected]</a>>
>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div
>> class="WordSection1" style="page: WordSection1; font-family: Helvetica;
>> font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight:
>> normal; letter-spacing: normal; orphans: auto; text-align: start;
>> text-indent: 0px; text-transform: none; white-space: normal; widows: auto;
>> word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div style="margin: 0cm
>> 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"
>> class=""><span lang="IS" class="">Dear all/any,<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> lang="IS" class="">Whilst using Matpower for contingency analysis I was
>> recieving a fatal error, which I tracked back to the makeBdc() function. I
>> have provided a description of the scenario, the fatal error output, and a
>> description of the underlying bug, followed by a solution.<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b
>> class=""><span lang="IS" class="">Scenario:<span
>> class="Apple-converted-space"> </span></span></b><span lang="IS"
>> class="">IEEE RTS96 test case with user-defined constraints related to
>> interface flows, and failure of lines 27 and 7 which disconnects the 24th
>> bus (of 24) from the rest of the system.<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><b class=""><span
>> lang="IS" class="">Fatal error output:</span></b><span lang="IS"
>> class=""><span
>> class="Apple-converted-space"> </span> <span
>> class="Apple-converted-space"> </span><span style="color: red;"
>> class="">Error using opt_model/add_constraints (line 168)
>> @opt_model/add_constraints: number of columns of A does not match number of
>> variables, A is 1 x 23, nv = 24<o:p class=""></o:p></span></span></div><div
>> style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri,
>> sans-serif;" class=""><span lang="IS" style="color: red;"
>> class="">
>> Error in toggle_iflims>userfcn_iflims_formulation (line 158) om=
>> add_constraints(om,‘iflims‘,Aif,lif,uif,{‚Va‘})<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> style="color: red;"
>> class="">
>> Error in run_userfcn (line 37) rv = feval(userfcn.(stage)(k).fcn,rv,args);"
>> nifs<o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt;
>> font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> style="color: red;"
>> class="">
>> Error in opf_setup (line 260) om = run_userfcn(userfcn,
>> ‚formulation´,om);<o:p class=""></o:p></span></div><div style="margin: 0cm
>> 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"
>> class=""><span lang="IS" style="color: red;"
>> class="">
>> Error in opf (line 198) om = opf_setup(mpc,mpopt);<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> style="color: red;"
>> class="">
>> Error in runopf (line 75) [r, success] = opf(casedata,mpopt);<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> style="color: red;" class=""><o:p class=""> </o:p></span></div><div
>> style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri,
>> sans-serif;" class=""><span lang="IS" class="">I traced this fatal error
>> back to the formulation of ‚Bf‘ on line 66 of makeBdc():<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> style="font-size: 10pt; font-family: 'Courier New';" class="">Bf = sparse(i,
>> [f; t], [b; -b]); <span
>> class="Apple-converted-space"> </span></span><span style="font-size:
>> 10pt; font-family: 'Courier New'; color: rgb(34, 139, 34);" class="">% =
>> spdiags(b, 0, nl, nl) * Cft;</span><span style="font-size: 10pt;
>> font-family: 'Courier New';" class=""><o:p class=""></o:p></span></div><div
>> style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri,
>> sans-serif;" class=""><span lang="IS" class=""><o:p
>> class=""> </o:p></span></div><div style="margin: 0cm 0cm 0.0001pt;
>> font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class="">The size of the sparse array is defined by [f;t], which contains
>> the from and to bus for all<span
>> class="Apple-converted-space"> </span><b class="">active</b><span
>> class="Apple-converted-space"> </span>branches, and therefore the
>> maximum value of ‚f‘ or ‚t‘ will be 23 if the 24th bus is disconnected. This
>> error then propagates through a few functions until it results in the fatal
>> error stated above. Calculating Bf using the commented out part of line
>> 66:<o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt;
>> font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> style="font-size: 10pt; font-family: 'Courier New';" class="">Bf =
>> spdiags(b, 0, nl, nl) * Cft;</span><span style="font-size: 10pt;
>> font-family: 'Courier New'; color: rgb(34, 139, 34);" class=""><span
>> class="Apple-converted-space"> </span>%solution option 1</span><span
>> style="font-size: 10pt; font-family: 'Courier New';" class=""><o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> lang="IS" class="">results in the correct dimensions, and solves the error.
>> I wonder why this formulation was replaced? Is it for syntax or readability
>> reasons? If the new syntax is preferred, the problem can also be address by
>> adding the following preallocation of ‚Bf‘ before line 66 in makeBdc():<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span style="font-size:
>> 10pt; font-family: 'Courier New';" class=""><o:p
>> class=""> </o:p></span></div><div style="margin: 0cm 0cm 0.0001pt;
>> font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> style="font-size: 10pt; font-family: 'Courier New';" class="">Bf =
>> sparse(0,nl,nb);</span><span
>> class="Apple-converted-space"> </span><span style="font-size: 10pt;
>> font-family: 'Courier New'; color: rgb(34, 139, 34);" class="">%solution
>> option 2</span><span lang="IS" class=""><o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> lang="IS" class="">After implementing either of the above solutions in
>> makeBdc(), the fatal error no longer occurred. I hope that this is
>> useful.<o:p class=""></o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> lang="IS" class=""><o:p class=""> </o:p></span></div><div
>> style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri,
>> sans-serif;" class=""><span lang="IS" class="">Kind Regards,<o:p
>> class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size:
>> 11pt; font-family: Calibri, sans-serif;" class=""><span lang="IS"
>> class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm
>> 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span
>> lang="IS" class="">Samuel
>> Perkin</span></div></div></div></blockquote></div><br
>> class=""></div></div></div></body></html>
>
>
>