flac3d命令与FISH语句总结
FLAC--FISH(最新)
卷首语要学好FLAC3D,必须学好FISH,FISH身为FLAC3D的内嵌语言,也就是是一种嵌入式编程语言,其编写短小精干实时,同时兼顾大家操作习惯,不但可以嵌入命令流文件里工作,而且还可以引用FLAC3D本身的任何命令,突破了一般标准程序代码的限制,实现了读者对FLAC3D软件的完美控制。
类似于ANSYS的APDL语言,FISH主要是用来处理现有命令程序难以实现(较难或较烦)的一些问题,对于没有编程经验的用户,可以编一些简单的FISH函数,最好是修改3DSHOP中的一些比较现成的函数以便使用;当然,既然是一门编程语言,也可以编复杂程序。
写这一卷的主要目的就是使大家对FISH有个较为充分的认识和理解,因为相关资料甚少,故卷中的有些资料是作者在Simwe,Yantubbs等论坛上收集后整理所得,在此表示感谢。
本卷分为4章,第一章为关于FISH语言法则、变量、函数等得一个综述,主要是想让大家从全局认识FISH编程语言;第二章介绍了FISH语句的类别和各自特点和用法;第三章则较为细致的向大家介绍了各变量,函数的具体含义,部分配合了用法实例;第四章补充了一些比较不错的FISH应用实例。
希望大家读后会有所收获,也欢迎大家批评指正,共同提高!Sunshinessw1216@QQ 61925252007-9-20于铁道科学研究院北京·中国第一章 Fish的语言法则一、四个概念函数与变量—Fish函数由define定义,end结束定义。
如下例为定义一个名叫abc 的函数。
上述函数中hh即为“变量”。
函数和变量是FISH语言中非常基本和重要的两个对象,区别如下:当我们调用一个FISH对象XXX时,如果XXX是函数,系统就会执行该函数;而如果XXX不是函数而是变量,系统则会简简单单的调用其当前置。
大家注意继续输以下命令行,注意输出结果,便可对这两个有个较为清晰的认识。
语句—在不少实际问题中有许多具有指示说明性的、控制性的、重复性操作,程序中需要执行他们,诸如Array, Define, end, Case, endcase, If ,else, endif 等即为语句。
Fish总结
Fish是嵌入在FLAC3D中一种编程语言,它允许使用者定义新的变量和函数。
函数被用来扩展FLAC3D的功能和增加用户自定义功能。
例如,输出或者打印新的变量,实行特定的网格生成器,数值测试中应用伺服系统,定义特定的性质以及参数研究的自动化。
伺服系统(servomechanism)又称随动系统,是用来精确地跟随或复现某个过程的反馈控制系统。
伺服系统使物体的位置、方位、状态等输出被控量能够跟随输入目标(或给定值)的任意变化的自动控制系统。
FISH就是简单的嵌入在FLAC3D的数据文件中—DEFINE后面的命令行按函数处理,函数遇到END结束。
函数可以调用其它函数,其它函数也可以调用其它函数。
函数定义的顺序没有影响,只要它们在被使用之前被完全定义就行。
因为函数的编辑形式储存在FLAC3D的存储空间,SAVE命令会保存函数和相关变量的当前值。
2.2 FISH语言规则,变量及函数2.2.1命令行FISH程序包含在普通的FLAC3D数据文件中或者直接从键盘键入。
DIFINE后边的命令行按FISH函数处理;函数以遇到END为结尾。
FISH的有效命令行必须是下述格式中的一种。
1.命令用IF,LOOP等开始。
(见2.3)2.如果一行包含一个或更多用户定义FISH函数的名字,以空格号隔开。
例如fun_1 fun_2 fun_33.命令行包含指派声明(例如等号右边的数学式被运算且其值赋予给等号左边的函数名称或是变量)。
4.命令行由FLAC3D(在FIAH中调用FLAC3D命令)命令组成,通过COMMAND—ENDCOMMAND 分隔FISH指令。
命令行包含在FISH指令的一部分里面。
5.命令行以分号开始或者结束。
函数的变量,函数名称或者声明必须完整拼写,在FLAC3D命令中不能缩写。
不允许有连续的命令行;可以通过引入新变量分解复杂的表示式。
FISH在默认状态下为“对情况不敏感”—即大写与小写字母之间没有区别,所有的名字都转换为小写字母(注意可以通过(SET case sensitivity on)命令改变)。
FLAC3D常用命令总结
FLAC3D常用命令总结第一篇:FLAC3D常用命令总结1、模型建好如何检验所建模型是否有问题注意:第一步建模一定不要建太大的模型,可以建非常小的模型,确保模型的准确性,这样可以尽快开始后边的步骤,等后边计算分析步骤快速做完验证没有大问题,再将准确的模型建好换上,重新计算得到更加准确的结果。
2、如何检验应力边界、位移边界、加载速率等是否准确Plot add gpfix:看位移边界Plo add fap:看应力边界,看加载方向是否准确 Plot add vel:看速率,加载速率是否准确3、如何查看运算结果Plo con szz outline on:看z向应力云图,并显示边界网格 Plo add disp:看位移Plo con zdisp outline on magf 5:看z向位移云图,变形扩大5倍 Plo add bo :添加边界 Plo blo state:看是否屈服Plo add stensor:查看大主应力方向Plo con smin:小主应力Plo con smax:大主应力Plo con ssi(shear strain increment):查看剪切应变增量云图Plo bcont smin:查看单元小主应力4、如何做切面并查看切面结果在编辑“Edit“菜单中设置切面位置,在上述3命令后加上plane (pl)即可。
如:Plo con smin pl:查看切面小主应力5、后处理将模型导入到tecplot中做切面,加等值线等,对结果进一步处理,得到更漂亮的一些结果。
其他重要命令总结:1、如何在圆柱体四周如何施加约束条件?可以用fix...ran cylinder end1 end2 radius r1 cylinder end1end2 radius r2 not,其中r22、如何能把一个PLOT的图像数据导出来以便用其他软件绘图?答:用set log on 命令,把数据导出来,转到excel里处理一下,然后用surfer或者什么作图软件绘制就行了。
(完整版)FLAC3D常用命令
1. apply(缩写:app)可用来定义边界条件及初始条件:1)添加应力格式1:apply szz -0.3395e6 range z -0.1 0.1格式1:apply szz -0.3395e6 range group pile格式3:apply szz -0.3395e6 range z -0.1 0.1 group pile格式4:apply nstress 数值range z 2.9 3.1(或3)x 1 2 y 1 22)以一定速度施加位移边界格式1:apply yvel -1e5 range y -1.9 2.1 ;施加y方向速度-1e5/step3)添加边界条件格式:apply szz <数值> grad <梯度> range <范围>示例1:apply szz -1e9 grad 0 0 8.3e5 range z 0 120示例2:apply szz -0.6e6 range z 0.05 0.15 group pile注:<数值>是梯度方向坐标0点的数值,可通过定义坐标范围的上下值与梯度计算得到。
2. range(缩写:ran)通过range功能,可以使命令作用在一定指定范围的目标上;如果一个命令没有使用range来确定范围,则命令对整个模型有效。
1)利用坐标指定一定的范围格式1:range z 0 1格式2:range z 2.9 3.1 x 1 2 y 1 22)利用分组来指定范围格式:range group 13)以上两种的复合格式:range z -0.1 0.1 group pile4)利用id号来指定一定的范围格式:range id 0 10该命令后跟起始id和结束id,这里的id可以是实体单元、网格、结构单元、接触面和节点的编号。
例:model elastic range id 1 10 ;指定id为1到10的单元为各向同性弹性本构。
FLAC3D命令流(整理版)
1、怎样查看模型答:plotgrid可以查看网格,plotgridnum可以查看节点号。
2、请问在圆柱体四周如何施加约束条件答:可以用fix...rancylinderend1end2radiusr1cylinderend1end2radiusr2not,其中r2<r1,其实就是选择range的时候选两个圆柱的差,即得到边界。
命令流如下:fixxrangeend1100end2140rad1end1100end2140rad13、怎么能把一个PLOT的图像数据导出来以便用其他软件绘图答:用setlogon命令,把数据导出来,转到excel里处理一下,然后用surfer或者什么作图软件绘制就行了。
4、用命令建立模型后,如何显示点的坐标答:使用ploblogrogpnumon命令5、关于gauss_dev对性质进行高斯正态分布的问题答:根据手册上的说明:下面的命令设定一个平均摩擦角为40度,标准方差是±5%。
则命令如下:propfriction40gauss_dev2问题:请问gauss_dev2中的2是如何计算的如果把±5%改为±10%,则命令应如何写40×5%=26、reflect问题问:genzoneradbrick&p0(0,0,0)p1(10,0,0)p2(0,10,0)p3(0,0,10)&size3,5,5,7&rati o1,1,1,&dim142fillplotsurfgenzonereflectdip0dd90(对xy面做镜像)genzonereflectdip90dd90(对yz面做镜像)(1)dd表示y轴正向顺时针到那条射线的夹角,dip表示对称参照面与xy平面的夹角,对称参照面与xy平面的夹角在xy平面的投影是一条射线。
首先应该按照dd 的方向大体确定这个面的朝向,dd指的是从y轴正方向按顺时针(clockwise)方向转向所要确定面的法线方向在xy平面上的投影的夹角,然后再确定dip,dip指的是从xy平面转向所要确定的平面的角.(及z轴负方向转过角度)(2)命令:reflectnormalxyzoriginxyz(根据法线和过一点建的面)最常用,至于实际使用过程中有人问道:normal-100与normal100的区别,我试过两者的效果是一样的,没区别,虽然方向不同,但表达的是同一个面。
Flac3D常用命令及常规问题总结
Flac3D常用命令及常规问题总结Flac 3D 常用命令总结new 不退出flac3d,新建一个新的分析计算任务generate 简写为ge 产生网格zone 简写为zo 指示为3维网格体brick 简写为b 指示为长方形的网格体size x y z 指示长方形网格体在x、y和z轴所划分的网格数plot 显示,输入之后回车会出现plot base/0 可以输入plot的任何子命令(add添加条目(surface 网格体颜色、axes 坐标系颜色)等),若回到flac3d命令状态,则按一次回车或输入qiut 按x ,y,z 小写字母可以旋转当前视图中的X,Y ,Z 轴,相应的大写字母则方向相反。
m 放大,M缩小。
Ctrl+G可以切换彩色图和灰色图。
Model 简写为mo 定义材料模型Mohr 简写为moh 指摩尔-库伦模型Property 简写为pro 定义模型的材料参数,材料参数包括:密度density 简写为de,体积模量bulk简写为bu,切变模量shear 简写为sh,内摩擦角friction 简写为fric,内聚力cohesion 简写为c 抗拉强度tension 简写为ten等Set 用于设置模拟条件或控制条件,如重力加速度gravity,mechanical 设置静态力学分析的有关参数简写为mec,force 最大不平衡力简写为fo等。
比如set mechanical force 50Initial 简写为in 初始化网格的相关值。
Fix 保持网格节点指定参数(速度、压力、温度等)的值不变。
Range 指定范围History 简写为h 采样或记录迭代时模型中变量的值,检验采样记录时可以在plot子命令中输入history 1 、history 2等,忘记编号时可以输入print history就可以看到什么记录号对应什么变量或参数Nstep 简写为n 迭代次数,默认值等于10,ubalance 简写为unb 最大不平衡力,gp 采样网格节点的有关值,zdisplacement简写为zdis z轴方向的位移Solve 简写为so 控制相关过程的自动时间步一般等值线图(包括位移、速度、应力、压力、温度等),可以在一个新的视图中显示,首先要在plot子命令中新创建一个视图,可以输入“create 视图名”,回车,继续输入add contour/bcontour disp/szz…(contour为在当前视图中显示等值线图简写为con ,bcontour 绘制指定区的等值线图简写为bcon,disp 指定为位移量等值线图,szz 指定为应力等值线图)任意剖面上的等值线图,可以在刚创建的视图中再创建一个视图然后输入剖面参数,比如“set plane dip 90 dd 0 origin 3 4 0”(plane 简写为p 设置一个剖平面,dip 为剖面倾角,dd 为剖面的倾向,origin 简写为o 为剖面中的一点)Boundary 简写为bo 在视图中增加面的边界线框Behind 简写为be 为当前视图后面要转换视图则在plot子命令中输入“current 视图名”、show开挖把网格体的材料模型设置成空(null)模型即可,命令如下:Model null range x y zSet large 把材料设置成大变形求解时计算不收敛则用step命令,step 步数节点的ID号和重心的全局坐标可以由下面的命令得到:Print gp position单元体的ID号和重心的全局坐标可由如下的命令得到:Print zone所有命令大小写一样,都可以附带若干个关键字和有关的值,格式如下:Command 〈keyword value…〉[keyword,value…]…命令、关键字、数字可以用数个空格隔开,也可以用(),=隔开,;为注释符,;开始到行末都是注释一个简单的命令行只能至多80个字符(包括注释),如果超过80个字符则在行末输入&,每个命令最多含1024个字符。
flac命令及FISH小程序
1head1=nullp_z=zone_headloop while p_z#nullif ...new1=get_mem(2)mem(new1)=head1mem(new1+1)=p_zhead1=new1endifp_z=z_next(p_z)endloopend2这是fish中最常用的循环,即通过在内存中建立一链表,链表第一元素存储地址,第2个(或者更多)存储目标内容。
new = get mem(2),即为在内存中建立一个两个元素的链表mem(new) = headmem(new+1) = p_gp为给这两个元素赋予内容3如果有whilestepping,此fish程序每时步执行一次,如果没有,fish程序只在读取到该程序时运行。
这里牵扯到链式结构和。
我根据我的理解解析一下。
def zs_topad = top_head;ad和top_head都是指针变量,此句将top_head的值;附给ad,以后ad代替top_head,指向get_mem创建的矩阵的第一个元素。
zftot = 0.0;顶点全部的力。
loop while ad # null;gp_pnt = mem(ad+1);读取get_mem创建的矩阵第二个元素zf = gp_zfunbal(gp_pnt);取出单元不平衡力zftot = zftot + zf;不平衡力叠加ad = mem(ad);指针变量ad指向链表的下一个adendloopzs_top = zftot / 0.1414;力除以顶点处面积得顶点应力。
endballnew; p3 p4 是体对角线上的点,且一致。
def parmrad=10.0 ; radius of sphere.rad_size=5 ; radial zones.endparmgen zone pyramid p0 rad 0 0 p1 rad 0 rad p2 rad rad 0 p3 0 0 0 &p4 rad rad rad size rad_size rad_size rad_size group 1gen zone pyramid p0 0 rad 0 p1 rad rad 0 p2 0 rad rad p3 0 0 0 p4 rad rad rad & size rad_size rad_size rad_size group 2gen zone pyramid p0 0 0 rad p1 0 rad rad p2 rad 0 rad p3 0 0 0 p4 rad rad rad & size rad_size rad_size rad_size group 3def make_sphere; Loop over all GPs and remap their coordinates:p_gp=gp_headloop while p_gp#null; Get gp coordinate: P=(px,py,pz)px=gp_xpos(p_gp)py=gp_ypos(p_gp)pz=gp_zpos(p_gp)dist=sqrt(px*px+py*py+pz*pz)if dist>0 thenmaxp=max(px,max(py,pz))k=(maxp/rad)*(rad/dist)gp_xpos(p_gp)=k*pxgp_ypos(p_gp)=k*pygp_zpos(p_gp)=k*pzend_ifp_gp=gp_next(p_gp)end_loopendmake_spheregen zone ref ;z=0 planegen zone ref dip 90 ;y=0 planegen zone ref dip 90 dd 90 ;x=0 planeplot surfpl set back whpl bl grdataoflineforflac3d;; by tg0215@simwe 11/22/2006;; Function:Export gridpoint datas(disp,xdisp,ydisp,zdisp) and zone datas(sig1,sig2,sig3,sxx,syy,szz);; along a line defined by two point's coordinates.;; The exporting form is ten chart.The x-axes of the chart is the distance to the first point and;; the y-axes of the chart is gp data or zone data.;; Used for FLAC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Line Define by two points in spacedef Line_Definex1=in('Please input the x-coordinate of the first point:')y1=in('Please input the y-coordinate of the first point:')z1=in('please input the z-coordinate of the first point:')x2=in('Please input the x-coordinate of the second point:')y2=in('Please input the y-coordinate of the second point:')z2=in('Please input the z-coordinate of the second point:')numP=in('Please input the number of point on the line:')endLine_Define;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Initializationdef ini_Paraarray xx(numP)array yy(numP)array zz(numP)endini_Para;;;;;;;;;;;;;;; Calculate the coordinate of points on the linedef Line_CalculateLL=sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)loop n(1,numP)if n=1 thenxx(n)=x1yy(n)=y1zz(n)=z1elseif n=nump thenxx(n)=x2yy(n)=y2zz(n)=z2elseif x2=x1 thenxx(n)=x1elsexx(n)=x1+LL*(n-1)/((numP-1)*sqrt(1+((y2-y1)/(x2-x1))^2+((z2-z1)/(x2-x1))^2)) endifif y2=y1 thenyy(n)=y1elseyy(n)=y1+LL*(n-1)/((numP-1)*sqrt(1+((x2-x1)/(y2-y1))^2+((z2-z1)/(y2-y1))^2)) endifif z2=z1 thenzz(n)=z1elsezz(n)=z1+LL*(n-1)/((numP-1)*sqrt(1+((y2-y1)/(z2-z1))^2+((x2-x1)/(z2-z1))^2)) endifendifendifendloopendLine_Calculate;; Calculate displacement magnitudedef get_gp_dispgp_disp=gp_xdisp(p_gp)*gp_xdisp(p_gp)gp_disp=gp_disp+gp_ydisp(p_gp)*gp_ydisp(p_gp)gp_disp=gp_disp+gp_zdisp(p_gp)*gp_zdisp(p_gp)gp_disp=sqrt(gp_disp)end;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Write gp-related data to table,suck as disp,xdisp,ydisp,zdispdef write_gp_infoloop n(1,numP)p_gp=gp_near(xx(n),yy(n),zz(n))if p_gp # null thencaseof info_flagcase 1 ;dispxtable(1,n)=LL*(n-1)/float(nump-1)get_gp_dispytable(1,n)=gp_disp;aa=(xtable(1,n));bb=(ytable(1,n))case 2xtable(2,n)=LL*(n-1)/float(nump-1)ytable(2,n)=gp_xdisp(p_gp)case 3xtable(3,n)=LL*(n-1)/float(nump-1)ytable(3,n)=gp_ydisp(p_gp)case 4xtable(4,n)=LL*(n-1)/float(nump-1)ytable(4,n)=gp_zdisp(p_gp)endcaseendifcommand;print LL,n;print aa,bb;pauseendcommandendloopend;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Write zone-related data to table,such as sxx,syy,szz,sig1,sig2,sig3 def write_zone_infoloop n(1,numP)p_z=z_near(xx(n),yy(n),zz(n))if p_z # null thencaseof info_flagcase 5xtable(5,n)=LL*(n-1)/float(nump-1)ytable(5,n)=z_sig1(p_z)case 6xtable(6,n)=LL*(n-1)/float(nump-1)ytable(6,n)=z_sig2(p_z)case 7xtable(7,n)=LL*(n-1)/float(nump-1) ytable(7,n)=z_sig3(p_z)case 8xtable(8,n)=LL*(n-1)/float(nump-1) ytable(8,n)=z_sxx(p_z)case 9xtable(9,n)=LL*(n-1)/float(nump-1) ytable(9,n)=z_syy(p_z)case 10xtable(10,n)= LL*(n-1)/float(nump-1) ytable(10,n)=z_szz(p_z)endcaseendifendloopend;;;;;;;;;;;;;;;;;;;;;;;;;;;; Main function:draw curve chartdef draw_curveinfo_flag=1write_gp_infoinfo_flag=2write_gp_infoinfo_flag=3write_gp_infoinfo_flag=4write_gp_infoinfo_flag=5write_zone_infoinfo_flag=6write_zone_infoinfo_flag=7write_zone_infoinfo_flag=8write_zone_infoinfo_flag=9write_zone_infoinfo_flag=10write_zone_infocommandtable 1 name 'disp'table 2 name 'xdisp'table 3 name 'ydisp'table 4 name 'zdisp'table 5 name 'sig1'table 6 name 'sig2'table 7 name 'sig3'table 8 name 'sxx'table 9 name 'syy'table 10 name 'szz'set plot jpgpl create v-disppl set back whitepl set title text'Displacement along the line'pl add table 1 mark line xlabel 'distance along the line' ylabel 'displacement' set out v-disp.jpgpl hardcopy v-disppl create v-xdisppl set back whitepl set title text'X-Displacement along the line'pl add table 2 mark line xlabel 'distance along the line' ylabel 'x-displacement' set out v-xdisp.jpgpl hardcopy v-xdisppl create v-ydisppl set back whitepl set title text'Y-Displacement along the line'pl add table 3 mark line xlabel 'distance along the line' ylabel 'y-displacement' set out v-ydisp.jpgpl hardcopy v-ydisppl create v-zdisppl set back whitepl set title text'Z-Displacement along the line'pl add table 4 mark line xlabel 'distance along the line' ylabel 'z-displacement' set out v-zdisp.jpgpl hardcopy v-zdisppl create v-sig1pl set back whitepl set title text'Sig1 along the line'pl add table 5 mark line xlabel 'distance along the line' ylabel 'Sig1' set out v-sig1.jpgpl hardcopy v-sig1pl create v-sig2pl set back whitepl set title text'Sig2 along the line'pl add table 6 mark line xlabel 'distance along the line' ylabel 'Sig2' set out v-sig2.jpgpl hardcopy v-sig2pl create v-sig3pl set back whitepl set title text'Sig3 along the line'pl add table 7 mark line xlabel 'distance along the line' ylabel 'Sig3' set out v-sig3.jpgpl hardcopy v-sig3pl create v-sxxpl set back whitepl set title text'Sxx along the line'pl add table 8 mark line xlabel 'distance along the line' ylabel 'Sxx' set out v-sxx.jpgpl hardcopy v-sxxpl create v-syypl set back whitepl set title text'Syy along the line'pl add table 9 mark line xlabel 'distance along the line' ylabel 'Syy' set out v-syy.jpgpl hardcopy v-syypl create v-szzpl set back whitepl set title text'Szz along the line'pl add table 10 mark line xlabel 'distance along the line' ylabel 'Szz' set out v-szz.jpgpl hardcopy v-szzendcommandenddraw_curveenunew;set mech ratio 1e-6def _geoparmk=1.130 ;安全系数size1=40size2=10filecal0=string(size1)+'_'+string(size2)+'_cal'+'.sav'fosfile0=string(size1)+'_'+string(size2)+'_fos'+'.sav'bf=45 ; 改变此处坡角af=bf*pi/180 ;h1=20;x00=30.0x01=105.0x02=x00x03=x00+h1/tan(af)x04=x01x05=x03x06=105.0x07=x06;y00=0.0y01=y00y02=1.0y03=y00y04=y02y05=y02y06=y00y07=y02;z00=20.0z01=z00z02=z00z03=40.0z04=z00z05=z03z06=z03z07=z03end_geoparmgen zone brick p0 0 0 0 p1 30 0 0 p2 0 1 0 p3 0 0 20 size 12 1 8gen zone brick p0 30 0 0 p1 105 0 0 p2 30 1 0 p3 30 0 20 size size1 1 8gen zone brick p0 x00 y00 z00 p1 x01 y01 z01 p2 x02 y02 z02 p3 x03 y03 z03 &p4 x04 y04 z04 p5 x05 y05 z05 p6 x06 y06 z06 p7 x07 y07 z07 size size1 1 size2def modelMaterial; 弹性模量(Pa)flag=0E1=100e6; 泊松比poi1=0.35;; 粘结力(Pa)coh1=42e3/k;; 容重(N/m3)weight1=25e3; 膨胀角(度)dila1=0.0;; 内摩擦角(度)fri1=(atan((tan(20.0*pi/180))/k))*180/pibeta1=(sin(20.0*pi/180))/(1-2*poi1);afa1=E1*poi1poi1=0.5*(1-(sin(fri1*pi/180))/beta1)E1=afa1/poi1;抗拉强度ten1=0.01e6grav0=-9.80 ; 重力加速度(N/kg)dens1=-weight1/grav0K1=E1/(3*(1-2*poi1))G1=E1/(2*(1+poi1))endmodelMaterialmodel mohr ;采用莫尔库仑模型pro bulk K1 she G1 dens dens1 coh coh1 &friction fri1 dilation 0.fix x range x -0.1 0.1fix x range x 104.9 105.1fix yfix x y z range z -0.1 0.1set grav 0 0 grav0solvesave 1_130.savfish求出偶数和奇数def numberarray even(21),odd(21);even为偶数数组,odd为奇数数组m1=0m2=0loop n(0,41)a=n/2.0b=int(n/2)if a = b thenm2=m2+1even(m2)=nelsem1=m1+1odd(m1)=nendifendloopendnumberdef wriloop k(1,21)hh=out(even(k))endloopcommandpauseendcommandloop k(1,21)hh=out(odd(k))endloopendwrifish作图FISH作图有个方法仅供参考:因为应力都是与zone有关的,所以,可以编程求出该函数在每个zone中的值,然后用flac 重新运行出原网格,可以将你所关注的这个函数量作为flac中已经有的量(如szz)的初始条件来绘出,随便举了个例子set log onset logfile hua.loggen zone brick size 3 4 4;重新运行出的原网格mo elasprop bul=1e10 shear 6e9fix x range x -0.1 0.1fix x range x -2.9 3.1fix x y z range z -0.1 0.1fix y range y -0.1 0.1fix y range y 3.9 4.1;下面两个fish第一个读出原函数的zone值,第二个作为szz赋给zonedef fuzhiarray var(48)p_z=zone_headloop while p_z # nulln=z_id(p_z)var(n)=-10000*n;这var是已经读取的数组,这里随便给一个规律p_z=z_next(p_z)endloopendfuzhidef jialiloop m(1,48)azz=var(m)commandini szz azz range id m;赋值endcommandendloopendjialiini dens 2500set gra 0 0 -10plot contour szz outline onset log offget_plast(塑性区大小显示程序)def get_plastshearnow = 1tensionnow = 2shearpast = 4tensionpast = 8v_shear_now = 0v_tension_now = 0v_shear_past = 0v_tension_past = 0p_z = zone_headloop while p_z # nullif and(z_state(p_z,0),shearnow) = shearnow thenv_shear_now = v_shear_now + z_volume(p_z)endifif and(z_state(p_z,0),tensionnow) = tensionnow then v_tension_now = v_tension_now + z_volume(p_z)endifif and(z_state(p_z,0),shearpast) = shearpast thenv_shear_past = v_shear_past + z_volume(p_z)endifif and(z_state(p_z,0),tensionpast) = tensionpast then v_tension_past = v_tension_past + z_volume(p_z) endifp_z = z_next(p_z)endloopii = out('shear_now : ' + string(v_shear_now))ii = out('tension_now : ' + string(v_tension_now))ii = out('shear_past : ' + string(v_shear_past))ii = out('tension_past : ' + string(v_tension_past))endget_plastgroup遍列节点[1]gen zone brick size 6 8 8model mohrprop bulk = 1e8 shear = 0.3e8 fric = 35prop coh = 1e10 tens = 1e10set grav 0, 0, -9.81ini dens = 1000fix x range x -0.1 0.1fix x range x 5.9 6.1fix y range y -0.1 0.1fix y range y 7.9 8.1fix x y z range z -0.1 0.1group hua range x 2 4 y 3 5 z 3 5def loadgp_gp = gp_headload=0.0loop while p_gp#nullx=gp_xpos(p_gp)y=gp_ypos(p_gp)z=gp_zpos(p_gp)p_z=z_near(x,y,z)if z_group(p_z) = 'hua' thenload=load+gp_zfunbal(p_gp)endifp_gp = gp_next(p_gp)endlooploadg=loadendhist loadgplot his 1solveinrange遍列节点[1]gen zone brick size 6 8 8model mohrprop bulk = 1e8 shear = 0.3e8 fric = 35 prop coh = 1e10 tens = 1e10set grav 0, 0, -9.81ini dens = 1000fix x range x -0.1 0.1fix x range x 5.9 6.1fix y range y -0.1 0.1fix y range y 7.9 8.1fix x y z range z -0.1 0.1range name hua x 2 4 y 3 5 z 3 5def loadgp_gp = gp_headload=0.0loop while p_gp#nullif inrange('hua',p_gp)=1 thenload=load+gp_zfunbal(p_gp)endifp_gp = gp_next(p_gp)endlooploadg=loadendhist loadgplot his 1solvemov11; avi.dat; Create an AVI movie file (steptest.avi) using the step option. ; Snap a picture every 30 steps while solving.gen zone radcylinder size 25 1 25 25gen zone reflect normal -1 0 0gen zone reflect normal 0 0 -1gen merge 1e-5model mohrprop dens=1000 bu=1e8 sh=7e7 fric 25 coh 3.5e4 tens 1e10fix yfix x range x -24.9 -25.1fix x range x 24.9 25.1fix z range z -24.9 -25.1set grav 10ini szz -1e6 grad 0 0 1e6ini sxx -0.5e6 grad 0 0.5e6 0ini syy -0.5e6 grad 0 0.5e6 0plot create testviewplot current testviewplot add contour syy average outline onset movie avi step 1 file glj1.avimovie startsolve ratio 1e-2movie finishthn;================;导入网格数据以生成水面impgrid ww;为建立水面设置“虚拟界面”而分组为水上部分和水下部分group water_below range group 1 any group 2 anygroup water_above range group water_below notgen separate water_belowinterface 1 wrap water_below water_aboveset grav 0 -9.81 0water den 1000;==================================def CnumNum=0;p_i=i_headp_in=i_node_head(p_i)loop while p_in # nullNum=Num+1;p_in=in_next(p_in)endloopendCnum;++++++++++++++++++++++++++++++==def ini_vararray var(Num,3)i=0p_i=i_headp_in=i_node_head(p_i)loop while p_in # nulli=i+1var(i,1)=in_pos(p_in,1)var(i,2)=in_pos(p_in,2)var(i,3)=in_pos(p_in,3)p_in=in_next(p_in)endloopendini_var;删除单元组water_below和组water_above,为导入实际的材料分组做准备model null range group water_belowmodel null range group water_above;删除虚拟界面单元int 1 dele;===========================;建立实际材料分组部分;导入网格数据,重新分组impgrid wwgroup soil range group 2 any group 4 anygroup rock range group soil notattach face;生成水面def ini_ppminx=var(1,1)minz=var(1,3)maxx=var(1,1)maxz=var(1,3)loop t (2,Num)if var(t,1)<minxminx=var(t,1)endifif var(t,3)<minyminz=var(t,3)endifif var(t,1)>maxxmaxx=var(t,1)endifif var(t,3)>maxzmaxz=var(t,3)endifendlooppnt = gp_headloop while pnt # nullgpnum=gp_id(pnt)x=gp_xpos(pnt)y=gp_ypos(pnt)z=gp_zpos(pnt)dist_gp=x^2+z^2dist1=var(1,1)^2+var(1,3)^2if x<=maxx thenif x>=minx thenif z>=minz thenif z<maxz thenmak=0loop n (1,Num)disn=var(n,1)^2+var(n,3)^2if y<var(n,2) thenif disp_gp-disn<dist1 then mak=nendifendifendloopif mak>0 thenif y<var(mak,2) thengp_pp(pnt)=(var(mak,2)-y)*1.e4endifendifendifendifendifendifpnt = gp_next(pnt)end_loopendini_pp;建立真实的“界面”;gen separate rock;interface 2 sma 1.0 wrap rock soil;施加直边约束fix x y z rang y -0.1 0.1fix x z range x 0 600 z 0fix x z range x 0 z 0 700fix x z range x 0 370 z 700fix x z range x 600 z 0 220;施加斜边约束fix x z range plane normal 48 0 23 origin 600 0 220 fix x z range id 685fix x z range id 671fix x z range id 670fix x z range id 669fix x z range id 24fix x z range id 668fix x z range id 679fix x z range id 680fix x z range id 684fix x z range id 682fix x z range id 667fix x z range id 25fix x z range id 666fix x z range id 676fix x z range id 674fix x z range id 659fix x z range id 657fix x z range id 688fix x z range id 237 fix x z range id 235 fix x z range id 233 fix x z range id 3218 fix x z range id 3216 fix x z range id 3214 fix x z range id 3212 fix x z range id 3195 fix x z range id 3194 fix x z range id 3198 fix x z range id 3197 fix x z range id 3200 fix x z range id 3201 fix x z range id 3203 fix x z range id 3204 fix x z range id 3206 fix x z range id 3207 fix x z range id 3208 fix x z range id 2822 fix x z range id 2840 fix x z range id 2812 fix x z range id 2814 fix x z range id 2841 fix x z range id 80 fix x z range id 81 fix x z range id 82 fix x z range id 83 fix x z range id 84 fix x z range id 175 fix x z range id 178 fix x z range id 179 fix x z range id 2808 fix x z range id 2809 fix x z range id 2807 fix x z range id 2806 fix x z range id 2842 fix x z range id 2803 fix x z range id 2804 fix x z range id 2835 fix x z range id 2834 fix x z range id 2833 fix x z range id 2832 fix x z range id 2831fix x z range id 2827fix x z range id 2826fix x z range id 2844fix x z range id 2824fix x z range id 2823fix x z range id 2845fix x z range id 2846plot set cent 300 125.6 350 dist 2061 rotation 130 290 0 ang 22.5 mag 1.25 plo shosave th.savtxnewgen zone brick size 3 3 3 &p0 (0,0,0) p1 (3,0,0) p2 (0,3,0) p3 (0,0,1.5) &p4 (3,3,0) p5 (0,3,1.5) p6 (3,0,4.5) p7 (3,3,4.5)group Base; Create Top - 1 unit high for initial spacinggen zone brick size 3 3 3 &p0 (0,0,2.5) p1 (3,0,5.5) p2 (0,3,2.5) p3 (0,0,7) &p4 (3,3,5.5) p5 (0,3,7) p6 (3,0,7) p7 (3,3,7)group Top range group Base not;; Create interface elements on the top surface of the baseinterface 1 face range plane norm (-1,0,1) origin (1.5,1.5,3) dist 0.1ini z add -1.0 range group Topwater dens 1000set grav 0 0 -10def water_tablep_i=i_headp_ie=i_elem_head(p_i) ;界面1单元指针赋予p_ieloop while p_ie # null;返回界面单元的三个顶点的地址p_gp1=ie_vert(p_ie,1)p_gp2=ie_vert(p_ie,2)p_gp3=ie_vert(p_ie,3);以这三个界面单元顶点为水面的三个顶点,生成水面;========interface的节点和网格节点的地址是分别存放的x1=in_pos(p_gp1,1)y1=in_pos(p_gp1,2)z1=in_pos(p_gp1,3)x2=in_pos(p_gp2,1)y2=in_pos(p_gp2,2)z2=in_pos(p_gp2,3)x3=in_pos(p_gp3,1)y3=in_pos(p_gp3,2)z3=in_pos(p_gp3,3)commandwater table face x1,y1,z1 x2,y2,z2 x3,y3,z3 endcommandp_ie=ie_next(p_ie)endloopendmodel null range group Basemodel null range group Topgen zone brick size 3 3 3 &p0 (0,0,0) p1 (3,0,0) p2 (0,3,0) p3 (0,0,1.5) &p4 (3,3,0) p5 (0,3,1.5) p6 (3,0,4.5) p7 (3,3,4.5) group 1; Create Top - 1 unit high for initial spacinggen zone brick size 3 3 3 &p0 (0,0,2.5) p1 (3,0,5.5) p2 (0,3,2.5) p3 (0,0,7) &p4 (3,3,5.5) p5 (0,3,7) p6 (3,0,7) p7 (3,3,7)group 2 range group 1 not group Base not group Top not ini z add -1.0 range group 2water_tableint 1 delplo water安全度安全度问题1.计算之前 config zextra 12.根据计算结果,计算zone的点安全度f,赋给 zextra 1z_extra(p_z,1) = f3.绘图 pl con zextra 1p_z = zone_headloop while p_z # null计算安全度fz_extra(p_z,1) = fp_z = z_next(p_z)endloop测一下你的计算机的速度newdef raterate = (t1 - t0) / 6250.0enddef timet0 = clock / 100.0enddef time1t1 = clock / 100.0endgen zone brick size 5,5,5model elasprop bulk 1e8 shear 1e7fix y range y -0.1 0.1apply syy -1.0e6 range y 4.9,5.1time0step 50000time1print ratereturn查看各个时段不平衡力的具体数值查看各个时段不平衡力的具体数值采用his来记录你的计算,包括位移应力等命令his unbalhis gp(zone) zdis range (0 0 0) 或者id=?导出数据命令his write n vs m begin 时步 end 时步 file filename.his n表示你纪录的id m表示时步要导出不平衡力的具体数值his unbalstep 100000 or solvehis write 1 vs step begin 1 end 1000 file 123.his使用上述命令就可以查看各个时步下的不平衡力的具体数值得到主应力def getsigp_z=find_zone(3113)|s1=z_sig1(p_z)Ss2=z_sig2(p_z)s3=z_sig3(p_z)endgetsig地面曲面方程newgen zone brick p0 0,167.0072,0 p1 0,0,0 p2 242.6586,167.0072,0 p3 0,167.0072,32.0 size 56,81,11;;定义地面曲面方程DEF eqn537ARRAY c(45),cx(12),cy(12),v(70)c(1)=30.33465961749452c(2)=0.3768529280014758c(3)=-1.411874011262434c(4)=-0.4466983009380354c(5)=0.02498771591159658c(6)=-0.6225933592839830c(7)=-0.5572409253529970c(8)=0.2594590432443336c(9)=-0.2154254299775080c(10)=0.05611608056180144c(11)=-0.3573754488804990c(12)=0.02174566734976303c(13)=0.4051641051840550c(14)=0.1744265369646383c(15)=0.1147014441688443c(16)=-0.2088509864184064c(17)=0.1493365036211442c(18)=0.4311419368791974c(19)=0.008961362272148653c(20)=-0.07774920998867369c(21)=0.1811142002504400c(22)=-0.1519527001982752c(23)=0.07915472779033880c(24)=0.2559732910968667c(25)=0.1026065146630541c(26)=-0.2819625969135452c(27)=-0.09027129904676756c(28)=0.1130183438471391c(29)=-0.02169639756233838c(30)=0.1907291399047935c(31)=0.1297366637584324c(32)=0.08806739336824376c(33)=-0.2260336878126227c(34)=-0.2115733057775976c(35)=0.1148217058529207c(36)=-0.06508949301229160c(37)=-0.04511427839772801c(38)=0.1632228872577737c(39)=0.1931691979495782c(40)=0.08562312402296863c(41)=0.01872590692817278c(42)=-0.04198182565657024c(43)=0.04502760175694480c(44)=0.1160322072269608c(45)=-0.07952377661820480order%=44x=(x-(0.000000000000000))/(77.24063134751799) y=(y-(0.000000000000000))/(53.16004282387357) IF x<0.0 THENx=0.0END_IFIF x>3.14159265358979323846 THENx=3.14159265358979323846END_IFIF y<0.0 THENy=0.0END_IFIF y>3.14159265358979323846 THENy=3.14159265358979323846END_IFnc%=8cx(1)=1.0cy(1)=1.0LOOP j% (1,nc%)cx(j%+1)=COS(j%*x)cy(j%+1)=COS(j%*y)END_LOOPiv%=1LOOP j% (1,nc%+1)m%%=j%+1LOOP m% (1,j%)m%%=m%%-1v(iv%)=cx(m%%)*cy(j%-m%%+1)iv%=iv%+1END_LOOPEND_LOOPz=0.0LOOP j% (1,order%+1)z = z + c(j%)*v(j%)END_LOOPEND;;地面曲面方程定义完毕;;找出节点坐标后只要给出X,Y,然后调用eqn537就可以得到X,Y对应的Z;;定义第1层底面曲面方程DEF eqn566ARRAY c1(36),cx1(12),cy1(12),v1(70)c1(1)=28.62060766890477c1(2)=0.2866834946597056c1(3)=-0.8353575191107516c1(4)=-0.04915431878961194c1(5)=0.4039755560498526c1(6)=-0.3362136646742352c1(7)=-0.2665446036102640c1(8)=0.01228084747342192c1(9)=-0.2228703607987686c1(10)=-0.1056397207500379c1(11)=-0.01267143831082441c1(12)=-0.1996293677009942c1(13)=-0.06064874974162015c1(14)=-0.2080253561904090c1(15)=0.03108780356779321c1(16)=0.05965985858539676c1(17)=0.04285379002151423c1(18)=0.3260634131778066c1(19)=0.03617992023477324c1(20)=0.02800173263537663c1(21)=0.05300528967296362c1(22)=-0.07147038182113627c1(23)=0.09423171997760518c1(24)=-0.008003820958046695c1(25)=0.03654771159807278c1(26)=0.04195809554079616c1(27)=0.01776731215338432c1(28)=0.07995229437423655c1(29)=0.01184899721780239c1(30)=0.1914904626951018c1(31)=-0.03834379592630702c1(32)=-0.04935320463957614c1(33)=-0.04246583589991888c1(34)=-0.07508761240626857c1(35)=0.08511394861034457c1(36)=0.03158468483322942order%=35x=(x-(0.000000000000000))/(77.24063134751799)y=(y-(0.000000000000000))/(53.16004282387357)IF x<0.0 THENx=0.0END_IFIF x>3.14159265358979323846 THENx=3.14159265358979323846END_IFIF y<0.0 THENy=0.0END_IFIF y>3.14159265358979323846 THENy=3.14159265358979323846END_IFnc%=7cx1(1)=1.0cy1(1)=1.0LOOP j% (1,nc%)cx1(j%+1)=COS(j%*x)cy1(j%+1)=COS(j%*y)END_LOOPiv%=1LOOP j% (1,nc%+1)m%%=j%+1LOOP m% (1,j%)m%%=m%%-1v1(iv%)=cx1(m%%)*cy1(j%-m%%+1)iv%=iv%+1END_LOOPEND_LOOPz=0.0LOOP j% (1,order%+1)z = z + c1(j%)*v1(j%)END_LOOPEND;;地面曲面方程定义完毕;;找出节点坐标后只要给出X,Y,然后调用eqn536就可以得到X,Y对应的Z;;定义第2层底面曲面方程DEF eqn607ARRAY c2(45),px(12),py(12),v2(70) c2(1)=26.40374776302957c2(2)=-1.292234879166614c2(3)=-0.9987652673592940c2(4)=0.08847151489382983c2(5)=-6.524125629419486c2(6)=0.4002923561445450c2(7)=0.3031713620939287c2(8)=0.9293011989675050c2(9)=1.028374487465087c2(10)=0.7894526930446397c2(11)=-0.2710341955836033c2(12)=-1.833585849910791c2(13)=-0.6799558584481914c2(14)=1.202068992799922c2(15)=-0.6569131952237344c2(16)=1.079058946133437c2(17)=1.286040305186933c2(18)=0.3587835487607498c2(19)=-0.3055218324008147c2(20)=1.320108378629063c2(21)=1.360836777714370c2(22)=-1.086438562691549c2(23)=2.885522086015947c2(24)=-0.6574447894560952c2(25)=1.428461008364791c2(26)=0.8792263637632590c2(27)=0.3263370530986411c2(28)=-0.8544593089642435c2(29)=0.8177299018417186c2(30)=-0.8210160246224562c2(31)=0.2959394968085911c2(32)=-0.1081689772714739c2(33)=-1.546682781919654c2(34)=-0.8887755964444086c2(35)=-0.1826536331301314c2(36)=0.01080252224961026c2(37)=-0.2510335500991192c2(38)=1.172841958315430c2(39)=0.1775850816862299c2(40)=-2.437087642643127c2(42)=0.3321145625443073c2(43)=0.9669041422660922c2(44)=0.3462785144789184c2(45)=0.7677956032753429order%=44x=(x-(121.3293000000000))/(121.3293000000000)y=(y-(83.50360000000001))/(83.50360000000001)pcnt%=9px(1)=1.0py(1)=1.0px(2)=xpy(2)=yLOOP j% (3,pcnt%)ctr=-1.0+(j%-2)*(2.0/((pcnt%)-1.0))px(j%)=-1.0+2.0/(1.0+EXP(-(x-ctr)/0.12))py(j%)=-1.0+2.0/(1.0+EXP(-(y-ctr)/0.12))END_LOOPiv%=1LOOP j% (1,pcnt%)m%%=j%+1LOOP m% (1,j%)m%%=m%%-1v2(iv%)=px(m%%)*py(j%-m%%+1)iv%=iv%+1END_LOOPEND_LOOPz=0.0LOOP j% (1,order%+1)z = z + c2(j%)*v2(j%)END_LOOPEND;;地面曲面方程定义完毕;;找出节点坐标后只要给出X,Y,然后调用eqn607就可以得到X,Y对应的Z;;定义第3层底面曲面方程DEF eqn609ARRAY c3(66),px1(12),py1(12),v3(70)c3(1)=21.82428275547068c3(2)=2.221561754167763c3(3)=-1.581903359451976c3(4)=-2.316827507113655c3(5)=-2.703947398487063c3(6)=-1.246037280331843c3(8)=-2.339997159259053 c3(9)=-4.751446231799969 c3(10)=2.238112737137326 c3(11)=-2.307007727942070 c3(12)=2.704352656458496 c3(13)=6.218021412068429 c3(14)=6.082322362020687 c3(15)=-1.781025552909750 c3(16)=1.595374835381855 c3(17)=5.083409370236106 c3(18)=-12.05561353031727 c3(19)=-8.149539051933758 c3(20)=0.4629435785333617 c3(21)=3.854808615283558 c3(22)=-3.172213655564220 c3(23)=-7.493360842439101 c3(24)=18.03955724690294 c3(25)=15.92195138603906 c3(26)=5.276624705110507 c3(27)=4.834416374228492 c3(28)=-2.941631600267834 c3(29)=3.061011978625018 c3(30)=6.894707465545384 c3(31)=-19.55553399652331 c3(32)=-25.47011892985832 c3(33)=-8.508414420882716 c3(34)=-4.573107121770635 c3(35)=-2.159206741489122 c3(36)=3.630405781581091 c3(37)=-1.716300833677144 c3(38)=-1.710288020840512 c3(39)=13.39520120547237 c3(40)=26.62167851961098 c3(41)=9.133569050067894 c3(42)=2.465816025684572 c3(43)=5.760745683031747 c3(44)=3.387751985565470 c3(45)=-1.998506978790600 c3(46)=-0.1436671749659344 c3(47)=2.673753603392002 c3(48)=-3.414672834039968 c3(49)=-15.30717986499453 c3(50)=-5.830362201304671。
FLAC3D常见命令与使用技巧
FLAC3D常见命令与使用技巧1、FLAC3D常见命令:1.FLAC3D是有限元程序吗?答:不是!是有限差分法。
2.最先需要掌握的命令有哪些?答:需要掌握gen, ini, app, plo, solve等建模、初始条件、边界条件、后处理和求解的命令。
3.怎样看模型的样子?答:plo blo gro可以看到不同的group的颜色分布4.怎样看模型的边界情况?答:plo gpfix red5.怎样看模型的体力分布?答:plo fap red6.怎样看模型的云图?答:位移:plo con dis (xdis, ydis, zdis)应力:plo con sz (sy, sx,sxy, syz, sxz)7.怎样看模型的矢量图?答:plo dis (xdis, ydis, zdis)8.怎样看模型有多少单元、节点?答:pri info9.怎样输出模型的后处理图?答:File/Print type/Jpg file,然后选择File/Print,将保存格式选择为jpe文件10.怎样调用一个文件?答:File/call或者call命令10.如何施加面力?答:app nstress11.如何调整视图的大小、角度?答:综合使用x, y, z, m, Shift键,配合使用Ctrl+R,Ctrl+Z等快捷键12.如何进行边界约束?答:fix x ran(约束的是速度,在初始情况下约束等效于位移约束)13.如何知道每个单元的ID?答:用鼠标双击单元的表面,可以知道单元的ID和坐标14.如何进行切片?答:plo set plane ori (点坐标) norm (法向矢量) plo con sz plane (显示z方向应力的切片)15.如何保存计算结果?答:save +文件名.16.如何调用已保存的结果?答:rest +文件名;或者File / Restore17.如何暂停计算?答:Esc18.如何在程序中进行暂停,并可恢复计算?答:在命令中加入pause命令,用continue进行继续19.如何跳过某个计算步?答:在计算中按空格键跳过本次计算,自动进入下一步20. Fish是什么东西?答:是FLAC3D的内置语言,可以用来进行参数化模型、完成命令本身不能进行的功能21. Fish是否一定要学?答:可以不用,需要的时候查Mannual获得需要的变量就可以了22.FLAC3D允许的命令文件格式有哪些?答:无所谓,只要是文本文件,什么后缀都可以23.如何调用一些可选模块?答:config dyn (fluid, creep, cppudm)24 .如何在圆柱体四周如何施加约束条件?答:可以用fix ... ran cylinder end1 end2 radius r1 cylinder end1 end2radius r2 not,其中r225.如何能把一个PLOT的图像数据导出来以便用其他软件绘图?答:用set log on命令,把数据导出来,转到excel里处理一下,然后用surfer或者什么作图软件绘制就行了。
FLAC3D各种命令笔记
hist reset ;清空里面所有的监测点nstress=-40e3 hist ramp的意思,很简单nstress = -40e3 * ramp hist相当于乘法,为了方便控制动荷载的幅值。
plotitems——Add——strucktural elements——geometry ——cables 显示锚杆的几何形状Pl-add-vector-apply body force 显示施加的力,不过是在求解之后显示Creat 创建一新视图plotitems------add-----vetor----apply body force 显示荷载的施加位置Array var(4,3) 二维数组array var(5)一维5个元素的数组Var(m,n)=urand ;随机var—数组的名字Pnt=z_next(pnt) 查找下一个单元体表Pl plas 显示塑性区Array x_b(x,y) z_b(x,y) 创建两个x行y列的表格,可以给其赋值,以便调用。
Array就是数组的意思。
Hist id=1 gp xd 7 0 0 监测7 0 0 点处的x方向位移,ID=1材料参数dilation 剪胀角FISH语言:Degrade;∏/180Pi;∏Ngp;节点总数Nzone;单元体总数单元节点遍历:P_z = zone_headLoop while p_z # null………P_z = z_next(p_z)End loopRead(ar,n);将数组ar的前n个记录写到文件print zone state 显示塑性区域编写fish函数时,尽量采用浮点型,例如1.0而不是1Z_sig1 z_sig2 z_sig3 fish中的三个主应力,由大到小Print gp poison rang id n 输出节点n的坐标Xtable(n,s)对ID号为n的表的第s行,x列进行赋值,table表只有x,y两列Pl table 1 line/mark/both 关键词描述曲线的类型,线、标记、二者综合File_name=’add_step’+string(n)+’.sav’Gp_near(x,y,z)得到靠近坐标x,y,z的节点地址Gp_zdis(p_gp)地址为p_gp的节点的z向变形String(n)将变量n转换成字符串格式Dim 看基本网格里面的标准attach face 常用命令,建模型之后连接面sxx=syy=(λ/1-λ)szz szz= γHSel fix x y z (局部坐标系位移速度) / xrot yrot zrot(局部坐标系转动位移)Ini xdisp ydisp zdisp(全局坐标系位移) / xpos(节点全局坐标) / xrdisp(全局坐标系旋转位移) Xv(全局坐标系位移速度) / xrvel (全局坐标系旋转速度)如果边界是FIX控制,则自动平衡,不用apply 控制应力。
Flac3D常用命令流
Flac3D常用命令流FLAC3D 常用命令流;模型镜像gen zone radcylinder size 25 1 25 25gen zone reflect normal -1 0 0 origin x y z(面上一点);沿X轴镜像,通过对称平面法线向量确定对称面gen zone reflect normal 0 0 -1 ;沿z轴镜像;绘图控制pl contour szz outline on;在模型中显示位移-应变曲线hist gp ydisp 0,0,0hist zone syy 0,1,0hist zone syy 1,1,0pl his -2 -3 vs 1 ;在plot hist m vs n的形式里,m代表y轴,n代表x轴(不管m,n的正负); "-"表示对其值作"mirror";对模型进行压缩实验的方法;即在模型两侧施加相反方向的速度ini yvel 1e-7 range y -.1 .1ini yvel -1e-7 range y 1.9 2.1;修改模型的坐标值ini x add -100 y add -100 z add -100;显示云图的同时也显示模型网格轮廓plot add cont disp outline on ;gradient更精确;输入角度、弧度方法pi=π,90°为90.0*degraddef set_valsptA = 25.0 * sin(pi/2);ptA=25.0ptB = 25.0 * cos( 60.0*degrad );ptB=12.5ptC=pi;ptC=3.1415926endset_valsprint ptA ptB ptC;施加结构单元方法sel shell id=5 range cylinder end1=(0.0, 0.0,0.0) &end2=(0.0,25.0,0.0) radius=24.5 notplot add sel geom black black cid on scale=0.03sel node init zpos add -25.0;如何显示某一平面plot create name_planeplot set plane origin 3 4 0 normal 1 0 0plot add cont disp plane behind shade onplot add sel geom blackplot add axes redplot current name_planeplot show;如何施加法向应力并显示所施加的力apply nstress -3.0E7 range cylinder end1 0 -1 0 end2010 radius 39.9 not;柱体外表面施加法向力apply nstress -5.0E6 range cylinder end1 0 -1 0 end2010 radius 2.1;柱体内表面施加法向力plot grid green fap black;显示施加的力;获取某网格点的ID,坐标值def aaget_id=gp_id(gp_near(3,0,0))endaaprint get_idprint gp position range id 3;保存命令流文件set log onset logfile hua.log;文件存放的路径与调用的文本路径相同......set log off;fish函数的说明与解释def find_add ;定义fish函数find_addhead = null ;给head赋值p_gp = gp_head ;第一个网格结点的指针赋给p_gploop_while p_gp # null ;当p_gp值不为null时作循环x_pos = gp_xpos(p_gp) ;将指针为p_gp的结点的x坐标值赋给x_posif x_pos = 10.0 then ;如果x_pos = 10.0 则(执行)new = get_mem(2) ;从主内存空间里得到2个fish变量对象并返回第一个对象的开始地址mem(new) = head ;将head类型和数值置于地址为new的fish 变量mem(new+1)=p_gp ;第二个变量存储符合条件的zone地址head = new ;将new值赋给headendifp_gp = gp_next(p_gp) ;将结点指针为p_gp的下一个结点的指针赋给p_gp endloop;结束循环end ;结束fish函数;实际上这个fish函数为满足条件(x坐标为10的)的zone的地址开辟一定的地址空间,各地址之间存在一定的联系;找到第一个符合条件的zone地址后,用new = get_mem(2) 从主内存空间里得到2个fish变量对象并返回第一个对象的开始地址,并用;下面的mem(new) = head ,将第一次开辟的两个变量的第一个变量存储地址head(注意第一次head =null),第二个变量存储第一;个符合条件的zone地址,并将第一个变量的地址赋予head(head =new),第一次循环结束;下次循环,同样开辟两个变量对象,第;一个变量对象记录上次循环开辟的第一个变量的地址,第二个记录第二个符合条件的zone地址,其余循环依次类推,这样子就建立了;一个符合条件的zone地址链条,方便以后使用。
FLAC3D各种命令笔记(2021年整理精品文档)
FLAC3D各种命令笔记编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(FLAC3D各种命令笔记)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为FLAC3D各种命令笔记的全部内容。
hist reset ;清空里面所有的监测点nstress=-40e3 hist ramp的意思,很简单 nstress = —40e3 * ramp hist相当于乘法,为了方便控制动荷载的幅值。
plotitems--Add--strucktural elements——geometry ——cables 显示锚杆的几何形状Pl-add-vector-apply body force 显示施加的力,不过是在求解之后显示Creat 创建一新视图plotitems—--—--add——-—-vetor-—-—apply body force 显示荷载的施加位置Array var(4,3)二维数组 array var(5)一维5个元素的数组Var(m,n)=urand ;随机 var—数组的名字Pnt=z_next(pnt) 查找下一个单元体表Pl plas 显示塑性区Array x_b(x,y) z_b(x,y) 创建两个x行y列的表格,可以给其赋值,以便调用.Array就是数组的意思。
Hist id=1 gp xd 7 0 0 监测7 0 0 点处的x方向位移,ID=1材料参数dilation 剪胀角FISH语言:Degrade;∏/180Pi;∏Ngp;节点总数Nzone;单元体总数单元节点遍历:P_z = zone_headLoop while p_z # null………P_z = z_next(p_z)End loopRead(ar,n);将数组ar的前n个记录写到文件print zone state 显示塑性区域编写fish函数时,尽量采用浮点型,例如1。
02-4_FLAC3D5.0_Fish调整网格简析
这是一个小的数学问题:对与任意的直线段l,假设将其分 成n份,相邻线段的比例为rat(沿直线段方向),那么 求出前i段直线段的长度l0li
l1 l2 l3 li ln
求出前第一段的长度,然后应用等比 数列前i项的求和公式即可得到上面 代码中的运算式。
利用fish调整规整网格建立交叉隧 道
一、建模思路 二、建模过程fish语句的分析 三、小结
一、建模思路
• 1 首先用内置brick生成砖型规整网格 • 2 在现有网格的基础上调整gridpoint的坐 标, 坐标的调整依据建模人员期望的网格形 状来进行 • 3 规划好网格的调整次序(如先调整端面 网格,再调整中间部分的网格)
•
• • •
z0
z1
z2
z3 z4
z5
Gridpoint遍历的次序,循环从内到外
x0y0z0
x0y0z1 x0y0z2 x0y0z3 x0y0z4 x0y0z5 x1y0z0 x1y0z1 x1y0z2
x0y1z0
x0y1z1 x0y1z2 x0y1z3 x0y1z4 x0y1z5 x1y1z0 x1y1z1 x1y1z2
手册中对内存函数用法的解释
• • • • •
lose_mem(n,ad) This function returns n FISH -variable objects to the host. The parameter ad is the address of the start of the array of objects; there is no checking done to verify that ad is a valid address. The returned value is undefined. get_mem(n)This function gets n FISH -variable objects from the host's memory space and returns the address of the start of the contiguous array of objects mem(ad) This function may be used either as a source or destination (i.e., on the right- or left-hand side of an expression): var = mem(ad) The value of the FISH -variable at address ad is transmitted to the regular FISH variable var (together with the type). mem(ad)=var The value and type of the regular FISH variable var is placed in the FISH variable at address ad. It is the user's responsibility to check that the addresses given contain valid FISH variables. During execution, an error message is given if ad is not of type pointer.
flac自己总结小命令集合
1、FLAC3D常见命令:1.FLAC3D是有限元程序吗?答:不是!是有限差分法。
2.最先需要掌握的命令有哪些?答:需要掌握gen, ini, app, plo, solve等建模、初始条件、边界条件、后处理和求解的命令。
3.怎样看模型的样子?答:plo blo gro可以看到不同的group的颜色分布4.怎样看模型的边界情况?答:plo gpfix red5.怎样看模型的体力分布?答:plo fap red6.怎样看模型的云图?答:位移:plo con dis (xdis, ydis, zdis)应力:plo con sz (sy, sx,sxy, syz, sxz)7.怎样看模型的矢量图?答:plo dis (xdis, ydis, zdis)8.怎样看模型有多少单元、节点?答:pri info9.怎样输出模型的后处理图?答:File/Print type/Jpg file,然后选择File/Print,将保存格式选择为jpe文件10.怎样调用一个文件?答:File/call或者call命令10.如何施加面力?答:app nstress11.如何调整视图的大小、角度?答:综合使用x, y, z, m, Shift键,配合使用Ctrl+R,Ctrl+Z 等快捷键12.如何进行边界约束?答:fix x ran(约束的是速度,在初始情况下约束等效于位移约束)13.如何知道每个单元的ID?答:用鼠标双击单元的表面,可以知道单元的ID和坐标14.如何进行切片?答:plo set plane ori (点坐标) norm (法向矢量) plo con sz plane (显示z 方向应力的切片)15.如何保存计算结果?答:save +文件名.16.如何调用已保存的结果?答:rest +文件名;或者File / Restore17.如何暂停计算?答:Esc18.如何在程序中进行暂停,并可恢复计算?答:在命令中加入pause命令,用continue进行继续19.如何跳过某个计算步?答:在计算中按空格键跳过本次计算,自动进入下一步20. Fish是什么东西?答:是FLAC3D的内置语言,可以用来进行参数化模型、完成命令本身不能进行的功能21. Fish是否一定要学?答:可以不用,需要的时候查Mannual获得需要的变量就可以了22.FLAC3D允许的命令文件格式有哪些?答:无所谓,只要是文本文件,什么后缀都可以23.如何调用一些可选模块?答:config dyn (fluid, creep, cppudm)24 .如何在圆柱体四周如何施加约束条件?答:可以用fix ... ran cylinder end1 end2 radius r1 cylinder end1 end2radius r2 not,其中r225.如何能把一个PLOT的图像数据导出来以便用其他软件绘图?答:用set log on命令,把数据导出来,转到excel里处理一下,然后用surfer或者什么作图软件绘制就行了。
(完整版)FLAC3D常用命令
1. apply(缩写:app)可用来定义边界条件及初始条件:1)添加应力格式1:apply szz -0.3395e6 range z -0.1 0.1格式1:apply szz -0.3395e6 range group pile格式3:apply szz -0.3395e6 range z -0.1 0.1 group pile格式4:apply nstress 数值range z 2.9 3.1(或3)x 1 2 y 1 22)以一定速度施加位移边界格式1:apply yvel -1e5 range y -1.9 2.1 ;施加y方向速度-1e5/step3)添加边界条件格式:apply szz <数值> grad <梯度> range <范围>示例1:apply szz -1e9 grad 0 0 8.3e5 range z 0 120示例2:apply szz -0.6e6 range z 0.05 0.15 group pile注:<数值>是梯度方向坐标0点的数值,可通过定义坐标范围的上下值与梯度计算得到。
2. range(缩写:ran)通过range功能,可以使命令作用在一定指定范围的目标上;如果一个命令没有使用range来确定范围,则命令对整个模型有效。
1)利用坐标指定一定的范围格式1:range z 0 1格式2:range z 2.9 3.1 x 1 2 y 1 22)利用分组来指定范围格式:range group 13)以上两种的复合格式:range z -0.1 0.1 group pile4)利用id号来指定一定的范围格式:range id 0 10该命令后跟起始id和结束id,这里的id可以是实体单元、网格、结构单元、接触面和节点的编号。
例:model elastic range id 1 10 ;指定id为1到10的单元为各向同性弹性本构。
FLAC3D命令流挺实用
1、怎样查瞧模型?答:plot grid 可以查瞧网格,plot grid num 可以查瞧节点号。
2、请问在圆柱体四周如何施加约束条件?答:可以用fix 、、、ran cylinder end1 end2 radius r1 cylinder end1 end2 radius r2 not,其中r2<r1,其实就就是选择range的时候选两个圆柱的差,即得到边界。
命令流如下:fix x range end1 1 0 0 end2 1 4 0 rad 1 end1 1 0 0 end2 1 4 0 rad 13、怎么能把一个PLOT的图像数据导出来以便用其她软件绘图?答:用set log on 命令,把数据导出来,转到excel里处理一下,然后用surfer或者什么作图软件绘制就行了。
4、用命令建立模型后,如何显示点的坐标?答:使用plo blo gro gpnum on命令5、关于gauss_dev对性质进行高斯正态分布的问题?答:根据手册上的说明:下面的命令设定一个平均摩擦角为40度,标准方差就是±5%。
则命令如下:prop friction 40 gauss_dev 2问题:请问gauss_dev 2中的2就是如何计算的?如果把±5%改为±10%,则命令应如何写?40×5%=26、reflect问题问:gen zone radbrick &p0 (0,0,0) p1 (10,0,0) p2 (0,10,0) p3 (0,0,10) &size 3,5,5,7 &ratio 1,1,1,1、5 &dim 1 4 2 fillplot surfgen zone reflect dip 0 dd 90 (对xy面做镜像)gen zone reflect dip 90 dd 90 (对yz面做镜像)(1)dd表示y轴正向顺时针到那条射线的夹角,dip表示对称参照面与xy平面的夹角,对称参照面与xy平面的夹角在xy平面的投影就是一条射线。
FLAC3D学习笔记(自己总结版)
一、建立模型笔记1键盘上的键的功能:X,Y,Z分别控制所建立的模型围绕X,Y,Z三个轴做逆时针旋转.如果打开大小写锁定键,分边按XYZ时建立的模型会做顺时针旋转.+号的功能是加大模型旋转的角度,-号的功能是减小模型旋转的角度。
2键盘上的上下左右四个键可以实现图形的向上向下,向左和向右的移动.3当在一个区域建立多个模型的时候,有时候为了镜像单个模块儿,需要预先编组,编组的方法如下:gen zon tunint p0 0 0 0 p1 0 10 0 p2 5 5 0 p3 0 0 -5 p4 5 10 0 &p5 5 5 -5 p6 0 10 -5 p7 5 10 -5 dim sq2 sq2 1 sq2 1 1 1 group(编组) z1(组名为:z1) &fill group tunnel4镜像整个模型的方法:首先判断即将镜像的模型在原模型的哪个方向(即三个轴的方向),然后在轴所在的方向上去两个点.其中一个是原点(origin(xyz)).5镜像部分模型的方法: gen zone reflect normal (x,y,z) origin (x,y,z) range group z1就可以了.6特别要注意的一点:交叉巷道的巷道充填和巷道的网格是两个组,所以在镜像的时候不要忘了给充填部分镜像.7 group radcyl range group cylint not(编组的时候不包括cylint)7 快捷键总结Ctrl+Z 局部缩放的功能。
Ctrl+R的功能是恢复到初始状态。
8模型建立的方法:方法1:利用默认值生成网格,各个默认值:(1)p0的默认值是(0,0,0),网格的每边的单元格数size默认值是10,网格每边的长度默认值为size的值.方法2:利用4个点的坐标来生成矩形网格.p0~p3 size方法3:利用edge来确定边长生成矩形网格.方法4:利用参数ratio来确定单元体几何边画边生成矩形网格.方法5:利用参数add(相对坐标)来生成矩形网格.方法6:利用八个点的左边来生成矩形网格.9、用户自定义模型的方法我来贡献一点自己的成果:FLAC3D的二次开发环境提供了开放的用户接口,在软件安装文件中包含了软件自带所有本构模型的源代码,且给出了Mohr-Coulomb模型和应变软化模型的编译示例,因此可以方便地进行本构模型的修改与开发。
FLAC3D查找disp最值及其所在id的坐标的方法(fish语言)
首先要感谢下重庆岩土所的阿比尔提供的代码:一、以zdisp为例举例子说明,查找整个模型的最小zdisp值的方法,xdisp、ydisp求法相同直接替换zdisp即可:def find_min_zdisp ;查找节点最小zdisp值及节点号p_gp=gp_headmin_zdisp=0.0 ;初始值loop while p_gp#nullnew_zdisp=gp_zdisp(p_gp)if new_zdisp<min_zdisp thenmin_zdisp=new_zdisppid=gp_id(p_gp) ;节点单元号px=gp_xpos(p_gp);该节点的x坐标py=gp_ypos(p_gp);该节点的y坐标pz=gp_zpos(p_gp);该节点的z坐标endifp_gp=gp_next(p_gp)endloopend;=================================================================== ================find_min_zdispprint min_zdispprint pidprint pxprint pyprint pz将以上代码复制到txt文本,Call进FLAC3D即可得到结果如下:可以看到最小的zdisp值为-1.740米并且该最小zdisp值所在的节点id号为6762,该节点坐标为(899.973,1320.530,-578.003)米二、类似的可以得到求解最大zdisp的方法def find_max_zdisp ;查找节点最大zdisp值及节点号p_gp=gp_headmax_zdisp=0.0 ;初始值loop while p_gp#nullnew_zdisp=gp_zdisp(p_gp)if new_zdisp>max_zdisp thenmax_zdisp=new_zdisppid=gp_id(p_gp) ;节点单元号px=gp_xpos(p_gp)py=gp_ypos(p_gp)pz=gp_zpos(p_gp)endifp_gp=gp_next(p_gp)endloopend;=================================================================== ================find_max_zdispprint max_zdispprint pidprint pxprint pyprint pz三、如果要查找z值在26-27.5范围内的模型节点的disp最值的话,代码如下,以最小zdisp 值的方法,xdisp、ydisp求法相同直接替换zdisp即可:def find_max_zdisp ;查找节点最大zdisp值及节点号p_gp=gp_headmin_zdisp=0.0 ;初始值loop while p_gp#nullpz=gp_zpos(p_gp)if pz>26if pz<27.5new_zdisp=gp_zdisp(p_gp)if new_zdisp<min_zdisp thenmin_zdisp=new_zdisppid=gp_id(p_gp) ;节点单元号px=gp_xpos(p_gp)py=gp_ypos(p_gp)pz=gp_zpos(p_gp)endifendifendifp_gp=gp_next(p_gp)endloopend;=================================================================== ================find_min_zdispprint min_zdispprint pidprint pxprint pyprint pz四、同样的可以得到,求z值在26-27.5范围内的模型节点的disp最大值id及坐标值def find_max_zdisp ;查找节点最大zdisp值及节点号p_gp=gp_headmax_zdisp=0.0 ;初始值loop while p_gp#nullpz=gp_zpos(p_gp)if pz>26if pz<27.5new_zdisp=gp_zdisp(p_gp)if new_zdisp>max_zdisp thenmax_zdisp=new_zdisppid=gp_id(p_gp) ;节点单元号px=gp_xpos(p_gp)py=gp_ypos(p_gp)pz=gp_zpos(p_gp)endifendifendifp_gp=gp_next(p_gp)endloopend;=================================================================== ================find_max_zdispprint max_zdispprint pidprint pxprint pyprint pz将以上代码复制到txt文本,Call进FLAC3D即可得到结果如下:可以看到最小的zdisp值为-0.573米并且该最小zdisp值所在的节点id号为228984,该节点坐标为(900.009,1350.001,27.106)米。
02-4_FLAC3D5.0_Fish调整网格简析
调用fish调整网格
Block Group
brick_1 brick_2 brick_3 brick_5 brick_6 brick_7 brick_8 brick_9 X brick_10 brick_11
Block Group
brick_1 brick_3 brick_4 brick_5 brick_6 brick_7 brick_8 brick_9 brick_11 brick_12
Settings: Model Perspective 10:56:09 Fri Dec 17 2010 Center: X: 3.275e+000 Y: 5.600e+000 Z: 3.800e+000 Dist: 5.969e+001 Rotation: X: 30.000 Y: 0.000 Z: 30.000 Mag.: 1 Ang.: 22.500
ii = out('Indexing Brick 3') pxsize = zone_z_b ; Brick 3 pysize = zone_x_b pzsize = zone_y_tun xmin = x1brick xmax = x2brick ymin = y0brick ymax = y1brick zmin = z1brick zmax = z2brick xrat = zone_rat_b yrat = 1.0 zrat = 1.0 create_and_fill_pointers parray03 = parray end create_13_bricks
这是一个小的数学问题:对与任意的直线段l,假设将其分 成n份,相邻线段的比例为rat(沿直线段方向),那么 求出前i段直线段的长度l0li
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三维连续介质快速拉格朗日分析命令与FISH参考总结
概述:
本卷包含所有FLAC3D命令和FISH语句的快速参考手册。
第一章中给出了在命令行模式下的所有命令的总结。
(注意:在第一章中所有命令的详细描述在“命令参考”中)
地第二章中给出了FISH语句的总结。
(注意:第二章中所有FISH语句的详细描述在FISH 卷中)
1 命令总结
1.1 命令1.1.1 指定程序控制
1.1.2 选取用户图形界面
1.1.3 指定特殊计算模式
1.1.4 指定附加存储
1.1.6 创建工程
1.1.7 指定本构模型与参数
1.1.8 指定初始条件
1.1.9 指定边界条件
1.1.10 指定结构支座
1.1.12 指定交界面与铰接点
1.1.13 求解过程中监督模型状态
1.1.14 求解问题
1.1.15 生成模型输出
2 FISH语句总结
2.1 FISH语句
2.1.1 标准语句
2.1.2 控制语句
2.1.3 命令执行
2.1.4 FISH交互式命令
2.1.5 —特殊标量变量
2.1.6 一般标量变量
2.1.7 —特殊网格变量
.
2.1.8 结构单元变量
2.1.9 内部函数
2.1.10 取表特殊函数
2.1.11 读取存储特殊函数
2.1.12 FISH画图子程序
2.1.13 FISH I/O子程序。