Grid 0.7.0
SparseMatrix.h
Go to the documentation of this file.
1/*************************************************************************************
2
3 Grid physics library, www.github.com/paboyle/Grid
4
5 Source file: ./lib/algorithms/SparseMatrix.h
6
7 Copyright (C) 2015
8
9Author: Peter Boyle <paboyle@ph.ed.ac.uk>
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 This program 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 General Public License for more details.
20
21 You should have received a copy of the GNU General Public License along
22 with this program; if not, write to the Free Software Foundation, Inc.,
23 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24
25 See the full license in the file "LICENSE" in the top level distribution directory
26*************************************************************************************/
27/* END LEGAL */
28#ifndef GRID_ALGORITHM_SPARSE_MATRIX_H
29#define GRID_ALGORITHM_SPARSE_MATRIX_H
30
31
33
35// Interface defining what I expect of a general sparse matrix, such as a Fermion action
37template<class Field> class SparseMatrixBase {
38public:
39 virtual GridBase *Grid(void) =0;
40 // Full checkerboar operations
41 virtual void M (const Field &in, Field &out)=0;
42 virtual void Mdag (const Field &in, Field &out)=0;
43 virtual void MdagM(const Field &in, Field &out) {
44 Field tmp (in.Grid());
45 M(in,tmp);
46 Mdag(tmp,out);
47 }
48 virtual void MMdag(const Field &in, Field &out) {
49 Field tmp (in.Grid());
50 Mdag(in,tmp);
51 M(tmp,out);
52 }
53 virtual void Mdiag (const Field &in, Field &out)=0;
54 virtual void Mdir (const Field &in, Field &out,int dir, int disp)=0;
55 virtual void MdirAll (const Field &in, std::vector<Field> &out)=0;
56 virtual ~SparseMatrixBase() {};
57};
58
60// Interface augmented by a red black sparse matrix, such as a Fermion action
62template<class Field> class CheckerBoardedSparseMatrixBase : public SparseMatrixBase<Field> {
63public:
64 virtual GridBase *RedBlackGrid(void)=0;
65
67 // Query the even even properties to make algorithmic decisions
69 virtual RealD Mass(void) { return 0.0; };
70 virtual int ConstEE(void) { return 1; }; // Disable assumptions unless overridden
71 virtual int isTrivialEE(void) { return 0; }; // by a derived class that knows better
72
73 // half checkerboard operaions
74 virtual void Meooe (const Field &in, Field &out)=0;
75 virtual void Mooee (const Field &in, Field &out)=0;
76 virtual void MooeeInv (const Field &in, Field &out)=0;
77
78 virtual void MeooeDag (const Field &in, Field &out)=0;
79 virtual void MooeeDag (const Field &in, Field &out)=0;
80 virtual void MooeeInvDag (const Field &in, Field &out)=0;
82};
83
85
86#endif
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
double RealD
Definition Simd.h:61
virtual void Mooee(const Field &in, Field &out)=0
virtual void MooeeInv(const Field &in, Field &out)=0
virtual void MooeeInvDag(const Field &in, Field &out)=0
virtual void Meooe(const Field &in, Field &out)=0
virtual GridBase * RedBlackGrid(void)=0
virtual int isTrivialEE(void)
virtual void MeooeDag(const Field &in, Field &out)=0
virtual void MooeeDag(const Field &in, Field &out)=0
virtual void MdagM(const Field &in, Field &out)
virtual ~SparseMatrixBase()
virtual void Mdiag(const Field &in, Field &out)=0
virtual void MMdag(const Field &in, Field &out)
virtual void MdirAll(const Field &in, std::vector< Field > &out)=0
virtual void M(const Field &in, Field &out)=0
virtual void Mdag(const Field &in, Field &out)=0
virtual void Mdir(const Field &in, Field &out, int dir, int disp)=0
virtual GridBase * Grid(void)=0