Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

C

ChimneyFoam

@ChimneyFoam
关于
帖子
27
主题
9
群组
0
粉丝
2
关注
0

帖子

最新

  • 有人在mac上装of么?
    C ChimneyFoam

    有!Mac原生的OpenFOAM: 下载&安装&使用指南


  • MacOS原生OpenFOAM App
    C ChimneyFoam

    OpenFOAM是一款开源的CFD软件,功能很强大,而且可扩展性非常强。这里的可扩展性指的是在OpenFOAM的基础上可以自己开发各种求解器解决一些特定的问题。然而,OpenFOAM也存在开源软件的普遍问题:学习曲线较陡。尤其是软件安装,这第一步就会劝退一大批人。不论是OpenFOAM官网还是一些网上的教程,针对MacOS系统下的安装全都是基于Docker或者其他的虚拟机。其逻辑都是通过虚拟机虚拟出Linux系统,然后在虚拟的Linux系统里面使用OF。这种方式存在很多问题,最大的问题就是运行效率低,自己开发求解器的时候不容易调试。所以,最好的解决方案就是在MacOS系统下从OF源码编译出原生的程序,但是几乎所有平台都没有给出这种解决方案!即使找到了某种方式进行编译,也是非常麻烦,需要解决很多第三方依赖库和编译器的问题,非常浪费时间还不一定能搞定!基于此,本人花了一些时间将OpenFOAM的主流的版本编译为原生的app,解决了以上所有的这些繁琐的问题,非常容易使用。尤其对于一些初学者或者编程不太熟悉的用户,以前可能从来无法实现或者需要很长时间才能实现的问题,现在可以在一分钟之内解决问题。本文主要介绍如何下载和使用OpenFOAM
    app
    。下面是详细介绍文本,同时也配有亲手操作的演示视频: 见B站。

    1. 下载

    下载很简单(如图1所示),查看可用版本并通过 解锁
    按钮进行相应的下载操作(如下截图所示)。如果网站上没有列出您的目标版本,可以发送请求到进行私人定制。


    图1: 访问下载页面,轻轻点击[解锁]按钮即可通过说明步骤获取

    2. 安装

    如果第一步完成,则相应的软件下载链接通过邮件发送给您。比如OpenFOAM-9的Apple
    Silicon芯片版本(下面的过程全部以此版本为例进行讲解),下载得到的app文件为
    OpenFOAM-9-darwin-arm64.dmg
    镜像文件。双击打开即可得到如下图所示的内容,与常规的MacOS的app安装一样,只需要简单地将OpenFOAM-9 拖入左边的 Applications目录即可完成安装。


    图2: OpenFOAM-9-darwin-arm64.dmg镜像文件中的内容

    拖入完成之后,即可在LaunchPad中发现OpenFOAM-9 app,如下图所示:


    图3: OpenFOAM-9-darwin-arm64.dmg
    app安装完成后即可出现在launchpad中

    app的文件列表

    安装完成之后的app位于路径 /Applications/OpenFOAM-9.app/Contents
    中,其中的文件列表如下图所示。其中 MacOS 目录中存放初始化脚本;
    Resources/bin 中存放所有的可执行文件; Resources/lib
    中存放所有的动态库文件; Resources/etc 中存放所有的环境配置文件;
    Resources/OpenFOAM-9.sparsebundle 为存放源代码的Case
    sensitive镜像文件(用于存放OpenFOAM源代码的,因为OF的源代码的文件名是区分大小写的,然而MacOS的默认文件系统是不区分文件名大小写的,所以通过创建一个区分大小写的disk
    image是比较明智的选择)。


    图4:OpenFOAM-9
    app的路径和文件列表

    详细的文件列表请访问原文查看

    3. 加载OpenFOAM环境

    完成以上步骤之后就跟其他所有系统或者平台下使用OpenFOAM没有区别了,只需要加载环境变量就行。

    首次安装后的环境加载

    首次安装后加载环境很容易,只需要打开lunchpad并用鼠标点击 OpenFOAM-9
    app ( 图3 ) 即可。
    然后会弹出一个小对话框(如下图所示),提示本需要用户进行安全确认。


    图5: OpenFOAM-8-x86_64
    app首次打开的安全验证提示

    对于所有不是App
    Store里面下载的软件,都会有此提示。只需要在系统的Security &
    Privacy里面点击允许即可。

    • Step 1


    图6:在系统的安全&隐私管理里面允许运行OpenFOAM app

    • Step 2


    图7:在系统的安全&隐私管理里面允许运行OpenFOAM app

    细心的同学可能发现,上面的几个截图里面的app名字是OpenFOAM-8-x86_64,这是因为我写这篇博文的时候用的是M1芯片的MacBook,而举例使用的OpenFOAM-9-arm64
    app就是本机器下编译的,所以不会出现安全验证的提示。为了给大家展示这个安全验证的提示信息,所以上面的截图运行的x86_64架构的app是另一个Inter芯片的MacBook上编译的。一般情况下,除了开发者自己的电脑,其他人安装app并第一次打开的时候都会出现以上的安全验证提示。

    安全验证允许之后,会弹出一个终端窗口(如图8所示),在这个终端窗口里已经自动加载了OpenFOAM环境,可以运行OF自带的求解器,所有的相关的环境变量都有效。总之一句话,在这个终端窗口里可以做所有OpenFOAM的工作。


    图8: 运行OpenFOAM app所弹出的终端窗口

    自动加载OpenFOAM环境

    通过上面的方式(直接点击OpenFOAM
    app,在弹出的终端里面进行工作)可以工作,但是如果关闭这个窗口或者在其他的终端窗口里面是没有加载OF环境的,也就意味着无法运行OF的程序。我个人喜欢的一种方式就是在系统环境profile文件里面加入一段代码(如下所示),让其自动加载OpenFOAM环境:
    随便打开一个终端都可以使用OpenFOAM 。

    # =========== OpenFOAM initialization start ===========
    FOAM_DISK_IMAGE=/Applications/OpenFOAM-9.app/Contents/Resources/OpenFOAM-9.sparsebundle
    FOAM_MOUNT_POINT=/Volumes/OpenFOAM-9
    FOAM_VERSION=9
    if [ ! -f ${FOAM_MOUNT_POINT}/etc/bashrc ]; then
       hdiutil attach -quiet -mountpoint ${FOAM_MOUNT_POINT} ${FOAM_DISK_IMAGE} && . ${FOAM_MOUNT_POINT}/etc/bashrc
    else
       source ${FOAM_MOUNT_POINT}/etc/bashrc
    fi
    # =========== OpenFOAM initialization end ===========
    

    只需要复制以上代码并粘贴到 ~/.bash_profile
    文件中并保存即可。这样以后随便打开一个终端都能使用OpenFOAM了,就不用再在Launchpad里面点击OpenFOAM
    app了。

    至此,在Mac系统安装原生OpenFOAM软件及加载环境的步骤就全部完成了,非常容易,一分钟之内就可以完成!
    从此开始,在Mac系统下使用OpenFOAM与Linux系统下完全相同。


  • 并行计算结果与串行结果差异很大的问题
    C ChimneyFoam

    检查了一下damBreak算例的并行,这个procBoundary1to0和procBoundary0to1 的value确实是不相等的,应该不是这个的问题。而且damBreak的并行和串行结果基本一致,说明肯定是我的solver或者边界条件的问题,可是我查了好久的资料都没有找到问题关键在哪。


  • 并行计算结果与串行结果差异很大的问题
    C ChimneyFoam

    @东岳
    processor BC

    这是不是就是问题的所在,这个procBoundary1to0和procBoundary0to1 的value是不是应该相等才对?


  • 并行计算结果与串行结果差异很大的问题
    C ChimneyFoam

    @东岳 我猜也是边界条件的问题,这个processor边界需要自己在求解器里面处理吗?我没有处理过这个,我看OF自带的求解器里面好像也没有做处理,比如buoyantPimpleFoam。东岳老师您可以稍微给我点这方面的例子或者资料吗?多谢多谢!


  • 并行计算结果与串行结果差异很大的问题
    C ChimneyFoam

    问题

    之前用OpenFOAM分块并行计算,并没有注意结果是否有问题。但是最近用并行计算三维模拟的时候出现了很大的问题,这才回头看看二维的情况。发现二维的串行与并行结果差异也是巨大。模拟结果中这个上升的plume结构都不一样了,如果probe某个节点再对比二者的演化值,肯定也是没法接受。下面两个图是并行和串行在1000 year的结果。

    串行计算已经与别人的程序做过benchmark对比了,是完全没有问题的。这个并行与串行的差异问题希望有大佬分享一下经验,多谢!

    • 串行结果

    串行结果

    • 并行结果

    并行结果

    算例说明

    算例使用的求解器是自己写的见docker HydrothermalFoam。

    串行和并行的所有设置都是一样的,下面贴上并行参数设置字典

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       dictionary;
        location    "system";
        object      decomposeParDict;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    numberOfSubdomains 4;
    
    method          scotch;
    
    simpleCoeffs
    {
        n               (2 2 1);
        delta           0.001;
    }
    
    hierarchicalCoeffs
    {
        n               (1 1 1);
        delta           0.001;
        order           xyz;
    }
    
    manualCoeffs
    {
        dataFile        "";
    }
    
    distributed     no;
    
    roots           ( );
    
    
    // ************************************************************************* //
    
    

    边界条件

    其中压力中的noFlux边界条件是自己定义的,其实与fixedFluxPressure边界条件(U==0)的情况是一样的。

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        object      T;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [0 0 0 1 0 0 0];
    
    internalField   uniform 278.15;     //278.15 K = 5 C
    
    boundaryField
    {
        top
        {
            type            inletOutlet;
            phi                     phi;
            inletValue      uniform 278.15;
        }
        bottom
        {
            type fixedValue;
            value   uniform 773.15; //placeholder
        }
        sidewalls
        {
            type            zeroGradient;
        }
    }
    
    // ************************************************************************* //
    
    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        object      p;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [1 -1 -2 0 0 0 0];
    
    internalField   uniform 250e5;
    
    boundaryField
    {
        top
        {
            type            fixedValue;
            value           uniform 250e5; 
        }
        bottom
        {
            type            noFlux;
        }
        sidewalls
        {
            type            noFlux;
        }
    }
    

  • 首个OpenFOAM的VS Code插件公开发布
    C ChimneyFoam

    @张RP @Hungryandfool @沐风 喜欢就帮我来个five star😀,让它在vscode marketplace上活跃起来


  • 首个OpenFOAM的VS Code插件公开发布
    C ChimneyFoam
    • 这是个开源项目,有想法的或者有需要补充的,欢迎加入一起完善它,gitlab仓库地址:https://gitlab.com/vscode_extension/vscode-openfoam

    • 如果发现什么bug或者有什么意见可以反馈到项目的issue tracker,尽量详细一些。issue tracker地址:https://gitlab.com/vscode_extension/vscode-openfoam/-/issues


  • fvm::ddt(rho, T)与rho*fvm::ddt(T)的区别
    C ChimneyFoam

    @东岳 太感谢了!您这次来了一个非常透彻的分析,我的疑问已全部被解决。


  • 传热计算中物性参数分段线性插值问题
    C ChimneyFoam

    @书生kao 你这应该是有状态方程的吧?最简单的办法就是在solver里面直接写一个循环,求解完p T直接搞一个循环,根据状态方程或者你们的实验数据表更新更新每个element的热力学性质值。这种方法就是不通用,只适用于当前solver当前的科学问题,更通用的办法是自己写一个thermophysical lib。这两种方法我都有经验,经过了大半年的摸索,终于打通了😄 我猜你的问题跟我的很像,我是做hydrothermal模拟的,流体是纯水或者海水,而你的是石油和二氧化碳。从变成角度来看,框架是没有区别的


  • OpenFOAM算例文件代码高亮插件的悬停提示功能
    C ChimneyFoam

    @东岳 对的,我也正在琢磨在cfd-online和stackoverflow上推一下的,此插件支持双语版本,根据用户的vscode界面语言选择使用中文还是英文显示


  • OpenFOAM算例文件代码高亮插件的悬停提示功能
    C ChimneyFoam

    回复: 首个OpenFOAM的VS Code插件公开发布
    @沐风 悬停提示,类似下图这样的效果

    ff94112a-9b28-4ea9-9d4c-1fc468bd80d5-image.png


  • 首个OpenFOAM的VS Code插件公开发布
    C ChimneyFoam

    @沐风 我看了你说的这个帖子,好像跟我这个插件不是一回事儿呀。如果我没理解错,你推荐的这个帖子是进行OpenFOAM编程(写Solver的C++编程)的吧?这个VScode现成的插件已经非常强大了,我一直在用,代码高亮、跳转、自动补全非常棒的呀。我搞的这个插件是OpenFOAM进行case setup的时候,高亮显示OpenFOAM的字典文件什么的😂,有了语法高亮在进行算例设置的时候看着会舒服很多,还有后面我会添加命令的悬停提示功能,应该很有帮助。


  • 首个OpenFOAM的VS Code插件公开发布
    C ChimneyFoam

    @沐风 是的,目前这个VScode的代码高亮插件才刚开始,还很初步,只添加了我自己常用的一些命令的高亮。这是个开源项目,如果大家感兴趣或者觉得有用,可以参与一起完善。毕竟我个人的时间非常有限,目前只能倾向于我自己的使用。你推荐的帖子很有用,我会参考并想办法引进到vscode的插件中。


  • 首个OpenFOAM的VS Code插件公开发布
    C ChimneyFoam

    虽然目前市面上也有不少的开源的或商业的OpenFOAM的GUI软件,但是对于一个OpenFOAM深度用户而言,直接用文本编辑器进行操作是最方便最高效的。
    而 VS Code 又是一款非常非常优秀的代码编辑器,那么对其进行语法高亮、智能提示以及代码片段功能就非常有用了,不仅颜值高而且平时码字的时候也会更高效。但是目前还没有发现 VS Code 上的相应插件可供使用。 作者就只能自己动手开发一枚了: vscode-OpenFOAM ,希望能对CFD中文社区做一点点小贡献😎

    VS code插件商店中的展示

    f21c83da-f3a5-45dc-91e3-8e188986a757-image.png 915948d8-7454-4d3b-b65d-2644c0070cc4-image.png

    安装

    与其他的vscode扩展插件安装方法一样,直接在vscode的扩展管理中搜索 openfoam 直接进行安装即可。

    使用

    因为OpenFOAM的各种字典文件和输入数据文件都没有扩展名,而vscode的语法高亮是通过代码文件的扩展名来判断语言的,所以我们需要在vscode的设置中配置 OpenFOAM 语言的探测规则,即通过 files.associations 属性配置来完成,配置方法很简单。VScode的老用户可以忽略此步骤了。

    Code->Preferences->Settings

    在用户Settings.json文件中添加红框所示的内容,可以直接从下面的代码中复制

    "files.associations": {
        "*Dict": "OpenFOAM",
        "*Properties": "OpenFOAM",
        "fvSchemes": "OpenFOAM",
        "fvSolution": "OpenFOAM",
        "**/constant/g": "OpenFOAM",
        "**/0/*": "OpenFOAM"
        }
    

    如此设置之后就可以看到你的OpenFOAM字典文件已经有了语法高亮,如下图所示:

    1. Fields input data

    Color syntaxing for fields data file

    2. thermophysicalProperties

    thermophysicalProperties

    3. blockMeshDict

    blockMeshDict

    4. fvSolution

    fvSolution

    后续工作

    目前已经将大部分的关键词和变量(作者常用的)等进行了语法高亮显示,但是还有一些其他的有待添加。如果有需要的同学可以将自己的需求告诉我,我可以添加进去。各位大佬有什么建议,也可以告诉我哈

    鼠标悬停提示

    正在开发中....

    代码自动补全

    正在开发中...


  • fvm::ddt(rho, T)与rho*fvm::ddt(T)的区别
    C ChimneyFoam

    假设我又一个这样的方程:
    $$\frac{\partial( \rho T)}{\partial t} = -\nabla \cdot (\vec{U}\rho T)$$

    其中$\rho$表示流体(比如水)的密度,根据状态方程及p,T计算出来。请问在离散的时候下面这两种写法的结果有什么区别?

    1. fvm::ddt(rho, T) == -fvm::div(phi,T);

    2. rho*fvm::ddt(T) == -fvm::div(phi,T);


  • OpenFOAM中随时间变化的属性设置
    C ChimneyFoam

    背景:孔隙流求解器中有一个volScalarField permeability类型的量表示孔隙介质的渗透率,一般都是在0文件夹下给定permeability的边界条件和初始条件(渗透率并不需要求解,所以边界条件其实没有什么用,就是个占位符)。如果我想让这个permeability随时间变化(比如k=k0+t*10^-20),怎么实现?

    随时间变化的边界条件好设置,就是不知道如何设置随时间变化的场值?哪位大神有这个经验,求赐教,不胜感激!


  • 请教:buoyantBoussinesqPimpleFoam边界条件设置
    C ChimneyFoam

    @东岳 帖子好像沉掉了,再次求助李老师。主要就是顶部边界条件不知道怎么设置,顶部是定压,也就是P是恒定的,但是流体可以自由出入。而方程中求解的是prgh,所以不知道prgh如何设置边界条件了,可能还需要与出口的速度边界条件保持一致性


  • 请教:buoyantBoussinesqPimpleFoam边界条件设置
    C ChimneyFoam

    @random_ran 原来的求解器的alphaEff好像是根据湍流模型计算出来的,具体细节还没搞懂。我在原来求解器算例的求解过程中输出了这个量,发现是0.001,是个常数。从量纲来看应该与热传导系数/密度/比热相同,我就在修改后的求解器中暂用DT/cp_f/rho0_f代替了。

    而==后面的应该是与源项有关的东西,我这里没有其他热源,所以就去掉了,不知道是不是会有别的影响。(我在原来求解器和BenardCells算例基础上测试了,去掉这一项对结果没有什么影响)

    看结果好像是不能够有效地从底边界传热,不知道是不是边界条件设置的问题,还是其他什么原因


  • 请教:buoyantBoussinesqPimpleFoam边界条件设置
    C ChimneyFoam

    @random_ran 是的,温度跟想象的不一样。
    我试了底边界温度如果太低的话短时间内几乎不会有plume splitting,所以试了一下更高的温度。
    我这里的温度单位都是摄氏度。

    这个我是从原来的求解器基础上改的,用自带的算例BenardCells一步一步测试,求解器简化后对这个算例的结果并没有什么影响,所以我猜求解器修改应该没错。

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]