00001 #ifndef _AdmittanceNetwork_h_
00002 #define _AdmittanceNetwork_h_
00003 #include "local_typedefs.h"
00004
00010 class AdmittanceNetworkInterface
00011 {
00012 public:
00013
00014
00015 virtual void add_line(int i, int j, Complex y, double turns, double phase_shift, int side) = 0;
00016
00017 virtual void remove_line(int i, int j, Complex y, double turns, double phase_shift, int side) = 0;
00018
00019 virtual void add_line(int i, int j, Complex y) = 0;
00020
00021 virtual void remove_line(int i, int j, Complex y) = 0;
00022
00023 virtual void add_self(int i, Complex y) = 0;
00024
00025 virtual void remove_self(int i, Complex y) = 0;
00026
00027 virtual void solve_for_voltage(const Complex* I, Complex* V) = 0;
00028
00029 virtual void solve_for_current(const Complex* V, Complex* I) = 0;
00030
00031 virtual Complex get(int i, int j) const = 0;
00032
00033 virtual ~AdmittanceNetworkInterface(){}
00034 };
00035
00041 class AdmittanceNetwork:
00042 public AdmittanceNetworkInterface
00043 {
00044 public:
00045
00046 AdmittanceNetwork(int N);
00047
00048
00049 void add_line(int i, int j, Complex y, double turns, double phase_shift, int side) {
00050 impl->add_line(i,j,y,turns,phase_shift,side);
00051 }
00052
00053 void remove_line(int i, int j, Complex y, double turns, double phase_shift, int side) {
00054 impl->remove_line(i,j,y,turns,phase_shift,side);
00055 }
00056
00057 void add_line(int i, int j, Complex y) { impl->add_line(i,j,y); }
00058
00059 void remove_line(int i, int j, Complex y) { impl->remove_line(i,j,y); }
00060
00061 void add_self(int i, Complex y) { impl->add_self(i,y); }
00062
00063 void remove_self(int i, Complex y) { impl->remove_self(i,y); }
00064
00065 void solve_for_voltage(const Complex* I, Complex* V) {
00066 impl->solve_for_voltage(I,V);
00067 }
00068
00069 void solve_for_current(const Complex* V, Complex* I) {
00070 impl->solve_for_current(V,I);
00071 }
00072
00073 Complex get(int i, int j) const {
00074 return impl->get(i,j);
00075 }
00076
00077 ~AdmittanceNetwork() { delete impl; }
00078 private:
00079 AdmittanceNetworkInterface *impl;
00080 };
00081
00082 #endif
00083