cps::Fclover Class Reference
[Fermion actions]

A class implementing clover improved Wilson fermions. More...

#include <f_wilson_types.h>

Inheritance diagram for cps::Fclover:
[legend]
Collaboration diagram for cps::Fclover:
[legend]

List of all members.

Public Member Functions

 Fclover ()
virtual ~Fclover ()
FclassType Fclass () const
 Returns the type of fermion action.
int FchkbEvl () const
 Determines whether one or both parities are used in the molecular dynamics evolution.
int FmatEvlInv (Vector *f_out, Vector *f_in, CgArg *cg_arg, Float *true_res, CnvFrmType cnv_frm=CNV_FRM_YES)
 The matrix inversion used in the molecular dynamics algorithms.
int FmatEvlMInv (Vector **f_out, Vector *f_in, Float *shift, int Nshift, int isz, CgArg **cg_arg, CnvFrmType cnv_frm, MultiShiftSolveType type, Float *alpha, Vector **f_out_d)
 The matrix inversion used in the molecular dynamics algorithms.
void FminResExt (Vector *sol, Vector *source, Vector **sol_old, Vector **vm, int degree, CgArg *cg_arg, CnvFrmType cnv_frm)
int FmatInv (Vector *f_out, Vector *f_in, CgArg *cg_arg, Float *true_res, CnvFrmType cnv_frm=CNV_FRM_YES, PreserveType prs_f_in=PRESERVE_YES)
 Fermion matrix inversion.
int FeigSolv (Vector **f_eigenv, Float *lambda, LanczosArg *eig_arg, CnvFrmType cnv_frm=CNV_FRM_YES)
 < It solves the eigenvectors and eigenvalues of the fermion matrix using implicitly restarting Lanczos with polynomial accerelation with shifts.
int FeigSolv (Vector **f_eigenv, Float *lambda, Float *chirality, int *valid_eig, Float **hsum, EigArg *eig_arg, CnvFrmType cnv_frm=CNV_FRM_YES)
Float SetPhi (Vector *phi, Vector *frm1, Vector *frm2, Float mass, DagType dag)
 Initialises the pseudofermion field.
ForceArg EvolveMomFforce (Matrix *mom, Vector *frm, Float mass, Float step_size)
 Molecular dynamics evolution due to the fermion force.
ForceArg EvolveMomFforce (Matrix *mom, Vector *phi, Vector *eta, Float mass, Float step_size)
 Molecular dynamics evolution due to the boson part of quotient integrator.
ForceArg RHMC_EvolveMomFforce (Matrix *mom, Vector **sol, int degree, int isz, Float *alpha, Float mass, Float dt, Vector **sol_d, ForceMeasure measure)
Float BhamiltonNode (Vector *boson, Float mass)

Detailed Description

A class implementing clover improved Wilson fermions.

Definition at line 468 of file f_wilson_types.h.


Constructor & Destructor Documentation

cps::Fclover::Fclover (  ) 
cps::Fclover::~Fclover (  )  [virtual]

Member Function Documentation

Float cps::Fclover::BhamiltonNode ( Vector boson,
Float  mass 
) [virtual]
ForceArg cps::Fclover::EvolveMomFforce ( Matrix mom,
Vector phi,
Vector eta,
Float  mass,
Float  step_size 
) [virtual]

Molecular dynamics evolution due to the boson part of quotient integrator.

The momentum is evolved for a single molecular dynamics timestep using the force from the bosonic part of a quotient action.

Parameters:
mom The momentum matrices on all links of the local lattice.
frm The solution of the fermion matrix inverse with the pseudofermion vector source, as computed by FmatEvlInv.
eta The solution of the fermion matrix inverse applied to bosonic operator times the pseudofermion vector source.
mass The BOSON/FERMION mass (not used in staggered fermion classes).
step_size The molecular dynamics timestep used in the numerical integration.
Postcondition:
mom is assigned the value of the momentum after the molecular dynamics evolution.

Implements cps::Lattice.

Definition at line 1344 of file f_clover.C.

References cps::ERR, and cps::Error::General().

Here is the call graph for this function:

ForceArg cps::Fclover::EvolveMomFforce ( Matrix mom,
Vector frm,
Float  mass,
Float  step_size 
) [virtual]

