Particle size is <= 1 mircon

Submitted by govind on Tue, 04/03/2018 - 12:34

I have to simulate particles with size less than or equal to 1 micron. When I give radius in input script file as 0.000001, I get run time error i.e. volume_limit is exceeded , change the limit. I change the volume_limit in fix_template_sphere .cpp file and build the liggghts again. But it doesn't work out properly while running the script with new volume limit as expected.

Is there any specific for this much particle size?

Govind

richti83's picture

richti83 | Tue, 04/03/2018 - 13:19

Switch to units cgs (centimeter, gramm seconds) to avaid numerical errors.
https://www.cfdem.com/media/DEM/docu/units.html

A best-practice is to define 2 variable as conversion factors for dimension and weight units, eg

variable dim_si2cgs equal 100 #scaling m to centimeter
variable mass_si2cgs equal 1000 #scaling kg to g
...
variable bulk_dens equal 1320*${mass_si2cgs}/(${dim_si2cgs}*${dim_si2cgs}*${dim_si2cgs}) #2.real bulk dens [kg/m³]
..
variable shearmod equal 1e7*${mass_si2cgs}/(${dim_si2cgs}*${dim_si2cgs}) # shear modulus [kg*m/(s²m²)]
variable youngmod equal ${shearmod}*(2.0+2.0*${poiss}) # young modulus [N/m²]
...
variable r1 equal 0.00001*${dim_si2cgs}
variable r2 equal 0.00002*${dim_si2cgs}
variable r3 equal 0.00003*${dim_si2cgs}
variable r4 equal 0.00004*${dim_si2cgs}

and so on ...

I'm not an associate of DCS GmbH and not a core developer of LIGGGHTS®
ResearchGate | Contact

govind | Thu, 04/05/2018 - 06:30

Thanks Christian,
I tried what you have suggested but that didn't work out. I am here posting the input (not actual one, just modified one of the examples i.e movingMeshGran):

# Moving mesh example

atom_style granular
boundary m m m
newton off

communicate single vel yes
units cgs
processors 8 5 1

#region reg block -.1 0.6 -.1 0.2 -0.3 0.25 units box
region reg block -1 1 -.5 .5 -.5 .5 units box
create_box 1 reg

variable dim_si2cgs equal 100 #scaling m to centimeter

variable mass_si2cgs equal 1000 #scaling kg to g

variable bulk_dens equal 2500*${mass_si2cgs}/(${dim_si2cgs}*${dim_si2cgs}*${dim_si2cgs}) #2.real bulk dens [kg/m³]

variable r1 equal 0.00002*${dim_si2cgs}

neighbor 0.001 bin
neigh_modify delay 0

#Material properties
fix m1 all property/global youngsModulus peratomtype 1e8
fix m2 all property/global poissonsRatio peratomtype ${0.45}
fix m3 all property/global coefficientRestitution peratomtypepair 1 0.9
fix m4 all property/global coefficientFriction peratomtypepair 1 0.05
fix m5 all property/global characteristicVelocity scalar 2.

#pair style
pair_style gran model hooke tangential history #Hooke without cohesion
pair_coeff * *

timestep 0.00005

fix 1 all nve/sphere
fix 2 all gravity 9.81 vector 0.0 0.0 -1.0

#box walls
fix boxwalls_x1 all wall/gran model hooke tangential history primitive type 1 xplane -1.0
fix boxwalls_x2 all wall/gran model hooke tangential history primitive type 1 xplane +1.0
fix boxwalls_y1 all wall/gran model hooke tangential history primitive type 1 yplane -0.5
fix boxwalls_y2 all wall/gran model hooke tangential history primitive type 1 yplane +0.5
fix boxwalls_z1 all wall/gran model hooke tangential history primitive type 1 zplane -0.5
fix boxwalls_z2 all wall/gran model hooke tangential history primitive type 1 zplane +0.5

#import mesh from cad:
fix cad1 all mesh/surface file meshes/bucket.stl type 1 move -50. -250. 0. &
scale 0.002 rotate axis 0. 1. 0. angle 90. rotate axis 0. 0. 1. angle 90.

#region of insertion
region bc block -0.9 0.9 -0.4 0.4 -0.5 -0.0 units box

#particle distributions
fix pts1 all particletemplate/sphere 15485863 atom_type 1 density constant ${bulk_dens} radius constant ${r1}
fix pdd1 all particledistribution/discrete 15485867 1 pts1 1.0

#fix ins all insert/pack seed 32452843 distributiontemplate pdd1 vel constant 0. 0. -8 insert_every 2000 overlapcheck yes all_in yes particles_in_region 1500 region bc

fix ins all insert/pack seed 32452843 distributiontemplate pdd1 maxattempt 200 insert_every once overlapcheck yes all_in yes vel constant 0. 0. 0. region bc volumefraction_region 0.6

