gibuu is hosted by Hepforge, IPPP Durham
GiBUU

TABLE OF CONTENTS


/VolumeElements [ Modules ]

[ Top ] [ Modules ]

NAME

module VolumeElements

PURPOSE

This module defines all stuff necessary to seperate the whole interaction volume in different "volume elements" (also called "VE-cells")

This is necessary for the implementation of "local ensemble" runs.

INPUTS

(none)


VolumeElements/tVolumeElements [ Types ]

[ Top ] [ VolumeElements ] [ Types ]

PURPOSE

Discretize the whole possible space volume and hold in a 3D array Lists of particles, which are at the moment in a given coordinate cell

NOTES

Die Arrays "zCoordFilled_xxx" sollen eine Abkürzung für die Loops über die z-Koordinate darstellen: Wenn für eine z-Koordinate für keine x- oder y-Zelle Einträge vorhanden sind, dann kann man diese z-Koord auch ganz schnell überspringen!

Denkbar wäre auch eine Verbesserung durch die Einführung von

   integer, dimension(3,2) :: iRange_Used

wobei alle Schleifen statt über

   iRange(i,1)..iRange(i,2)

über

   iRange_Used(i,1)..iRange_Used(i,2)

laufen würden. Hierbei können aber nur zusammenhängende Bereiche benutzt werden, wodurch das benutzte Modell wiederum starken Auftrieb bekommt!!!

SOURCE

  type tVolumeElements
     type(tParticleList), DIMENSION(:,:,:), ALLOCATABLE :: VE_real ! ~ 100 MB
     type(tParticleList), DIMENSION(:,:,:), ALLOCATABLE :: VE_pert ! ~ 100 MB
     real, dimension(3)      :: Delta
     real, dimension(3,2)    :: Range
     integer, dimension(3,2) :: iRange
     logical, dimension(:), ALLOCATABLE :: zCoordFilled_real
     logical, dimension(:), ALLOCATABLE :: zCoordFilled_pert
  end type tVolumeElements

VolumeElements/tVE [ Global module-variables ]

[ Top ] [ VolumeElements ] [ Global module-variables ]

PURPOSE

The one and only instance of a tVolumeElements-object

SOURCE

  type(tVolumeElements),save :: tVE

VolumeElements/VolumeElements_boxSize [ Functions ]

[ Top ] [ VolumeElements ] [ Functions ]

PURPOSE

Returns size of box used for the local ensemble method, unit of fm^3

OUTPUT

(function value)