Molecular dynamics evolution due to the fermion force.

The momentum is evolved for a single molecular dynamics timestep using the force from the fermion action.

Parameters:
mom The momentum matrices on all links of the local lattice.
frm The solution of the fermion matrix inverse with the pseudofermion vector source, as computed by FmatEvlInv.
mass The FERMION mass (not used in staggered fermion classes).
step_size The molecular dynamics timestep used in the numerical integration.
Postcondition:
mom is assigned the value of the momentum after the molecular dynamics evolution.

Implements cps::Lattice.

Definition at line 366 of file f_clover.C.

References cps::Lattice::Aux0Ptr(), cps::BND_CND_APRD, cps::DiracOpClover::CalcHmdForceVecs(), cps::clover_mat_mlt(), cps::CNV_FRM_YES, cps::Lattice::Colors(), cps::Matrix::Dagger(), cps::Matrix::DotMEqual(), cps::ERR, cps::FwilsonTypes::FsiteSize(), cps::Verbose::Func(), cps::Lattice::GaugeField(), cps::Error::General(), cps::getPlusData(), cps::GJP, cps::glb_max(), cps::glb_sum(), cps::HALF_CLOVER_MAT_SIZE, cps::CgArg::mass, cps::mat_inv(), cps::MAT_INV_ALG_LDL_CMPR, cps::Matrix::norm(), norm(), cps::Error::Pointer(), cps::sfree(), cps::Verbose::Sfree(), cps::Verbose::Smalloc(), cps::smalloc(), cps::FwilsonTypes::SpinComponents(), cps::FwilsonTypes::sproj_tr, cps::GlobalJobParameter::TnodeBc(), cps::GlobalJobParameter::TnodeSites(), cps::Matrix::TrLessAntiHermMatrix(), cps::GlobalJobParameter::VolNodeSites(), cps::GlobalJobParameter::VolSites(), cps::VRB, cps::GlobalJobParameter::XnodeBc(), cps::GlobalJobParameter::XnodeSites(), cps::GlobalJobParameter::YnodeBc(), cps::GlobalJobParameter::YnodeSites(), cps::GlobalJobParameter::ZnodeBc(), and cps::GlobalJobParameter::ZnodeSites().

Here is the call graph for this function:

int cps::Fclover::FchkbEvl (  )  const [virtual]

Determines whether one or both parities are used in the molecular dynamics evolution.

Are the fields used in the molecular dynamics algorithms defined on the whole lattice or just on sites on one parity?

Returns:
0 if both parities are used, 1 if only one parity is used.

Implements cps::Lattice.

Definition at line 132 of file f_clover.C.

FclassType cps::Fclover::Fclass (  )  const [virtual]

Returns the type of fermion action.

Implements cps::FwilsonTypes.

Definition at line 121 of file f_clover.C.

References cps::F_CLASS_CLOVER.

int cps::Fclover::FeigSolv ( Vector **  f_eigenv,
Float lambda,
Float chirality,
int *  valid_eig,
Float **  hsum,
EigArg eig_arg,
CnvFrmType  cnv_frm = CNV_FRM_YES 
) [virtual]
int cps::Fclover::FeigSolv ( Vector **  f_eigenv,
Float lambda,
LanczosArg eig_arg,
CnvFrmType  cnv_frm = CNV_FRM_YES 
) [inline, virtual]

< It solves the eigenvectors and eigenvalues of the fermion matrix using implicitly restarting Lanczos with polynomial accerelation with shifts.

<

Parameters:
f_eigenv The computed eigenvalues
lambda The corresponding eigenvalues
eig_arg 
cnv_frm Whether the lattice fields need to be converted to to a new storage order appropriate for the type of fermion action. If this is CNV_FRM_NO, then just the gauge field is converted. If this is CNV_FRM_YES, then the fields f_out and f_in are also converted: This assumes they are initially in the same order as the gauge field. Fields that are converted are restored to their original order upon exit of this method. N.B. If the fields are already in the suitable order, then specifying CNV_FRM_YES here has no effect.
Returns:
The number of eigensolver iterations.
Postcondition:
f_eigenv contains the eigenvectors.
lambda contains the eigenvalues.

Currently only impolemented for even/odd preconditioned matrix (extention is easy though). It solves the eigenvectors and eigenvalues of the fermion matrix Using Ritz function minimization.

