好消息! FLAC2D 9.0及FLAC3D 9.0正式释出罗! ...
首页
1
FLAC自学
2
第一章 概述
3
1.1 FLAC2D 9.0版与FLAC 8.1版的差异与互通4
https://www.jscic.com.tw/custom_132925.html 1.1 FLAC2D 9.0版与FLAC 8.1版的差异与互通 1.1 FLAC2D 9.0版与FLAC 8.1版的差异与互通 第一章 概述             FLAC2D是一个源自於二维有限差分的有限体积法(Finite Volume Method),它的前身称为FLAC。自从问世以来FLAC即采用所谓的 I、J 网格系统,亦即其格点及格区(Zone)的识别,皆以二个编号来表示,历经40年之后软体开发者Itasca Consulting Group决定将FLAC改为与其它软体包括FLAC3D、3DEC及PFC一致,只用一个编码来识别格点与格区,如此有利於分享其它软体的资源并可无障碍地进行彼此间的耦合计算。这个识别编号系统的改变对FLAC而言是一个彻底的大改造,因为FLAC的整个内部资料结构、运算架构、图形介面、Fish资料库等等,都是建构在这个基础上,一个崭新的FLAC经过大改造后终於问世了,因此开发者决定将其改名为FLAC2D并以9.0版为其出发的版本。   FLAC2D是FLAC3D的2D版本 FLAC2D与FLAC3D二者之间的差异绝大部分仅在於所面对的是二或三个维度,它们所使用的指令及程式的运作方式几乎是一模一样的,因此熟悉了FLAC2D也等同於具备了使用FLAC3D的能力。   图形介面或撰写指令           对一般数值分析的应用而言,主要的工作流程可以划分为二个大项(1)建模(2)后续分析。建模的工作在FLAC的早期版本是以指令为之,以撰写指令的方式来建模是件耗费时间的事,尤其是除错的工作更是让人深感困扰 ; FLAC在5.0版之后容许使用图形介面来建模就显得轻松许多。至於后续分析的工作究竟是以图形介面或是使用指令的方式来进行,何者为优就见仁见智了。就作者的看法是各有其优缺点,图形介面的优点是较为直觉式的,对於不常用的人而言显得较为简单,不容易出错但却显得繁琐,图形介面限制了分析之灵活性,让FLAC强大的分析能力大打折扣,因此后期的FLAC版本即便是可以图形介面来进行所有的分析程序,在许多情况下仍需要使用FISH来扩展其灵活性及强大功能,但别忘了,FISH是一种以指令撰写的方式来表现的 ; 而使用指令分析的好处是写一行指令就可以相当於使用图形介面的好几个步骤,而在分析的灵活性上可说是无所限制的,这对常用的人而言是如鱼得水,对以英文为母语的人而言,指令就是他们平常的语言,但是对非英语系的人而言,指令是需要特别去记忆的单字,尤其对於不常用的人而言,要回复这个记忆有可能需要去查使用手册,这显然是个令人困扰的事。 FLAC2D 的开发者选择以图形介面来作建模工作,并选择以指令的方式来做后续的分析工作,这个意思是图形介面的「终点」为建立几何模型及指派岩土的参数,这么做乃是为了要去除繁琐的建模工作却仍能保留强大的分析能力。   指令速查 - 本书的重要附录 为了让读者能够更容易查得所需指令,我们在本书的后面,特别编了一个「指令速查」的附录,该指令速查附录是以「您要做什么 ?」为出发点,并附上例句供读者引用。   1.1         FLAC2D 9.0版与FLAC 8.1版的差异与互通   FLAC2D 的开发旨在为 FLAC2D 和 FLAC3D 的使用者提供一致的体验。这必然意味著 FLAC2D 9.0 与其上一代的版本 FLAC 8.1(及更早版本)有著重大变化。尽管计算的方法相同(使用显式求解逻辑及有限体积网格化,且绝大多数FLAC功能都在FLAC2D中重现),但使用者与程式互动的方式却大相迳庭 :   IJ空间 最显著的区别是FLAC2D不一定需要建构如旧版本所要求的如下图显示的结构化网格。格点和格区不由其 i、j 座标标识而是由单一的ID作标识。此外,由於 FLAC2D 不使用 i、j 空间,因此可以创建非结构化网格,如下右图所示。这使得构建网格变得更加容易,而不必非得形成排列整齐的4边型网格,这对几何复杂的格网建模工作而言著实是个佳音。                   范围 (Range) 在旧版的FLAC 中,格区和格点由其 i、j 座标标识。因此,例如,要固定模型左侧的格点,您可以给出如下指令:                   fix x i = 1 在 FLAC2D 中,标识物件时使用一个关键字Range。由於没有 i、j,因此通常用座标或群组(group)名称来标识物件。在 FLAC2D 中可能等同於上述的指令如下:                zone gridpoint fix velocity-x range position-x = 0 在 FLAC2D 中为一个格区的群组指定莫尔-库仑材料参数的指令可能如下:         zone model mohr-coulomb range group ‘sand’   Fish 因不使用 i,j 空间,因此FLAC2D需要以不同的方法来识别 FISH 中的格区和格点。在旧版的FLAC 中涉及需涵盖所有格点的回圈可能如下所示: loop i (1,igp)          loop j (1,jgp)             ; print x coordinate             ii = out(x(i,j))          end_loop end_loop   而FLAC2D对同样的Fish则以下面的方式来呈现: loop foreach gp gp.list          io.out(gp.position.x(gp)) end_loop   FLAC2D中,所有格点都储存在一个清单里,并且使用 foreach 来轻松的进行回圈运作。而格点则由用户定义的变数 gp (这是gridpoint的简写)来辨识,而不是以 i 和 j 来标识。   指令和 FISH 语法 FLAC2D 中的所有指令都尽量符合以下的标准模式:   名词 - 动词 - 选项(option) - 修饰词(modifier) - 范围(range)   这样做是为了能清楚地了解所针对的对象,并且让程式之间能够耦合(例如 zone gridpoint fix 是不同於 ball fix (注: ball是另一个PFC程式的基本单元)。指令(Command)具有使用新的连字符语法的关键字(例如 velocity-x),该语法记录和列出完整的指令以便於理解,但仍允许那些不想键入整个单字的人使用缩写。例如 : zone initialize stress-xx 可以写为zon ini s-xx。 此外在FLAC2D中,内建的Fish之命名约定也改变为在要查询或变更的事物类型后跟著一个句点( . )后再接量值。例如,zone.model 或 gp.disp。这大大提高了函式名称的清晰度,并允许编辑器在您键入时自动突显正确和不正确的内建函式名称。           FLAC2D的Fish添加了许多新的函式类型,包括布林(Boolean)、张量、矩阵、清单(List)或映射(Map),而多线程的(Multithreaded) FISH 也可提供支援。           FISH 内建函式适用於 FLAC2D 中所有的量值。因此不再需要为了进入记忆体来获取该些量值而增加额外的指令,因此在FLAC2D中不再有imem及fmem这种指令及相关的规定,FLAC的资料结构的量值可以简单的指令即可取得,例如要取得一个结构元素的ID只需要使用struct.id 而不需要再写复杂的程式码如 “imem(sel+$kelid)”; 要获得节理的剪切位移FLAC与FLAC2D分别为:   sjdisp = fmem(pa+$kidasd) ; FLAC   sjdisp = interface.node.disp.shear(pa) ; FLAC2D 最后:在FLAC2D中,材料属性是直接分配给物件(格区、界面元素、结构元素),不像 FLAC 是采用间接分配的方式。譬如FLAC会将属性分配给一个编号,然后再将材料编号分配给一个物件:   struct prop 1001 e 2e11 area 0.006 I 2e-4   struct beam prop 1001 在FLAC2D中则是:   struct beam prop young 2e11 cross-sectional-area 0.006 moi 2e-4   FLAC2D的线上使用手册中亦提供了FLAC 8.1版本之指令与FLAC2D之指令对照表,参照这些对照表可让习惯8.1版本之读者更容易查询转换。此外针对Fish的语法的转换,线上的使用手册亦提供了对照表供用户查询。读者可藉由点击主要工具列最右边的[Help] --> 视窗的右侧即会出现该使用手册,点击其左侧边的     图示 可展开使用手册的目录如下图 ,开启最底下的二项即可开启前述之各项对照表。   请注意: “ --> ”图示      : 在本书中意指“点击”或“进行下一个步骤” “按钮”或“标签”: 在本书中皆以中括号 [ ] 含括文字表示,例如 [Help] 指的是 Help这个标签 ; 在选单中的“选项”,则是以 < > 符号含括文字表示。例如 [Help] --> 意指「先按 Help标签再於其下拉选单中点击选取 Help and Documentation这个选项」    
https://www.jscic.com.tw/ 枫政科技工程有限公司

