PFC3D中文讲解例题.docx

上传人:b****7 文档编号:10062698 上传时间:2023-02-08 格式:DOCX 页数:18 大小:311.17KB
下载 相关 举报
PFC3D中文讲解例题.docx_第1页
第1页 / 共18页
PFC3D中文讲解例题.docx_第2页
第2页 / 共18页
PFC3D中文讲解例题.docx_第3页
第3页 / 共18页
PFC3D中文讲解例题.docx_第4页
第4页 / 共18页
PFC3D中文讲解例题.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

PFC3D中文讲解例题.docx

《PFC3D中文讲解例题.docx》由会员分享,可在线阅读,更多相关《PFC3D中文讲解例题.docx(18页珍藏版)》请在冰豆网上搜索。

PFC3D中文讲解例题.docx

PFC3D中文讲解例题

通过例子学习几种常见命令

例二:

PFC3D目录下的Guide\Start\footing.dat,程序如下(注意:

本程序与原程序不同,特加了plotsetrotation(24.0,352.0,340.0)这句以使得模型转过一定角度,让用户看的更清楚,另外还将原程序一分为二,主要是为了更好地学习每个命令的作用),以下是程序代码。

;fname:

footing.DAT(tutorialexampleforPFC3D)

new;clearprogramstatetobeginnewproblem

setrandom;resetrandom-numbergenerator

title'TutorialExample'

wallid=1face(0,0,0)(10,0,0)(10,0-5)(0,0,-5)

wallid=2face(0,0,0)(0,0,-5)(0,2,-5)(0,2,0)

wallid=3face(10,0,-5)(10,0,0)(10,2,0)(10,2,-5)

wallid=4face(10,2,-5)(10,2,0)(0,2,0)(0,2,-5)

wallid=5face(0,0,-5)(10,0,-5)(10,2,-5)(0,2,-5)

wallid=6face(0,0,0)(0,2,0)(10,2,0)(10,0,0)

genid=1,750rad0.15,0.20x=0,10y=0,2z=-5,0

;

plotcreateFooting

plotsettitletext'Basiccollectionofparticlesinabox'

plotsetrotation(24.0,352.0,340.0)

plotaddballyellow

plotaddwallwhite

plotaddaxesbrown

plotshow

pause

;

wallid=1kn=1e8ks=1e8

wallid=2kn=1e8ks=1e8

wallid=3kn=1e8ks=1e8

wallid=4kn=1e8ks=1e8

wallid=5kn=1e8ks=1e8

wallid=6kn=1e8ks=1e8

;

propdensity2000kn1e8ks1e8

iniradmul1.47

;

sethist_rep=5

histballzvel310

histdiagnosticmuf

setdtdscale

cycle3000

以下是程序中逐条命令的解释:

1、我们首先定义了模型的边界,使用WALL命令,如下:

wallid=1face(0,0,0)(10,0,0)(10,0-5)(0,0,-5)

wallid=2face(0,0,0)(0,0,-5)(0,2,-5)(0,2,0)

wallid=3face(10,0,-5)(10,0,0)(10,2,0)(10,2,-5)

wallid=4face(10,2,-5)(10,2,0)(0,2,0)(0,2,-5)

wallid=5face(0,0,-5)(10,0,-5)(10,2,-5)(0,2,-5)

wallid=6face(0,0,0)(0,2,0)(10,2,0)(10,0,0)

这些命令创造了一个由六个墙面围成的箱子,每个墙面都赋予了一个独一无二的ID号。

每个墙面四边形通过给出四边形的四个顶点坐标来定义,即四个顶点连成四条线,然后再围成一个四边形墙面。

注意:

顶点的顺序决定了墙面是否被激活,激活的墙面可以自动识别与小球的接触,不激活的话就会被小球穿透,

2、然后在箱子里填充小球,用Generate命令,也可简写,如下:

genid=1,750rad0.15,0.20x=0,10y=0,2z=-5,0

这个命令规定了小球填充的空间范围,小球的大小以及填充的总个数。

Id=1,750的含义是:

ID号从1到750其实就生成了750个小球,并给每个小球指定了各自的ID号。

Rad0.15,0.20的含义是:

小球半径从0.15m到0.20m随机选择

x=0,10y=0,2z=-5,0的含义是:

小球填充的空间是0

如果填充的空间太小或者小球的半径设置的太大,以至于这个空间容不下这么多的小球,那系统会自动减少生成的球的个数,并且系统会提示实际生成的球的个数。

3、模型的显示用命令plot,程序如下:

