分享一些简单的pfc入门语言及基础知识,适合新上手的小白
FISH语言对于程序进程的控制就如同鱼在水中一样灵活。FISH开发的初衷是为了扩充软件中现有的功能及简化或无法通过GUI界面操作实现的功能,例如,参数化模型、控制模型运行、创建模型输出、监控结果和后处理模型运行等。
与其它仿真软件相比,pfc的软件GUI界面是极其简略的,甚至可以说是有点“丑”。但这完全不妨碍其成为岩土工程界主流的仿真软件,其强大的生命力正得益于FISH。
利用FISH语言编程时应该遵循由简到繁的原则,即程序结构应该按增量方式构建。用户在执行复杂的程序前应确保先前编写的程序和预期结果相符。pfc3d内置编译器对FISH的语法和编程逻辑检查较少。因此,在程序应用于大规模分析之前都应在简单模型上进行测试。
数组相关
new
set random 10001 ;随机种子控制生成随机数 固定随机数
def array_test
array arr1(1,2,3,4,5)
arr2 = array.create(2,4)
end
define afill ; 数组必须通过loop循环来赋值
array var(4,3)
loop local m (1,array.size(var,1))
loop local n (1,array.size(var,2))
var(m,n) = math.random.uniform ;均匀分布
math_random_gauss = 5.0 + 3.0*math.random.gauss ;5为平均值 3.0为标准差的高斯分布
end_loopd
end_loop
end
define ashow ; display contents of matrix
loop local m (1,array.size(var,1))
local hed = ' '
local msg = ' '+string(m)
loop local n (1,array.size(var,2))
hed = hed + ' '+string(n)
msg = msg + ' '+string(var(m,n),8,' ',8,'E')
end_loop
if m = 1
io.out(hed)
end_if
io.out(msg)
end_loop
end
@array_test
@afill
@ashow
new
;FISH变量的三种定义方法
;1-通过fish命令定义变量a
fish create a = 1
;2-在中括号内定义变量b和c 比较常用
[m = 2]
[b = 2 + 3]
[c = a + b]
;pause key 光标放到命令输入窗口 按光标任意键
;pause 5 暂停5秒
;3-在自定义函数体内定义变量d
def sum
n = 1.25 ;在函数中可以直接等
e = a + b * c + d
end
set @d = 4 ;只有@才能识别变量
; 函数的调用有两种
;@sum ;也可用[sum]来调用函数
[sum]
list @n @a @b @c @d @e ;list后边只能用@调用变量
new
def factorial(n)
prc = 1
loop _i(1,n)
prc = prc * float(_i)
endloop
end
@factorial(25)
list @prc
@factorial(26)
list @prc
@factorial(65)
list @prc
@factorial(66)
list @prc
new
def factorial(n)
prc = 1
loop _i(1,n)
prc = prc * _i
endloop
end
@factorial(25)
list @prc
pause key
@factorial(26)
list @prc
pause key
@factorial(65)
list @prc
pause key
@factorial(660)
list @prc
new
; Matrix functionality tests
def setup
alan = matrix(4,4)
alan(1,3) = 6
alan(2,1) = 2.2
alan(3,4) = 6.6
alan(4,2) = math.pi
end
@setup
[alan(4,2)]
def setup2
alan = matrix.transpose(alan)
end
@setup2
[alan(2,4)]
def sum_tests
herp = matrix(2,2)
derp = matrix(2,2)
serp = matrix(2,2)
herp(1,1) = 6
herp(1,2) = -1
herp(2,1) = -3
herp(2,2) = 2
derp(1,1) = 4
derp(1,2) = 3
derp(2,1) = -7
derp(2,2) = 0
klerp = herp + derp
werp = herp - derp
serp = herp * derp
end
@sum_tests
[klerp(1,1)]
[werp(1,1)]
[serp(1,1)]
def test
local first = vector(2,4,3)
local second = vector(8,1,5)
local prod = math.outer.product(first, second)
output = array.convert(prod);
end
@test
[output(1,1)]
new
def long_sum ;example of a sum of many things
v12 = 56
temp1 = 'v1 + v2 + v3 + v4 + v5 + v6' ;字符串要用单引号
temp2 = temp1 + ' + v7 + v8 + v9 + v10'
long_sum = temp2 + ' + v' + string(11.0e5) + ' + ' + string(v12)
end
list @long_sum
相关代码参考远方大神相关改动