QUDA
1.0.0
|
#include <dirac_quda.h>
Public Member Functions | |
double | Mu () const |
double | MuFactor () const |
DiracCoarse (const DiracParam ¶m, bool gpu_setup=true, bool mapped=false) | |
DiracCoarse (const DiracParam ¶m, cpuGaugeField *Y_h, cpuGaugeField *X_h, cpuGaugeField *Xinv_h, cpuGaugeField *Yhat_h, cudaGaugeField *Y_d=0, cudaGaugeField *X_d=0, cudaGaugeField *Xinv_d=0, cudaGaugeField *Yhat_d=0) | |
DiracCoarse (const DiracCoarse &dirac, const DiracParam ¶m) | |
virtual | ~DiracCoarse () |
void | Clover (ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const |
Apply the coarse clover operator. More... | |
void | CloverInv (ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const |
Apply the inverse coarse clover operator. More... | |
virtual void | Dslash (ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity) const |
Apply DslashXpay out = (D * in) More... | |
virtual void | DslashXpay (ColorSpinorField &out, const ColorSpinorField &in, const QudaParity parity, const ColorSpinorField &x, const double &k) const |
Apply DslashXpay out = (D * in + A * x) More... | |
virtual void | M (ColorSpinorField &out, const ColorSpinorField &in) const |
Apply the full operator. More... | |
virtual void | MdagM (ColorSpinorField &out, const ColorSpinorField &in) const |
virtual void | prepare (ColorSpinorField *&src, ColorSpinorField *&sol, ColorSpinorField &x, ColorSpinorField &b, const QudaSolutionType) const |
virtual void | reconstruct (ColorSpinorField &x, const ColorSpinorField &b, const QudaSolutionType) const |
void | createCoarseOp (GaugeField &Y, GaugeField &X, const Transfer &T, double kappa, double mass, double mu, double mu_factor=0.) const |
Create the coarse operator from this coarse operator. More... | |
void | createPreconditionedCoarseOp (GaugeField &Yhat, GaugeField &Xinv, const GaugeField &Y, const GaugeField &X) |
Create the precondtioned coarse operator. More... | |
![]() | |
Dirac (const DiracParam ¶m) | |
Dirac (const Dirac &dirac) | |
virtual | ~Dirac () |
Dirac & | operator= (const Dirac &dirac) |
void | setCommDim (const int commDim_[QUDA_MAX_DIM]) const |
Enable / disable communications for the Dirac operator. More... | |
virtual void | checkParitySpinor (const ColorSpinorField &, const ColorSpinorField &) const |
virtual void | checkFullSpinor (const ColorSpinorField &, const ColorSpinorField &) const |
void | checkSpinorAlias (const ColorSpinorField &, const ColorSpinorField &) const |
void | Mdag (ColorSpinorField &out, const ColorSpinorField &in) const |
void | MMdag (ColorSpinorField &out, const ColorSpinorField &in) const |
void | setMass (double mass) |
double | Kappa () const |
unsigned long long | Flops () const |
QudaMatPCType | getMatPCType () const |
int | getStencilSteps () const |
void | Dagger (QudaDagType dag) const |
void | flipDagger () const |
QudaPrecision | HaloPrecision () const |
void | setHaloPrecision (QudaPrecision halo_precision_) const |
![]() | |
Object () | |
virtual | ~Object () |
Protected Member Functions | |
void | initializeCoarse () |
Initialize the coarse gauge fields. Location is determined by gpu_setup variable. More... | |
void | initializeLazy (QudaFieldLocation location) const |
Create the CPU or GPU coarse gauge fields on demand (requires that the fields have been created in the other memory space) More... | |
void | createY (bool gpu=true, bool mapped=false) const |
Allocate the Y and X fields. More... | |
void | createYhat (bool gpu=true) const |
Allocate the Yhat and Xinv fields. More... | |
![]() | |
bool | newTmp (ColorSpinorField **, const ColorSpinorField &) const |
void | deleteTmp (ColorSpinorField **, const bool &reset) const |
Protected Attributes | |
double | mu |
double | mu_factor |
const Transfer * | transfer |
const Dirac * | dirac |
const bool | need_bidirectional |
cpuGaugeField * | Y_h |
cpuGaugeField * | X_h |
cpuGaugeField * | Xinv_h |
cpuGaugeField * | Yhat_h |
cudaGaugeField * | Y_d |
cudaGaugeField * | X_d |
cudaGaugeField * | Xinv_d |
cudaGaugeField * | Yhat_d |
bool | enable_gpu |
bool | enable_cpu |
const bool | gpu_setup |
bool | init_gpu |
bool | init_cpu |
const bool | mapped |
![]() | |
cudaGaugeField * | gauge |
double | kappa |
double | mass |
int | laplace3D |
QudaMatPCType | matpcType |
QudaDagType | dagger |
unsigned long long | flops |
ColorSpinorField * | tmp1 |
ColorSpinorField * | tmp2 |
QudaDiracType | type |
QudaPrecision | halo_precision |
int | commDim [QUDA_MAX_DIM] |
TimeProfile | profile |
Additional Inherited Members | |
![]() | |
static Dirac * | create (const DiracParam ¶m) |
![]() | |
static void * | operator new (std::size_t size) |
static void | operator delete (void *p) |
static void * | operator new[] (std::size_t size) |
static void | operator delete[] (void *p) |
This class serves as a front-end to the coarse Dslash operator, similar to the other dslash operators.
Definition at line 809 of file dirac_quda.h.
quda::DiracCoarse::DiracCoarse | ( | const DiracParam & | param, |
bool | gpu_setup = true , |
||
bool | mapped = false |
||
) |
[in] | param | Parameters defining this operator |
[in] | gpu_setup | Whether to do the setup on GPU or CPU |
[in] | mapped | Set to true to put Y and X fields in mapped memory |
Definition at line 7 of file dirac_coarse.cpp.
References initializeCoarse().
quda::DiracCoarse::DiracCoarse | ( | const DiracParam & | param, |
cpuGaugeField * | Y_h, | ||
cpuGaugeField * | X_h, | ||
cpuGaugeField * | Xinv_h, | ||
cpuGaugeField * | Yhat_h, | ||
cudaGaugeField * | Y_d = 0 , |
||
cudaGaugeField * | X_d = 0 , |
||
cudaGaugeField * | Xinv_d = 0 , |
||
cudaGaugeField * | Yhat_d = 0 |
||
) |
[in] | param | Parameters defining this operator |
[in] | Y_h | CPU coarse link field |
[in] | X_h | CPU coarse clover field |
[in] | Xinv_h | CPU coarse inverse clover field |
[in] | Yhat_h | CPU coarse preconditioned link field |
[in] | Y_d | GPU coarse link field |
[in] | X_d | GPU coarse clover field |
[in] | Xinv_d | GPU coarse inverse clover field |
[in] | Yhat_d | GPU coarse preconditioned link field |
Definition at line 32 of file dirac_coarse.cpp.
quda::DiracCoarse::DiracCoarse | ( | const DiracCoarse & | dirac, |
const DiracParam & | param | ||
) |
[in] | dirac | Another operator instance to clone from (shallow copy) |
[in] | param | Parameters defining this operator |
Definition at line 61 of file dirac_coarse.cpp.
|
virtual |
void quda::DiracCoarse::Clover | ( | ColorSpinorField & | out, |
const ColorSpinorField & | in, | ||
const QudaParity | parity | ||
) | const |
Apply the coarse clover operator.
[out] | out | Output field |
[in] | in | Input field |
Definition at line 240 of file dirac_coarse.cpp.
References quda::ApplyCoarse(), checkLocation, quda::Dirac::commDim, quda::Dirac::dagger, errorQuda, quda::Dirac::flops, initializeLazy(), quda::Dirac::kappa, quda::ColorSpinorField::Ncolor(), quda::ColorSpinorField::Nspin(), QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, quda::ColorSpinorField::VolumeCB(), X_d, X_h, Y_d, and Y_h.
Referenced by benchmark(), and quda::DiracCoarsePC::M().
void quda::DiracCoarse::CloverInv | ( | ColorSpinorField & | out, |
const ColorSpinorField & | in, | ||
const QudaParity | parity | ||
) | const |
Apply the inverse coarse clover operator.
[out] | out | Output field |
[in] | in | Input field |
Definition at line 254 of file dirac_coarse.cpp.
References quda::ApplyCoarse(), checkLocation, quda::Dirac::commDim, quda::Dirac::dagger, errorQuda, quda::Dirac::flops, initializeLazy(), quda::Dirac::kappa, quda::ColorSpinorField::Ncolor(), quda::ColorSpinorField::Nspin(), QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, quda::ColorSpinorField::VolumeCB(), Xinv_d, Xinv_h, Y_d, and Y_h.
Referenced by quda::DiracCoarsePC::prepare(), and quda::DiracCoarsePC::reconstruct().
|
virtual |
Create the coarse operator from this coarse operator.
T[in] | Transfer operator defining the coarse grid |
Y[out] | Coarse link field |
X[out] | Coarse clover field |
kappa | Kappa parameter for the coarse operator |
mass | Mass parameter (assumed to be zero, staggered mass gets built into clover) |
mu | TM mu parameter for the coarse operator |
mu_factor | multiplicative factor for the mu parameter |
Reimplemented from quda::Dirac.
Reimplemented in quda::DiracCoarsePC.
Definition at line 342 of file dirac_coarse.cpp.
References checkLocation, quda::CoarseCoarseOp(), initializeLazy(), need_bidirectional, QUDA_COARSE_DIRAC, QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, QUDA_MATPC_INVALID, quda::ColorSpinorField::TwistFlavor(), quda::Transfer::Vectors(), X_d, X_h, Xinv_d, Xinv_h, Y_d, and Y_h.
void quda::DiracCoarse::createPreconditionedCoarseOp | ( | GaugeField & | Yhat, |
GaugeField & | Xinv, | ||
const GaugeField & | Y, | ||
const GaugeField & | X | ||
) |
Create the precondtioned coarse operator.
Yhat[out] | Preconditioned coarse link field |
Xinv[out] | Coarse clover inversefield |
Y[in] | Coarse link field |
X[in] | Coarse clover inverse field |
Definition at line 236 of file dirac_coarse.cpp.
References quda::calculateYhat().
Referenced by initializeCoarse().
|
protected |
Allocate the Y and X fields.
Whether we allocate Y and X GPU fields in mapped memory or not
[in] | gpu | Whether to allocate on gpu (true) or cpu (false) |
[in] | mapped | whether to put gpu allocations into mapped memory |
Definition at line 102 of file dirac_coarse.cpp.
References quda::GaugeFieldParam::create, quda::Transfer::Geo_bs(), quda::GaugeFieldParam::geometry, quda::LatticeFieldParam::ghostExchange, gParam, quda::GaugeFieldParam::link_type, quda::LatticeFieldParam::mem_type, quda::GaugeFieldParam::nColor, ndim, quda::LatticeFieldParam::nDim, quda::ColorSpinorField::Ndim(), quda::GaugeFieldParam::nFace, quda::ColorSpinorField::Nspin(), quda::Transfer::NullPrecision(), quda::Transfer::nvec(), quda::GaugeFieldParam::order, quda::LatticeFieldParam::pad, QUDA_COARSE_GEOMETRY, QUDA_COARSE_LINKS, QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, QUDA_FLOAT2_GAUGE_ORDER, QUDA_FULL_SITE_SUBSET, QUDA_GHOST_EXCHANGE_NO, QUDA_GHOST_EXCHANGE_PAD, QUDA_MAX_DIM, QUDA_MEMORY_MAPPED, QUDA_PERIODIC_T, QUDA_QDP_GAUGE_ORDER, QUDA_RECONSTRUCT_NO, QUDA_SCALAR_GEOMETRY, QUDA_ZERO_FIELD_CREATE, quda::GaugeFieldParam::reconstruct, quda::GaugeFieldParam::setPrecision(), quda::LatticeFieldParam::siteSubset, quda::Transfer::Spin_bs(), quda::GaugeFieldParam::t_boundary, transfer, quda::Transfer::Vectors(), quda::LatticeFieldParam::x, quda::ColorSpinorField::X(), X_d, X_h, Y_d, and Y_h.
Referenced by initializeCoarse(), and initializeLazy().
|
protected |
Allocate the Yhat and Xinv fields.
[in] | gpu | Whether to allocate on gpu (true) or cpu (false) |
Definition at line 142 of file dirac_coarse.cpp.
References quda::GaugeFieldParam::create, quda::Transfer::Geo_bs(), quda::GaugeFieldParam::geometry, quda::LatticeFieldParam::ghostExchange, gParam, quda::GaugeFieldParam::link_type, quda::GaugeFieldParam::nColor, ndim, quda::LatticeFieldParam::nDim, quda::ColorSpinorField::Ndim(), quda::GaugeFieldParam::nFace, quda::ColorSpinorField::Nspin(), quda::Transfer::NullPrecision(), quda::Transfer::nvec(), quda::GaugeFieldParam::order, quda::LatticeFieldParam::pad, quda::LatticeField::Precision(), QUDA_COARSE_GEOMETRY, QUDA_COARSE_LINKS, QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, QUDA_FLOAT2_GAUGE_ORDER, QUDA_FULL_SITE_SUBSET, QUDA_GHOST_EXCHANGE_NO, QUDA_GHOST_EXCHANGE_PAD, QUDA_MAX_DIM, QUDA_PERIODIC_T, QUDA_QDP_GAUGE_ORDER, QUDA_RECONSTRUCT_NO, QUDA_SCALAR_GEOMETRY, QUDA_ZERO_FIELD_CREATE, quda::GaugeFieldParam::reconstruct, quda::GaugeFieldParam::setPrecision(), quda::LatticeFieldParam::siteSubset, quda::Transfer::Spin_bs(), quda::GaugeFieldParam::t_boundary, transfer, quda::Transfer::Vectors(), quda::LatticeFieldParam::x, quda::ColorSpinorField::X(), X_d, X_h, Xinv_d, Xinv_h, Yhat_d, and Yhat_h.
Referenced by initializeCoarse(), and initializeLazy().
|
virtual |
Apply DslashXpay out = (D * in)
[out] | out | Output field |
[in] | in | Input field |
Implements quda::Dirac.
Reimplemented in quda::DiracCoarsePC.
Definition at line 268 of file dirac_coarse.cpp.
References quda::ApplyCoarse(), checkLocation, quda::Dirac::commDim, quda::Dirac::dagger, quda::Dirac::flops, quda::Dirac::halo_precision, initializeLazy(), quda::Dirac::kappa, quda::ColorSpinorField::Ncolor(), quda::ColorSpinorField::Nspin(), QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, quda::ColorSpinorField::SiteSubset(), quda::ColorSpinorField::VolumeCB(), X_d, X_h, Y_d, and Y_h.
Referenced by benchmark(), quda::DiracCoarsePC::M(), quda::DiracCoarsePC::prepare(), and quda::DiracCoarsePC::reconstruct().
|
virtual |
Apply DslashXpay out = (D * in + A * x)
[out] | out | Output field |
[in] | in | Input field |
Implements quda::Dirac.
Reimplemented in quda::DiracCoarsePC.
Definition at line 282 of file dirac_coarse.cpp.
References quda::ApplyCoarse(), checkLocation, quda::Dirac::commDim, quda::Dirac::dagger, errorQuda, quda::Dirac::flops, quda::Dirac::halo_precision, initializeLazy(), quda::Dirac::kappa, quda::ColorSpinorField::Ncolor(), quda::ColorSpinorField::Nspin(), QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, quda::ColorSpinorField::SiteSubset(), quda::ColorSpinorField::VolumeCB(), X_d, X_h, Y_d, and Y_h.
|
protected |
Initialize the coarse gauge fields. Location is determined by gpu_setup variable.
GPU copy of the preconditioned coarse link field
Definition at line 183 of file dirac_coarse.cpp.
References quda::Dirac::createCoarseOp(), createPreconditionedCoarseOp(), createY(), createYhat(), dirac, enable_cpu, enable_gpu, gpu_setup, init_cpu, init_gpu, quda::Dirac::kappa, mapped, quda::Dirac::mass, Mu(), MuFactor(), transfer, X_d, X_h, Xinv_d, Xinv_h, Y_d, Y_h, Yhat_d, and Yhat_h.
Referenced by DiracCoarse().
|
protected |
Create the CPU or GPU coarse gauge fields on demand (requires that the fields have been created in the other memory space)
Definition at line 205 of file dirac_coarse.cpp.
References quda::cudaGaugeField::copy(), quda::cpuGaugeField::copy(), createY(), createYhat(), enable_cpu, enable_gpu, errorQuda, init_cpu, init_gpu, mapped, QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, X_d, X_h, Xinv_d, Xinv_h, Y_d, Y_h, Yhat_d, and Yhat_h.
Referenced by Clover(), CloverInv(), createCoarseOp(), quda::DiracCoarsePC::createCoarseOp(), Dslash(), quda::DiracCoarsePC::Dslash(), DslashXpay(), and M().
|
virtual |
Apply the full operator.
[out] | out | output vector, out = M * in |
[in] | in | input vector |
Implements quda::Dirac.
Reimplemented in quda::DiracCoarsePC.
Definition at line 299 of file dirac_coarse.cpp.
References quda::ApplyCoarse(), checkLocation, quda::Dirac::commDim, quda::Dirac::dagger, quda::Dirac::flops, quda::Dirac::halo_precision, initializeLazy(), quda::Dirac::kappa, quda::ColorSpinorField::Ncolor(), quda::ColorSpinorField::Nspin(), QUDA_CPU_FIELD_LOCATION, QUDA_CUDA_FIELD_LOCATION, QUDA_INVALID_PARITY, quda::ColorSpinorField::SiteSubset(), quda::ColorSpinorField::VolumeCB(), X_d, X_h, Y_d, and Y_h.
Referenced by benchmark(), and MdagM().
|
virtual |
Implements quda::Dirac.
Reimplemented in quda::DiracCoarsePC.
Definition at line 312 of file dirac_coarse.cpp.
References quda::Dirac::deleteTmp(), errorQuda, M(), quda::Dirac::Mdag(), quda::Dirac::newTmp(), QUDA_FULL_SITE_SUBSET, quda::ColorSpinorField::SiteSubset(), and quda::Dirac::tmp1.
|
inlinevirtual |
Reimplemented from quda::Dirac.
Definition at line 862 of file dirac_quda.h.
References quda::DiracParam::mu.
Referenced by initializeCoarse().
|
inlinevirtual |
Reimplemented from quda::Dirac.
Definition at line 863 of file dirac_quda.h.
References in, quda::DiracParam::kappa, quda::DiracParam::mass, quda::DiracParam::mu_factor, out, param, parity, and X.
Referenced by initializeCoarse().
|
virtual |
Implements quda::Dirac.
Reimplemented in quda::DiracCoarsePC.
Definition at line 323 of file dirac_coarse.cpp.
References errorQuda, QUDA_MATPC_SOLUTION, and QUDA_MATPCDAG_MATPC_SOLUTION.
|
virtual |
Implements quda::Dirac.
Reimplemented in quda::DiracCoarsePC.
Definition at line 335 of file dirac_coarse.cpp.
|
protected |
restrictor / prolongator defined here
Definition at line 815 of file dirac_quda.h.
Referenced by initializeCoarse().
|
mutableprotected |
Whether the GPU links have been constructed
Definition at line 842 of file dirac_quda.h.
Referenced by initializeCoarse(), and initializeLazy().
|
mutableprotected |
Definition at line 841 of file dirac_quda.h.
Referenced by initializeCoarse(), and initializeLazy().
|
protected |
Whether the CPU links have been constructed
Definition at line 843 of file dirac_quda.h.
Referenced by initializeCoarse().
|
mutableprotected |
Whether this instance did the GPU allocation or not
Definition at line 845 of file dirac_quda.h.
Referenced by initializeCoarse(), initializeLazy(), and ~DiracCoarse().
|
mutableprotected |
Where to do the coarse-operator construction
Definition at line 844 of file dirac_quda.h.
Referenced by initializeCoarse(), initializeLazy(), and ~DiracCoarse().
|
protected |
Whether this instance did the CPU allocation or not
Definition at line 846 of file dirac_quda.h.
Referenced by initializeCoarse(), and initializeLazy().
|
protected |
Definition at line 812 of file dirac_quda.h.
|
protected |
Definition at line 813 of file dirac_quda.h.
|
protected |
|
protected |
Definition at line 814 of file dirac_quda.h.
Referenced by createY(), createYhat(), and initializeCoarse().
|
mutableprotected |
GPU copy of the coarse link field
Definition at line 824 of file dirac_quda.h.
Referenced by Clover(), createCoarseOp(), quda::DiracCoarsePC::createCoarseOp(), createY(), createYhat(), Dslash(), quda::DiracCoarsePC::Dslash(), DslashXpay(), initializeCoarse(), initializeLazy(), M(), and ~DiracCoarse().
|
mutableprotected |
CPU copy of the coarse link field
Definition at line 819 of file dirac_quda.h.
Referenced by Clover(), createCoarseOp(), quda::DiracCoarsePC::createCoarseOp(), createY(), createYhat(), Dslash(), quda::DiracCoarsePC::Dslash(), DslashXpay(), initializeCoarse(), initializeLazy(), M(), and ~DiracCoarse().
|
mutableprotected |
GPU copy of the coarse clover term
Definition at line 825 of file dirac_quda.h.
Referenced by CloverInv(), createCoarseOp(), quda::DiracCoarsePC::createCoarseOp(), createYhat(), initializeCoarse(), initializeLazy(), and ~DiracCoarse().
|
mutableprotected |
CPU copy of the coarse clover term
Definition at line 820 of file dirac_quda.h.
Referenced by CloverInv(), createCoarseOp(), quda::DiracCoarsePC::createCoarseOp(), createYhat(), initializeCoarse(), initializeLazy(), and ~DiracCoarse().
|
mutableprotected |
CPU copy of the preconditioned coarse link field
Definition at line 823 of file dirac_quda.h.
Referenced by Clover(), CloverInv(), createCoarseOp(), createY(), Dslash(), DslashXpay(), initializeCoarse(), initializeLazy(), M(), and ~DiracCoarse().
|
mutableprotected |
Whether or not to force a bi-directional build
Definition at line 818 of file dirac_quda.h.
Referenced by Clover(), CloverInv(), createCoarseOp(), createY(), Dslash(), DslashXpay(), initializeCoarse(), initializeLazy(), M(), and ~DiracCoarse().
|
mutableprotected |
GPU copy of inverse coarse clover term
Definition at line 826 of file dirac_quda.h.
Referenced by quda::DiracCoarsePC::createCoarseOp(), createYhat(), quda::DiracCoarsePC::Dslash(), initializeCoarse(), initializeLazy(), and ~DiracCoarse().
|
mutableprotected |
CPU copy of the inverse coarse clover term
Definition at line 821 of file dirac_quda.h.
Referenced by quda::DiracCoarsePC::createCoarseOp(), createYhat(), quda::DiracCoarsePC::Dslash(), initializeCoarse(), initializeLazy(), and ~DiracCoarse().