Hello Beyza,
The answer given by Ray precisely defines how radial power flow solvers
do the job. They all assume that the case is already using internal
numbering (buses are renumbered consecutively beginning at 1). As he
pointed out if you use runpf() it will call ext2int() to remove off-line
equipment before calling radial_pf(). Therefore, I suggest that you call
all radial power flow solver through runpf().
For example, there is 33-bus network ‘case33bw’ with 37 branches out of
which 5 are with BR_STATUS set to 0 (last 5 in the file). This network
is also radial and you can solve it using runpf() in the following way:
mpopt = mpoption('pf.alg', 'ISUM');
results = runpf(‘case33bw’, mpopt);
Concerning your second question, radiality check is very simple. First
you have to check whether your network is properly connected using
connected_components(). If the network is connected, or if you select
any set of connected components, the network is radial if nb == nl + 1
where nb = size(mpc.bus, 1) and nl = size(mpc.branch, 1).
Best regards,
Mirko
On 6/1/21 5:05 PM, Ray Daniel Zimmerman wrote:
Hi Beyza,
Let me first mention that I did not write the radial power flow code,
so I am not as familiar with the details as the original author, Mirko
Todorovski.
1. The check for radial topology in order_radial() (called by
radial_pf()) is done without regard for the status of the branches in
the branch matrix. This means that radial_pf() expects that all
out-of-service branches have been removed before it is called. And
indeed, runpf() does call ext2int() to remove off-line equipment
before calling radial_pf().
2. Looking at the code at the top of radial_pf(), it appears that
after doing the following …
mpc = order_radial(ext2int(mpc));
… mpc.loop should contain the number of loops in the network.
As a side note, I would love to see the code redesigned so that
connected_components() , which traverses the network efficiently,
returns all of the information needed by order_radial() to avoid
duplication of network traversal code. Making
connected_components() return information about loops would be
straightforward if you (or anyone else) would like to give it a try.
Ray
On Jun 1, 2021, at 7:37 AM, Beyza Nur Dilber <dilb...@itu.edu.tr
<mailto:dilb...@itu.edu.tr>> wrote:
Hello,
I am Beyza, from Turkey. I hope everyone is well.
I have a few question about radial power flow on Matpower.
1. I would like to run 16bus radial distribution system. There are
some branches which tie buses and cause loop. But these "branches
status" are '0'. So, they can be thought as opened switches
(sectionalizing switches). Thus, system is actually radial with these
conditions. However, when I write radial_pf, it is stated that "There
are loops". I don't understand why it says that. On the other hand,
when I write the code below,
mpopt = mpoption('pf.alg','ISUM')
results=runpf(mpc,mpopt);
radial power flow can be done. (I understand it is radial power flow
instead of newton raphson because when I change the branches and turn
into not radial situation, it shows warning that 'it is only for radial')
2. My other question is, is there any code for radiality check?
(Instead of error, I want to get some results like 0-1)
Thanks a lot. Have a nice day.
Beyza Nur Dilber