如何实现粒子在球面上的均匀分布
今天建模时要做个粒子无法闯过的球面,我采用的方面是在球面上放置overlap的粒子,这些粒子和其他粒子的相互作用采用LJ势,这样就可以保证其他粒子进不了球内,呵呵。那么如何产生均匀的球面呢?
我使用的办法是:
1.先计算表面密度是1.0时大概需要的粒子数N;
2.用MATLAB程序把粒子随机分布到球面上,并加上原点处的粒子写如data数据,这样就有N+1个粒子;
3.所有球面粒子和原点处的组成 N个bonds
4.fixed 原点粒子,采用bond_style :harmonic bond_coeff 1 5000.0 【数值设置尽量大】 5.0 保证粒子不远离球面
5.粒子间相互作用采用pair_style soft 1.0291 pair_coeff * * 0.0 10.0,利用 NVE 系综run, run的过程中并不断调整截断距离使pair相互作用处于0和非0边缘。这样所有粒子间距离就可以通过对势来限制为相同。
问题的关键点是不断调整截断距离,先小后慢慢增大,不断速度置零,找到温度和对势的边缘(0),这样就可以使粒子间距离几乎相等,从而实现分布均匀。
MATLAB代码:
% 320 atoms of spherical face
clc;clear;
%%%%%%%%%%%%%%%%%%%%%
% parameters
R = 5;
Nf =320;
%%%%%%%%%%%%%%%%%%%%%
sita = pi*rand(1,Nf);
fai = 2*pi*rand(1,Nf);
x = R * (sin(sita).*cos(fai));
y = R * (sin(sita).*sin(fai));
z = R * cos(sita);
XYZ =[ x' y' z'];
plot3(x,y,z,'r*')
部分LAMMPS代码:我run这个代码N次,# 处是第一次run使用的
bond_style harmonic
special_bonds 0.0 1.0 1.0
read_restart face1.equ
bond_coeff 1 5000.0 5.0
group org id 321
group face id <= 320
pair_style soft 1.0291
pair_coeff * * 0.0 10.0
thermo 500
velocity face set 0 0 0 units box
#velocity face create 2.0 4928459 units box
fix 1 face nve
#fix 2 face langevin 2.0 0.25 10.0 9887415
fix 3 org nve/noforce
run 10000
#unfix 2
velocity face set 0 0 0 units box
pair_coeff * * 10.0 10.0
run 10000
velocity face set 0 0 0 units box
dump 1 all custom 10 atom.dat tag mol type q x y z
run 20
[ 本帖最后由 redream 于 2008-7-4 14:19 编辑 ]
附件: 您所在的用户组无法下载或查看附件
搜索更多相关主题的帖子:
球面 粒子 均匀分布