QUDA  1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
quda::DiracCoarse Class Reference

#include <dirac_quda.h>

Inheritance diagram for quda::DiracCoarse:
Inheritance graph
[legend]
Collaboration diagram for quda::DiracCoarse:
Collaboration graph
[legend]

Public Member Functions

double Mu () const
 
double MuFactor () const
 
 DiracCoarse (const DiracParam &param, bool gpu_setup=true, bool mapped=false)
 
 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)
 
 DiracCoarse (const DiracCoarse &dirac, const DiracParam &param)
 
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...
 
- Public Member Functions inherited from quda::Dirac
 Dirac (const DiracParam &param)
 
 Dirac (const Dirac &dirac)
 
virtual ~Dirac ()
 
Diracoperator= (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
 
- Public Member Functions inherited from quda::Object
 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...
 
- Protected Member Functions inherited from quda::Dirac
bool newTmp (ColorSpinorField **, const ColorSpinorField &) const
 
void deleteTmp (ColorSpinorField **, const bool &reset) const
 

Protected Attributes

double mu
 
double mu_factor
 
const Transfertransfer
 
const Diracdirac
 
const bool need_bidirectional
 
cpuGaugeFieldY_h
 
cpuGaugeFieldX_h
 
cpuGaugeFieldXinv_h
 
cpuGaugeFieldYhat_h
 
cudaGaugeFieldY_d
 
cudaGaugeFieldX_d
 
cudaGaugeFieldXinv_d
 
cudaGaugeFieldYhat_d
 
bool enable_gpu
 
bool enable_cpu
 
const bool gpu_setup
 
bool init_gpu
 
bool init_cpu
 
const bool mapped
 
- Protected Attributes inherited from quda::Dirac
cudaGaugeFieldgauge
 
double kappa
 
double mass
 
int laplace3D
 
QudaMatPCType matpcType
 
QudaDagType dagger
 
unsigned long long flops
 
ColorSpinorFieldtmp1
 
ColorSpinorFieldtmp2
 
QudaDiracType type
 
QudaPrecision halo_precision
 
int commDim [QUDA_MAX_DIM]
 
TimeProfile profile
 

Additional Inherited Members

- Static Public Member Functions inherited from quda::Dirac
static Diraccreate (const DiracParam &param)
 
- Static Public Member Functions inherited from quda::Object
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)
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ DiracCoarse() [1/3]

quda::DiracCoarse::DiracCoarse ( const DiracParam param,
bool  gpu_setup = true,
bool  mapped = false 
)
Parameters
[in]paramParameters defining this operator
[in]gpu_setupWhether to do the setup on GPU or CPU
[in]mappedSet to true to put Y and X fields in mapped memory

Definition at line 7 of file dirac_coarse.cpp.

References initializeCoarse().

Here is the call graph for this function:

◆ DiracCoarse() [2/3]

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 
)
Parameters
[in]paramParameters defining this operator
[in]Y_hCPU coarse link field
[in]X_hCPU coarse clover field
[in]Xinv_hCPU coarse inverse clover field
[in]Yhat_hCPU coarse preconditioned link field
[in]Y_dGPU coarse link field
[in]X_dGPU coarse clover field
[in]Xinv_dGPU coarse inverse clover field
[in]Yhat_dGPU coarse preconditioned link field

Definition at line 32 of file dirac_coarse.cpp.

◆ DiracCoarse() [3/3]

quda::DiracCoarse::DiracCoarse ( const DiracCoarse dirac,
const DiracParam param 
)
Parameters
[in]diracAnother operator instance to clone from (shallow copy)
[in]paramParameters defining this operator

Definition at line 61 of file dirac_coarse.cpp.

◆ ~DiracCoarse()

quda::DiracCoarse::~DiracCoarse ( )
virtual

Definition at line 86 of file dirac_coarse.cpp.

References init_cpu, init_gpu, X_d, X_h, Xinv_d, Xinv_h, Y_d, Y_h, Yhat_d, and Yhat_h.

Member Function Documentation

◆ Clover()

void quda::DiracCoarse::Clover ( ColorSpinorField out,
const ColorSpinorField in,
const QudaParity  parity 
) const

Apply the coarse clover operator.

Parameters
[out]outOutput field
[in]inInput 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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CloverInv()

void quda::DiracCoarse::CloverInv ( ColorSpinorField out,
const ColorSpinorField in,
const QudaParity  parity 
) const

Apply the inverse coarse clover operator.

Parameters
[out]outOutput field
[in]inInput 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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createCoarseOp()

void quda::DiracCoarse::createCoarseOp ( GaugeField Y,
GaugeField X,
const Transfer T,
double  kappa,
double  mass,
double  mu,
double  mu_factor = 0. 
) const
virtual

Create the coarse operator from this coarse operator.

Parameters
T[in]Transfer operator defining the coarse grid
Y[out]Coarse link field
X[out]Coarse clover field
kappaKappa parameter for the coarse operator
massMass parameter (assumed to be zero, staggered mass gets built into clover)
muTM mu parameter for the coarse operator
mu_factormultiplicative 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.

Here is the call graph for this function:

◆ createPreconditionedCoarseOp()

void quda::DiracCoarse::createPreconditionedCoarseOp ( GaugeField Yhat,
GaugeField Xinv,
const GaugeField Y,
const GaugeField X 
)

