写在前面

OpenFOAM 是一个非常好用的开源程序包,笔者一直在研究和使用,其编程语言是笔者非常喜欢使用的 C++。但是笔者不是很喜欢 OpenFOAM 自己的构建工具 wmake,更倾向于使用 CMake 管理 C++ 项目。这样做有几点好处(个人观点),一方面是很多集成开发环境支持CMake方便开发,另外一方面是很多优秀的C++开源库也可以方便集成到一起,例如amgcl

因此笔者采用默认设置,在自己的笔记本电脑上安装了OpenFOAM-v2112,部分信息如下

                          ./+o+-       fitanium@Local
yyyyy- -yyyyyy+ OS: Ubuntu 22.04 jammy
://+//////-yyyyyyo Kernel: x86_64 Linux 5.15.0-40-generic
.++ .:/++++++/-.+sss/` Uptime: 3d 5h 46m
.:++o: /++++++++/:--:/- Packages: 2047
o:+o+:++.`..```.-/oo+++++/ Shell: bash 5.1.16
.:+o:+o/. `+sssoo+/ Resolution: 1920x1080
.++/+:+oo+o:` /sssooo. DE: Xfce
/+++//+:`oo+o /::--:. WM: Xfwm4
\+/+o+++`o++o ++////. WM Theme: Prof--XFCE- 2.1
.++.o+++oo+:` /dddhhh. GTK Theme: Prof--XFCE- 2.1 [GTK2]
.+.o+oo:. `oddhhhh+ Icon Theme: Numix-Circle
\+.++o+o``-````.:ohdhhhhh+ Font: WenQuanYi Micro Hei Mono 11
`:o+++ `ohhhhhhhhyo++os: Disk: 49G / 468G (11%)
.o:`.syhhhhhhh/.oo++o` CPU: AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx @ 8x 2.1GHz
/osyyyyyyo++ooo+++/ GPU: AMD Radeon Vega 8 Graphics (raven, LLVM 13.0.1, DRM 3.42, 5.15.0-40-generic)
````` +oo+++o\: RAM: 3642MiB / 5870MiB
`oo++.

gcc 版本 : 11.2.0

main.cpp

在这里,我们要写一个非常非常入门的OpenFOAM版的Hello World.,代码如下所示。

#include <iostream>

#include <foamVersion.H>

int main(int argc, char* argv[])
{
std::cout << "Hello OpenFOAM-" << Foam::foamVersion::version << std::endl;
return 0;
}

CMakeLIsts.txt

这里我们使用CMake管理项目,内容如下所示。

cmake_minimum_required (VERSION 3.8)
project(HelloOpenFOAM) # OpenFOAM 安装路径
set( FOAM_PREFIX "/opt/OpenFOAM-v2112" ) # 包含路径
set( FOAM_SRC ${FOAM_PREFIX}/OpenFOAM-v2112/src )
include_directories( ${FOAM_SRC}/atmosphericModels/lnInclude )
include_directories( ${FOAM_SRC}/combustionModels/lnInclude )
include_directories( ${FOAM_SRC}/conversion/lnInclude )
include_directories( ${FOAM_SRC}/dummyThirdParty/lnInclude )
include_directories( ${FOAM_SRC}/dynamicFaMesh/lnInclude )
include_directories( ${FOAM_SRC}/dynamicFvMesh/lnInclude )
include_directories( ${FOAM_SRC}/dynamicMesh/lnInclude )
include_directories( ${FOAM_SRC}/faOptions/lnInclude )
include_directories( ${FOAM_SRC}/fileFormats/lnInclude )
include_directories( ${FOAM_SRC}/finiteArea/lnInclude )
include_directories( ${FOAM_SRC}/finiteVolume/lnInclude )
include_directories( ${FOAM_SRC}/functionObjects/lnInclude )
include_directories( ${FOAM_SRC}/fvAgglomerationMethods/lnInclude )
include_directories( ${FOAM_SRC}/fvMotionSolver/lnInclude )
include_directories( ${FOAM_SRC}/genericPatchFields/lnInclude )
include_directories( ${FOAM_SRC}/lagrangian/lnInclude )
include_directories( ${FOAM_SRC}/lumpedPointMotion/lnInclude )
include_directories( ${FOAM_SRC}/mesh/lnInclude )
include_directories( ${FOAM_SRC}/meshTools/lnInclude )
include_directories( ${FOAM_SRC}/ODE/lnInclude )
include_directories( ${FOAM_SRC}/OpenFOAM/lnInclude )
include_directories( ${FOAM_SRC}/optimisation/lnInclude )
include_directories( ${FOAM_SRC}/OSspecific/POSIX/lnInclude )
include_directories( ${FOAM_SRC}/overset/lnInclude )
include_directories( ${FOAM_SRC}/parallel/lnInclude )
include_directories( ${FOAM_SRC}/phaseSystemModels/lnInclude )
include_directories( ${FOAM_SRC}/Pstream/lnInclude )
include_directories( ${FOAM_SRC}/randomProcesses/lnInclude )
include_directories( ${FOAM_SRC}/regionFaModels/lnInclude )
include_directories( ${FOAM_SRC}/regionModels/lnInclude )
include_directories( ${FOAM_SRC}/renumber/lnInclude )
include_directories( ${FOAM_SRC}/rigidBodyDynamics/lnInclude )
include_directories( ${FOAM_SRC}/rigidBodyMeshMotion/lnInclude )
include_directories( ${FOAM_SRC}/sampling/lnInclude )
include_directories( ${FOAM_SRC}/semiPermeableBaffle/lnInclude )
include_directories( ${FOAM_SRC}/sixDoFRigidBodyMotion/lnInclude )
include_directories( ${FOAM_SRC}/sixDoFRigidBodyState/lnInclude )
include_directories( ${FOAM_SRC}/surfMesh/lnInclude )
include_directories( ${FOAM_SRC}/thermophysicalModels/lnInclude )
include_directories( ${FOAM_SRC}/topoChangerFvMesh/lnInclude )
include_directories( ${FOAM_SRC}/transportModels/lnInclude )
include_directories( ${FOAM_SRC}/TurbulenceModels/lnInclude )
include_directories( ${FOAM_SRC}/waveModels/lnInclude )
include_directories( . ) link_directories(
${FOAM_PREFIX}/ThirdParty-v2112/platforms/linux64Gcc/boost_1_74_0/lib64
${FOAM_PREFIX}/ThirdParty-v2112/platforms/linux64Gcc/fftw-3.3.10/lib64
${FOAM_PREFIX}/ThirdParty-v2112/platforms/linux64Gcc/kahip-3.14/lib64
${FOAM_PREFIX}/ThirdParty-v2112/platforms/linux64GccDPInt32/lib
${FOAM_PREFIX}/ThirdParty-v2112/platforms/linux64GccDPInt32/lib/sys-openmpi ${FOAM_PREFIX}/OpenFOAM-v2112/platforms/linux64GccDPInt32Opt/lib
${FOAM_PREFIX}/OpenFOAM-v2112/platforms/linux64GccDPInt32Opt/lib/dummy
${FOAM_PREFIX}/OpenFOAM-v2112/platforms/linux64GccDPInt32Opt/lib/sys-openmpi
# 采用默认设置,大概就需要写这些就可以了。
# 如果自定义设置,可能还需要添加其他路径。
)
set(EXTRA_LIBS dl m)
set(LIBS
Pstream
OpenFOAM
# 下面这几个是一般常用的库,可根据需要取消注释或添加其他库
# finiteVolume
# meshTools
# fileFormats
${EXTRA_LIBS}
) # C++ 11
set( CMAKE_CXX_STANDARD 11 )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker --no-as-needed -Xlinker --add-needed" )
add_definitions(-Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -DNoRepository -m64 -fPIC ) # 添加可执行文件
add_executable (${PROJECT_NAME} "main.cpp") # 链接库
target_link_libraries(${PROJECT_NAME} ${LIBS})

运行结果

除了libOpenFOAM.solibPstream.so外,我们可以看到编译出来的可执行文件依赖的都是系统库。

接下来,看一下运行结果。

OpenFOAM编程 | Hello OpenFOAM的更多相关文章

  1. OpenFOAM 编程 | 求解捕食者与被捕食者模型(predator-prey model)问题(ODEs)

    0. 写在前面 本文问题参考自文献 \(^{[1]}\) 第一章例 6,并假设了一些条件,基于 OpenFOAM-v2206 编写程序数值上求解该问题.笔者之前也写过基于 OpenFOAM 求解偏分方 ...

  2. 【一起学OpenFOAM】03 OpenFOAM基本使用流程

    OpenFOAM初学者常常对于软件的使用流程感到很迷惑,与其他的具有GUI的CFD软件不同,OpenFOAM的所有操作均为基于文本操作,譬如说里面各种计算模型.计算参数.流程控制参数等,均为通过修改对 ...

  3. 【一起学OpenFOAM】04 OpenFOAM的学习资源

    OpenFOAM的学习资料并不多,个人猜测也许是与软件的类型有关系. 对于商用软件来讲,由于要占领市场,软件开发商自然是巴不得会用软件的人越多越好,因为他们卖的是软件,会用的人越多,软件卖得越好.他们 ...

  4. OpenFOAM 编程 | One-Dimensional Transient Heat Conduction

    0. 写在前面 本文中将对一维瞬态热传导问题进行数值求解,并基于OpenFOAM类库编写求解器.该问题参考自教科书\(^{[1]}\)示例 8.1. 1. 问题描述 一维瞬态热传导问题控制方程如下 \ ...

  5. 【一起学OpenFoam】01 OpenFoam的优势

    CFD技术发展到今天,已经超过了大半个世纪了,已经涌现出非常多的CFD软件可供人们使用.通用商业CFD软件譬如Fluent.CFX.Star CCM+等在工业上得到了广泛的应用,另外一些专用的软件(如 ...

  6. OpenFOAM 学习路线 【转载】

    "Two weeks of playing with a CFD code will save you one afternoon of reading" 什么是OpenFOAM( ...

  7. OpenSUSE下编译安装OpenFoam

    在不是Ubuntu系统下安装OpenFoam,需要采用编译安装的方式.以下以OpenSuSE为例进行编译安装. 1 软件包准备 需要下载两个程序包: OpenFOAM-4.x-version-4.1. ...

  8. OpenFOAM——90度T型管

    本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL010: Laminar Flow in a 90° Tee-Junction. ...

  9. 深入理解 OpenFOAM 环境变量与编译

    操作系统选择 由于 OpenFOAM 在 Linux 平台开发和测试,在非 Linux 平台无法直接对软件进行编译和安装,所以在非 Linux 平台上最简便方法是使用 docker 容器运行 Open ...

随机推荐

  1. 【前端面试】(三)JavaScript相等(==)和全等(===)运算符的区别

    视频链接: JavaScript相等()和全等(=)运算符的区别 - Web前端工程师面试题讲解 参考链接: JavaScript == 与 === 区别 区别 对于string.number 等基础 ...

  2. 飞鱼CRM

    直接放干货吧,今日头条飞鱼CRM的PHP调用方法,点我跳转. 很简单的两个方法,加密时重要的是有一个空格,必须要有,这个也是坑了我很长时间的一个坑. 接下来具体说一下飞鱼CRM系统接口加密的方法. & ...

  3. NC16746 神奇盘子

    NC16746 神奇盘子 题目 题目描述 有一个神奇的盘子,形状为圆形.盘子上面爬着一个大象(视作一个点).由于现实的扭曲,当大象在盘子某个直径的一端的时候,可以瞬间传送至直径的另一端.现在大象想去盘 ...

  4. appium简单使用

    App 测试通常会用到的工具 adb :Android 的控制工具,用于获取Android的各种数据和控制 Appium Desktop:内嵌了Appium Server和Inspector的综合工具 ...

  5. Linux从root切换某个用户时可能出现:-bash-4.1$

    Linux从root切换某个用户时可能出现:-bash-4.1$ 如下所示:[root@server ~]# su - postgres-bash-4.1$ id postgresuid=26(pos ...

  6. 线程池的概念&原理和线程池的代码实现

    线程池:一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作, 无需反复创建线程而消耗过多资源.工作原理:可以用一张图来简洁明了说明: 合理利用线程池能够带来三个好处∶1.降低 ...

  7. SpringBoot之MongoDB附件操作

    前言 近期自己针对附件上传进一步学习,为了弥足项目中文件上传的漏洞,保证文件上传功能的健壮性和可用性,现在我将自己在这一块的心得总结如下: 一.pom.xml依赖的引入 <dependency& ...

  8. 攻防世界MISC进阶区--39、40、47

    39.MISCall 得到无类型文件,010 Editor打开,文件头是BZH,该后缀为zip,打开,得到无类型文件,再改后缀为zip,得到一个git一个flag.txt 将git拖入kali中,在g ...

  9. HDFS、Yarn、Hive…MRS中使用Ranger实现权限管理全栈式实践

    摘要:Ranger为组件提供基于PBAC的鉴权插件,供组件服务端运行,目前支持Ranger鉴权的组件有HDFS.Yarn.Hive.HBase.Kafka.Storm和Spark2x,后续会支持更多组 ...

  10. 7 什么是dubbo

    什么是dubbo 快速入门dubbo 了解什么是dubbo之前,我们得先了解什么是分布式系统? <分布式系统原理与范型>定义: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像 ...