  This paper describes `Ludwig', a versatile code for the simulation of
Lattice-Boltzmann (LB) models in 3-D on cubic lattices. In fact `Ludwig' is not
a single code, but a set of codes that share certain common routines, such as
I/O and communications. If `Ludwig' is used as intended, a variety of complex
fluid models with different equilibrium free energies are simple to code, so
that the user may concentrate on the physics of the problem, rather than on
parallel computing issues. Thus far, `Ludwig''s main application has been to
symmetric binary fluid mixtures. We first explain the philosophy and structure
of `Ludwig' which is argued to be a very effective way of developing large
codes for academic consortia. Next we elaborate on some parallel implementation
issues such as parallel I/O, and the use of MPI to achieve full portability and
good efficiency on both MPP and SMP systems. Finally, we describe how to
implement generic solid boundaries, and look in detail at the particular case
of a symmetric binary fluid mixture near a solid wall. We present a novel
scheme for the thermodynamically consistent simulation of wetting phenomena, in
the presence of static and moving solid boundaries, and check its performance.
