您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > FLAC--FISH(最新)
FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)1卷首语要学好FLAC3D,必须学好FISH,FISH身为FLAC3D的内嵌语言,也就是是一种嵌入式编程语言,其编写短小精干实时,同时兼顾大家操作习惯,不但可以嵌入命令流文件里工作,而且还可以引用FLAC3D本身的任何命令,突破了一般标准程序代码的限制,实现了读者对FLAC3D软件的完美控制。类似于ANSYS的APDL语言,FISH主要是用来处理现有命令程序难以实现(较难或较烦)的一些问题,对于没有编程经验的用户,可以编一些简单的FISH函数,昀好是修改3DSHOP中的一些比较现成的函数以便使用;当然,既然是一门编程语言,也可以编复杂程序。写这一卷的主要目的就是使大家对FISH有个较为充分的认识和理解,因为相关资料甚少,故卷中的有些资料是作者在Simwe,Yantubbs等论坛上收集后整理所得,在此表示感谢。本卷分为4章,第一章为关于FISH语言法则、变量、函数等得一个综述,主要是想让大家从全局认识FISH编程语言;第二章介绍了FISH语句的类别和各自特点和用法;第三章则较为细致的向大家介绍了各变量,函数的具体含义,部分配合了用法实例;第四章补充了一些比较不错的FISH应用实例。希望大家读后会有所收获,也欢迎大家批评指正,共同提高!Sunshinessw1216@163.comQQ61925252007-9-20于铁道科学研究院北京·中国FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)2第一章Fish的语言法则一、四个概念函数与变量—Fish函数由define定义,end结束定义。如下例为定义一个名叫abc的函数。上述函数中hh即为“变量”。函数和变量是FISH语言中非常基本和重要的两个对象,区别如下:当我们调用一个FISH对象XXX时,如果XXX是函数,系统就会执行该函数;而如果XXX不是函数而是变量,系统则会简简单单的调用其当前置。大家注意继续输以下命令行,注意输出结果,便可对这两个有个较为清晰的认识。语句—在不少实际问题中有许多具有指示说明性的、控制性的、重复性操作,程序中需要执行他们,诸如Array,Define,end,Case,endcase,If,else,endif等即为语句。我们举例来说明选择语句if..else的用法,如下:昨天晚上俺和俺老婆在床上就商量,我俩掰腕子,我赢了我老婆亲我一下,我老婆赢了,我亲我老婆一下。这个就是选择语句,如果(if)我赢了(表达式)我老婆亲我一下(语句1),如果我输了(else),我亲我老婆一下(语句2)。代码行—FISH语言中的代码行,含义类似于命令流中的“命令行”。只是他们的写法规则有很大的不同,如下节所述。二、两个法则1.FISH语言中的代码行的写法FISH语言中的代码行,其写法要求严格,必须是以下格式之一:Ⅰ代码行由语句打头,如DEFINE,IF等。Ⅱ代码行为FISH中定义的函数,需要说明的是多个函数间要用空格隔开。FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)3比较好的一点是,FISH代码中的函数名不用提前定义,只用在执行前定义即可。Ⅲ代码行由赋值语句组成。ⅣCOMMAND-ENDCOMMAND语句中间的FLAC3D命令行。Ⅴ空行。Ⅵ分号“;”打头的行。需注意的是FISH中的变量名、函数名以及语句,都要写全,不能象FLAC3D命令中那样缩写。此外,代码行不能续行,不过可以通过引入新变量解决此问题。还有一点,FISH不区分大小写。2FISH中函数名、变量名的取法FISH中的函数名或变量名必须以非0开始,并且名字中不能含有以下字符:一般而言,除此要求外,用户可以随意取名,但应该避开FISH中预定义的变量和函数名,昀好也避开FLAC3D中的命令以及其缩写形式。还要注意一点,如果变量名没有被赋值,则默认为0。三、四种格式这里所的是,FISH中变量以及函数的四种数据类型:1.整型数据(介于-2147483648和+2147483648之间的整数)。2.浮点型数据(精确到小数点后15位,介于10-300到10300之间)。3.字符型数据(也就是字符串,可以是任意长度,FLAC3D中,其表示通常为加上单引号的一串字符)4.指示字(扫描单元、网格点等清单时的机器编址)。通过赋值可以动态的改变FISH中变量的数据类型,这一点与FORTRON,C语言相比,更加便于新手理解和掌握。四、两点说明1.FISH语言中的变量和函数名的时效与Basic语言类似,FISH语言中的变量名以及函数名在整个程序中都有效,不管你是在FISH代码中还是在FLAC3D命令行中。2.变量和函数名的调用格式FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)4函数是FISH语言执行的唯一对象,它没有自变量,仅仅在调用时通过提前设置变量的值来传递变量。函数XXX可以通过以下方式来调用:ⅠFISH代码行直接引用函数名XXXⅡFISH公式中被用到,如ⅢFLAC3D命令行中直接引用Ⅳ在代码输入行中,作为替换对象Ⅴ作为SET,PRINT,HISTORY等命令的参数。五、一点补充我们可以删除或重新定义FISH函数,方法是用同名的新代码取而代之,如果在DEFINE后直接跟END行,那么也就删除了原定义的函数。需补充的是:Ⅰ本构模型不能删除或重新定义。Ⅱ当函数被删除了,但原有变量依然存在,因为变量是全局性的,如同在其他位置一样。Ⅲ替换后,对原函数的调用会自动为新函数所取代。FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)5第二章Fish语句用法精讲FISH语言中的语句不多,可以分为几类:指示说明语句;控制语句;FLAC3D的命令执行语句。本章重点介绍语句的用法。一、两条指示语句1.在这个语句中,Var1是任意有效的变量名,n1,n2…可以是整数,也可以是标量变量(维数)或ARRAY执行过程中为整型数值的单个变量。同一代码行也可以定义多个矩阵(如Var2)。每个矩阵可以有不同的维数。ARRAY语句是一个指示说明语句,它只在汇编过程中起作用,在执行过程中被忽略。使用时,需要注意以下几点:1.矩阵名可以是一个存在的单个变量,这样一来,变量便转化为一个矩阵并且原变量值会丢失。如果是一个不存在的变量名,就会新建。2.矩阵名不能是一个函数名或已经存在的矩阵名(也就是所,矩阵不能被重新定义)。3.矩阵维数(n1,n2…)一定要是正整数。4.矩阵的维数和元素个数没有限制。矩阵变量的使用很类似于单个变量,不同的是,其后常常接自变量清单(带圆括号)。FLAC3D命令行中对矩阵名的使用也有一定的限制,如PrintXXX(XXX为一FISH矩阵名),只会打印出昀大的矩阵指数;SETgrav=XXX是不允许的。接下来介绍几个关于此条语句的实例,虽然很简单,但希望大家小心输入,注意输入后的变化。实例1:定义一个一维矩阵,并进行赋值。实例2:定义一个用FISH定义奇数和偶数组的例子。FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)62.语句在一个用户自定义函数中,只要出现whilestepping语句,在每一个FLAC3D计算步开始时,函数都会自动执行。该语句的属性可以通过SETfishcall0remove命令修改失效。FISHCALL语句可以提供更为自由的计算控制,所以该语句应该不多,此处不作详细介绍。二、五对控制性语句控制语句在FISH中十分重要,如下进行一一介绍。1.函数语句2.条件语句FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)7该语句的语法结构为:在这个结构中,CASEOF后的Expr对象可以是任何有效的数学表达式,经过计算后转化为整型数据;而词条i1,i2…..等则必须是0~255中间的整型,不能为符号。如果Expr等于i1,系统会自动跳到CASEi1后语句执行,直到碰到下一条CASE语句,系统才会到ENDCASE完成执行任务,类似i2,i3,i4…..时原理完全一样,只是要说明一点,如果Expr不等于iN中的任何一个,系统会执行第1个CASE,如果N小于0或大于255,系统就会出错停止执行。i1,i2….并不要求一定是连续或相邻整数。下例为含有该句型用法的部分FISH流:。。。。。。。。。。。FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)83.条件语句条件语句IF是所有计算机语言中较为常用的语句,在该对语句中,通常ELSE为可选项,THEN可以省略不写。该语应用较为普遍,本节只简单介绍FISH语言中几个需要注意的问题:ⅠTEST词条常常由以下符号组成:其中,#号意为≠。ⅡEXPR1和EXPR2可以是任意的有效代数式,可以包括函数,FLAC3D变量等等。Ⅲ如果TEST结果为真,IF后语句就会执行,直到执行下一条ELSE或者ENDIF;但如果测试结果为假,系统就会执行ELSE和ENDIF之间的语句,当然了,前提是存在ELSE语句,呵呵。另外,ENDIF执行后,系统自动跳回第一行。Ⅳ当EXPR1和EXPR2为字符串时,测试附后只能时两种,即,对字符串而言,其他的操作时无效的,必须很精确的对等;指示字也一样。Ⅴ该语句可以嵌套到任何路径。举个简单的实例,以理解其用法:4.循环结构语句FISH中采用的循环结构语句只有LOOP语句,没有FOR-NEXT等语句,其结构为FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)9第1种LOOP形式中,采用整型计数,VAR为EXPR1的初值,每次循环后加1,直到EXPR2值,注意的是EXPR可以是任意的表达式。第2种LOOP形式中,当条件为真时,执行循环体,否则,控制路径转到ENDLOOP。对比两种形式,第1种LOOP形式在循环结束后进行条件测试,所以循环至少要执行1次;第二种形式在循环开始时进行条件测试,所以一旦初始条件为加,直接跳出循环。举个简单的实例,以理解其用法:5跳转语句FISH语言中没有GOTO命令,SECTION允许程序以某种可控制的方式跳转,SECTION……ENDSECTION语句可包含任意行的FISH代码,且不影响代码的运行。然而,EXITSECTION语句会导致SECTION语句无条件的直接跳转到代码段结束的位置。这对语句我没有用过,呵呵。其实控制语句还有EXIT,会使程序无条件跳到当前函数的结束处。三、一对命令执行语句FISH中可以调用FLAC3D命令,那么你用到了以下这对语句:FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)10从一个FISH程序中直接调用FLAC3D命令通常有两个原因:一个是用FISH函数的预定义变量(见第3章介绍)实现很难,另一个原因是我们可以通过FISH来控制FLAC3D的整个运行过程。四、FISH语言与FLAC3D命令的对接1.几个直接调用FISH的FLAC3D命令可以直接调用FISH的FLAC3D命令有:HISTORY,PRINT,SET,TITLE。这几个命令的用法都很简单,不一一介绍。语法结构为:通过实例说明各自用法:例1HISTORY命令在FISH中的用法:FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)11例2PRINT命令调用FISH变量和函数的方法:例3SET命令的赋值调用方法:例4SETFISH调用FISH函数。FISH函数名NAME可以被FLAC3D调用,调用位置由FISHCALL的识别码ID号n决定,REMOVE为可选项,当会使函数名为NAME的FISH函数从清单中被删除。FLAC3D玩家宝典之FISH卷作者Sunshie(QQ6192525)122.FISH函数的执行一般而言,FLAC3D和FISH操作是“各走各的道”,FISH语句不能象FLAC3D命令那样直接给出,而FLAC3D命令也不能象FISH程序那样直接运行,两个体系可通过以下的方法完成相互的作用:Ⅰ函数的直接调用Ⅱ利用HISTORY变量Ⅲ在计算过程中自动执行Ⅳ利用函
本文标题:FLAC--FISH(最新)
链接地址:https://www.777doc.com/doc-4671294 .html