首页/文章/ 详情

FISH: Loop语句的进化

2年前浏览1432

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 itit.command ("python-reset-state false")it.command("""model newmodel large-strain offzone create brick size 10 10 10zone cmodel assign mohr-coulombzone property bulk 65000 shear 30000 density 2.0zone 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_loopend[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


来源:计算岩土力学
pythonFLAC3D3DEC材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-10-09
最近编辑:2年前
计算岩土力学
传播岩土工程教育理念、工程分析...
获赞 150粉丝 1102文章 1782课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