]> SALOME platform Git repositories - tools/eficas.git/blob - OldCodes/ProcessOutputs_Eficas/ExtractGeneratorLoadLineandTransfoDicoProcess.py
Salome HOME
chgt Copyrigth
[tools/eficas.git] / OldCodes / ProcessOutputs_Eficas / ExtractGeneratorLoadLineandTransfoDicoProcess.py
1 import os\r
2 import sys\r
3 import numpy as np\r
4 import copy\r
5 \r
6 path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','TreatOutputs'))\r
7 sys.path.append(path1)\r
8 import Options\r
9 \r
10 \r
11 def getNominalkV(NetworkFile):\r
12 \r
13     print "version en dur"\r
14 \r
15     BusList=[11.0, 30.0, 90.0]\r
16     LinesList=[30.0, 90.0]\r
17     TransfosList=['11.0 - 30.0', '11.0 - 90.0', '30.0 - 90.0', '90.0 - 30.0']\r
18     return BusList, LinesList, TransfosList\r
19 \r
20 \r
21 \r
22 \r
23 \r
24     import psspy\r
25     import redirect\r
26 \r
27     psspy.psseinit(80000)\r
28     redirect.psse2py()\r
29     psspy.progress_output(6)\r
30 \r
31     psspy.case(NetworkFile)\r
32     # Buses\r
33 \r
34     sid = -1\r
35     flag = 2\r
36     ierr, ret = psspy.abusreal(sid, flag, ['BASE'])\r
37     Options.BusBase = ret[0]\r
38 \r
39     ierr, carray = psspy.abuschar(sid, flag, ['NAME'])\r
40     Options.BusBaseList = {}\r
41     for i in range(len(carray[0])):\r
42         Options.BusBaseList[carray[0][i]] = ret[0][i]\r
43 \r
44     BusList = []\r
45     for item in Options.BusBase:\r
46         if item not in BusList:\r
47             BusList.append(item)\r
48     BusList = sorted(BusList)\r
49 \r
50     # Lines\r
51 \r
52     owner = 1\r
53     ties = 1\r
54     flag = 2\r
55     entry = 1\r
56     string = ['FROMNAME', 'TONAME']\r
57     ierr, carray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
58 \r
59     for i in range(len(carray[0])):\r
60         nom = Options.BusBaseList[carray[0][i]]\r
61         name = carray[0][i] + '-' + carray[1][i]\r
62         Options.LinesBaseList[name] = nom\r
63         Options.LinesBase.append(nom)\r
64 \r
65     LinesList = []\r
66     for item in Options.LinesBase:\r
67         if item not in LinesList:\r
68             LinesList.append(item)\r
69     LinesList = sorted(LinesList)\r
70 \r
71     # Transfos\r
72 \r
73     owner = 1\r
74     ties = 1\r
75     flag = 6\r
76     entry = 1\r
77     string = ['FROMNAME', 'TONAME']\r
78     ierr, carray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
79 \r
80     for i in range(len(carray[0])):\r
81         nom1 = Options.BusBaseList[carray[0][i]]\r
82         nom2 = Options.BusBaseList[carray[1][i]]\r
83         name = carray[0][i] + '-' + carray[1][i]\r
84         Options.TransfoBaseList[name] = [nom1, nom2]\r
85         Options.TransfoBase.append([nom1, nom2])\r
86 \r
87     TransfosList = []\r
88     for item in Options.TransfoBase:\r
89         string = str(item[0]) + ' - ' + str(item[1])\r
90         if string not in TransfosList:\r
91             TransfosList.append(string)\r
92     TransfosList = sorted(TransfosList)\r
93 \r
94     # Generators\r
95 \r
96     sid = -1 #all buses\r
97     flag = 1 #all in service loads/generators (4 all loads/generators)\r
98 \r
99     string = ['NUMBER']\r
100     ierr,iarray = psspy.amachint(sid,flag,string)\r
101 \r
102     string = ['NAME','ID']\r
103     ierr,carray = psspy.amachchar(sid,flag,string)\r
104 \r
105     for i in range(len(iarray[0])):\r
106         idname = "GR" + carray[1][i]\r
107         machinename = carray[0][i].strip()+ "__" + idname\r
108         machinename = machinename.replace(" ","_")\r
109         machinename = machinename.replace("-","_")\r
110         machinename = machinename.replace(".","_")\r
111         machinename = machinename.replace("&","and")\r
112         try:\r
113             int(machinename[0])\r
114             machinename = "_" + machinename\r
115         except:\r
116             pass\r
117         Options.GenBaseList[machinename] = iarray[0][i]\r
118 \r
119     return BusList, LinesList, TransfosList\r
120 \r
121 def getBusNominalkV(NetworkFile):\r
122     import psspy\r
123     import redirect\r
124 \r
125     psspy.psseinit(80000)\r
126     redirect.psse2py()\r
127     psspy.progress_output(6)\r
128 \r
129     psspy.case(NetworkFile)\r
130 \r
131     sid = -1\r
132     flag = 2\r
133     ierr, ret = psspy.abusreal(sid, flag, ['BASE'])\r
134     Options.BusBase = ret[0]\r
135 \r
136     ierr, carray = psspy.abuschar(sid, flag, ['NAME'])\r
137     buses = {}\r
138     for i in range(len(carray[0])):\r
139         buses[carray[0][i]] = ret[0][i]\r
140     Options.BusNames = buses\r
141     ret = []\r
142     for item in Options.BusBase:\r
143         if item not in ret:\r
144             ret.append(item)\r
145     return sorted(ret)\r
146 \r
147 def updateConts():\r
148     Options.ContFullList = []\r
149     tmp = Options.BusBaseList\r
150     tmp.sort()\r
151     for key in tmp:\r
152         Options.ContFullList.append(key)\r
153     tmp = Options.GenBaseList\r
154     tmp.sort()\r
155     for key in tmp:\r
156         Options.ContFullList.append(key)\r
157     tmp = Options.LinesBaseList\r
158     tmp.sort()\r
159     for key in tmp:\r
160         Options.ContFullList.append(key)\r
161     tmp = Options.TransfoBaseList\r
162     tmp.sort()\r
163     for key in tmp:\r
164         Options.ContFullList.append(key)\r
165     print Options.ContFullList\r
166     return Options.ContFullList\r
167 \r
168 def newContingency(MatList):\r
169     Options.CustomContingencies.append(MatList)\r
170 \r
171 def checkIfBorder(graph, key, depth, tmplist):\r
172     #print "in checkifBorder"\r
173     #print "depth ",depth\r
174     #print graph\r
175     if key in tmplist:\r
176         return True\r
177     if depth == 0:\r
178         return False\r
179     NonBorders = 0\r
180     for item in graph[key]:\r
181         if not checkIfBorder(graph, item, depth - 1, tmplist):\r
182             NonBorders += 1\r
183     if NonBorders < 2: # A generator is considered as isolated if it has less than two non-borders neighbours\r
184         if key not in tmplist:\r
185             tmplist.append(key)\r
186         return True\r
187     return False\r
188 \r
189 def getTrueLines(NetworkFile):\r
190     import psspy\r
191     import redirect\r
192 \r
193     psspy.psseinit(80000)\r
194     redirect.psse2py()\r
195     psspy.progress_output(6)\r
196 \r
197     psspy.case(NetworkFile)\r
198 \r
199     sid = -1\r
200     owner = 1\r
201     ties = 1\r
202     flag = 4 # 6 for two-winding transfos\r
203     entry = 1 #each branch once, not both directions\r
204     string = ['FROMNAME', 'TONAME', 'ID']\r
205     ierr, iarray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
206     string = ['FROMNUMBER', 'TONUMBER']\r
207     ierr, carray = psspy.abrnint(sid, owner, ties, flag, entry, string)\r
208 \r
209     lst = []\r
210     tmplist = []\r
211     try:\r
212         for i in range(len(carray[0])):\r
213             if carray[0][i] not in lst and carray[0][i] not in tmplist:\r
214                 tmplist.append(carray[0][i])\r
215             elif carray[0][i] not in lst and carray[0][i] in tmplist:\r
216                 tmplist.remove(carray[0][i])\r
217                 lst.append(carray[0][i])\r
218             if carray[1][i] not in lst and carray[1][i] not in tmplist:\r
219                 tmplist.append(carray[1][i])\r
220             elif carray[1][i] not in lst and carray[1][i] in tmplist:\r
221                 tmplist.remove(carray[1][i])\r
222                 lst.append(carray[1][i])\r
223     except:\r
224         pass\r
225 \r
226     # Create the graph\r
227     graph = {}\r
228     for i in range(len(carray[0])):\r
229         try:\r
230             if graph[carray[0][i]]:\r
231                 pass\r
232         except:\r
233             graph[carray[0][i]] = []\r
234         if carray[1][i] not in graph[carray[0][i]]:\r
235             graph[carray[0][i]].append(carray[1][i])\r
236         try:\r
237             if graph[carray[1][i]]:\r
238                 pass\r
239         except:\r
240             graph[carray[1][i]] = []\r
241         if carray[0][i] not in graph[carray[1][i]]:\r
242             graph[carray[1][i]].append(carray[0][i])\r
243 \r
244 \r
245     # Search it twice, to ensure everything is mapped\r
246     for key in sorted(graph):\r
247         #print key\r
248         checkIfBorder(graph, key, Options.RecursiveDepth, tmplist)\r
249         #print "out of Checkif 0"\r
250         #print ""\r
251     for key in reversed(sorted(graph)):\r
252         checkIfBorder(graph, key, Options.RecursiveDepth, tmplist)\r
253 \r
254     Options.IsolatedGenList = []\r
255     # Unfold it\r
256     for i in range(len(carray[0])):\r
257         if carray[0][i] in tmplist:\r
258             if iarray[0][i] not in Options.IsolatedGenList:\r
259                 Options.IsolatedGenList.append(iarray[0][i])\r
260         if carray[1][i] in tmplist:\r
261             if iarray[1][i] not in Options.IsolatedGenList:\r
262                 Options.IsolatedGenList.append(iarray[1][i])\r
263 \r
264     lines = []\r
265     outLines = []\r
266     for i in range(len(iarray[0])):\r
267         name = iarray[0][i] + '-' + iarray[1][i]\r
268         if '@' in iarray[2][i] or '*' in iarray[2][i]:\r
269             outLines.append(name)\r
270         elif iarray[0][i] not in Options.IsolatedGenList and iarray[1][i] not in Options.IsolatedGenList:\r
271             lines.append(name)\r
272         else:\r
273             outLines.append(name)\r
274     Options.TrueLines = lines\r
275 \r
276     return lines\r
277 \r
278 NoBreakersandSwitches = True\r
279 \r
280 def ExtractGeneratorLoadLineandTransfoDico(NetworkFile,PSSE_PATH):\r
281  \r
282     print "version en dur"\r
283     MachineDico={'M1':'M1','M2':'M2','M3':'M3','M4':'M4','B6_BUS13__1':'AZ','CSPRING__1':'DD','GT12B__1':'ER','BSTMB__1':'JJ'}\r
284     LoadDico={'C1':'C1','C2':'C2','C3':'C3','C4':'C4'}\r
285     LineDico={'L1':'L1','L2':'L2','L3':'L3','L4':'L4'}\r
286     TfoDico={'T1':'T1','T2':'T2','T3':'T3','T4':'T4'}\r
287     MDico={'MZ1':'MZ1','MZ2':'MZ2','MZ3':'MZ3','MZ4':'MZ4'}\r
288     BranchesDico={'B11':'B1','B2':'B2','B3':'B3','B4':'B4'}\r
289     BusNomial={'Bus1':'Bus1','Bus2':'Bus2','Bus3':'Bus3','Bus4':'Bus4'}\r
290 \r
291     return MachineDico, LoadDico, LineDico, TfoDico, MotorDico, BusDico, BranchesDico, BusNominal\r
292 \r
293 \r
294     import os\r
295     import sys\r
296     import numpy as np\r
297 \r
298     sys.path.append(PSSE_PATH)\r
299     os.environ['PATH'] +=  ';' + PSSE_PATH + ';'\r
300 \r
301     import psspy\r
302     import redirect\r
303 \r
304     ###initialization PSSE\r
305     psspy.psseinit(10000)\r
306     _i=psspy.getdefaultint()\r
307     _f=psspy.getdefaultreal()\r
308     _s=psspy.getdefaultchar()\r
309     redirect.psse2py()\r
310 \r
311     # Silent execution of PSSe\r
312     islct=6 # 6=no output; 1=standard\r
313     psspy.progress_output(islct)\r
314 \r
315     #open Network File\r
316     psspy.case(NetworkFile)\r
317 \r
318     # Extract Buses\r
319     sid = -1 # all buses\r
320     flag = 2\r
321     string = ['NUMBER']\r
322     ierr, iarray = psspy.abusint(sid, flag, string)\r
323 \r
324     string = ['NAME', 'EXNAME']\r
325     ierr, carray = psspy.abuschar(sid, flag, string)\r
326 \r
327     string = ['BASE']\r
328     ierr, ret = psspy.abusreal(sid, flag, string)\r
329 \r
330     BusDico = {}\r
331     BusNominal = {}\r
332     for i in range(len(iarray[0])):\r
333         BusNum = iarray[0][i]\r
334         BusDico[str(BusNum)] = carray[0][i].strip()\r
335         BusNominal[BusDico[str(BusNum)]] = ret[0][i]    \r
336 \r
337     #Extract Loads\r
338     sid = -1 #all buses\r
339     flag = 1 #all in service loads/generators (4 all loads/generators)\r
340 \r
341 \r
342     string = ['NUMBER']\r
343     ierr,iarray = psspy.aloadint(sid,flag,string)\r
344 \r
345     string = ['NAME','ID','EXNAME']\r
346     ierr,carray = psspy.aloadchar(sid,flag,string)\r
347 \r
348     string = ['mvaact']\r
349     ierr, xdata = psspy.aloadcplx(sid, flag, string)\r
350 \r
351     LoadDico = {}  # [Bus name, load ID, extended bus name, bus number]\r
352     for i in range(len(iarray[0])):\r
353         idname = "Lo" + carray[1][i].strip()\r
354 #        try: #id is an integer\r
355 #            idname = "Lo" + str(int(carray[1][i]))\r
356 #        except: #id is not an integer\r
357 #            idname = "Lo" + carray[1][i]\r
358         loadname = carray[0][i].strip()+ "__" + idname\r
359         loadname = loadname.replace(" ","_")\r
360         loadname = loadname.replace("-","_")\r
361         loadname = loadname.replace(".","_")\r
362         loadname = loadname.replace("&","and")\r
363         try:\r
364             int(loadname[0])\r
365             loadname="_" + loadname\r
366         except:\r
367             pass\r
368         LoadDico[loadname]= {}\r
369         LoadDico[loadname]['NAME'] = carray[0][i].strip()\r
370         LoadDico[loadname]['ID'] = carray[1][i]\r
371         LoadDico[loadname]['EXNAME'] =carray[2][i]\r
372         LoadDico[loadname]['NUMBER']=iarray[0][i]\r
373         LoadDico[loadname]['P']=np.real(xdata)[0][i]\r
374         LoadDico[loadname]['Q']=np.imag(xdata)[0][i]\r
375 \r
376     #Extract Generators\r
377     sid = -1 #all buses\r
378     flag = 1 #all in service loads/generators (4 all loads/generators)\r
379 \r
380     string = ['NUMBER']\r
381     ierr,iarray = psspy.amachint(sid,flag,string)\r
382 \r
383     string = ['NAME','ID','EXNAME']\r
384     ierr,carray = psspy.amachchar(sid,flag,string)\r
385 \r
386     rstrings = ['pgen','qgen','mbase','pmax','qmax','pmin','qmin']\r
387     ierr, rarray = psspy.amachreal(sid, flag, rstrings)\r
388 \r
389     MachineDico = {} # [Bus name, machine ID, extended bus name, bus number]\r
390     for i in range(len(iarray[0])):\r
391         idname = "Gr" + carray[1][i].strip()\r
392 ##        try:\r
393 ##            idname = "Gr" + str(int(carray[1][i]))\r
394 ##        except:\r
395 ##            idname = "Gr" + carray[1][i]\r
396         machinename = carray[0][i].strip()+ "__" + idname\r
397         machinename = machinename.replace(" ","_")\r
398         machinename = machinename.replace("-","_")\r
399         machinename = machinename.replace(".","_")\r
400         machinename = machinename.replace("&","and")\r
401         try:\r
402             int(machinename[0])\r
403             machinename="_" + machinename\r
404         except:\r
405             pass\r
406         MachineDico[machinename]={}\r
407         MachineDico[machinename]['NAME'] = carray[0][i].strip()\r
408         MachineDico[machinename]['ID'] = carray[1][i]\r
409         MachineDico[machinename]['EXNAME'] =carray[2][i]\r
410         MachineDico[machinename]['NUMBER']=iarray[0][i]\r
411         MachineDico[machinename]['P']=rarray[0][i]\r
412         MachineDico[machinename]['Q']=rarray[1][i]\r
413         MachineDico[machinename]['PMAX']=rarray[3][i]\r
414         MachineDico[machinename]['QMAX']=rarray[4][i]\r
415         MachineDico[machinename]['PMIN']=rarray[5][i]\r
416         MachineDico[machinename]['QMIN']=rarray[6][i]\r
417 \r
418     #Extract Motors\r
419     sid = -1 #all buses\r
420     flag = 1 #all in service loads/generators (4 all loads/generators)\r
421 \r
422     string = ['NUMBER','PSETCODE','BASECODE']\r
423     ierr,iarray = psspy.aindmacint(sid,flag,string)\r
424 \r
425     string = ['NAME','ID','EXNAME']\r
426     ierr,carray = psspy.aindmacchar(sid,flag,string)\r
427 \r
428     rstrings = ['psetpoint','mbase','p','q']\r
429     ierr, rarray = psspy.aindmacreal(sid, flag, rstrings)\r
430 \r
431 \r
432     MotorDico = {} # [Bus name, machine ID, extended bus name, bus number]\r
433     for i in range(len(iarray[0])):\r
434         idname = "Mo" + carray[1][i].strip()\r
435 ##        try:\r
436 ##            idname = "Gr" + str(int(carray[1][i]))\r
437 ##        except:\r
438 ##            idname = "Gr" + carray[1][i]\r
439         motorname = carray[0][i].strip()+ "__" + idname\r
440         motorname = motorname.replace(" ","_")\r
441         motorname = motorname.replace("-","_")\r
442         motorname = motorname.replace(".","_")\r
443         motorname = motorname.replace("&","and")\r
444         try:\r
445             int(motorname[0])\r
446             motorname="_" + motorname\r
447         except:\r
448             pass\r
449         MotorDico[motorname]={}\r
450         MotorDico[motorname]['NAME'] = carray[0][i].strip()\r
451         MotorDico[motorname]['ID'] = carray[1][i]\r
452         MotorDico[motorname]['EXNAME'] =carray[2][i]\r
453         MotorDico[motorname]['NUMBER']=iarray[0][i]\r
454         MotorDico[motorname]['PSETCODE']=iarray[1][i]\r
455         MotorDico[motorname]['BASECODE']=iarray[2][i]\r
456         MotorDico[motorname]['PSETPOINT']=rarray[0][i]\r
457         MotorDico[motorname]['MBASE']=rarray[1][i]\r
458         MotorDico[motorname]['P']=rarray[2][i]\r
459         MotorDico[motorname]['Q']=rarray[3][i]\r
460 \r
461 \r
462     #Extract Lignes\r
463     sid = -1\r
464     owner = 1\r
465     ties = 1\r
466     flag = 2 #6 for two-winding transfos\r
467     entry = 1 #each branch once, not both directions\r
468     string = ['FROMNUMBER','TONUMBER']\r
469     ierr,iarray = psspy.abrnint(sid,owner,ties,flag,entry,string)\r
470     string = ['FROMNAME','TONAME','FROMEXNAME','TOEXNAME','ID']\r
471     ierr,carray = psspy.abrnchar(sid,owner,ties,flag,entry,string)\r
472 \r
473     LineDico = {} #[linename, Bus name 1, Bus name 2, ID, extended bus name 1, extended bus name 2, bus number 1, bus number 2]\r
474     for i in range(len(iarray[0])):\r
475         idname = carray[4][i].strip()\r
476         #idname = carray[4][i]\r
477         if '@' in idname:\r
478             idname = idname.replace('@','Br')\r
479         elif '*' in idname:\r
480             idname = idname.replace('*','Sw')\r
481         else:\r
482             try:\r
483                 idname = 'Li' + str(int(idname))\r
484             except:\r
485                 idname = 'Li' + idname\r
486         linename =carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + idname\r
487         linename = linename.replace(" ","_")\r
488         linename = linename.replace("-","_")\r
489         linename = linename.replace(".","_")\r
490         linename = linename.replace("&","and")\r
491         try:\r
492             int(linename[0])\r
493             linename="_" + linename\r
494         except:\r
495             pass\r
496         if NoBreakersandSwitches:\r
497             if 'Br' not in idname and 'Sw' not in idname:\r
498                 LineDico[linename]={}\r
499                 LineDico[linename]['FROMNAME']=carray[0][i].strip()\r
500                 LineDico[linename]['TONAME']=carray[1][i].strip()\r
501                 LineDico[linename]['ID']=carray[4][i]\r
502                 LineDico[linename]['FROMEXNAME']=carray[2][i]\r
503                 LineDico[linename]['TOEXNAME']=carray[3][i]\r
504                 LineDico[linename]['FROMNUMBER']=iarray[0][i]\r
505                 LineDico[linename]['TONUMBER']=iarray[1][i]\r
506 \r
507     #Extract Branches\r
508     sid = -1\r
509     owner = 1\r
510     ties = 1\r
511     flag = 4 # lines & transfos\r
512     entry = 1 #each branch once, not both directions\r
513     string = ['FROMNUMBER','TONUMBER']\r
514     ierr, iarray = psspy.abrnint(sid, owner, ties, flag, entry, string)\r
515     string = ['FROMNAME','TONAME','FROMEXNAME','TOEXNAME','ID']\r
516     ierr, carray = psspy.abrnchar(sid, owner, ties, flag, entry, string)\r
517 \r
518     BranchesDico = {} #[linename, Bus name 1, Bus name 2, ID, extended bus name 1, extended bus name 2, bus number 1, bus number 2]\r
519     for i in range(len(iarray[0])):\r
520         idname = carray[4][i]\r
521         if '@' in idname:\r
522             idname = idname.replace('@','Br')\r
523         elif '*' in idname:\r
524             idname = idname.replace('*','Sw')\r
525         else:\r
526             idname = 'LI' + idname\r
527         linename = carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + idname\r
528         linename = linename.replace(" ","_")\r
529         linename = linename.replace("-","_")\r
530         linename = linename.replace(".","_")\r
531         linename = linename.replace("&","and")\r
532         try:\r
533             int(linename[0])\r
534             linename = "_" + linename\r
535         except:\r
536             pass\r
537         if linename[-1] == '_':\r
538             linename = linename[:-1]\r
539         BranchesDico[linename] = {}\r
540         BranchesDico[linename]['FROMNAME'] = carray[0][i].strip()\r
541         BranchesDico[linename]['TONAME'] = carray[1][i].strip()\r
542         BranchesDico[linename]['ID'] = carray[4][i]\r
543         BranchesDico[linename]['FROMEXNAME'] = carray[2][i]\r
544         BranchesDico[linename]['TOEXNAME'] = carray[3][i]\r
545         BranchesDico[linename]['FROMNUMBER'] = iarray[0][i]\r
546         BranchesDico[linename]['TONUMBER'] = iarray[1][i]\r
547 \r
548     \r
549     #Extract Transfos\r
550     sid = -1\r
551     owner = 1\r
552     ties = 1\r
553     flag = 6 #two-winding transfos\r
554     entry = 1 #each branch once, not both directions\r
555     string = ['FROMNUMBER','TONUMBER']\r
556     ierr,iarray = psspy.abrnint(sid,owner,ties,flag,entry,string)\r
557     string = ['FROMNAME','TONAME','FROMEXNAME','TOEXNAME','ID']\r
558     ierr,carray = psspy.abrnchar(sid,owner,ties,flag,entry,string)\r
559 \r
560     TfoDico = {} #[linename, Bus name 1, Bus name 2, machine ID, extended bus name 1, extended bus name 2, bus number 1, bus number 2]\r
561     for i in range(len(iarray[0])):\r
562         idname = 'Tr' + carray[4][i].strip()\r
563 ##        try:\r
564 ##            idname = 'Tr' + str(int(carray[4][i]))\r
565 ##        except:\r
566 ##            idname = 'Tr' + carray[4][i]\r
567         tfoname = carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + idname\r
568         tfoname = tfoname.replace(" ","_")\r
569         tfoname = tfoname.replace("-","_")\r
570         tfoname = tfoname.replace(".","_")\r
571         tfoname = tfoname.replace("&","and")\r
572         try:\r
573             int(tfoname[0])\r
574             tfoname="_" + tfoname\r
575         except:\r
576             pass\r
577         TfoDico[tfoname]={}\r
578         TfoDico[tfoname]['FROMNAME']=carray[0][i].strip()\r
579         TfoDico[tfoname]['TONAME']=carray[1][i].strip()\r
580         TfoDico[tfoname]['ID']=carray[4][i]\r
581         TfoDico[tfoname]['FROMEXNAME']=carray[2][i]\r
582         TfoDico[tfoname]['TOEXNAME']=carray[3][i]\r
583         TfoDico[tfoname]['FROMNUMBER']=iarray[0][i]\r
584         TfoDico[tfoname]['TONUMBER']=iarray[1][i]\r
585         TfoDico[tfoname]['#WIND']=2\r
586 \r
587     #Extract 3 winding Transfos\r
588     sid = -1 #assume a subsystem containing all buses in working case\r
589     owner_3flow = 1 #1 = use bus ownership 2 = use tfo ownership\r
590     ties_3flow = 3 #ignored bc sid is negative. 3 = interior subsystem and subsystem tie 3 winding transformers \r
591     flag=3 #all 3 winding transfo windings\r
592     string = ['wind1number','wind2number','wind3number']\r
593     ierr,iarray = psspy.awndint(sid,owner,ties,flag,entry,string)\r
594     string = ['wind1name','wind2name','wind3name','wind1exname','wind2exname','wind3exname','id']\r
595     ierr,carray = psspy.awndchar(sid,owner,ties,flag,entry,string)\r
596 \r
597     #[Bus name 1, Bus name 2, Bus name 3, machine ID, extended bus name 1, extended bus name 2, extended bus name 3, bus number 1, bus number 2, bus number 3]\r
598     for i in range(len(iarray[0])):\r
599         idname = 'Tr' + carray[6][i].strip()\r
600 ##        try:\r
601 ##            idname = 'Tr' + str(int(carray[4][i]))\r
602 ##        except:\r
603 ##            idname = 'Tr' + carray[4][i]\r
604         tfoname = carray[0][i].strip() + "__" + carray[1][i].strip() + "__" + carray[2][i].strip() + "__" + idname\r
605         tfoname = tfoname.replace(" ","_")\r
606         tfoname = tfoname.replace("-","_")\r
607         tfoname = tfoname.replace(".","_")\r
608         tfoname = tfoname.replace("&","and")\r
609         try:\r
610             int(tfoname[0])\r
611             tfoname="_" + tfoname\r
612         except:\r
613             pass\r
614         TfoDico[tfoname]={}\r
615         TfoDico[tfoname]['FROMNAME']=carray[0][i].strip()\r
616         TfoDico[tfoname]['TONAME']=carray[1][i].strip()\r
617         TfoDico[tfoname]['3NAME']=carray[2][i].strip()\r
618         TfoDico[tfoname]['ID']=carray[6][i]\r
619         TfoDico[tfoname]['FROMEXNAME']=carray[3][i]\r
620         TfoDico[tfoname]['TOEXNAME']=carray[4][i]\r
621         TfoDico[tfoname]['3EXNAME']=carray[5][i]\r
622         TfoDico[tfoname]['FROMNUMBER']=iarray[0][i]\r
623         TfoDico[tfoname]['TONUMBER']=iarray[1][i]\r
624         TfoDico[tfoname]['3NUMBER']=iarray[2][i]\r
625         TfoDico[tfoname]['#WIND']=3\r
626 \r
627     #print MachineDico, LoadDico, LineDico, TfoDico, MotorDico, BusDico, BranchesDico, BusNominal\r
628     return MachineDico, LoadDico, LineDico, TfoDico, MotorDico, BusDico, BranchesDico, BusNominal\r
629 \r
630 \r
631 \r