博文

OpenFOAM相关资源(2010-11-25 15:38:00)

摘要:(1)OpenFOAM官方网站   www.openfoam.org   该网站你可以了解openfoam的基本信息,下载最近版本的OpenFOAM。 (2)OpenFOAM dev版本网站   http://openfoam-extend.wiki.sourceforge.net   该网站为openfoam dev的网站,你可以看到最新的dev版本修改相关信息。该网站实时对dev代码进行更新。 (3)OpenFOAM论坛   http://www.cfd-online.com/Forums/openfoam/   该网站为OpenFOAM的官方论坛,如果有关于openfoam的任何问题,都可以在这论坛上询问。当遇到问题时,不妨直接在该论坛上查询。你遇到的问题别人可能也遇到过,并且在论坛上已经解决。 (4)openfoamwiki   http://openfoamwiki.net/   该网站上有一些openfoam相关的一些说明,比如求解器、openfoam里面的一些前处理后处理功能等。 (5)jasak个人主页   http://www.h.jasak.dial.pipex.com/     该网站为jasak的个人主页,会公布一些关于openfoam的一些workshop,还有一些jasak的发表的paper (6) http://powerlab.fsb.hr/ped/kturbo/OpenFOAM/     这个上面包含有一些openfoam的一些workshop的一些资料。很多paper还有基于openfoam的博士论文。 (7)http://www.foamcfd.org/      上面包括几乎所有基于of的博士论文,遗憾的是国内可能上不了这个网站 (8)流体中文网OpenFOAM社区      http://www.cfluid.com/bbs/forumdisplay.php?fid=86      很可惜,该网站不......

阅读全文(5521) | 评论:0

[备忘]理解dictionary的先决条件(2008-10-31 11:39:00)

摘要:在看dictionary的构造函数时碰到以下问题: 由于dictionary派生自IDLList<entry>,所以要想理解dictionary首先要理解IDLList<entry>相关的一系列类,这包括:ILList, UILList以及DLListBase类。......

阅读全文(3209) | 评论:0

关于OF中的输入输出系统(2008-10-29 16:59:00)

摘要:在OF中引入了大量的自定义的变量类型(这里面也包括各种类的对象变量),要对这些变量进行输入与输出对于一个比较大的系统(OF可以算是一个比较大的系统了)来说都要有一个统一的格式,这样有了统一的标准,在这个平台上进行新的扩展就变得容易了。所以OF中自己构造了一个非常方便而且考虑周到的I/O系统,其中涉及并行运算中处理器间的通讯,简单类型变量、字符串格式的流,以及OF中定义的token流,他们分别对应于Pstream,IFstream,StringStream,Tstream等。
可以这样说,OF中所有关键的类对象的构造都是通过Istream的完成的,对象的输出又是通过Ostream来完成的,所以可以说I/O系统是OF的重要基石。 前面的内容过于细化了,往往不能把握程序大的方面,因而以后多发布些自己在程序中类之间的关系以及类的功能上的一些体会,当然代码分析部分也会陆续跟进!......

阅读全文(3276) | 评论:0

谈谈OF中的dictionary(2008-10-29 16:56:00)

摘要:dictionary,顾名思义即是字典的意思,那么针对一个关键词,便可在其中找到与之相应的“内容”,这里的“内容”在OF中以entry类对象的形式表现,这里面包括dictionaryEntry和primitiveEntry,这两个类的对象是dictionary对象中保存的最终的entry的形式。那么entry又是如何组织具体的数据的呢,通过阅读相关类实现源代码可以看出:实际上保存在dictionary的数据是保存在dictonary的私有变量hashedEntries_中,该变量是HashTable<entry*>类的实例,可以看作是一个保存有一系列entry的指针的hash表,可以通过每个entry指针对应的关键字(keyword)在该表中找到实际的entry对象的指针。
从根本上来说,dictionary中保存的dictionaryEntry是dictionaryEntry中的dictionary组件中的内容(dictionaryEntry公有继承自entry和dictionary),保存的primitiveEntry是保存的primitiveEntry中ITstream中tokenList组件中的内容(primitiveEntry公有继承自entry和ITstream,而ITstream公有继承自Istream和tokenList)。所以最终一个dictionary中保存的有用信息就是能够访问dictionaryEntry中dictionary组件中的tokenList中的token,或者是能够访问primitiveEntry中tokenList中的token的相应指针。保存指针一方面节省了空间,同时是执行效率也大大增加。
另外我们知道entry虽然是一个双向链表的节点类(继承自IDLList<entry>::link),即它具有指向前一元素的指针prev_(可公有访问的)又具有指向后一元素的指针next_(可公有访问),但是在dictionary中保存的entry对象都不在链表中,因而prev_=next_=null。 想到哪写到哪,内容有些乱!......

阅读全文(6587) | 评论:0

