话说旁门左道始终不及名门正派,所以强烈推荐软件包作者的BLOG: http://rli.bloghome.cn/ !!!如上课一般讲解,娓娓道来。
[AFEPack学习起点]:
The AFEPack Handbook : http://circus.math.pku.edu.cn/AFEPack/
学习AFEPack使用的“ Step by Step Tutorial”(英)
http://circus.math.pku.edu.cn/AFEPack/index-3.html#Step_by_Step_Tutorial
对照例程:/usr/local/AFEPack/example/possion_equation/possion_equation.cpp
中文解释版的: http://rli.bloghome.cn/posts/76143.html
(1)、有限元层次了解用AFEPack编程的基本程序结构
(2)、C++语言层次了解程序实现细节
源程序: /usr/local/AFEPack/library/include
/usr/local/AFEPack/library/src
参考文档: http://circus.math.pku.edu.cn/AFEPack/html/index.html
也可以用 /usr/local/AFEPack/doc$
doxygen AFEPack.cfg
在本机 /usr/local/AFEPack/doc 目录下生成以上网址提供的参考文档以便于查看
/**
Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C ++、Java、Objective-C和IDL语言,部分支持PHP、C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。
Doxgen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF参考手册。对于未归档的源文件,也可以通过配置Doxygen来提取代码结构。或者借助自动生成的包含依赖图(include dependency graphs)、继承图(inheritance diagram)以及协作图(collaboration diagram)来可视化文档之间的关系。Doxygen生成的帮助文档的格式可以是CHM、RTF、PostScript、PDF、HTML和Unix man page等。
*/
[相关准备]:(不是必须的,现学也可以,就是上手慢点,比如我:()
0、有限元
1、辅助开发工具
linux下编程
make 和 makefile
“自动化编译”
用GDB调试程序
shell编程
编辑器:Emacs or Vim(vi)
版本控制:CVS
Doxygen
Doxygen官方主页: http://www.stack.nl/~dimitri/doxygen/,从这里可以下载到最新的Doxygen发行版、源代码以及使用文档。
Doxygen使用的画出各种图形的第三方工具是AT&T实验室的 Graphviz。这是一个著名的开放源码图形绘制软件,广泛地应用于各种软件相关图形绘制,官方主页: http://www.research.att.com/sw/tools/graphviz/
2、C++编程
STL:vector
STL:list
3、相关软件
网格生成:Easymesh, ...
数据可视化软件:Matlab, OpenDX
EasyMesh 说明书(输入输出文件格式)
http://dsec.pku.edu.cn/~rli/WiKi/Easymesh.html
后附输入文件一例:转自 第一个例子:求解泊松方程
Easymesh主页: http://www-dinma.univ.trieste.it/nirftc/research/easymesh/easymesh.html
(很遗憾据说:最新的easymesh数据格式已经改动,不能用于AFEPack。看见在web上有个和新版easymesh匹配的程序用来ShowMesh,挺方便看网格的。)
学习
OpenDX:
指南:/usr/share/doc/dx/html/
练习例子:/usr/share/dx/samples/tutorial
空洞的LIST大致列完了,来点实用的triviality:
[用OpenDX看网格形状]
0、easymesh生成网格数据
编译easymesh.c生成的可执行文件复制到 /usr/bin/
$ gcc -o easymesh -O3 easymesh.c -lm
$ sudo cp ./easymesh /usr/bin/
准备好easymesh的输入文件D.d,命令行运行 $ easymesh D
生成 D.n、D.e、D.s 三个输出文件
1、用easymesh2opendx.bin将easymesh生成的数据转化为OpenDX输入数据格式 *.dx
easymesh2opendx.bin 复制到 /usr/bin/
$ sudo cp /usr/local/AFEPack/example/tools/easymesh2opendx.bin /usr/bin/
$ easymesh2opendx.bin D tnnd
2、OpenDX可视化程序可参考/usr/local/AFEPack/example/local_refine/2d/2d.net
所用Tools:
FileSelector, Import, ShowConnections, Image
[用OpenDX看计算结果],参考:
/usr/local/AFEPack/example/possion_equation/possion_equation.net
/usr/local/AFEPack/example/coefficient_possion_equation/coefficient_possion_equation.net
所用Tools:
FileSelector, Import, RubberSheet, AutoColor, Image
[用Matlab看Easymesh生成的网格形状]
/usr/local/AFEPack/example/step-7/
showmesh.m
EasyMesh需要用户手工写一个对区域进行描述的文件作为输入文件,我们使用的文件名为 D.d,其内容如下:
/begin{verbatim}
4 # 区域的顶点的个数 #
0: 0.0 0.0 0.05 1
1: 1.0 0.0 0.05 1
2: 1.0 1.0 0.05 1
3: 0.0 1.0 0.05 1
4 # 区域的边界上边的条数 #
0: 0 1 1
1: 1 2 1
2: 2 3 1
3: 3 0 1
/end{verbatim}
其中前面一个部分描述区域中的顶点,共有4个,然后每一行描述一个顶点的信息,其意义为
/begin{verbatim}
顶点的序号: x坐标 y坐标 剖分密度h 材料标识
/end{verbatim}
后面一个部分则描述区域的边界上的边的条数,共有4条,然后每一行描述一条
边的信息,其意义为
/begin{verbatim}
边的序号: 起始顶点序号 结束顶点序号 材料标识
/end{verbatim}
多嘴一句,上面这个“材料标识”看上去似乎不够直观,为什么这么翻译呢?
先不管,照猫画虎即可,以后需要特别说明的地方再说