$Id: README,v 1.3 2010/05/18 06:09:09 kmura Exp $
==========================================================================
Geant4 MPI Interface

  Author:
  Koichi Murakami (KEK) / Koichi.Murakami@kek.jp
==========================================================================

About the interface
===================
G4MPI is a native interface with MPI libraries. The directory contains
a Geant4 UI library and a couple of parallelized examples.
Using this interface, users applications can be parllelized with
different MPI compliant libraries, such as OpenMPI, LAM/MPI, MPICH2,
and so on.

System Requirements:
-------------------
* Platform

- Linux (32bit/64bit)
- MacOS (Tiger)


* MPI implementation

- Open MPI (1.4.2)
  http://www.open-mpi.org/

- LAM/MPI (7.1.3) (development is terminated. maintenance only)
  http://www.lam-mpi.org/

- MPICH2 (1.2.1p1)
  http://www.mcs.anl.gov/research/projects/mpich2/

* Optional
- ROOT for histogramming/analysis


G4MPI UI library
----------------
G4MPI UI library is provided in the "mpi_interface" directory.
Start with building the G4MPI UI library according to the instruction
in the directory.


How to make parallel applications:
----------------------------------
* An example of a main program:

#include "G4MPImanager.hh"
#include "G4MPIsession.hh"

int main(int argc,char** argv)
{
  // At first, G4MPImanager/G4MPIsession should be created.
  G4MPImanager* g4MPI= new G4MPImanager(argc,argv);

  // MPI session (G4MPIsession) instead of G4UIterminal
  G4MPIsession* session= g4MPI-> GetMPIsession();

  // user application setting
  G4RunManager* runManager= new G4RunManager();

  // ....

  // After user application setting, just start a MPI session.
  // MPIsession treats both interactive and batch modes.
  session-> SessionStart();

  // Finally, terminate the program
  delete g4MPI;
  delete runManager;
}


* Notes about session shell:

LAM/MPI users can use "G4tcsh" as an interactive session shell.
For other users (Open MPI/MPICH2), plese use G4csh (default).

In case of OpenMPI, LD_LIBRARY_PATH for OpenMPI runtime libraries
should be set at run time. Alternatively, you can add this path
to the dynamic linker configuration using `ldconfig`.
(needs sys-admin authorization)


How to use:
-----------
* MPI runtime rnvironment

1. Make hosts/cluster configuration of your MPI environment.

2. Launch MPI runtime environment, typically executing
   lamboot (LAM) / mpdboot (MPICH2).

* How to run
For example,

> mpiexec -n # <your application>

Instead, "mpirun" command is more convenient for LAM users.


MPI G4UI commands:
------------------
G4UI commands handling the G4MPI interface are placed in /mpi/.

Command directory path : /mpi/

Guidance :
MPI control commands

 Sub-directories :
 Commands :
   verbose *        Set verbose level.
   status *         Show mpi status.
   execute *        Execute a macro file. (=/control/execute)
   beamOn *         Start a parallel run w/ thread.
   .beamOn *        Start a parallel run w/o thread.
   masterWeight *   Set weight for master node.
   wait *           Wait until beamOn-s on all nodes are done. (batch mode only)
   showSeeds *      Show seeds of MPI nodes.
   setMasterSeed *  Set a master seed for the seed generator.
   setSeed *        Set a seed for a specified node.

* Notes:
While "/run/beamOn" and "/mpi/beamOn" commands invoke beam-on in background,
so you can input UI commands even while event processing.

The original "/control/execute" and "/run/beamOn" are overwritten
with "/mpi/execute" and "/mpi/beamOn" commands respectively,
customized for the MPI interface.


Examples
========
There are a couple of examples for Geant4 MPI applications.

In some cases, you need to set some additional environment variables
for running examples:

- G4LEVELGAMMADATA : directory path for the data of
                     "low energy electromagnetic processes".

For running ROOT applications,

- ROOTSYS         : root path of the ROOT package
- LD_LIBRARY_PATH : add ROOT library path, such as $(ROOTSYS)/lib/root


[exMPI01]
A simple application.

* Geometry     : chamber / calorimeter
* Primary      : particle gun (200 MeV electron as default)
* Physics List : standard EM

- Particles are transported in a geometry without any scoring.
- Learn how to parallelize your G4 session.


[exMPI02] (ROOT application)
An example of dosimetry in a water phantom.

* Geometry     : water phantom
* Primary      : particle gun (200 MeV proton as default)
* Physics List : QGSP_BIC

- Score dose distribution in a water phantom.
- Learn how to paralleize your applications.
- Create a ROOT file containing histograms in each node.
  * treat multiple outputs properly:
    each slave node generate a ROOT file, whose file name should
    be different from each other.

