May I ask some help for the creation of bonded clump (small spheres with overlap to create)?

HI, everyone, I am a new user of your powerful software, and I do have a problem which I am not pretty sure and wondering whether i can some suggestions from your experts.

I tried to use four small spheres to create a larger clump (each small sphere overlap the remaining spheres), totally six bonds are used to connect each of them. The target is to simulate the deformability of a clump (the change of bond is used to achieve this target).

I tried to use the new bpm packages, with bpm/sphere; bond_style: bpm/rotational.
but I do have a big problem, I can see that overlap (within in a clump) cause large force and stress, each particle has connectivity value of 3. However, it is not what I want. based on the documentation, I tried to use “special_bonds lj 0 1 1 coul 1 1 1” to turn off the pair-interaction, but it seems now work.
My target is that all these constitute spheres will not have any force or stress with the three remaining spheres, only connected by bonds. while the consititute sphere can contact the other clump. I am wondering whether LAMMPS can achieve this target.
since I am the new user, i can not really upload the input script, i therefore attach this for your reference.

as suggested, i share the data_system through a link, its definitely a very samll system, only 25 clump of 100 constitute spheres.

https://drive.google.com/file/d/1C0AEUOtD6IsOeaBIovixB6K3nVLzZ6d0/view?usp=sharing

I also attach a image for this overlapping clump, so that people can easily see what i want to do.

https://drive.google.com/file/d/1kYRSZl_JmdeMu-kVrlVO3zSykbIaUVqY/view?usp=sharing

Thanks for any suggestions or response for this question. hope everyone have a nice day

variable skindistance equal 0.00005 
variable     interval_fix equal 10000
variable     interval_dump equal 100000

# Initialisation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
units		si # (This means m, kg, s for base units.)
boundary	p p p 
atom_style	bpm/sphere
dimension	3
newton		on off
echo         both
comm_modify  vel yes 
processors   * * * 


# Create particles ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
read_data     rubber_sand_onlybond.data


# Pre-fix settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
neighbor	${skindistance} bin 
neigh_modify	delay 0 every 1 one 200000 page 2000000

# This part is related to the bonded particle model package.
bond_style      bpm/rotational store/local brkbond 100 time id1 id2
bond_coeff      1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.2 0.002 0.002
special_bonds lj 0 1 1 coul 1 1 1

# I hope use this  pair_style to simulate the contacts between constitute spheres (i.e. from different clumps, while within one clump, no reaction between constitute spheres)
pair_style granular 
pair_coeff 1 1 hertz 400000000.0 150.0 tangential linear_history 300.0 1.0 0.1 rolling sds 200.0 100.0 0.1 twisting marshall
#pair_coeff 2 2 hertz 200000000.0 100.0 tangential linear_history 300.0 1.0 0.1 rolling sds 200.0 100.0 0.1 twisting marshall
#pair_coeff 1 2 hertz 300000000.0 125.0 tangential linear_history 300.0 1.0 0.1 rolling sds 200.0 100.0 0.1 twisting marshall





# please ignore the following part, they are related to the dump and fix, may not related to the bonded particle problemes, just keep them to make input script look reasonable. 
timestep	0.00000001 # only related to the mass of particle, very consertative
run_style	verlet


compute 	2 all pair/local dist dx dy dz force fx fy fz cutoff radius
compute     3 all property/local patom1 patom2 cutoff radius
compute     4 all property/atom id radius x y z vx vy vz fx fy fz 

variable        volume atom "4.0*PI* c_4[2] * c_4[2] * c_4[2] /3.0"
compute         vol all reduce sum v_volume


compute     5 all contact/atom 
compute     connnew all reduce sum c_5  
compute     6 all stress/atom NULL
compute     7 all pressure NULL pair 
compute 	aveconn all reduce ave c_5 


fix         9 all press/berendsen iso 100000 100000 100000

variable 	step equal step
variable	xlength equal lx
variable	ylength equal ly
variable	zlength equal lz
variable    xxstress equal c_7[1]
variable    yystress equal c_7[2]
variable    zzstress equal c_7[3]
variable    xystress equal c_7[4]
variable    xzstress equal c_7[5]
variable    yzstress equal c_7[6]
variable    coordNum_new  equal  c_aveconn




variable      voidratio equal "(lz * lx * ly - c_vol)/(c_vol)"

fix 		2 all print ${interval_fix} "${step} ${xxstress} ${yystress} ${zzstress} ${xystress} ${xzstress} ${yzstress} ${xlength} ${ylength} ${zlength}" file trybond_mean_stresses_iso.txt screen no


fix 		4 all print ${interval_fix} "${step} ${coordNum_new}" file trybond_coord.txt screen no

fix 		6 all print ${interval_fix} "${step} ${voidratio}" file trybond_voidratio.txt screen no

fix		3 all nve/bpm/sphere

 dump		1 all local ${interval_dump} trybond_contact/dump*.contact c_3[1] c_3[2] c_2[1] c_2[2] c_2[3] c_2[4] c_2[5]    

