1 引言
Loop语句控制着FISH包括整个程序的运行,loop语句从最初出现到现在发生了巨大的变化,这个笔记简要回顾了loop的发展过程,主要目的: 一方面为了减少数据的冗余,另一方面为了改进原来的代码以便使用新的方式来写代码(loop-for.prj)。
2 loop的进化过程
loop的写法有多种形式,尽管新的方法在不断发展,但原来的方法也还保留着。最初始的写法是:loop for (n = 1, n <= 10, n = n 1),这种方法在真实的项目中使用的并不多,在一些用户控制的有特定循环数n的情况下可以使用。这种写法的另一个简化形式是loop n (1,10),作用一样。目前最流行的写法是loop foreach n total, 其中total是一个list, 这种写法借鉴了Python的循环语句风格,从编程的角度来看,total可以是由任意方法生成的list, 比如下面的代码total由list.range(1,10) 产生。
total = list.range(1,10)
loop foreach n total
sum = n
prod *= n
end_loop
loop foreach结构由原来的循环链表(指针)改变为循环对象,简化了代码的写作方法。
一个改进的实际例子如下所示
; run in 3DEC
model new
block create brick 0,1 0,1 0,1
fish define load_sum
loop foreach local bi block.zone.list
load_sum = load_sum block.force.app.z(bi)
endloop
end
@load_sum
在实际项目中,最常见到的list有:zone.list,gp.list,dfn.fracture.list,除了内置的list外,也可以由另一个FISH程序产生出list。
loop foreach local zone zone.list
loop foreach local gp gp.list
loop foreach local gp surface
loop foreach local frac dfn.fracturelist(dfn)
最新的loop使用了多线程编程方法
新的方法与上面使用loop循环语句的作用是相同的,意思是对zone.list内的每一个单元的‘shear'值在原来值的基础上乘以0.5。
下面用一个例子演示这个新功能的用法。在这个例子中,首先给出了模型的材料参数值,包括剪切模量“shear”, 接着使用旧的FISH语言改变模型的剪切模量值,最后使用新的FISH语言再次改变模型的剪切模量值。整个过程封装在Python中,代码如下所示。
# run in FLAC3D
# Testing FISH new function
# Created by GeotechWu
# 6/06/2020
import itasca as it
it.command ("python-reset-state false")
it.command("""
model new
model large-strain off
zone create brick size 10 10 10
zone cmodel assign mohr-coulomb
zone property bulk 65000 shear 30000 density 2.0
zone property cohesion 10 friction 34 tension 1.0
""")
z = it.zone.find(1)
print( '模型初始的剪切模量:' str(z.props()['shear']))
# 使用旧的FISH编程
it.command("""
define old_way
loop foreach zp zone.list
zone.prop(zp,'shear') = zone.prop(zp,'shear')*0.5
end_loop
end
[old_way]
"""
print('模型第一次改变剪切模量:' str(z.props()['shear']))
# 使用新的FISH编程
it.command("""
[zone.prop(::zone.list, 'shear') *=0.5]
""")
print('模型第二次改变剪切模量:' str(z.props()['shear']))
上述代码的运行结果就象我们期望的那样:
模型初始的剪切模量:30000.0
模型第一次改变剪切模量:15000.0
模型第二次改变剪切模量:7500.0
相关文章:
与外部数据交互: table命令与table FISH
FLAC3D 7.0 新特性简介(P2)---FISH的显著改进
增加和改进table: table add/insert | table.value
清理Itasca软件的冗余数据
岩体不连续的剪切强度 | Barton-Bandis Model