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中文网

  1. CFD中文网
  2. OpenFOAM
  3. 分享一个在任意文件夹中编译库或求解器的办法

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

已定时 已固定 已锁定 已移动 OpenFOAM
6 帖子 5 发布者 6.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 白 离线
    白 离线
    白礼耕
    写于2019年12月4日 21:13 最后由 编辑
    #1

    众所周知,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`
    
    1 条回复 最后回复
  • B 离线
    B 离线
    bestucan 版主 大神
    写于2019年12月6日 07:07 最后由 编辑
    #2

    我来分享一哈我的配置方法。总之就是把用户自定义的和官方的分开。省的乱了。至于命名,如果修改版本特别多,官方名加日期命名比较好。代码最好用版本管理器,还能加加些笔记标注每个版本做了什么修改,是从哪个版本来的。

    alias ofd='source $HOME/OpenFOAM/OpenFOAM-dev/etc/bashrc;
    export FOAM_USER_SRC=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/src;
    export FOAM_USER_APP=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications;
    export FOAM_USER_SOLVERS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/solvers;
    export FOAM_USER_UTILITIES=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/utilities;
    export FOAM_USER_TUTORIALS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/run/tutorials'
    
    alias of22x='source $HOME/OpenFOAM/OpenFOAM-2.2.x/etc/bashrc;
    export FOAM_USER_SRC=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/src;
    export FOAM_USER_APP=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications;
    export FOAM_USER_SOLVERS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/solvers;
    export FOAM_USER_UTILITIES=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/utilities;
    export FOAM_USER_TUTORIALS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/run/tutorials'
    
    alias of30x='source $HOME/OpenFOAM/OpenFOAM-3.0.x/etc/bashrc;
    export FOAM_USER_SRC=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/src;
    export FOAM_USER_APP=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications;
    export FOAM_USER_SOLVERS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/solvers;
    export FOAM_USER_UTILITIES=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/utilities;
    export FOAM_USER_TUTORIALS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/run/tutorials'
    
    alias of4x='source $HOME/OpenFOAM/OpenFOAM-4.x/etc/bashrc;
    export FOAM_USER_SRC=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/src;
    export FOAM_USER_APP=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications;
    export FOAM_USER_SOLVERS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/solvers;
    export FOAM_USER_UTILITIES=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/utilities;
    export FOAM_USER_TUTORIALS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/run/tutorials'
    
    alias of5x='source $HOME/OpenFOAM/OpenFOAM-5.x/etc/bashrc;
    export FOAM_USER_SRC=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/src;
    export FOAM_USER_APP=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications;
    export FOAM_USER_SOLVERS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/solvers;
    export FOAM_USER_UTILITIES=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/utilities;
    export FOAM_USER_TUTORIALS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/run/tutorials'
    
    alias of6='source $HOME/OpenFOAM/OpenFOAM-6/etc/bashrc;
    export FOAM_USER_SRC=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/src;
    export FOAM_USER_APP=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications;
    export FOAM_USER_SOLVERS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/solvers;
    export FOAM_USER_UTILITIES=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/utilities;
    export FOAM_USER_TUTORIALS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/run/tutorials'
    
    alias of7='source $HOME/OpenFOAM/OpenFOAM-7/etc/bashrc;
    export FOAM_USER_SRC=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/src;
    export FOAM_USER_APP=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications;
    export FOAM_USER_SOLVERS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/solvers;
    export FOAM_USER_UTILITIES=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/applications/utilities;
    export FOAM_USER_TUTORIALS=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION/run/tutorials'
    
    # default version
    of6
    
    #对应OpenFOAM自带的src lib app sol util tut.
    alias msrc='cd $FOAM_USER_SRC'
    alias mlib='cd $FOAM_USER_LIBBIN'
    alias mapp='cd $FOAM_USER_APP'
    alias msol='cd $FOAM_USER_SOLVERS'
    alias mutil='cd $FOAM_USER_UTILITIES'
    alias mtut='cd $FOAM_USER_TUTORIALS'
    
    

    滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

    异步沟通方式(《posting style》from wiki)(下载后打开):
    https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
    提问的智慧(github在gitee的镜像):
    https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way

    1 条回复 最后回复
  • 白 离线
    白 离线
    白礼耕
    写于2019年12月6日 16:46 最后由 编辑
    #3

    是的,就是为了给用户自定义的文件更好分类。
    我的方法是生成FOAM_USER_SRC_A,FOAM_USER_SRC_B,FOAM_USER_SRC_C,可以在每一个文件夹下各自存放自定义库和求解器,这样就避免了重命名或者版本管理。每一个SRC下的文件单独拖出来,都可以直接在cluster上编译运行

    1 条回复 最后回复
  • S 离线
    S 离线
    Samuel-Tu
    写于2019年12月9日 01:45 最后由 编辑
    #4

    感谢分享

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2019年12月9日 04:19 最后由 编辑
    #5

    感谢分享

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • V 离线
    V 离线
    Vortex
    写于2019年12月9日 10:50 最后由 编辑
    #6

    感谢分享

    1 条回复 最后回复
2019年12月4日 21:13

4/6

2019年12月9日 01:45

未读 2
2019年12月9日 10:50
  • 登录

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