plotcreateFooting

plotsettitletext'Basiccollectionofparticlesinabox'

plotsetrotation(24.0,352.0,340.0)

plotaddballyellow

plotaddwallwhite

plotaddaxesbrown

plotshow

从上面命令可以看出plot的用法规律,即与plot显示相关的命令的前面都用plot引出,然后后面再加相关的命令,如createFooting的意思就是创建一个名字为Footing的可视化窗口(这个在菜单栏点击“window”,下拉菜单可发现多了一项view1\Footing,用户可自己看下);settitletext是设定标题,setrotation是设定模型的角度,以方便观察;addballyellow是设定球的颜色为黄色;addwallwhite是设定墙面(也就是边界面)为白色;addaxesbrown是设定坐标轴为棕色;show是显示模型的命令。

4、定义墙面的法向刚度(normalstiffness)和切向刚度(shearstiffness)

wallid=1kn=1e8ks=1e8

wallid=2kn=1e8ks=1e8

wallid=3kn=1e8ks=1e8

wallid=4kn=1e8ks=1e8

wallid=5kn=1e8ks=1e8

wallid=6kn=1e8ks=1e8

其中kn表示法向刚度,ks表示切向刚度,单位为N/m

5、定义球的密度,法向刚度和切向刚度

propdensity2000kn1e8ks1e8

使用命令property,可简写为prop,定义密度density为2000kg/m3,法向刚度和切向刚度均为108N/m

6、改变小球半径

iniradmul1.47

ini应该是initial的简写,用于初始化小球半径(有待考证)

rad表示半径

mul是multiply的简写,是倍数的意思。

1.47是倍数因子,表示现在半径是原来半径的1.47倍。

7、设定监测变量和采样间隔时间

sethist_rep=5

histballzvel310

histdiagnosticmuf

hist是history历史记录是简写,sethist_rep=5表示每隔5个运算步记录一次变量的值(默认的是10个运算步记录一次);本程序设定了两个监测对象,一个是histballzvel310,表示的是中心坐标最接近x=3,y=1,z=0的球的z方向的速度被监测和记录(在这个例子中,282号球最接近这个坐标,因此作为监测球);另一个是histdiagnosticmuf,是用来监测系统的不平衡力,主要用于静力学分析,当这个值趋于很小时,表示系统达到稳定状态。

8、设定求解选项

setdtdscale

因为这是一个静态分析,因此我们开启density-scaling选项(简写为dscale)来优化求解效率,dt应该是这个选项中的某个模式(有待考证)。

9、设定求解步数

cycle3000

当写入这句程序后,计算就开始了,计算的步数,时间步,总时间,不平衡力平均值和最大不平衡力这些信息均显示在屏幕上,并且每隔5个计算步更新一次(这是sethist_rep=5的作用),图像动画每隔20个计算步更新一次(默认),这个更新时间可用命令setpinterval来改变。

另外,阻尼已经在运动方程中被默认设定,用于吸收振动能量,更快地达到平衡状态。

10、查看结果

求解完毕后,用户可输入命令plothis1来查看历史记录中第一个变量的数值曲线。

同理可输入命令plothis2来查看历史记录中第二个变量的数值曲线。

由曲线可知系统在cycle=1000时已趋于稳定,故可以将之前的3000步改为1000步,以减少计算时间(个人愚见,仅供参考)。

先对plot补充点说明:

1、plotcreate***命令可用于创建多个图像显示窗口,但每次只能看一种结果,可以通过菜单栏里的window选项卡来切换窗口,查看想看的结果

2、如只想显示小球,则使用命令plotball,如只想显示墙面,则使用命令plotwall,如二者都想显示则plotballwall,如运行完毕后想显示别的结果,如接触力则plotcforce(contactforce的简写)。

总而言之,plot后面加你想显示的东东即可,用户需灵活使用。

此外,程序中的注释用英文的分号;,后面加注释的内容即可。

第二天的讲解中小球都是自由状态,无外力的作用,因此有必要讨论施加外力的情况。

(1)对小球施加重力作用

;fname:

footing.DAT(tutorialexampleforPFC3D)

new;clearprogramstatetobeginnewproblem

setrandom;resetrandom-numbergenerator

title'TutorialExample'

wallid=1face(0,0,0)(10,0,0)(10,0-5)(0,0,-5)

wallid=2face(0,0,0)(0,0,-5)(0,2,-5)(0,2,0)

wallid=3face(10,0,-5)(10,0,0)(10,2,0)(10,2,-5)

