particles_mpicomm

Module

Description

$Id$

This module deals with communication of particles between processors.

Quick access

Variables:

communicate_fpbuf, cumulate_counts, dfb, dist_particles_evenly_procs, dvol1xb, dvol1xbrick, dvol1yb, dvol1ybrick, dvol1zb, dvol1zbrick, dx1b, dx1brick, dy1b, dy1brick, dz1b, dz1brick, fb, get_brick_index, ibrick_parent_block, inearblock, input_blocks_dist, input_blocks_mpi, iproc_foster_brick, iproc_foster_brick_part, iproc_foster_list, iproc_parent_block, iproc_parent_list, it1_loadbalance, k1_iblock, k2_iblock, l1b, l2b, ladopt_own_light_bricks, lbrick_partition, lfill_blocks_density, lfill_blocks_gpotself, lfill_blocks_velocity, lfill_bricks_velocity, lreblock_particles_run, m1b, m2b, migrate_particles_block_to_proc, migrate_particles_proc_to_block, migrate_particles_proc_to_proc, mxb, myb, mzb, n1b, n2b, nblock_loc, nbrick_foster, nbricks, nbx, nby, nbz, nghostb, npar_iblock, npart_brick_max, nproc_foster, nproc_parent, nxb, nyb, nzb, output_blocks_dist, output_blocks_mpi, report_missing_particles, xb, xbrick, xref_par, yb, ybrick, yref_par, zb, zbrick, zref_par

Routines:

communicate_fpbuf(), get_brick_index(), initialize_particles_mpicomm(), input_blocks(), load_balance_particles(), migrate_particles(), output_blocks(), sort_blocks()

Needed modules

