mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Committing incomplete work for parameter file I/O.
MacroMagic.h is central. Guido and I plan to move over to generating virtual (XML, JSON, YAML, text, binary) encoding from macro based system.
This commit is contained in:
		@@ -1,6 +1,13 @@
 | 
				
			|||||||
#ifndef GRID_ALIGNED_ALLOCATOR_H
 | 
					#ifndef GRID_ALIGNED_ALLOCATOR_H
 | 
				
			||||||
#define GRID_ALIGNED_ALLOCATOR_H
 | 
					#define GRID_ALIGNED_ALLOCATOR_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_MALLOC_MALLOC_H
 | 
				
			||||||
 | 
					#include <malloc/malloc.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_MALLOC_H
 | 
				
			||||||
 | 
					#include <malloc.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <immintrin.h>
 | 
					#include <immintrin.h>
 | 
				
			||||||
#ifdef HAVE_MM_MALLOC_H
 | 
					#ifdef HAVE_MM_MALLOC_H
 | 
				
			||||||
#include <mm_malloc.h>
 | 
					#include <mm_malloc.h>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
/* lib/GridConfig.h.in.  Generated from configure.ac by autoheader.  */
 | 
					/* lib/Config.h.in.  Generated from configure.ac by autoheader.  */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* AVX Intrinsics */
 | 
					/* AVX Intrinsics */
 | 
				
			||||||
#undef AVX1
 | 
					#undef AVX1
 | 
				
			||||||
							
								
								
									
										89
									
								
								lib/Grid.h
									
									
									
									
									
								
							
							
						
						
									
										89
									
								
								lib/Grid.h
									
									
									
									
									
								
							@@ -6,95 +6,48 @@
 | 
				
			|||||||
//  Copyright (c) 2014 University of Edinburgh. All rights reserved.
 | 
					//  Copyright (c) 2014 University of Edinburgh. All rights reserved.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef GRID_H
 | 
					#ifndef GRID_H
 | 
				
			||||||
#define GRID_H
 | 
					#define GRID_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////
 | 
				
			||||||
 | 
					// Std C++ dependencies
 | 
				
			||||||
 | 
					///////////////////
 | 
				
			||||||
#include <cassert>
 | 
					#include <cassert>
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <complex>
 | 
					#include <complex>
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <iostream>
 | 
					#include <iostream>
 | 
				
			||||||
#include <iomanip>
 | 
					#include <iomanip>
 | 
				
			||||||
#include <random>
 | 
					#include <random>
 | 
				
			||||||
#include <functional>
 | 
					#include <functional>
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <sys/time.h>
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <signal.h>
 | 
					#include <signal.h>
 | 
				
			||||||
 | 
					#include <ctime>
 | 
				
			||||||
 | 
					#include <sys/time.h>
 | 
				
			||||||
 | 
					#include <chrono>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef MAX
 | 
					///////////////////
 | 
				
			||||||
#define MAX(x,y) ((x)>(y)?(x):(y))
 | 
					// Grid headers
 | 
				
			||||||
#define MIN(x,y) ((x)>(y)?(y):(x))
 | 
					///////////////////
 | 
				
			||||||
#endif
 | 
					#include <MacroMagic.h>
 | 
				
			||||||
 | 
					#include <Config.h>
 | 
				
			||||||
#define strong_inline __attribute__((always_inline)) inline
 | 
					#include <Timer.h>
 | 
				
			||||||
 | 
					#include <Log.h>
 | 
				
			||||||
#include <GridConfig.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <GridTime.h>
 | 
					 | 
				
			||||||
#include <GridLog.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// Tunable header includes
 | 
					 | 
				
			||||||
////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef HAVE_MALLOC_MALLOC_H
 | 
					 | 
				
			||||||
#include <malloc/malloc.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifdef HAVE_MALLOC_H
 | 
					 | 
				
			||||||
#include <malloc.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <AlignedAllocator.h>
 | 
					#include <AlignedAllocator.h>
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <Simd.h>
 | 
					#include <Simd.h>
 | 
				
			||||||
#include <Threads.h>
 | 
					#include <Threads.h>
 | 
				
			||||||
 | 
					#include <Communicator.h> 
 | 
				
			||||||
#include <Communicator.h> // subdir aggregate
 | 
					#include <Cartesian.h>    
 | 
				
			||||||
#include <Cartesian.h> // subdir aggregate
 | 
					#include <Tensors.h>      
 | 
				
			||||||
#include <Tensors.h>   // subdir aggregate
 | 
					#include <Lattice.h>      
 | 
				
			||||||
#include <Lattice.h>   // subdir aggregate
 | 
					#include <Cshift.h>       
 | 
				
			||||||
#include <Cshift.h>    // subdir aggregate
 | 
					#include <Stencil.h>      
 | 
				
			||||||
#include <Stencil.h>   // subdir aggregate
 | 
					#include <Algorithms.h>   
 | 
				
			||||||
#include <Algorithms.h>// subdir aggregate
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <qcd/QCD.h>
 | 
					#include <qcd/QCD.h>
 | 
				
			||||||