正在结合刚刚编译完成的I/O系统编写其类库手册(2008-10-18 20:30:00)

摘要:针对刚刚编译完成的foam的I/O系统,对该系统中涉及的类编写类库使用手册!主要是可以通过在编译的I/O平台上实验其所有的成员函数,并进行编写!......

阅读全文(2820) | 评论:0

linux中的make(2008-03-31 16:21:00)

摘要:make 工具如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。本文将介绍 makefile 的结构,避免如何在创建 makefile 时出现一些共同的错误,并探索如何修复或解决可移植性问题,还为解决突发的问题提供了一些技巧。 大部分 UNIX® 和 Linux® 程序都是通过运行 make 来编译的。make 工具会读取一个包含指令的文件(这个文件的名字通常都是 makefile 或 Makefile,不过后文中我们统一称之为 “makefile”),并执行各种操作来编译程序。在很多编译过程中,makefile 自己完全是由其他软件生成的;例如,autoconf/automake 程序就用来开发编译程序。其他程序可能会要求我们直接编辑 makefile,当然,新的开发还可能需要我们自己编写 makefile。 “make 工具”这个短语可能有些容易引起误解。经常使用的 make 工具至少有 3 个变种:GNU make、System V make 和 Berkeley make。它们都是从早期 UNIX 的一个核心规范发展而来的,每个变种都增加了一些新特性。这就导致出现了一种复杂的情况:很常用的一些特性,例如在 makefile 中通过引用来包含其他文件,都不能很好地移植!简单编写程序来创建 makefile 就是一种解决方案。由于 GNU make 是免费的,并且可以广泛地发布,因此有些开发人员就简单地为它来编写代码;类似地,有很多起源于 BSD 的项目都要求我们使用 Berkeley make(这也是免费的)。 稍微逊色一点但依然相关的 make 工具是 Jörg Schilling 的 smake 和 make 家族中的第五位(已不再使用) —— 早先的 make,后者定义了与其他 make 工具共享的一些公共特性的子集。尽管 smake 在任何系统上都不是默认的 make 工具,但是它也是一个很好的 make 实现,有些程序(尤其是 Schilling 的程序)都喜欢使用它。 下面先来回顾一下在使用 makefile 时所遇到的最常见的一些问题。 理解 makefile 要调试 make,需要读取 makefi......

阅读全文(5013) | 评论:0

sed详细用法(转)(2008-03-30 15:30:00)

摘要:sed详细用法介绍 1. Sed简介
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。 2. 定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。 3. Sed命令
调用sed命令有两种形式: sed [options] 'command' file(s) sed [options] -f scriptfile file(s)
a\
在当前行后面加入一行文本。 b lable
分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 c\
用新的文本改变本行的文本。 d
从模板块(Pattern space)位置删除行。 D
删除模板块的第一行。 i\
在当前行上面插入文本。 h
拷贝模板块的内容到内存中的缓冲区。 H
追加模板块的内容到内存中的缓冲区 g
获得内存缓冲区的内容,并替代当前模板块中的文本。 G
获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l
列表不能打印字符的清单。 n
读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N
追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 p
打印模板块的行。 P(大写)
打印模板块的第一行。 q
退出Sed。 r file
从file中读行。 t label
if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 T label
错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分......

阅读全文(3646) | 评论:0

sed的用法(转)(2008-03-30 14:54:00)

