aniso_sym_temporal_gaugeact.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // $Id: aniso_sym_temporal_gaugeact.h,v 3.2 2007/05/24 19:36:05 bjoo Exp $
00003 /*! \file
00004  *  \brief Temporal Part of Tree Level LW gauge action
00005  *
00006  */
00007 
00008 #ifndef __aniso_sym_temporal_gaugeact_h__
00009 #define __aniso_sym_temporal_gaugeact_h__
00010 
00011 #include "gaugeact.h"
00012 #include "gaugebc.h"
00013 #include "actions/gauge/gaugeacts/plaq_gaugeact.h"
00014 #include "actions/gauge/gaugeacts/rect_gaugeact.h"
00015 #include "actions/gauge/gaugeacts/aniso_sym_gaugeact_params.h"
00016 
00017 
00018 namespace Chroma
00019 {
00020 
00021   /*! @ingroup gaugeacts */
00022   namespace AnisoSymTemporalGaugeActEnv 
00023   {
00024     extern const string name;
00025     bool registerAll();
00026   }
00027 
00028   //! Temporal anisotropic Symanzik improved gauge action
00029   /*! \ingroup gaugeacts
00030    *
00031    *   Contains space-space plaquette and space space rectangle terms
00032    *   only. Useful for when one wants to split the spatial and temporal
00033    *   parts of the general Symanzik gauge action onto different timescales
00034    *   in an (R)HMC simulation.
00035    */
00036 
00037   class AnisoSymTemporalGaugeAct : public LinearGaugeAction
00038   {
00039   public:
00040     // Typedefs to save typing
00041     typedef multi1d<LatticeColorMatrix>  P;
00042     typedef multi1d<LatticeColorMatrix>  Q;
00043 
00044     //! Read beta from a param struct
00045     AnisoSymTemporalGaugeAct(Handle< CreateGaugeState<P,Q> > cgs_, 
00046                           const AnisoSymGaugeActParams& p) :
00047     cgs(cgs_),  param(p) {init();}
00048 
00049     //! Is anisotropy used?
00050     bool anisoP() const {return param.aniso.anisoP; }
00051 
00052     //! Anisotropy factor
00053     const Real anisoFactor() const {return param.aniso.xi_0;}
00054 
00055     //! Anisotropic direction
00056     int tDir() const {return param.aniso.t_dir;}
00057 
00058     //! Return the set on which the gauge action is defined
00059     /*! Defined on the even-off (red/black) set */
00060     const Set& getSet() const {return rb;}
00061 
00062     //! Compute staple
00063     /*! Default version. Derived class should override this if needed. */
00064     void staple(LatticeColorMatrix& result,
00065                 const Handle< GaugeState<P,Q> >& state,
00066                 int mu, int cb) const
00067       {
00068         QDPIO::cerr << "This function is not implemented" << endl;
00069         QDP_abort(1);
00070 
00071       }
00072 
00073     //! Compute dS/dU
00074     void deriv(multi1d<LatticeColorMatrix>& result,
00075                const Handle< GaugeState<P,Q> >& state) const;
00076 
00077     //! Compute the actions
00078     Double S(const Handle< GaugeState<P,Q> >& state) const;
00079 
00080 
00081     //! Produce a gauge create state object
00082     const CreateGaugeState<P,Q>& getCreateState() const {return *cgs; }
00083 
00084     //! Destructor is automatic
00085     ~AnisoSymTemporalGaugeAct() {}
00086 
00087     // Accessors -- non mutable members.
00088     const Real getBeta(void) const { return param.beta; }
00089     
00090     const Real getUS(void) const { return param.u_s; }
00091     
00092     const Real getUT(void) const { return param.u_t; }
00093 
00094   protected:
00095     //! Private initializer
00096     void init(void);
00097 
00098     //! Hide assignment
00099     void operator=(const AnisoSymTemporalGaugeAct& a) {}
00100 
00101   private:
00102     const Handle< CreateGaugeState<P,Q> > cgs;
00103     AnisoSymGaugeActParams    param;    /*!< The couplings and anisotropy*/
00104     Real plaq_c_t;    /*!< Temporal plaquette coupling */
00105     Real rect_c_t_2;  /*!< Temporal \mu x 2\nu rectangle coupling */
00106     
00107   };
00108 
00109 };
00110 
00111 
00112 #endif

Generated on Sun Nov 22 04:28:48 2009 for CHROMA by  doxygen 1.4.7