wallid=4face(10,2,-5)(10,2,0)(0,2,0)(0,2,-5)

wallid=5face(0,0,-5)(10,0,-5)(10,2,-5)(0,2,-5)

wallid=6face(0,0,0)(0,2,0)(10,2,0)(10,0,0)

genid=1,750rad0.15,0.20x=0,10y=0,2z=-5,0

;

plotcreateContact_Force

plotsettitletext'Modelatequilibrium'

plotaddballyellow

plotaddwallwhite

plotaddcforceblack

plotaddaxesbrown

plotshow

;

wallid=1kn=1e8ks=1e8

wallid=2kn=1e8ks=1e8

wallid=3kn=1e8ks=1e8

wallid=4kn=1e8ks=1e8

wallid=5kn=1e8ks=1e8

wallid=6kn=1e8ks=1e8

;

propdensity2000kn1e8ks1e8

iniradmul1.47

;

sethist_rep=5

histballzvel310

histdiagnosticmuf

setdtdscale

;

setgrav00-9.81

propfric1.0

;

cyc1000

此程序与第二天的程序几乎相同,唯一的不同是多加了两句程序:

setgrav00-9.81

propfric1.0

第一句是设定重力加速度为9.81m/s2,方向为Z轴负方向,grav是重力gravity的简写;第二句是设定球与球之间的摩擦系数,fric是friction的简写,在该程序中设定摩擦系数为1.0。

运行结果如下图所示:

(2)将上顶面换做一小块下降的板,压缩箱子里的小球

程序如下:

;fname:

footing.DAT(tutorialexampleforPFC3D)

new;clearprogramstatetobeginnewproblem

setrandom;resetrandom-numbergenerator

title'TutorialExample'

wallid=1face(0,0,0)(10,0,0)(10,0-5)(0,0,-5)

wallid=2face(0,0,0)(0,0,-5)(0,2,-5)(0,2,0)

wallid=3face(10,0,-5)(10,0,0)(10,2,0)(10,2,-5)

wallid=4face(10,2,-5)(10,2,0)(0,2,0)(0,2,-5)

wallid=5face(0,0,-5)(10,0,-5)(10,2,-5)(0,2,-5)

wallid=6face(0,0,0)(0,2,0)(10,2,0)(10,0,0)

genid=1,750rad0.15,0.20x=0,10y=0,2z=-5,0

;

plotcreateContact_Force

plotsettitletext'Modelatequilibrium'

plotaddballyellow

plotaddwallblue

plotshow

;

wallid=1kn=1e8ks=1e8

wallid=2kn=1e8ks=1e8

wallid=3kn=1e8ks=1e8

wallid=4kn=1e8ks=1e8

wallid=5kn=1e8ks=1e8

wallid=6kn=1e8ks=1e8

;

propdensity2000kn1e8ks1e8

iniradmul1.47

;

sethist_rep=5

histballzvel310

histdiagnosticmuf

setdtdscale

;

setgrav00-9.81

propfric1.0

;

deletewall6

wallid10face(0,0,0)(0,2,0)(2,2,0)(2,0,0)

wallid10ks1e8kn1e8fric1.0

wallid10zvel=-0.5e-3

propertyn_bond=5e5s_bond=5e5

histwallzforceid10

cyc6000

运行结果如图所示

与只施加重力的情况相比,这个程序多加了如下几句代码:

deletewall6

wallid10face(0,0,0)(0,2,0)(2,2,0)(2,0,0)

wallid10ks1e8kn1e8fric1.0

wallid10zvel=-0.5e-3

propertyn_bond=5e5s_bond=5e5

histwallzforceid10

其中,deletewall6是删除编号为6的面,即箱子的顶面。

wallid10face(0,0,0)(0,2,0)(2,2,0)(2,0,0)

wallid10ks1e8kn1e8fric1.0

wallid10zvel=-0.5e-3

是建立一个ID为10的墙面,设定面的法向刚度、切向刚度、摩擦系数和Z方向的速度,这个速度的单位是m/step,因为开启了densityscaling(程序setdtdscale的作用),如果是完全的动力学分析的话,单位将会是m/s(这个地方可解释为:

静力学只考虑系统达到平衡稳态的情况,故单位与时间无关;动力学关注的是每一时刻的状态,故单位与时间有关)

propertyn_bond=5e5s_bond=5e5是为所有的接触面定义法向和切向强度,以此来模拟初始的接触力(应该是类似于预紧力的作用,值得商榷),单位为N

histwallzforceid10用于监测下降的板的Z方向的力的变化情况,计算完毕后如想查看,只需输入plothist3即可。