VolumeElements/VolumeElements_INIT [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_INIT()

PURPOSE

This routine initializes the tVE-instance. Initial sizes are set and all memory allocation is done.

NOTES

The maximum volume size and also the volume elements size is still hard wired. maybe some more sophisticated init should be realized.


VolumeElements/VolumeElements_CLEAR_Pert [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_CLEAR_Pert()

PURPOSE

This routine resets the tVE-instance for perturbative particles


VolumeElements/VolumeElements_CLEAR_Real [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_CLEAR_Real()

PURPOSE

This routine resets the tVE-instance for real particles.


VolumeElements/VolumeElements_SETUP_Pert [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_SETUP_Pert(PartVec)

PURPOSE

Build up the tVE structure of perturbative particles.

In order to introduce some randomness, particles are prepended/appended to the list according the outcome of a random generator.


VolumeElements/VolumeElements_SETUP_Real [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_SETUP_Real(PartVec)

PURPOSE

Build up the tVE structure of real particles.

In order to introduce some randomness, particles are prepended/appended to the list according the outcome of a random generator.


VolumeElements/VolumeElements_Statistics [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_Statistics

PURPOSE

This is a routine to produce some statistical informations about the elements in the tVE instance.

This routine is only for trial/documentational purposes.


VolumeElements/FindNextVE_RealPert [ Functions ]

[ Top ] [ VolumeElements ] [ Functions ]

NAME

logical function FindNextVE_RealPert

PURPOSE

This routine searches for the next volume element with non-vanishing number of real- and perturbative-test-particles. It remembers the values of the last call and finds really the "next" cell.

It proceeds via first increasing the x- and y-coordinates and then stepping to the next z-coordinate.

INPUTS

  • the static stored array iPart(1:3)

OUTPUT

  • the static stored array iPart(1:3) (changed!)
  • function value: .false. -> no more tVE-cells possible


VolumeElements/FindNextVE_RealReal [ Functions ]

[ Top ] [ VolumeElements ] [ Functions ]

NAME

logical function FindNextVE_RealReal

PURPOSE

This routine searches for the next volume element with non-vanishing number of real-test-particles. It remembers the values of the last call and finds really the "next" cell.

It proceeds via first increasing the x- and y-coordinates and then stepping to the next z-coordinate.

INPUTS

  • the static stored array iPart(1:3)

OUTPUT

  • the static stored array iPart(1:3) (changed!)
  • function value: .false. -> no more tVE-cells possible


VolumeElements/VolumeElements_InitGetPart_RealPert [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_InitGetPart_RealPert

PURPOSE

initialize the "GetPart_RealPert"-routines

NOTES

this routine sets the x-,y-,z-indizes in such a way, that a call to "FindNextVE_RealPert" will start at the very first cell.


VolumeElements/VolumeElements_InitGetPart_RealReal [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_InitGetPart_RealReal

PURPOSE

initialize the "GetPart_RealPert"-routines

NOTES

this routine sets the x-,y-,z-indizes in such a way, that a call to "FindNextVE_RealReal" will start at the very first cell.


VolumeElements/VolumeElements_GetPart_RealPert [ Functions ]

[ Top ] [ VolumeElements ] [ Functions ]

NAME

logical function VolumeElements_GetPart_RealPert(Part1, Part2, nRealPart, iEns1,iInd1, iEns2,iInd2)

INPUTS

OUTPUT

  • type(particle), POINTER :: Part1, Part2 -- real and perturbative particle
  • integer :: nRealPart -- number of real particles in VE-cell
  • integer :: iEns1,iInd1 -- coordinates of particle1 (real)
  • integer :: iEns2,iInd2 -- coordinates of particle2 (pert)

PURPOSE

This routine finds the next (possibly colliding?) pair of one perturbative particle and one real particle in the actual VE-cell.

If one stepped over all pert. particles in the given VE-cell, the next cell is choosen (cf. FindNextVE) and everything goes on.

If no "next VE-cell" is possible any more, the routine returns .false. as failure-indicator. (Otherwise always .true. is returned.)

NOTES

  • actually for a choosen VE-cell it returns the particle pairs (P_1,R_1), (P_2,R_2), ... (P_nPert, R_xxx) If there are more real particles than pert particles, "R_xxx" stands for "R_nPert". Otherwise, ie. if we have more pert particles than real particles, the loop restarts for the real particles (P_nReal,R_nReal), (P_nReal+1,R_1), ...


VolumeElements/VolumeElements_GetPart_RealReal [ Functions ]

[ Top ] [ VolumeElements ] [ Functions ]

NAME

logical function VolumeElements_GetPart_RealReal(Part1, Part2, nRealPart, iEns1,iInd1, iEns2,iInd2)

INPUTS

OUTPUT

  • type(particle), POINTER :: Part1, Part2 -- real particles
  • integer :: nRealPart -- number of real particles in VE-cell
  • integer :: iEns1,iInd1 -- coordinates of particle1
  • integer :: iEns2,iInd2 -- coordinates of particle2

PURPOSE

This routine finds the next (possibly colliding?) pair of two real particles in the actual VE-cell.

If one stepped over all real particles in thi given VE-cell, the next cell s choosen (cf. FindNextVE_REalReal) and everything goes on.

If no "next VE-cell" is possible any more, the routine returns .false. as failure-indicator. (Otherwise always .true. is returned.)

NOTES

  • actually for a choosen VE-cell it returns the particle pairs (R_1,R_2), (R_3,R_4), ...


VolumeElements/GetEnsInd_Real [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine GetEnsInd_Real(pPart, iEns,iInd)

PURPOSE

Doing the pointer arithmetic for the real particles vector

INPUTS

OUTPUT

  • integer :: iEns, iInd --- ensemble and index of particle


VolumeElements/GetEnsInd_Pert [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine GetEnsInd_Pert(pPart, iEns,iInd)

PURPOSE

Doing the pointer arithmetic for the pert particles vector

INPUTS

OUTPUT

  • integer :: iEns, iInd --- ensemble and index of particle


VolumeElements/VolumeElements_NukSearch [ Subroutines ]

[ Top ] [ VolumeElements ] [ Subroutines ]

NAME

subroutine VolumeElements_NukSearch(partIn,RadiusNukSearch,proton1,proton2,neutron1,neutron2,FlagOK)

PURPOSE

This routine searches for two protons and two neutrons given in the "volume elements particle vector array" "VE_real" in the vicinty of the particle given by "partIn".

NOTES

we are looking for 2 protons and 2 neutrons, i.e. for 4 nucleons, while only 2 nucleons are necessary: possible combinations are p+p, p+n, n+n.

INPUTS

  • type(particle) :: partIn
  • real :: RadiusNukSearch

OUTPUT

  • type(particle), pointer :: proton1,proton2 -- Closest protons
  • type(particle), pointer :: neutron1,neutron2 -- Closest neutrons
  • logical :: FlagOK


VolumeElements/VolumeElements_3Body [ Functions ]

[ Top ] [ VolumeElements ] [ Functions ]

NAME

logical function VolumeElements_3Body(Decay3Body, isSameBool, doInit, iEns,iInd, Part1,Part2,Part3, scaleFak, mode)

PURPOSE

Find a triple of particles corresponding the given needs.

This routine starts with one cell, loops over all possibilities, then switchs to the next cell, and so on, until no triple can be found any more. Then the routine returns .false., otherwise .true.

INPUTS

  • type(tDecay3Body) :: Decay3Body -- the decay to study
  • integer :: isSameBool -- tricky number to hold the info, which particles are identical
  • integer :: mode -- select how nDo is choosen

OUTPUT

  • integer, dimension(1:3) :: iEns -- coordinate 1 of the 3 particles
  • integer, dimension(1:3) :: iInd -- coordinate 2 of the 3 particles
  • type(particle), POINTER :: Part1, Part2, Part3 -- the particles
  • real :: scaleFak -- the factor nPossible/nDo

NOTES

possible values for mode:

  • 1: nDo = nMax
  • 2: nDo = nMin


VolumeElements_3Body/FindFirst3 [ Functions ]

[ Top ] [ VolumeElements_3Body ] [ Functions ]

NAME

logical function FindFirst3()

PURPOSE

This internal routine has two purposes:

  • build up the particle lists L1, L2, L3 from the particles in the cell
  • return the first possible particle triple

OUTPUT

The return vaule is .true., if everything went smoothly. In addition, this routine sets the following internal variables:

  • Part1, Part2, Part3
  • pNode1, pNode2, pNode3 show to the next possible triple.
  • nMax indicates the number of triples to extract
  • scaleFak = nPossible/nMax

This routine ensures, that Part1, Part2, Part3 do not accidentally point to a same particle.

NOTES

  • a combinatorical factor is included in nPossible for indistinguishable particles
  • Particles are added to the lists randomly at the beginning or the end.


VolumeElements_3Body/FindSecond3 [ Functions ]

[ Top ] [ VolumeElements_3Body ] [ Functions ]

NAME

logical function FindSecond3()

PURPOSE

This routine gives the 'next' triple. It loops over L1, L2 and L3, until it has genarated 'nDo' triples. This routine ensures, that Part1, Part2, Part3 do not accidentally point to a same particle.


VolumeElements_3Body/CheckFound3() [ Functions ]

[ Top ] [ VolumeElements_3Body ] [ Functions ]

NAME

logical function CheckFound3()

PURPOSE

This routine checks, whether the found triple is really according the input wishes. This is necessary, since a successfully performed 3->1 collision should delete the incoming mesons.