Parameters:
f_eigenv The computed eigenvalues
lambda The corresponding eigenvalues
chirality eigenvector(i)^dagger gamma_5 eigenvector(i)
valid_eig 
hsum 
eig_arg 
cnv_frm Whether the lattice fields need to be converted to to a new storage order appropriate for the type of fermion action. If this is CNV_FRM_NO, then just the gauge field is converted. If this is CNV_FRM_YES, then the fields f_out and f_in are also converted: This assumes they are initially in the same order as the gauge field. Fields that are converted are restored to their original order upon exit of this method. N.B. If the fields are already in the suitable order, then specifying CNV_FRM_YES here has no effect.
Returns:
The number of eigensolver iterations.
Postcondition:
f_eigenv contains the eigenvectors.
lambda contains the eigenvalues.

Reimplemented from cps::Lattice.

Definition at line 584 of file f_wilson_types.h.

int cps::Fclover::FmatEvlInv ( Vector f_out,
Vector f_in,
CgArg cg_arg,
Float true_res,
CnvFrmType  cnv_frm = CNV_FRM_YES 
) [virtual]

The matrix inversion used in the molecular dynamics algorithms.

Solves $ M^\dagger M f_{out} = f_{in} $ for $ f_{out} $, where M is the (possibly odd-even preconditioned) fermionic matrix.

Parameters:
f_out The initial guess of solution vector.
f_in The source vector
cg_arg The solver parameters
true_res Whether or not to report the true residual. This will point to the true residual if it initially points to a non-zero value.
cnv_frm Whether the lattice fields need to be converted to to a new storage order appropriate for the type of fermion action. If this is CNV_FRM_NO, then just the gauge field is converted. If this is CNV_FRM_YES, then the fields f_out and f_in are also converted: This assumes they are initially in the same order as the gauge field. Fields that are converted are restored to their original order upon exit of this method. N.B. If the fields are already in the suitable order, then specifying CNV_FRM_YES here has no effect.
Returns:
The number of solver iterations.
Postcondition:
f_out contains the solution vector.
true_res The true residual, if this was non-zero to start with. The residual is $ |f_{in} - M^\dagger M f_{out}| / |f_{in}| $.

Implements cps::Lattice.

Definition at line 160 of file f_clover.C.

References cps::Verbose::Func(), cps::DiracOpClover::MatEvlInv(), cps::CgArg::true_rsd, and cps::VRB.

Here is the call graph for this function:

int cps::Fclover::FmatEvlMInv ( Vector **  f_out,
Vector f_in,
Float shift,
int  Nshift,
int  isz,
CgArg **  cg_arg,
CnvFrmType  cnv_frm,
MultiShiftSolveType  type,
Float alpha,
Vector **  f_out_d 
) [virtual]

The matrix inversion used in the molecular dynamics algorithms.

Solves $ (M^\dagger M + shift) f_{out} = f_{in} $ for $ f_{out} $, where M is the (possibly odd-even preconditioned) fermionic matrix.

Parameters:
f_out The solution vectors.
f_in The source vector
shift The shifts of the fermion matrix.
Nshift The number of shifts
isz The smallest shift (required by MInvCG)
cg_arg The solver parameters
cnv_frm Whether the lattice fields need to be converted to to a new storage order appropriate for the type of fermion action. If this is CNV_FRM_NO, then just the gauge field is converted. If this is CNV_FRM_YES, then the fields f_out and f_in are also converted: This assumes they are initially in the same order as the gauge field. Fields that are converted are restored to their original order upon exit of this method. N.B. If the fields are already in the suitable order, then specifying CNV_FRM_YES here has no effect.
type The type of multimass inverter. If type == MULTI, then regular multishift inversion is performed, each solution stored separately. If type == SINGLE, the there is a single solution vector, and each solution is summed to this vector with amount alpha.
alpha The contribution of each shifted solution to the total solution vector
f_out_d ?
Returns:
The number of solver iterations.
Postcondition:
f_out contains the solution vector.

Implements cps::Lattice.

Definition at line 180 of file f_clover.C.

References cps::ERR, cps::Verbose::Func(), cps::Error::NotImplemented(), and cps::VRB.

