mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Weak Hamiltonian contraction modules, for Eye and NonEye contraction topologies. Execution for NonEye type diagrams has been implemented, but not yet for Eye type.
This commit is contained in:
		@@ -30,6 +30,9 @@ See the full license in the file "LICENSE" in the top level distribution directo
 | 
				
			|||||||
#include <Grid/Hadrons/Modules/MAction/Wilson.hpp>
 | 
					#include <Grid/Hadrons/Modules/MAction/Wilson.hpp>
 | 
				
			||||||
#include <Grid/Hadrons/Modules/MContraction/Baryon.hpp>
 | 
					#include <Grid/Hadrons/Modules/MContraction/Baryon.hpp>
 | 
				
			||||||
#include <Grid/Hadrons/Modules/MContraction/Meson.hpp>
 | 
					#include <Grid/Hadrons/Modules/MContraction/Meson.hpp>
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Modules/MContraction/WeakHamiltonian.hpp>
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Modules/MContraction/WeakHamiltonianEye.hpp>
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Modules/MContraction/WeakHamiltonianNonEye.hpp>
 | 
				
			||||||
#include <Grid/Hadrons/Modules/MGauge/Load.hpp>
 | 
					#include <Grid/Hadrons/Modules/MGauge/Load.hpp>
 | 
				
			||||||
#include <Grid/Hadrons/Modules/MGauge/Random.hpp>
 | 
					#include <Grid/Hadrons/Modules/MGauge/Random.hpp>
 | 
				
			||||||