结果如图所示

这个力的曲线图与英文帮助手册上的图明显不同,但不知道是什么原因出的错,有待思考。

下面附上英文帮助手册上的图。

(1)补充一句程序说明

在每个程序的开头,经常有句setrandom,这句话的意思是重置随机数,因为generate生成小球的时候,半径经常是个范围,需要随机生成,如果不加这句的话,随机得到的半径大小可能一直是某一组随机数,故需重置一下,这与vb编程中的随机数重置设定是一样的。

(2)plotwallid=on显示所有wall的ID

(3)定义字符串变量

命令:

macro(手册上的例子均是将某字符串赋给某个变量,因此我取名字符串变量,如果是赋予具体数值,比如a=5之类的功能,应该有别的命令可实现,待后续)

Macroxx‘x010’

Macroyy‘y010’

Macrozz‘z010’

Macrosize‘id1100rad0.50.5’

Macroball‘xxyyzzsize’

Macro‘size’‘id10011100rad0.10.1’;注意!

Genball

以上程序需注意两点:

1、macro命令的结构形式:

macro+变量名+字符串,字符串要加单引号;

2、倒数第二句是重新定义了变量size,需要注意的是size重新定义的时候需加单引号,第一次定义不需要加。

(4)一般分析流程

这个流程应该是先建立模型,设定接触和材料属性,施加载荷和约束,然后再运行程序使达到稳态,最后根据需要改变条件继续求解,从而得出结果。

(5)生成球体的两个命令

命令generate和命令ball

Generate(简写为gen)在第二天的讲解中已经说过,它可一次生成大量的球填充到某个空间内,ball命令是一次只生成一个球,这也是与generate的区别。

Ball命令的格式为:

ballrad**id**x**y**z**(**为各参数对应的值,需用户自己输入)

(6)施加边界条件

1、给墙面施加速度和角速度

Wallid1xvel1e-3

给ID号为1的墙面施加x方向速度,大小为1e-3

Wallid2yspin1e-3x=2y=2z=0

给ID号为2的墙面施加绕y轴转动的角速度,旋转中心坐标为(2,2,0)

2、给球施加恒定不变的速度或角速度

为球施加速度或角速度,可用命令initial,change,property,但这种定义只能对球的速度进行初始化,不能保证以后球一直以恒定的速度运动下去,因此需要用到fix命令。

程序如下:

Inixvel5e-3zspin1e-3rangeid40

Fixxzspinrangeid40

上面程序的意思就是先给ID为40的球赋予x方向的速度和z方向的角速度,之后用fix命令保证这两个速度恒定不变。

3、给球初始化运动参数

Initial命令可初始化小球的力,力矩,速度,角速度,格式如下:

Inixvel5e-3zspin1e-3rangeid40,50

给ID为40到50的球赋予x方向的速度和z方向的角速度

4、给球设置重力加速度

Set命令的格式为setgravity00-9.81

(7)History命令

histballzvelid40记录ID为40的球的z方向的速度

histballzvel325记录最接近坐标(3,2,5)的小球的z方向的速度

plothist1对第一个记录进行绘图

(8)程序setdtauto可用于关掉densityscaling

(9)删除小球

Rangenameholecylinderend130-2.5end232-2.5rad0.6;建立一个圆柱体范围

Deleteballrangehole;删除掉这个范围内的球

(1)常见命令用法补充

1、定义简单数值变量(前面已讲过定义字符串变量macro命令)

第一种方法:

Setabc=71

第二种方法:

defshuzhi

abc=71

end

2、定义函数

defabc

hh=22

abc=hh*3+5

end

abc;用于执行函数,所以不能少

printabc

几种常用运算函数:

Pi——∏

urand——0到1的随机数

unbal——不平衡力的最大值

abs(a)——a的绝对值

cos (a)——a的余弦值

log(a)——a的以10为底的对数

max(a,b)——a,b中的最大值

sqrt(a)——a的平方根

3、loop循环语句

defxunhuan

Sum=0

Prod=1

Loopn(1,10)

Sum=sum+n

Prod=prod*n

Endloop

end

xunhuan;用于执行函数,所以不能少

Printsum,prod

上面程序很好懂,稍有点程序基础的都能看懂,这里主要是让用户看下loop循环的使用方法。

4、if语句

defabc

ifaa>0then

abc=11

else

abc=22

endif

end

setaa=1

printabc

setaa=-1

printabc

以上程序非常简单,在此不再赘述,这里主要是让用户看下if语句的使用方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1