@xpqiu 感谢老师详细指点,试了下这个方法确实简洁
林之流风
帖子
-
-
@浪迹天大 感谢回复~如果是二维的可以用白色隐藏,但三维的应该不行了
-
我刚试出一个方法,先通过Calculator计算出速度的大小作为标量结果,因为Threshold貌似只能用标量分割,然后使用Threshold根据上述结果选择区间,这样可实现。如有更简单的方法还请各位老师指点~
-
@shepherd 感谢回复~ 将下限提高后,速度小的网格部分没有隐藏掉,而是和区间内最小速度一个颜色
-
各位老师好,paraview能否显示一定速度区间的网格部分?比如一个算例速度较大的部分很少,想单独显示这部分,而隐藏速度小的网格部分,不知在paraview能否实现?
-
@东岳 多谢老师!
-
@东岳 谢谢东岳老师,那就是说这个值设置0还是1没影响么,我还以为是和alpha有关系
-
各位老师好,关于interFoam的算例capillaryRise 0/alpha.water 中 constantAlphaContactAngle这个边界条件是怎么工作的呢?里面“value”这个关键词是什么意义?网上资料没有找到,而代码没看懂,请老师指点
walls { type constantAlphaContactAngle; theta0 45; limit gradient; value uniform 0; }
-
各位老师好,我想在OF里植入一个与流动直径有关的边界条件。通过sHM后得到的网格,其各流动通道直径不一且比较复杂,能否获取各网格所在流动通道的当量直径呢?在网上查阅
wallDist(mesh).y()
可以计算网格到壁面的最近的距离,但不知道能否用来计算出直径。 -
@bestucan 非常感谢老师的详细建议。因为集群之前就已经安装过OF,我是在个人账户里安装OF7版本的,所以可能就差这一个包。我已经使用了跑了计算,目前来看没什么问题
-
@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,经过了很长时间编译成功,接下来对自定义的求解器编译,也类似于在虚拟机操作的步骤了。如果是不同版本,编译自定义的求解器会有代码语句上的一些不同提示报错,需要修改下。 -
@bestucan 感谢您的回复,我没有超级用户权限。那如果不在个人用户文件夹安装OF,将在虚拟机修改的求解器拷贝到个人文件夹,使用集群的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
-
@东岳 谢谢东岳老师!
-
@东岳 东岳老师您好,我按照上述步骤运行,会报错Cannot find patchField entry for fixedWalls_xxx (xxx是我stl中solid的命名)。
我把上述decomposePar改为decomposePar -copyZero,运行会报错Cannot find patchField entry for procBoundary6to0等等。后来我在0文件夹的各初始条件文件中添加了
"proc*.*" { type processor; }
成功运行了。
请问老师这是不是正确的方法?网上也有写加上value uniform的,比如下面,两者有区别吗?
"proc.*" { type processor; value uniform 0; }
-
@东岳 好的,谢谢东岳老师~
-
各位老师好,使用sHM并行后要先reconstructParMesh再使用求解器计算吗?还是先使用求解器计算再reconstructParMesh和reconstructPar?
举个栗子,如下两个步骤哪个正确?blockMesh decomposePar mpirun -np 24 snappyHexMesh -parallel -overwrite reconstructParMesh -mergeTol 1e-6 -constant mpirun -np 24 simpleFoam -parallel reconstructPar
blockMesh decomposePar mpirun -np 24 snappyHexMesh -parallel -overwrite mpirun -np 24 simpleFoam -parallel reconstructParMesh -mergeTol 1e-6 -constant reconstructPar
-
@东岳 老师,应该放在什么位置呢,我放在了crateFields.H 里面新定义的量下面
Info<< "Reading field nuk\n" << endl; volScalarField nuk ( IOobject ( "nuk", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ), mesh ); const fvPatchList& patches = nuk.mesh().boundary(); forAll(patches, patchi) { scalarField one(3.0, nuk.mesh().boundary()[patchi].size()); nuk.boundaryFieldRef()[patchi].patchInternalField() = one; }
还是这种问题,这是为什么呢?
-
@东岳 老师您好,我尝试了您给出的这行代码
scalarField one(1.0, nu_.mesh().boundary()[patchi].size()); nu_.boundaryFieldRef()[patchi].patchInternalField() = one;
成功编译,但是运行时报错
Attempted assignment to a const reference to an object of type N4Foam5FieldIdEE From function void Foam::tmp<T>::operator=(const Foam::tmp<T>&) [with T = Foam::Field<double>]
是不是不能这样赋值给patchInternalField()?应该怎么修改呢?
-
@东岳 老师,这个公式(1)是他们参考另一篇文章
Wu, K., Chen, Z., Li, J., Li, X., Xu, J., & Dong, X. (2017). Wettability effect on nanoconfined water flow. Proceedings of the National Academy of Sciences, 114(13), 3358-3363. https://www.pnas.org/content/114/13/3358.short
我的理解是因为在纳米管内靠近壁面的位置,粘度变化没有统一的解析解,所以看到一些文章就这么分成“多层”粘度,算是粗略简化的方法吧 -
@东岳 非常感谢老师深入讲解!这个方法似乎还有一些问题,我添加了您修改的代码如下所示,成功编译。
bool Foam::viscosityModels::twonuNewtonian::read ( const dictionary& viscosityProperties ) { viscosityModel::read(viscosityProperties); viscosityProperties_.lookup("nu") >> nu0_; nu_ = nu0_; const fvPatchList& patches = nu_.mesh().boundary(); forAll(patches, patchi) { scalarField one(1000.0, nu_.mesh().boundary()[patchi].size()); nu_.boundaryFieldRef()[patchi].patchInternalField() = one; } return true; }
不过在计算后,发现与更改粘度模型前的计算结果对比发现没有区别 ,是不是边界条件覆盖了它的作用?
- 从代码上来看,是对边界临近的一层网格赋予一个粘度值,能否控制对距离边界的N层内网格赋一个粘度,这样边界条件就不会对它影响?
- 从代码上来看,是对所有边界临近的一层网格赋予一个粘度值,可是只想对某一特定的边界赋值,我在这个网页 openfoam寻找与某一边界相邻的一层网格 得知可以通过以下方法定位到边界的ID,如何加到上述代码里来实现呢?
label patchID = mesh.boundaryMesh().findPatchID("cylinder");
老师您曾在这个帖子回复过我用坐标划分区域设置不同粘度,不过经过sHM后剖分的网格,流动通道很多而且壁面都是不规则的,难以通过用坐标来划分,所以想通过边界附近的网格入手去设置。
问题有点多,恳请老师指点迷津,麻烦老师了 -
@东岳 老师,这个方法似乎有一些不妥,我修改了simpleFoam求解器调用的Newtonian粘度模型(暂且新命名为“twonuNewtonian”),添加了代码
nu_.patchInternalField() = scalar(1000);
但是wmake libso时报错如下
error: ‘Foam::volScalarField’ has no member named ‘patchInternalField’
请问老师应该如何修改 初次接触编程,网上看了一些关于patchInternalField的内容,仍然一知半解,它的本质指的是什么,不知道能不能这样对其赋值。
twonuNewtonian.C 部分代码如下:
bool Foam::viscosityModels::twonuNewtonian::read ( const dictionary& viscosityProperties ) { viscosityModel::read(viscosityProperties); viscosityProperties_.lookup("nu") >> nu0_; nu_ = nu0_; nu_.patchInternalField() = scalar(1000); //此处一行是所添加的 return true; }
-
@东岳 东岳老师您好,我研究的空间尺度是微纳米尺度,想这么做是因为有文章在微观尺度上、通过分子模拟等指出,流体在靠近壁面的粘度与通道中心是不同的,这个临界厚度也就0.7nm左右,于是我就在每个通道临近边界的0.7nm厚的区域设置一个额外的粘度。
有一些困惑,一是不知道上面我写的代码对不对,应该放在哪个位置;二是如果想仅在一个名为“fixedWalls”的path的临近区域设置一个额外的粘度,该如何编写?
感谢老师 -
@东岳 上一条回复中的代码我更改一下```
nu_.patchInternalField() = scalar(1000) ;
想加一个类似于这样的代码,不知是否正确
-
非常感谢东岳老师留意,主要问题有这几点:
- 想加一个类似于这样的代码,但不知是否正确,没有找到类似的例子
nu_.patchInternalField() = 1000 ;
- patchInternalField 指的是跟边界相邻的区域,如何设置这个区域的厚度?比如跟边界相邻的两层网格、三层网格?
- 以simpleFoam求解器为例,这一行代码应该加到createFields.H里,还是应该加到它所调用的粘度模型如Newtonian.C里?
-
在帖子 在openfoam对边界层的处理,为什么仅仅修正边界,而不是跟边界相邻的那一层网格? 得知 跟边界相邻的那一层网格与patchInternalField 有关,能否在求解器程序中,将边界相邻的那一层网格(或区域)的粘度固定为一个值。但又不知如何写起,恳请大神指点,谢谢!
-
大家好~我用snappyHexMesh剖分出了一套微观尺度岩石内部孔隙的网格,在下一步的流动模拟时,想在每个通道临近边界的区域设置一个高粘度 (通道中心是另一个粘度),不知如何实现,希望大神们详细指点,非常感谢!
-
@dzw05 请问您具体是如何处理的?
-
@东岳 好的,非常感谢老师您的帮助
-
@东岳 老师,这个代码是写在哪里?transportProperties里面吗还是?
-
@东岳 老师我的想法就是把粘度固定,absorbed层是粘度1,free层是粘度2,应该如何设置呢?这个物理过程就是由于壁面相互作用,在absorbed层和free层的粘度不同。
图片摘自文章Wang, H., Su, Y., Wang, W., Li, L., Sheng, G., Zhan, S. (2019). Relative permeability model of oil-water flow in nanoporous media considering multi-mechanisms. Journal of Petroleum Science and Engineering, 183, 106361.
-
@东岳 我有个想法,在simpleFoam的基础上,改变粘度在管内的分布,即在不同的区域设置不同的粘度,但不知如何实现,恳请老师指点一下
-
@东岳 老师您说的多孔介质指的是porousSimpleFoam吗?要在一个case里面,将两个区域分别计算再整合么?
-
@东岳 感谢东岳老师回复!这篇文章是说在一个纳米尺度管内的单相流,有吸附的流体和自由的流体,吸附的流体在壁面附近,于是管内形成吸附区域和自由区域。这种情况在OF应该如何模拟呢。我按simpleFoam去模拟,只能模拟自由流体。
-
我用的是simpleFoam模拟单相流动,但是在单管内有这种“多层”时该如何处理呢?恳请老师指点,谢谢!
-
各位老师、前辈们好,我是一个OF的新手,想问一下在OF如何在一个单管模拟“多层”的流动。如图,在一个单管内有吸附层和自由层,应当如何划分区域并设置边界条件,具体如何实现呢?谢谢! 图片摘自文章Cui, J., Sang, Q., Li, Y., Yin, C., Li, Y., Dong, M. (2017). Liquid permeability of organic nanopores in shale: Calculation and analysis. Fuel, 202, 426-434.
-
@麦迪文 那您觉得应该从哪方面入手,小白我还没有改过边界
-
@麦迪文 谢谢您的帮助~不是说壁面上的流体能逆着流向走,而是壁面上有一层流体不动。
-
@东岳 非常感谢东岳老师回复!我也认为如果把第一个的不可移动流体当成无滑移固体壁面,第一个和第二个没有太大区别。所以想知道OF里有没有关于负滑移这种条件的设置和实现。
-
-
各位前辈、同学,您们好!请问在OpenFOAM中有负滑移的边界条件吗
-
@东岳 非常感谢东岳老师回复。请问不成立的原因是什么呢?
-
各位前辈、同学,您们好!
图片是采用interFoam计算的单管两相流,蓝色为水、红色为油,左端为入口、右端为出口。我想对水相设定无滑移边界条件,给油相设定有滑移边界条件,在理论中这是成立的吗?如何在OpenFOAM里实现呢?
谢谢!
paraview能否显示一定速度区间的网格部分
paraview能否显示一定速度区间的网格部分
paraview能否显示一定速度区间的网格部分
paraview能否显示一定速度区间的网格部分
paraview能否显示一定速度区间的网格部分
关于 constantAlphaContactAngle条件
关于 constantAlphaContactAngle条件
关于 constantAlphaContactAngle条件
能否获取三维流动通道的当量直径
能否在集群的个人文件夹内安装OF
能否在集群的个人文件夹内安装OF
能否在集群的个人文件夹内安装OF
能否在集群的个人文件夹内安装OF
关于sHM并行后的reconstructParMesh和reconstructPar的疑问
关于sHM并行后的reconstructParMesh和reconstructPar的疑问
关于sHM并行后的reconstructParMesh和reconstructPar的疑问
关于sHM并行后的reconstructParMesh和reconstructPar的疑问
sHM后如何在临近边界的区域设置高粘度
sHM后如何在临近边界的区域设置高粘度
如何模拟“多层”的流动
sHM后如何在临近边界的区域设置高粘度
sHM后如何在临近边界的区域设置高粘度
sHM后如何在临近边界的区域设置高粘度
sHM后如何在临近边界的区域设置高粘度
sHM后如何在临近边界的区域设置高粘度
sHM后如何在临近边界的区域设置高粘度
sHM后如何在临近边界的区域设置高粘度
OpenFOAM有方法能够使一部分网格不参与计算吗?
如何模拟“多层”的流动
如何模拟“多层”的流动
如何模拟“多层”的流动
如何模拟“多层”的流动
如何模拟“多层”的流动
如何模拟“多层”的流动
如何模拟“多层”的流动
如何模拟“多层”的流动
关于负滑移
关于负滑移
关于负滑移
关于负滑移
关于负滑移
如何对两相设置不同的滑移条件
如何对两相设置不同的滑移条件