找回密码
 注册
Simdroid-非首页
查看: 379|回复: 4

调试FEPG的填写文件

[复制链接]
发表于 2006-5-22 18:09:00 | 显示全部楼层 |阅读模式 来自 大连理工大学
调试FEPG的填写文件---总论篇




FEPG系统是利用用户填写的几个文件来生成有限元计算源程序的。
这些有限元的源程序,主要由五个元件程序组成,start初始化程序,bft时间更新程序,e单元计算程序,u后处理计算程序,solv求解器。其中e单元计算程序需要调用单元子程序。
用户填写的文件主要是GCN文件、GIO文件、PDE文件、PRE文件。
GCN文件包含算法文件名(NFE文件名)和命令流文件。利用 NFE文件,FEPG系统可产生单元计算程序(即E元件程序)和后处理计算程序(即U元件程序);利用命令流文件,FEPG系统可产生运行有限元程序所需要的批命令文件。
GIO文件包含PDE文件名。利用 GCN和GIO文件,FEPG系统可产生单元计算程序(即E元件程序)和后处理计算程序(即U元件程序) 。
Pde(Cde,Vde,Fbc)文件的主要内容是微分方程表达式。利用这些文件,系统可自动生成计算单元刚度矩阵,单元质量矩阵,单元阻尼矩阵和单元荷载向量等子程序。
PRE文件是前后处理接口文件。利用GCN,GIO,PDE,系统会生成一个pre的原型文件,用户一般只需要修改原型文件中很少的部分即可(如材料参数)。利用PRE文件,FEPG系统可以生成与FEPG.GID前后处理子系统进行接口的文件。
那么,如果哪个元件程序没生成或生成的有问题,大家大概可以知道是那个文件出的问题,直接去查那个文件的填写吧!
上面的图是缩写
 楼主| 发表于 2006-5-22 18:10:21 | 显示全部楼层 来自 大连理工大学
Simdroid开发平台
顺便说明一下,这几个帖子都是转发的

调试FEPG的填写文件---PDE篇(续1)



先看看第一个defi信息段容易出现的问题。
我们来看看下面的一个例子
DEFI
DISP u,v
COOR x,y
COEF ua,va,fu,fv,gx,gy
FUNC funa,funb,func
MATE em;ed;eqx;eqy;2.5e-7;1.0e-6;0.0;0.0;
SHAP %1,%2
GAUS %3
MASS %1;em
DAMP %1;ed
LOAD eqx;eqy
$C6 dimension d(3,3),dp(3,3),p(3),DE(3),DV(3)
$C6 EXTERNAL PRAGER
$C6 if (time.le.0.1) then
$C6 C=time+1.
$C6 else
$C6 C=1
$C6 endif
上面的defi信息段有什么问题吗???  
1,这个defi信息段中有插入fortran源程序的几行,其中有关于变量定义的,如
$C6 dimension d(3,3),dp(3,3),p(3),DE(3),DV(3)
$C6 EXTERNAL PRAGER
而这个defi信息段也有mate行,注意,mate行在生成单元子程序的for文件时,是一些赋值语句,在fortran77的语法中,变量定义要放在语句之前。所以,这个defi信息段应该写成
DEFI
DISP u,v
COOR x,y
COEF ua,va,fu,fv,gx,gy
FUNC funa,funb,func
SHAP %1,%2
GAUS %3
MASS %1;em
DAMP %1;ed
LOAD eqx;eqy
$C6 dimension d(3,3),dp(3,3),p(3),DE(3),DV(3)
$C6 EXTERNAL PRAGER
MATE em;ed;eqx;eqy;2.5e-7;1.0e-6;0.0;0.0;
$C6 if (time.le.0.1) then
$C6 C=time+1.
$C6 else
$C6 C=1
$C6 endif
才行。注意mate行的位置变化。  
2,不知大家有没有疑问,time这个变量是从哪里来的?  
在PDE文件中,如果有mate行,系统在生成单元子程序的过程中,除了em,ed等那些变量外,还会增加time、dt、imate、ielem和nelem等五个变量(4.2中是前面四个),它们分别表示当前时刻(time)、时间步长(dt)、材料号(imate)、单元号(ielem)和单元总数(nelem)(4.2中ielem为单元总数)。所以,在这个文件中mate行要写在
$C6 if (time.le.0.1) then
$C6 C=time+1.
$C6 else
$C6 C=1
$C6 endif
之前,否则,time还没赋值呢。
3,imate是材料号,就是在gid中,每种单元类型添加的那个材料号,利用这个号,
我们可以对不同的材料做处理,比如有一种非线性材料,一种线性材料,线性材料的参数
我们可以在pre文件中给出,非线性材料,我们可以在pde文件中利用一个fortran的subroutine给出,然后用这个imate把它区分开。
4,注意不要将defi信息段中的那些系统关键字写错了,如gaus写成guas呀!  
5,大家注意,defi信息段中的coef(耦合变量名)和coor(坐标变量名),在defi段中只是一个名字,还没有赋值,当我们添加fortran程序要用到这些变量时,要在stif或func信息段来添加那些fortran程序,这时,这些变量才有值切记切记。  
6,在执行计算过程中,如果e单元计算程序,出现除零或数组超阶错误,有可能有几个原因:
  a . 前处理划分网格的单元类型和计算时的单元类型对不上。如前处理划分的网格是三角形,而生成计算程序时的单元类型是四边形。
  b . pde文件中,添加的fortran程序中会出现除零的情况。fepg生成的fortran77的源程序,对变量名有一些默认的规定,如实形数是首字母a-h,o-z,而整形数是i-n,如ai如果不规定它的数据类型,是实形数,而ia是整形数。那么在添加fortran程序时,不要把实形数取成整形数的名字,这样很容易出现除零错误的。
 楼主| 发表于 2006-5-22 18:10:59 | 显示全部楼层 来自 大连理工大学
