Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新
    1. Home
    2. 白礼耕
    白
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Groups

    白礼耕

    @白礼耕

    22
    Posts
    149
    Profile views
    1
    Followers
    0
    Following
    Joined Last Online

    白礼耕 Follow

    Best posts made by 白礼耕

    • 分享一个在任意文件夹中编译库或求解器的办法

      众所周知,OpenFOAM只允许用户把编译好的库(lib)和求解器(solver)放在 $FOAM_USER_APPBIN 或 $FOAM_APPBIN 文件夹中。

      科研时间久了,某一个库经过太多次的修改,会有很多个不同版本的代码。如果需要使用其中的一个版本,就要重新编译。如果想同时保留两个版本的求解器,就只能在修改代码的过程中,精心安排每一个编译好的库的名字,比如把 Make/files 文件中的 libcombustionModels 命名为 libcombustionModelsNew libcombustionModelsNewNew…… 只有这样,才能保留不同求解器各自需要的库(.so)文件。改的库多了,工作量就会几何增长!(比如turbulenceModels 建立在thermophysicalModels的基础上,lagrangian 又基于湍流模型,每一个库里都有大量的lib,每一个修改过的lib都需要重新命名,牵一发动全身!如果改了fluidThermo,那简直是欲哭无泪)

      网上好像还没有人讨论过这个问题。经过研究,终于找到了一个打破僵局的办法。实现一个新的算法,只需要把新代码放在一个文件夹下,所有库的名字都不用修改。新生成的库,都会以旧代码的库名字保存在新的文件夹下,只要solver中指定需要哪个文件夹下的库就好了。

      首先打开terminal,进入到OpenFOAM的文件夹下

      $cd $WM_PROJECT_DIR/etc/
      

      在bashrc文件中添加一行代码(在terminal中输入以下代码):

      $sed -i '/WM_PROJECT_USER_DIR_DEV/iexport WM_PROJECT_USER_DIR_DEV=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION-dev' bashrc
      

      其中,WM_PROJECT_USER_DIR_DEV 是自己取的名字,$USER-$WM_PROJECT_VERSION-dev 是想要储存新代码和库的文件夹路径,这里是创建user-版本号-dev,和$FOAM_USER_APPBIN文件夹同级。

      之后,

      $cd $WM_PROJECT_DIR/etc/config
      $sed -i '/FOAM_USER_LIBBIN/iexport WM_PROJECT_USER_DIR_DEV=$WM_PROJECT_USER_DIR_DEV/platforms/$WM_OPTIONS/lib' settings.sh
      $sed -i -e 's=_foamAddLib  $FOAM_USER_LIBBIN\:=_foamAddLib  $FOAM_USER_LIBBIN_DEV:$FOAM_USER_LIBBIN=' settings.sh 
      

      完成在$FOAM_USER_LIBBIN这一行添加新的路径$FOAM_USER_LIBBIN_DEV,其位置在新代码所在的文件夹中。

      之后,只要参照下面的命令批量替换新代码中Make/options和Make/files中OpenFOAM寻找库的路径,并保证求解器调用新路径下的库就好了!

      sed -i "s/$(FOAM_USER_LIBBIN/$(FOAM_USER_LIBBIN_DEV/g" `grep "lib<自己命名的库>" -rl ~/OpenFOAM/user-版本号-dev/src`
      
      posted in OpenFOAM
      白
      白礼耕

    Latest posts made by 白礼耕

    • RE: 如何获得cell里的parcel数量,得到总的体积?

      parcels.theta()().write();
      后处理通过theta场和网格体积求parcel的体积。
      总质量不就是书橱文件中的mass introduced么

      posted in OpenFOAM
      白
      白礼耕
    • RE: AMD 新CPU好像测试结果还不错啊

      @红豆沙 同样的code,用128个核并行计算,在因特尔的服务器上算的好好的,放在AMD搭建的cluster上就发散……简直是玄学,也不知道是因为mpi库的问题还是因特尔和AMD的区别。AMD稳定性真是差太多了

      posted in C斯达克
      白
      白礼耕
    • RE: 无意间想到List的一个好用法

      @Samuel-Tu 是的,new一维数组,通过指针对数组操作,不需要的时候还要delete释放内存 :)

      posted in OpenFOAM
      白
      白礼耕
    • RE: 拉格朗日粒子追踪死循环

      @yfclark 当然可以啦,什么网格都能算的。你是卡在了Added 1 new parcels这么?

      posted in OpenFOAM
      白
      白礼耕
    • RE: 湍流粘性能的计算公式

      @爱学习的LDH
      湍流粘性能的英文是什么?我只听过turbulence kinetic energy,好奇:chouchou:

      posted in OpenFOAM
      白
      白礼耕
    • RE: LES中关于Resolved TKE和Modelled TKE求解比例的问题

      @wg0632 感觉你对大涡中的平均值有误解。
      model的k也是平均值,只不过是平均值的瞬时值,就是大涡中所谓reolve出的物理量。
      residuals是滤掉的需要模型才能得到的量。无论是resolved还是residuals,都分别有瞬时值和平均值。将modeled TKE取平均,得到的是平均值的平均值,就是没有波动的平均值。但即使是未取平均的TKE。也一样是一个平均值。
      下面这张图就非常好

      Screenshot from 2019-12-12 15-38-04.png

      posted in OpenFOAM
      白
      白礼耕
    • RE: 拉格朗日粒子追踪死循环

      @yfclark 是不是你的网格太密了?欧拉-拉格朗日法的基本假设就是粒子的质量远小于网格中欧拉相的质量。网格太密,物理意义上就不成立了。
      可以通过intermediate/clouds/Templates/KinematicCloud中的theta()函数查看液相和气相的体积比,只在屏幕上输出最大值就好。如果值大于1,那就可能有问题了。处在交界面上会自动判断归属于哪个网格或是直接删除,除非几乎所有parcel都很小并且处在交界面上,才会出问题,基本不可能——就算是这种情况,提示的也是除0的错误。所以,大概率是网格过密。是不是用了渐变网格?喷嘴附近的网格是不是比粒子初始直径还小?建议从这个角度入手解决。
      另一个思路是,调整parcelsPerSecond

      posted in OpenFOAM
      白
      白礼耕
    • RE: 无意间想到List的一个好用法

      @Samuel-Tu 可以new一个空间,不会影响并行。但是不建议用链表或者二维数组,很影响效率和内存。有时候,索引链表花的时间甚至比解输运方程还多!我觉得最好不要用List。无论是链表还是多维数组,都是编译器帮你完成的寻址工作,最后从占用内存上讲都是一个一维数组。栈上还稍好,存储在堆上就疯了。自己计算元素的index,全部储存在一个一维数组中是最高效的方案

      posted in OpenFOAM
      白
      白礼耕
    • RE: MPPICInterFoam中的bug?

      @东岳 Thanks again for your help! 谢谢

      posted in OpenFOAM
      白
      白礼耕
    • RE: MPPICInterFoam中的bug?

      @东岳 The expression in the paper (Fig. 2 in paper "Extended CFD–DEM for free-surface flow with multi-size granules", which is given as alphaf) is alphac = 1-alpha.particle which is different from what you provided (alphac = 1 - alpha.air - alpha.particle). I just wanted to clarify which one is in the code?

      Thank you again!

      posted in OpenFOAM
      白
      白礼耕