Create the precondtioned coarse operator.

Parameters
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createY()

void quda::DiracCoarse::createY ( bool  gpu = true,
bool  mapped = false 
) const
protected

Allocate the Y and X fields.

Whether we allocate Y and X GPU fields in mapped memory or not

Parameters
[in]gpuWhether to allocate on gpu (true) or cpu (false)
[in]mappedwhether 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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ createYhat()

void quda::DiracCoarse::createYhat ( bool  gpu = true) const
protected

◆ Dslash()

void quda::DiracCoarse::Dslash ( ColorSpinorField out,
const ColorSpinorField in,
const QudaParity  parity 
) const
virtual

◆ DslashXpay()

void quda::DiracCoarse::DslashXpay ( ColorSpinorField out,
const ColorSpinorField in,
const QudaParity  parity,
const ColorSpinorField x,
const double &  k 
) const
virtual

◆ initializeCoarse()

void quda::DiracCoarse::initializeCoarse ( )
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ initializeLazy()

void quda::DiracCoarse::initializeLazy ( QudaFieldLocation  location) const
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ M()

void quda::DiracCoarse::M ( ColorSpinorField out,
const ColorSpinorField in 
) const
virtual

Apply the full operator.

Parameters
[out]outoutput vector, out = M * in
[in]ininput 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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MdagM()

void quda::DiracCoarse::MdagM ( ColorSpinorField out,
const ColorSpinorField in 
) const
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.

Here is the call graph for this function:

◆ Mu()

double quda::DiracCoarse::Mu ( ) const
inlinevirtual

Reimplemented from quda::Dirac.

Definition at line 862 of file dirac_quda.h.

References quda::DiracParam::mu.

Referenced by initializeCoarse().

Here is the caller graph for this function:

◆ MuFactor()

double quda::DiracCoarse::MuFactor ( ) const
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().

Here is the caller graph for this function:

◆ prepare()

void quda::DiracCoarse::prepare ( ColorSpinorField *&  src,
ColorSpinorField *&  sol,
ColorSpinorField x,
ColorSpinorField b,
const QudaSolutionType  solType 
) const
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.

◆ reconstruct()

void quda::DiracCoarse::reconstruct ( ColorSpinorField x,
const ColorSpinorField b,
const QudaSolutionType  solType 
) const
virtual

Implements quda::Dirac.

Reimplemented in quda::DiracCoarsePC.

Definition at line 335 of file dirac_coarse.cpp.

Member Data Documentation

◆ dirac

const Dirac* quda::DiracCoarse::dirac
protected

restrictor / prolongator defined here

Definition at line 815 of file dirac_quda.h.

Referenced by initializeCoarse().

◆ enable_cpu

bool quda::DiracCoarse::enable_cpu
mutableprotected

Whether the GPU links have been constructed

Definition at line 842 of file dirac_quda.h.

Referenced by initializeCoarse(), and initializeLazy().

◆ enable_gpu

bool quda::DiracCoarse::enable_gpu
mutableprotected

Definition at line 841 of file dirac_quda.h.

Referenced by initializeCoarse(), and initializeLazy().

◆ gpu_setup

const bool quda::DiracCoarse::gpu_setup
protected

Whether the CPU links have been constructed

Definition at line 843 of file dirac_quda.h.

Referenced by initializeCoarse().

◆ init_cpu

bool quda::DiracCoarse::init_cpu
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().

◆ init_gpu

bool quda::DiracCoarse::init_gpu
mutableprotected

Where to do the coarse-operator construction

Definition at line 844 of file dirac_quda.h.

Referenced by initializeCoarse(), initializeLazy(), and ~DiracCoarse().

◆ mapped

const bool quda::DiracCoarse::mapped
protected

Whether this instance did the CPU allocation or not

Definition at line 846 of file dirac_quda.h.

Referenced by initializeCoarse(), and initializeLazy().

◆ mu

double quda::DiracCoarse::mu
protected

Definition at line 812 of file dirac_quda.h.

◆ mu_factor

double quda::DiracCoarse::mu_factor
protected

Definition at line 813 of file dirac_quda.h.

◆ need_bidirectional

const bool quda::DiracCoarse::need_bidirectional
protected

Parent Dirac operator

Definition at line 816 of file dirac_quda.h.

Referenced by createCoarseOp().

◆ transfer

const Transfer* quda::DiracCoarse::transfer
protected

Definition at line 814 of file dirac_quda.h.

Referenced by createY(), createYhat(), and initializeCoarse().

◆ X_d

cudaGaugeField* quda::DiracCoarse::X_d
mutableprotected

◆ X_h

cpuGaugeField* quda::DiracCoarse::X_h
mutableprotected

◆ Xinv_d

cudaGaugeField* quda::DiracCoarse::Xinv_d
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().

◆ Xinv_h

cpuGaugeField* quda::DiracCoarse::Xinv_h
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().

◆ Y_d

cudaGaugeField* quda::DiracCoarse::Y_d
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().

◆ Y_h

cpuGaugeField* quda::DiracCoarse::Y_h
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().

◆ Yhat_d

cudaGaugeField* quda::DiracCoarse::Yhat_d
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().

◆ Yhat_h

cpuGaugeField* quda::DiracCoarse::Yhat_h
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().


The documentation for this class was generated from the following files: