Grid 0.7.0
CayleyFermion5Ddense.h
Go to the documentation of this file.
1/*************************************************************************************
2
3 Grid physics library, www.github.com/paboyle/Grid
4
5 Source file: ./lib/qcd/action/fermion/CayleyFermion5D.cc
6
7 Copyright (C) 2015
8
9Author: Peter Boyle <pabobyle@ph.ed.ac.uk>
10Author: Peter Boyle <paboyle@ph.ed.ac.uk>
11Author: Peter Boyle <peterboyle@Peters-MacBook-Pro-2.local>
12Author: paboyle <paboyle@ph.ed.ac.uk>
13
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
18
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License along
25 with this program; if not, write to the Free Software Foundation, Inc.,
26 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27
28 See the full license in the file "LICENSE" in the top level distribution directory
29*************************************************************************************/
30/* END LEGAL */
31
35
36
38
39/*
40 * Dense matrix versions of routines
41 */
42template<class Impl>
43void CayleyFermion5D<Impl>::MooeeInvDag (const FermionField &psi, FermionField &chi)
44{
45 this->MooeeInternal(psi,chi,DaggerYes,InverseYes);
46}
47template<class Impl>
48void CayleyFermion5D<Impl>::MooeeInv(const FermionField &psi, FermionField &chi)
49{
50 this->MooeeInternal(psi,chi,DaggerNo,InverseYes);
53template<class Impl>
54void CayleyFermion5D<Impl>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv)
55{
56 int Ls=this->Ls;
57 int LLs = psi.Grid()->_rdimensions[0];
58 int vol = psi.Grid()->oSites()/LLs;
59
60 chi.Checkerboard()=psi.Checkerboard();
61
62 assert(Ls==LLs);
63
64 Eigen::MatrixXd Pplus = Eigen::MatrixXd::Zero(Ls,Ls);
65 Eigen::MatrixXd Pminus = Eigen::MatrixXd::Zero(Ls,Ls);
66
67 for(int s=0;s<Ls;s++){
68 Pplus(s,s) = bee[s];
69 Pminus(s,s)= bee[s];
70 }
71
72 for(int s=0;s<Ls-1;s++){
73 Pminus(s,s+1) = -cee[s];
74 }
75
76 for(int s=0;s<Ls-1;s++){
77 Pplus(s+1,s) = -cee[s+1];
78 }
79 Pplus (0,Ls-1) = mass*cee[0];
80 Pminus(Ls-1,0) = mass*cee[Ls-1];
81
82 Eigen::MatrixXd PplusMat ;
83 Eigen::MatrixXd PminusMat;
84
85 if ( inv ) {
86 PplusMat =Pplus.inverse();
87 PminusMat=Pminus.inverse();
88 } else {
89 PplusMat =Pplus;
90 PminusMat=Pminus;
91 }
92
93 if(dag){
94 PplusMat.adjointInPlace();
95 PminusMat.adjointInPlace();
96 }
97
98 // For the non-vectorised s-direction this is simple
99 thread_loop( (auto site=0;site<vol;site++), {
100
101 SiteSpinor SiteChi;
102 SiteHalfSpinor SitePplus;
103 SiteHalfSpinor SitePminus;
104
105 for(int s1=0;s1<Ls;s1++){
106 SiteChi =Zero();
107 for(int s2=0;s2<Ls;s2++){
108 int lex2 = s2+Ls*site;
109
110 if ( PplusMat(s1,s2) != 0.0 ) {
111 spProj5p(SitePplus,psi[lex2]);
112 accumRecon5p(SiteChi,PplusMat (s1,s2)*SitePplus);
113 }
114
115 if ( PminusMat(s1,s2) != 0.0 ) {
116 spProj5m(SitePminus,psi[lex2]);
117 accumRecon5m(SiteChi,PminusMat(s1,s2)*SitePminus);
118 }
119 }
120 chi[s1+Ls*site] = SiteChi*0.5;
121 }
122 });
123}
124
125#ifdef CAYLEY_DPERP_DENSE
126INSTANTIATE_DPERP(GparityWilsonImplF);
127INSTANTIATE_DPERP(GparityWilsonImplD);
128INSTANTIATE_DPERP(WilsonImplF);
129INSTANTIATE_DPERP(WilsonImplD);
130INSTANTIATE_DPERP(ZWilsonImplF);
131INSTANTIATE_DPERP(ZWilsonImplD);
132
133template void CayleyFermion5D<GparityWilsonImplF>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
134template void CayleyFermion5D<GparityWilsonImplD>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
135template void CayleyFermion5D<WilsonImplF>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
136template void CayleyFermion5D<WilsonImplD>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
137template void CayleyFermion5D<ZWilsonImplF>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
138template void CayleyFermion5D<ZWilsonImplD>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
139
140INSTANTIATE_DPERP(GparityWilsonImplFH);
141INSTANTIATE_DPERP(GparityWilsonImplDF);
142INSTANTIATE_DPERP(WilsonImplFH);
143INSTANTIATE_DPERP(WilsonImplDF);
144INSTANTIATE_DPERP(ZWilsonImplFH);
145INSTANTIATE_DPERP(ZWilsonImplDF);
146
147template void CayleyFermion5D<GparityWilsonImplFH>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
148template void CayleyFermion5D<GparityWilsonImplDF>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
149template void CayleyFermion5D<WilsonImplFH>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
150template void CayleyFermion5D<WilsonImplDF>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
151template void CayleyFermion5D<ZWilsonImplFH>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
152template void CayleyFermion5D<ZWilsonImplDF>::MooeeInternal(const FermionField &psi, FermionField &chi,int dag, int inv);
153#endif
154
GparityWilsonImpl< vComplexF, FundamentalRepresentation, CoeffReal > GparityWilsonImplF
GparityWilsonImpl< vComplexD, FundamentalRepresentation, CoeffReal > GparityWilsonImplD
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
static constexpr int DaggerYes
Definition QCD.h:70
static constexpr int DaggerNo
Definition QCD.h:69
static constexpr int InverseYes
Definition QCD.h:72
accelerator_inline void accumRecon5p(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:344
accelerator_inline void spProj5m(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:146
accelerator_inline void accumRecon5m(iVector< vtype, Ns > &fspin, const iVector< vtype, Nhs > &hspin)
Definition TwoSpinor.h:349
accelerator_inline void spProj5p(iVector< vtype, Nhs > &hspin, const iVector< vtype, Ns > &fspin)
Definition TwoSpinor.h:140
WilsonImpl< vComplexF, FundamentalRepresentation, CoeffReal > WilsonImplF
Definition WilsonImpl.h:243
WilsonImpl< vComplexD, FundamentalRepresentation, CoeffComplex > ZWilsonImplD
Definition WilsonImpl.h:249
WilsonImpl< vComplexD, FundamentalRepresentation, CoeffReal > WilsonImplD
Definition WilsonImpl.h:244
WilsonImpl< vComplexF, FundamentalRepresentation, CoeffComplex > ZWilsonImplF
Definition WilsonImpl.h:248
CayleyFermion5D(GaugeField &_Umu, GridCartesian &FiveDimGrid, GridRedBlackCartesian &FiveDimRedBlackGrid, GridCartesian &FourDimGrid, GridRedBlackCartesian &FourDimRedBlackGrid, RealD _mass, RealD _M5, const ImplParams &p=ImplParams())
virtual void MooeeInvDag(const FermionField &in, FermionField &out)
std::vector< Coeff_t > bee
virtual void MooeeInv(const FermionField &in, FermionField &out)
std::vector< Coeff_t > cee
Definition Simd.h:194