这篇推送主要是简单介绍FLAC3D的独立开发的历史、软件的主要特点、其用户开发使用历史,以及软件架构性的东西。
FLAC3D (FastLagrangian Analysis of Continua in 3 Dimensions) (官方网站:www.itascacg.com) 作为专业的岩土工程三维分析软件,其创始人是Cundall,Cundall大神开始是做PFC2D的,后面开发了FLAC2D,再后来推出了2002年4月推出了3D的第一个非DOS正式版本FLAC3D V2.1,随后在2005年推出V3.0,2006年推出V3.1,2009年推出V4.0, 2012年推出V5.0,2017年推出了最新的V6.0版本。
发现它有很多出色的地方,比如:
1)参数化建模十分高效,就像现在的BIM参数化建模一样,改变模型只需要改命令流里面的一个数字就行;
2)支持FISH语言,可方便地实现复杂的功能;
3)支持二次开发,提供C++的.cpp文件和.h头文件接口。
这里只是简单介绍,其余优点包括采用混合离散比缩减积分在物理上更加准确,不需要形成总刚度矩阵因而占用内存小、非线性适应性强,本构方程的二次开发独立于求解的算法而不像常规的多重屈服面采用不同的求解方法,需要对求解器进行一定的优化等等。
这三点赋予了软件很高的自由度,可以说任何岩土问题在FLAC3D里面都能实现,比如我现在的Boss(geofem zsoil的版主)就曾经在FLAC3D里面二次开发了适用于基坑开挖模拟的非饱和土HS模型。
FLAC3D前后处理的短板在很长时间里,是通过用户自己去完善的,可以说FLAC3D是用户参与开发的优秀开放性平台。
比如网友dynamax版主和freebird编写的flac3d_to_tecplot历经2004/2006/2007/2009四个小版本,虽然现在不觉得难度很高,但是对于初学者来说,对于解决如何输出数据到文本很有启发意义。
河海大学郑海棠博士2006年分享了anaystoflac3d的接口程序(后来又经过网友改编了flac3dtoansys的接口),通过ANSYS进行前处理然后导入FLAC3D中,2012年推出FLAC3D5.0 之后,Kubrix、Gocad等作为其前处理软件,已经能很好地进行前处理了
同时,Hypermesh 用户也可自己定制FLAC3D的网格格式进行前处理,现在自带的Fishlab也已经具有用户友好的后处理功能,用户可通过界面和命令两种方式进行后处理。但我个人更倾向于提取数据,用其他数据分析软件处理。FLAC3D6.0在Kubrix的基础上,拥有了更加优秀的前处理功能,包括交互式建模、BLOCK DXF文件导入以及2D结构单元的DXF文件导入功能,因此,可以说FLAC3D在不断被用户的改进而进步,而且进步很大。
FLAC3D的主要竞争对手包括PLAXIS、MIDAS GTS NX、GEO-SLOPE 和 ZSOIL等,这些软件我过去多多少少都用过。 PLAXIS 最新版貌似也支持简单命令流了,ZSOIL也支持INP文件的文本编辑以及基于ANSI C++的二次开发,但都还没FLAC3D的使用自由度高。
使用自由度的排序依次是FLAC3D、ZSOIL、PLAXIS、 MIDAS GTS NX 和GEOSLOPE。可以说FLAC3D很适合作为创新性成果的辅助工具,因为有新的东西和想法你都可以通过编程实现,比如新的本构、自由的加载方式、自由的约束方式、自由的初始应力场或者是自由的单元初始应变情况。
程式语言既是其优点也是缺点,对于习惯于扁平式或者嵌套式界面操作的用户,可能难以接受,但是得益于几个前辈和几本书的功劳,他们通过翻译并配以讲解的方式,使得FLAC在中国的推广比较良好。比如清华大学刘波、韩彦辉的《FLAC原理、实例与应用指南》
河海大学陈育民博士和的《FLAC/FLAC3D基础与工程应用》,其实更推荐的是词汇基础好的使用软件自带的Manual手册和Help帮助文件,FLAC3D的Manual手册对软件的使用和实例介绍的十分详细,建议初学者打印出来,仔细研究,面对庞大的体系,Manual从Getting Started开始到 User Development深入了每一个细节。
Help则可作为一个工具箱,随时查询函数和命令,函数和命令只需要掌握架构,而并不需要记忆,至少笔者我是基本记不住细节函数的,只是知道架构,某种功能的函数是和什么相关的。
下面大概说一下FLAC3D的大致架构吧,FLAC3D的命令流由解释性命令(关键字+参数)和FISH语言两部分组成。以下的一些命令开头关键字,基本展示了FLAC3D的主要的解释性命令流过程,对于简单模型,应用自带的解释性命令流基本可以解决问题,但是对于复杂问题,则需要配合使用FISH语言,并在FISH语言中应用COMMAND… ENDCOMMAND嵌套解释性命令,来实现复杂的功能。
——CONFIG 指定计算模式
——GEN ZONE 建立单元和节点
——SEL BEAM/PILE/SHELL/LINER/CABLE建立结构单元
——SEL LINK 建立连接
——MODEL 指定本构模型
——PROP 赋予模型相关参数
——FIX/INITIAL 施加边界、边值条件
——SET 设置参数值
——SOLVE 求解
——HISTORY 记录
——HIST WRITE 写入记录至文本
——PLOT 后处理(绘制云图、矢量图或曲线)
FISH语言核心内容的简单介绍:
FISH语言的一大优势就在于可通过循环进行大量相似操作,常被用来做循环的函数主要包括:内置的头指针HEAD、续指针_NEXT以及列表指针_LIST,如网格节点gp_head/gp_next()/gp_list;单元zone_head/z_next()/z_list;连接lk_head/lk_next()/lk_list;结构单元节点nd_head /nd_next()/nd_list;结构单元s_next();接触面单元i_head/in_next()/in_list等。
FISH函数相关联信息的架构,这里主要概括如下:
GRIDPOINT实体单元节点(相关信息:坐标、位移、速度、节点力、孔隙水压力)
ZONE 实体单元(相关信息:坐标、应力、塑性状态、应变、质量、体积)
NODE 结构单元节点(相关信息:坐标、位移、速度、节点力)
SEL结构单元(相关信息:坐标、应力、应变、轴力、弯矩、剪力)上面的信息架构,清晰地表达了你需要获取的变量和什么函数相关联,如想知道实体单元应力状态,那么就找和zone相关的函数,大多数以z_开头。
最后,不得不提的是筛选过滤器。筛选器的作用是,通过一定的筛选过滤,实现仅对特定的对象进行某些命令操作,FLAC3D中可通过RANGE、GROUP或者FISH语言(如IF、LOOP、LOOP FOREACH、WHILE、CASEOF等)筛选出特定对象,进行相关操作。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删