mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-10-29 11:09:33 +00:00 
			
		
		
		
	Conjugate coefficients on adjoint
This commit is contained in:
		| @@ -48,17 +48,18 @@ void CayleyFermion5D<Impl>::M5D(const FermionField &psi, | ||||
| 				std::vector<Coeff_t> &diag, | ||||
| 				std::vector<Coeff_t> &upper) | ||||
| { | ||||
|   Coeff_t one(1.0); | ||||
|   int Ls=this->Ls; | ||||
|   for(int s=0;s<Ls;s++){ | ||||
|     if ( s==0 ) { | ||||
|       axpby_ssp_pminus(chi,diag[s],phi,upper[s],psi,s,s+1); | ||||
|       axpby_ssp_pplus (chi,1.0,chi,lower[s],psi,s,Ls-1); | ||||
|       axpby_ssp_pplus (chi,one,chi,lower[s],psi,s,Ls-1); | ||||
|     } else if ( s==(Ls-1)) {  | ||||
|       axpby_ssp_pminus(chi,diag[s],phi,upper[s],psi,s,0); | ||||
|       axpby_ssp_pplus (chi,1.0,chi,lower[s],psi,s,s-1); | ||||
|       axpby_ssp_pplus (chi,one,chi,lower[s],psi,s,s-1); | ||||
|     } else { | ||||
|       axpby_ssp_pminus(chi,diag[s],phi,upper[s],psi,s,s+1); | ||||
|       axpby_ssp_pplus(chi,1.0,chi,lower[s],psi,s,s-1); | ||||
|       axpby_ssp_pplus(chi,one,chi,lower[s],psi,s,s-1); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -70,17 +71,18 @@ void CayleyFermion5D<Impl>::M5Ddag(const FermionField &psi, | ||||
| 				   std::vector<Coeff_t> &diag, | ||||
| 				   std::vector<Coeff_t> &upper) | ||||
| { | ||||
|   Coeff_t one(1.0); | ||||
|   int Ls=this->Ls; | ||||
|   for(int s=0;s<Ls;s++){ | ||||
|     if ( s==0 ) { | ||||
|       axpby_ssp_pplus (chi,diag[s],phi,upper[s],psi,s,s+1); | ||||
|       axpby_ssp_pminus(chi,1.0,chi,lower[s],psi,s,Ls-1); | ||||
|       axpby_ssp_pminus(chi,one,chi,lower[s],psi,s,Ls-1); | ||||
|     } else if ( s==(Ls-1)) {  | ||||
|       axpby_ssp_pplus (chi,diag[s],phi,upper[s],psi,s,0); | ||||
|       axpby_ssp_pminus(chi,1.0,chi,lower[s],psi,s,s-1); | ||||
|       axpby_ssp_pminus(chi,one,chi,lower[s],psi,s,s-1); | ||||
|     } else { | ||||
|       axpby_ssp_pplus (chi,diag[s],phi,upper[s],psi,s,s+1); | ||||
|       axpby_ssp_pminus(chi,1.0,chi,lower[s],psi,s,s-1); | ||||
|       axpby_ssp_pminus(chi,one,chi,lower[s],psi,s,s-1); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -88,62 +90,68 @@ void CayleyFermion5D<Impl>::M5Ddag(const FermionField &psi, | ||||
| template<class Impl> | ||||
| void CayleyFermion5D<Impl>::MooeeInv    (const FermionField &psi, FermionField &chi) | ||||
| { | ||||
|   Coeff_t one(1.0); | ||||
|   Coeff_t czero(0.0); | ||||
|   chi.checkerboard=psi.checkerboard; | ||||
|   int Ls=this->Ls; | ||||
|   // Apply (L^{\prime})^{-1} | ||||
|   axpby_ssp (chi,1.0,psi,     0.0,psi,0,0);      // chi[0]=psi[0] | ||||
|   axpby_ssp (chi,one,psi,     czero,psi,0,0);      // chi[0]=psi[0] | ||||
|   for (int s=1;s<Ls;s++){ | ||||
|     axpby_ssp_pplus(chi,1.0,psi,-lee[s-1],chi,s,s-1);// recursion Psi[s] -lee P_+ chi[s-1] | ||||
|     axpby_ssp_pplus(chi,one,psi,-lee[s-1],chi,s,s-1);// recursion Psi[s] -lee P_+ chi[s-1] | ||||
|   } | ||||
|   // L_m^{-1}  | ||||
|   for (int s=0;s<Ls-1;s++){ // Chi[ee] = 1 - sum[s<Ls-1] -leem[s]P_- chi | ||||
|     axpby_ssp_pminus(chi,1.0,chi,-leem[s],chi,Ls-1,s); | ||||
|     axpby_ssp_pminus(chi,one,chi,-leem[s],chi,Ls-1,s); | ||||
|   } | ||||
|   // U_m^{-1} D^{-1} | ||||
|   for (int s=0;s<Ls-1;s++){ | ||||
|     // Chi[s] + 1/d chi[s]  | ||||
|     axpby_ssp_pplus(chi,1.0/dee[s],chi,-ueem[s]/dee[Ls-1],chi,s,Ls-1); | ||||
|     axpby_ssp_pplus(chi,one/dee[s],chi,-ueem[s]/dee[Ls-1],chi,s,Ls-1); | ||||
|   }	 | ||||
|   axpby_ssp(chi,1.0/dee[Ls-1],chi,0.0,chi,Ls-1,Ls-1); // Modest avoidable  | ||||
|   axpby_ssp(chi,one/dee[Ls-1],chi,czero,chi,Ls-1,Ls-1); // Modest avoidable  | ||||
|    | ||||
|   // Apply U^{-1} | ||||
|   for (int s=Ls-2;s>=0;s--){ | ||||
|     axpby_ssp_pminus (chi,1.0,chi,-uee[s],chi,s,s+1);  // chi[Ls] | ||||
|     axpby_ssp_pminus (chi,one,chi,-uee[s],chi,s,s+1);  // chi[Ls] | ||||
|   } | ||||
| } | ||||
|  | ||||
| template<class Impl> | ||||
| void CayleyFermion5D<Impl>::MooeeInvDag (const FermionField &psi, FermionField &chi) | ||||
| { | ||||
|   Coeff_t one(1.0); | ||||
|   Coeff_t czero(0.0); | ||||
|   chi.checkerboard=psi.checkerboard; | ||||
|   int Ls=this->Ls; | ||||
|   // Apply (U^{\prime})^{-dagger} | ||||
|   axpby_ssp (chi,1.0,psi,     0.0,psi,0,0);      // chi[0]=psi[0] | ||||
|   axpby_ssp (chi,one,psi,     czero,psi,0,0);      // chi[0]=psi[0] | ||||
|   for (int s=1;s<Ls;s++){ | ||||
|     axpby_ssp_pminus(chi,1.0,psi,-uee[s-1],chi,s,s-1); | ||||
|     axpby_ssp_pminus(chi,one,psi,-conjugate(uee[s-1]),chi,s,s-1); | ||||
|   } | ||||
|   // U_m^{-\dagger}  | ||||
|   for (int s=0;s<Ls-1;s++){ | ||||
|     axpby_ssp_pplus(chi,1.0,chi,-ueem[s],chi,Ls-1,s); | ||||
|     axpby_ssp_pplus(chi,one,chi,-conjugate(ueem[s]),chi,Ls-1,s); | ||||
|   } | ||||
|   // L_m^{-\dagger} D^{-dagger} | ||||
|   for (int s=0;s<Ls-1;s++){ | ||||
|     axpby_ssp_pminus(chi,1.0/dee[s],chi,-leem[s]/dee[Ls-1],chi,s,Ls-1); | ||||
|     axpby_ssp_pminus(chi,one/conjugate(dee[s]),chi,-conjugate(leem[s]/dee[Ls-1]),chi,s,Ls-1); | ||||
|   }	 | ||||
|   axpby_ssp(chi,1.0/dee[Ls-1],chi,0.0,chi,Ls-1,Ls-1); // Modest avoidable  | ||||
|   axpby_ssp(chi,one/conjugate(dee[Ls-1]),chi,czero,chi,Ls-1,Ls-1); // Modest avoidable  | ||||
|    | ||||
|   // Apply L^{-dagger} | ||||
|   for (int s=Ls-2;s>=0;s--){ | ||||
|     axpby_ssp_pplus (chi,1.0,chi,-lee[s],chi,s,s+1);  // chi[Ls] | ||||
|     axpby_ssp_pplus (chi,one,chi,-conjugate(lee[s]),chi,s,s+1);  // chi[Ls] | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| #ifdef CAYLEY_DPERP_LINALG | ||||
|   INSTANTIATE(WilsonImplF); | ||||
|   INSTANTIATE(WilsonImplD); | ||||
|   INSTANTIATE(GparityWilsonImplF); | ||||
|   INSTANTIATE(GparityWilsonImplD); | ||||
|   INSTANTIATE_DPERP(WilsonImplF); | ||||
|   INSTANTIATE_DPERP(WilsonImplD); | ||||
|   INSTANTIATE_DPERP(GparityWilsonImplF); | ||||
|   INSTANTIATE_DPERP(GparityWilsonImplD); | ||||
|   INSTANTIATE_DPERP(ZWilsonImplF); | ||||
|   INSTANTIATE_DPERP(ZWilsonImplD); | ||||
| #endif | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user