目录
Blog Links一、前言二、GiD的程序架构三、问题类型系统四、主配置文件/.spd文件4.1 单位制4.2 截面属性4.3 局部轴五、Tcl文件5.1 GiD程序调用GiD-Tcl5.2 执行程序的命名空间六、参考文献Blog Links
DalNur | 博客总目录
GiD 实用教程
GiD 前处理 实例
GiD 自定义 简介
GiD 后处理 实例
一、前言
随着计算机技术的发展,有限元法已成为非常强大的数值模拟工具,广泛应用于各个领域。目前,比较常用的大型商用有限元程序有 ANSYS,ABAQUS,MARC,ADINA 等,由于它们是通用有限元程序,在某些领域的特殊方面(如对于应力场、渗流场、温度场的耦合问题,土体的高度非线性问题等)还存在一定程度的不足;而且在进行非线性计算时,一旦程序在运行过程中不收敛或者出现其它异常错误,用户就可能束手无策。
为此,国内外很多科研人员都开发了适合各自领域的有限元程序,但烦琐的前后处理工作又使得程序的使用非常困难。尽管现在已有一些商业软件提供了较为强大的有限元前后处理功能,但如何让自己的有限元计算程序与前后处理软件有机结合起来一直是个有待解决的问题。西班牙巴塞罗那数值研究中心开发的数值模拟前后处理软件 GiD 为解决这个问题提供了途径。(GiD 官网:)
神圣家族大教堂
GiD 软件由西班牙巴塞罗那国际工程计算方法研究中心(International Center for Numerical Methods in Engineering)开发,主要用于数值模拟过程中的前、后处理,并提供强大的用户自定义功能,它不提供求解功能。通过用户自定制功能和脚本语言 Tcl/Tk ,可实现对 GiD 的二次开发,定制出新的用户界面,使得用户在 GiD 中可以直接定义几何体、进行网格剖分、指定边界条件和载荷、定义材料参数及其它计算程序所必需的数据,然后生成一个以 ASCII 码写成的数据文件,此数据文件可以为编译后的有限元计算程序调用进行计算.有限元计算程序生成的计算结果可以直接为 GiD 所用,进人后处理模块进行结果分析。
GiD 是一个通用的、适应性强和用户界面友好的有限元前后处理软件,对许多类型的数值仿真都适用。 GID 用户界面友好,在用户准备输入数据和可视化的结果方面简单、快速、高效和精确。 GID 的输入输出格式能被定制,并会同已存在的内部软件兼容。根据数据输入和显示结果的不同菜单可以被修改以符合专门的需求和用户的需要。
GiD 最大的优点在于良好的通用性和强大的用户自定义功能,用户仅通过脚本语言编写简单的用户自定义“问题类型”(Problem type)控制文件,就可以使得 GiD 将模型输出为用户所需的特定格式,从而支持已有的计算程序。
GiD 可为数值模拟提供所需的任何输入信息,它的输入和输出格式可以定制,并与任何现有软件兼容,用户友好,界面简洁大方。GiD GUI 适用于任何语言,GiD 使用 C++,Tcl/Tk 和 OpenGL 开发的,本地和远程计算均可。
GiD 不但功能强大,而且轻便小巧,安装程序一般不超过 100 MB,安装后所占用的硬盘空间一般在 300 MB 左右。而 HyperMesh 安装包的大小在 2.5 Gb 左右,约为 GiD 的 24 倍。软件下载:GiD Professional(工程数值模拟软件) 14.0.1 。
各版本安装包大小/最大107.28MB
GiD 是一个具有通用且的的前后处理软件。不仅可以完成几何建模而且可以完成网格剖分以及存储各种信息(几何、材料、边界等)。GiD 的强大之处在于其扩充能力,将计算留给使用者完成,而 GiD 本身负责计算的可视化。GiD 的二次开发方式比较灵活,既可以使用 Fortran、C++ 这样的高级语言,也可以使用脚本语言 Tcl/Tk 。本文主要介绍 GiD 强大的自定义功能。
二、GiD的程序架构
使用者通过定义自己的问题类型来解决计算,计算数据和结果交由 GiD 处理 。由 GID 前处理器进行模型的建立、网格划分等工作,而后前处理器按照预定格式生成输入文件(input file))。用户则使用自己的问题求解器(solver)处理输入文件,进行科学计算,而后按照 GiD 要求的格式生成能够被 GiD 识别的计算结果输出文件(output file)进行可视化处理。
When GiD is to be used for a particular type of analysis, it is necessary to predefine all the information required from the user and to define the way the final information is given to the solver module. To do so, some files are used to describe conditions, materials, general data, units systems, symbols and the format of the input file for the solver. We give the name Problem Type to this collection of files used to configure GiD for a particular type of analysis.GiD has been designed to be a general-purpose Pre- and Postprocessor; consequently, the configurations for different analyses must be performed according to the particular specifications of each solver. It is therefore necessary to create specific data input files for every solver. However, GiD lets you perform this configuration process inside the program itself, without any change in the solver, and without having to program any independent utility.
GiD的运行过程
这种处理方法是 unix 系统下典型的程序处理方法,利用多个独立的小程序通过文件的输入输出做接口,从而实现大的程序。用户要做的就是定义问题类型(Problem Type),编写/改写自己的计算模块。用户定义所有需要的信息以及求解模块所需信息,然后在 GID 与自己定义的求解器模块之间通过文本文件进行信息交流,从而完成程序的整合。
三、问题类型系统
一个问题类型(Problem Type)是一个实用程序的集合,它允许用户通过图形用户界面(GUI)轻松地与之互动,并方便定义和引入进行特定计算所需的所有数据。为了使 GiD 能够为特定的分析程序准备数据,有必要对其进行定制。在 GiD 中,自定义是通过问题类型来定义的。
另外,从 GiD 的第 13 个版本开始,一个新的问题类型系统已经被实施(基于 CustomLIB 库)。尽管 GiD 仍然支持 "经典 "的问题类型系统,但它被认为是被废弃的,因为新的系统在可用性、性能和集成能力方面有明显的优势。关于废弃的经典问题类型系统的文档可以在 GiD Customization Help 手册的附件 APPENDIX B(经典问题类型系统)中找到。
利用 GiD 提供的用户自定制功能,可以定义不同的问题类型以解决不同的问题。对于每一种问题类型都要建立一个名为problem_type_name.gid 的目录(problem_type_name 可以为任意其它名称),该目录必须放在 GiD 安装目录下的 problemtypes 子目录下。
problem_type_name.gid 的目录下包含数值模拟所需要的各种文件,这些文件定义了问题类型,包含了用户自定义的前处理的全部功能,配置问题类型的主要文件如下表所示。
配置问题类型的主要文件
特别注意:各文件名中的 problem_type_name 必须保持一致,后缀亦与上表中列出的严格保持不变,如 .spd 文件中的 _deault 是必须存在且不能变更的。文本以问题类型 DalNur 为例,来简要介绍 GiD 的用户自定义功能,DalNur 程序集用来计算二维对象的质心,该程序集来自官方实例 cmas2d ,见 GiD Tutorials >> DEFINING A PROBLEM TYPE 。
问题类型DalNur的定义
在 DalNur.gid 文件夹内,我们需要定义 DalNur.xml 文件、DalNur_default.spd 文件、DalNur.tcl 文件 和 .bat 文件,其中,DalNur.xml 文件定义了一些关于问题类型的信息,例如名称、最低 GiD 版本、描述等;DalNur_default.spd 文件定义了树状界面;DalNur.tcl 文件包含处理一些 GiD 事件的 tcl 代码,以及编写输入文件的函数。.bat 文件(DalNur.win.bat 或 DalNur…unix.bat)启动求解器的脚本文件。
四、主配置文件/.spd文件
主配置文件 problem_type_name_default.spd 以 XML 格式定义,扩展名为 .spd(特定问题类型数据),其内包含了进行分析所需的所有数据的定义(除了几何图形),如边界条件、载荷、材料、载荷工况等。.spd 文件的语法规则非常简单,符合逻辑,简洁明了,易于学习和使用。此外,信息是以纯文本格式存储的。它可以在所有主要的浏览器中查看,而且它的设计是自描述性的。
XML 文档中的元素形成了一个树状结构,从 "根 "开始,到 "叶 "的分支,嵌套元素之间有不同的关系。它允许有效地聚合元素。CustomLib 利用这种分层结构,将主 XML 文件自动转换为 GiD 窗口中的物理树。XML元素可以有属性,这些属性提供关于元素的额外信息。It is necessary to modify this XML document in order to add conditions, or general data to the problem type.
.spd文件的基本组成
def create_spd_file():pass
4.1 单位制
<container n="units" pn="Units" icon="darkorange-length-18" help="Units definition"><value n="units_mesh" pn="Geometry units" unit_mesh_definition="1" icon="darkorange-length-18"/><value n="units_system" pn="Unit system" units_system_definition="1" icon="darkorange-length-18" state="hidden"><dependencies node="//*[@unit_definition or @unit_mesh_definition='1']" att1="change_units_system" v1="{@v}"/></value><container n="basic_units" pn="General units" icon="darkorange-length-18" state="normal" help="Basic units to be used in the analysis."><value n="units_length" pn="Length" unit_definition="L"/><value n="units_mass" pn="Mass" unit_definition="M"/><value n="units_force" pn="Force" unit_definition="F"/><value n="units_pressure" pn="Pressure" unit_definition="P"/><value n="units_temperature" pn="Temperature" unit_definition="Temp"/><value n="units_time" pn="Time" unit_definition="T"/><value n="ini_temp" pn="Initial temperature" v="20.0" unit_magnitude="Temp" units="°C"/></container></container>
以上 xml 代码定义了单位模块 GUI 的样式,其中,温度的初始值设置为 20 摄氏度,以上代码中,参数 pn、icon、help 和 v 可根据需要进行修改。icon 为 GUI 上显示的图标,其值为 png 格式的图片名称,该图片需放置于 problem_type_name.gid 目录内的 images 文件夹下; help 为提示信息,由此创建的 GUI 如下图左所示。
设置长度的默认单位为 mm ;设置集中力的默认单位为 kN ;设置均布压力的默认单位为 Mpa;设置温度的默认单位为摄氏度,xml 代码如下所示,单位模块的界面变为上图右。
<units><unit_magnitude n="L" pn="Length" default="m" SI_base="m" active="mm"><unit n="mm" pn="millimeter" p="1" units_system="SI"/></unit_magnitude><unit_magnitude n="F" pn="Force" default="N" SI_base="N" active="kN"><unit n="kN" pn="kilonewton" p="1" units_system="SI"/></unit_magnitude><unit_magnitude n="P" pn="Pressure" default="Pa" SI_base="Pa" active="MPa"><unit n="MPa" pn="megapascal" p="1" units_system="SI"/></unit_magnitude><unit_magnitude n="Temp" pn="Temperature" default="K" SI_base="K" active="°C"><unit n="°C" pn="degree Celsius" p="1" units_system="SI"/></unit_magnitude> </units>
单位制帮助文档
4.2 截面属性
4.3 局部轴
五、Tcl文件
5.1 GiD程序调用GiD-Tcl
##################################################GiD-Tcl procedures invoked by GiD ################################################### 函数功能:问题类型的初始化# 函数名称:InitGIDProject# 函数形参:dir# 返回值:无proc InitGIDProject {dir } {DalNur::SetDir $dir ; # store to use it later/设置工作目录DalNur::ModifyMenus ; # 修改Data菜单gid_groups_conds::open_conditions menu}# 函数功能:修改显示语言# 函数名称:ChangedLanguage# 函数形参:language# 返回值:无proc ChangedLanguage {language } {DalNur::ModifyMenus ;# to customize again the menu re-created for the new language}# 函数功能:检查environment后创建GiDProject计算文件/.dat文件# 函数名称:AfterWriteCalcFileGIDProject# 函数形参:filename errorflag# 返回值:无proc AfterWriteCalcFileGIDProject {filename errorflag } {if {![info exists gid_groups_conds::doc] } {WarnWin [= "Error: data not OK"]return} set err [catch {DalNur::WriteCalculationFile $filename } ret]if {$err } {WarnWin [= "Error when preparing data for analysis (%s)" $::errorInfo]set ret -cancel-}return $ret}
5.2 执行程序的命名空间
##################################################namespace implementing procedures ################################################### 创建新命名空间# 空间名称:DalNur# 在命名空间DalNur中创建变量problemtype_dir# 且变量problemtype_dir暂未赋值namespace eval DalNur {variable problemtype_dir }# 函数功能:设置工作目录# 函数名称:DalNur::SetDir# 函数形参:dir# 返回值:无proc DalNur::SetDir {dir } {variable problemtype_dirset problemtype_dir $dir}# 函数功能:获取工作目录# 函数名称:DalNur::GetDir# 函数形参:无# 返回值:工作目录proc DalNur::GetDir {} {variable problemtype_dirreturn $problemtype_dir}# 函数功能:修改GiD/Data菜单# 函数名称:DalNur::ModifyMenus# 函数形参:无# 返回值:无proc DalNur::ModifyMenus {} {if {[GidUtils::IsTkDisabled] } {return}foreach menu_name {Conditions Interval "Interval Data" "Local axes"} {GidChangeDataLabel $menu_name ""} GidAddUserDataOptions --- 1 GidAddUserDataOptions [= "Data tree"] [list GidUtils::ToggleWindow CUSTOMLIB] 2set x_path {/*/container[@n="Properties"]/container[@n="materials"]}GidAddUserDataOptions [= "Import/export materials"] [list gid_groups_conds::import_export_materials .gid $x_path] 3GiDMenu::UpdateMenus}
六、参考文献
[1]. 在GID程序内整合有限元本体程序的研究.吕艳萍,白凤军,潘钦锋,陈福全.
[2]. GID 用户界面的定制. 吴盖,游启升,周晓明,陈浩.
如果觉得《GiD 自定义 简介》对你有帮助,请点赞、收藏,并留下你的观点哦!