Clear Filters
Clear Filters

cell linked method in matlab with parallelization trough domain splitting

2 views (last 30 days)
I want to perform particle dynamics integration with cell linked method (all particles are assigned to different cells to speed up the calculation of the forces as in figure)
I am easily able to split paricles in cells trough the following function, where the grid stores the left vertex of the cells in x and y coordinates and ptcls.x stores the position of the particles as a 2 by NP (number of particles) mesh
function grd_to_ptcl = init_ptcl_mesh (grd, ptcls)
h = [grd.x(2) - grd.x(1); grd.y(2) - grd.y(1)];
idx = floor(ptcls.x./h) + 1;
indexPtcls = 1:size(ptcls.x,2);
grd_to_ptcl = accumarray(idx',indexPtcls(:),[grd.ncx grd.ncy],@(x) {x});
Once I have the cell array I am easily able to run trough not empty cells and perform force calculation
index = cellfun(@numel, grd_to_ptcl, 'UniformOutput', true);
index = find(index >=1);
for i=index(:)
% calculation of the force
My question is how I can split the domain and perform the calculation in parallel updating the boundaries of each of the splitted domains as in figure in an efficient way
If possible would be usefull to have a simple example, thanks in advance

Answers (1)

Hi Andrea,
Parallelize cell-linked method with domain splitting in MATLAB:
  1. Split domain & assign particles: Use :"spmd": and array partitioning to create subdomains with overlap for boundary handling. Distribute particles based on subdomain membership.
  2. Force calculation (parallel): Within each worker, use the cell-linked method for forces within the subdomain.
  3. Boundary correction (centralized): Gather info on boundary particles, calculate & accumulate forces due to neighboring subdomains.
  4. Combine results: Gather partial force calculations and combine for final forces on all particles.
This should give you an idea on how to work around.




Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!