OF:OpenFOAM记录

之前在折腾OpenFOAM的过程中的一点笔记,在这记录备份一下,比较杂乱

OpenFOAM学习笔记

0、ubuntu的有用命令

1、重启Ubuntu网卡命令

service network restart

2、Ubuntu安装中文汉化包

sudo apt install language-pack-zh-hans

3、批量kill进程

ps -ef|grep 进程名称 |awk '{print $2}'|xargs kill”

4、更改source list 源

备份source list

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

打开source list

sudo gedit /etc/apt/sources.list

添加清华大学镜像源

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

1、安装

1.1. OpenFOAM安装

OpenFOAM安装摘抄自李东岳网站的安装笔记

以下安装过程适用于Ubuntu20.04/19.10/18.10/18.04系统,以及原生OpenFOAM-3.0以上的版本,其他各版本可能会出现若干问题。

(1)安装好ubuntu系统,并确保ubuntu可以联网、确保内存最好在10G以上

(2)安装依赖库:

sudo apt update
sudo apt-get install build-essential flex bison git-core cmake zlib1g-dev libboost-system-dev libboost-thread-dev libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev

(3)从Github上下载源代码OpenFOAM-8以及第三方库ThirdParty-8

(4)配置环境变量,在.bashrc文件中添加环境变量

gedit $HOME/.bashrc
#添加源 bashrc中存有openFOAM中定义的变量
source $HOME/OpenFOAM/OpenFOAM-8/etc/bashrc
#定义环境变量
export FOAM_RUN=/home/ctw/OpenFOAM_run

关闭终端,$HOME/.bashrc中定义的变量在Terminal打开前生效。

(5)编译OpenFOAM:打开终端,输入(即切换到OpenFOAM-8目录下):

cd $HOME/OpenFOAM/OpenFOAM-8/

然后输入:

./Allwmake -j

这时候会输出大量的信息,并行编译开始(大约需要几十分钟)。编译之后请尝试运行以下命令生成网格:

blockMesh

如果显示如下信息:

img

1.2. ParaView(后处理工具)安装

1.3. 编译版paraFoam

(1)键入:

cd $HOME/OpenFOAM/ThirdParty-8
sudo apt install libqt5x11extras5-dev libxt-dev qt5-default qttools5-dev curl

(2)终端键入:

./makeParaView

其中会自动下载ParaView-5.6.3并开始编译,编译过程较长。编译完成后会显示Installation complete for paraview-5.6.3等信息。

(2)分四次键入

wmRefresh
cd $FOAM_UTILITIES/postProcessing/graphics/PVReaders
./Allwclean
./Allwmake

将会再次开始编译过程。几分钟即编译完成。然后键入paraFoam即可运行。

1.4. 多版本共存

不同大厂的OpenFOAM版本各有特性,因此用户可能具有多版本OpenFOAM共存的需求。多版本OpenFOAM共存非常简单。举例说明:如果用户打算在Ubuntu系统上安装OpenFOAM-8以及OpenFOAM-7,可在终端输入:

gedit $HOME/.bashrc

会打开一个文件,在文件的最底部重新取一行添加下述两行文字:

alias of8="source ~/OpenFOAM/OpenFOAM-8/etc/bashrc"
alias of7="source ~/OpenFOAM/OpenFOAM-7/etc/bashrc"

保存并关闭。重新打开新的终端的时候,环境变量自动生效。这时如果用户键入:

of8

则调用OpenFOAM-8环境,类似的,键入:

of7

则调用OpenFOAM-7环境。

2、模拟步骤

2.1. 算例文件结构设置:

3、OpenFOAM第三方工具

3.1 网格转换工具

3.1.1 CCM+转OpenFoam格式

Star-CCM+生成格式导出为OpenFoam可用格式工具localCCM26ToFOAM.

mkdir -p $WM_PROJECT_USER_DIR
cd $WM_PROJECT_USER_DIR

下载对应版本按装文件

