This module provides the particle ghost mapping routines and holds the temporary work arrays.
Subroutines contained in this interface:
name  description 

This routine maps/adds the ghost particles on the current topology.  
This routine maps/adds the ghost particles on the current topology. 
Subroutines contained in this interface:
name  description 

This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer  
This routine pops the contents of the receive buffer 
Subroutines contained in this interface:
name  description 

This routine puts back ghost particle values/properties to the 
This routine maps/adds the ghost particles on the current topology.
This routine is similar to the partial mapping routine
(ppm_map_part_partial
) in the sense that the ghost particles are
assumed to be located on neighbouring processors only, and thus only
require a nearest neighbour communication.
Warning  

It is an error to specify a topology ID to which the particles are not currently mapped 
Note  

This routine SHOULD be efficient  since it will be called frequently. One way of improving (?) the performance is to use the cell lists to find the potential ghosts. This routine should be split in several routines! The ghosts are found in three steps:
Comments:
Now, item 2. and 3. can be treated within the same logic whereas 1. require a bit of thought: to keep the source compact, we could loop over all processors including the local one and check for ghosts  the problem with this procedure is, that we check for ghosts by comparing the location of particles within the extended subs boundaries (and not their true ghost layer  which would result in more IFs than necessary). However, because of this, looping over the processor itself would find ghosts that are not really ghost  the only ghosts that should be found in this step are those due to periodicity. The solution is to store the ghosts as ighost() with nghost denoting the total number of ghosts (excluding those due to periodicity) and nghostplus the total number of ghosts. During the loop over the processor itself we therefore only need to loop from nghost+1,nghostplus. 
name  type  dimension  intent  optional  description 

integer  (IN)  ID of current topology  
real array  (:,:)  (IN)  The position of the particles  
integer  (IN)  Leading dimension of xp  
integer  (IN)  The number of particles (on the local processor)  
integer  (IN)  Indicator for the use of symmetry  
real  (IN)  The size of the ghost layer  
integer  (OUT)  Return status, 0 on success 
integer, , (IN)
ID of current topology
real array, (:,:)
, (IN)
The position of the particles
integer, , (IN)
Leading dimension of xp
integer, , (IN)
The number of particles (on the local processor)
integer, , (IN)
Indicator for the use of symmetry
real, , (IN)
The size of the ghost layer
integer, , (OUT)
Return status, 0 on success
ppm_module_data, ppm_module_error, ppm_module_typedef, ppm_module_alloc, ppm_module_check_id, ppm_module_substop, ppm_module_util_commopt, ppm_module_write, ppm_module_substart
This routine maps/adds the ghost particles on the current topology.
This routine is similar to the partial mapping routine
(ppm_map_part_partial
) in the sense that the ghost particles are
assumed to be located on neighbouring processors only, and thus only
require a nearest neighbour communication.
Warning  

It is an error to specify a topology ID to which the particles are not currently mapped 
Note  

This routine SHOULD be efficient  since it will be called frequently. One way of improving (?) the performance is to use the cell lists to find the potential ghosts. This routine should be split in several routines! The ghosts are found in three steps:
Comments:
Now, item 2. and 3. can be treated within the same logic whereas 1. require a bit of thought: to keep the source compact, we could loop over all processors including the local one and check for ghosts  the problem with this procedure is, that we check for ghosts by comparing the location of particles within the extended subs boundaries (and not their true ghost layer  which would result in more IFs than necessary). However, because of this, looping over the processor itself would find ghosts that are not really ghost  the only ghosts that should be found in this step are those due to periodicity. The solution is to store the ghosts as ighost() with nghost denoting the total number of ghosts (excluding those due to periodicity) and nghostplus the total number of ghosts. During the loop over the processor itself we therefore only need to loop from nghost+1,nghostplus. 
name  type  dimension  intent  optional  description 

integer  (IN)  ID of current topology  
real array  (:,:)  (IN)  The position of the particles  
integer  (IN)  Leading dimension of xp  
integer  (IN)  The number of particles (on the local processor)  
integer  (IN)  Indicator for the use of symmetry  
real  (IN)  The size of the ghost layer  
integer  (OUT)  Return status, 0 on success 
integer, , (IN)
ID of current topology
real array, (:,:)
, (IN)
The position of the particles
integer, , (IN)
Leading dimension of xp
integer, , (IN)
The number of particles (on the local processor)
integer, , (IN)
Indicator for the use of symmetry
real, , (IN)
The size of the ghost layer
integer, , (OUT)
Return status, 0 on success
ppm_module_data, ppm_module_error, ppm_module_typedef, ppm_module_alloc, ppm_module_check_id, ppm_module_substop, ppm_module_util_commopt, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

real array  (:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
real array, (:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

complex array  (:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
complex array, (:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

integer array  (:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
integer array, (:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

logical array  (:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
logical array, (:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

real array  (:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
real array, (:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

complex array  (:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
complex array, (:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

real array  (:,:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
real array, (:,:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

complex array  (:,:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
complex array, (:,:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

integer array  (:,:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
integer array, (:,:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

logical array  (:,:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
logical array, (:,:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

real array  (:,:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
real array, (:,:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine pops the contents of the receive buffer when sending the ghosts back. Notice the value popped will be added to array passed to the routine.
Warning  


name  type  dimension  intent  optional  description 

complex array  (:,:)  Particle data to be popped.  
integer  (IN)  The leading dimension of pdata.  
integer  (IN)  The number of real particles (on the processor)  
integer  (IN)  The number of real + ghost particles (on the processor)  
integer  (OUT)  Return status. 0 upon success. 
complex array, (:,:)
, no intent declared
Particle data to be popped. Can be either 1D or 2D array.
integer, , (IN)
The leading dimension of pdata. In the case of pdata being a 1D array use lda=1.
integer, , (IN)
The number of real particles (on the processor)
integer, , (IN)
The number of real + ghost particles (on the processor)
integer, , (OUT)
Return status. 0 upon success.
ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart
This routine puts back ghost particle values/properties to the corresponding real particles. This is very useful in the case of symmetric interactions as there the ghost particles are also updated.
Important  

This routine can only be called after ghost particles have been
created using the 
Warning  

It is an error to call 
Tip  

If you need to do alternating ghostget and ghostput sequences
you may want to use 
Implementation Notes  

This routine swaps the send and receive lists of the
mapping routine to allow sending back the value/data
computed on the ghost particles. The routine must be
called after This implementation only allows one ghost put at a time; To allow multiple ghosts we have to pass the ppm_user_hack to the ghost_pop OR to copy the userpassed array to the internally stored ppm_ghosthack used (and not passed) by the ghost_pop() 
name  type  dimension  intent  optional  description 

integer  (IN)  Topology ID  
integer  (OUT)  Return status, 0 on success 
integer, , (IN)
Topology ID
integer, , (OUT)
Return status, 0 on success
ppm_module_data, ppm_module_error, ppm_module_typedef, ppm_module_alloc, ppm_module_check_id, ppm_module_substop, ppm_module_util_commopt, ppm_module_write, ppm_module_substart