Parallel Recursion Project FAQ

What do you mean by "doing microscopic computations in macroscopic systems"?
We mean that we model the system under study from a microscopic point
of view, i.e. by a Hamiltonian describing interactions between individual
atoms or electrons. In our simulations, we can include a large number of
these particles (e.g. atomic sites in a lattice) while maintaining the
microscopic identity of all of them. By 'large' we mean 10^{15}
which approaches the number of atoms found in realworld laboratoy samples.
By improving the efficiency of our algorithm, we expect to handle even
bigger systems in the future. Compare this to other commonplace simulation
types such as molecular dynamics which even on today's biggest computers
struggle with 10^{9} or so atoms.

How do you do it?
The magic word is 'dynamic recursion.' With dynamic recursion, we use
a dynamically varying basis set for the transformation. This is possible
because of the unique mathematical behavior of the recursion method with
respect to errors introduced along the way. The errors made at each step
decays exponentially with distance from the starting state and so the total
error remains bounded. This allows us to throw out small elements in the
transformation basishence dynamically varying. In other words, we don't
have to include all the sites in a lattice all the time. This saves
memory and CPU time which enables us to simulate systems with more sites
than could actually be represented in computer memory. Think about it as
analogous to the difference between virtual and physical memory.

What is this 'recursion method' business?
The recursion method is in essence a unitary matrix transformation.
In phyics applications, it is used to transform the Hamiltonian matrix
given in some suitable basis set into a tridiagonal matrix. From the tridiagonal
matrix, one can very easily extract local distributions of states, such
as a projected density of states (PDOS) from which further quantities of
interest can be calculated.

OK, I understand about the recursion method, but why 'dynamic'?
The recursion method generates this matrix transformation successively
by creating a new set of basis states. The PDOS converges exponentially
with the number of basis states, such that one can truncate the process
after a finite number of steps with an exponentially good approximation
to the PDOS obtained from a real, infinite system. This exponential process
also holds for the errors introduced along the way (e.g. as a result of
finite computer precision). In dynamic recursion, this is systematically
exploited in that small components in successive column vectors of the
transformation matrix are omitted. The total error will still remain bounded,
but one gains an enormous computational advantage in terms of storage space
and CPU time.

What is your model of parallelism?
We currently use multithreading (pthreads). This works well on sharedmemory
architectured. In the future, we plan to support MPI for clustered SMP's
and/or a highperformance parallel communications package such as Tulip,
Nexus and SMARTS.

What platforms are supported?
Our development platform is an SGI Power Challenge. In addition, we
are currently porting our code to a Linux cluster.

What compiler do you use?
We use KAI's KCC. We use a lot of the latest C++ features which are
well supported by KCC. In addition, its optimizer is superb.