首页 FLAC自学 > 第一章 概述 > 1.1 FLAC2D 9.0版与FLAC 8.1版的差异与互通

第一章 概述

 

          FLAC2D是一个源自於二维有限差分的有限体积法(Finite Volume Method),它的前身称为FLAC。自从问世以来FLAC即采用所谓的 I、J 网格系统,亦即其格点及格区(Zone)的识别,皆以二个编号来表示,历经40年之后软体开发者Itasca Consulting Group决定将FLAC改为与其它软体包括FLAC3D、3DEC及PFC一致,只用一个编码来识别格点与格区,如此有利於分享其它软体的资源并可无障碍地进行彼此间的耦合计算。这个识别编号系统的改变对FLAC而言是一个彻底的大改造,因为FLAC的整个内部资料结构、运算架构、图形介面、Fish资料库等等,都是建构在这个基础上,一个崭新的FLAC经过大改造后终於问世了,因此开发者决定将其改名为FLAC2D并以9.0版为其出发的版本。

 

FLAC2D是FLAC3D的2D版本

FLAC2D与FLAC3D二者之间的差异绝大部分仅在於所面对的是二或三个维度,它们所使用的指令及程式的运作方式几乎是一模一样的,因此熟悉了FLAC2D也等同於具备了使用FLAC3D的能力。

 

