level 7
FEPG系统是利用用户填写的几个文件来生成有限元计算源程序的。
这些有限元的源程序,主要由五个元件程序组成,start初始化程序,bft时间更新程序,e单元计算程序,u后处理计算程序,solv求解器。其中e单元计算程序需要调用单元子程序。
用户填写的文件主要是GCN文件、GIO文件、PDE文件、PRE文件。
GCN文件包含算法文件名(NFE文件名)和命令流文件。利用 NFE文件,FEPG系统可产生单元计算程序(即E元件程序)和后处理计算程序(即U元件程序);利用命令流文件,FEPG系统可产生运行有限元程序所需要的批命令文件。
2013年11月14日 01点11分
3
level 7
GIO文件包含PDE文件名。利用 GCN和GIO文件,FEPG系统可产生单元计算程序(即E元件程序)和后处理计算程序(即U元件程序) 。
Pde(Cde,Vde,Fbc)文件的主要内容是微分方程表达式。利用这些文件,系统可自动生成计算单元刚度矩阵,单元质量矩阵,单元阻尼矩阵和单元荷载向量等子程序。
2013年11月14日 01点11分
4
level 7
PRE文件是前后处理接口文件。利用GCN,GIO,PDE,系统会生成一个pre的原型文件,用户一般只需要修改原型文件中很少的部分即可(如材料参数)。利用PRE文件,FEPG系统可以生成与FEPG.GID前后处理子系统进行接口的文件。
那么,如果哪个元件程序没生成或生成的有问题,大家大概可以知道是那个文件出的问题,直接去查那个文件的填写吧!
2013年11月14日 01点11分
5
level 7
调试FEPG的填写文件---PDE篇
大家知道使用FEPG,我们需要填写PDE,GIO,GCN等文件,来生成计算的源程序。
但写好这些文件,如何调试一直是个大问题,谁也不能保证自己写的文件,完全无误。
在这里,我与大家交流一下心得。不当之处,欢迎大家指出。我这算抛砖引玉了!
2013年11月14日 01点11分
6
level 7
一般填写PDE文件,先找一个与自己问题比较相近的模版,然后再做修改,这样能保证其中的一些系统关键字不会敲错。
写完pde文件后,一般PDE中的shap,gaus等是%1,%2,%3的形式,可以将其改成那些真正的单元格式如q 4 q等,然后,运行pde pde前缀文件名的命令来生成单元子程序的.for和.obj文件,主要是用来检测pde文件书写是否有错误,注意看其中的输出,看看是否有错误,.obj文件是否生成。
如果没问题,说明pde文件填写基本正确,改回%1,%2,%3的形式,同时将那些生成的文件删除。注意网络版用户,在运行pde命令之前,要将pde文件上串到服务器端(可以用upload命令)。
大家,先试试。
2013年11月14日 01点11分
7
level 7
调试FEPG的填写文件---PDE篇(续1)
先看看第一个defi信息段容易出现的问题。
我们来看看下面的一个例子
2013年11月14日 01点11分
10
level 7
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
2013年11月14日 01点11分
11
level 7
上面的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信息段应该写成
2013年11月14日 01点11分
12
level 7
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行的位置变化。
2013年11月14日 01点11分
13
level 7
2,不知大家有没有疑问,time这个变量是从哪里来的?
在PDE文件中,如果有mate行,系统在生成单元子程序的过程中,除了em,ed等那些变量外,还会增加time、dt、imate、ielem和nelem等五个变量(4.2中是前面四个),它们分别表示当前时刻(time)、时间步长(dt)、材料号(imate)、单元号(ielem)和单元总数(nelem)(4.2中ielem为单元总数)。所以,在这个文件中mate行要写在
2013年11月14日 01点11分
14
level 7
$C6if (time.le.0.1) then
$C6 C=time+1.
$C6 else
$C6 C=1
$C6 endif
之前,否则,time还没赋值呢。
2013年11月14日 01点11分
16
level 7
3,imate是材料号,就是在gid中,每种单元类型添加的那个材料号,利用这个号,
我们可以对不同的材料做处理,比如有一种非线性材料,一种线性材料,线性材料的参数
我们可以在pre文件中给出,非线性材料,我们可以在pde文件中利用一个fortran的subroutine给出,然后用这个imate把它区分开。
2013年11月14日 01点11分
17
level 7
4,注意不要将defi信息段中的那些系统关键字写错了,如gaus写成guas呀!
5,大家注意,defi信息段中的coef(耦合变量名)和coor(坐标变量名),在defi段中只是一个名字,还没有赋值,当我们添加fortran程序要用到这些变量时,要在stif或func信息段来添加那些fortran程序,这时,这些变量才有值切记切记。
2013年11月14日 01点11分
18
level 7
6,在执行计算过程中,如果e单元计算程序,出现除零或数组超阶错误,有可能有几个原因:
a . 前处理划分网格的单元类型和计算时的单元类型对不上。如前处理划分的网格是三角形,而生成计算程序时的单元类型是四边形。
b . pde文件中,添加的fortran程序中会出现除零的情况。fepg生成的fortran77的源程序,对变量名有一些默认的规定,如实形数是首字母a-h,o-z,而整形数是i-n,如ai如果不规定它的数据类型,是实形数,而ia是整形数。那么在添加fortran程序时,不要把实形数取成整形数的名字,这样很容易出现除零错误的。
2013年11月14日 01点11分
19
level 7
要注意用户定义的变量名(在PDE文件中),不要与这几个系统提供的变量名发生冲突呀!切记!!如在coef行中,书写了个变量dt.
另外,填写pde文件时,那些","";"等符号不要是中文的符号呀!否则编译不成obj了。
2013年11月14日 01点11分
20
level 7
在虚功方程中有边界积分项的情况下,我们需要填写fbc文件。如上图。
它的填写方式与pde很相似,除了要注意pde填写时会遇到的问题,还需要注意如下
几个问题:
2013年11月14日 02点11分
22
level 7
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的后面即可。
2013年11月14日 02点11分
23