synaps/msolve/Newmac.h

Go to the documentation of this file.
00001 /********************************************************************
00002  *   This file is part of the source code of the SYNAPS kernel.
00003  *   Author(s): Ph. Tre'buchet, GALAAD, INRIA
00004  *   $Id: Newmac.h,v 1.2 2005/08/29 14:30:17 mourrain Exp $
00005  ********************************************************************/
00006 #ifndef synaps_solve_Newmac_H
00007 #define synaps_solve_Newmac_H
00008 //--------------------------------------------------------------------
00010 //--------------------------------------------------------------------
00011 #include <sstream>
00012 #include <synaps/init.h>
00013 #include <complex>
00014 #include <synaps/linalg/MatrDse.h>
00015 #include <synaps/linalg/sparse.h>
00016 #include <synaps/msolve/newmac/mynumexp.h>
00017 #include <synaps/msolve/newmac/solve.h>
00018 
00019 //--------------------------------------------------------------------
00020 __BEGIN_NAMESPACE_SYNAPS
00021 //--------------------------------------------------------------------
00026 template<typename T, typename OUT=Seq<VectDse<std::complex<long double> > > >
00027 struct Newmac 
00028 {
00029   typedef OUT sol_t;
00030 };
00031 
00032 //--------------------------------------------------------------------
00039 template<typename T, typename CF_T, typename OUT>
00040 OUT solve(const T &t, const Newmac<CF_T,OUT> & N)
00041 {
00042   //typedef Monom<coeff , numexp<'x',4,long long int > > mon;
00043   //typedef mon Mon;
00044   typedef typename T::value_type Poly;
00045   typedef typename Poly::monom_t mon;
00046   typedef mon Mon;
00047   serveur<mon> serv;
00048   std::list<Poly> dummy;
00049   std::list<mon> stockmon;
00050   MatrDse<std::complex< long double> > tmp(0,0);
00051   std::list<sparse::rep2d<CF_T> > lmat;
00052   std::list<dumpstruct<pol<mon,CF_T> > > dump;
00053   sparse::rep2d<CF_T> m;
00054   Base<predicat<mon> > b;
00055   //cout<<"avant algo"<<endl;
00056   algo<T,std::list<pol<mon,CF_T> >,std::list<dumpstruct<pol<mon,CF_T> > >
00057     ,Base<predicat<mon> >, sparse::rep2d >(t,dump,b,serv);
00058 #ifdef TRACE_PROG
00059   std::cout<<"apres algo "<<dump.size()<<std::endl;
00060 #endif
00061   if (dump.size())
00062     {
00063       computestockmon(stockmon,b,dump);
00064       for(int i=0;i<b.nbvar();i++)
00065         {
00066           matmul(m,i,dump,b,stockmon,serv);
00067           lmat.push_back(m);
00068         }
00069       realsolve2(lmat,b,tmp);
00070   }
00071   forget(b,dump,0,dummy);
00072   OUT res;
00073   using let::assign;  assign(res,tmp);
00074   return res;
00075 }
00076 //--------------------------------------------------------------------
00077 __END_NAMESPACE_SYNAPS
00078 //--------------------------------------------------------------------
00079 #endif // synaps_solve_Newmac_H
00080 

SYNAPS DOCUMENTATION
logo