摘要: (转自http://www.dbonline.cn/source/oracle/20031224/UNIX_text%20command%20sed.html)

转比写快多啦唉

文本处理命令之sed

作者:forest


测试:

以 Redhat6.0 为测试环境
事实上在solaris下的sed命令要比linux强,但因为没有测试
环境,我这里只给在linux下经过测试的用法。

目录:

★ 命令行参数简介
★ 首先假设我们有这样一个文本文件 sedtest.txt
★ 输出指定范围的行 p
★ 在每一行前面增加一个制表符(^I)
★ 在每一行后面增加--end
★ 显示指定模式匹配行的行号 [/pattern/]=
★ 在匹配行后面增加文本 [/pattern/]a\ 或者 [address]a\
★ 删除匹配行 [/pattern/]d 或者 [address1][,address2]d
★ 替换匹配行 [/pattern/]c\ 或者 [address1][,address2]c\
★ 在匹配行前面插入文本 [/pattern/]i\ 或者 [address]i\
★ 替换匹配串(注意不再是匹配行) [addr1][,addr2]s/old/new/g
★ 限定范围后的模式匹配
★ 指定替换每一行中匹配的第几次出现
★ &代表最后匹配
★ 利用sed修改PATH环境变量
★ 测试并提高sed命令运行效率
★ 指定输出文件 [address1][,address2]w outputfile
★ 指定输入文件 [address]r inputfile
★ 替换相应字符 [address1][,address2]y/old/new/
★ !号的使用
★ \c正则表达式c 的使用
★ sed命令中正则表达式的复杂性
★ 转换man手册成普通文本格式(新)
★ sed的man手册(用的就是上面的方法)

★ 命令行参数简介
......

阅读全文(3848) | 评论:0

在OpenFOAM中做用户自定义库——编译library (2008-03-03 22:35:00)

摘要:OpenFOAM自己提供的标准类都是以库的形式提供的,并且利用头文件给出了库的应用接口。这样一来,用户的代码中即使用到了某个类,也不需要对源文件进行重新编译了。这样做有好有坏:好处是提高了效率;坏处是源文件(.c)进行修改了但如果不重新编译的话会导致库文件不会被更新,从而用户代码中用到的还是旧库。缺点可以弥补,那就是在修改了代码之后进行重新编译,但是一般情况下,我们完全可以不去动OpenFOAM的源文件。(前面提到了编译器会根据文件的修改情况决定是否重新编译,针对的是.h文件,而非.c源文件) 既然OpenFOAM采用的是上面的这种机制,那么用户在自己定义某个类之后该如何处理呢?标准的做法也是将其生成库文件,就像OpenFOAM本身提供的那样。当然用户很可能会修改自己的这个类,那么在修改之后记得重新编译就好了。那么,如何生成用户自定义的库呢? OpenFOAM提供了一个库:foamUser。如果查看目录$FOAM_LIBBIN会发现该库文件。不过OpenFOAM本身并未给此库提供什么功能,它相当于一个“空库”,等待用户自己去添加。与之对应,在$FOAM_SRC目录下可以找到一个foamUser文件夹,这是一个模版,提供了一个现成的框架,其中Make文件夹中的files和options文件提供了利用wmake进行编译时的选项。其中files文件内容如下:      libfoamUser.C        //指出源文件      LIB = $(FOAM_LIBBIN)/libfoamUser   //LIB指出编译为库,等号后为所添至库的路径 编译为库的命令为 wmake libso 。而libfoamUser.C中用到的头文件或者库同样在Make/options文件中说明,方式与编译可执行文件相同,不过关键字EXE要换成LIB,亦即:     LIB_INC = \
       -I<directoryPath> \
    &n......

阅读全文(5446) | 评论:1

openFOAM基础——c++的面向对象思想 (2008-03-03 22:30:00)

摘要:openFOAM是用c++写的,其基础思想便是面向对象。面向对象的编程思想随便找本相关的书都能看清楚。其最大的优点在于符合人类思考习惯,方便进行代码维护和开发,并且有利于提高代码重用率。但是面向对象的编程思想对于数值计算来说是否合适,可能还有待商酌,因为大量虚方法的引入势必降低运算速率。然而如果想在CFD领域有长足发展,我想积累是不可缺少的一个环节。而架构在面向对象程序设计思想上的openFOAM,应该是众多积累手段中较为有效的一种。 又扯上了,先说些基本的吧。 首先,什么是面向对象?面向对象其实从字面上也看不出有什么太多的意思,不过如果从程序设计的发展过程来看,就不难对“面向对象”这一概念进行理解了。“面向对象”是相对于其前的“面向过程”而言的。对于一个面向过程的程序而言,程序从头走到尾,代码的编写顺序基本上就是执行的过程。而面向对象的方法则不然,虽然面向过程的影子依然存在(没有过程、何谈程序,事实上所有现实中的事情都是过程化的),但是在程序执行过程中出现了“对象”这一概念,而且对象本身会发生“行为”,彼此之间实现“消息”传递,从而实现其驱动机制(本质上也就是函数调用)。 对象(object):哲学上讲,对象即指现实世界中各种各样的实体,可以指具体的事物也可以指抽象的事物。如苹果、飞机、规则、法律、方程、向量等等(凡是可以想到的东西)。每个对象皆有自己的内部状态和运动规律,在面向对象概念中我们把对象的内部状态称为“属性”、运动规律成为“方法”或“事件”。 在面向对象程序设计中,对象就是有着自己的属性、方法的“变量”,只不过我们以后不称之为变量,而叫“对象”了,这也是为了与一般的变量区分。 类(class):哲学上讲,类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。类是人们根据自己的认识水平以对象为素材归纳出来的。对于一个具体的类,它有许多具体的个体(属于此类),我们就管这些个体叫做对象。既然对象有属性、方法,那么由其归纳而得的类自然也有相应的属性、方法。在面向对象程序设计中,类的定义是最关键的,一个程序,在类的定义上是否合理,很大程度影响着编程的效率。我们定义一个类的时候,决定这个类到底都有哪些属性和方法,并且定义属性的时候给出属性的数据类型,定义方法的时候给出方法的实现过程。 在程序执行过程中,我们利用类来定义对象,真正使代码执行的,是对象......

阅读全文(5421) | 评论:1