图形介面或撰写指令

          对一般数值分析的应用而言,主要的工作流程可以划分为二个大项(1)建模(2)后续分析。建模的工作在FLAC的早期版本是以指令为之,以撰写指令的方式来建模是件耗费时间的事,尤其是除错的工作更是让人深感困扰 ; FLAC在5.0版之后容许使用图形介面来建模就显得轻松许多。至於后续分析的工作究竟是以图形介面或是使用指令的方式来进行,何者为优就见仁见智了。就作者的看法是各有其优缺点,图形介面的优点是较为直觉式的,对於不常用的人而言显得较为简单,不容易出错但却显得繁琐,图形介面限制了分析之灵活性,让FLAC强大的分析能力大打折扣,因此后期的FLAC版本即便是可以图形介面来进行所有的分析程序,在许多情况下仍需要使用FISH来扩展其灵活性及强大功能,但别忘了,FISH是一种以指令撰写的方式来表现的 ; 而使用指令分析的好处是写一行指令就可以相当於使用图形介面的好几个步骤,而在分析的灵活性上可说是无所限制的,这对常用的人而言是如鱼得水,对以英文为母语的人而言,指令就是他们平常的语言,但是对非英语系的人而言,指令是需要特别去记忆的单字,尤其对於不常用的人而言,要回复这个记忆有可能需要去查使用手册,这显然是个令人困扰的事。

FLAC2D 的开发者选择以图形介面来作建模工作,并选择以指令的方式来做后续的分析工作,这个意思是图形介面的「终点」为建立几何模型及指派岩土的参数,这么做乃是为了要去除繁琐的建模工作却仍能保留强大的分析能力。

 

指令速查 - 本书的重要附录

为了让读者能够更容易查得所需指令,我们在本书的后面,特别编了一个「指令速查」的附录,该指令速查附录是以「您要做什么 ?」为出发点,并附上例句供读者引用。

 

1.1         FLAC2D 9.0版与FLAC 8.1版的差异与互通

 

