src/util/dirac_op/d_op_wilson/qcdoc/wfm_m.C

Go to the documentation of this file.
00001 #include <util/wfm.h>
00002 #include "wfm_internal.h"
00003 CPS_START_NAMESPACE
00004 
00005 /*--------------------------------------------------------------------------*/
00006 /* wilson_m:                                                                */
00007 /*--------------------------------------------------------------------------*/
00008 
00009 void wfm::m(Float *chi, 
00010             Float *u, 
00011             Float *psi, 
00012             Float kappa)
00013 {
00014 /*--------------------------------------------------------------------------*/
00015 /* Initializations                                                          */
00016 /*--------------------------------------------------------------------------*/
00017   int len         =  vol * ND;
00018   Float  mkappasq = -kappa*kappa;
00019 
00020 /*--------------------------------------------------------------------------*/
00021 /* Dslash_E0                                                                */
00022 /*--------------------------------------------------------------------------*/
00023   dslash(spinor_tmp, u, psi, 1, 0);
00024 
00025 /*--------------------------------------------------------------------------*/
00026 /* Dslash_0E                                                                */
00027 /*--------------------------------------------------------------------------*/
00028   dslash(chi, u, spinor_tmp, 0, 0);
00029 
00030 /*--------------------------------------------------------------------------*/
00031 /* 1_OO - kappa^2 * Dslash_0E * Dslash_E0                                   */
00032 /*--------------------------------------------------------------------------*/
00033   xaxpy(&mkappasq,chi,psi,len);
00034   DiracOp::CGflops += vol*24*2;
00035 }
00036 
00037 
00038 /*--------------------------------------------------------------------------*/
00039 /* wfm::mdag:                                                             */
00040 /*--------------------------------------------------------------------------*/
00041 void wfm::mdag(Float *chi, 
00042                Float *u, 
00043                Float *psi, 
00044                Float kappa)
00045 {
00046 
00047 /*--------------------------------------------------------------------------*/
00048 /* Initializations                                                          */
00049 /*--------------------------------------------------------------------------*/
00050   int        len = vol * ND;
00051   Float mkappasq = -kappa*kappa;
00052 
00053 /*--------------------------------------------------------------------------*/
00054 /* DslashDag_E0                                                             */
00055 /*--------------------------------------------------------------------------*/
00056   dslash(spinor_tmp, u, psi, 1, 1);
00057 
00058 /*--------------------------------------------------------------------------*/
00059 /* DslashDag_0E                                                             */
00060 /*--------------------------------------------------------------------------*/
00061   dslash(chi, u, spinor_tmp, 0, 1);
00062 
00063 /*--------------------------------------------------------------------------*/
00064 /* [1_OO - kappa * DslashDag_0E * DslashDag_E0] ]                           */
00065 /*--------------------------------------------------------------------------*/
00066   xaxpy(&mkappasq,chi,psi,len);
00067 #if 0
00068  for(int i=0;i<len*6;i++){
00069    printf("chi[%d]=%e psi[%d]=%e\n",i,chi[i],i,psi[i]);
00070    chi[i] = psi[i] -kappa*kappa*chi[i];
00071  }
00072 #endif
00073   DiracOp::CGflops += vol*24*2;
00074 }
00075 
00076 void wfm::mdagm(Float *chi, 
00077                 Float *u, 
00078                 Float *psi, 
00079                 Float *mp_sq_p,
00080                 Float kappa)
00081 {
00082 
00083 /*--------------------------------------------------------------------------*/
00084 /* Initializations                                                          */
00085 /*--------------------------------------------------------------------------*/
00086   int len =  vol *ND;
00087   Float *tmp1 = spinor_tmp;
00088   Float *tmp2 = tmp1 + SPINOR_SIZE * vol ;
00089   Float sum;
00090   Float mkappasq = -kappa*kappa;
00091 
00092 /*--------------------------------------------------------------------------*/
00093 /* Dslash_E0                                                                */
00094 /*--------------------------------------------------------------------------*/
00095   dslash(tmp1, u, psi, 1, 0);
00096 
00097 /*--------------------------------------------------------------------------*/
00098 /* Dslash_0E                                                                */
00099 /*--------------------------------------------------------------------------*/
00100   dslash(tmp2, u, tmp1, 0, 0);
00101 
00102 /*--------------------------------------------------------------------------*/
00103 /* 1_OO - kappa^2 * Dslash_0E * Dslash_E0                                   */
00104 /*--------------------------------------------------------------------------*/
00105   if(mp_sq_p != 0) {
00106     xaxpy_norm(&mkappasq,tmp2,psi,len,mp_sq_p);
00107     DiracOp::CGflops += vol*24*4;
00108   } else {
00109     xaxpy(&mkappasq,tmp2,psi,len);
00110     DiracOp::CGflops += vol*24*2;
00111   }
00112 
00113 /*--------------------------------------------------------------------------*/
00114 /* DslashDag_E0                                                             */
00115 /*--------------------------------------------------------------------------*/
00116   dslash(tmp1, u, tmp2, 1, 1);
00117 
00118 /*--------------------------------------------------------------------------*/
00119 /* DslashDag_0E                                                             */
00120 /*--------------------------------------------------------------------------*/
00121   dslash(chi, u, tmp1, 0, 1);
00122 
00123 /*--------------------------------------------------------------------------*/
00124 /* [1_OO - kappa * DslashDag_0E * DslashDag_E0] *                           */
00125 /*                                 [1_OO - kappa^2 * Dslash_0E * Dslash_E0] */
00126 /*--------------------------------------------------------------------------*/
00127   xaxpy(&mkappasq,chi,tmp2,len);
00128   DiracOp::CGflops += vol*24*2;
00129 }
00130 
00131 
00132 CPS_END_NAMESPACE
00133 
00134 

Generated on Tue Mar 6 10:57:33 2007 for Columbia Physics System by  doxygen 1.4.6