dump         2 all custom ${interval_dump} trybond_connectivity/dump*.connectivity_1 id c_5 x y z diameter

dump         5 all custom ${interval_dump} trybond_velocity/dump*.all_velocities c_4[1] c_4[2] c_4[3] c_4[4] c_4[5] c_4[6] c_4[7] c_4[8] c_4[9] c_4[10] c_4[11]

run		120000000

its still TOM,just try to learn this website~~ :sob:

I think i may need to state that the most of the input scrip is prepared for granular materials.
I wish to study soft-rigid particles behaviour. The setup of rigid particles is OK, but for soft, it seems not easy

You can always upload your files to a shared folder on Dropbox, Google Drive, One Drive or similar and provide the link.

When you quote input files, please place them in triple backquotes (```) to turn off automatic typesetting from the discourse markup parser. (i’ve done this for you this time).

Your question/problem seems quite specific to the BPM package, so I have pointed your message out to the BPM developer, Joel Clemmer. Perhaps he can help. If you want some more generic help from non-experts, you need to significantly simplify your input example to only highlight your specific problem in a way that it can be easily reproduced.

Hi, Dear akohlmey
Many thanks to your response and help, i will follow your suggestion, and i will firstly try to revise the input script so that its simple and highlight the point

An immediate suggestion is special_bonds 0 0 0. In a tetrahedral bonded structure a particle has three neighbours, and all these are simultaneously 1-2, 1-3 and 1-4 bonded neighbours, so it is not enough to turn off 1-2 interactions.

hi srtee
many thanks for your response,
actually, i have tried to set the special bond, to 0 0 0; 0 0 0. but it did not work, error is that for bpm/sphere, the special bond must be used as 0 1 1; 1 1 1. that is also something, i am not really clear, since documentation said this specific special bond 0 1 1; 1 1 1 can turn off the interaction, but it seems that special bond documentation suggests that may be 0 0 0; 0 0 0 would be better.
i am thinking whether i can use the neighbor_modify to exclude the these constituents spheres

Looking through the documentation, it sounds like the BPM bonds are meant to dynamically break, which sounds like it’s at odds with what you’re trying to do. I don’t know enough else about BPM to help further.

hi srtee
thanks for your response,
yes, maybe the bpm may not be really effective for my target. i am looking about body, i can see in documentation that it can be used for deformable, but i am still try to think about this

thank you for your help. hope you have a nice day

Hi, what you described,

I tried to use “special_bonds lj 0 1 1 coul 1 1 1” to turn off the pair-interaction, but it seems now work.

is the correct approach. Setting the LJ 1-2 factor to zero (the first coefficient), implies all pair forces between bonded particles will be turned off (~multiplied by said zero). At the beginning of the simulation, the equilibrium length of each bond will also be set equal to the initial length. Therefore, unless separate clusters overlap, you should have no forces at timestep zero.

However, you should take a closer look at your pair and bond coefficients. Your bond stiffness is ~1 while your pair stiffness is ~10^8. This severe imbalance means bonds are virtually irrelevant and will almost certainly break once clusters come into contact.

If desired, you can use compute nbond/atom (compute nbond/atom command — LAMMPS documentation) to monitor when bonds break (which may or may not be your intended goal).

Hope this helps.

1 Like

Hi jtclemm
thanks for your response and help, it was also my thinking at very begining, with the special bond, i should turn off the interaction. but however, i checked the contact force dump files, at 0 timestep, the force is already very large, which shows strong interaction among a clump (i am pretty sure, clumps are not overlap with the remaining clumps). This is also confirmed by the observation of the connectivity values, at 0 timestep, all spheres has connectivity value of 3 (I used four spheres to create a clump, it should be 0 in my idea), while the next step, connectivity value decreases to 0 and 1, I think this suggests that such a large force break the bond, and therefore the connectivity value decease,

but thanks for your suggestion for the selection of pair and bond coefficients, i will be careful about that.

Hi, jtclemm
i think your point is right about the selection of pair and bond coefficients, I checked the bond number, they do break suddenly when I run the simulation. I significantly change these parameters (just make them close, but not really meaningful, i think i need study the documentation carefully). The results seem ok, although i get the error “Too many neighbor bins”, but stress, connectivity values and bond number look normal before the error. Thanks for your suggestion for that. it is really helpful.

and i just identified that special bond is not enough, we also need neighbor_modify exclude molecule/intra to turn off these interacton. it works, i can see the connectivity value is 0 at very begining, its good. but the documentation say we should use exclude molecule/intra group; but when i use exclude molecule/intra 1, it gives error, i have to use exclude molecule/intra all. just curious why cannot use group 1…

thanks for your suggestion, and hope you have nice day

Hello. You shouldn’t need to specify an exclude neighbor_modify command. It might work if you never intend on having bonds break, but it’s never been explicitly tested with the BPM package so I can’t say for certain.

Looking at your data file, I think you might have accidentally overlooked two clusters which are in contact across the z dimension - atoms 53 and 59. You can spot them pretty easily if you try dumping forces on atoms. When separated, I find zero initial forces when running your input script.

Hi jtclemm

Many thanks to your repsone, what i want to do is that the bond never break. besides, the neighbor_modify is necessary if i want to create clump with spheres overlapping the other spheres. As i can see, neighbor_modify work well, and all interaction between constitute spheres are turnded off now.

thanks for you idenfitication of the datafile. You are right. my code for generating this system was not 100% right. that is reason why i always got large force and stress. Thank you for pointing this and it is really helpful.

just for anyone who is interested in overlapped clump, both special bond and neighbor_modify are necessary to turnoff all interaction

Glad I could help, but to clarify:

just for anyone who is interested in overlapped clump, both special bond and neighbor_modify are necessary to turnoff all interaction

is not correct. These options are redundant for your simulation. Special bonds with a 1-2 factor of 0.0 ensure overlapping spheres do not exert pairwise forces if they are bonded. There is no need to additionally exclude intra-molecular interactions from the neighbor list.

Hi jtclemm
My apologies for bothering you in this Matsci after such a long time.
it just you mentioned that “Special bonds with a 1-2 factor of 0.0 ensure overlapping spheres do not exert pairwise forces if they are bonded”.
but I always found that this special bonds did not really work in my case. I thought it maybe due to the fact that i am using the stable 2022 verision of lammps.

currently, i moved to the 2023 feature lammps and also tried to look this. but i still saw that special bonds did not work.

neighbor	${skindistance} bin 
group rubber type 1
group sand   type 2
neigh_modify exclude molecule/intra rubber delay 0 every 1 one 200 page 2000
#neigh_modify delay 0 every 1 one 200 page 2000
bond_style      bpm/rotational
bond_coeff      1 1e4 1e4 5e5 5e5 1.0e12 1.0e12 1.0e12 1.0e12 1 1 0.0004 0.0004
special_bonds   lj 0 1 1 coul 1 1 1

when i used neigh_modify to turn off neighbor for all my type 1 spheres, everything is ok
see the screen for dump.


at step 0, no contact forces, the c_5, which is connectivity number, all equal to 0, which makes sense. the c_10, which is number of bond connected to this sphere. in my case ,they are 5. this also make senses.

but when I just use special bond, like this, and did not change other things.

neighbor	${skindistance} bin 
group rubber type 1
group sand   type 2
#neigh_modify exclude molecule/intra rubber delay 0 every 1 one 200 page 2000
neigh_modify delay 0 every 1 one 200 page 2000
bond_style      bpm/rotational
bond_coeff      1 1e4 1e4 5e5 5e5 1.0e12 1.0e12 1.0e12 1.0e12 1 1 0.0004 0.0004
special_bonds   lj 0 1 1 coul 1 1 1


i got the results that special bond seems did not work. firstly. i can identify large force in step 0, then the c_5, which is the connectivity number, now is 11. this also confirms, each sphere in my clump started to contact the remaining 11 spheres (i.e. my clump is made of 12 spheres).

i am thinking whether anything in my script disable the “special bond”? or this is potential bug?
although i can use neigh to make this work, i think it may useful to show this in case anyone has the similar problem.
i have attached all related documents for anyone’ s reference.

hope you have a nice day

best regards
rubber_sand15_12.data (5.9 MB)
verify.in (5.0 KB)

dump0.atom (2.5 MB)
dump0.contact (386 Bytes)

or in this google drive
https://drive.google.com/file/d/1-f-Vr7XMFaRY_RHE2fmnOy6e6wQxb-BH/view?usp=sharing, https://drive.google.com/file/d/10FPberAQt7S_knGNYAGbkCxyUQu60IVF/view?usp=sharing, dump0.atom_only_special_bond - Google Drive, dump0.contact - Google Drive

https://drive.google.com/file/d/1-f-Vr7XMFaRY_RHE2fmnOy6e6wQxb-BH/view?usp=sharing, https://drive.google.com/file/d/10FPberAQt7S_knGNYAGbkCxyUQu60IVF/view?usp=sharing, dump0.atom_only_special_bond - Google Drive, dump0.contact - Google Drive

the link for dump files, hope this works

From briefly looking at your screen shot and data file, I do not see evidence of a bug. Notice that almost all of the contacts in your dump have zero forces. They may be in your neighbor list (in case the bond breaks between neighbor list builds) but they are not transmitting forces. See the note about special bonds on the documentation page for compute pair/local.

For other interactions like 13503-13507 with nonzero forces, the issue appears to be that your particle diameters are larger than the gap between them and there’s no bond between those two particles so they will have contact forces.

1 Like

Hi jtclemm

Thanks for your reponse and help, i now finally understand this point. for my clump. i did not create bond for each two small spheres.
My apologies for not considering this carefully.
hope you have a nice day