action_partial_lu.hh
Go to the documentation of this file.
00001 //=====================================================
00002 // File   :  action_lu_decomp.hh
00003 // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
00004 //=====================================================
00005 //
00006 // This program is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU General Public License
00008 // as published by the Free Software Foundation; either version 2
00009 // of the License, or (at your option) any later version.
00010 //
00011 // This program is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 // GNU General Public License for more details.
00015 // You should have received a copy of the GNU General Public License
00016 // along with this program; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018 //
00019 #ifndef ACTION_PARTIAL_LU
00020 #define ACTION_PARTIAL_LU
00021 #include "utilities.h"
00022 #include "STL_interface.hh"
00023 #include <string>
00024 #include "init/init_function.hh"
00025 #include "init/init_vector.hh"
00026 #include "init/init_matrix.hh"
00027 
00028 using namespace std;
00029 
00030 template<class Interface>
00031 class Action_partial_lu {
00032 
00033 public :
00034 
00035   // Ctor
00036 
00037   Action_partial_lu( int size ):_size(size)
00038   {
00039     MESSAGE("Action_partial_lu Ctor");
00040 
00041     // STL vector initialization
00042     init_matrix<pseudo_random>(X_stl,_size);
00043     init_matrix<null_function>(C_stl,_size);
00044 
00045     // make sure X is invertible
00046     for (int i=0; i<_size; ++i)
00047       X_stl[i][i] = X_stl[i][i] * 1e2 + 1;
00048 
00049     // generic matrix and vector initialization
00050     Interface::matrix_from_stl(X_ref,X_stl);
00051     Interface::matrix_from_stl(X,X_stl);
00052     Interface::matrix_from_stl(C,C_stl);
00053 
00054     _cost = 2.0*size*size*size/3.0 + size*size;
00055   }
00056 
00057   // invalidate copy ctor
00058 
00059   Action_partial_lu( const  Action_partial_lu & )
00060   {
00061     INFOS("illegal call to Action_partial_lu Copy Ctor");
00062     exit(1);
00063   }
00064 
00065   // Dtor
00066 
00067   ~Action_partial_lu( void ){
00068 
00069     MESSAGE("Action_partial_lu Dtor");
00070 
00071     // deallocation
00072     Interface::free_matrix(X_ref,_size);
00073     Interface::free_matrix(X,_size);
00074     Interface::free_matrix(C,_size);
00075   }
00076 
00077   // action name
00078 
00079   static inline std::string name( void )
00080   {
00081     return "partial_lu_decomp_"+Interface::name();
00082   }
00083 
00084   double nb_op_base( void ){
00085     return _cost;
00086   }
00087 
00088   inline void initialize( void ){
00089     Interface::copy_matrix(X_ref,X,_size);
00090   }
00091 
00092   inline void calculate( void ) {
00093       Interface::partial_lu_decomp(X,C,_size);
00094   }
00095 
00096   void check_result( void ){
00097     // calculation check
00098 //     Interface::matrix_to_stl(C,resu_stl);
00099 
00100 //     STL_interface<typename Interface::real_type>::lu_decomp(X_stl,C_stl,_size);
00101 //
00102 //     typename Interface::real_type error=
00103 //       STL_interface<typename Interface::real_type>::norm_diff(C_stl,resu_stl);
00104 //
00105 //     if (error>1.e-6){
00106 //       INFOS("WRONG CALCULATION...residual=" << error);
00107 //       exit(0);
00108 //     }
00109 
00110   }
00111 
00112 private :
00113 
00114   typename Interface::stl_matrix X_stl;
00115   typename Interface::stl_matrix C_stl;
00116 
00117   typename Interface::gene_matrix X_ref;
00118   typename Interface::gene_matrix X;
00119   typename Interface::gene_matrix C;
00120 
00121   int _size;
00122   double _cost;
00123 };
00124 
00125 #endif


libicr
Author(s): Robert Krug
autogenerated on Mon Jan 6 2014 11:32:28