1 引言
table是一个(x,y)值的集 合,值对可以按任何顺序排列,通过索引进行查找。当增加一个新的(x,y)值时,它会在table的末尾添加一条记录。在这里我使用了数据库的语言“记录”。这个笔记简要讨论如何在table中添加新的记录。顺便说一下,FLAC3D和3DEC的table FISH比PFC的table FISH多出一些变量,用于特殊场景。(derivative, fft, integrate, spectrum)
2 table add/Insert 命令
使用table add命令增加一条记录。首先使用FISH创建一个table:
fish def granulometry
global exptab = table.create('mwu')
table(exptab,0.00236) = 0.01
table(exptab,0.005) = 0.152
table(exptab,0.01) = 0.902
table(exptab,0.014) = 0.989
table(exptab,0.02) = 0.991
table(exptab, 0.028) = 1.0
end
@granulometry
然后使用下面的命令来增加一条记录,这条记录增加到table的末尾, 索引值应该为7。
table 'mwu' add (0.018, 0.9)
“The table with name mwu had 1 values added.”
我们可以使用下面的命令来检验:
[x1 = table.x(exptab,7)]
[y1 = table.y(exptab,7)]
print @x1, @y1
我们也可以在table中插入一条记录,使用下面的命令:
table 'mwu' insert (0.018, 0.9)
[x1 = table.x(exptab,5)]
[y1 = table.y(exptab,5)]
print @x1, @y1
这时,新的记录按照x的值进行了插值,因而该条记录的索引值变成了5. 但是如果新的x值等于原有记录中的x,那么新的记录不是插入了,而是代替了原来的值。在这种情况下总的记录数不变。
在一个用FISH生成的table中,table的索引值是按照x的值来排序的,因此取第一条记录和最后一条记录就能获得x的最小值和最大值。
3 table.value 命令
table.size是一个计数器,获取table的总记录数。
[table_size = table.size('mwu')]
table.value也是双向的,既可以获取值,也可以添加新的数据。
[val = table.value('mwu', table_size)]
下面的代码演示了如何使用table.value.
fish def make_table_res
get_residual_crossover
local t1 = table.create('Analytical')
loop local i (1,100)
; table x goes from 0 to twice the cross over value
local x = float(i)*2.0*crossover/100.0
if x < crossover
local y = c1 mu1*x
else
y = c2 mu2*x
endif
table.value(t1,i) = vector(x,y)
end_loop
end
在这段代码中,首先运行FISH程序get_residual_crossover,以此来获得变量crossover的值,然后创建一个table
local t1 = table.create('Analytical')
在接下来的loop语句中,计算x,y的值,然后保存到table中。
table.value(t1,i) = vector(x,y)
4 结束语
本文简述了table add/insert,table.size和table.value的用法,table的操作主要应用在解析解和数值解的对比中。灵活应用table的操作功能,特别是table.value的用法,可以极大地扩展应用程序的能力。
与外部数据交互: table命令与table FISH
GIIC-UDEC操作教程(2)---岩石滚落
GIIC-UDEC操作教程(3)---巷道顶板冒落
清理Itasca软件的冗余数据
二维Voronoi 块体生成方法