LocalOpt
 All Classes Files Functions Variables Friends
Support.h
1 #ifndef SUPPORT_H
3 #define SUPPORT_H
4 #include <adolc/adolc.h>
5 #include "ObjectiveFunction.h"
6 #include "ConjugateGradients.h"
7 #include "SimpleVector.hpp"
8 #include "tminres.hpp"
9 //#include "RVector.h"
10 class Support
11 {
12 public:
13  Support();
14  virtual ~Support();
16  int solvesystem(const int max_iterations, const Graph * Mat, double *solution, const double * rhs,const double precision);
18  int solveCG (const int max_iterations, const Graph * Mat, double *solution, const double * rhs,const double precision);
20  int solveCGNR(const int max_iterations, const Graph * Mat, double *solution, const double * rhs,const double precision);
22  int solveMinRes( const int max_iterations, const Graph * Mat, double *solution, const double * rhs, const double precision, const bool show);
23  void sum(double *lhs, const double * rhs, int dimension);
24  void subtract(double *lhs, const double * rhs, int dimension);
25  double norm(const double * x, int dimension);
26  void copyvec(double *lhs,const double * rhs, int dimension);
27  void mult_scalar(double * x, int dimension, const double scal);
28  double inner_prod(const double * x, const double *y, int dimension);
29  // ObjectiveFunction * mount_objectivefunction_array();
30  template <class ArrayType>void print_array(ArrayType x, int length)
31  {
32  int i;
33  for(i =0; i < length; i++)
34  cout<<x[i]<<' ';
35  cout<<endl;
36  }
37 protected:
38 private:
39 };
40 
41 
42 //**** For interfacing with tminres.hpp ************//
44 {
45 public:
47  virtual void Apply(const SimpleVector & X, SimpleVector & Y) const = 0;
48 };
49 
51 /*
52  * @brief A simple diagonal linear operator.
53  * The first half of the diagonal entries are positive, the second half are negative
54  */
55 class Operator
56 {
57 public:
58 
60  /*
61  * @param size_ problem size
62  */
63  Operator(int size_, const Graph * _Mat) :
64  size(size_), Mat(_Mat)
65  {
66 
67  }
68 
69  ~Operator()
70  {
71  }
72 
74  void Apply(const SimpleVector & vec_in, SimpleVector & vec_out) const
75  {
76 //Needs to work for MinRes!
77 
78  // for(int i(0); i < size; ++i)
79  // vec_out[i] = (Mat->B[i])* vec_in;
80  Mat->vector_mult(vec_in,vec_out);
81  }
82 
83 
84 private:
85  int size;
86  const Graph * Mat;
87 };
88 
89  //double Block::operator*<RVector>(const RVector & xvec)
90  //double Graph::operator*<RVector>(const RVector & xvec)
91 #endif // SUPPORT_H
Supports for linear system solve and linear algebra.
Definition: Support.h:10
Definition: Support.h:43
Operator(int size_, const Graph *_Mat)
Constructor.
Definition: Support.h:63
virtual void Apply(const SimpleVector &X, SimpleVector &Y) const =0
Y = M.
int solveCG(const int max_iterations, const Graph *Mat, double *solution, const double *rhs, const double precision)
The Conjugate Gradient method. Mat is assumed to be symmetric-positive-definite.
Definition: Support.cpp:49
void Apply(const SimpleVector &vec_in, SimpleVector &vec_out) const
Y = A*X;.
Definition: Support.h:74
int solvesystem(const int max_iterations, const Graph *Mat, double *solution, const double *rhs, const double precision)
The method used to solve systems.
Definition: Support.cpp:8
int solveCGNR(const int max_iterations, const Graph *Mat, double *solution, const double *rhs, const double precision)
The Least-Squares Conjugate Gradient method. Mat is assumed to be symmetric and non-singular.
Definition: Support.cpp:13
Definition: Support.h:55
int solveMinRes(const int max_iterations, const Graph *Mat, double *solution, const double *rhs, const double precision, const bool show)
The Minimal Residual method. Mat is assumed to be symmetric and non-singular.
Definition: Support.cpp:80
Implementation of a dense serial vector according to Vector_traits.
Definition: SimpleVector.hpp:27