能否在集群的个人文件夹内安装OF



  • 各位老师好,我在虚拟机内自定义修改了一个求解器,想放在集群里使用。因为在虚拟机里自定义的文件是放在OpenFOAM的run里的,所以想在集群的个人文件夹内安装一个OpenFOAM。不知能否在集群的个人文件夹内安装OF。我将OpenFOAM-7和ThirdParty-7下载并解压,配置环境变量,然后编译OpenFOAM7,报错如下:

    flex wmkdep.l; \
    gcc -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -Wall -O3   -fPIC lex.yy.c -o /gpfs/xxx/OpenFOAM/OpenFOAM-7/wmake/platforms/linux64Gcc/wmkdep
    /bin/sh: flex: command not found
    gcc: error: lex.yy.c: No such file or directory
    gcc: fatal error: no input files
    compilation terminated.
    

    请问是哪儿出了问题?我看了一下集群的gcc版本是5.3.0


  • Linux讲师

    flex这个命令是缺了的。但是如果你没超级用户权限是无法按装很多依赖软件的,可以编译安装在指定文件夹,但会很麻烦。

    修改OpenFOAM的安装位置这个就更麻烦了。可以参考这个:二楼的帖子

    一楼的从三楼描述来看其实并没有修改安装位置,只是修改了源代码的位置,安装位置还是默认的。



  • @bestucan 感谢您的回复,我没有超级用户权限。那如果不在个人用户文件夹安装OF,将在虚拟机修改的求解器拷贝到个人文件夹,使用集群的OF能否编译我个人用户文件夹的求解器?这样的话环境变量需要怎么修改呢?:xiexie:



  • 可以,修改 etc/bashrc 里面的 FOAM_INST_DIR,改成你想要安装的路径。然后,尝试去运行 ./Allwmake 。运气好的话,直接就能编译了。如果遇到报错,多半是缺少某些依赖组件,比如你上面的报错是因为系统缺少 flex 这个程序导致的。遇到这种情况,有两个办法,一个是请有 root 权限的管理员帮你把 flex 安装了,另一个办法是自己去下载 flex 的源码来编译,把 flex 也安装到你自己的目录下。OpenFOAM 的离线编译,在 gcc 和 mpi 版本足够用的情况下,可能会缺的依赖库大概是 flex , bison, zlib, boost, 等等,都可以通过自己下载源码编译到自己目录下的方式来解决。要完成这些工作,你需要学习一下从源码编译 flex 等软件的方法,以及编译好之后配置环境变量的方法。


  • Linux讲师

    @林之流风 能编译,要动那些影响生成文件的环境变量,和存放库文件的环境变量。他们不只是生成的位置,还是读取的位置。FOAM_USER 开头的应该都要变。没具体实施过,目前想象是这么些。

    这些能操作成功的前提是 openfoam 的版本号得对的上。否则比较麻烦。还有一个思路可以考虑:交叉编译。即用A平台编译B平台可以运行的二进制文件。

    无超级用户权限还是很麻烦的,要联系有权限的。不然,目前看依赖三个包。一装,每个包又各自依赖三个包,会让人崩溃的。



  • @xpqiu @bestucan 非常感谢两位老师的建议!
    我的目的是:在虚拟机内自定义修改了一个求解器,想放在集群里编译使用。试了两个方法似乎都编译成功了,我把我的步骤简要说一下,如果有什么错误请各位老师指正:
    1、用集群的OpenFOAM编译。之前不敢用集群的OpenFOAM编译自己个人文件夹的求解器,因为我不知道 $FOAM_USER开头的这些环境变量具体的是什么目录,在终端键入env后就可以看到这些环境变量了,其实用集群的个人账户登录,这些目录都在自己的个人文件夹里,所以接下来和在虚拟机操作类似了。
    2、在集群个人文件夹内安装OpenFOAM(如果想用其他版本的OF的话)。开始报错说我缺少flex,我找集群管理员要了root账号,因为我们集群的系统是Centos,所以我键入yum -y install flex 来安装flex。flex安装成功后,登陆个人账户,在终端键入env后可以看到 $FOAM_INST_DIR是在我个人文件夹内的目录。编译OF,经过了很长时间编译成功,接下来对自定义的求解器编译,也类似于在虚拟机操作的步骤了。如果是不同版本,编译自定义的求解器会有代码语句上的一些不同提示报错,需要修改下。


  • Linux讲师

    @林之流风能否在集群的个人文件夹内安装OF 中说:

    1、用集群的OpenFOAM编译。之前不敢用集群的OpenFOAM编译自己个人文件夹的求解器,因为我不知道 $FOAM_USER开头的这些环境变量具体的是什么目录,

    如果是个人帐户,怎么折腾都行,不用怕搞坏系统,因为没权限。

    在终端键入env后就可以看到这些环境变量了,其实用集群的个人账户登录,这些目录都在自己的个人文件夹里,所以接下来和在虚拟机操作类似了。

    如果只是看某个环境变量 echo $FOAM_INST_DIR 就行。

    2、在集群个人文件夹内安装OpenFOAM(如果想用其他版本的OF的话)。开始报错说我缺少flex,我找集群管理员要了root账号,因为我们集群的系统是Centos,所以我键入yum -y install flex 来安装flex。

    yum 的 -y 最好不用,这个是默认 yes 。有时候安装软件会更新一些软件再卸载一些软件。还是看看没啥大影响再 yes。

    flex安装成功后,登陆个人账户,在终端键入env后可以看到 $FOAM_INST_DIR是在我个人文件夹内的目录。编译OF,经过了很长时间编译成功,

    按说编译时候缺包很难只缺一个包,你说编译成功了,怎么确认的呢?编译log有没有保留?有没有搜 log 里的 warning 和 error? 当然不考虑这些兴许也能往下走,但是出了问题,就比较难定位了,因为可能的坑比较多。编译安装最好按官网的要求把需要的包都装上。



  • @bestucan 非常感谢老师的详细建议。因为集群之前就已经安装过OF,我是在个人账户里安装OF7版本的,所以可能就差这一个包。我已经使用了跑了计算,目前来看没什么问题:xiexie:


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2