MPQC  2.3.1
abstract.h
1 //
2 // abstract.h
3 //
4 // Copyright (C) 1996 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifndef _math_scmat_abstract_h
29 #define _math_scmat_abstract_h
30 
31 #ifdef __GNUC__
32 #pragma interface
33 #endif
34 
35 #include <util/group/message.h>
36 
37 #include <util/state/state.h>
38 #include <math/scmat/dim.h>
39 #include <math/scmat/block.h>
40 #include <iostream>
41 
42 namespace sc {
43 
44 class SCMatrix;
45 class SymmSCMatrix;
46 class DiagSCMatrix;
47 class SCVector;
48 
49 class SCElementOp;
50 class SCElementOp2;
51 class SCElementOp3;
52 
53 class RefSCDimension;
54 
58 class SCMatrixKit: public DescribedClass {
59  protected:
60  Ref<MessageGrp> grp_;
61 
62  public:
63  SCMatrixKit();
64  SCMatrixKit(const Ref<KeyVal>&);
65  ~SCMatrixKit();
66 
67  // these members are default in local.cc
71  static void set_default_matrixkit(const Ref<SCMatrixKit> &);
72 
73  Ref<MessageGrp> messagegrp() const;
74 
76  virtual SCMatrix* matrix(const RefSCDimension&,const RefSCDimension&) = 0;
77  virtual SymmSCMatrix* symmmatrix(const RefSCDimension&) = 0;
78  virtual DiagSCMatrix* diagmatrix(const RefSCDimension&) = 0;
79  virtual SCVector* vector(const RefSCDimension&) = 0;
80 
84  const RefSCDimension&,
85  const RefSCDimension&);
86  SymmSCMatrix* restore_symmmatrix(StateIn&,
87  const RefSCDimension&);
88  DiagSCMatrix* restore_diagmatrix(StateIn&,
89  const RefSCDimension&);
90  SCVector* restore_vector(StateIn&,
91  const RefSCDimension&);
92 };
93 
94 
97 class SCVector: public DescribedClass {
98  protected:
100  Ref<SCMatrixKit> kit_;
101  public:
103 
105  virtual void save(StateOut&);
106  virtual void restore(StateIn&);
107 
109  Ref<SCMatrixKit> kit() const { return kit_; }
110 
111  // concrete functions (some can be overridden)
113  virtual SCVector* copy();
115  virtual SCVector* clone();
116 
117  virtual ~SCVector();
119  int n() const { return d->n(); }
121  virtual double maxabs() const;
123  virtual void normalize();
125  virtual void randomize();
127  void assign(double val) { assign_val(val); }
129  void assign(const double* v) { assign_p(v); }
132  void assign(SCVector* v) { assign_v(v); }
134  virtual void assign_val(double val);
135  virtual void assign_p(const double* v);
136  virtual void assign_v(SCVector *v);
138  virtual void convert(double* v) const;
141  virtual void convert(SCVector*);
142  virtual void convert_accumulate(SCVector*);
144  virtual void scale(double val);
145 
147  RefSCDimension dim() const { return d; }
149  virtual void set_element(int i,double val) = 0;
151  virtual void accumulate_element(int,double) = 0;
153  virtual double get_element(int i) const = 0;
156  { accumulate_product_sv(m,v); }
158  { accumulate_product_rv(m,v); }
159  virtual void accumulate_product_sv(SymmSCMatrix* m, SCVector* v);
160  virtual void accumulate_product_rv(SCMatrix* m, SCVector* v) = 0;
162  virtual void accumulate(const SCVector*v) = 0;
164  virtual void accumulate(const SCMatrix*m) = 0;
166  virtual double scalar_product(SCVector*) = 0;
168  virtual void element_op(const Ref<SCElementOp>&) = 0;
169  virtual void element_op(const Ref<SCElementOp2>&,
170  SCVector*) = 0;
171  virtual void element_op(const Ref<SCElementOp3>&,
172  SCVector*,SCVector*) = 0;
174  void print(std::ostream&o=ExEnv::out0()) const;
175  void print(const char* title=0,std::ostream&out=ExEnv::out0(),int=10) const;
176  virtual void vprint(const char*title=0,std::ostream&out=ExEnv::out0(),
177  int=10) const = 0;
178 
181 
187  SCMatrixSubblockIter::Access) = 0;
189  virtual Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access) = 0;
190 };
191 
195 class SCMatrix: public DescribedClass {
196  protected:
197  RefSCDimension d1,d2;
198  Ref<SCMatrixKit> kit_;
199  public:
200  // used to control transformations
201  enum Transform { NormalTransform = 0, TransposeTransform = 1 };
202 
203  // concrete functions (some can be overridden)
205  virtual ~SCMatrix();
206 
208  virtual void save(StateOut&);
209  virtual void restore(StateIn&);
210 
212  Ref<SCMatrixKit> kit() const { return kit_; }
213 
215  int nrow() const { return d1->n(); }
217  int ncol() const { return d2->n(); }
219  virtual double maxabs() const;
221  virtual void randomize();
223  void assign(double val) { assign_val(val); }
225  void assign(const double* m) { assign_p(m); }
227  void assign(const double** m) { assign_pp(m); }
229  void assign(SCMatrix* m) { assign_r(m); }
231  virtual void assign_val(double val);
232  virtual void assign_p(const double* m);
233  virtual void assign_pp(const double** m);
234  virtual void assign_r(SCMatrix* m);
237  virtual void convert(double*) const;
238  virtual void convert(double**) const;
241  virtual void convert(SCMatrix*);
242  virtual void convert_accumulate(SCMatrix*);
244  virtual void scale(double val);
246  virtual void scale_diagonal(double val);
248  virtual void shift_diagonal(double val);
250  virtual void unit();
252  virtual SCMatrix* copy();
254  virtual SCMatrix* clone();
255 
256  // pure virtual functions
258  RefSCDimension rowdim() const { return d1; }
259  RefSCDimension coldim() const { return d2; }
261  virtual double get_element(int,int) const = 0;
262  virtual void set_element(int,int,double) = 0;
263  virtual void accumulate_element(int,int,double) = 0;
264 
268  virtual SCMatrix * get_subblock(int br, int er, int bc, int ec) =0;
269 
271  virtual void assign_subblock(SCMatrix *m, int, int, int, int, int=0, int=0) =0;
272 
274  virtual void accumulate_subblock(SCMatrix *m, int, int, int, int, int=0,int=0) =0;
275 
277  virtual SCVector * get_row(int i) =0;
278  virtual SCVector * get_column(int i) =0;
279 
281  virtual void assign_row(SCVector *v, int i) =0;
282  virtual void assign_column(SCVector *v, int i) =0;
283 
285  virtual void accumulate_row(SCVector *v, int i) =0;
286  virtual void accumulate_column(SCVector *v, int i) =0;
287 
289  virtual void accumulate(const SCMatrix* m) = 0;
290  virtual void accumulate(const SymmSCMatrix* m) = 0;
291  virtual void accumulate(const DiagSCMatrix* m) = 0;
292  virtual void accumulate(const SCVector*) = 0;
295  void accumulate_product(SCMatrix*m1,SCMatrix*m2)
296  { accumulate_product_rr(m1,m2); }
297  void accumulate_product(SCMatrix*m1,SymmSCMatrix*m2)
298  { accumulate_product_rs(m1,m2); }
299  void accumulate_product(SCMatrix*m1,DiagSCMatrix*m2)
300  { accumulate_product_rd(m1,m2); }
301  void accumulate_product(SymmSCMatrix*m1,SCMatrix*m2)
302  { accumulate_product_sr(m1,m2); }
303  void accumulate_product(DiagSCMatrix*m1,SCMatrix*m2)
304  { accumulate_product_dr(m1,m2); }
305  void accumulate_product(SymmSCMatrix*m1,SymmSCMatrix*m2)
306  { accumulate_product_ss(m1,m2); }
307  virtual void accumulate_product_rr(SCMatrix*,SCMatrix*) = 0;
308  virtual void accumulate_product_rs(SCMatrix*,SymmSCMatrix*);
309  virtual void accumulate_product_rd(SCMatrix*,DiagSCMatrix*);
310  virtual void accumulate_product_sr(SymmSCMatrix*,SCMatrix*);
311  virtual void accumulate_product_dr(DiagSCMatrix*,SCMatrix*);
312  virtual void accumulate_product_ss(SymmSCMatrix*,SymmSCMatrix*);
314  virtual void transpose_this() = 0;
316  virtual double trace() =0;
318  virtual double invert_this() = 0;
320  virtual double determ_this() = 0;
321 
324  virtual void svd_this(SCMatrix *U, DiagSCMatrix *sigma, SCMatrix *V);
325  virtual double solve_this(SCVector*) = 0;
326  virtual void gen_invert_this();
327 
330  virtual void schmidt_orthog(SymmSCMatrix*, int n) =0;
331 
335  virtual int schmidt_orthog_tol(SymmSCMatrix*, double tol, double*res=0)=0;
336 
338  virtual void element_op(const Ref<SCElementOp>&) = 0;
339  virtual void element_op(const Ref<SCElementOp2>&,
340  SCMatrix*) = 0;
341  virtual void element_op(const Ref<SCElementOp3>&,
342  SCMatrix*,SCMatrix*) = 0;
344  void print(std::ostream&o=ExEnv::out0()) const;
345  void print(const char* title=0,std::ostream& out=ExEnv::out0(),
346  int =10) const;
347  virtual void vprint(const char*title=0,
348  std::ostream&out=ExEnv::out0(),int =10) const = 0;
349 
352 
356  SCMatrixSubblockIter::Access) = 0;
359  SCMatrixSubblockIter::Access) = 0;
360 };
361 
365  protected:
366  RefSCDimension d;
367  Ref<SCMatrixKit> kit_;
368  public:
370  ~SymmSCMatrix();
371 
373  Ref<SCMatrixKit> kit() const { return kit_; }
374 
376  virtual void save(StateOut&);
377  virtual void restore(StateIn&);
379  virtual double maxabs() const;
381  virtual void randomize();
383  void assign(double val) { assign_val(val); }
385  void assign(const double* m) { assign_p(m); }
387  void assign(const double** m) { assign_pp(m); }
390  void assign(SymmSCMatrix* m) { assign_s(m); }
392  virtual void assign_val(double val);
393  virtual void assign_p(const double* m);
394  virtual void assign_pp(const double** m);
395  virtual void assign_s(SymmSCMatrix* m);
397  virtual void convert(double*) const;
398  virtual void convert(double**) const;
401  virtual void convert(SymmSCMatrix*);
402  virtual void convert_accumulate(SymmSCMatrix*);
404  virtual void scale(double);
406  virtual void scale_diagonal(double);
408  virtual void shift_diagonal(double);
410  virtual void unit();
412  int n() const { return d->n(); }
414  virtual SymmSCMatrix* copy();
416  virtual SymmSCMatrix* clone();
417 
418  // pure virtual functions
420  RefSCDimension dim() const { return d; }
422  virtual double get_element(int,int) const = 0;
423  virtual void set_element(int,int,double) = 0;
424  virtual void accumulate_element(int,int,double) = 0;
425 
429  virtual SCMatrix * get_subblock(int br, int er, int bc, int ec) =0;
430  virtual SymmSCMatrix * get_subblock(int br, int er) =0;
431 
433  virtual void assign_subblock(SCMatrix *m, int, int, int, int) =0;
434  virtual void assign_subblock(SymmSCMatrix *m, int, int) =0;
435 
437  virtual void accumulate_subblock(SCMatrix *m, int, int, int, int) =0;
438  virtual void accumulate_subblock(SymmSCMatrix *m, int, int) =0;
439 
441  virtual SCVector * get_row(int i) =0;
442 
444  virtual void assign_row(SCVector *v, int i) =0;
445 
447  virtual void accumulate_row(SCVector *v, int i) =0;
448 
451  virtual void diagonalize(DiagSCMatrix*d,SCMatrix*m) = 0;
453  virtual void accumulate(const SymmSCMatrix* m) = 0;
455  virtual void accumulate_symmetric_sum(SCMatrix*) = 0;
456  virtual void accumulate_symmetric_product(SCMatrix*);
457  virtual void accumulate_transform(SCMatrix*,SymmSCMatrix*,
458  SCMatrix::Transform = SCMatrix::NormalTransform);
459  virtual void accumulate_transform(SCMatrix*,DiagSCMatrix*,
460  SCMatrix::Transform = SCMatrix::NormalTransform);
461  virtual void accumulate_transform(SymmSCMatrix*,SymmSCMatrix*);
462  virtual void accumulate_symmetric_outer_product(SCVector*);
465  virtual double scalar_product(SCVector* v);
467  virtual double trace() = 0;
469  virtual double invert_this() = 0;
471  virtual double determ_this() = 0;
472 
473  virtual double solve_this(SCVector*) = 0;
474  virtual void gen_invert_this() = 0;
475 
477  virtual void element_op(const Ref<SCElementOp>&) = 0;
478  virtual void element_op(const Ref<SCElementOp2>&,
479  SymmSCMatrix*) = 0;
480  virtual void element_op(const Ref<SCElementOp3>&,
481  SymmSCMatrix*,SymmSCMatrix*) = 0;
483  void print(std::ostream&o=ExEnv::out0()) const;
484  void print(const char* title=0,std::ostream& out=ExEnv::out0(),
485  int =10) const;
486  virtual void vprint(const char* title=0,
487  std::ostream& out=ExEnv::out0(), int =10) const;
488 
491 
495  SCMatrixSubblockIter::Access) = 0;
498  SCMatrixSubblockIter::Access) = 0;
499 };
500 
504  protected:
505  RefSCDimension d;
506  Ref<SCMatrixKit> kit_;
507  public:
509  ~DiagSCMatrix();
510 
512  Ref<SCMatrixKit> kit() const { return kit_; }
513 
515  virtual void save(StateOut&);
516  virtual void restore(StateIn&);
517 
519  virtual double maxabs() const;
521  virtual void randomize();
523  void assign(double val) { assign_val(val); }
525  void assign(const double*p) { assign_p(p); }
528  void assign(DiagSCMatrix*d_a) { assign_d(d_a); }
530  virtual void assign_val(double val);
531  virtual void assign_p(const double*);
532  virtual void assign_d(DiagSCMatrix*);
534  virtual void convert(double*) const;
537  virtual void convert(DiagSCMatrix*);
538  virtual void convert_accumulate(DiagSCMatrix*);
540  virtual void scale(double);
542  int n() const { return d->n(); }
544  virtual DiagSCMatrix* copy();
546  virtual DiagSCMatrix* clone();
547 
548  // pure virtual functions
550  RefSCDimension dim() const { return d; }
552  virtual double get_element(int) const = 0;
553  virtual void set_element(int,double) = 0;
554  virtual void accumulate_element(int,double) = 0;
556  virtual void accumulate(const DiagSCMatrix* m) = 0;
558  virtual double trace() = 0;
560  virtual double determ_this() = 0;
562  virtual double invert_this() = 0;
564  virtual void gen_invert_this() = 0;
566  virtual void element_op(const Ref<SCElementOp>&) = 0;
567  virtual void element_op(const Ref<SCElementOp2>&,
568  DiagSCMatrix*) = 0;
569  virtual void element_op(const Ref<SCElementOp3>&,
570  DiagSCMatrix*,DiagSCMatrix*) = 0;
572  void print(std::ostream&o=ExEnv::out0()) const;
573  void print(const char* title=0,
574  std::ostream& out=ExEnv::out0(), int =10) const;
575  virtual void vprint(const char* title=0,
576  std::ostream& out=ExEnv::out0(), int =10) const;
577 
580 
584  SCMatrixSubblockIter::Access) = 0;
587  SCMatrixSubblockIter::Access) = 0;
588 };
589 
590 }
591 
592 #endif
593 
594 // Local Variables:
595 // mode: c++
596 // c-file-style: "CLJ"
597 // End:
Classes which need runtime information about themselves and their relationship to other classes can v...
Definition: class.h:244
The SymmSCMatrix class is the abstract base class for diagonal double valued matrices.
Definition: abstract.h:503
virtual void convert(double *) const
Like the assign member, but this writes values to the argument.
virtual Ref< SCMatrixSubblockIter > all_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the all blocks used in this matrix.
virtual void randomize()
Assign each element to a random number between -1 and 1.
virtual double invert_this()=0
Invert this.
Ref< MessageGrp > messagegrp() const
Returns the message group used by the matrix kit.
virtual DiagSCMatrix * clone()
Return a matrix with the same dimension but uninitialized memory.
virtual double trace()=0
Return the trace.
RefSCDimension dim() const
Return the dimension.
Definition: abstract.h:550
virtual DiagSCMatrix * copy()
Return a matrix with the same dimension and same elements.
virtual void scale(double)
Multiply all elements by val.
virtual void gen_invert_this()=0
Do a generalized inversion of this.
void print(std::ostream &o=ExEnv::out0()) const
Print out the matrix.
virtual double maxabs() const
Return the maximum absolute value element of this vector.
void assign(DiagSCMatrix *d_a)
Make this have the same elements as m.
Definition: abstract.h:528
void assign(double val)
Set all elements to val.
Definition: abstract.h:523
virtual void convert(DiagSCMatrix *)
Convert an SCDiagSCMatrix of a different specialization to this specialization and possibly accumulat...
virtual double get_element(int) const =0
Return or modify an element.
void assign(const double *p)
Assign element i, i to m[i].
Definition: abstract.h:525
virtual void save(StateOut &)
Save and restore this in an implementation independent way.
virtual void accumulate(const DiagSCMatrix *m)=0
Sum m into this.
Ref< SCMatrixKit > kit() const
Return the SCMatrixKit used to create this object.
Definition: abstract.h:512
virtual double determ_this()=0
Return the determinant of this. this is overwritten.
virtual void element_op(const Ref< SCElementOp > &)=0
Perform the element operation op on each element of this.
virtual void assign_val(double val)
Overridden to implement the assign members.
virtual Ref< SCMatrixSubblockIter > local_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the local (rapidly accessible) blocks used in this matrix.
int n() const
Return the dimension.
Definition: abstract.h:542
static std::ostream & out0()
Return an ostream that writes from node 0.
The RefSCDimension class is a smart pointer to an SCDimension specialization.
Definition: dim.h:156
A template class that maintains references counts.
Definition: ref.h:332
The SCMatrixKit abstract class acts as a factory for producing matrices.
Definition: abstract.h:58
static SCMatrixKit * default_matrixkit()
This returns a LocalSCMatrixKit, unless the default has been changed with set_default_matrixkit.
SCMatrix * restore_matrix(StateIn &, const RefSCDimension &, const RefSCDimension &)
Given the dimensions and a StateIn object, restore matrices or vectors.
virtual SCMatrix * matrix(const RefSCDimension &, const RefSCDimension &)=0
Given the dimensions, create matrices or vectors.
The SCMatrix class is the abstract base class for general double valued n by m matrices.
Definition: abstract.h:195
virtual double invert_this()=0
Invert this.
virtual void randomize()
Assign each element to a random number between -1 and 1.
virtual SCMatrix * copy()
Return a matrix with the same dimension and same elements.
Ref< MessageGrp > messagegrp() const
Returns the message group used by the matrix kit.
virtual void accumulate_subblock(SCMatrix *m, int, int, int, int, int=0, int=0)=0
Sum m into a subblock of this.
virtual void convert(double *) const
Like the assign members, but these write values to the arguments.
Ref< SCMatrixKit > kit() const
Return the SCMatrixKit used to create this object.
Definition: abstract.h:212
virtual void accumulate_outer_product(SCVector *, SCVector *)=0
Sum into this the products of various vectors or matrices.
RefSCDimension rowdim() const
Return the row or column dimension.
Definition: abstract.h:258
virtual int schmidt_orthog_tol(SymmSCMatrix *, double tol, double *res=0)=0
Schmidt orthogonalize this.
virtual SCMatrix * get_subblock(int br, int er, int bc, int ec)=0
Return a subblock of this.
virtual Ref< SCMatrixSubblockIter > all_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the all blocks used in this matrix.
virtual void schmidt_orthog(SymmSCMatrix *, int n)=0
Schmidt orthogonalize this.
virtual double determ_this()=0
Return the determinant of this. this is overwritten.
virtual void assign_subblock(SCMatrix *m, int, int, int, int, int=0, int=0)=0
Assign m to a subblock of this.
virtual void scale_diagonal(double val)
Scale the diagonal elements by val.
virtual void element_op(const Ref< SCElementOp > &)=0
Perform the element operation op on each element of this.
virtual void assign_val(double val)
Overridden to implement to assign members.
void assign(const double *m)
Assign element i, j to m[ir*nrow()+j].
Definition: abstract.h:225
virtual void svd_this(SCMatrix *U, DiagSCMatrix *sigma, SCMatrix *V)
Compute the singular value decomposition for this, possibly destroying this.
void assign(double val)
Set all elements to val.
Definition: abstract.h:223
virtual void accumulate_row(SCVector *v, int i)=0
Sum v to a row or column of this.
virtual void unit()
Make this equal to the unit matrix.
virtual double get_element(int, int) const =0
Return or modify an element.
void assign(const double **m)
Assign element i, j to m[i][j].
Definition: abstract.h:227
virtual double maxabs() const
Return the maximum absolute value element.
virtual void convert(SCMatrix *)
Convert an SCMatrix of a different specialization to this specialization and possibly accumulate the ...
virtual double trace()=0
Return the trace.
void assign(SCMatrix *m)
Make this have the same elements as m. The dimensions must match.
Definition: abstract.h:229
int nrow() const
Return the number of rows.
Definition: abstract.h:215
void print(std::ostream &o=ExEnv::out0()) const
Print out the matrix.
virtual void shift_diagonal(double val)
Shift the diagonal elements by val.
int ncol() const
Return the number of columns.
Definition: abstract.h:217
virtual SCMatrix * clone()
Return a matrix with the same dimension but uninitialized memory.
virtual void transpose_this()=0
Transpose this.
virtual SCVector * get_row(int i)=0
Return a row or column of this.
virtual Ref< SCMatrixSubblockIter > local_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the local (rapidly accessible) blocks used in this matrix.
virtual void accumulate(const SCMatrix *m)=0
Sum m into this.
virtual void scale(double val)
Multiply all elements by val.
virtual void save(StateOut &)
Save and restore this in an implementation independent way.
virtual void assign_row(SCVector *v, int i)=0
Assign v to a row or column of this.
The SCVector class is the abstract base class for double valued vectors.
Definition: abstract.h:97
virtual void randomize()
Assign each element to a random number between -1 and 1.
virtual void accumulate_element(int, double)=0
Add val to element i.
virtual void normalize()
Normalize this.
virtual double maxabs() const
Return the maximum absolute value element of this vector.
RefSCDimension dim() const
Return the RefSCDimension corresponding to this vector.
Definition: abstract.h:147
virtual void scale(double val)
Multiply each element by val.
virtual void accumulate(const SCVector *v)=0
Sum v into this.
virtual void assign_val(double val)
Overridden to implement the assign functions.
virtual Ref< SCMatrixSubblockIter > all_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the all blocks used in this vector.
virtual double get_element(int i) const =0
Return the value of element i.
void assign(const double *v)
Assign element i to v[i] for all i.
Definition: abstract.h:129
virtual void accumulate(const SCMatrix *m)=0
Sum m into this. One of m's dimensions must be 1.
virtual void convert(SCVector *)
Convert an SCVector of a different specialization to this specialization and possibly accumulate the ...
void print(std::ostream &o=ExEnv::out0()) const
Print out the vector.
virtual Ref< SCMatrixSubblockIter > local_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the local (rapidly accessible) blocks used in this vector.
Ref< MessageGrp > messagegrp() const
Returns the message group used by the matrix kit.
Ref< SCMatrixKit > kit() const
Return the SCMatrixKit used to create this object.
Definition: abstract.h:109
virtual void save(StateOut &)
Save and restore this in an implementation independent way.
virtual void set_element(int i, double val)=0
Set element i to val.
virtual void convert(double *v) const
Assign v[i] to element i for all i.
virtual void element_op(const Ref< SCElementOp > &)=0
Perform the element operation op on each element of this.
virtual double scalar_product(SCVector *)=0
Return the dot product.
void accumulate_product(SymmSCMatrix *m, SCVector *v)
Sum the result of m times v into this.
Definition: abstract.h:155
virtual SCVector * clone()
Return a vector with the same dimension but uninitialized memory.
int n() const
Return the length of the vector.
Definition: abstract.h:119
void assign(SCVector *v)
Make this have the same elements as v.
Definition: abstract.h:132
void assign(double val)
Assign all elements of this to val.
Definition: abstract.h:127
virtual SCVector * copy()
Return a vector with the same dimension and same elements.
Restores objects that derive from SavableState.
Definition: statein.h:70
Serializes objects that derive from SavableState.
Definition: stateout.h:61
The SymmSCMatrix class is the abstract base class for symmetric double valued matrices.
Definition: abstract.h:364
virtual void unit()
Make this equal to the unit matrix.
virtual double determ_this()=0
Return the determinant of this. this is overwritten.
virtual void scale(double)
Multiply all elements by val.
Ref< MessageGrp > messagegrp() const
Returns the message group used by the matrix kit.
virtual void accumulate_subblock(SCMatrix *m, int, int, int, int)=0
Sum m into a subblock of this.
void assign(SymmSCMatrix *m)
Make this have the same elements as m.
Definition: abstract.h:390
int n() const
Return the dimension.
Definition: abstract.h:412
virtual void randomize()
Assign each element to a random number between -1 and 1.
void assign(double val)
Set all elements to val.
Definition: abstract.h:383
Ref< SCMatrixKit > kit() const
Return the SCMatrixKit object that created this object.
Definition: abstract.h:373
virtual void convert(SymmSCMatrix *)
Convert an SCSymmSCMatrix of a different specialization to this specialization and possibly accumulat...
virtual void accumulate_symmetric_sum(SCMatrix *)=0
Sum into this the products of various vectors or matrices.
virtual double maxabs() const
Return the maximum absolute value element of this vector.
void print(std::ostream &o=ExEnv::out0()) const
Print out the matrix.
virtual void element_op(const Ref< SCElementOp > &)=0
Perform the element operation op on each element of this.
virtual void scale_diagonal(double)
Scale the diagonal elements by val.
virtual Ref< SCMatrixSubblockIter > all_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the all blocks used in this matrix.
virtual Ref< SCMatrixSubblockIter > local_blocks(SCMatrixSubblockIter::Access)=0
Returns iterators for the local (rapidly accessible) blocks used in this matrix.
virtual void accumulate(const SymmSCMatrix *m)=0
Sum m into this.
virtual void assign_val(double val)
Overridden to implement the assign functions.
virtual SymmSCMatrix * clone()
Return a matrix with the same dimension but uninitialized memory.
void assign(const double *m)
Assign element i, j to m[i*(i+1)/2+j].
Definition: abstract.h:385
virtual SymmSCMatrix * copy()
Return a matrix with the same dimension and same elements.
virtual SCMatrix * get_subblock(int br, int er, int bc, int ec)=0
Return a subblock of this.
virtual void accumulate_row(SCVector *v, int i)=0
Sum v to a row of this.
virtual void diagonalize(DiagSCMatrix *d, SCMatrix *m)=0
Diagonalize this, placing the eigenvalues in d and the eigenvectors in m.
virtual void assign_subblock(SCMatrix *m, int, int, int, int)=0
Assign m to a subblock of this.
virtual double scalar_product(SCVector *v)
Return the scalar obtained by multiplying this on the left and right by v.
virtual void convert(double *) const
Like the assign members, but these write values to the arguments.
RefSCDimension dim() const
Return the dimension.
Definition: abstract.h:420
virtual void save(StateOut &)
Save and restore this in an implementation independent way.
virtual double invert_this()=0
Invert this.
virtual double trace()=0
Return the trace.
virtual SCVector * get_row(int i)=0
Return a row of this.
virtual double get_element(int, int) const =0
Return or modify an element.
void assign(const double **m)
Assign element i, j to m[i][j].
Definition: abstract.h:387
virtual void assign_row(SCVector *v, int i)=0
Assign v to a row of this.
virtual void shift_diagonal(double)
Shift the diagonal elements by val.

Generated at Fri Dec 2 2022 21:09:13 for MPQC 2.3.1 using the documentation package Doxygen 1.9.1.