Here is the call graph for this function:

int cps::Fclover::FmatInv ( Vector f_out,
Vector f_in,
CgArg cg_arg,
Float true_res,
CnvFrmType  cnv_frm = CNV_FRM_YES,
PreserveType  prs_f_in = PRESERVE_YES 
) [virtual]

Fermion matrix inversion.

Solves A f_out = f_in for f_out, where A is the fermion matrix. The vectors must be defined on the whole lattice, not just on sites of a single parity.

Parameters:
f_out The initial guess of solution vector.
f_in The source vector
cg_arg The solver parameters for each shift
true_res Whether or not to report the true residual. The true residual will be written here if this is non-zero.
cnv_frm Whether the lattice fields need to be converted to to a new storage order appropriate for the type of fermion action. If this is CNV_FRM_NO, then just the gauge field is converted. If this is CNV_FRM_YES, then the fields f_out and f_in are also converted: This assumes they are initially in the same order as the gauge field. Fields that are converted are restored to their original order upon exit of this method. N.B. If the fields are already in the suitable order, then specifying CNV_FRM_YES here has no effect.
prs_f_in Whether or not the source vector is allowed to be overwritten, thereby saving memory. For staggered fermions f_in is preserved regardless of the value of prs_f_in.
Returns:
The number of solver iterations.
Postcondition:
f_out contains the solution vector.
true_res contains the true residual, if it was non-zero to start with. The residual is |f_in - A f_out| / |f_in|

Implements cps::Lattice.

Definition at line 234 of file f_clover.C.

References cps::Verbose::Func(), cps::DiracOpClover::MatInv(), and cps::VRB.

Here is the call graph for this function:

void cps::Fclover::FminResExt ( Vector sol,
Vector source,
Vector **  sol_old,
Vector **  vm,
int  degree,
CgArg cg_arg,
CnvFrmType  cnv_frm 
) [virtual]

Implements cps::Lattice.

Definition at line 192 of file f_clover.C.

References cps::Verbose::Func(), cps::DiracOp::MinResExt(), and cps::VRB.

Here is the call graph for this function:

ForceArg cps::Fclover::RHMC_EvolveMomFforce ( Matrix mom,
Vector **  sol,
int  degree,
int  isz,
Float alpha,
Float  mass,
Float  dt,
Vector **  sol_d,
ForceMeasure  measure 
) [virtual]

Implements cps::Lattice.

Definition at line 651 of file f_clover.C.

References cps::ERR, and cps::Error::General().

Here is the call graph for this function:

Float cps::Fclover::SetPhi ( Vector phi,
Vector frm1,
Vector frm2,
Float  mass,
DagType  dag 
) [virtual]

Initialises the pseudofermion field.

The heatbath initialisation of the pseudofermion field is done by setting $ \phi = M^\dagger \eta $ where $ \eta $ is a zero mean, unit variance random gaussian field. The pseudofermion field may be computed on a single parity only.

Precondition:
The random field must already be initialised.
Parameters:
phi The pseudofermion field.
frm1 A random field, possibly on a single parity.
frm2 Another random field, or possibly workspace.
mass The mass parameter of the fermion matrix.
dag Whether DAG_YES or DAG_NO is applied
Returns:
The value of the pseudofermionic action on this node (only works for Wilson type fermions).

Implements cps::Lattice.

Definition at line 318 of file f_clover.C.

References cps::Lattice::Aux0Ptr(), cps::CANONICAL, cps::clover_mat_mlt(), cps::CNV_FRM_NO, cps::DAG_YES, cps::ERR, cps::FwilsonTypes::Fconvert(), cps::FwilsonTypes::FhamiltonNode(), cps::FwilsonTypes::FsiteSize(), cps::Verbose::Func(), cps::GJP, cps::HALF_CLOVER_MAT_SIZE, cps::CgArg::mass, cps::mat_inv(), cps::MAT_INV_ALG_LDL_CMPR, cps::DiracOpClover::MatPc(), cps::DiracOpClover::MatPcDag(), cps::Error::Pointer(), cps::GlobalJobParameter::VolNodeSites(), cps::VRB, and cps::WILSON.

Here is the call graph for this function:


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

Generated on 19 Mar 2015 for Columbia Physics System by  doxygen 1.6.1