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