Variables

  • particles_mpicomm/dfb (1,1,1,1,1) [real,public]
  • particles_mpicomm/dist_particles_evenly_procs [private]
  • particles_mpicomm/dvol1xb (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dvol1xbrick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dvol1yb (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dvol1ybrick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dvol1zb (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dvol1zbrick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dx1b (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dx1brick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dy1b (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dy1brick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dz1b (1,1) [real,public/optional/default=0]
  • particles_mpicomm/dz1brick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/fb (1,1,1,1,1) [real,public]
  • particles_mpicomm/ibrick_parent_block (1) [integer,public]
  • particles_mpicomm/inearblock (1) [integer,public]
  • particles_mpicomm/iproc_foster_brick (1) [integer,public]
  • particles_mpicomm/iproc_foster_list (1) [integer,public]
  • particles_mpicomm/iproc_parent_block (1) [integer,public]
  • particles_mpicomm/iproc_parent_list (1) [integer,public]
  • particles_mpicomm/it1_loadbalance [integer,public/optional/default=-1]
  • particles_mpicomm/k1_iblock (1) [integer,public/optional/default=0]
  • particles_mpicomm/k2_iblock (1) [integer,public/optional/default=0]
  • particles_mpicomm/l1b [integer,parameter=1]
  • particles_mpicomm/l2b [integer,parameter=1]
  • particles_mpicomm/ladopt_own_light_bricks [logical,public/optional/default=.false.]
  • particles_mpicomm/lbrick_partition [logical,public/optional/default=.false.]
  • particles_mpicomm/lfill_blocks_density [logical,public/optional/default=.false.]
  • particles_mpicomm/lfill_blocks_gpotself [logical,public/optional/default=.false.]
  • particles_mpicomm/lfill_blocks_velocity [logical,public/optional/default=.false.]
  • particles_mpicomm/lfill_bricks_velocity [logical,public/optional/default=.false.]
  • particles_mpicomm/lreblock_particles_run [logical,public/optional/default=.false.]
  • particles_mpicomm/m1b [integer,parameter=1]
  • particles_mpicomm/m2b [integer,parameter=1]
  • particles_mpicomm/mxb [integer,parameter=1]
  • particles_mpicomm/myb [integer,parameter=1]
  • particles_mpicomm/mzb [integer,parameter=1]
  • particles_mpicomm/n1b [integer,parameter=1]
  • particles_mpicomm/n2b [integer,parameter=1]
  • particles_mpicomm/nblock_loc [integer,public/optional/default=0]
  • particles_mpicomm/nbrick_foster [integer,public/optional/default=0]
  • particles_mpicomm/nbricks [integer,parameter=0]
  • particles_mpicomm/nbx [integer,parameter=1]
  • particles_mpicomm/nby [integer,parameter=1]
  • particles_mpicomm/nbz [integer,parameter=1]
  • particles_mpicomm/nghostb [integer,parameter=0]
  • particles_mpicomm/npar_iblock (1) [integer,public/optional/default=0]
  • particles_mpicomm/nproc_foster [integer,public/optional/default=0]
  • particles_mpicomm/nproc_parent [integer,public/optional/default=0]
  • particles_mpicomm/nxb [integer,parameter=1]
  • particles_mpicomm/nyb [integer,parameter=1]
  • particles_mpicomm/nzb [integer,parameter=1]
  • particles_mpicomm/xb (1,1) [real,public/optional/default=0]
  • particles_mpicomm/xbrick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/xref_par [real,private/optional/default=0.0]
  • particles_mpicomm/yb (1,1) [real,public/optional/default=0]
  • particles_mpicomm/ybrick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/yref_par [real,private/optional/default=0.0]
  • particles_mpicomm/zb (1,1) [real,public/optional/default=0]
  • particles_mpicomm/zbrick (1,1) [real,public/optional/default=0]
  • particles_mpicomm/zref_par [real,private/optional/default=0.0]

Subroutines and functions

subroutine  particles_mpicomm/initialize_particles_mpicomm(f)

Perform any post-parameter-read initialization i.e. calculate derived parameters.

Parameters:

f (mx,my,mz,mfarray) [real,in]

Call to:

fatal_error(), fatal_error_local(), warning(), fatal_error_local_collect()

subroutine  particles_mpicomm/migrate_particles(fp, ipar[, dfp[, linsert]])

Redistribute particles among processors based on the local yz-interval of each processor.

01-jan-05/anders: coded

TODO:
  • For ncpus>>1000 this subroutine possibly uses too much memory.

  • Optimize lmigration_redo to not reanalyse particles that have already been considered.

Parameters:
  • fp (mpar_loc,mpcom) [real,inout]

  • ipar (mpar_loc) [integer,inout]

  • dfp (mpar_loc,mpvar) [real,inout,]

  • linsert [logical,in,]

Use :

mpicomm, diagnostics (max_name())

Call to:

fatal_error_local(), warning(), fatal_error(), fatal_error_local_collect()

subroutine  particles_mpicomm/load_balance_particles(f, fp, ipar)

This subroutine counts particles in the bricks at the local processor and distributes the bricks in such a away that there is approximately equal number of particles per processor.

16-nov-09/anders: dummy

Parameters:
subroutine  particles_mpicomm/output_blocks(filename)

Write block domain decomposition to file.

16-nov-09/anders: dummy

Parameters:

filename [character]

subroutine  particles_mpicomm/input_blocks(filename)

Read block domain decomposition from file.

16-nov-09/anders: dummy

Parameters:

filename [character]

subroutine  particles_mpicomm/sort_blocks()

Sort the blocks by parent processor and by parent brick index.

18-nov-09/anders: dummy

subroutine  particles_mpicomm/get_brick_index(xxp, iproc, ibrick)

10-jan-12/ccyang: dummy

Parameters:
  • xxp (3) [real,in]

  • iproc [integer,out]

  • ibrick [integer,out]

subroutine  particles_mpicomm/communicate_fpbuf(to_neigh, from_neigh, her_npbuf, my_npbuf)
Parameters:
  • to_neigh [integer,in]

  • from_neigh [integer,in]

  • her_npbuf [integer,in]

  • my_npbuf [integer,in]

Use :

mpicomm