Fish总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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_3
3.命令行包含指派声明(例如等号右边的数学式被运算且其值赋予给等号左边的函数名称或是变量)。
4.命令行由FLAC3D(在FIAH中调用FLAC3D命令)命令组成,通过COMMAND—ENDCOMMAND 分隔FISH指令。命令行包含在FISH指令的一部分里面。
5.命令行以分号开始或者结束。
函数的变量,函数名称或者声明必须完整拼写,在FLAC3D命令中不能缩写。不允许有连续的命令行;可以通过引入新变量分解复杂的表示式。FISH在默认状态下为“对情况不敏感”—即大写与小写字母之间没有区别,所有的名字都转换为小写字母(注意可以通过(SET case sensitivity on)命令改变)。有相当大的空间来存储各自的变量、关键词等等(与FORTRAN不同)。在变量或是函数名中不允许含有空格。还留有格外的空间来提高可读性--例如通过缩进循环或是假定子句。分号后面的所有字都被忽略;FISH程序中包含的注释放在分号后面;FISH程序中可以包含空白行。
2.2.2为函数和变量保留的名字
变量或函数名必须以非数字开始,并且不包含下列符号:. , * / + - ˆ= < > # ( ) [ ] @ ;"
用户定义的名字可以在任何长度,但是由于行的长度限制,在打印或输出加标题时会被截断。一般说来,名字是任意选择的,只要与FISH参数或者预先定义的变量或函数不同就行,还应避免FLAC3D输入时将要用的的词。表2.1列出的词,如果用来命名FISH变量或函数,便会引起冲突。但是,潜在的冲突决定于如何利用所选中的名字。例如:gravity可以用作FISH变量,只是简单的在FISH函数内部涉及。只有当用SET命令去设置它的值,冲突才会发生,因为对于SET命令来说,gravity是个有效的词语。类似的,当一个FISH变量的名字与PRINT命令的参数一样时,也不可能把这个变量的值打印出来。如果有疑问,避免表2.1中的所有词,或者缩写名字。(因为FLAC3D允许关键词或者命令缩写)。
默认状态下,用户自定义的变量只能代表单个数字或是字符串。如果使用ARRAY才能储存数字或字符串的多维数组。2.3.1定义了数组的创建和使用方法。目前,没有明确的数组输入或输出设备,但是可以在FISH中写函数执行这些操作。例如:如例2.2所示,可以初始化和打印二位数组(或矩阵)的内容。
EXAMPLE2.2
2.2.3变量范围
变量和函数的名字在全球均是可识别的(用BASIC语言)。只要在一个有效的FISH程序命令行中提到一个名字,便能普遍被认可,无论是以FISH指令形式还是FLAC3D命令形式。当给出PRINT fish命令时就会输出一系列的变量。在一个FISH函数中赋值的变量可用于其他函数或FLAC3D命令。变量的值如不改变就会一直保持。所有变量的值可以用SAVE命令保存,用RESTORE命令存储。
2.2.4函数:结构,评价和引入计划
在FISH语言中唯一能够执行的对象便是函数。函数没有参数。在援引函数前设置变量(记得变量具有广泛范围),完成参数之间的通信。函数名放在在DINIFE后边,遇见END时表示函数范围结束。END在函数执行过程中起返回控制的作用。(EXIT起相同作用)。参考例2.3,展示函数如何构建和使用。
EXAMPLE2.3
执行函数的时候,XXX的值被改变。变量aa在函数内部运算,但是XXX运算过程中用到bb已经存在的值。如果该变量的值没有明确给定,那么结果为零(整数)。一个函数没有必要赋值给相同名字的变量。可通过以下几种方法调用函数XXX。
(1)在FISH的输入命令行中直接简单的写XXX。
(2)在FISH方程中作为一个变量XXX—例如new var =(sqrt(xxx)/5.6)ˆ4;
(3)在FLAC3D命令行中直接简单写XXX。
(4)在输入行中作为一个数的替代标志。
(5)作为FLAC3D命令SET,PRINT或HISTORY的参数。
一个函数在定义之前可能被其他函数援引;FISH编程员在首次提到的时候先简单的创建一个符号,用DINIFE命令定义之后再引入整个函数。一个函数可以被删除或重定义。--见2.2.8
函数可以在任何程度上嵌入,函数可以援引其它函数,而其它函数也可以无限援引。然而,不允许循环引入函数。(即函数执行是不能引入相同的函数也就是回归调用即在一个过程的执行中不能同时调用该过程)例2.4展示循环引入函数的例子,这是不允许的,因为定义中的函数名称在函数引入自己的时候被使用了。这个例子在执行时会引发错误。EXAMPLE2.4
EXAMPLE2.5
变量与函数不同的地方在于,只要提到名字,函数必须一直运行;变量只是简单的输送它们当前的值。然而,函数运行时会评估其他变量(如果与函数相冲突)。这种效果是很有用的,例如,当需要若干个FISH变量记录时,只需一个函数便可评估几个量,见例2.6.
EXAMPLE2.6
函数hvar1每隔几时步便被FLAC3D记录理念执行一次,但是,因为侧面影响,hvar2到hvar6的值也能计算且用作记录变量。
变量除自定义变量外,FISH中拥有大量的内置变量可满足用户的调用,主要可以分为以下几类:
常规变量
模型变量