FLAC2D 的开发旨在为 FLAC2D FLAC3D 的使用者提供一致的体验。这必然意味著 FLAC2D 9.0 与其上一代的版本 FLAC 8.1(及更早版本)有著重大变化。尽管计算的方法相同(使用显式求解逻辑及有限体积网格化,且绝大多数FLAC功能都在FLAC2D中重现,但使用者与程式互动的方式却大相迳庭 :

 

IJ空间

最显著的区别是FLAC2D不一定需要建构如旧版本所要求的如下图显示的结构化网格。格点和区不由其 ij 座标标识而是由单一的ID作标识。此外,由於 FLAC2D 不使用 ij 空间,因此可以创建非结构化网格,如下右图所示。这使得构建网格变得更加容易,而不必非得形成排列整齐的4边型网格,这对几何复杂的格网建模工作而言著实是个佳音。

 

5bbbcf3c7fefd68af24a39f124aeb9fc.JPG

  

      

 

 4a948fb1e59e7312e60a9276e31da22c.JPG

 

范围 (Range)

在旧版的FLAC 中,格区和格点由其 ij 座标标识。因此,例如,要固定模型左侧的格点,您可以给出如下指令:

                  fix x i = 1

FLAC2D 中,标识物时使用一个关键字Range。由於没有 ij,因此通常用座标或(group)名称来标识物。在 FLAC2D 中可能等同於上述的指令如下:

               zone gridpoint fix velocity-x range position-x = 0

FLAC2D 中为一个格区的群组指定莫尔-库仑材料参数的指令可能如下:

        zone model mohr-coulomb range group ‘sand’

 

Fish

因不使用 ij 空间,因此FLAC2D需要以不同的方法来识别 FISH 中的格区和格点。在旧版的FLAC 中涉及需涵盖所有格点的回圈可能如下所示:

loop i (1,igp)

         loop j (1,jgp)

            ; print x coordinate

            ii = out(x(i,j))

         end_loop

end_loop

 

而FLAC2D对同样的Fish则以下面的方式来呈现:

loop foreach gp gp.list

         io.out(gp.position.x(gp))

end_loop

 

FLAC2D中,所有格点都储存在一个清单里,并且使用 foreach 来轻松的进行回圈运作。而格点则由用户定义的变数 gp (这是gridpoint的简写)来辨识,而不是以 i j 来标识。

 

指令和 FISH 语法

FLAC2D 中的所有指令都尽量符合以下的标准模式:

 

名词 - 动词 - 选项(option) - 修饰词(modifier) - 范围(range)

 

这样做是为了能清楚地了解所针对的对象,并且让程式之间能够耦合(例如 zone gridpoint fix 是不同於 ball fix (注: ball是另一个PFC程式的基本单元)。指令(Command)具有使用新的连字符语法的关键字(例如 velocity-x),该语法记录和列出完整的指令以便於理解,但仍允许那些不想键入整个单字的人使用缩写。例如 : zone initialize stress-xx 可以写为zon ini s-xx

此外在FLAC2D中,内建的Fish之命名约定也改变为在要查询或变更的事物类型后跟著一个句点( . )后再量值。例如,zone.model gp.disp。这大大提高了函式名称的清晰度,并允许编辑器在您键入时自动突显正确和不正确的内建函式名称。

          FLAC2D的Fish添加了许多新的函式类型,包括布林(Boolean)、张量、矩阵、清单(List)或映射(Map),而多线程的(Multithreaded) FISH 也可提供支援。

          FISH 内建函式适用於 FLAC2D 中所有的量值。因此不再需要为了进入记忆体来获取该些量值而增加额外的指令,因此在FLAC2D中不再有imem及fmem这种指令及相关的规定,FLAC的资料结构的量值可以简单的指令即可取得,例如要取得一个结构元素的ID只需要使用struct.id 而不需要再写复杂的程式码如 “imem(sel+$kelid)”; 要获得节理的剪切位移FLAC与FLAC2D分别为

 

sjdisp = fmem(pa+$kidasd) ; FLAC

 

sjdisp = interface.node.disp.shear(pa) ; FLAC2D

最后:在FLAC2D中,材料属性是直接分配给物件(区、界面元素、结构元素),不像 FLAC 是采用间接分配的方式。譬如FLAC会将属性分配给一个编号,然后再将材料编号分配给一个物件:

 

struct prop 1001 e 2e11 area 0.006 I 2e-4

 

struct beam prop 1001

在FLAC2D中则是:

 

struct beam prop young 2e11 cross-sectional-area 0.006 moi 2e-4

 

FLAC2D的线上使用手册中亦提供了FLAC 8.1版本之指令与FLAC2D之指令对照表,参照这些对照表可让习惯8.1版本之读者更容易查询转换。此外针对Fish的语法的转换,线上的使用手册亦提供了对照表供用户查询。读者可藉由点击主要工具列最右边的[Help] --> 视窗的右侧即会出现该使用手册,点击其左侧边的  e86acfbcf9d9a35552f4c976a1a7f0fc.png   图示 可展开使用手册的目录如下图 ,开启最底下的二项即可开启前述之各项对照表。

 

请注意:

-->图示      :

在本书中意指“点击”或“进行下一个步骤”

按钮”或“标签”:

在本书中皆以中括号 [ ] 含括文字表示,例如 [Help] 指的是 Help这个标签 ; 在选单中的“选项”,则是以 < > 符号含括文字表示。例如 [Help] --> 意指「先按 Help标签再於其下拉选单中点击选取 Help and Documentation这个选项」

 66ce4ea9229954c0bb2709cd3f703885.JPG