#thermo settings
compute 1 all erotate/sphere
thermo_style custom step atoms ke c_1 vol
thermo 1000
thermo_modify lost ignore norm no

#make a dump of particles and the stl file
dump dmp all custom/vtk 200 post/movingMesh_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius
dump dumpstl all mesh/stl 200 post/dump*.stl

#run with particle insertion
run 8000 upto
unfix ins

#run to let particle settle
run 29999 upto

#use the imported mesh as granular wall
fix bucket_wall all wall/gran model hooke tangential history mesh n_meshes 1 meshes cad1
run 30000 upto

#moving mesh
fix movecad1 all move/mesh mesh cad1 linear -0.5 0. -0.3

#run
run 15000

#now lift the particles up
unfix movecad1
fix movecad2 all move/mesh mesh cad1 rotate origin 0. 0. 0. axis 0. 1. 0. period 2.
run 25000

richti83's picture

richti83 | Thu, 04/05/2018 - 15:32

You need to modify all dimension depending values (region boxes, moves, scales, velocities).
In your case you have a really big region filled with very small particles and a voidfraction of 60%

I'm not an associate of DCS GmbH and not a core developer of LIGGGHTS®
ResearchGate | Contact

govind | Fri, 04/06/2018 - 13:11

Why should it matter just by changing SI to CGS, as long as its all about dimensions ? I want to create sand bed of different size of particles (particle size will be less than 1 micron). I changes the script but still not getting and this time mass not volume fraction.

# Moving mesh example

atom_style granular
boundary m m m
newton off

units cgs

communicate single vel yes
#processors 8 5 1

variable dim_si2cgs equal 100 #scaling m to centimeter
variable mass_si2cgs equal 1000 #scaling kg to g
variable bulk_dens equal 2500*${mass_si2cgs}/(${dim_si2cgs}*${dim_si2cgs}*${dim_si2cgs}) #2.real bulk dens [kg/m³]
variable r1 equal 0.000002*${dim_si2cgs}

#region
region reg block -25.0 25.0 -10.0 10.0 -3.0 3.0 units box
create_box 1 reg

neighbor 0.0001 bin
neigh_modify delay 0

#Material properties
fix m1 all property/global youngsModulus peratomtype 1.0e8
fix m2 all property/global poissonsRatio peratomtype 0.45
fix m3 all property/global coefficientRestitution peratomtypepair 1 0.9
fix m4 all property/global coefficientFriction peratomtypepair 1 0.05
fix m5 all property/global characteristicVelocity scalar 2.

#pair style
pair_style gran model hooke tangential history #Hooke without cohesion
pair_coeff * *

timestep 0.00005

fix 1 all nve/sphere
fix 2 all gravity 981 vector 0.0 0.0 -100.0

#box walls
fix boxwalls_x1 all wall/gran model hooke tangential history primitive type 1 xplane -10.0
fix boxwalls_x2 all wall/gran model hooke tangential history primitive type 1 xplane +10.0
fix boxwalls_y1 all wall/gran model hooke tangential history primitive type 1 yplane -3.0
fix boxwalls_y2 all wall/gran model hooke tangential history primitive type 1 yplane +3.0
fix boxwalls_z1 all wall/gran model hooke tangential history primitive type 1 zplane -1.5
fix boxwalls_z2 all wall/gran model hooke tangential history primitive type 1 zplane +1.5

#region of insertion
region bc cylinder z 0.0 0.0 9.0 2.9 30.0 units box

#particle distributions
fix pts1 all particletemplate/sphere 15485863 atom_type 1 density constant ${bulk_dens} radius constant ${r1}
fix pdd1 all particledistribution/discrete 15485867 1 pts1 1.0

#fix ins all insert/pack seed 32452843 distributiontemplate pdd1 vel constant 0. 0. -0.8 insert_every 2000 overlapcheck yes all_in yes particles_in_region 1500 region bc

fix ins all insert/pack seed 32452843 distributiontemplate pdd1 insert_every once overlapcheck yes mass_in_region 1000.0 region bc ntry_mc 10000

#thermo settings
compute 1 all erotate/sphere
thermo_style custom step atoms ke vol
thermo 1000
thermo_modify lost ignore norm no

#make a dump of particles and the stl file
dump dmp all custom/vtk 200 post/movingMesh_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius
dump dumpstl all mesh/stl 200 post/dump*.stl

#run with particle insertion
run 8000 upto
unfix ins

#run to let particle settle
run 29999 upto

Govind

richti83's picture

richti83 | Fri, 04/06/2018 - 20:40

Why should it matter just by changing SI to CGS
Because all length and mass units are interpreted as centimeter and gram
When I'm not wrong you have a single particle mass of 8.37e-11 g (2,5 g/cm³*3,35103E-11 cm³), you want to have 1000g in your simulation: 1000/8.37e-11=1.2e13 <----NUMBER of Particles
I guess even a quantum computer is not able to solve this system ....