# If you want to download in tar format
wget "https://github.com/wyldckat/localCCM26ToFOAM/archive/of4.tar.gz"
tar -xf of4.tar.gz

编译安装

./ccm26local

查看帮助提示

ccm26ToFoam -help

使用命令(使用前先备份CCM网格文件)

ccm26ToFoam *.ccm

3.2 造波工具库

3.2.1 olaFlow编译与使用

git源代码以及编译

cd $FOAM_SOLVERS
git clone git://github.com/phicau/olaFlow.git
cd olaFlow
./allMake

3.3 fftw库编译

Linux下FFTW库的安装

FFTW(the Fastest Fourier Transform in the West)库是由MIT(Massachusetts Institute of Technology)的Matteo Frigo和Steven G. Johnson开发的,用于一维和多维实数或复数的离散傅里叶变换。

  • 下载 fftw-2_1_3_tar.gz (www.fftw.org, or www.rpmfind.net

  • tar zxvf fftw-2_1_3_tar.gz 展开压缩文件

  • 在Linux中安装FFTW:
    a.

     ./configure --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks  
    

    其中,--enable-type-prefix 参数是为了同时使用single precision(单精度)和double precision(双精度),如果不使用它,最后只有以rfftw开头的文件被安装(real fftw);

    ​ --prefix= 参数是设定安装目录;

    ​ --with-gcc 使用gcc编译器;

    ​ --disable-fortran 参数为了不包含Fortran调用的机制;

​ --enable-i386-hacks 为Pentium和x86以后的CPU优化gcc的编译速度。

​ b.make 编译

​ c.make install 安装,这一次安装完后,在安装目录中存在以dfftw和drfftw开头文件,但没有sfftw开头的文件

​ d.make clean 还需要安装一次,先清除

​ e../configure --enable-float --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks

​ 其中,--enable-float 为了生成单精度计算的头文件和库文件,即以sfftw开头的文件。
​ f.make 重新编译

​ g.make install 再一次安装,安装完后,目录中便会同时存在sfftw和dfftw开头的文件(用于复数函数/complex function的FFT变换)和srfftw与drfftw开头的文件(用于实数函数的FFT变换)

例如,如果需要用到双精度的实数FFT变换/FFTs,那么在编译的链接命令中需要按如下顺序加入
-ldrfftw -ldfftw参数

fftw3库测试函数
/*****************************
* filename: test_fftw.cpp
* author : Tiao Lu
* Company : School of Mathematical Sciences, Peking University
* 编译命令: g++ -o test_fftw.exe test_fftw.cpp -lfftw3
* Date    : September 30th, 2007
* Description: This code is an example to show the use of the free code FFTW, which implements the Fast Fourier Trasformation algorithm.
*/
#include <complex>
#include <fftw3.h>
#include <math.h>
#include <iostream>

#define N 10
using namespace std;
int main(int argc, char * argv[]){

    fftw_complex in[N], out[N];
    fftw_plan p;

//一维dft,in 输入,out输出,FFTW_FORWARD 表示 exp 上指数是负号
// out = F in
//where out and in are two vectors of the same length n, and F is a n-by-n matrix with the (j,k) element
// F jk = exp(-i 2 pi j k /n). i 是虚数单位. 

    p=fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_MEASURE);
    for(int i=0;i <N;i ++) {
        in[i][0]=i;
        in[i][1]=0.0;
    }

    fftw_execute(p);

    for(int i=0;i <N;i ++){
        cout<<out[i][0]<<" "<<out[i][1]<<endl;
    }

    //验证是否 out[3] = \sum_{k=0}^{N-1}exp(-i 2pi 3 k/N)in[k]
    complex<double> temp = 0.0;
    for(int k =0; k < N; k ++){
        double pi = 4*atan(1.0);
        temp += exp(complex<double>(0.0,-2.0*pi*3*k/N))*complex<double>(in[k][0],in[k][1]);
    }
    cout<<"out[3] is "<<temp<<endl;

    fftw_complex out1[N];
    fftw_plan p1;
    
//一维dft,in 输入,out输出,FFTW_BACKWARD 表示 exp 上指数是正号
// out = IF in
//where out and in are two vectors of the same length n, and IF is a n-by-n matrix with the (j,k) element
// IF jk = exp( +i 2 pi jk/n). i 是虚数单位.

    p1=fftw_plan_dft_1d(N,out1,in,FFTW_BACKWARD,FFTW_MEASURE);

    for(int i=0;i <N;i ++){
        out1[i][0]=out[i][0];
        out1[i][1]=out[i][1];
    }

    fftw_execute(p1);
//注意这里得到的 in 并不是和原来的in 的数值不同,比较之后发现,现在的in
// 是原来的 in 的 N 倍。原因是这里的定义的逆傅立叶变换没有除以 N.
//这和课本中定义的逆傅立叶变换不同。
    for(int i=0;i <N;i ++){
        cout<<in[i][0]<<" "<<in[i][1]<<endl;
    }
    fftw_destroy_plan(p);
    fftw_destroy_plan(p1);
    return 1;
}

