OpenFoam 2.3 升级 7 并配置Docker环境

老版本of2.3 CFD程序升级of7,在此记录。

准备OF7的docker

docker安装及环境配置见前文 ubuntu docker配置cuda+anaconda+vscode+tensorflow环境的镜像
docker hub 拉取openfoam/openfoam7-paraview56镜像
docker hub

docker pull openfoam/openfoam7-paraview56

从镜像启动容器

sudo docker run --gpus all -it  -u 0 --name=zhl --privileged=true   -p  8022:22  -p  8080:8080   -p  8060:8060 -p 8081:8081  -v /data1/AI-DEM:/data  openfoam/openfoam7-paraview56:latest  bash
# -p 端口映射  本地端口:容器端口 
# -v 挂载目录  本地目录:容器目录

端口映射

参考前文 通过端口映射访问远程服务器中的Docker容器 https://blog.csdn.net/qq_43488795/article/details/126658342
注意将容器的SSH端口设置为对应的映射端口。

主机 服务器 容器 ssh [email protected] (-p 22) VSCode Remote-SSH, XobaXterm ssh [email protected] -p 8080 VSCode Remote-Containers, VSCode Remote-SSH ssh [email protected] -p 8080 VSCode Remote-SSH, XobaXterm 主机 服务器 容器

至此可以通过SSH, VSCode Remote-SSH, 等方式直接通过主机连接服务器中的容器。

VSCode访问容器

安装Remote-SSH插件
在这里插入图片描述

OF7修改记录

Makefile.basic

不熟悉makefile的可以先学习这篇文章

Makefile经典教程(掌握这些足够)

首先对比 Makefile.basic 的不同

vimdiff Makefile.basic  ../cfd_of7_src/Makefile.basic

在这里插入图片描述对应修改即可,注意CFLAGS中的-DWM_LABEL_SIZE=32选项,一定要设置不然后面会报错。

修改config.h

只打开流动选项,关闭所有反应传热宏。

编译

修改完 Makefile.basic后可以开始编译

#!/bin/sh
rm cfd-two-phase
rm main.o
make clean-all
make -j > 1.log 2>&1

逐个解决输出的错误,参考OpenFoam v7 官网

错误1: fvIOoptionList.H 找不到

main.cpp:41:10: fatal error: fvIOoptionList.H: No such file or directory
 #include "fvIOoptionList.H"

原因: of7中没有这个库函数
解决办法:注释掉即可
在这里插入图片描述

错误2 :readPISOControls.H 没有

main.cpp:431:10: fatal error: readPISOControls.H: No such file or directory
 #include "readPISOControls.H"
          ^~~~~~~~~~~~~~~~~~~~

新版本叫 pisoControlI.H
改为

// #include "readPISOControls.H"
#include "psioControl.H"

在这里插入图片描述

错误3: SEEK_SET 没有定义

In file included from /usr/lib/x86_64-linux-gnu/openmpi/include/mpi.h:2704:0,
                 from ./include/includes.h:22,
                 from cfd_dem_IBM.cpp:7:
 /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:57:40: error: 'SEEK_SET' was not declared in this scope
 static const int ompi_stdio_seek_set = SEEK_SET;
                                        ^~~~~~~~                

原因:USE_INTEL_MPI

// #define USE_INTEL_MPI

#include "createFvOptions.H" 注释掉

#include "createControl.H" //增加
#include "createFields.H"

错误4: IBM相关问题

均为没有加#ifdef USE_IBM
加上#ifdef USE_IBM跳过编译。
IBM相关报错均做同样处理。

错误5:momentumPredictor , nCorr 没有定义

In file included from main.cpp:498:0:
./of-include/two_phase_solvation_gravity.H:18:35: error: 'momentumPredictor' was not declared in this scope
  Info << "momentumPredictor:"  << momentumPredictor <<endl;
                                   ^~~~~~~~~~~~~~~~~


./of-include/two_phase_solvation_gravity.H:26:18: error: 'nCorr' was not declared in this scope
  int nCorrSoph = nCorr;


// ./of-include/two_phase_solvation_gravity.H:26:18:
// PISO loop
	int nCorrSoph = nCorr;
	for (int corr=0; corr<nCorrSoph; corr++) {
    
    

momentumPredictor变为了piso的成员变量

// Info << "momentumPredictor:"  << momentumPredictor <<endl;
Info << "momentumPredictor:"  << piso.momentumPredictor() <<endl;

新版piso取消了nCorr和for循环,参考opt/openfoam7/applications/solvers/incompressible/pisoFoam/pisoFoam.C:
将for循环改为while
在这里插入图片描述

	// PISO loop
	// int nCorrSoph = nCorr;
	// for (int corr=0; corr<nCorrSoph; corr++) {
    
    
	while (piso.correct()) {
    
    

// for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) {
    
    
		while (piso.correctNonOrthogonal()) {
    
    

错误全部解决,编译得到可执行文件。

猜你喜欢

转载自blog.csdn.net/qq_43488795/article/details/126754257
2.3