调试FEPG的填写文件---PDE篇



  大家知道使用FEPG,我们需要填写PDE,GIO,GCN等文件,来生成计算的源程序。
但写好这些文件,如何调试一直是个大问题,谁也不能保证自己写的文件,完全无误。
在这里,我与大家交流一下心得。不当之处,欢迎大家指出。我这算抛砖引玉了!  
  一般填写PDE文件,先找一个与自己问题比较相近的模版,然后再做修改,这样能保证其中的一些系统关键字不会敲错。
  写完pde文件后,一般PDE中的shap,gaus等是%1,%2,%3的形式,可以将其改成那些真正的单元格式如q 4 q等,然后,运行pde pde前缀文件名的命令来生成单元子程序的.for和.obj文件,主要是用来检测pde文件书写是否有错误,注意看其中的输出,看看是否有错误,.obj文件是否生成。
  如果没问题,说明pde文件填写基本正确,改回%1,%2,%3的形式,同时将那些生成的文件删除。注意网络版用户,在运行pde命令之前,要将pde文件上串到服务器端(可以用upload命令)。
  大家,先试试。

大家知道,pde文件是用来生成单元子程序的,生成的单元子程序的subroutine的一般是aeq4或all2或aeq4g2等的名字,aeq4其中a表示场的标示符,e表示体单元,q表示四边形单元,4表示四节点,all2中第一个l表示边界单元,第二个l表示线单元,2表示二节点,aeq4g2中g表示高斯点积分,后面的2表示每个方向2节点的高斯点。知道这些文件的名字,如果用gio命令生成程序时,如果出现这些名字的obj文件找不到,基本是pde文件写的有问题了。
 楼主| 发表于 2006-5-22 18:11:34 | 显示全部楼层 来自 大连理工大学
调试FEPG的填写文件---PDE篇(续2,关于fbc)




在虚功方程中有边界积分项的情况下,我们需要填写fbc文件。如上图。
它的填写方式与pde很相似,除了要注意pde填写时会遇到的问题,还需要注意如下
几个问题:
1.对于边界上的积分,fbc文件一般是定义在局部坐标系下的,那么它的coor比体单元的
coor少一维,coor行的变量是局部坐标系下的坐标值,如果我们在填写stif或load想用整体坐标值怎么办呢?
    我们可以在fbc文件中defi信息段中填写coef gx gy行(二维问题,三维是gx,gy,gz),其中gx是x方向的坐标值,gy是y方向的坐标值。我们就可以在stif和load中用了。如果coef行中有其他的变量,如coef un,那么将gx,gy填写在un的后面即可。
2.默认情况下,边界力的方向也是局部坐标系下定义的,而局部坐标系是边界线上(二维情况)的第一个节点和第二个节点组成x轴,垂直它的是y轴,所以,在固体力学中,fy(二维)才是法向力(三维就是fz了)。
3,切向力就比较麻烦,这主要是gid中导出来的边界单元的节点排号,可能比较乱,有可能造成局部坐标系的x轴方向不一致。如果你加了个切向力,发现位移结果很不合理,你可以查查前处理的数据,主要是边界单元的节点号。
4, 如果,我们的边界力的方向在总体坐标系下比较好确定,比如边界力是加在了总体坐标系下的x方向。那么我们可以把边界力在总体坐标系下给出,这要修改边界单元对应的glt文件(单元坐标变换文件,是将局部坐标系下的单元子程序,变成总体坐标系下的文件,用户一般不需要填写,如果我们有fbc文件,运行gio命令,系统会生成对应的glt文件,然后我们可以修改它),在glt其中的defi信息段,添加load=G,然后,运行glt命令将这个glt文件变成.for,在运行let命令连接到e元件程序里即可。
 楼主| 发表于 2006-5-22 18:19:40 | 显示全部楼层 来自 大连理工大学

调试FEPG的填写文件

这个是总体程序系统图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 21:10 , Processed in 0.040104 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表