#include <parallelIO/NerscIO.h>
 | 
					#include <parallelIO/NerscIO.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Grid {
 | 
					#include <Init.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void Grid_init(int *argc,char ***argv);
 | 
					 | 
				
			||||||
  void Grid_finalize(void);
 | 
					 | 
				
			||||||
  // internal, controled with --handle
 | 
					 | 
				
			||||||
  void Grid_sa_signal_handler(int sig,siginfo_t *si,void * ptr);
 | 
					 | 
				
			||||||
  void Grid_debug_handler_init(void);
 | 
					 | 
				
			||||||
  void Grid_quiesce_nodes(void);
 | 
					 | 
				
			||||||
  void Grid_unquiesce_nodes(void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // C++11 time facilities better?
 | 
					 | 
				
			||||||
  double usecond(void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const std::vector<int> GridDefaultSimd(int dims,int nsimd);
 | 
					 | 
				
			||||||
  const std::vector<int> &GridDefaultLatt(void);
 | 
					 | 
				
			||||||
  const std::vector<int> &GridDefaultMpi(void);
 | 
					 | 
				
			||||||
  const int              &GridThreads(void)  ;
 | 
					 | 
				
			||||||
  void                 GridSetThreads(int t) ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Common parsing chores
 | 
					 | 
				
			||||||
  std::string GridCmdOptionPayload(char ** begin, char ** end, const std::string & option);
 | 
					 | 
				
			||||||
  bool        GridCmdOptionExists(char** begin, char** end, const std::string& option);
 | 
					 | 
				
			||||||
  std::string GridCmdVectorIntToString(const std::vector<int> & vec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void GridParseLayout(char **argv,int argc,
 | 
					 | 
				
			||||||
		       std::vector<int> &latt,
 | 
					 | 
				
			||||||
		       std::vector<int> &simd,
 | 
					 | 
				
			||||||
		       std::vector<int> &mpi);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										32
									
								
								lib/Init.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lib/Init.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					#ifndef GRID_INIT_H
 | 
				
			||||||
 | 
					#define GRID_INIT_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Grid {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void Grid_init(int *argc,char ***argv);
 | 
				
			||||||
 | 
					  void Grid_finalize(void);
 | 
				
			||||||
 | 
					  // internal, controled with --handle
 | 
				
			||||||
 | 
					  void Grid_sa_signal_handler(int sig,siginfo_t *si,void * ptr);
 | 
				
			||||||
 | 
					  void Grid_debug_handler_init(void);
 | 
				
			||||||
 | 
					  void Grid_quiesce_nodes(void);
 | 
				
			||||||
 | 
					  void Grid_unquiesce_nodes(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const std::vector<int> GridDefaultSimd(int dims,int nsimd);
 | 
				
			||||||
 | 
					  const std::vector<int> &GridDefaultLatt(void);
 | 
				
			||||||
 | 
					  const std::vector<int> &GridDefaultMpi(void);
 | 
				
			||||||
 | 
					  const int              &GridThreads(void)  ;
 | 
				
			||||||
 | 
					  void                    GridSetThreads(int t) ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Common parsing chores
 | 
				
			||||||
 | 
					  std::string GridCmdOptionPayload(char ** begin, char ** end, const std::string & option);
 | 
				
			||||||
 | 
					  bool        GridCmdOptionExists(char** begin, char** end, const std::string& option);
 | 
				
			||||||
 | 
					  std::string GridCmdVectorIntToString(const std::vector<int> & vec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void GridParseLayout(char **argv,int argc,
 | 
				
			||||||
 | 
							       std::vector<int> &latt,
 | 
				
			||||||
 | 
							       std::vector<int> &simd,
 | 
				
			||||||
 | 
							       std::vector<int> &mpi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -40,7 +40,7 @@ void Grid_quiesce_nodes(void)
 | 
				
			|||||||
  int me;
 | 
					  int me;
 | 
				
			||||||
  MPI_Comm_rank(MPI_COMM_WORLD,&me);
 | 
					  MPI_Comm_rank(MPI_COMM_WORLD,&me);
 | 
				
			||||||
  if ( me ) { 
 | 
					  if ( me ) { 
 | 
				
			||||||
    std::cout<<GridLogMessage.setstate(std::ios::badbit);
 | 
					    std::cout.setstate(std::ios::badbit);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -48,7 +48,7 @@ void Grid_quiesce_nodes(void)
 | 
				
			|||||||
void Grid_unquiesce_nodes(void)
 | 
					void Grid_unquiesce_nodes(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef GRID_COMMS_MPI
 | 
					#ifdef GRID_COMMS_MPI
 | 
				
			||||||
    std::cout<<GridLogMessage.clear();
 | 
					    std::cout.clear();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										78
									
								
								lib/MacroMagic.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								lib/MacroMagic.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
				
			|||||||
 | 
					#ifndef GRID_MACRO_MAGIC_H
 | 
				
			||||||
 | 
					#define GRID_MACRO_MAGIC_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define strong_inline __attribute__((always_inline)) inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef MAX
 | 
				
			||||||
 | 
					#define MAX(x,y) ((x)>(y)?(x):(y))
 | 
				
			||||||
 | 
					#define MIN(x,y) ((x)>(y)?(y):(x))
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_FIRST(a, ...) a
 | 
				
			||||||
 | 
					#define GRID_MACRO_SECOND(a, b, ...) b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_EMPTY()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL(...)     GRID_MACRO_EVAL1024(__VA_ARGS__)
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL1024(...) GRID_MACRO_EVAL512(GRID_MACRO_EVAL512(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL512(...)  GRID_MACRO_EVAL256(GRID_MACRO_EVAL256(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL256(...)  GRID_MACRO_EVAL128(GRID_MACRO_EVAL128(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL128(...)  GRID_MACRO_EVAL64(GRID_MACRO_EVAL64(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL64(...)   GRID_MACRO_EVAL32(GRID_MACRO_EVAL32(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL32(...)   GRID_MACRO_EVAL16(GRID_MACRO_EVAL16(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL16(...)   GRID_MACRO_EVAL8(GRID_MACRO_EVAL8(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL8(...)    GRID_MACRO_EVAL4(GRID_MACRO_EVAL4(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL4(...)    GRID_MACRO_EVAL2(GRID_MACRO_EVAL2(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL2(...)    GRID_MACRO_EVAL1(GRID_MACRO_EVAL1(__VA_ARGS__))
 | 
				
			||||||
 | 
					#define GRID_MACRO_EVAL1(...) __VA_ARGS__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_DEFER1(m) m GRID_MACRO_EMPTY()
 | 
				
			||||||
 | 
					#define GRID_MACRO_DEFER2(m) m GRID_MACRO_EMPTY GRID_MACRO_EMPTY()()
 | 
				
			||||||
 | 
					#define GRID_MACRO_DEFER3(m) m GRID_MACRO_EMPTY GRID_MACRO_EMPTY GRID_MACRO_EMPTY()()()
 | 
				
			||||||
 | 
					#define GRID_MACRO_DEFER4(m) m GRID_MACRO_EMPTY GRID_MACRO_EMPTY GRID_MACRO_EMPTY GRID_MACRO_EMPTY()()()()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_IS_PROBE(...) GRID_MACRO_SECOND(__VA_ARGS__, 0)
 | 
				
			||||||
 | 
					#define GRID_MACRO_PROBE() ~, 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_CAT(a,b) a ## b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_NOT(x) GRID_MACRO_IS_PROBE(GRID_MACRO_CAT(_GRID_MACRO_NOT_, x))
 | 
				
			||||||
 | 
					#define _GRID_MACRO_NOT_0 GRID_MACRO_PROBE()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_BOOL(x) GRID_MACRO_NOT(GRID_MACRO_NOT(x))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_IF_ELSE(condition) _GRID_MACRO_IF_ELSE(GRID_MACRO_BOOL(condition))
 | 
				
			||||||
 | 
					#define _GRID_MACRO_IF_ELSE(condition) GRID_MACRO_CAT(_GRID_MACRO_IF_, condition)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _GRID_MACRO_IF_1(...) __VA_ARGS__ _GRID_MACRO_IF_1_ELSE
 | 
				
			||||||
 | 
					#define _GRID_MACRO_IF_0(...)             _GRID_MACRO_IF_0_ELSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define _GRID_MACRO_IF_1_ELSE(...)
 | 
				
			||||||
 | 
					#define _GRID_MACRO_IF_0_ELSE(...) __VA_ARGS__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_HAS_ARGS(...) GRID_MACRO_BOOL(GRID_MACRO_FIRST(_GRID_MACRO_END_OF_ARGUMENTS_ __VA_ARGS__)())
 | 
				
			||||||
 | 
					#define _GRID_MACRO_END_OF_ARGUMENTS_() 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_MAP(m, first, second, ...)   \
 | 
				
			||||||
 | 
					  m(first,second)                           \
 | 
				
			||||||
 | 
					  GRID_MACRO_IF_ELSE(GRID_MACRO_HAS_ARGS(__VA_ARGS__))(				       \
 | 
				
			||||||
 | 
									 GRID_MACRO_DEFER4(_GRID_MACRO_MAP)()(m, __VA_ARGS__)   \
 | 
				
			||||||
 | 
									     )(                                 \
 | 
				
			||||||
 | 
									       /* Do nothing, just terminate */ \
 | 
				
			||||||
 | 
														)
 | 
				
			||||||
 | 
					#define _GRID_MACRO_MAP() GRID_MACRO_MAP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_MEMBER(A,B)        A B;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_MACRO_OS_WRITE_MEMBER(A,B) os<< #A <<" "#B <<" = "<< obj. B <<" ; " <<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GRID_DECL_CLASS_MEMBERS(cname,...)		\
 | 
				
			||||||
 | 
					  GRID_MACRO_EVAL(GRID_MACRO_MAP(GRID_MACRO_MEMBER,__VA_ARGS__))		\
 | 
				
			||||||
 | 
					  friend std::ostream & operator << (std::ostream &os, const cname &obj ) {	\
 | 
				
			||||||
 | 
					    os<<"class "<<#cname<<" {"<<std::endl;\
 | 
				
			||||||
 | 
					    GRID_MACRO_EVAL(GRID_MACRO_MAP(GRID_MACRO_OS_WRITE_MEMBER,__VA_ARGS__))	\
 | 
				
			||||||
 | 
					      os<<"}";								\
 | 
				
			||||||
 | 
					    return os;\
 | 
				
			||||||
 | 
					  };  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
HFILES=./algorithms/approx/bigfloat.h ./algorithms/approx/bigfloat_double.h ./algorithms/approx/Chebyshev.h ./algorithms/approx/MultiShiftFunction.h ./algorithms/approx/Remez.h ./algorithms/approx/Zolotarev.h ./algorithms/CoarsenedMatrix.h ./algorithms/iterative/AdefGeneric.h ./algorithms/iterative/BfmHDCG.h ./algorithms/iterative/ConjugateGradient.h ./algorithms/iterative/ConjugateGradientMultiShift.h ./algorithms/iterative/ConjugateResidual.h ./algorithms/iterative/GeneralisedMinimumResidual.h ./algorithms/iterative/gmres.h ./algorithms/iterative/NormalEquations.h ./algorithms/iterative/PrecConjugateResidual.h ./algorithms/iterative/PrecGeneralisedConjugateResidual.h ./algorithms/iterative/SchurRedBlack.h ./algorithms/LinearOperator.h ./algorithms/Preconditioner.h ./algorithms/SparseMatrix.h ./Algorithms.h ./AlignedAllocator.h ./cartesian/Cartesian_base.h ./cartesian/Cartesian_full.h ./cartesian/Cartesian_red_black.h ./Cartesian.h ./communicator/Communicator_base.h ./Communicator.h ./cshift/Cshift_common.h ./cshift/Cshift_mpi.h ./cshift/Cshift_none.h ./Cshift.h ./Grid.h ./GridConfig.h ./GridLog.h ./GridTime.h ./lattice/Lattice_arith.h ./lattice/Lattice_base.h ./lattice/Lattice_comparison.h ./lattice/Lattice_comparison_utils.h ./lattice/Lattice_conformable.h ./lattice/Lattice_coordinate.h ./lattice/Lattice_ET.h ./lattice/Lattice_local.h ./lattice/Lattice_overload.h ./lattice/Lattice_peekpoke.h ./lattice/Lattice_reality.h ./lattice/Lattice_reduction.h ./lattice/Lattice_rng.h ./lattice/Lattice_trace.h ./lattice/Lattice_transfer.h ./lattice/Lattice_transpose.h ./lattice/Lattice_unary.h ./lattice/Lattice_where.h ./Lattice.h ./Old/Tensor_peek.h ./Old/Tensor_poke.h ./parallelIO/NerscIO.h ./qcd/action/ActionBase.h ./qcd/action/Actions.h ./qcd/action/DiffAction.h ./qcd/action/fermion/CayleyFermion5D.h ./qcd/action/fermion/ContinuedFractionFermion5D.h ./qcd/action/fermion/DomainWallFermion.h ./qcd/action/fermion/FermionOperator.h ./qcd/action/fermion/g5HermitianLinop.h ./qcd/action/fermion/MobiusFermion.h ./qcd/action/fermion/MobiusZolotarevFermion.h ./qcd/action/fermion/OverlapWilsonCayleyTanhFermion.h ./qcd/action/fermion/OverlapWilsonCayleyZolotarevFermion.h ./qcd/action/fermion/OverlapWilsonContfracTanhFermion.h ./qcd/action/fermion/OverlapWilsonContfracZolotarevFermion.h ./qcd/action/fermion/OverlapWilsonPartialFractionTanhFermion.h ./qcd/action/fermion/OverlapWilsonPartialFractionZolotarevFermion.h ./qcd/action/fermion/PartialFractionFermion5D.h ./qcd/action/fermion/ScaledShamirFermion.h ./qcd/action/fermion/ShamirZolotarevFermion.h ./qcd/action/fermion/WilsonCompressor.h ./qcd/action/fermion/WilsonFermion.h ./qcd/action/fermion/WilsonFermion5D.h ./qcd/action/fermion/WilsonKernels.h ./qcd/action/gauge/WilsonGaugeAction.h ./qcd/hmc/HMC.h ./qcd/hmc/integrators/Integrator.h ./qcd/hmc/integrators/Integrator_algorithm.h ./qcd/hmc/integrators/Integrator_base.h ./qcd/QCD.h ./qcd/spin/Dirac.h ./qcd/spin/TwoSpinor.h ./qcd/utils/CovariantCshift.h ./qcd/utils/LinalgUtils.h ./qcd/utils/SpaceTimeGrid.h ./qcd/utils/SUn.h ./qcd/utils/WilsonLoops.h ./simd/Grid_avx.h ./simd/Grid_avx512.h ./simd/Grid_empty.h ./simd/Grid_neon.h ./simd/Grid_qpx.h ./simd/Grid_sse4.h ./simd/Grid_vector_types.h ./simd/Grid_vector_unops.h ./Simd.h ./stencil/Lebesgue.h ./Stencil.h ./tensors/Tensor_arith.h ./tensors/Tensor_arith_add.h ./tensors/Tensor_arith_mac.h ./tensors/Tensor_arith_mul.h ./tensors/Tensor_arith_scalar.h ./tensors/Tensor_arith_sub.h ./tensors/Tensor_class.h ./tensors/Tensor_determinant.h ./tensors/Tensor_exp.h ./tensors/Tensor_extract_merge.h ./tensors/Tensor_index.h ./tensors/Tensor_inner.h ./tensors/Tensor_logical.h ./tensors/Tensor_outer.h ./tensors/Tensor_reality.h ./tensors/Tensor_Ta.h ./tensors/Tensor_trace.h ./tensors/Tensor_traits.h ./tensors/Tensor_transpose.h ./tensors/Tensor_unary.h ./Tensors.h ./Threads.h
 | 
					HFILES=./algorithms/approx/bigfloat.h ./algorithms/approx/bigfloat_double.h ./algorithms/approx/Chebyshev.h ./algorithms/approx/MultiShiftFunction.h ./algorithms/approx/Remez.h ./algorithms/approx/Zolotarev.h ./algorithms/CoarsenedMatrix.h ./algorithms/iterative/AdefGeneric.h ./algorithms/iterative/BfmHDCG.h ./algorithms/iterative/ConjugateGradient.h ./algorithms/iterative/ConjugateGradientMultiShift.h ./algorithms/iterative/ConjugateResidual.h ./algorithms/iterative/GeneralisedMinimumResidual.h ./algorithms/iterative/gmres.h ./algorithms/iterative/NormalEquations.h ./algorithms/iterative/PrecConjugateResidual.h ./algorithms/iterative/PrecGeneralisedConjugateResidual.h ./algorithms/iterative/SchurRedBlack.h ./algorithms/LinearOperator.h ./algorithms/Preconditioner.h ./algorithms/SparseMatrix.h ./Algorithms.h ./AlignedAllocator.h ./cartesian/Cartesian_base.h ./cartesian/Cartesian_full.h ./cartesian/Cartesian_red_black.h ./Cartesian.h ./communicator/Communicator_base.h ./Communicator.h ./Config.h ./cshift/Cshift_common.h ./cshift/Cshift_mpi.h ./cshift/Cshift_none.h ./Cshift.h ./Grid.h ./Init.h ./lattice/Lattice_arith.h ./lattice/Lattice_base.h ./lattice/Lattice_comparison.h ./lattice/Lattice_comparison_utils.h ./lattice/Lattice_conformable.h ./lattice/Lattice_coordinate.h ./lattice/Lattice_ET.h ./lattice/Lattice_local.h ./lattice/Lattice_overload.h ./lattice/Lattice_peekpoke.h ./lattice/Lattice_reality.h ./lattice/Lattice_reduction.h ./lattice/Lattice_rng.h ./lattice/Lattice_trace.h ./lattice/Lattice_transfer.h ./lattice/Lattice_transpose.h ./lattice/Lattice_unary.h ./lattice/Lattice_where.h ./Lattice.h ./Log.h ./MacroMagic.h ./Old/Tensor_peek.h ./Old/Tensor_poke.h ./parallelIO/NerscIO.h ./qcd/action/ActionBase.h ./qcd/action/Actions.h ./qcd/action/DiffAction.h ./qcd/action/fermion/CayleyFermion5D.h ./qcd/action/fermion/ContinuedFractionFermion5D.h ./qcd/action/fermion/DomainWallFermion.h ./qcd/action/fermion/FermionOperator.h ./qcd/action/fermion/g5HermitianLinop.h ./qcd/action/fermion/MobiusFermion.h ./qcd/action/fermion/MobiusZolotarevFermion.h ./qcd/action/fermion/OverlapWilsonCayleyTanhFermion.h ./qcd/action/fermion/OverlapWilsonCayleyZolotarevFermion.h ./qcd/action/fermion/OverlapWilsonContfracTanhFermion.h ./qcd/action/fermion/OverlapWilsonContfracZolotarevFermion.h ./qcd/action/fermion/OverlapWilsonPartialFractionTanhFermion.h ./qcd/action/fermion/OverlapWilsonPartialFractionZolotarevFermion.h ./qcd/action/fermion/PartialFractionFermion5D.h ./qcd/action/fermion/ScaledShamirFermion.h ./qcd/action/fermion/ShamirZolotarevFermion.h ./qcd/action/fermion/WilsonCompressor.h ./qcd/action/fermion/WilsonFermion.h ./qcd/action/fermion/WilsonFermion5D.h ./qcd/action/fermion/WilsonKernels.h ./qcd/action/gauge/WilsonGaugeAction.h ./qcd/action/pseudofermion/TwoFlavour.h ./qcd/hmc/HMC.h ./qcd/hmc/integrators/Integrator.h ./qcd/hmc/integrators/Integrator_algorithm.h ./qcd/hmc/integrators/Integrator_base.h ./qcd/QCD.h ./qcd/spin/Dirac.h ./qcd/spin/TwoSpinor.h ./qcd/utils/CovariantCshift.h ./qcd/utils/LinalgUtils.h ./qcd/utils/SpaceTimeGrid.h ./qcd/utils/SUn.h ./qcd/utils/WilsonLoops.h ./simd/Grid_avx.h ./simd/Grid_avx512.h ./simd/Grid_empty.h ./simd/Grid_neon.h ./simd/Grid_qpx.h ./simd/Grid_sse4.h ./simd/Grid_vector_types.h ./simd/Grid_vector_unops.h ./Simd.h ./stencil/Lebesgue.h ./Stencil.h ./tensors/Tensor_arith.h ./tensors/Tensor_arith_add.h ./tensors/Tensor_arith_mac.h ./tensors/Tensor_arith_mul.h ./tensors/Tensor_arith_scalar.h ./tensors/Tensor_arith_sub.h ./tensors/Tensor_class.h ./tensors/Tensor_determinant.h ./tensors/Tensor_exp.h ./tensors/Tensor_extract_merge.h ./tensors/Tensor_index.h ./tensors/Tensor_inner.h ./tensors/Tensor_logical.h ./tensors/Tensor_outer.h ./tensors/Tensor_reality.h ./tensors/Tensor_Ta.h ./tensors/Tensor_trace.h ./tensors/Tensor_traits.h ./tensors/Tensor_transpose.h ./tensors/Tensor_unary.h ./Tensors.h ./Threads.h ./Timer.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CCFILES=./algorithms/approx/MultiShiftFunction.cc ./algorithms/approx/Remez.cc ./algorithms/approx/Zolotarev.cc ./GridInit.cc ./GridLog.cc ./qcd/action/fermion/CayleyFermion5D.cc ./qcd/action/fermion/ContinuedFractionFermion5D.cc ./qcd/action/fermion/PartialFractionFermion5D.cc ./qcd/action/fermion/WilsonFermion.cc ./qcd/action/fermion/WilsonFermion5D.cc ./qcd/action/fermion/WilsonKernels.cc ./qcd/action/fermion/WilsonKernelsHand.cc ./qcd/hmc/HMC.cc ./qcd/hmc/integrators/Integrator.cc ./qcd/spin/Dirac.cc ./qcd/utils/SpaceTimeGrid.cc ./stencil/Lebesgue.cc ./stencil/Stencil_common.cc
 | 
					CCFILES=./algorithms/approx/MultiShiftFunction.cc ./algorithms/approx/Remez.cc ./algorithms/approx/Zolotarev.cc ./Init.cc ./Log.cc ./qcd/action/fermion/CayleyFermion5D.cc ./qcd/action/fermion/ContinuedFractionFermion5D.cc ./qcd/action/fermion/PartialFractionFermion5D.cc ./qcd/action/fermion/WilsonFermion.cc ./qcd/action/fermion/WilsonFermion5D.cc ./qcd/action/fermion/WilsonKernels.cc ./qcd/action/fermion/WilsonKernelsHand.cc ./qcd/hmc/HMC.cc ./qcd/hmc/integrators/Integrator.cc ./qcd/spin/Dirac.cc ./qcd/utils/SpaceTimeGrid.cc ./stencil/Lebesgue.cc ./stencil/Stencil_common.cc
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,17 @@
 | 
				
			|||||||
#ifndef GRID_TIME_H
 | 
					#ifndef GRID_TIME_H
 | 
				
			||||||
#define GRID_TIME_H
 | 
					#define GRID_TIME_H
 | 
				
			||||||
namespace Grid {
 | 
					
 | 
				
			||||||
  // Dress the output; use std::chrono
 | 
					#include <sys/time.h>
 | 
				
			||||||
#include <chrono>
 | 
					 | 
				
			||||||
#include <ctime>
 | 
					#include <ctime>
 | 
				
			||||||
 | 
					#include <chrono>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Grid {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Dress the output; use std::chrono
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// C++11 time facilities better?
 | 
				
			||||||
 | 
					double usecond(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef  std::chrono::system_clock          GridClock;
 | 
					typedef  std::chrono::system_clock          GridClock;
 | 
				
			||||||
typedef  std::chrono::time_point<GridClock> GridTimePoint;
 | 
					typedef  std::chrono::time_point<GridClock> GridTimePoint;
 | 
				
			||||||
@@ -1,6 +1,8 @@
 | 
				
			|||||||
#ifndef MULTI_SHIFT_FUNCTION
 | 
					#ifndef MULTI_SHIFT_FUNCTION
 | 
				
			||||||
#define MULTI_SHIFT_FUNCTION
 | 
					#define MULTI_SHIFT_FUNCTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Grid {
 | 
					namespace Grid {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MultiShiftFunction {
 | 
					class MultiShiftFunction {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  int order;
 | 
					  int order;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										44
									
								
								lib/pugixml/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								lib/pugixml/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					pugixml [](https://travis-ci.org/zeux/pugixml) [](https://ci.appveyor.com/project/zeux/pugixml)
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pugixml is a C++ XML processing library, which consists of a DOM-like interface with rich traversal/modification
 | 
				
			||||||
 | 
					capabilities, an extremely fast XML parser which constructs the DOM tree from an XML file/buffer, and an XPath 1.0
 | 
				
			||||||
 | 
					implementation for complex data-driven tree queries. Full Unicode support is also available, with Unicode interface
 | 
				
			||||||
 | 
					variants and conversions between different Unicode encodings (which happen automatically during parsing/saving).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pugixml is used by a lot of projects, both open-source and proprietary, for performance and easy-to-use interface.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Documentation for the current release of pugixml is available on-line as two separate documents:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [Quick-start guide](http://pugixml.org/docs/quickstart.html), that aims to provide enough information to start using the library;
 | 
				
			||||||
 | 
					* [Complete reference manual](http://pugixml.org/docs/manual.html), that describes all features of the library in detail.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You’re advised to start with the quick-start guide; however, many important library features are either not described in it at all or only mentioned briefly; if you require more information you should read the complete manual.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## License
 | 
				
			||||||
 | 
					This library is available to anybody free of charge, under the terms of MIT License:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2006-2015 Arseny Kapoulkine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person
 | 
				
			||||||
 | 
					obtaining a copy of this software and associated documentation
 | 
				
			||||||
 | 
					files (the "Software"), to deal in the Software without
 | 
				
			||||||
 | 
					restriction, including without limitation the rights to use,
 | 
				
			||||||
 | 
					copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the
 | 
				
			||||||
 | 
					Software is furnished to do so, subject to the following
 | 
				
			||||||
 | 
					conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be
 | 
				
			||||||
 | 
					included in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
				
			||||||
 | 
					EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 | 
				
			||||||
 | 
					OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
				
			||||||
 | 
					NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 | 
				
			||||||
 | 
					HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 | 
				
			||||||
 | 
					WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
				
			||||||
 | 
					FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 | 
				
			||||||
 | 
					OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
							
								
								
									
										71
									
								
								lib/pugixml/pugiconfig.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								lib/pugixml/pugiconfig.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * pugixml parser - version 1.6
 | 
				
			||||||
 | 
					 * --------------------------------------------------------
 | 
				
			||||||
 | 
					 * Copyright (C) 2006-2015, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
 | 
				
			||||||
 | 
					 * Report bugs and download new versions at http://pugixml.org/
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This library is distributed under the MIT License. See notice at the end
 | 
				
			||||||
 | 
					 * of this file.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This work is based on the pugxml parser, which is:
 | 
				
			||||||
 | 
					 * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef HEADER_PUGICONFIG_HPP
 | 
				
			||||||
 | 
					#define HEADER_PUGICONFIG_HPP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Uncomment this to enable wchar_t mode
 | 
				
			||||||
 | 
					// #define PUGIXML_WCHAR_MODE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Uncomment this to disable XPath
 | 
				
			||||||
 | 
					// #define PUGIXML_NO_XPATH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Uncomment this to disable STL
 | 
				
			||||||
 | 
					// #define PUGIXML_NO_STL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Uncomment this to disable exceptions
 | 
				
			||||||
 | 
					// #define PUGIXML_NO_EXCEPTIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Set this to control attributes for public classes/functions, i.e.:
 | 
				
			||||||
 | 
					// #define PUGIXML_API __declspec(dllexport) // to export all public symbols from DLL
 | 
				
			||||||
 | 
					// #define PUGIXML_CLASS __declspec(dllimport) // to import all classes from DLL
 | 
				
			||||||
 | 
					// #define PUGIXML_FUNCTION __fastcall // to set calling conventions to all public functions to fastcall
 | 
				
			||||||
 | 
					// In absence of PUGIXML_CLASS/PUGIXML_FUNCTION definitions PUGIXML_API is used instead
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Tune these constants to adjust memory-related behavior
 | 
				
			||||||
 | 
					// #define PUGIXML_MEMORY_PAGE_SIZE 32768
 | 
				
			||||||
 | 
					// #define PUGIXML_MEMORY_OUTPUT_STACK 10240
 | 
				
			||||||
 | 
					// #define PUGIXML_MEMORY_XPATH_PAGE_SIZE 4096
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Uncomment this to switch to header-only version
 | 
				
			||||||
 | 
					// #define PUGIXML_HEADER_ONLY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Uncomment this to enable long long support
 | 
				
			||||||
 | 
					// #define PUGIXML_HAS_LONG_LONG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Copyright (c) 2006-2015 Arseny Kapoulkine
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Permission is hereby granted, free of charge, to any person
 | 
				
			||||||
 | 
					 * obtaining a copy of this software and associated documentation
 | 
				
			||||||
 | 
					 * files (the "Software"), to deal in the Software without
 | 
				
			||||||
 | 
					 * restriction, including without limitation the rights to use,
 | 
				
			||||||
 | 
					 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					 * copies of the Software, and to permit persons to whom the
 | 
				
			||||||
 | 
					 * Software is furnished to do so, subject to the following
 | 
				
			||||||
 | 
					 * conditions:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The above copyright notice and this permission notice shall be
 | 
				
			||||||
 | 
					 * included in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
				
			||||||
 | 
					 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 | 
				
			||||||
 | 
					 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
				
			||||||
 | 
					 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 | 
				
			||||||
 | 
					 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 | 
				
			||||||
 | 
					 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
				
			||||||
 | 
					 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 | 
				
			||||||
 | 
					 * OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
							
								
								
									
										12485
									
								
								lib/pugixml/pugixml.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12485
									
								
								lib/pugixml/pugixml.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1400
									
								
								lib/pugixml/pugixml.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1400
									
								
								lib/pugixml/pugixml.hpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										52
									
								
								lib/pugixml/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								lib/pugixml/readme.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					pugixml 1.6 - an XML processing library
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (C) 2006-2015, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
 | 
				
			||||||
 | 
					Report bugs and download new versions at http://pugixml.org/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is the distribution of pugixml, which is a C++ XML processing library,
 | 
				
			||||||
 | 
					which consists of a DOM-like interface with rich traversal/modification
 | 
				
			||||||
 | 
					capabilities, an extremely fast XML parser which constructs the DOM tree from
 | 
				
			||||||
 | 
					an XML file/buffer, and an XPath 1.0 implementation for complex data-driven
 | 
				
			||||||
 | 
					tree queries. Full Unicode support is also available, with Unicode interface
 | 
				
			||||||
 | 
					variants and conversions between different Unicode encodings (which happen
 | 
				
			||||||
 | 
					automatically during parsing/saving).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The distribution contains the following folders:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						contrib/ - various contributions to pugixml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						docs/ - documentation
 | 
				
			||||||
 | 
							docs/samples - pugixml usage examples
 | 
				
			||||||
 | 
							docs/quickstart.html - quick start guide
 | 
				
			||||||
 | 
							docs/manual.html - complete manual
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						scripts/ - project files for IDE/build systems
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						src/ - header and source files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						readme.txt - this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This library is distributed under the MIT License:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2006-2015 Arseny Kapoulkine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person
 | 
				
			||||||
 | 
					obtaining a copy of this software and associated documentation
 | 
				
			||||||
 | 
					files (the "Software"), to deal in the Software without
 | 
				
			||||||
 | 
					restriction, including without limitation the rights to use,
 | 
				
			||||||
 | 
					copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the
 | 
				
			||||||
 | 
					Software is furnished to do so, subject to the following
 | 
				
			||||||
 | 
					conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be
 | 
				
			||||||
 | 
					included in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
				
			||||||
 | 
					EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 | 
				
			||||||
 | 
					OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
				
			||||||
 | 
					NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 | 
				
			||||||
 | 
					HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 | 
				
			||||||
 | 
					WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
				
			||||||
 | 
					FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 | 
				
			||||||
 | 
					OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
@@ -7,14 +7,30 @@ template<class GaugeField>
 | 
				
			|||||||
class Action { 
 | 
					class Action { 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 public:
 | 
					 public:
 | 
				
			||||||
  virtual void  init(const GaugeField &U, GridParallelRNG& pRNG) = 0;
 | 
					  virtual void  init (const GaugeField &U, GridParallelRNG& pRNG) = 0;  // 
 | 
				
			||||||
  virtual RealD S(const GaugeField &U)                           = 0;  // evaluate the action
 | 
					  virtual RealD S    (const GaugeField &U)                        = 0;  // evaluate the action
 | 
				
			||||||
  virtual void  deriv(const GaugeField &U,GaugeField & dSdU )    = 0;  // evaluate the action derivative
 | 
					  virtual void  deriv(const GaugeField &U,GaugeField & dSdU )     = 0;  // evaluate the action derivative
 | 
				
			||||||
  //virtual void  refresh(const GaugeField & ) {}                ; 
 | 
					  virtual void  refresh(const GaugeField & ) {};                        // Default to no-op for actions with no internal fields
 | 
				
			||||||
  // Boundary conditions?
 | 
					  // Boundary conditions?
 | 
				
			||||||
  // Heatbath?
 | 
					  // Heatbath?
 | 
				
			||||||
  virtual ~Action() {};
 | 
					  virtual ~Action() {};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Could derive PseudoFermion action with a PF field, FermionField, and a Grid; implement refresh
 | 
				
			||||||
 | 
					template<class GaugeField, class FermionField>
 | 
				
			||||||
 | 
					class PseudoFermionAction : public Action<GaugeField> {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
					  FermionField Phi;
 | 
				
			||||||
 | 
					  GridParallelRNG &pRNG;
 | 
				
			||||||
 | 
					  GridBase &Grid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  PseudoFermionAction(GridBase &_Grid,GridParallelRNG &_pRNG) : Grid(_Grid), Phi(&_Grid), pRNG(_pRNG) {
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual void refresh(const GaugeField &gauge) {
 | 
				
			||||||
 | 
					    gaussian(Phi,pRNG);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
}}
 | 
					}}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -149,6 +149,7 @@ PARALLEL_FOR_LOOP
 | 
				
			|||||||
    ////////////////////////////
 | 
					    ////////////////////////////
 | 
				
			||||||
    // spin trace outer product
 | 
					    // spin trace outer product
 | 
				
			||||||
    ////////////////////////////
 | 
					    ////////////////////////////
 | 
				
			||||||
 | 
					// FIXME : need to sum over fifth direction.
 | 
				
			||||||
    tmp = TraceIndex<SpinIndex>(outerProduct(Btilde,A)); // ordering here
 | 
					    tmp = TraceIndex<SpinIndex>(outerProduct(Btilde,A)); // ordering here
 | 
				
			||||||
    PokeIndex<LorentzIndex>(mat,tmp,mu);
 | 
					    PokeIndex<LorentzIndex>(mat,tmp,mu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,5 @@ namespace Grid{
 | 
				
			|||||||
	  
 | 
						  
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,13 +27,22 @@ namespace Grid{
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    template <class Algorithm> 
 | 
					    template <class Algorithm> 
 | 
				
			||||||
    class HybridMonteCarlo{
 | 
					    class HybridMonteCarlo{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const HMCparameters Params;
 | 
					      const HMCparameters Params;
 | 
				
			||||||
      GridSerialRNG sRNG;
 | 
					
 | 
				
			||||||
 | 
					      GridSerialRNG sRNG; // Fixme: need a RNG management strategy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      Integrator<Algorithm>& MD;
 | 
					      Integrator<Algorithm>& MD;
 | 
				
			||||||
      
 | 
					
 | 
				
			||||||
 | 
					      /////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					      // Metropolis step
 | 
				
			||||||
 | 
					      /////////////////////////////////////////////////////////
 | 
				
			||||||
      bool metropolis_test(const RealD DeltaH){
 | 
					      bool metropolis_test(const RealD DeltaH){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	RealD rn_test;
 | 
						RealD rn_test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	RealD prob = std::exp(-DeltaH);
 | 
						RealD prob = std::exp(-DeltaH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	random(sRNG,rn_test);
 | 
						random(sRNG,rn_test);
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
	std::cout<<GridLogMessage<< "--------------------------------------------\n";
 | 
						std::cout<<GridLogMessage<< "--------------------------------------------\n";
 | 
				
			||||||
@@ -47,14 +56,19 @@ namespace Grid{
 | 
				
			|||||||
	  std::cout<<GridLogMessage <<"-- REJECTED\n";
 | 
						  std::cout<<GridLogMessage <<"-- REJECTED\n";
 | 
				
			||||||
	  return false;
 | 
						  return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      /////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					      // Evolution
 | 
				
			||||||
 | 
					      /////////////////////////////////////////////////////////
 | 
				
			||||||
      RealD evolve_step(LatticeLorentzColourMatrix& U){
 | 
					      RealD evolve_step(LatticeLorentzColourMatrix& U){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	MD.init(U); // set U and initialize P and phi's 
 | 
						MD.init(U); // set U and initialize P and phi's 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	RealD H0 = MD.S(U); // initial state action  
 | 
						RealD H0 = MD.S(U); // initial state action  
 | 
				
			||||||
	std::cout<<GridLogMessage<<"Total H before = "<< H0 << "\n";
 | 
						std::cout<<GridLogMessage<<"Total H before = "<< H0 << "\n";
 | 
				
			||||||
      
 | 
					
 | 
				
			||||||
	MD.integrate(U);
 | 
						MD.integrate(U);
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
	RealD H1 = MD.S(U); // updated state action            
 | 
						RealD H1 = MD.S(U); // updated state action            
 | 
				
			||||||
@@ -64,13 +78,17 @@ namespace Grid{
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
    HybridMonteCarlo(HMCparameters Pms, 
 | 
					
 | 
				
			||||||
		     Integrator<Algorithm>& MolDyn):
 | 
					      /////////////////////////////////////////
 | 
				
			||||||
      Params(Pms),MD(MolDyn){
 | 
					      // Constructor
 | 
				
			||||||
	//FIXME
 | 
					      /////////////////////////////////////////
 | 
				
			||||||
	// initialize RNGs also with seed
 | 
					      HybridMonteCarlo(HMCparameters Pms,  Integrator<Algorithm>& MolDyn): Params(Pms),MD(MolDyn) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//FIXME...  initialize RNGs also with seed ; RNG management strategy
 | 
				
			||||||
	sRNG.SeedRandomDevice();
 | 
						sRNG.SeedRandomDevice();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ~HybridMonteCarlo(){};
 | 
					      ~HybridMonteCarlo(){};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,7 +113,8 @@ namespace Grid{
 | 
				
			|||||||
	  DeltaH = evolve_step(Ucopy);
 | 
						  DeltaH = evolve_step(Ucopy);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	  if(metropolis_test(DeltaH)) Uin = Ucopy;
 | 
						  if(metropolis_test(DeltaH)) Uin = Ucopy;
 | 
				
			||||||
	  //need sync?
 | 
						  //need sync? // Query Guido on this comment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bin_PROGRAMS = Test_GaugeAction Test_cayley_cg Test_cayley_coarsen_support Test_cayley_even_odd Test_cayley_ldop_cr Test_cf_coarsen_support Test_cf_cr_unprec Test_contfrac_cg Test_contfrac_even_odd Test_cshift Test_cshift_red_black Test_dwf_cg_prec Test_dwf_cg_schur Test_dwf_cg_unprec Test_dwf_cr_unprec Test_dwf_even_odd Test_dwf_fpgcr Test_dwf_hdcr Test_gamma Test_hmc_WilsonGauge Test_lie_generators Test_main Test_multishift_sqrt Test_nersc_io Test_quenched_update Test_remez Test_rng Test_rng_fixed Test_simd Test_stencil Test_wilson_cg_prec Test_wilson_cg_schur Test_wilson_cg_unprec Test_wilson_cr_unprec Test_wilson_even_odd Test_wilson_force Test_wilson_force_phiMphi
 | 
					bin_PROGRAMS = Test_GaugeAction Test_cayley_cg Test_cayley_coarsen_support Test_cayley_even_odd Test_cayley_ldop_cr Test_cf_coarsen_support Test_cf_cr_unprec Test_contfrac_cg Test_contfrac_even_odd Test_cshift Test_cshift_red_black Test_dwf_cg_prec Test_dwf_cg_schur Test_dwf_cg_unprec Test_dwf_cr_unprec Test_dwf_even_odd Test_dwf_fpgcr Test_dwf_hdcr Test_gamma Test_hmc_WilsonGauge Test_lie_generators Test_main Test_multishift_sqrt Test_nersc_io Test_quenched_update Test_remez Test_rng Test_rng_fixed Test_simd Test_stencil Test_wilson_cg_prec Test_wilson_cg_schur Test_wilson_cg_unprec Test_wilson_cr_unprec Test_wilson_even_odd Test_wilson_force Test_wilson_force_phiMdagMphi Test_wilson_force_phiMphi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test_GaugeAction_SOURCES=Test_GaugeAction.cc
 | 
					Test_GaugeAction_SOURCES=Test_GaugeAction.cc
 | 
				
			||||||
@@ -146,6 +146,10 @@ Test_wilson_force_SOURCES=Test_wilson_force.cc
 | 
				
			|||||||
Test_wilson_force_LDADD=-lGrid
 | 
					Test_wilson_force_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Test_wilson_force_phiMdagMphi_SOURCES=Test_wilson_force_phiMdagMphi.cc
 | 
				
			||||||
 | 
					Test_wilson_force_phiMdagMphi_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test_wilson_force_phiMphi_SOURCES=Test_wilson_force_phiMphi.cc
 | 
					Test_wilson_force_phiMphi_SOURCES=Test_wilson_force_phiMphi.cc
 | 
				
			||||||
Test_wilson_force_phiMphi_LDADD=-lGrid
 | 
					Test_wilson_force_phiMphi_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user