卷首语
要学好FLAC3D,必须学好FISH,FISH身为FLAC3D的内嵌语言,也就是是一种嵌入式编程语言,其编写短小精干实时,同时兼顾大家操作习惯,不但可以嵌入命令流文件里工作,而且还可以引用FLAC3D本身的任何命令,突破了一般标准程序代码的限制,实现了读者对FLAC3D软件的完美控制。
类似于ANSYS的APDL语言,FISH主要是用来处理现有命令程序难以实现(较难或较烦)的一些问题,对于没有编程经验的用户,可以编一些简单的FISH函数,最好是修改3DSHOP中的一些比较现成的函数以便使用;当然,既然是一门编程语言,也可以编复杂程序。
写这一卷的主要目的就是使大家对FISH有个较为充分的认识和理解,因为相关资料甚少,故卷中的有些资料是作者在Simwe,Yantubbs等论坛上收集后整理所得,在此表示感谢。本卷分为4章,第一章为关于FISH语言法则、变量、函数等得一个综述,主要是想让大家从全局认识FISH编程语言;第二章介绍了FISH语句的类别和各自特点和用法;第三章则较为细致的向大家介绍了各变量,函数的具体含义,部分配合了用法实例;第四章补充了一些比较不错的FISH应用实例。
希望大家读后会有所收获,也欢迎大家批评指正,共同提高!
Sunshine
ssw1216@163
QQ  6192525
2007-9-20
于铁道科学研究院
北京·中国
第一章  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中定义的函数,需要说明的是多个函数间要用空格隔开。
比较好的一点是,FISH代码中的函数名不用提前定义,只用在执行前定义即可。
Ⅲ 代码行由赋值语句组成。
Ⅳ COMMAND-ENDCOMMAND语句中间的FLAC3D命令行。
Ⅴ 空行。
Ⅵ 分号 “;”打头的行。
需注意的是FISH中的变量名、函数名以及语句,都要写全,不能象FLAC3D命令中那样缩写。此外,代码行不能续行,不过可以通过引入新变量解决此问题。还有一点,FISH不区分大小写。
2 FISH中函数名、变量名的取法
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.变量和函数名的调用格式
函数是FISH语言执行的唯一对象,它没有自变量,仅仅在调用时通过提前设置变量的值来传递变量。函数XXX可以通过以下方式来调用:
Ⅰ FISH代码行直接引用函数名XXX
Ⅱ FISH公式中被用到,如
Ⅲ FLAC3D命令行中直接引用
Ⅳ 在代码输入行中,作为替换对象
Ⅴ 作为SET,PRINT,HISTORY等命令的参数。
五、一点补充
我们可以删除或重新定义FISH函数,方法是用同名的新代码取而代之,如果在DEFINE后直接跟END行,那么也就删除了原定义的函数。需补充的是: Ⅰ 本构模型不能删除或重新定义。
Ⅱ 当函数被删除了,但原有变量依然存在,因为变量是全局性的,如同在其他位置一样。basic语言if语句
Ⅲ 替换后,对原函数的调用会自动为新函数所取代。
第二章  Fish语句用法精讲
FISH语言中的语句不多,可以分为几类:指示说明语句;控制语句;FLAC3D的命令执行语句。本章重点介绍语句的用法。
一、两条指示语句
1.
在这个语句中,Var1是任意有效的变量名,n1,n2…可以是整数,也可以是标量变量(维数)或ARRAY执行过程中为整型数值的单个变量。同一代码行也可以定义多个矩阵(如Var 2)。每个矩阵可以有不同的维数。
ARRAY语句是一个指示说明语句,它只在汇编过程中起作用,在执行过程中被忽略。使用时,需要注意以下几点:
1.矩阵名可以是一个存在的单个变量,这样一来,变量便转化为一个矩阵并且原变量值会丢失。如果是一个不存在的变量名,就会新建。
2.矩阵名不能是一个函数名或已经存在的矩阵名(也就是所,矩阵不能被重新定义)。
3.矩阵维数(n1,n2…)一定要是正整数。
4.矩阵的维数和元素个数没有限制。
矩阵变量的使用很类似于单个变量,不同的是,其后常常接自变量清单(带圆括号)。FLAC3D命令行中对矩阵名的使用也有一定的限制,如Print XXX (XXX为一FISH 矩阵名),只会打印出最大的矩阵指数;SET grav=XXX是不允许的。接下来介绍几个关于此条语句的实例,虽然很简单,但希望大家小心输入,注意输入后的变化。
实例1:定义一个一维矩阵,并进行赋值。
实例2:定义一个用FISH定义奇数和偶数组的例子。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。