您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > PFC的一些整理资料
PFC2D(ParticleFollowCode2Dimension)即二维颗粒流程序,是通过离散单元方法来模拟圆形颗粒介质的运动及其相互作用。最初,这种方法是研究颗粒介质特性的一种工具,它采用数值方法将物体分为有代表性的数百个颗粒单元,期望利用这种局部的模拟结果来研究边值间题连续计算的本构模型。以下两种因素促使PFC2D方法产生变革与发展:(1)通过现场实验来得到颗粒介质本构模型相当困难:(2)随着微机功能的逐步增强,用颗粒模型模拟整个问题成为可能,一些本构特性可以在模型中自动形成。因此,PFC2D便成为用来模拟固体力学和颗粒流问题的一种有效手段。2、颗粒流方法的基本假设:颗粒流方法在模拟过程中作了如下假设:1)颗粒单元为刚性体;2)接触发生在很小的范围内,即点接触;3)接触特性为柔性接触,接触处允许有一定的“重叠”量;4)“重叠”量的大小与接触力有关,与颗粒大小相比,“重叠”量很小;5)接触处有特殊的连接强度;6)颗粒单元为圆盘形(或球形)。3、颗粒流方法的特点:PFC2D可以直接模拟圆形颗粒的运动和相互作用问题。颗料可以代表材料中的个别颗粒,例如砂粒,也可以代表粘结在一起的固体材料,例如混凝土或岩石。当粘结以渐进的方式破坏时,它能够破裂。粘结在一起的集合体可以是各向同性,也可以被分成一些离散的区域或块体。这类物理系统可以用处理角状块体的离散单元程序UDEC和3DEC来模拟。PFC2D有三个优点:第一、它有潜在的高效率。因为圆形物体间的接触探测比角状物体间的更简单。第二、对可以模拟的位移大小实质上没有限制。第三、由于它们是由粘结的粒子组成,块体可以破裂,不象UDEC和3DEC模拟的块体不能破裂。用PFC2D模拟块体化系统的缺点是,块体的边界不是平的,用户必须接受不平的边界以换取PFC2D提供的优点。PFC2D能模拟任意大小圆形粒子集合体的动态力学行为。粒子生成器根据粒子的指定分布规律自动概率地生成。粒子半径按均匀分布或按高斯分布规律分布。初始孔隙度一般比较高,但通过控制粒子半径的扩大可以获得密度压实。在任何阶段任何因素都可以改变半径。所以不需反复试验就可以获得指定孔隙度的压实状态。属性与各个粒子或接触有关,而不是与“类型号”有关。因此,可以指定属性和半径的连续变化梯度。“节理生成器”用来修改沿指定轨迹线的接触特性。假定这些线叠加在颗粒集合体上。用这种方法,模型可以被成组的弱面,如岩石节理切割。粒子颜色也是一种属性,用户可以指定各种标记方案。PFC2D模型中为了保证数据长期不漂移,用双精度数据存储坐标和半径。接触的相对位移直接根据坐标而不是位移增量计算。接触性质由下列单元组成:1)线性弹簧或简化的Hertz-Mindlin准则;2)库仑滑块;3)粘结类型:粘结接触可承受拉力,粘结存在有限的抗拉和抗剪强度。可设定两种类型的粘结,接触粘结和平行粘结。这两种类型粘结对应两种可能的物理接触:①接触粘结再现了作用在接触点一个很小区域上的附着作用;②平行粘结再现了粒子接触后浇注其它材料的作用(如水泥灌浆)。平行粘结中附加材料的有效刚度具有接触点的刚度。块体逻辑支持附属粒子组或块体的创建,促进了程序的推广普及。块体内粒子可以任意程度的重叠,作为刚性体具有可变形边界的每一个块体,可作为一般形状的超级粒子。通过指定墙的速度、混合的粒子速度、施加外力和重力来给系统加载。“扩展的FISH库”提供了在集合体内设置指定应力场或施加应力边界条件的函数。时步计算是自动的,包括因为Hertz接触模型刚度变化的影响。模拟过程中,根据每个粒子周围接触数目和瞬间刚度值,时步也在变化。基于估计的粒子数,单元映射策略采用最佳的单元数目,自动调整单元的外部尺寸来适应粒子缺失和指定的新对象。单元映射方案支持接触探测算法以保证求解时间随粒子数目线性增加,而不是二次方增加。类似于FLAC,PFC提供了局部无粘性阻尼。这种阻尼形式有以下优点:1)对于匀速运动,体力接近于零,只有加速运动时才有阻尼;2)阻尼系数是无因次的;3)因阻尼系数不随频率变化,集合体中具有不同自然周期的区域被同等阻尼,采用同样的阻尼系数。PFC2D可以在半静态模式下运行以保证迅速收敛到静态解,或者在完全动态模式下运行。PFC2D包含功能强大的内嵌式程序语言FISH,允许用户定义新的变量和函数使数值模型适合用户的特殊需求。例如,用户可以定义特殊材料的模型和性质、加载方式、实验条件的伺服控制、模拟的顺序以及绘图和打印用户定义的变量等。2.FISH语言简介FISH是一种内置于Itasca软件内的编程语言,使用FISH用户可以定义新的变量和函数,从而使得这些函数被用来扩展Itasca软件的用法或者增加用户自定义的特性。例如,用户可以绘制(PLOT)或打印(PRINT)新的变量,也能够改进特殊的颗粒体模型(网格)生成器,可以对数值试验进行伺服控制,可以设定一些性质的特殊分布以及自动化参数研究。Itasca已经写了一些简单但非常有用的FISH函数作为库文件包含在各个具体的软件中,这些FISH函数一方面方便了一些没有编程经验的用户写一些简单的FISH函数,另一方面也能使用户在这些提供的简单函数的基础上作进一步的改进。不过,FISH语言象其它编程语言一样,也可以编制出非常复杂的程序利用FISH语言进行编程,应该首先编一些简单的函数,然后仔细检查函数的功能,测试是否有错误。如果没有发现错误,再逐渐增加其功能,增加一项功能检查一下,直至发展到最后比较复杂的程序。这是因为虽然FISH是一种编译型语言,但它没有自己独立的编译器,不象VC++或VB能够实时全面地检查错误,FISH检查错误的能力很差,因此在使用他们到真实的应用之前,一定要用一些简单的数据(假如可能的话)来检查所有定义的函数。FISH函数内置于标准的Itasca软件的数据文件中,函数的格式必须以DEFINE开始,以END结束。函数可以嵌套调用,但定义函数的次序没有关系,只要在使用之前全部定义就行。由于FISH函数的编译格式储存在Itasca软件的内存中,因此可以用SAVE命令保存函数以及相关变量的当前值。FISH也可以用来改进用户写的本构模型,如例1:DEFabcabc=22*3+5ENDPrintabc对上例子稍作改进(例2):newdefabchh=22abc=hh*3+5end1).稍有编程常识的人可以看出,执行上面的例子(PRINTabc),其结果与例1相同:abc=71.在这个函数中,我们首先把22赋值给变量hh,然后把这个变量带入abc的表达式中,因此二者的结果相同。2).FISH的执行过程如下:当在程序命令中使用一个FISH符号名时(例如执行PRINT符号名),如果符号名也是一个函数名,那么执行这个函数(例如abc);如果符号名不是函数名,那么使用符号目前的值(例如hh)。3).在输入完例2的各行后,如果我们执行命令:PRINThh,此时hh=0,因为在这个时候没有执行FISH函数,因此hh的初始值为0;我们接着执行PRINTabc,结果显示abc=71;再次执行PRINThh,此时结果为hh=22,这是因为我们首先运行了abc函数,在这个过程中hh已被赋值。4).下面的试验将进一步解释函数与变量之间的差别。注意:Itasca软件的SET命令可以用来设置任何用户定义的FISH符号的值,与在FISH中使用的符号无关。下面的例3建立在例2的基础之上,我们不使用NEW命令来清除内存中的值,因为我们想继续使用那些值:setabc=0hh=0printhhprintabcprinthh5).在这个例子中,我们首先把abc和hh都赋值为0,由于hh是一个变量,第一个Print命令显示当前hh的值,hh=0;第二个Print命令由于abc是一个函数名,因此执行abc函数,先前定义的abc=0不起作用,重新计算了hh和abc的值,因此第三个Print命令显示的值是它在abc函数内指定的值,即hh=22,例4是这个试验完整的命令。象其它高级编程语言一样,FISH有执行循环命令的功能,标准的格式如下:LOOPvar(expr1,expr2)END_LOOP其中LOOP和END_LOOP是FISH语句,符号var代表循环变量,expr1和pxpr2代表表达式或者单个变量,下面的例子用循环命令计算从1到10的和以及乘积,见下例:newdefabcsum=0prod=1loopn(1,10)sum=sum+nprod=prod*nend_loopendabcprintsum,prod在这个例子中,首先给两个变量赋于初始值,sum用来保存和的结果,prod用来保存积的结果,然后执行循环,最后分别打印出这两个变量的最后结果。循环变量n(1,10)表示从1开始,连续计算到10结束。关于LOOP的注意事项:1).FISH接受END_LOOP和ENDLOOP的写法,但不接受ENDLOOP这样中间有空格的写法,其它类似的命令有着同样的规则,如END_IF,END_COMMAND等命令;2).在上面的例子中,如果执行Printn或Printfish命令,你会看到n=11而不是10,注意:这不是FISH的错误,这是一个基本的计算机指令存储规则,当循环结束后,计数器的值保存的是n+1而不是n,所有的高级编程语言有着相同的规则。1.DEFINEfunctionEND2.CASEOFexprCasenendcase3.IFexpr1testexpr2THENELSEENDIF4.LOOPvar(expr1,expr2)ENDLOOP5.LOOPWHILEexpr1testexpr2ENDLOOP6.COMMANDENDCOMMAND7.HISTORYvarPRINTvarSETvarvaluePLOTadd.shfname另外,在FISH中还有许多其它的预定义对象,其中一类是尺度变量(scalarvariables),它们是单个的数字,下面是总的尺度变量:clock----时钟时间,单位是秒的100倍.unbal----最大不平衡力pi----圆周率step----目前的时步数目urand----0.0-1.0之间均匀分布的随机变量这仅是其中的一小部分,完全的列表以后再述另一类非常有用的内置对象是固有函数(intrinsicfunctions),这些函数能在FISH内进行一些比较高级的数学运算,完整的列表见FISH手册,下面给出其中的一部分:abs(a)----a的绝对值cos(a)----a的余玄(a为弧度)log(a)----a的底数为10的对数max(a,b)----返回a,b中的最大值sqrt(a)----a的平方根3.PFC2D计算模型的生成方法有两个命令可用于生成颗粒流模型:BALL和GENER-ATE,其中,BALL命令是生成单个的颗粒,该命令生成的颗粒可与已存在的颗粒重叠,而GENERATE可生成一系列指定数目的颗粒流,该命令生成的颗粒是不允许重叠的。PFC2D里主要有两种类型的颗粒流:规则排列的和无规则排列的。一系列规则排列的颗粒流可以用来模拟模拟结构部分,如梁,而不规则排列的颗粒流可用来模拟实体或内部结构无规则的颗粒材料,如岩石内部所包含的胶结颗粒。尽管颗粒的排列是随机的,但在颗粒模型生成后,整个模型的结构特性还是可能会受影响的,比如弱的结构面或各向异性。对于无规律排列的颗粒流模型,一般不可能去描述它的初始接触力的量级大小,这必须在后期要经过一个压缩的过程才可能给予较好的评价。3.1规律排列颗粒流:生成规则排列的颗粒流,主要采用FISH语言配合BALL命令,循环生成一系列的颗粒,如下例:Newdefhexxc=x0yc=y0rc=radiusidc=id_startr2=2.0*radiusyinc=radius*sqrt(3.0)looprow(1,n_row)loopcol(1,n_col)commandballid=idcx=xcy=ycrad=rcend_commandidc=idc+1xc=xc+r2end_loopyc=yc+yincxc=x0+rad
本文标题:PFC的一些整理资料
链接地址:https://www.777doc.com/doc-4672306 .html