Import Geant4 10.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 12:08:39 +02:00
parent 286caacf06
commit c9b32a6c0a
5770 changed files with 1050949 additions and 367105 deletions
+6 -12
View File
@@ -44,25 +44,19 @@ How to build G4MPI
==================
To build G4MPI library, use CMake on Geant4 library installed with CMake build.
Check `CMakeList.txt`, especially the following two variables
should be taken care to match your MPI library
eg.
set(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
Follow these commands,
> cd source
> mkdir build
> cd build
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n ..
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n -DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_INSTALL_PREFIX=<where-G4mpi-lib-will-be-installed> <g4source>/examples/extended/parallel/MPI/source
> make
> make install
The library and header files will be installed on the installation directory
of Geant4.
Replace mpicxx with your MPI compiler wrapper.
The library and header files will be installed on the installation directory specified in CMAKE_CXX_COMPILER
a CMake configuration file will also be installed (see examples on how to compile an application using G4mpi)
- - -
+11
View File
@@ -9,6 +9,17 @@
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
21 July 2014 A. Dotti (MPI-V10-00-02)
- Fixing bug for RNG seed distribution in MT compilations
(Bug #1653)
13 June 2014 A. Dotti (MPI-V10-00-01)
- Adding first version of G4RunMerger and
G4ScorerMerger
10 June 2014 A. Dotti (MPI-V10-00-00)
- New CMake receipe: increase portability of the code
10 Novembeer 2013 K. Murakami (MPI-V09-06-00)
[source]
- new coding guide line
+8 -14
View File
@@ -236,27 +236,21 @@ such as Open MPI, LAM/MPI, Intel MPI etc.</p>
<p>To build G4MPI library, use CMake on Geant4 library installed with CMake build.</p>
<p>Check <code>CMakeList.txt</code>, especially the following two variables
should be taken care to match your MPI library</p>
<pre><code>eg.
set(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
</code></pre>
<p>Follow these commands,</p>
<pre><code>&gt; cd source
&gt; mkdir build
<pre><code>&gt; mkdir build
&gt; cd build
&gt; cmake -DGeant4_DIR=&lt;your Geant4 install path&gt;/lib64/Geant4-V.m.n ..
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
&gt; cmake -DGeant4_DIR=&lt;your Geant4 install path&gt;/lib64/Geant4-V.m.n -DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_INSTALL_PREFIX=&lt;where-G4mpi-lib-will-be-installed&gt; &lt;g4source&gt;/examples/extended/parallel/MPI/source
&gt; make
&gt; make install
</code></pre>
<p>The library and header files will be installed on the installation directory
of Geant4.</p>
<p>Replace mpicxx with your MPI compiler wrapper.</p>
<p>The library and header files will be installed on the installation directory specified in CMAKE_CXX_COMPILER
a CMake configuration file will also be installed (see examples on how
to compile an application using G4mpi)</p>
<hr>
+7 -12
View File
@@ -37,25 +37,20 @@ How to build G4MPI
==================
To build G4MPI library, use CMake on Geant4 library installed with CMake build.
Check `CMakeList.txt`, especially the following two variables
should be taken care to match your MPI library
eg.
set(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
Follow these commands,
> cd source
> mkdir build
> cd build
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n ..
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n -DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_INSTALL_PREFIX=<where-G4mpi-lib-will-be-installed> <g4source>/examples/extended/parallel/MPI/source
> make
> make install
The library and header files will be installed on the installation directory
of Geant4.
Replace mpicxx with your MPI compiler wrapper.
The library and header files will be installed on the installation directory specified in CMAKE_CXX_COMPILER
a CMake configuration file will also be installed (see examples on how to compile an application using G4mpi)
- - -
@@ -28,20 +28,19 @@ How to build
============
Use CMake on Geant4 library installed with CMake build.
Check `CMakeList.txt`, especially the following two variables
should be taken care to match your MPI library.
eg.
set(CMAKE_CXX_COMPILER mpicxx)
# set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
This example requires G4mpi library to be installed
(see examples/extended/parallel/MPI/source/REDME.md)
Follow these commands,
> mkdir build
> cd build
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n ..
> cmake -DG4mpi_DIR=<where-G4mpi-wasintalled>/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
-DGeant4_DIR=<your Geant4 install path>/lib[64]/Geant4-V.m.n <path-to-source>
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
> make
> make install
Repalce mpicxx with your MPI-compiler wrapper
*/
@@ -10,7 +10,7 @@ project(exMPI01)
find_package(MPI REQUIRED)
# modify these variables if needed
set(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_COMPILER mpiicpc)
#set(CMAKE_CXX_INCLUDE_PATH )
@@ -26,26 +26,16 @@ else()
find_package(Geant4 REQUIRED)
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif()
find_package(G4mpi REQUIRED)
message(${G4mpi_INCLUDE_DIR})
message(${G4mpi_LIBRARIES})
#----------------------------------------------------------------------------
# Setup Geant4 include directories and compile definitions
#
include(${Geant4_USE_FILE})
#----------------------------------------------------------------------------
# Add G4mpi library
#
SET(Geant4_LIBRARIES ${Geant4_LIBRARIES} G4mpi)
ADD_LIBRARY(G4mpi SHARED IMPORTED)
SET_PROPERTY(TARGET G4mpi APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
SET_TARGET_PROPERTIES(G4mpi PROPERTIES
IMPORTED_LOCATION_RELEASE "${Geant4_DIR}/../libG4mpi.so"
IMPORTED_SONAME_RELEASE "libG4mpi.so"
)
#----------------------------------------------------------------------------
# Locate sources and headers for this project
#
@@ -53,18 +43,16 @@ include_directories(${PROJECT_SOURCE_DIR}/include)
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${Geant4_INCLUDE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include
${Geant4_INCLUDE_DIR}
${G4mpi_INCLUDE_DIR})
#----------------------------------------------------------------------------
# Add the executable, and link it to the Geant4 libraries
#
add_executable(exMPI01 exMPI01.cc ${sources} ${headers})
target_link_libraries(exMPI01 ${Geant4_LIBRARIES})
set_target_properties(exMPI01
PROPERTIES INSTALL_RPATH
${Geant4_DIR}/..
BUILD_WITH_INSTALL_RPATH TRUE)
target_link_libraries(exMPI01 ${Geant4_LIBRARIES} ${G4mpi_LIBRARIES})
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we
@@ -225,21 +225,19 @@ pre > code {
<p>Use CMake on Geant4 library installed with CMake build.</p>
<p>Check <code>CMakeList.txt</code>, especially the following two variables
should be taken care to match your MPI library.</p>
<pre><code>eg.
set(CMAKE_CXX_COMPILER mpicxx)
# set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
</code></pre>
<p>This example requires G4mpi library to be installed
(see examples/extended/parallel/MPI/source/REDME.md)</p>
<p>Follow these commands,</p>
<pre><code>&gt; mkdir build
&gt; cd build
&gt; cmake -DGeant4_DIR=&lt;your Geant4 install path&gt;/lib64/Geant4-V.m.n ..
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
&gt; make
&gt; cmake -DG4mpi_DIR=&lt;where-G4mpi-wasintalled &gt;/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
-DGeant4_DIR=&lt;your Geant4 install path
&gt;/lib[64]/Geant4-V.m.n &lt;path-to-source&gt;<
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
&gt; make<
&gt; make install
</code></pre>
@@ -21,19 +21,17 @@ How to build
------------
Use CMake on Geant4 library installed with CMake build.
Check `CMakeList.txt`, especially the following two variables
should be taken care to match your MPI library.
eg.
set(CMAKE_CXX_COMPILER mpicxx)
# set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
This example requires G4mpi library to be installed
(see examples/extended/parallel/MPI/source/REDME.md)
Follow these commands,
> mkdir build
> cd build
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n ..
> cmake -DG4mpi_DIR=<where-G4mpi-wasintalled>/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
-DGeant4_DIR=<your Geant4 install path>/lib[64]/Geant4-V.m.n <path-to-source>
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
> make
> make install
Repalce mpicxx with your MPI-compiler wrapper
@@ -32,20 +32,19 @@ How to build
============
Use CMake on Geant4 library installed with CMake build.
Check `CMakeList.txt`, especially the following two variables
should be taken care to match your MPI library.
eg.
set(CMAKE_CXX_COMPILER mpicxx)
# set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
This example requires G4mpi library to be installed
(see examples/extended/parallel/MPI/source/REDME.md)
Follow these commands,
> mkdir build
> cd build
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n ..
> cmake -DG4mpi_DIR=<where-G4mpi-wasintalled>/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
-DGeant4_DIR=<your Geant4 install path>/lib[64]/Geant4-V.m.n <path-to-source>
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
> make
> make install
Repalce mpicxx with your MPI-compiler wrapper
*/
@@ -9,12 +9,6 @@ project(exMPI02)
# check MPI package...
find_package(MPI REQUIRED)
# modify these variables if needed
set(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_COMPILER mpiicpc)
#set(CMAKE_CXX_INCLUDE_PATH )
#----------------------------------------------------------------------------
# Find Geant4 package, activating all available UI and Vis drivers by default
# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui
@@ -26,10 +20,7 @@ else()
find_package(Geant4 REQUIRED)
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif()
find_package(G4mpi REQUIRED)
#----------------------------------------------------------------------------
# Setup Geant4 include directories and compile definitions
#
@@ -44,39 +35,24 @@ if(NOT ROOT_FOUND)
return()
endif()
#----------------------------------------------------------------------------
# Add G4mpi library
#
SET(Geant4_LIBRARIES ${Geant4_LIBRARIES} G4mpi)
ADD_LIBRARY(G4mpi SHARED IMPORTED)
SET_PROPERTY(TARGET G4mpi APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
SET_TARGET_PROPERTIES(G4mpi PROPERTIES
IMPORTED_LOCATION_RELEASE "${Geant4_DIR}/../libG4mpi.so"
IMPORTED_SONAME_RELEASE "libG4mpi.so"
)
#----------------------------------------------------------------------------
# Locate sources and headers for this project
#
#include_directories(${PROJECT_SOURCE_DIR}/include)
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include
${Geant4_INCLUDE_DIR}
${ROOT_INCLUDE_DIR})
${ROOT_INCLUDE_DIR}
${G4mpi_INCLUDE_DIR})
#----------------------------------------------------------------------------
# Add the executable, and link it to the Geant4 libraries
#
add_executable(exMPI02 exMPI02.cc ${sources} ${headers})
target_link_libraries(exMPI02 ${Geant4_LIBRARIES} ${ROOT_LIBRARIES})
set_target_properties(exMPI02
PROPERTIES INSTALL_RPATH
${Geant4_DIR}/..
BUILD_WITH_INSTALL_RPATH TRUE)
target_link_libraries(exMPI02 ${Geant4_LIBRARIES} ${ROOT_LIBRARIES} ${G4mpi_LIBRARIES})
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we
@@ -225,23 +225,22 @@ from each other.</li>
<p>Use CMake on Geant4 library installed with CMake build.</p>
<p>Check <code>CMakeList.txt</code>, especially the following two variables
should be taken care to match your MPI library.</p>
<pre><code>eg.
set(CMAKE_CXX_COMPILER mpicxx)
# set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
</code></pre>
<p>This example requires G4mpi library to be installed
(see examples/extended/parallel/MPI/source/REDME.md)</p>
<p>Follow these commands,</p>
<pre><code>&gt; mkdir build
&gt; cd build
&gt; cmake -DGeant4_DIR=&lt;your Geant4 install path&gt;/lib64/Geant4-V.m.n ..
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
&gt; make
&gt; cmake -DG4mpi_DIR=&lt;where-G4mpi-wasintalled &gt;/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
-DGeant4_DIR=&lt;your Geant4 install path
&gt;/lib[64]/Geant4-V.m.n &lt;path-to-source&gt;<
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
&gt; make<
&gt; make install
</code></pre>
</body>
</html>
@@ -28,18 +28,17 @@ How to build
------------
Use CMake on Geant4 library installed with CMake build.
Check `CMakeList.txt`, especially the following two variables
should be taken care to match your MPI library.
eg.
set(CMAKE_CXX_COMPILER mpicxx)
# set(CMAKE_CXX_INCLUDE_PATH ) set if necessary
This example requires G4mpi library to be installed
(see examples/extended/parallel/MPI/source/REDME.md)
Follow these commands,
> mkdir build
> cd build
> cmake -DGeant4_DIR=<your Geant4 install path>/lib64/Geant4-V.m.n ..
> cmake -DG4mpi_DIR=<where-G4mpi-wasintalled>/lib[64]/G4mpi -DCMAKE_CXX_COMPILER=mpicxx \
-DGeant4_DIR=<your Geant4 install path>/lib[64]/Geant4-V.m.n <path-to-source>
(V.m.n is the version of Geant4, eg. Geant4-9.6.0)
> make
> make install
Repalce mpicxx with your MPI-compiler wrapper
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
/// @file exMPI02.cc
// $Id: exMPI02.cc 78126 2013-12-03 17:43:56Z gcosmo $
// $Id: exMPI02.cc 82385 2014-06-18 09:25:07Z gcosmo $
//
/// @brief A MPI example code
@@ -45,7 +45,7 @@
#include "ActionInitialization.hh"
#include "DetectorConstruction.hh"
#include "FTFP_BERT.hh"
#include "G4ScoringManager.hh"
int main(int argc, char** argv)
{
// --------------------------------------------------------------------
@@ -73,7 +73,8 @@ int main(int argc, char** argv)
#else
G4RunManager* runManager = new G4RunManager();
#endif
G4ScoringManager * scManager = G4ScoringManager::GetScoringManager();
scManager->SetVerboseLevel(1);
// setup your application
runManager-> SetUserInitialization(new DetectorConstruction);
runManager-> SetUserInitialization(new FTFP_BERT);
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: RunAction.cc 78126 2013-12-03 17:43:56Z gcosmo $
// $Id: RunAction.cc 82385 2014-06-18 09:25:07Z gcosmo $
//
/// @file RunAction.cc
/// @brief Describe run actions
@@ -34,6 +34,9 @@
#include "Analysis.hh"
#include "RunAction.hh"
#include "G4MPIRunMerger.hh"
#include "G4MPIScorerMerger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RunAction::RunAction()
{
@@ -52,12 +55,27 @@ void RunAction::BeginOfRunAction(const G4Run*)
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RunAction::EndOfRunAction(const G4Run*)
void RunAction::EndOfRunAction(const G4Run* arun)
{
G4bool is_worker = G4Threading::IsWorkerThread();
if ( is_worker ) return;
G4int rank = G4MPImanager::GetManager()-> GetRank();
G4cout<<"================================================"<<G4endl;
G4cout<<"My rank is: "<<rank<<G4endl;
G4cout<<"================================================"<<G4endl;
G4MPIRunMerger rm( arun );
//rm.SetVerbosity( 3 );
rm.Merge();
//G4cout<<"Num events: "<<arun->GetNumberOfEvent()<<G4endl;
if ( G4ScoringManager::GetScoringManagerIfExist() ) {
G4MPIScorerMerger sm( G4ScoringManager::GetScoringManagerIfExist() );
//sm.SetVerbosity(4);
sm.Merge();
}
G4cout<<"================================================"<<G4endl;
G4cout<<"================================================"<<G4endl;
char str[64];
sprintf(str, "dose-%03d.root", rank);
@@ -8,22 +8,13 @@ cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
# check MPI package...
find_package(MPI REQUIRED)
# modify these variables if needed
set(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_COMPILER mpiicpc)
#set(CMAKE_CXX_INCLUDE_PATH )
set(BUILD_SHARED_LIBS TRUE CACHE BOOL "Build shared library")
message(STATUS "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}")
#------------------------------------------------------------------------------
find_package(Geant4 REQUIRED)
include(${Geant4_USE_FILE})
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif()
#if(NOT CMAKE_BUILD_TYPE)
# set(CMAKE_BUILD_TYPE "RelWithDebInfo")
#endif()
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${Geant4_INCLUDE_DIR})
@@ -38,6 +29,8 @@ add_library(G4mpi
src/G4UImpish.cc
src/G4VMPIseedGenerator.cc
src/G4VMPIsession.cc
src/G4MPIScorerMerger.cc
src/G4MPIRunMerger.cc
)
# headers
@@ -51,9 +44,22 @@ set(HEADERS
include/G4UImpish.hh
include/G4VMPIseedGenerator.hh
include/G4VMPIsession.hh
include/G4MPIScorerMerger.hh
include/G4MPIRunMerger.hh
)
# install
INSTALL(TARGETS G4mpi DESTINATION ${Geant4_DIR}/..)
INSTALL(FILES ${HEADERS} DESTINATION ${Geant4_INCLUDE_DIR})
INSTALL(TARGETS G4mpi DESTINATION lib)
INSTALL(FILES ${HEADERS} DESTINATION include)
INSTALL(FILES ${PROJECT_BINARY_DIR}/G4mpiConfig.cmake DESTINATION lib/G4mpi)
#Generate G4mpiConfig.cmake file
#Get full path of library in installation directory
GET_PROPERTY( G4MPIFULLPATH TARGET G4mpi PROPERTY LOCATION)
GET_FILENAME_COMPONENT(G4MPIFULLPATH ${G4MPIFULLPATH} NAME)
SET( G4MPIFULLPATH "${CMAKE_INSTALL_PREFIX}/lib/${G4MPIFULLPATH}")
SET(G4MPILIB G4mpi)
CONFIGURE_FILE(G4mpiConfig.cmake.in
${PROJECT_BINARY_DIR}/G4mpiConfig.cmake
@ONLY)
@@ -0,0 +1,20 @@
# -Configures for the use of G4-mpi interface
# This sets the following
# G4mpi_INCLUDE_DIR directory where the include files are installed
# G4mpi_LIBRARIES library of the G4-MPI interface
# Usage:
# Add -DG4mpi_DIR=.... to cmake command line when building a G4-MPI enabled application
SET(G4mpi_INCLUDE_DIR
@CMAKE_INSTALL_PREFIX@/include)
SET(G4mpi_LIBRARIES
@G4MPILIB@)
IF ( BUILD_STATIC_LIBS )
add_library(@G4MPILIB@ STATIC IMPORTED)
ELSE()
add_library(@G4MPILIB@ SHARED IMPORTED)
ENDIF()
set_target_properties(@G4MPILIB@ PROPERTIES
IMPORTED_LOCATION @G4MPIFULLPATH@)
SET(G4mpi_FOUND TRUE)
@@ -0,0 +1,63 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4MPIRUNMERGER_HH
#define G4MPIRUNMERGER_HH
#include "G4Run.hh"
#include <mpi.h>
#include "G4MPImanager.hh"
class G4MPIRunMerger {
public:
G4MPIRunMerger( const G4Run* aRun ,
G4int destination = G4MPImanager::kRANK_MASTER ,
G4int verbosity = 0);
virtual ~G4MPIRunMerger() {}
void SetRun( G4Run* r ) { run = r; }
const G4Run* GetRun() const { return run; }
void SetDestinationRank( G4int i ) { destinationRank = i; }
G4int GetDestinationRank() const { return destinationRank; }
G4int GetCommSize() const { return commSize; }
virtual void Merge();
void SetVerbosity( G4int ver ) { verbose = ver; }
G4int GetVerbosity() const { return verbose; }
protected:
virtual void Send();
virtual void Receive(G4int rank);
void SendDouble( G4double* val , G4int size=1);
void SendInt( G4int* val , G4int size=1);
void ReceiveDouble( G4int rank , G4double* val , G4int size=1);
void ReceiveInt(G4int rank , G4int* val, G4int size=1);
G4int destinationRank;
G4Run* run;
G4int commSize;
MPI::Intracomm COMM_G4COMMAND_;
G4int verbose;
};
#endif //G4MPIRUNMERGER_HH
@@ -0,0 +1,77 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4MPISCORERMERGER_HH
#define G4MPISCORERMERGER_HH
#include "G4ScoringManager.hh"
#include <vector>
#include <mpi.h>
#include "G4MPImanager.hh"
class G4MPIScorerMerger {
public:
G4MPIScorerMerger( G4ScoringManager* mgr,
G4int destination = G4MPImanager::kRANK_MASTER,
G4int verbosity = 0 );
virtual ~G4MPIScorerMerger() { clear(); }
void SetDestinationRank( G4int i ) { destinationRank = i; }
G4int GetDestinationRank() const { return destinationRank; }
void SetScoringManager( G4ScoringManager* mgr ) { scoringManager = mgr; }
G4ScoringManager* GetScoringManager() const { return scoringManager; }
G4int GetCommSize() const { return commSize; }
virtual void Merge();
void SetVerbosity( G4int ver ) { verbose = ver; }
G4int GetVerbosity() const { return verbose; }
protected:
//Internal MPI-friendly format
//for a single MeshScoreMap
struct convMap_t {
G4String name;
G4int numElems;
G4int* indexes;
G4double* values;
};
virtual convMap_t* convertMap( const G4String& mapName ,
G4THitsMap<double>* map ) const;
virtual void convertMesh( const G4VScoringMesh* mesh );
void clear();
std::vector<convMap_t*> convertedMesh;
G4int meshID;
G4ScoringManager* scoringManager;
G4int commSize;
G4int destinationRank;
MPI::Intracomm COMM_G4COMMAND_;
G4int verbose;
virtual void SendOneMesh();
virtual void ReceiveOneMesh();
virtual void MergeOneMesh();
friend std::ostream& operator<<(std::ostream& os , const convMap_t& cnv );
};
#endif //G4MPISCORERMERGER_HH
@@ -0,0 +1,118 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4MPIRunMerger.hh"
#include <mpi.h>
G4MPIRunMerger::G4MPIRunMerger( const G4Run* aRun ,
G4int destination ,
G4int ver) :
destinationRank(destination),
run(const_cast<G4Run*>(aRun)),
commSize(0),
verbose(ver) {}
#define DMSG( LVL , MSG ) { if ( verbose > LVL ) { G4cout << MSG << G4endl; } }
void G4MPIRunMerger::SendDouble( G4double* val, G4int size )
{
DMSG( 2 , "Sending double from "<<val<<" with size: "<<size);
COMM_G4COMMAND_.Send( val, size , MPI::DOUBLE,
destinationRank,G4MPImanager::kTAG_DATA);
DMSG( 2 , "Sent "<<( size > 1 ? val[0] : *val) );
}
void G4MPIRunMerger::SendInt( G4int* val , G4int size )
{
DMSG( 2 , "Sending int from "<<val<<" with size: "<<size);
COMM_G4COMMAND_.Send( val, size , MPI::INT,
destinationRank,G4MPImanager::kTAG_DATA);
DMSG( 2 , "Sent "<<( size > 1 ? val[0] : *val) );
}
void G4MPIRunMerger::ReceiveDouble( G4int rank, G4double* val , G4int size )
{
DMSG( 2 , "Receiving double at "<<val<<" with size "<<size );
COMM_G4COMMAND_.Recv( val, size, MPI::DOUBLE, rank , G4MPImanager::kTAG_DATA);
DMSG( 2 , "Received "<<( size > 1 ? val[0] : *val) );
}
void G4MPIRunMerger::ReceiveInt( G4int rank, G4int* val , G4int size )
{
DMSG( 2 , "Receiving int at "<<val<<" with size "<<size );
COMM_G4COMMAND_.Recv( val, size, MPI::INT, rank , G4MPImanager::kTAG_DATA);
DMSG( 2 , "Received "<<( size > 1 ? val[0] : *val) );
}
void G4MPIRunMerger::Send()
{
G4int nevts = run->GetNumberOfEvent();
DMSG( 1 , "G4MPIRunMerger::Send() : Sending a G4run ("
<<run<<") with "<<nevts<<" events,");
SendInt( &nevts );
DMSG( 1 , "G4MPIRunMerger::Send() : Done ");
}
void G4MPIRunMerger::Receive(G4int rank)
{
DMSG( 1 , "G4MPIRunMerger::Receive(...) : Receiving from rank "<<rank);
G4Run* anEmptyRun = new G4Run;
G4int nevts = 0;
ReceiveInt( rank, &nevts );
//Increment internal counter up to nevets
for ( G4int i = 0 ; i<nevts ; ++i ) anEmptyRun->RecordEvent( NULL );
//User data can go here
//
//Now merge received MPI run with global one
DMSG(2,"Before G4Run::Merge : "<<run->GetNumberOfEvent());
run->Merge( anEmptyRun );
DMSG(2,"After G4Run::Merge : "<<run->GetNumberOfEvent());
delete anEmptyRun;
}
void G4MPIRunMerger::Merge()
{
DMSG(0, "G4MPIRunMerger::Merge called");
G4int myrank = MPI::COMM_WORLD.Get_rank();
commSize = MPI::COMM_WORLD.Get_size();
COMM_G4COMMAND_ = MPI::COMM_WORLD.Dup();
DMSG(0,"Comm world size: "<<commSize<<" this rank is: "
<<myrank<<" sending to rank "<<destinationRank);
for ( G4int i = 0 ; i < commSize; ++i ) {
//Send for all ranks except receiver
if ( myrank != destinationRank ) Send();
}
//Receiver receives from all ranks
if ( myrank == destinationRank ) {
for (G4int fromRank = 0 ; fromRank < commSize; ++fromRank) {
//Do not receive from myself
if ( fromRank != destinationRank ) Receive(fromRank);
}
}
DMSG(0,"G4MPIRunMerger::Merge done");
}
@@ -0,0 +1,237 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#include "G4MPIScorerMerger.hh"
#include <map>
#include <strstream>
G4MPIScorerMerger::G4MPIScorerMerger( G4ScoringManager* mgr,
G4int destination,
G4int verbosity ) :
scoringManager(mgr),commSize(0),destinationRank(destination),verbose(verbosity)
{}
#define DMSG( LVL , MSG ) { if ( verbose > LVL ) { G4cout << MSG << G4endl; } }
std::ostream& operator<<(std::ostream& os ,
const G4MPIScorerMerger::convMap_t& cnv ) {
static const G4int maxelems = 10;
os<<" Name: "<<cnv.name<<" with : "<<cnv.numElems<<" elements\n";
os<<"\tIndexes :";
for ( G4int i = 0 ;
i < ((cnv.numElems<maxelems) ? cnv.numElems : maxelems) ;
++i ) os<<" "<<(cnv.indexes)[i];
if ( cnv.numElems>maxelems ) os<<" ...";
for ( G4int i = ( (cnv.numElems-maxelems > 0) ? cnv.numElems-maxelems : cnv.numElems );
i < cnv.numElems ; ++i ) os<<" "<<(cnv.indexes)[i];
os<<"\n\tValues :";
for ( G4int i = 0 ;
i < ((cnv.numElems<maxelems) ? cnv.numElems : maxelems) ;
++i ) os<<" "<<(cnv.values)[i];
if ( cnv.numElems>maxelems ) os<<" ...";
for ( G4int i = ( (cnv.numElems-maxelems > 0) ? cnv.numElems-maxelems : cnv.numElems );
i < cnv.numElems ; ++i ) os<<" "<<(cnv.values)[i];
return os;
}
std::ostream& operator<<(std::ostream& os,
G4THitsMap<double>& map)
{
os<<map.GetName()<<" "<<map.GetSDname()<<" "<<map.GetSize()<<"\n";
for ( std::map<G4int,G4double*>::const_iterator it =
map.GetMap()->begin(); it != map.GetMap()->end() ;
++it)
os<<it->first<<" "<<*(it->second)<<"\n";
return os;
}
G4MPIScorerMerger::convMap_t*
G4MPIScorerMerger::convertMap( const G4String& mapName ,
G4THitsMap<double>* map ) const
{
DMSG( 2 , "Converting G4THitsMap<double> "<<map<<
" with name "<<mapName);
convMap_t* converted = new convMap_t;
converted->name = mapName;
DMSG(2,converted->name);
converted->numElems = map->GetSize();
DMSG(2,converted->numElems);
converted->indexes = new G4int[converted->numElems];
converted->values = new G4double[converted->numElems];
std::map<G4int,double*>* mm = map->GetMap();
G4int counter=0;
for ( std::map<G4int,G4double*>::const_iterator it = mm->begin();
it != mm->end() ; ++it ) {
//DMSG(2,it->first<<" "<<*(it->second)<<" "<<counter);
(converted->indexes)[counter] = it->first;
(converted->values)[counter++] = *(it->second);
}
DMSG( 2 , "Converted to: "<<*converted );
return converted;
}
void
G4MPIScorerMerger::convertMesh( const G4VScoringMesh* mesh )
{
DMSG(2,"Coverting G4VScoringMesh: "<<mesh);
clear();
const MeshScoreMap& map = mesh->GetScoreMap();
DMSG(2,"Converting "<<map.size()<<" score maps");
for ( MeshScoreMap::const_iterator it = map.begin() ;
it != map.end() ; ++it )
{
convertedMesh.push_back( convertMap(it->first,it->second) );
}
DMSG(2,"Conversion of G4VScoringMesh: "<<mesh<<" done");
}
void
G4MPIScorerMerger::clear()
{
for ( std::vector<convMap_t*>::iterator it = convertedMesh.begin() ;
it != convertedMesh.end() ; ++it )
{
delete[] (*it)->indexes;
delete[] (*it)->values;
delete *it;
*it = 0;
}
convertedMesh.erase(convertedMesh.begin(),convertedMesh.end());
}
void G4MPIScorerMerger::Merge()
{
DMSG(0,"G4MPIScorerMerger::Merge() called");
G4int myrank = MPI::COMM_WORLD.Get_rank();
commSize = MPI::COMM_WORLD.Get_size();
COMM_G4COMMAND_ = MPI::COMM_WORLD.Dup();
DMSG(0,"Comm world size: "<<commSize<<" this rank is: "
<<myrank<<" sending to rank "<<destinationRank
<<" Number of mesh: "<< scoringManager->GetNumberOfMesh() );
for ( size_t i = 0 ; i < scoringManager->GetNumberOfMesh() ; ++i )
{
if ( myrank != destinationRank ) {
meshID = static_cast<G4int>(i);
SendOneMesh();
} else {
ReceiveOneMesh();
}
}
DMSG(0,"G4MPIScorerMerger::Merge done");
}
void G4MPIScorerMerger::SendOneMesh()
{
DMSG(1,"Sending mesh with ID: "<<meshID);
G4VScoringMesh* mesh = scoringManager->GetMesh(meshID);
convertMesh( mesh );
COMM_G4COMMAND_.Send(&meshID,1,MPI::INT,
destinationRank,G4MPImanager::kTAG_DATA);
G4int numelems=convertedMesh.size();
DMSG(2,"Sending "<<numelems<<" maps");
COMM_G4COMMAND_.Send(&numelems,1,MPI::INT,
destinationRank,G4MPImanager::kTAG_DATA);
for ( std::vector<convMap_t*>::const_iterator it = convertedMesh.begin() ;
it != convertedMesh.end() ; ++it ) {
const convMap_t* elem = *it;
DMSG(2,"Sending map: "<<elem);
COMM_G4COMMAND_.Send(elem->name.c_str(),elem->name.length(),MPI::CHAR,
destinationRank,G4MPImanager::kTAG_DATA);
COMM_G4COMMAND_.Send(&(elem->numElems),1,MPI::INT,
destinationRank,G4MPImanager::kTAG_DATA);
COMM_G4COMMAND_.Send(elem->indexes,elem->numElems,MPI::INT,
destinationRank,G4MPImanager::kTAG_DATA);
COMM_G4COMMAND_.Send(elem->values,elem->numElems,MPI::DOUBLE,
destinationRank,G4MPImanager::kTAG_DATA);
}
DMSG(1,"Sending of mesh with ID: "<<meshID<<" Done.");
}
void G4MPIScorerMerger::ReceiveOneMesh()
{
DMSG(1,"Receiving of mesh");
clear();
for ( G4int rank = 0 ; rank<commSize; ++rank ) {
if ( rank == destinationRank ) continue; // Do not receive from myself
COMM_G4COMMAND_.Recv(&meshID,1,MPI::INT,rank,G4MPImanager::kTAG_DATA);
G4int numElems = 0;
COMM_G4COMMAND_.Recv(&numElems,1,MPI::INT,rank,G4MPImanager::kTAG_DATA);
for ( G4int i = 0 ; i<numElems ; ++i ) {
convMap_t* elem = new convMap_t;
//G4int strlen = 0;
MPI::Status status;
COMM_G4COMMAND_.Probe(rank,G4MPImanager::kTAG_DATA,status);
G4int strlen = status.Get_count(MPI::CHAR);
char* buf = new char[strlen];
COMM_G4COMMAND_.Recv(buf,strlen,MPI::CHAR,rank,
G4MPImanager::kTAG_DATA,status);
elem->name = G4String(buf,strlen);
delete[] buf;
COMM_G4COMMAND_.Recv(&(elem->numElems),1,MPI::INT,rank,
G4MPImanager::kTAG_DATA);
elem->indexes = new G4int[elem->numElems];
elem->values = new G4double[elem->numElems];
COMM_G4COMMAND_.Recv(elem->indexes,elem->numElems,MPI::INT,rank,
G4MPImanager::kTAG_DATA);
COMM_G4COMMAND_.Recv(elem->values,elem->numElems,MPI::DOUBLE,rank,
G4MPImanager::kTAG_DATA);
convertedMesh.push_back(elem);
DMSG(2,"Received one mesh map: "<<*elem);
}
DMSG(2,"Received one mesh, with "<<convertedMesh.size()<<" maps");
//Received from Rank number rank
MergeOneMesh();
}
DMSG(1,"Receiving of mesh done");
}
void G4MPIScorerMerger::MergeOneMesh()
{
DMSG(2,"Merging one mesh");
G4VScoringMesh* mesh = scoringManager->GetMesh(meshID);
if ( ! mesh ) {
G4ExceptionDescription msg;
msg<<"Cannot find mesh with id: "<<meshID;
G4Exception("G4MPIScorerMerger::MergeOneMesh()","G4MPI001",FatalException,
msg);
}
for ( std::vector<convMap_t*>::const_iterator it = convertedMesh.begin() ;
it != convertedMesh.end() ; ++it )
{
//Create a hits-collection from this convMap_t object
const convMap_t* const elem = *it;
G4THitsMap<G4double> hc(mesh->GetWorldName(),elem->name);
for ( G4int i = 0 ; i < elem->numElems; ++i )
hc.set( elem->indexes[i] , elem->values[i] );
DMSG(3,"Original mesh: "<<*(mesh->GetScoreMap().find(elem->name)->second));
DMSG(3,"Received mesh: "<<hc);
mesh->Accumulate(&hc);
DMSG(3,"Original mesh after accumulation: "
<<*(mesh->GetScoreMap().find(elem->name)->second));
}
DMSG(2,"Merging one mesh done");
}
@@ -287,7 +287,7 @@ void G4MPImanager::ShowStatus()
void G4MPImanager::DistributeSeeds()
{
std::vector<G4long> seed_list = seed_generator_-> GetSeedList();
CLHEP::HepRandom::setTheSeed(seed_list[rank_]);
G4Random::setTheSeed(seed_list[rank_]);
}
// --------------------------------------------------------------------------
@@ -298,7 +298,7 @@ void G4MPImanager::ShowSeeds()
if ( is_master_ ) {
// print master
G4cout << "* rank= " << rank_
<< " seed= " << CLHEP::HepRandom::getTheSeed()
<< " seed= " << G4Random::getTheSeed()
<< G4endl;
// receive from each slave
for ( G4int islave = 1; islave < size_; islave++ ) {
@@ -308,7 +308,7 @@ void G4MPImanager::ShowSeeds()
<< G4endl;
}
} else { // slaves
buff = CLHEP::HepRandom::getTheSeed();
buff = G4Random::getTheSeed();
COMM_G4COMMAND_.Send(&buff, 1, MPI::LONG, kRANK_MASTER, kTAG_G4SEED);
}
}
@@ -328,7 +328,7 @@ G4bool G4MPImanager::CheckThreadStatus()
unsigned qstatus = 0;
if( is_master_ ) {
qstatus = unsigned(thread_id_);
qstatus = (thread_id_ != 0);
// get slave status
for ( G4int islave = 1; islave < size_; islave++ ) {
MPI::Request request = COMM_G4COMMAND_.Irecv(&buff, 1, MPI::UNSIGNED,
@@ -339,7 +339,7 @@ G4bool G4MPImanager::CheckThreadStatus()
qstatus |= buff;
}
} else {
buff = unsigned(thread_id_);
buff = (thread_id_ !=0);
COMM_G4COMMAND_.Send(&buff, 1, MPI::UNSIGNED, kRANK_MASTER, kTAG_G4STATUS);
}
@@ -40,6 +40,7 @@ G4VMPIsession::G4VMPIsession()
is_master_ = g4mpi_-> IsMaster();
is_slave_ = g4mpi_-> IsSlave();
rank_ = g4mpi_-> GetRank();
}
// --------------------------------------------------------------------------
@@ -27,7 +27,7 @@
/// \brief Definition of the G4HCofThisEvent class
//
//
// $Id: G4HCofThisEvent.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: G4HCofThisEvent.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
#ifndef G4HCofThisEvent_h
@@ -27,7 +27,7 @@
/// \brief Definition of the G4THitsCollection class
//
//
// $Id: G4THitsCollection.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: G4THitsCollection.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
#ifndef G4THitsCollection_h
@@ -27,7 +27,7 @@
/// \brief Definition of the G4VHitsCollection class
//
//
// $Id: G4VHitsCollection.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: G4VHitsCollection.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
#ifndef G4VHitsCollection_h
@@ -1,4 +1,4 @@
# $Id: GNUmakefile 66241 2012-12-13 18:34:42Z gunter $
# $Id: GNUmakefile 76296 2013-11-08 13:17:47Z gcosmo $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
@@ -1,4 +1,4 @@
# $Id: ParGNUmakefile 66241 2012-12-13 18:34:42Z gunter $
# $Id: ParGNUmakefile 76296 2013-11-08 13:17:47Z gcosmo $
# --------------------------------------------------------------
#This file should be included in GNUmakefile of local directory.
@@ -27,7 +27,7 @@
/// \brief The user main program of the parallel/ParN02 example
//
//
// $Id: ParN02.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ParN02.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -26,7 +26,7 @@
/// \file parallel/ParN02/ParTopC.icc
/// \brief The real main program of the parallel/ParN02 example
//
// $Id: ParTopC.icc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ParTopC.icc 76296 2013-11-08 13:17:47Z gcosmo $
//
// --------------------------------------------------------------------
// Parallel Library for Geant4
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02ChamberParameterisation class
//
//
// $Id: ExN02ChamberParameterisation.hh 73400 2013-08-27 09:52:57Z gcosmo $
// $Id: ExN02ChamberParameterisation.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//
// A parameterisation that describes a series of boxes along Z
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02DetectorMessenger class
//
//
// $Id: ExN02DetectorMessenger.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02DetectorMessenger.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02EventAction class
//
//
// $Id: ExN02EventAction.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02EventAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02MagneticField class
//
//
// $Id: ExN02MagneticField.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02MagneticField.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//
// A class for control of the Magnetic Field of the detector.
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02PhysicsList class
//
//
// $Id: ExN02PhysicsList.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02PhysicsList.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02PrimaryGeneratorAction class
//
//
// $Id: ExN02PrimaryGeneratorAction.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02PrimaryGeneratorAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02RunAction class
//
//
// $Id: ExN02RunAction.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02RunAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02SteppingAction class
//
//
// $Id: ExN02SteppingAction.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02SteppingAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02SteppingVerbose class
//
//
// $Id: ExN02SteppingVerbose.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02SteppingVerbose.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
// This class manages the verbose outputs in G4SteppingManager.
// It inherits from G4SteppingVerbose.
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02TrackerHit class
//
//
// $Id: ExN02TrackerHit.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02TrackerHit.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
// --------------------------------------------------------------
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN02TrackerSD class
//
//
// $Id: ExN02TrackerSD.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02TrackerSD.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -1,4 +1,4 @@
# $Id: run1.mac 66241 2012-12-13 18:34:42Z gunter $
# $Id: run1.mac 76296 2013-11-08 13:17:47Z gcosmo $
#
# Macro file for "ParN02.cc"
#
@@ -1,4 +1,4 @@
# $Id: run2.mac 66241 2012-12-13 18:34:42Z gunter $
# $Id: run2.mac 76296 2013-11-08 13:17:47Z gcosmo $
#
# Macro file for "ParN02.cc"
#
@@ -27,7 +27,7 @@
/// \brief Implementation of the ExN02ChamberParameterisation class
//
//
// $Id: ExN02ChamberParameterisation.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02ChamberParameterisation.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Implementation of the ExN02DetectorMessenger class
//
//
// $Id: ExN02DetectorMessenger.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02DetectorMessenger.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Implementation of the ExN02MagneticField class
//
//
// $Id: ExN02MagneticField.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02MagneticField.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
// User Field class implementation.
//
@@ -27,7 +27,7 @@
/// \brief Implementation of the ExN02RunAction class
//
//
// $Id: ExN02RunAction.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02RunAction.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Implementation of the ExN02SteppingAction class
//
//
// $Id: ExN02SteppingAction.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02SteppingAction.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Implementation of the ExN02TrackerSD class
//
//
// $Id: ExN02TrackerSD.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN02TrackerSD.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,7 @@
/// \brief Definition of the G4HCofThisEvent class
//
//
// $Id: G4HCofThisEvent.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: G4HCofThisEvent.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
#ifndef G4HCofThisEvent_h
@@ -27,7 +27,7 @@
/// \brief Definition of the G4THitsCollection class
//
//
// $Id: G4THitsCollection.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: G4THitsCollection.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
#ifndef G4THitsCollection_h
@@ -27,7 +27,7 @@
/// \brief Definition of the G4VHitsCollection class
//
//
// $Id: G4VHitsCollection.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: G4VHitsCollection.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
#ifndef G4VHitsCollection_h
@@ -1,4 +1,4 @@
# $Id: GNUmakefile 66241 2012-12-13 18:34:42Z gunter $
# $Id: GNUmakefile 76296 2013-11-08 13:17:47Z gcosmo $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
@@ -1,4 +1,4 @@
$Id: History 73404 2013-08-27 10:05:02Z gcosmo $
$Id: History 76296 2013-11-08 13:17:47Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -1,4 +1,4 @@
# $Id: ParGNUmakefile 66241 2012-12-13 18:34:42Z gunter $
# $Id: ParGNUmakefile 76296 2013-11-08 13:17:47Z gcosmo $
# --------------------------------------------------------------
#This file should be included in GNUmakefile of local directory.
@@ -27,7 +27,7 @@
/// \brief Main program of the parallel/ParN04 example
//
//
// $Id: ParN04.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ParN04.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//
// --------------------------------------------------------------
@@ -26,7 +26,7 @@
/// \file parallel/ParN04/ParTopC.icc
/// \brief The real main program of the parallel/ParN04 example
//
// $Id: ParTopC.icc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ParTopC.icc 76296 2013-11-08 13:17:47Z gcosmo $
//
// --------------------------------------------------------------------
// Parallel Library for Geant4
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04CalorimeterHit.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04CalorimeterHit.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04CalorimeterHit.hh
/// \brief Definition of the ExN04CalorimeterHit class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04CalorimeterParametrisation.hh 73404 2013-08-27 10:05:02Z gcosmo $
// $Id: ExN04CalorimeterParametrisation.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04CalorimeterParametrisation.hh
/// \brief Definition of the ExN04CalorimeterParametrisation class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04CalorimeterROGeometry.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04CalorimeterROGeometry.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04CalorimeterROGeometry.hh
/// \brief Definition of the ExN04CalorimeterROGeometry class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04CalorimeterSD.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04CalorimeterSD.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04CalorimeterSD.hh
/// \brief Definition of the ExN04CalorimeterSD class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04DetectorConstruction.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04DetectorConstruction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04DetectorConstruction.hh
/// \brief Definition of the ExN04DetectorConstruction class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04DetectorParameterDef.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04DetectorParameterDef.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04DetectorParameterDef.hh
/// \brief Definition of the ExN04DetectorParameterDef class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04DummySD.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04DummySD.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04DummySD.hh
/// \brief Definition of the ExN04DummySD class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04EventAction.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04EventAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04EventAction.hh
/// \brief Definition of the ExN04EventAction class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04Field.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04Field.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04Field.hh
/// \brief Definition of the ExN04Field class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04MuonHit.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04MuonHit.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04MuonHit.hh
/// \brief Definition of the ExN04MuonHit class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04MuonSD.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04MuonSD.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04MuonSD.hh
/// \brief Definition of the ExN04MuonSD class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04PrimaryGeneratorAction.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04PrimaryGeneratorAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04PrimaryGeneratorAction.hh
/// \brief Definition of the ExN04PrimaryGeneratorAction class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04PrimaryGeneratorMessenger.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04PrimaryGeneratorMessenger.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04PrimaryGeneratorMessenger.hh
/// \brief Definition of the ExN04PrimaryGeneratorMessenger class
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN04RunAction class
//
//
// $Id: ExN04RunAction.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN04RunAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04StackingAction.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04StackingAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04StackingAction.hh
/// \brief Definition of the ExN04StackingAction class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04StackingActionMessenger.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04StackingActionMessenger.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04StackingActionMessenger.hh
/// \brief Definition of the ExN04StackingActionMessenger class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04SteppingAction.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04SteppingAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04SteppingAction.hh
/// \brief Definition of the ExN04SteppingAction class
@@ -27,7 +27,7 @@
/// \brief Definition of the ExN04SteppingVerbose class
//
//
// $Id: ExN04SteppingVerbose.hh 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN04SteppingVerbose.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
// This class manages the verbose outputs in G4SteppingManager.
// It inherits from G4SteppingVerbose.
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04TrackerHit.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04TrackerHit.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04TrackerHit.hh
/// \brief Definition of the ExN04TrackerHit class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04TrackerParametrisation.hh 73404 2013-08-27 10:05:02Z gcosmo $
// $Id: ExN04TrackerParametrisation.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04TrackerParametrisation.hh
/// \brief Definition of the ExN04TrackerParametrisation class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04TrackerSD.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04TrackerSD.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04TrackerSD.hh
/// \brief Definition of the ExN04TrackerSD class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04TrackingAction.hh 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04TrackingAction.hh 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/include/ExN04TrackingAction.hh
/// \brief Definition of the ExN04TrackingAction class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04CalorimeterHit.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04CalorimeterHit.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04CalorimeterHit.cc
/// \brief Implementation of the ExN04CalorimeterHit class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04MuonHit.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04MuonHit.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04MuonHit.cc
/// \brief Implementation of the ExN04MuonHit class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04PrimaryGeneratorMessenger.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04PrimaryGeneratorMessenger.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04PrimaryGeneratorMessenger.cc
/// \brief Implementation of the ExN04PrimaryGeneratorMessenger class
@@ -27,7 +27,7 @@
/// \brief Implementation of the ExN04RunAction class
//
//
// $Id: ExN04RunAction.cc 66241 2012-12-13 18:34:42Z gunter $
// $Id: ExN04RunAction.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04StackingActionMessenger.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04StackingActionMessenger.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04StackingActionMessenger.cc
/// \brief Implementation of the ExN04StackingActionMessenger class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04SteppingAction.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04SteppingAction.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04SteppingAction.cc
/// \brief Implementation of the ExN04SteppingAction class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04TrackerHit.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04TrackerHit.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04TrackerHit.cc
/// \brief Implementation of the ExN04TrackerHit class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04TrackerSD.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04TrackerSD.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04TrackerSD.cc
/// \brief Implementation of the ExN04TrackerSD class
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ExN04TrackingAction.cc 66587 2012-12-21 11:06:44Z ihrivnac $
// $Id: ExN04TrackingAction.cc 76296 2013-11-08 13:17:47Z gcosmo $
//
/// \file parallel/ParN04/src/ExN04TrackingAction.cc
/// \brief Implementation of the ExN04TrackingAction class
@@ -1,4 +1,4 @@
$Id: NEW_APP_INSTALL 66241 2012-12-13 18:34:42Z gunter $
$Id: NEW_APP_INSTALL 76296 2013-11-08 13:17:47Z gcosmo $
------------------------------------------------------------------------------
These are instructions for parallelizing a new application. Before
doing so, try out the examples, ParN02 and ParN04, which have
@@ -1,4 +1,4 @@
$Id: NEW_APP_README 66241 2012-12-13 18:34:42Z gunter $
$Id: NEW_APP_README 76296 2013-11-08 13:17:47Z gcosmo $
------------------------------------------------------------------------------
This file and NEW_APP_INSTALL describe important information if you are
planning to create a new parallel Geant4 application, similarly