
Lattice QCD in a Nutshell
Modern Elementary Particle Phsysics can be summarized as follows:
 Any system can be described in terms of its degrees of freedom.
 The irreducible degrees of freedom are called elementary particles and they are classified in terms of their properties. An elementary particle does not necesassrily occupies a position in space and time and it is more similar to an "object" in a Computer Science sense than to an "object" in the common physical sense. In this CS analogy a particle is an "object" because it has "attributes" and "an internal state", Quarks and Leptons are different "classes" of which the "particles" are instances of.
 The law of dynsmics of any system can be described by one single expression expression written in the language defined by these "objects". This expression is called Lagrangian and identified by the letter L
 Any measurement on the system can be described by an expression O called Operator
 The Feynman Path Integral provides an apgorithmic technique for computing the distribution of all possible results of any measurement O on any system L:
 Our universe is a system made of elementary particles and it can be descrbed by a Lagrangian. If we ignore gravity which is very weak at small length scales, it can be described by the Standard Model Lagrangian:
The blue terms in this expression are known as Quantum Chromo Dynamics (QCD in short) and they are responsible for bounding quarks together and creating composite particles such as Proton and Neutrons.
FermiQCD is a library of algorithms for performing Lattice Gauge Theory computations, i.e. numerical computations of the Feynman Path Integral for a Lagrangian L that includes QCD and QCDlike terms (for example any SU(n) gauge group).

Video Tutorials and Visualizations
search vimeo
Fully Object Oriented
gauge_field U(lattice,Nc);
cout << U(x+mu,nu);
Natural Linear Algebra
mdp_matrix A(Nc,Nc);
cout << inv(A*A)+exp(3*I*A);
Local PRNG
forallsites(x)
cout << lattice.random(x).SU(Nc);
Parallel but trasparent
forallsites(x)
psi(x)=U(x,mu)*psi(x+mu);
psi.update();
Arbitrary lattice dimensions
int box[]={4,4,4,4,4,4};
mdp_lattice lattice(6,box);
Variety of fields
mdp_field<float> f(lattice);
gauge_field U(lattice,Nc);
fermi_field psi(lattice,Nc);
staggered_field phi(lattice,Nc);
dwfermi_field chi(lattice,Nc);
(and more...)
Variety of actions
Wilson, Clover, unisotropic,
Asqtad, Domain Wall, etc...
And algorithms
Minimum Residue,
Stabilized Biconjugate Gradient,
BiCGStabUML,
Lanczos, etc.
New: SSE/SSE2 Optimizations
g++ test.cpp DSSE2
New: Parallel simulator
./a.out PSIM_NPROCS=4
(no MPI needed)
.. or just use MPI
mpiCC test.cpp DPARALLEL
mpirun np 4 a.out
