Come operano gli algoritmi implementati.

E' importante per lo studente, che deve confrontare i suoi numeri con quelli sfornati dal programma, sapere precisamente come sono effettivamente implementati gli algoritmi in esso. Vedi anche le caratteristiche del programma e le sue istruzioni d' uso. (torna all'indice).

I valori iniziali
Prima cosa da sapere è che i valori iniziali dei moduli incogniti delle tensioni ( E ) vengono automaticamente settati a 1 mentre i valori iniziali delle fasi incognite delle tensioni ( d ) vengono settati a 0,  come è ragionevole fare.


Algoritmi
Gli algoritmi implementati sono:




 
 
 
 
 




Gauss-Seidel applicato
(vedi le generalità e i dettagli implementativiTorna Su

Preciso,a scanso di equivoci, che si tratta del Gauss-Seidel non accelerato, ossia senza il forzamento dell' incremento col fattore di accelerazione.
Ad ogni iterazione k l'algoritmo passa in rassegna tutti i nodi prendendo in considerazione un nodo per volta, secondo la sequenza decisa dall' utente mediante la numerazione arbitraria.
Ad ogni nodo è affiancata la sua equazione non lineare (in forma canonica di Glimm-Stagg) che lega la tensione nodale aggiornata con il profilo di tensioni nodali note e la potenza iniettata nel nodo:


Se sta calcolando la tensione nodale all'iterazione k del nodo p, l' algoritmo usa nella formula di Glimm-Stagg le tensioni nodali aggiornate all' iterazione per i nodi da 1 a p-1 (è questo che differenzia Gauss da Gauss-Seidel), mentre usa le tensioni dell'iterazione k-1 per i rimanenti nodi.
Prima di calcolare la formula di Glimm-Stagg l'algoritmo si premura di stimare l'eventuale potenza incognita con una delle formule:
 

Anche qui l'apice indica a quale iterazione è aggiornato il valore.
Una volta calcolata la tensione nodale si procede a forzare il modulo (questo avviene per i nodi PE e QE) o la fase (nodi Pd e Qd)  ai valori fissati e noti; inutile dire che per i nodi PQ non si procede ad alcuna forzatura (nè bisogna stimare una potenza, visto che sono tutte e due note), altrettanto inutile dire che per il nodo di saldo (Ed)  non vi è alcun calcolo ma solo una forzatura della tensione ai valori fissati e noti.




 

Newton-Raphson applicato
(vedi le generalità e i dettagli implementativiTorna Su

Si osservi anzitutto che nodi di tipo PQ forniscono due equazioni reali ( una scritta per P e una per Q ), e due incognite reali ( la E e la d ); il nodo di saldo non fornisce nè equazioni nè incognite; i restanti nodi forniscono una equazione reale relativa all'iniezione nota, e una incognita reale che può essere il modulo o la fase incognita della relativa tensione nodale.
L' insieme delle equazioni che si possono scrivere sulla rete costituisce il sistema non lineare da risolvere:

L'ordine del sistema è pari al numero di potenze attive e reattive note; esso deve uguagliare il numero di moduli e fasi incogniti delle tensioni nodali affinchè esista un'unica soluzione (quella che ha senso fisico di cui siamo interessati).
Ad ogni iterazione, a partire dal profilo di tensioni nodali precedente, viene calcolato il vettore dei residui (che ovviamente ha dimensione pari all'ordine del sistema) e la matrice Jacobiana (che è quadrata e avente ordine pari a quello del sistema).
In questi calcoli (essendo matriciali) è fondamentale ordinare opportunamente gli elementi che costituiscono il vettore residui e la matrice Jacobiana).
I residui sono calcolati così:
Le formule con le quali vengono calcolati gli elementi dello Jacobiano sono:

Lo Jacobiano viene poi invertito (vedi le note sotto) e moltiplicato con il vettore residui; il risultato è il vettore degli incrementi, che viene sommato al precedente profilo di tensioni per ottenere il nuovo profilo; il ciclo può così ricominciare.
Descrivo sommariamante queste operazioni con le seguenti espressioni matriciali, di valore puramente simbolico:

Calcolo del vettore incrementi:                                  Aggiornamento incognite:

(l' apice indica l'iterazione a cui sono aggiornati i valori del vettore/matrice).

Alcune parole meriterebbero di essere spese riguardo la applicabilità di questo algoritmo: purtroppo le mie osservazioni si limitano a rilevare la produzione di risultati errati per reti non elaborabili con Stott-Alsac (reti in cui il numero di potenze attive note non uguaglia il numero delle fasi incognite e di conseguenza il numero delle pot. reattive note non è uguale al numero dei moduli incogniti).



sull' inversione dello Jacobiano
Ho voluto dedicare una nota a parte a questa operazione, che rende l'algoritmo di Newton e i suoi derivati un pò delicato e insofferente verso alcuni ingressi, e quindi ne influenza l'applicabilità.
Una prima nota è sull'utilizzo di metodi di decomposizione (LU,ecc..) : può essere necessario permutare le linee prima di applicarli per non incorrere in errori dovuti al Pivot (per curiosità vedi l'implementazione dell'inversione).
Una seconda considerazione riguarda l'occorrenza di avere uno Jacobiano singolare: non ho approfondito gli eventuali motivi (in ambito del loadflow) di questa occorrenza, se non l'indeterminazione dovuta ad un loadflow a perdite imposte.

ordinamento interno
L'algoritmo implementato ordina le equazioni secondo la sequenza dei nodi, dando però la precedenza alle potenze attive rispetto alle reattive: in questo modo vengono numerate prima le equazioni attive e poi quelle reattive; il vettore dei residui risulta quindi ordinato con il criterio appena esposto.
Le incognite sono anch'esse ordinate secondo la sequenza dei nodi ma dando la precedenza ai moduli delle tensioni rispetto alle fasi.
La matrice dello Jacobiano risulta così idealmente divisa in quattro sottoblocchi:

così come siamo abituati a pensarla.        (torna sopra o torna ai dettagli implementativi)




 

Stott-Alsac implementato
(vedi le generalità e i dettagli implementativi)   Torna Su

Dopo aver verificato l'applicabilità (se ne parla nelle pagine puntate dai link sopra), la prima operazione da svolgere è la costruzione delle matrici costanti Ba e Br. Esse non sono altro che sottomatrici opportunamente estratte dalla matrice delle suscettanze nodali (ottenuta considerando solo le parti immaginarie degli elementi della matrice delle ammettenze nodali) ed eventualmente ordinate in maniera differente. Una volta deciso l'ordinamento delle equazioni e delle incognite, il criterio di costruzione di queste due matrici è suggerito dalle formule dell'algoritmo di Stott, consultabili qui.
L'ordinamento scelto è lo stesso già adottato per Newton, ossia vengono numerate prima le equazioni nella potenza attiva ordinandole secondo la numerazione dei nodi, poi le equazioni nella potenza reattiva (sempre ordinandole secondo la numerazione dei nodi); per quanto riguarda le incognite vengono numerati prima i moduli (ordinandoli secondo la numerazione dei nodi) e poi le fasi (sempre ordinandole secondo la numerazione dei nodi).

Costruite le due matrici costanti Ba e Br vengono calcolate le loro inverse, vere protagoniste del calcolo ciclico: esse rappresentano essenzialmente il legame tra residui e incrementi.
Poichè il calcolo degli incrementi dei moduli delle tensioni nodali (che si effettua a partire dai residui reattivi) è disaccoppiato dal calcolo degli incrementi delle fasi (dipendenti solo dai residui della potenza attiva), ogni iterazione è divisa in due semi-iterazioni, in modo di sfruttare una parte di incognite aggiornate migliorando la velocità di convergenza del calcolo.
Viene data di seguito una descrizione dell'algoritmo.

Prima semi-iterazione: vengono calcolati, usando il profilo di tensioni nodali precedente, i residui delle equazioni nella potenza reattiva (in breve i "residui reattivi"), analogamente a quanto si faceva nell'algoritmo di Newton (qui le formule).Il vettore ottenuto ha dimensione pari al numero di equazioni nella potenza reattiva fornite dalla rete, ossia pari al numero di iniezioni di potenza reattiva note: si osservi che tale numero deve coincidere con il numero di moduli di tensione incogniti, pena la non applicabilità dell'algoritmo. La stessa considerazione vale per il numero di equazioni nella potenza attiva e il numero di fasi incognite.
Ogni residuo (associato ad un'iniezione di potenza reattiva) viene diviso per il modulo della tensione nodale relativa.
Gli incrementi dei moduli delle tensioni nodali si ottengono moltiplicando la matrice inversa di Br (calcolata una volta per tutte all'inizio) col vettore appena dei residui reattivi così modificato.
Anche se non esplicitamente dichiarato, l'ordinamento dei vettori e delle matrici riveste ovviamente una importanza fondamentale per la consistenza di queste operazioni.
La prima semi-iterazione termina con l'aggiornamento dei moduli delle tensioni, sommando ai valori precedenti gli incrementi appena calcolati; questi valori freschi saranno usati nella seconda parte nel calcolo degli incrementi delle fasi.

Seconda semi-iterazione: vengono calcolati i residui attivi usando i moduli di tensione appena prodotti e le fasi dell'iterazione precedente. I residui vengono, analogamente a quelli reattivi, divisi per il modulo della tensione nodale relativa (si usa naturalmente il valore fresco prodotto nella prima semi-iterazione). Il vettore ottenuto viene moltiplicato per la matrice inversa di Ba; Il vettore degli incrementi delle fasi viene ottenuto dividendo gli elementi del risultato della moltiplicazione per il modulo della tensione nodale relativa (ossia del nodo che fornisce quella fase incognita).

A questo punto anche le fasi possono essere aggiornate e può essere iniziato un nuovo ciclo.


Torna all' indice      Torna  Su