Your simulation domain is about 6000cm³ but your particle volume is only 3,35103E-11cm³ which makes no sense to me.

You should change all length and mass units to centimeter and gram an not only particle size and density.

What error message do you receive ? I did not let it run but as you have a stl dump without defining any mesh this could lead to a simulation abort too.

Good luck
Christian.

I'm not an associate of DCS GmbH and not a core developer of LIGGGHTS®
ResearchGate | Contact

govind | Mon, 04/09/2018 - 07:48

Thanks Christian

I have changed all units in CGS. As you are pointing out that domain volume is 6000cm³ but particle volume is only 3.35E-11 cm³, I do not get at this point why only one particle volume is considered though total particles volume is 401.92 cm³ i.e. 6.7% of total volume of simulation domain. If I double the mass of sand total particles volume becomes 800.159 cm³ i.e. 13.34 % of volume of simulation domain which is quite enough to create a sand bed but do not resulting.
I tried with reducing the simulation domain volume upto 2560 cm³ but getting same error message.

Error message:
ERROR on proc 0: Too many atom sorting bins (../atom.cpp:1472)

# Moving mesh example

atom_style granular
boundary m m m
newton off

units cgs

communicate single vel yes
#processors 8 5 1

variable dim_si2cgs equal 100 #scaling m to centimeter
variable mass_si2cgs equal 1000 #scaling kg to g
variable bulk_dens equal 2500*${mass_si2cgs}/(${dim_si2cgs}*${dim_si2cgs}*${dim_si2cgs}) #2.real bulk dens [kg/m³]
variable r1 equal 0.000002*${dim_si2cgs}

#region
region reg block -25.0 25.0 -10.0 10.0 -3.0 3.0 units box
create_box 1 reg

neighbor 0.0001 bin
neigh_modify delay 0

#Material properties
fix m1 all property/global youngsModulus peratomtype 1.0e8
fix m2 all property/global poissonsRatio peratomtype 0.45
fix m3 all property/global coefficientRestitution peratomtypepair 1 0.9
fix m4 all property/global coefficientFriction peratomtypepair 1 0.05
fix m5 all property/global characteristicVelocity scalar 2.

#pair style
pair_style gran model hooke tangential history #Hooke without cohesion
pair_coeff * *

timestep 0.00005

fix 1 all nve/sphere
fix 2 all gravity 981 vector 0.0 0.0 -100.0

#box walls
fix boxwalls_x1 all wall/gran model hooke tangential history primitive type 1 xplane -25.0
fix boxwalls_x2 all wall/gran model hooke tangential history primitive type 1 xplane +25.0
fix boxwalls_y1 all wall/gran model hooke tangential history primitive type 1 yplane -10.0
fix boxwalls_y2 all wall/gran model hooke tangential history primitive type 1 yplane +10.0
fix boxwalls_z1 all wall/gran model hooke tangential history primitive type 1 zplane -3.0
fix boxwalls_z2 all wall/gran model hooke tangential history primitive type 1 zplane +3.0

#region of insertion
region bc cylinder z 0.0 0.0 9.0 2.9 30.0 units box

#particle distributions
fix pts1 all particletemplate/sphere 15485863 atom_type 1 density constant ${bulk_dens} radius constant ${r1}
fix pdd1 all particledistribution/discrete 15485867 1 pts1 1.0

#fix ins all insert/pack seed 32452843 distributiontemplate pdd1 vel constant 0. 0. -0.8 insert_every 2000 overlapcheck yes all_in yes particles_in_region 1500 region bc

fix ins all insert/pack seed 32452843 distributiontemplate pdd1 insert_every once overlapcheck yes mass_in_region 1000.0 region bc ntry_mc 10000

#thermo settings
compute 1 all erotate/sphere
thermo_style custom step atoms ke vol
thermo 1000
thermo_modify lost ignore norm no

#make a dump of particle
dump dmp all custom/vtk 200 post/movingMesh_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius

#run with particle insertion
run 8000 upto
unfix ins

#run to let particle settle
run 29999 upto

Govind

richti83's picture

richti83 | Mon, 04/09/2018 - 09:18

I do not get at this point why only one particle volume is considered
because of the contact detection neighbor list. [1]
As I said: your problem is to big. Reduce domainsize and particle number to a value near 10K-100K particles per core.

here you see why you get this error:

if (1.0*nbinx*nbiny*nbinz > INT_MAX)
error->one(FLERR,"Too many atom sorting bins");

You can not have more than INT_MAX number of bins (and you don't want to have more bc. it's not solveable).

[1] https://www.cfdem.com/media/DEM/docu/neighbor.html

I'm not an associate of DCS GmbH and not a core developer of LIGGGHTS®
ResearchGate | Contact