最新版PFC Command 命令大全
- 格式:docx
- 大小:711.19 KB
- 文档页数:31
PFC3D 学习记录5-COMMAND REFERENCE通用规定和特征命令语法默认情况下,命令行忽略大小写,然而可以通过SET case命令激活区别大小写情况。
斜体字代表数字,以i, j, m n 为开头的字母代表整数,其他情况为实数命令词,关键字和数值可用空格,以及(),=分隔。
在分号(;)后为注释一行最多可包含80个字符。
而& 表示续行Range 语法定义一定限制范围的物体可运用Range的命令:Change/ initial/ property Clump Fix/ Free Group JsetModel Plot ( 运用于不同输出项目) PrintRange( 创建一个命名的范围)一个Range 定义一系列物体。
由许多范围元素构成。
如果使用多个范围元素,最终物体几何为不同元素集合的交集。
但是可通过关键词any改变选择特性。
如果使用关键词any选项,任何包含在范围内的单元可被认为最终物体集合的一部分。
即求合集除此之外,通过在定义范围单元后接关键词not确定所有不在指定范围的单元通常还可以用定义group 方式定义复杂的range。
内置范围单元:Annulus center ( x, y, z) radius = r1, r2球形空心区域中心在(x, y, z )内径r1, 外径r2Color il < iu >球体或墙体在间隔(il, iu )内颜色索引。
若无iu 则iu = il球体颜色索引列表通过property命令建立。
墙体颜色索引列表必须用FISH 内置的w_color设置Cylinder end1( x1, y1, z1 ) end2( x2, y2, z2 ) radius = r圆柱范围。
圆柱中心轴过end1( x1, y1, z1 ) end2( x2, y2, z2 ) 半径为r.Fish fname调用用户定义的范围单元。
通过FISH函数fname 执行。
PFC3D命令说明(COMMON COMMAND REFERENCE)PFC3D是基于命令驱动模式(COMMAND-DRIVEN FORMAT)的软件,各种命令控制着程序的运行,这部分内容将介绍PFC3D软件的内嵌命令。
本说明文件译自PFC3D软件2.0版使用手册中的COMMAND REFERENCE部分,并补充了一些手册中没有的命令(如设置粘性阻尼、生成圆柱、螺旋壁面等,这些命令在更高版本的手册中有说明)。
命令说明的顺序没有采用原手册中按字母排序的方式,而是根据创建PFC3D 模型解决实际物理问题的一般过程,对相关命令加以说明。
PFC3D手册中COMMON COMMAND REFERENCE只对每个命令的格式和基本功能做了简单介绍,本说明文件对每个命令做了更详细的解释,为保持文件的可读性,对命令的详细解释都以附录形式给出。
本文件介绍了PFC3D的基本功能,对初学者有较大帮助,但要进行高级应用,还需清楚了解DEM和PFC3D相关功能的基本原理以及软件的结构等。
由于只关注使用PFC3D解决颗粒流的问题,涉及颗粒流的命令介绍的比较详细,而用于岩土工程等其他领域的命令,由于关注很少且专业知识缺乏,只是不求甚解。
0.关于命令格式的说明:PFC3D中每个命令基本包含3部分:命令名、必需关键词和可选关键词。
本说明文件中,命令名和必需关键词写在第一行,尖括号<Keyword…>表示该命令具有可选关键词,罗列于命令名的下一行次级列;带参数的关键词,参数紧随关键词之后用加粗斜体表示。
名字较长的“命令”和“关键词”,PFC3D允许不写出全部字母,只需简写前面的一些字母,最短可简写名(即PFC3D能识别的最短简写“命令”和“关键词”名)用加粗字体表示。
例如命令:BALL rad r<keyword…>…hert z …id idx xy yz z说明:命令名为BALL的命令,具有必需关键词rad(参数r)和hert z、id、x、y、z等可选关键词。
pfc2d易混的几条命令易混的几条命令:hist:(1)用hist记录颗粒、测量圆、墙体的参数时,命令里会有两个id,紧跟着的一个是hist的id,如:hist id 1 ball xvel id 1:第一个id是hist的id,第二个是球的id。
hist id 101 meas s22 id 1:第一个id是hist的id,第二个id是测量圆的id。
同样的还有 hist id 201 wall xforce id 1需要注意的是,第一个id和数字是可以不加的,去掉的话hist的id 号会自动从1开始自动往后加。
不建议这样。
建议像上面三条命令那样,不同种类的记录变量首数字取不同值,以方便区分。
(2)用hist write命令可以将记录的数值写在文件里,基本的命令如下:hist write 1 101 201 vs 2 file xxxx.hist begin 1 end 1000 xmin 1 xmax 1000 ymin 0 ymax 1000这个是把记录号为1、101、201的记录以记录号2为横坐标输出到文件xxxx.hist中。
begin和end后面的数字是step数。
式中有下划线的部分是可以省略的,如果没有“vs 2”,xmin和xmax 后面的是step数值,有的话,就是hist 2的数值范围。
关于这个hist文件的处理,我的做法是先打开一个空白excel文件,然后在里面选文件-打开,文本导入向导里面选分隔符号-tab 键,然后就可以打开分行处理了。
range 和 group:这一对有很多联系,很多功能都是重复的。
range是在command reference里面第一节单独拿出来讲的东西,它的使用范围非常广,后面可以加各种各样的范围条件,如圆圈、圆环、线的上方下方、x的范围、y的范围,以及group。
而group后面也是用range来确定一个范围。
用range的时候后面可以给这个rang取名字,比如:range name a1 x 0 0.2,就把0-0.2范围内的颗粒定义为名叫a1的range 了。
PFC3D 学习记录5-COMMAND REFERENCE通用规定和特征命令语法默认情况下,命令行忽略大小写,然而可以通过SET case命令激活区别大小写情况。
斜体字代表数字,以i, j, m n 为开头的字母代表整数,其他情况为实数命令词,关键字和数值可用空格,以及(),=分隔。
在分号(;)后为注释一行最多可包含80个字符。
而&表示续行Range 语法定义一定限制范围的物体可运用Range的命令:Change/ initial/ property Clump Fix/ Free Group JsetModel Plot ( 运用于不同输出项目)PrintRange( 创建一个命名的范围)一个Range 定义一系列物体。
由许多范围元素构成。
如果使用多个范围元素,最终物体几何为不同元素集合的交集。
但是可通过关键词any改变选择特性。
如果使用关键词any选项,任何包含在范围内的单元可被认为最终物体集合的一部分。
即求合集除此之外,通过在定义范围单元后接关键词not确定所有不在指定范围的单元通常还可以用定义group 方式定义复杂的range。
内置范围单元:Annulus center ( x, y, z) radius = r1, r2球形空心区域中心在(x, y, z )内径r1, 外径r2Color il < iu >球体或墙体在间隔(il, iu )内颜色索引。
若无iu 则iu = il球体颜色索引列表通过property命令建立。
墙体颜色索引列表必须用FISH 内置的w_color设置Cylinder end1( x1, y1, z1 ) end2( x2, y2, z2 ) radius = r圆柱范围。
圆柱中心轴过end1( x1, y1, z1 ) end2( x2, y2, z2 ) 半径为r.Fish fname调用用户定义的范围单元。
通过FISH函数fname 执行。
pfc三轴压缩newSET random;随机生成plo wallplo add ball;----------------------------------------------------def make_walls;生成墙wextend=0.1hextend=0.1w_stiff=1.6e10;墙的刚度,取球的1.1倍_width=-width_x0=_width*(1.0+wextend);width是长方体的宽度的一半_y0=_width*(1.0+wextend)_z0=0_x1=width*(1.0+wextend)_y1=_width*(1.0+wextend)_z1=0_x2=width*(1.0+wextend)_y2=width*(1.0+wextend)_z2=0_x3=_width*(1.0+wextend)_y3=width*(1.0+wextend)_z3=0commandwall id=1kn=w_stiff face(_x0,_y0,_z0)(_x1,_y1,_z1)(_x2,_y2,_z2)& (_x3,_y3,_z3);要按右手法则建立,而且pfc里面的坐标轴是一定的,要按照里面的来end_command_x0=_width*(1.0+wextend)_y0=_width*(1.0+wextend)_z0=height;height是长方体的高度_x1=_width*(1.0+wextend)_y1=width*(1.0+wextend)_z1=height_x2=width*(1.0+wextend)_y2=width*(1.0+wextend)_z2=height_x3=width*(1.0+wextend)_y3=_width*(1.0+wextend)_z3=heightcommandwall id=2kn=w_stiff face(_x0,_y0,_z0)(_x1,_y1,_z1)(_x2,_y2,_z2)& (_x3,_y3,_z3)end_command_x0=width_y0=_width*(1.0+wextend)_z0=height*(1.0+hextend)_x1=width_y1=width*(1.0+wextend)_z1=height*(1.0+hextend)_x2=width_y2=width*(1.0+wextend)_z2=-hextend*height_x3=width_y3=_width*(1.0+wextend)_z3=-hextend*heightcommandwall id=3kn=w_stiff face(_x0,_y0,_z0)(_x1,_y1,_z1)(_x2,_y2,_z2)& (_x3,_y3,_z3)end_command_x0=_width_y0=_width*(1.0+wextend)_z0=height*(1.0+hextend)_x1=_width_y1=_width*(1.0+wextend)_z1=-hextend*height_x2=_width_y2=width*(1.0+wextend)_z2=-hextend*height_x3=_width_y3=width*(1.0+wextend)_z3=height*(1.0+hextend)commandwall id=4kn=w_stiff face(_x0,_y0,_z0)(_x1,_y1,_z1)(_x2,_y2,_z2)& (_x3,_y3,_z3)end_command_x0=_width*(1.0+wextend)_y0=width_z0=-hextend*height_x1=width*(1.0+wextend)_y1=width_z1=-hextend*height_x2=width*(1.0+wextend)_y2=width_z2=height*(1.0+hextend)_x3=_width*(1.0+wextend)_y3=width_z3=height*(1.0+hextend)commandwall id=5kn=w_stiff face(_x0,_y0,_z0)(_x1,_y1,_z1)(_x2,_y2,_z2)& (_x3,_y3,_z3)end_command_x0=_width*(1.0+wextend)_y0=_width_z0=height*(1.0+hextend)_x1=width*(1.0+wextend)_y1=_width_z1=height*(1.0+hextend)_x2=width*(1.0+wextend)_y2=_width_z2=-hextend*height_x3=_width*(1.0+wextend)_y3=_width_z3=-hextend*heightcommandwall id=6kn=w_stiff face(_x0,_y0,_z0)(_x1,_y1,_z1)(_x2,_y2,_z2)& (_x3,_y3,_z3)end_commandend;----------------------------------------------------def assemble;颗粒生成s_stiff=0.0;初始切向刚度n_stiff=1.4e10;初始法向刚度tot_vol=4*height*width^2.0;长方体的体积rbar=0.5*(rlo+rhi);rlo最小球半径、rhi最大球半径num=int((1.0-poros)*tot_vol/(4.0/3.0*pi*rbar^3));poros越大,球数量越少mult=1.5;初始半径放大系数,越大,球数量越多rlo_0=rlo/multrhi_0=rhi/multcommandgen id=1,num rad=rlo_0,rhi_0x=_width,width y=_width,width z=0,height tries 10000000;方形的话就不用过滤器了;上面球的半径是缩小了mult倍的prop dens=2700ks=s_stiff kn=n_stiff;dens即是岩石颗粒的密度end_commandii=out(string(num)+'particles were created')sum=0.0;获得有效孔隙度bp=ball_head;是所有球里面的首地址loop while bp#null;当bp不是null的时候sum=sum+4.0/3.0*pi*b_rad(bp)^3;sum是前面所有的球的体积的总和bp=b_next(bp);下一个球的地址end_looppmeas=1.0-sum/tot_vol;1-球的总体积/圆柱体的体积mult=((1.0-poros)/(1.0-pmeas))^(1.0/3.0);将总的孔隙率调成1-poros commandini rad mul mult;将球的半径放大mult倍cycle30000;执行1000个时步的循环计算prop ks=1.4e10fric0.5cycle3100;执行250个时步的循环计算end_commandend;----------------------------------------------------;----------------------------------------------------macro zero'ini xvel0yvel0zvel0xspin0yspin0zspin0';宏,现在定义了后面就可以直接引用了xspin可能是x方向的角速度SET height=0.1width=0.025rlo=0.001rhi=0.002poros=0.385make_wallsassemblezerosave tt_ass.SAV;fname:triax_2.DAT Servo-control and initial stress state-triax sampleres tt_ass.SAV;restore compacted assembly;----------------------------------------------------def get_ss;确定墙的平均应力和应变;之前的cycle可能产生了一定的位移,下面要除掉zdif=w_z(wadd2)-w_z(wadd1);w_z(wadd1)指的是墙1在之前产生的位移ydif=w_y(wadd5)-w_y(wadd6);所有的都是正的减去负的xdif=w_x(wadd3)-w_x(wadd4)new_width1=2*width+xdif;x方向新的宽度,这个时候就不是宽度的一半了,是整个宽度new_width2=2*width+ydif;y方向新的宽度new_height=height+zdif;除掉已经产生的位移,是新的高度wsxx=0.5*(w_xfob(wadd4)-w_xfob(wadd3))/(new_width2*new_height);x方向的应力wsyy=0.5*(w_yfob(wadd6)-w_yfob(wadd5))/(new_width1*new_height);ywszz=0.5*(w_zfob(wadd1)-w_zfob(wadd2))/(new_width1*new_width2);zwexx=2.0*xdif/(2*width+new_width1);x向应变参看手册186页3.16weyy=2.0*ydif/(2*width+new_width2);y向应变wezz=2.0*zdif/(height+new_height);z向应变wevol=wexx+weyy+wezz;体积应变end;----------------------------------------------------def get_gain;选取轴向和径向获得的伺服参数alpha=0.5;松弛参数count=0avg_stiff=0cp=contact_head;找到上、下墙上接触的平均数量loop while cp#nullif c_gobj2(cp)=wadd1count=count+1avg_stiff=avg_stiff+c_kn(cp)end_ifif c_gobj2(cp)=wadd2count=count+1avg_stiff=avg_stiff+c_kn(cp)end_ifcp=c_next(cp)end_loopncount=count/2.0avg_stiff=avg_stiff/countgz=4*alpha*width^2.0/(avg_stiff*ncount*tdel);可以参看187页公式3.22,是增益参数count=0avg_stiff=0cp=contact_head;找到左、右墙上接触的平均数量loop while cp#nullif c_gobj2(cp)=wadd3count=count+1avg_stiff=avg_stiff+c_kn(cp)end_ifif c_gobj2(cp)=wadd4count=count+1avg_stiff=avg_stiff+c_kn(cp)end_ifcp=c_next(cp)end_loopncount=count/2.0avg_stiff=avg_stiff/countgx=2*alpha*width*height/(avg_stiff*ncount*tdel);可以参看187页公式3.22,是增益参数count=0avg_stiff=0cp=contact_head;找到前、后墙上接触的平均数量loop while cp#nullif c_gobj2(cp)=wadd5count=count+1avg_stiff=avg_stiff+c_kn(cp)end_ifif c_gobj2(cp)=wadd6count=count+1avg_stiff=avg_stiff+c_kn(cp)end_ifcp=c_next(cp)end_loopncount=count/2.0avg_stiff=avg_stiff/countgy=2*alpha*width*height/(avg_stiff*ncount*tdel);可以参看187页公式3.22,是增益参数end;----------------------------------------------------def servo;伺服控制while_steppingget_ss;计算应力和应变udx=gx*(wsxx-sxxreq);参看187页3.17udx是墙的速度wsxx是x向实际压力,sxxreq 是我们需要的x向压力udy=gy*(wsyy-syyreq)w_xvel(wadd4)=udxw_xvel(wadd3)=-udxw_yvel(wadd6)=udyw_yvel(wadd5)=-udyif z_servo=1;选择轴压伺服的开关,是1的时候就开,否则就关udz=gz*(wszz-szzreq)w_zvel(wadd1)=udzw_zvel(wadd2)=-udzend_ifend;----------------------------------------------------def iterateloop while1#0get_gainif abs((wsxx-sxxreq)/sxxreq)<sig_tol then;实际的x围压和需要的围压达到一致就不加载了if abs((wsyy-syyreq)/syyreq)<sig_tol then;实际的y围压if abs((wszz-szzreq)/szzreq)<sig_tol then;实际的轴压和需要的轴压达到一致就不加载了exitend_ifend_ifend_ifcommandcycle100end_commandend_loopend;----------------------------------------------------def wall_addrwadd1=find_wall(1)wadd2=find_wall(2)wadd3=find_wall(3)wadd4=find_wall(4)wadd5=find_wall(5)wadd6=find_wall(6)endzeroSET sxxreq=-3e3syyreq=-3e3szzreq=-3e3sig_tol=1z_servo=1;设置x向、y向围压和轴压的水平都是5MPaiterate;使所有方向的压力都达到静水压力状态,上面达到的是所有的方向都是达到1MPa sav第一静水压力.savres第一静水压力.sav;restore initial stressed assembly;----------------------------------------------------def set_ini;设置初始应变wezz_0=wezz;轴向应变,前面计算了的wevol_0=wevol;轴向速度end;----------------------------------------------------def conf;记录的变量devi=wszz-wsxx;偏应力,最大主应力减最小主应力,也就是说这里x方向取的是最小值deax=wezz-wezz_0;轴向应变devol=wevol-wevol_0;体积应变confx=wsxx;x压应力confy=wsyy;y压应力confz=wszz;z压应力end;----------------------------------------------------def accel_platens;-----在一定的时步内室加载板达到相应的速度Accelerates the platens to achieve vel of _vfinal in_nsteps,;using_nchunks_niter=_nsteps/_nchunksloop_chnk(1,_nchunks)if_close=1then_vel=_chnk*(_vfinal/_nchunks)else_vel=-_chnk*(_vfinal/_nchunks)end_if_mvel=-_velcommandwall id1zvel=_velwall id2zvel=_mvelcycle_niterend_commandend_loopend;----------------------------------------------------history id=6devi;监测偏应力history id=7deax;监测轴向应变history id=8devol;监测体积应变history id=9wexx;监测x方向应变history id=10deax;监测z方向应变history id=11confz;z压应力history id=12confxhistory id=13confySET hist_rep=50;每50步监测一次SET z_servo=0;围压都还保持伺服状态,取消轴向加压的伺服控制zero;设定x、y、z方向所有的速度都等于0sav tt_init.SAV;ready for modulus and failure tests;fname:triax_9.DAT(friction and parallel bonds)res tt_init.savprop fric=0.8prop pb_kn=1.4e10pb_ks=1.4e10pb_rad=1;法向刚度系数、切向刚度系数、半径乘数prop pb_nstren=7e10pb_sstren=7e10;法向平行粘结力、切向平行粘结力set_vfinal=0.1_nsteps=2000_nchunks=80;_vfinal最终的加载速率,set_close=1;加载_close=1时候是加载accel_platensplo his-11vs-10cyc25000000。
PFC3D命令说明本说明文件译自PFC3D软件版使用手册中的COMMAND REFERENCE部分,并补充了一些手册中没有的命令(如设置粘性阻尼、生成圆柱、螺旋壁面等,这些命令在更高版本的手册中有说明)。
命令说明的顺序没有采用原手册中按字母排序的方式,而是根据创建PFC3D模型解决实际物理问题的一般过程,对相关命令加以说明。
PFC3D手册中COMMON COMMAND REFERENCE只对每个命令的格式和基本功能做了简单介绍,本说明文件对每个命令做了更详细的解释,为保持文件的可读性,对命令的详细解释都以附录形式给出。
本文件介绍了PFC3D的基本功能,对初学者有较大帮助,但要进行高级应用,还需清楚了解DEM和PFC3D相关功能的基本原理以及软件的结构等。
关于命令格式的说明:PFC3D中每个命令基本包含3部分:命令名、必需关键词和可选关键词。
本说明文件中,命令名和必需关键词写在第一行,尖括号<Keyword…>表示该命令具有可选关键词,罗列于命令名的下一行次级列;带参数的关键词,参数紧随关键词之后用加粗斜体表示。
名字较长的“命令”和“关键词”,PFC3D允许不写出全部字母,只需简写前面的一些字母,最短可简写名(即PFC3D能识别的最短简写“命令”和“关键词”名)用加粗字体表示。
例如命令:BALL rad r <keyword…>…hert z …id idx xy yz z说明:命令名为BALL的命令,具有必需关键词rad(参数r)和hert z、id、x、y、z等可选关键词。
其中hert z不带参数,最短可简写为hert;id、x、y、z的参数分别为id、x、y、z。
另外,PFC3D默认对内嵌命令以及FISH函数中的命令名、关键词、参数等的字母大小写不敏感,也可设置为大小写敏感(使用SET case_sensitivity on命令),建议使用对字母大小写不敏感模式,可减少错误的产生。
pfc类库使用说明PB6.5类库使用规范1.0版目录1 PB类库说明: (3)1.1 类库结构: (3)1.1.1 系统基类 (3)1.1.2 公共业务类 (3)1.1.3 拓展业务类 (4)1.2 类库具体说明: (4)1.2.1 基本应用层服务(bcappsvr.pbl) (4)1.2.2 数据窗口层服务(bcdwsvr.pbl) (5)1.2.3 应用对象服务(bcuserobject.pbl) (5)1.2.4 权限控制(bcright.pbl) (6)1.2.5 公共业务类用到的最原始窗口(pubwin.pbl) (6)1.2.6 公共的全局结构、菜单、全局函数等(pubother.pbl) (7) 1.2.7 公共的用户服务对象(pubuserobject.pbl) (7)1.2.8 公共业务基类:数据维护类(pubdataedit.pbl) (8)1.2.9 公共业务基类:数据打印类(pubdataprint.pbl) (9)1.2.10 公共业务基类:通用数据查询类(pubdatasearch.pbl) (9) 1.2.11 公共业务基类:数据报表类(pubdatareport.pbl) (9)1.2.12 公共业务基类:通用分组查询类(pubquerygroup) (10)2 PB类库使用规范: (10)2.1 使用总则 (10)2.2 详细使用说明 (11)2.2.1 sheet窗口 (11)2.2.2 response窗口 (11)2.2.3 数据维护查询窗口 (11)1 PB类库说明:1.1 类库结构:类库由三个部分组成:系统基类、公共业务类、拓展业务类1.1.1 系统基类系统基类是在PowerBuilder内建的控件的基础之上对其功能进行了扩展,并封装了一些常用功能。
它包括以下三个文件:bcappsvr.pbl 基本应用层服务bcdwsvr.pbl 数据窗口层服务bcuserobject.pbl 应用对象服务bcright.pbl 权限控制1.1.2 公共业务类公共业务类是将在MIS系统的建设中常用的功能进行归类实现。
关于PFC这一章介绍的是PFC的基础,PB的首要概念,面向对象的内容,并附有一个PFC的组成图。
理解PFC:PFC是一组PowerBulider的对象,它可以由用户自己定制,扩充。
你可以象搭积木一样使用它,使程序紧密的连接起来。
PFC还包括许多有用的对象,例如:debug对象。
PFC是由PowerBuilder提供的PB对象,并支持PowerScript 源代码。
它使用的是先进的PowerBuilder 面向对象技术,其一个特征是面向服务设计。
确使你的程序占用最少的计算机资源。
PFC使用了许多先进的编码技巧,你可以使用PowerBuilder的PowerScript编译器来检查对象,实例,事件,和继承PFC父类的函数。
这本书说的是PFC的概念(PFC是什么东西和你为什么使用它)还有使用信息(如何计划.使用PFC)为了更详细的了解PFC的对象,实例,事件,和继承PFC父类的函数,请看PFC ObjectReference 。
理解PowerBuilder:使用PFC可以创建先进的面向对象式的PowerBuild类库。
要想掌握PFC和它的面向对象特征,首先需要了解PowerBuilder和它的面向对象特征。
这一节将告诉你应该熟悉PowerBuilder 的基本概念。
PFC原是为建类库准备的,但并不是不让你用它创建应用程序。
通过看PowerBuilder User's Guide可以完全了解的PowerBuilder的概念。
PowerBuilder类库和对象:PFC是作为PowerBuilder Libraries(PBLS)发行的。
PBLs包括你用于写程序的父类和派生类对象。
在使用任何PFC对象之前,你一定要在你的应用程序库的搜索路径中把PFC类库加进去。
PowerBuilder在执行程序时通过搜索路径找到程序所引用的对象。
PB标准对象用途Windows PowerBuilder应用程序和它的用户之间的联系界面。
PFC3D命令说明(COMMON COMMAND REFERENCE)PFC3D是基于命令驱动模式(COMMAND-DRIVEN FORMA T)的软件,各种命令控制着程序的运行,这部分内容将介绍PFC3D软件的内嵌命令。
本说明文件译自PFC3D软件2.0版使用手册中的COMMAND REFERENCE部分,并补充了一些手册中没有的命令(如设置粘性阻尼、生成圆柱、螺旋壁面等,这些命令在更高版本的手册中有说明)。
命令说明的顺序没有采用原手册中按字母排序的方式,而是根据创建PFC3D模型解决实际物理问题的一般过程,对相关命令加以说明。
PFC3D手册中COMMON COMMAND REFERENCE只对每个命令的格式和基本功能做了简单介绍,本说明文件对每个命令做了更详细的解释,为保持文件的可读性,对命令的详细解释都以附录形式给出。
本文件介绍了PFC3D的基本功能,对初学者有较大帮助,但要进行高级应用,还需清楚了解DEM 和PFC3D相关功能的基本原理以及软件的结构等。
由于只关注使用PFC3D解决颗粒流的问题,涉及颗粒流的命令介绍的比较详细,而用于岩土工程等其他领域的命令,由于关注很少且专业知识缺乏,只是不求甚解。
0.关于命令格式的说明:PFC3D中每个命令基本包含3部分:命令名、必需关键词和可选关键词。
本说明文件中,命令名和必需关键词写在第一行,尖括号<Keyword…>表示该命令具有可选关键词,罗列于命令名的下一行次级列;带参数的关键词,参数紧随关键词之后用加粗斜体表示。
名字较长的“命令”和“关键词”,PFC3D允许不写出全部字母,只需简写前面的一些字母,最短可简写名(即PFC3D能识别的最短简写“命令”和“关键词”名)用加粗字体表示。
例如命令:BALL rad r<keyword…>…hert z …id idx xy yz z说明:命令名为BALL的命令,具有必需关键词rad(参数r)和hert z、id、x、y、z等可选关键词。
其中hert z不带参数,最短可简写为hert;id、x、y、z的参数分别为id、x、y、z。
另外,PFC3D默认对内嵌命令以及FISH函数中的命令名、关键词、参数等的字母大小写不敏感,也可设置为大小写敏感(使用SET case_sensitivity on命令),建议使用对字母大小写不敏感模式,可减少错误的产生。
1.模型属性命令(MODEL-PROPERTY COMMANDS)模型属性命令支持数值模型的创建与修改,主要包括表1所示的命令,这些命令可分为模型创建(或删除)和模型修改两大类表1 模型属性命令BALL生成一个新颗粒;CLUMP生成一个新块体,或修改已有块体的属性;DELETE 删除球、壁面、块体或历史(HISTORIES);GENERATE在特定空间内生成一组颗粒,其大小按指定方式分布;JSET以给某个接触分配一个“接点”ID号的方式生成一组“接点”;WALL生成一个新壁面或修改已有壁面的属性(包括修改物性和外加速度);FIX为颗粒设置固定速度标记FREE清除颗粒的固定速度标记MODEL在指定“接触”上使用用户自定义接触模型;PROPERTY修改已有颗粒(ball)、接点(joint)、粘结(bond)和接触(contact)的属性。
球的属性包括物性、外加力和速度等;使用区域元素(range element)JSET,用户可以修改特定接点附件的颗粒属性;对于“粘结”,接触粘结和平行粘结都可以被创建并修改其属性;对于“接触”,PROPERTY用于修改用户自定接触模型的修改。
同义命令:CHANGE、INITIALIZE。
1.1模型创建命令:WALL keyword…WALL命令有两个功能,生成一个新的壁面,或按指定的ID号修改已有壁面的属性参数。
W ALL不能使用RANGE逻辑,即不能给一个壁面的不同部分赋不同的属性参数。
壁面只与球有相互作用,壁面之间没有相互作用,因此壁面可以相互重叠。
壁面有两侧,有效侧(active side)与非有效侧(inactive side),只有与有效侧接触的球,才与壁面有相互作用。
关于有效侧的定义,见附录1。
每个壁面都可以设置平移速度与转动速度。
使用Theory and Background中的1.28公式,可更新构成壁面的每个顶点的位置,从而得到壁面的运动情况。
应当注意的是,转动速度的设定还与壁面转动中心有关,默认情况下,转动中心在坐标原点(0.0, 0.0, 0.0)。
两类壁面可以定义:(1)无限大壁面:由关键词origin和normal定义的一个无限大平面;(2)有限壁面:圆柱形或由一组凸面多边形组成,使用关键词face定义。
A.无限大壁面(infinite wall):无限壁面由关键词normal和origin定义,前者定义壁面的单位法向向量,所指向的一侧是壁面的有效侧;后者定义壁面上的任意一点。
no rmal nx, ny, nz无限壁面单位法向向量的分量;or igin x0, y0, z0无限壁面上任意一点的坐标;B.圆柱壁面(cylinder):使用关键词type cylinder可以定义圆柱壁面,也可定义圆锥、圆台壁面等回旋壁面。
type cylinder keyword…end1x1, y1, z1回旋面的第一个端点;end2x2, y2, z2回旋面的第二个端点;rad ius rl, rurl: 端点end1处的回旋半径;ru: 端点end2处的回旋半径;type cylinder的几点说明:1)end1, end2至多只能缺省一个,缺省时对应的参数都为0;2)rl和end1对应,ru和end2对应;3)rad ius值决定了回旋壁面的类型:i.rl = ru,对应圆柱壁面;ii.rl = 0.0,对应圆锥壁面;iii.rl ≠ru,对应圆台壁面;例如:Wall type cylinder end1 0 0 0, end2 0 0 1, radius 0.5,0.5, id=1, kn=1e6, ks=1e6, fric=0.2 ;生产半径为0.5的圆柱面;Wall type cylinder end1 0 0 0, end2 0 0 1, radius 0.0,0.5, id=1, kn=1e6, ks=1e6, fric=0.2 ;生产地面半径为0.5的圆锥面;Wall type cylinder end1 0 0 0, end2 0 0 1, radius 0.2,0.5, id=1, kn=1e6, ks=1e6, fric=0.2 ;生产上底面半径0.2,下底面半径为0.5的圆台面;C.螺旋壁面(spiral):使用关键词type spiral可以生产螺旋壁面。
type spiral keyword…end1x1, y1, z1螺旋面的第一个端点;end2x2, y2, z2螺旋面的第二个端点;rad in rinrin: 螺旋面的内径;rad out routrout: 螺旋面的外径;pi tch ptpt: 螺距。
说明:螺纹的个数由end1,end2之间的距离除以pitch得到的整数决定。
如ed1-end2=10,pitch=3,则螺纹数等于3个。
例如:Wall type spiral end1 0 0 0, end2 10 0 0, radius 0.5,1.0, pitch=1, id=1, kn=1e6, ks=1e6, fric=0.2 ;生产10个螺纹的螺旋面;D.凸面多边形壁面(convex polygons):使用关键词face可以构造由若干有限平面(face)组成的有限壁面(wall),每个平面(face)必须是由一组按顺序连接的顶点(vertices)组成的多边形(polygon);有限壁面的有效侧按右手法则确定,详见附录1。
fa ce x1, y1, z1 x2, y2, z2 …xn, yn, znx1, y1, z1 x2, y2, z2 …xn, yn, zn为平面多边形的顶点坐标,它们的位置顺序代表着顶点的连接顺序,决定了有效侧的位置。
使用具有相同ID号的W ALL命令,可以在已有壁面上增加若干多边形平面,如下列命令定义了一系列有限壁面:wall id=1 face (1,1,1) (1,0,1) (6,0,1) (6,1,1)wall id=2 face (6,0,1) (6,0,6) (6,1,6) (6,1,1)wall id=3 face (1,0,6) (1,1,6) (6,1,6) (6,0,6)wall id=4 face (1,1,1) (1,1,6) (1,0,6) (1,0,1)wall id=5 face (2,1,2) (5,1,2) (5,0,2) (2,0,2)wall id=5 face (5,0,2) (5,1,2) (5,1,5) (5,0,5)wall id=5 face (2,0,5) (5,0,5) (5,1,5) (2,1,5)wall id=5 face (2,1,2) (2,0,2) (2,0,5) (2,1,5)wall id=9 normal 0, 1,0 origin 3.5,0.0,3.5wall id=10 normal 0,-1,0 origin 3.5,1.0,3.5通过使用多个具有相同ID号(id=5)的W ALL命令,定义了一个由4个平面构成的凸面多边形壁面,如下图所示。
图1 face定义有限平面警告:PFC3D软件现阶段只能生成有效的凸壁面,即有效侧夹角大于180°的两个连接面(如图1中的id=5壁面);对于凹形几何结构,不能定义成一个壁面,必须通过连接不同的壁面得到。
E.WALL命令的其他关键词:以下关键词用于设置壁面的属性,如刚度系数、摩擦系数、平移速度、旋转速度等。
关键词的可以在命令中的任意位置出现。
id id指定壁面的ID号,必须是正整数。
如果不指定,则将选择比当前最大壁面id号大1的整数。
如果指定的id号已经存在,则对应壁面的属性将被修改,如增加1个平面,或修改刚度系数、摩擦系数等。
kn kn设定或修改壁面法向刚度系数(线性接触模型);ks ks设定或修改壁面切向刚度系数(线性接触模型);f riction f设定或修改壁面摩擦系数;x x设定转动中心(x坐标);y y设定转动中心(y坐标);z z设定转动中心(z坐标);xs pin xs设定绕转动中心的转动速度(x分量)[单位:弧度/秒];ys pin ys设定绕转动中心的转动速度(y分量)[单位:弧度/秒];zs pin zs设定绕转动中心的转动速度(z分量)[单位:弧度/秒];xv elocity xv设定平移速度(x分量);yv elocity yv设定平移速度(y分量);zv elocity zv设定平移速度(z分量);BALL rad r<keyword…>生成半径为r的单个颗粒,可选择的关键词有:her tz 启用Hertz接触模型,若不是用该可选关键词,则模型默认使用线性接触模型id id设置颗粒的ID号。