Fix balance without updating the core list

Hello,

Is it possible to use fix balance to split the atoms equally across cores, and keep the list fixed without being updated, so each particle belong to core #1 will belong to the same core throughout the simulation?

In this system the particles dont have any interactions.

Thank you

Here is the script, if needed.
This is part of a bigger script, but this is a working example.

# -------- Time parameters--------------------

variable	maxsteps equal 2000000000
variable    totalsteps equal 50000000
variable    MD_time equal 8000
variable	mydt equal 1e-3 
variable	runsteps equal ${MD_time}/${mydt}
variable 	delta_t equal 1000

if "${runsteps} > ${maxsteps}" then  &
"variable    runsteps equal ${maxsteps}"

# -------- Brownian dynamics variables --------------------

variable    rng string gaussian
variable    seed equal 17145296
variable    temp equal 1.0
variable    gamma_t equal 1.0
variable    gamma_r equal 0.40839

# -------- Dimensions variables-----------

dimension   2

variable    x_max equal 100
variable    x_min equal  0
variable    y_max equal 30
variable    y_min equal  0
variable    N_par equal 50000

# -------- Particles ratio --------------------

variable    comp_ratio equal 1
variable    N_mag equal ceil(${N_par}*${comp_ratio})

units    lj

atom_style    hybrid dipole sphere

boundary    p f p
newton off
lattice none 1.0
atom_modify    map array sort 5000 0.0
region    box block ${x_min} ${x_max} ${y_min} ${y_max} -0.2 0.2
region    box_par block ${x_min} ${x_max} 5 25 -0.2 0.2
create_box    2 box
mass   * 1.0
timestep    ${mydt}
neighbor    0.4 bin
neigh_modify    every 1 delay 1 check yes

create_atoms 1 random ${N_mag} ${seed} box_par overlap 0.01

#comm_style tiled

# -------computes: MSD, RDF------------------

compute msd_all all msd 

# -------Thermo Fixes to print to file VORO, STRESS, CLUSTER------------------

compute areas all voronoi/atom neighbors yes
compute	peratom all stress/atom NULL virial

# -------Fixes------------------

fix step all brownian/sphere ${temp} ${seed} gamma_t ${gamma_t} gamma_r ${gamma_r} rng ${rng}

#fix bal all balance ${delta_t} 1.1 rcb

# -------Thermo Fixes to print to file MSD, RDF------------------

fix msd_avg_all all ave/time ${delta_t} 1 ${delta_t} c_msd_all[1] c_msd_all[2] c_msd_all[4] file msd_all.txt

fix xwalls all wall/reflect ylo 5 yhi 25

# -------Apply LJ pair style------------------

pair_style none

# -------- Dumping --------------------

dump    3 all custom ${delta_t} data.lin.xy.xyz id x y xu yu
dump_modify 3 append yes

# -------- Simulation main run --------------------
write_data data2.xyz

run ${runsteps}  upto
write_restart restart.in2d 

No.

The assignment of individual atoms to sub-domains has little to do with the balance command, but is part of the domain decomposition parallelization. As atoms move around, they will be re-assigned to sub-domains before every update of the neighbor lists. The balance (or fix balance) command just shifts the sub-domain boundaries to optimize the distribution according to the imbalance weights.

If you don’t want the atoms to migrate between sub-domains, you must not use domain decomposition, i.e. only use one MPI process.

More importantly – why?

Anything that needs you to “pin” a particle to a particular process is going to be brittle and non-reproducible. Better to fix whatever it is, than artificially handicap a good performant domain decomposition system (which you can’t really do anyway without modifying the guts of the parallelization model).