#include <Grid/Hadrons/Modules/MGauge/Unit.hpp>
 | 
					#include <Grid/Hadrons/Modules/MGauge/Unit.hpp>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										86
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonian.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonian.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
				
			|||||||
 | 
					/*************************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Grid physics library, www.github.com/paboyle/Grid 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source file: extras/Hadrons/Modules/MContraction/WeakHamiltonian.hpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (C) 2017
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Author: Andrew Lawson    <andrew.lawson1991@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					(at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should have received a copy of the GNU General Public License along
 | 
				
			||||||
 | 
					with this program; if not, write to the Free Software Foundation, Inc.,
 | 
				
			||||||
 | 
					51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the full license in the file "LICENSE" in the top level distribution directory
 | 
				
			||||||
 | 
					*************************************************************************************/
 | 
				
			||||||
 | 
					/*  END LEGAL */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef Hadrons_WeakHamiltonian_hpp_
 | 
				
			||||||
 | 
					#define Hadrons_WeakHamiltonian_hpp_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Global.hpp>
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Module.hpp>
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/ModuleFactory.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BEGIN_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                         WeakHamiltonian                                    *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					BEGIN_MODULE_NAMESPACE(MContraction)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*******************************************************************************
 | 
				
			||||||
 | 
					 * Utilities for contractions involving the Weak Hamiltonian.
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					//// Sum and store correlator.
 | 
				
			||||||
 | 
					#define MAKE_DIAG(exp, buf, res, n)\
 | 
				
			||||||
 | 
					sliceSum(exp, buf, Tp);\
 | 
				
			||||||
 | 
					res.name = (n);\
 | 
				
			||||||
 | 
					res.corr.resize(buf.size());\
 | 
				
			||||||
 | 
					for (unsigned int t = 0; t < buf.size(); ++t)\
 | 
				
			||||||
 | 
					{\
 | 
				
			||||||
 | 
					    res.corr[t] = TensorRemove(buf[t]);\
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//// Contraction of mu index: use 'mu' variable in exp.
 | 
				
			||||||
 | 
					#define SUM_MU(buf,exp)\
 | 
				
			||||||
 | 
					buf = zero;\
 | 
				
			||||||
 | 
					for (unsigned int mu = 0; mu < Nd; ++mu)\
 | 
				
			||||||
 | 
					{\
 | 
				
			||||||
 | 
					    buf += exp;\
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  i_V = 0,
 | 
				
			||||||
 | 
					  i_A = 1,
 | 
				
			||||||
 | 
					  n_i = 2
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class WeakHamiltonianPar: Serializable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    GRID_SERIALIZABLE_CLASS_MEMBERS(WeakHamiltonianPar,
 | 
				
			||||||
 | 
					                                    std::string, q1,
 | 
				
			||||||
 | 
					                                    std::string, q2,
 | 
				
			||||||
 | 
					                                    std::string, q3,
 | 
				
			||||||
 | 
					                                    std::string, q4,
 | 
				
			||||||
 | 
					                                    std::string, output);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_MODULE_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // Hadrons_WeakHamiltonian_hpp_
 | 
				
			||||||
							
								
								
									
										92
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonianEye.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonianEye.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
				
			|||||||
 | 
					/*************************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Grid physics library, www.github.com/paboyle/Grid 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source file: extras/Hadrons/Modules/MContraction/WeakHamiltonianEye.cc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (C) 2017
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Author: Andrew Lawson    <andrew.lawson1991@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					(at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should have received a copy of the GNU General Public License along
 | 
				
			||||||
 | 
					with this program; if not, write to the Free Software Foundation, Inc.,
 | 
				
			||||||
 | 
					51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the full license in the file "LICENSE" in the top level distribution directory
 | 
				
			||||||
 | 
					*************************************************************************************/
 | 
				
			||||||
 | 
					/*  END LEGAL */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Modules/MContraction/WeakHamiltonianEye.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace Grid;
 | 
				
			||||||
 | 
					using namespace Hadrons;
 | 
				
			||||||
 | 
					using namespace MContraction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Weak Hamiltonian current-current contractions, Eye-type.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * These contractions are generated by the Q1 and Q2 operators in the physical
 | 
				
			||||||
 | 
					 * basis (see e.g. Fig 3 of arXiv:1507.03094).
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Schematics:        q4                 |                    q4              
 | 
				
			||||||
 | 
					 *                  /-<-¬                |                  /-<-¬                
 | 
				
			||||||
 | 
					 *                 /     \               |                 /     \               
 | 
				
			||||||
 | 
					 *                 \     /               |                 \     /               
 | 
				
			||||||
 | 
					 *            q2    \   /    q3          |                  \_ _/              
 | 
				
			||||||
 | 
					 *       |-----<-----* *-----<----¬      |            q2      *      q3
 | 
				
			||||||
 | 
					 *    i *            H_W           * f   |       |-----<------*------<----¬      
 | 
				
			||||||
 | 
					 *       \                        /      |    i *            H_W           * f   
 | 
				
			||||||
 | 
					 *        \                      /       |       \                        /       
 | 
				
			||||||
 | 
					 *         \---------->---------/        |        \------------>---------/        
 | 
				
			||||||
 | 
					 *                   q1                  |                   q1                  
 | 
				
			||||||
 | 
					 *                                       |
 | 
				
			||||||
 | 
					 *                Saucer (S)             |                  Eye (E)
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * S: trace(q3*g5*q1*adj(q2)*g5*gL[mu][p_1]*q4*gL[mu][p_2])
 | 
				
			||||||
 | 
					 * E: trace(q3*g5*q1*adj(q2)*g5*gL[mu][p_1])*trace(q4*gL[mu][p_2])
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                  TWeakHamiltonianEye implementation                        *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					// constructor /////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					TWeakHamiltonianEye::TWeakHamiltonianEye(const std::string name)
 | 
				
			||||||
 | 
					: Module<WeakHamiltonianPar>(name)
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dependencies/products ///////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					std::vector<std::string> TWeakHamiltonianEye::getInput(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<std::string> in;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return in;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::vector<std::string> TWeakHamiltonianEye::getOutput(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<std::string> out = {getName()};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// setup ///////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					void TWeakHamiltonianEye::setup(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// execution ///////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					void TWeakHamiltonianEye::execute(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										75
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonianEye.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonianEye.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					/*************************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Grid physics library, www.github.com/paboyle/Grid 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source file: extras/Hadrons/Modules/MContraction/WeakHamiltonianEye.hpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (C) 2017
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Author: Andrew Lawson    <andrew.lawson1991@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					(at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should have received a copy of the GNU General Public License along
 | 
				
			||||||
 | 
					with this program; if not, write to the Free Software Foundation, Inc.,
 | 
				
			||||||
 | 
					51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the full license in the file "LICENSE" in the top level distribution directory
 | 
				
			||||||
 | 
					*************************************************************************************/
 | 
				
			||||||
 | 
					/*  END LEGAL */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef Hadrons_WeakHamiltonianEye_hpp_
 | 
				
			||||||
 | 
					#define Hadrons_WeakHamiltonianEye_hpp_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Modules/MContraction/WeakHamiltonian.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BEGIN_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                         WeakHamiltonianEye                                 *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					BEGIN_MODULE_NAMESPACE(MContraction)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    S_diag = 0,
 | 
				
			||||||
 | 
					    E_diag = 1
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Saucer and Eye subdiagram contractions.
 | 
				
			||||||
 | 
					#define MAKE_SE_BODY(Q_1, Q_2, Q_3, gamma) (Q_3*g5*Q_1*adj(Q_2)*g5*gamma)
 | 
				
			||||||
 | 
					#define MAKE_SE_LOOP(Q_loop, gamma) (Q_loop*gamma)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TWeakHamiltonianEye: public Module<WeakHamiltonianPar>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    TYPE_ALIASES(FIMPL,)
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    // constructor
 | 
				
			||||||
 | 
					    TWeakHamiltonianEye(const std::string name);
 | 
				
			||||||
 | 
					    // destructor
 | 
				
			||||||
 | 
					    virtual ~TWeakHamiltonianEye(void) = default;
 | 
				
			||||||
 | 
					    // dependency relation
 | 
				
			||||||
 | 
					    virtual std::vector<std::string> getInput(void);
 | 
				
			||||||
 | 
					    virtual std::vector<std::string> getOutput(void);
 | 
				
			||||||
 | 
					    // setup
 | 
				
			||||||
 | 
					    virtual void setup(void);
 | 
				
			||||||
 | 
					    // execution
 | 
				
			||||||
 | 
					    virtual void execute(void);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODULE_REGISTER_NS(WeakHamiltonianEye, TWeakHamiltonianEye, MContraction);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_MODULE_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // Hadrons_WeakHamiltonianEye_hpp_
 | 
				
			||||||
							
								
								
									
										148
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonianNonEye.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								extras/Hadrons/Modules/MContraction/WeakHamiltonianNonEye.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
				
			|||||||
 | 
					/*************************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Grid physics library, www.github.com/paboyle/Grid 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source file: extras/Hadrons/Modules/MContraction/WeakHamiltonianNonEye.cc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (C) 2017
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Author: Andrew Lawson    <andrew.lawson1991@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					(at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should have received a copy of the GNU General Public License along
 | 
				
			||||||
 | 
					with this program; if not, write to the Free Software Foundation, Inc.,
 | 
				
			||||||
 | 
					51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the full license in the file "LICENSE" in the top level distribution directory
 | 
				
			||||||
 | 
					*************************************************************************************/
 | 
				
			||||||
 | 
					/*  END LEGAL */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Modules/MContraction/WeakHamiltonianNonEye.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace Grid;
 | 
				
			||||||
 | 
					using namespace Hadrons;
 | 
				
			||||||
 | 
					using namespace MContraction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Weak Hamiltonian current-current contractions, Non-Eye-type.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * These contractions are generated by the Q1 and Q2 operators in the physical
 | 
				
			||||||
 | 
					 * basis (see e.g. Fig 3 of arXiv:1507.03094).
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Schematic:     
 | 
				
			||||||
 | 
					 *            q2             q3          |           q2              q3
 | 
				
			||||||
 | 
					 *          /--<--¬       /--<--¬        |        /--<--¬         /--<--¬       
 | 
				
			||||||
 | 
					 *         /       \     /       \       |       /       \       /       \      
 | 
				
			||||||
 | 
					 *        /         \   /         \      |      /         \     /         \     
 | 
				
			||||||
 | 
					 *       /           \ /           \     |     /           \   /           \    
 | 
				
			||||||
 | 
					 *    i *             * H_W         *  f |  i *             * * H_W         * f 
 | 
				
			||||||
 | 
					 *      \             *             |    |     \           /   \           /
 | 
				
			||||||
 | 
					 *       \           / \           /     |      \         /     \         /    
 | 
				
			||||||
 | 
					 *        \         /   \         /      |       \       /       \       /  
 | 
				
			||||||
 | 
					 *         \       /     \       /       |        \-->--/         \-->--/      
 | 
				
			||||||
 | 
					 *          \-->--/       \-->--/        |          q1               q4 
 | 
				
			||||||
 | 
					 *            q1             q4          |
 | 
				
			||||||
 | 
					 *                Connected (C)          |                 Wing (W)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * C: trace(q1*adj(q2)*g5*gL[mu]*q3*adj(q4)*g5*gL[mu])
 | 
				
			||||||
 | 
					 * W: trace(q1*adj(q2)*g5*gL[mu])*trace(q3*adj(q4)*g5*gL[mu])
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                  TWeakHamiltonianNonEye implementation                     *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					// constructor /////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					TWeakHamiltonianNonEye::TWeakHamiltonianNonEye(const std::string name)
 | 
				
			||||||
 | 
					: Module<WeakHamiltonianPar>(name)
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dependencies/products ///////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					std::vector<std::string> TWeakHamiltonianNonEye::getInput(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<std::string> in;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return in;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::vector<std::string> TWeakHamiltonianNonEye::getOutput(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<std::string> out = {getName()};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// setup ///////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					void TWeakHamiltonianNonEye::setup(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// execution ///////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					void TWeakHamiltonianNonEye::execute(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    XmlWriter             writer(par().output);
 | 
				
			||||||
 | 
					    PropagatorField &q1 = *env().template getObject<PropagatorField>(par().q1);
 | 
				
			||||||
 | 
					    PropagatorField &q2 = *env().template getObject<PropagatorField>(par().q2);
 | 
				
			||||||
 | 
					    PropagatorField &q3 = *env().template getObject<PropagatorField>(par().q3);
 | 
				
			||||||
 | 
					    PropagatorField &q4 = *env().template getObject<PropagatorField>(par().q4);
 | 
				
			||||||
 | 
					    SpinMatrix g5       = makeGammaProd(Ns*Ns - 1); // Soon to be deprecated.
 | 
				
			||||||
 | 
					    LatticeComplex        expbuf(env().getGrid());
 | 
				
			||||||
 | 
					    std::vector<TComplex> corrbuf;
 | 
				
			||||||
 | 
					    std::vector<Result>   result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PropagatorField              tmp1(env().getGrid());
 | 
				
			||||||
 | 
					    LatticeComplex               tmp2(env().getGrid());
 | 
				
			||||||
 | 
					    std::vector<PropagatorField> C_i_side_loop(Nd, tmp1);
 | 
				
			||||||
 | 
					    std::vector<PropagatorField> C_f_side_loop(Nd, tmp1);
 | 
				
			||||||
 | 
					    std::vector<LatticeComplex>  W_i_side_loop(Nd, tmp2);
 | 
				
			||||||
 | 
					    std::vector<LatticeComplex>  W_f_side_loop(Nd, tmp2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Soon to be deprecated. Keeping V and A parts distinct to take advantage
 | 
				
			||||||
 | 
					    // of zero-flop gamma products, when implemented.
 | 
				
			||||||
 | 
					    std::vector<std::vector<SpinMatrix>> gL;
 | 
				
			||||||
 | 
					    gL.resize(n_i);
 | 
				
			||||||
 | 
					    gL[i_V].resize(Nd);
 | 
				
			||||||
 | 
					    gL[i_A].resize(Nd);
 | 
				
			||||||
 | 
					    for (unsigned int mu = 0; mu < Nd; ++mu)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        gL[i_V][mu] = makeGammaProd(mu);
 | 
				
			||||||
 | 
					        gL[i_A][mu] = g5*makeGammaProd(mu);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Setup for C-type contractions.
 | 
				
			||||||
 | 
					    for (int mu = 0; mu < Nd; ++mu)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        C_i_side_loop[mu] = MAKE_CW_SUBDIAG(q1, q2, gL[i_V][mu]) -
 | 
				
			||||||
 | 
					                            MAKE_CW_SUBDIAG(q1, q2, gL[i_A][mu]);
 | 
				
			||||||
 | 
					        C_f_side_loop[mu] = MAKE_CW_SUBDIAG(q3, q4, gL[i_V][mu]) -
 | 
				
			||||||
 | 
					                            MAKE_CW_SUBDIAG(q3, q4, gL[i_A][mu]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Perform C-type contractions.    
 | 
				
			||||||
 | 
					    SUM_MU(expbuf, trace(C_i_side_loop[mu]*C_f_side_loop[mu]))
 | 
				
			||||||
 | 
					    MAKE_DIAG(expbuf, corrbuf, result[C_diag], "3pt_HW_C")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Recycle sub-expressions for W-type contractions.
 | 
				
			||||||
 | 
					    for (unsigned int mu = 0; mu < Nd; ++mu)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        W_i_side_loop[mu] = trace(C_i_side_loop[mu]);
 | 
				
			||||||
 | 
					        W_f_side_loop[mu] = trace(C_f_side_loop[mu]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Perform W-type contractions.
 | 
				
			||||||
 | 
					    SUM_MU(expbuf, W_i_side_loop[mu]*W_f_side_loop[mu])
 | 
				
			||||||
 | 
					    MAKE_DIAG(expbuf, corrbuf, result[W_diag], "3pt_HW_W")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    write(writer, "HW_3pt_NonEye", result[C_diag]);
 | 
				
			||||||
 | 
					    write(writer, "HW_3pt_NonEye", result[W_diag]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					/*************************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Grid physics library, www.github.com/paboyle/Grid 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Source file: extras/Hadrons/Modules/MContraction/WeakHamiltonianNonEye.hpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (C) 2017
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Author: Andrew Lawson    <andrew.lawson1991@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					(at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should have received a copy of the GNU General Public License along
 | 
				
			||||||
 | 
					with this program; if not, write to the Free Software Foundation, Inc.,
 | 
				
			||||||
 | 
					51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the full license in the file "LICENSE" in the top level distribution directory
 | 
				
			||||||
 | 
					*************************************************************************************/
 | 
				
			||||||
 | 
					/*  END LEGAL */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef Hadrons_WeakHamiltonianNonEye_hpp_
 | 
				
			||||||
 | 
					#define Hadrons_WeakHamiltonianNonEye_hpp_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Grid/Hadrons/Modules/MContraction/WeakHamiltonian.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BEGIN_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************************************************
 | 
				
			||||||
 | 
					 *                         WeakHamiltonianNonEye                              *
 | 
				
			||||||
 | 
					 ******************************************************************************/
 | 
				
			||||||
 | 
					BEGIN_MODULE_NAMESPACE(MContraction)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    W_diag = 0,
 | 
				
			||||||
 | 
					    C_diag = 1
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Wing and Connected subdiagram contractions
 | 
				
			||||||
 | 
					#define MAKE_CW_SUBDIAG(Q_1, Q_2, gamma) (Q_1*adj(Q_2)*g5*gamma)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TWeakHamiltonianNonEye: public Module<WeakHamiltonianPar>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    TYPE_ALIASES(FIMPL,)
 | 
				
			||||||
 | 
					    class Result: Serializable
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        GRID_SERIALIZABLE_CLASS_MEMBERS(Result,
 | 
				
			||||||
 | 
					                                        std::string, name,
 | 
				
			||||||
 | 
					                                        std::vector<Complex>, corr);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    // constructor
 | 
				
			||||||
 | 
					    TWeakHamiltonianNonEye(const std::string name);
 | 
				
			||||||
 | 
					    // destructor
 | 
				
			||||||
 | 
					    virtual ~TWeakHamiltonianNonEye(void) = default;
 | 
				
			||||||
 | 
					    // dependency relation
 | 
				
			||||||
 | 
					    virtual std::vector<std::string> getInput(void);
 | 
				
			||||||
 | 
					    virtual std::vector<std::string> getOutput(void);
 | 
				
			||||||
 | 
					    // setup
 | 
				
			||||||
 | 
					    virtual void setup(void);
 | 
				
			||||||
 | 
					    // execution
 | 
				
			||||||
 | 
					    virtual void execute(void);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODULE_REGISTER_NS(WeakHamiltonianNonEye, TWeakHamiltonianNonEye, MContraction);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_MODULE_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END_HADRONS_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // Hadrons_WeakHamiltonianNonEye_hpp_
 | 
				
			||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
modules_cc =\
 | 
					modules_cc =\
 | 
				
			||||||
 | 
					  Modules/MContraction/WeakHamiltonianEye.cc \
 | 
				
			||||||
 | 
					  Modules/MContraction/WeakHamiltonianNonEye.cc \
 | 
				
			||||||
  Modules/MGauge/Load.cc \
 | 
					  Modules/MGauge/Load.cc \
 | 
				
			||||||
  Modules/MGauge/Random.cc \
 | 
					  Modules/MGauge/Random.cc \
 | 
				
			||||||
  Modules/MGauge/Unit.cc
 | 
					  Modules/MGauge/Unit.cc
 | 
				
			||||||
@@ -8,6 +10,9 @@ modules_hpp =\
 | 
				
			|||||||
  Modules/MAction/Wilson.hpp \
 | 
					  Modules/MAction/Wilson.hpp \
 | 
				
			||||||
  Modules/MContraction/Baryon.hpp \
 | 
					  Modules/MContraction/Baryon.hpp \
 | 
				
			||||||
  Modules/MContraction/Meson.hpp \
 | 
					  Modules/MContraction/Meson.hpp \
 | 
				
			||||||
 | 
					  Modules/MContraction/WeakHamiltonian.hpp \
 | 
				
			||||||
 | 
					  Modules/MContraction/WeakHamiltonianEye.hpp \
 | 
				
			||||||
 | 
					  Modules/MContraction/WeakHamiltonianNonEye.hpp \
 | 
				
			||||||
  Modules/MGauge/Load.hpp \
 | 
					  Modules/MGauge/Load.hpp \
 | 
				
			||||||
  Modules/MGauge/Random.hpp \
 | 
					  Modules/MGauge/Random.hpp \
 | 
				
			||||||
  Modules/MGauge/Unit.hpp \
 | 
					  Modules/MGauge/Unit.hpp \
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user