博文

openFOAM基础--编译applications和libraries (2008-03-03 22:28:00)

摘要:openFOAM是一个库,用户在编程时需要调用此库,当然用的语言是面向对象的c++语言。在使用openFOAM时我们应该将关注点放在顶层使用类以及数值算法上,这就需要对openFOAM Library的调用机制有一个详细的了解。并且由于我们在使用c++语言编程,因此需要对c++的编译过程有所了解。 关于编译器,我们可以直接使用LINUX自带的make程序,但openFOAM又提供了一个编译程序wmake,它建立在make的基础上,但比make更强大和简单。并且wmake不仅可以用于openFOAM library,而且可以用于任何c++代码。 openFOAM中的类,本质上是c++的class,都定义在.c文件中,这些文件在用编译器进行编译之后会生成.so文件(可执行的二进制文件),形成库(library)。openFOAM在提供时都已经生成了.so文件,因此当我们编译一个调用了某class(该class所在文件为 nc.c)的程序app.c时,nc.c不会被重新编译,而是调用直接调用nc.so文件。这种机制称为“动态链接”。而如果对某.c文件进行了修改,则重新编译之后才会生效。 c++中,我们在使用一个变量或者对象时,必须确保该变量或对象已经存在,这就需要进行声明。在使用类时同样需要事先声明,这些对类的声明都包装在.h文件中,我们称之为头文件(header file)。头文件中声明的类一定要能在库中找到,这就要求声明的类与.c文件中定义的类相一致。头文件都必须以#include "xx.h"的形式被“包含”在使用了该头文件的c文件中(.c或.h文件)。一个c文件要想使用某个类,则必须在文件的开始将声明了该类的.h文件包含进来。这样一来,我们在编译一个程序的时候,可以通过“递归搜索”找到一系列的.h文件名,我们把这些.h文件称为dependences,而这一系列文件名也就是一个dependence list。编译器会判断这个list中的各个.h文件在最后一次进行编译之后是否被修改过,如果修改了,则从新编译,如果没有被修改,那么不再编译。然后,编译器会根据.h文件中的声明和程序中的调用情况在库中找到想要的代码,进而链接出可执行文件来。一方面,只有有了.h文件,我们在写程序代码时才能保证用到的类都是声明过的;另一方面,只有有了.h文件中的声明,我们才能在库中找到自......

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

[转载]OpenFOAM——编译过程(2006-11-26 11:13:00)

摘要:我在两台机器上编译了OpenFOAM,

    一台CPU是DUAL XEON(带64位指令扩展),
    操作系统是Linux RedHat Linux ES 3.0 for EM64T(64bit),
    linux kernel是2.4.21 (x86-64,SMP),
    GCC版本是3.2.3,glibc 2.3.2,
    binutils的版本是2.14.90。

    另一台是CPU是普通的Pentium 4,
    操作系统是RedHat Fedora Core 5,
    kernel 2.6.15 (i386),
    GCC 4.1.0,glibc 2.4,
    binutil 2.16.91。

两台机器OpenFOAM的安装都在用户权限下进行。

安装基本按照这个howto进行的。下面给出的一些信息仅是这个howto的补充。

在安装之前,如果对linux下的编译、静态和动态链接以及make过程不太了解,不妨可以看看GCC the complete reference。这个有英文的电子版,在新水木的linuxdev版不久之前还有人贴过,我觉得基本上看看第4、12以及14章就可以了。

大体上,OpenFOAM的编译从逻辑上可以分为三个部分,前处理、求解器和后处理
其包依赖性大致可以如下图所示。



不过在实际编译时,在安装gcc/binutil/java/cmake/paraview之后,三部分都是在一个make命令下同一完成的。

OpenFOAM源代码树中还包含了两个辅助的包的源代码,mico和lam-mpi。前者是用于FoamX用于浏览计算节点机器的一个支持库(大概吧,不是非常清楚)。后者用于支持并行计算。

起始,从我的经验来看,OpenFOAM的求解器的编译还是相对容易的,容易出问题的是FoamX和paraFoam(包括paraView)的编译,特别是后者。如果你的确遇到FoamX和paraFoam的编译问题,不妨统统不考虑java/cmake/paraview这些包,仅安装gcc/binut......

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