void dslashRef() { // FIXME: remove once reference clover is finished if (dslash_type == QUDA_CLOVER_WILSON_DSLASH) { if (inv_param.matpc_type == QUDA_MATPC_EVEN_EVEN_ASYMMETRIC) { inv_param.matpc_type = QUDA_MATPC_EVEN_EVEN; } else if (inv_param.matpc_type == QUDA_MATPC_ODD_ODD_ASYMMETRIC) { inv_param.matpc_type = QUDA_MATPC_ODD_ODD; } } // compare to dslash reference implementation printfQuda("Calculating reference implementation..."); fflush(stdout); if (dslash_type == QUDA_CLOVER_WILSON_DSLASH || dslash_type == QUDA_WILSON_DSLASH) { switch (test_type) { case 0: wil_dslash(spinorRef->V(), hostGauge, spinor->V(), parity, dagger, inv_param.cpu_prec, gauge_param); break; case 1: wil_matpc(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.matpc_type, dagger, inv_param.cpu_prec, gauge_param); break; case 2: wil_mat(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, dagger, inv_param.cpu_prec, gauge_param); break; default: printfQuda("Test type not defined\n"); exit(-1); } } else { // twisted mass switch (test_type) { case 0: tm_dslash(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, parity, dagger, inv_param.cpu_prec, gauge_param); break; case 1: tm_matpc(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, inv_param.matpc_type, dagger, inv_param.cpu_prec, gauge_param); break; case 2: tm_mat(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, dagger, inv_param.cpu_prec, gauge_param); break; default: printfQuda("Test type not defined\n"); exit(-1); } } printfQuda("done.\n"); }
void dslashRef() { // compare to dslash reference implementation printfQuda("Calculating reference implementation..."); fflush(stdout); if (dslash_type == QUDA_CLOVER_WILSON_DSLASH || dslash_type == QUDA_WILSON_DSLASH) { switch (test_type) { case 0: wil_dslash(spinorRef->V(), hostGauge, spinor->V(), parity, dagger, inv_param.cpu_prec, gauge_param); break; case 1: wil_matpc(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.matpc_type, dagger, inv_param.cpu_prec, gauge_param); break; case 2: wil_mat(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, dagger, inv_param.cpu_prec, gauge_param); break; case 3: wil_matpc(spinorTmp->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.matpc_type, QUDA_DAG_NO, inv_param.cpu_prec, gauge_param); wil_matpc(spinorRef->V(), hostGauge, spinorTmp->V(), inv_param.kappa, inv_param.matpc_type, QUDA_DAG_YES, inv_param.cpu_prec, gauge_param); break; case 4: wil_mat(spinorTmp->V(), hostGauge, spinor->V(), inv_param.kappa, QUDA_DAG_NO, inv_param.cpu_prec, gauge_param); wil_mat(spinorRef->V(), hostGauge, spinorTmp->V(), inv_param.kappa, QUDA_DAG_YES, inv_param.cpu_prec, gauge_param); break; default: printfQuda("Test type not defined\n"); exit(-1); } } else if (dslash_type == QUDA_TWISTED_MASS_DSLASH) { switch (test_type) { case 0: tm_dslash(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, parity, dagger, inv_param.cpu_prec, gauge_param); break; case 1: tm_matpc(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, inv_param.matpc_type, dagger, inv_param.cpu_prec, gauge_param); break; case 2: tm_mat(spinorRef->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, dagger, inv_param.cpu_prec, gauge_param); break; case 3: tm_matpc(spinorTmp->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, inv_param.matpc_type, QUDA_DAG_NO, inv_param.cpu_prec, gauge_param); tm_matpc(spinorRef->V(), hostGauge, spinorTmp->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, inv_param.matpc_type, QUDA_DAG_YES, inv_param.cpu_prec, gauge_param); break; case 4: tm_mat(spinorTmp->V(), hostGauge, spinor->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, QUDA_DAG_NO, inv_param.cpu_prec, gauge_param); tm_mat(spinorRef->V(), hostGauge, spinorTmp->V(), inv_param.kappa, inv_param.mu, inv_param.twist_flavor, QUDA_DAG_YES, inv_param.cpu_prec, gauge_param); break; default: printfQuda("Test type not defined\n"); exit(-1); } } else if (dslash_type == QUDA_DOMAIN_WALL_DSLASH) { switch (test_type) { case 0: dw_dslash(spinorRef->V(), hostGauge, spinor->V(), parity, dagger, gauge_param.cpu_prec, gauge_param, inv_param.mass); break; case 1: dw_matpc(spinorRef->V(), hostGauge, spinor->V(), kappa5, inv_param.matpc_type, dagger, gauge_param.cpu_prec, gauge_param, inv_param.mass); break; case 2: dw_mat(spinorRef->V(), hostGauge, spinor->V(), kappa5, dagger, gauge_param.cpu_prec, gauge_param, inv_param.mass); break; case 3: dw_matdagmat(spinorRef->V(), hostGauge, spinor->V(), kappa5, dagger, gauge_param.cpu_prec, gauge_param, inv_param.mass); break; default: printf("Test type not supported for domain wall\n"); exit(-1); } } else { printfQuda("Unsupported dslash_type\n"); exit(-1); } printfQuda("done.\n"); }