4、动态编译自定义库

建立个人的库文件夹

mkdir -p $WM_PROJECT_USER_DIR
cd $WM_PROJECT_USER_DIR

4.1 基于OpenFoam平台的编译库/EXE的文件结构

mkdir myFirstLib
cd myFirstLib
mkdir Make
cd Make
touch options
touch files
  • myFirstLib
    • Make
      • options
      • files
    • myFirstLib.C
    • myFirstLib.H

4.2 例子:

c文件

#include <iostream>
#include "myClass.C"
#include "fvCFD.H"

using namespace std;

int main()
{
    myClass myClass1;
    myClass1.assignA(4);
    myClass1.assignB(10);
    myClass1.output();
    myClass1.sum();
    myClass1.output();
    return 0;
}
#files文件
myLibTest.C
EXE = $(FOAM_USER_APPBIN)/myFirstLibTest

EXE_INC链接头文件地址

EXE_LIBS链接库文件

#options文件
EXE_INC = \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude \
	-I/home/ctw/OpenFOAM_run/build_lib/lnInclude

EXE_LIBS = -L$(FOAM_USER_LIBBIN) \
      -lmyFirstLib

4.3 编译库与编译EXE的区别

4.3.1 files文件区别
#链接生成Lib 
myHOSLib.C 
LIB = $(FOAM_USER_LIBBIN)/libmyHOSLib
#链接生成EXE
HOS_usercode.C main.C

EXE = $(FOAM_USER_APPBIN)/HOS
4.3.2 options文件区别
#链接生成Lib
LIB_INC = \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude \
		-I/home/ctw/OpenFOAM_run/build_lib/lnInclude \
		-I/usr/include
      
LIB_LIBS =	-L/usr/lib/x86_64-linux-gnu \
			-lfftw3
#链接生成EXE
EXE_INC = \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/meshTools/lnInclude \
		-I/home/ctw/OpenFOAM_run/build_lib/lnInclude \
		-I/usr/include
      
EXE_LIBS =	-L/usr/lib/x86_64-linux-gnu \
			-lfftw3

注意

1、编译Lib文件时需要以 **lib **开头

2、链接自定义库时,首先需要在EXE_INC包含头文件,其次需要在EXE_LIBS包含动态库(.so文件)

例如

#options文件
EXE_INC = \
    	-I$(LIB_SRC)/finiteVolume/lnInclude \
    	-I$(LIB_SRC)/meshTools/lnInclude \
		-I/home/ctw/OpenFOAM_run/build_HOS_Lib/lnInclude \
		-I/usr/include
      
EXE_LIBS =	-L/home/ctw/OpenFOAM/ctw-8/platforms/linux64GccDPInt32Opt/lib \
			-lmyHOSLib
posted @ 2021-11-07 18:50  陈橙橙  阅读(645)  评论(0编辑  收藏  举报