00001 #ifndef _AdmittanceNetwork_lapack_h_
00002 #define _AdmittanceNetwork_lapack_h_
00003 #include "AdmittanceNetwork.h"
00004 #include "events.h"
00005
00006
00007
00008
00009
00016 class PAR1Data;
00017 class AdmittanceNetwork_PAR1:
00018 public AdmittanceNetworkInterface
00019 {
00020 public:
00021
00022 AdmittanceNetwork_PAR1(int N);
00023
00024 void add_line(int i, int j, Complex y, double turns, double phase_shift, int side);
00025
00026 void add_line(int i, int j, Complex y);
00027
00028 void remove_line(int i, int j, Complex y) { add_line(i,j,-y); }
00029
00030 void remove_line(int i, int j, Complex y, double turns, double phase_shift, int side);
00031
00032 void add_self(int i, Complex y);
00033
00034 void remove_self(int i, Complex y) { add_self(i,-y); }
00035
00036 void solve_for_voltage(const Complex* I, Complex* V);
00037
00038 void solve_for_current(const Complex* V, Complex* I);
00039
00040 Complex get(int i, int j) const;
00041
00042 virtual ~AdmittanceNetwork_PAR1();
00043 private:
00044
00045 class Data;
00046 Data *data;
00047 bool dirty;
00048 void set(int i, int j, Complex y);
00049 public:
00050 static void main_begin( int *pac, char ***pav );
00051 static void main_end( int rank );
00052 private:
00053 static void master_order( PAR1Data *, int );
00054 static void print_timing( PAR1Data * );
00055
00056 void master_init( PAR1Data * );
00057 void master_permute( PAR1Data * );
00058 void master_factor( PAR1Data * );
00059 void master_solve( PAR1Data * );
00060 void master_fini( PAR1Data * );
00061
00062 void slave_init( PAR1Data * );
00063 void slave_factor( PAR1Data * );
00064 void slave_solve( PAR1Data * );
00065 void slave_fini( PAR1Data * );
00066
00067 static void par1_init( PAR1Data * );
00068 static void par1_factor( PAR1Data * );
00069 static void par1_solve( PAR1Data * );
00070 static void par1_fini( PAR1Data * );
00071 };
00072
00073 #endif