@桑葚熟了 目前没有用这些集群了,天河没用过,北京超算云那边感觉服务和价格都还不错,EasyCAE这边很久之前用的了之前价格有点小贵,现在不清楚了。
veen
帖子
-
-
之前试了好多次自己搞都没搞出来,现在能直接用了!
-
有没有什么进展或者文章见刊啊?
-
试试
reconstructParMesh
之后再reconstructPar
?
如果直接处理的话可以运行touch case.foam && paraview case.foam
或者paraFoam -builtin
,但是paraview没法直接处理拉格朗日场,可以试试用tecplot -
@leilei operation pressure是0的话,只要有压力下降就会有负数
-
我又回来了,这次发现虽然写了用坐标去计算不同点的阻力系数,但是实际计算中发现还是均一的,以为是定义的变量被重新赋值了,重写了所有的中间变量发现也没办法解决,目前认为是坐标计算的不对或者openfoam porosityModel不支持非均一的阻力系数设置
如果想用场自定义阻力需要如何操作呢?直接改求解器加入源项,然后在0文件夹写初始场?forAll(cells, i) { gamma_[zoneI][i] = Zero; scalar x = mesh_.C()[i].x(); scalar y = mesh_.C()[i].y(); scalar z = mesh_.C()[i].z(); scalar dir = y; if (xxx) { gamma_[zoneI][i].xx() = xxx; gamma_[zoneI][i].yy() = xxx; gamma_[zoneI][i].zz() = xxx; } D_[zoneI][i] = Zero; D_[zoneI][i].xx() += pow(gamma_[zoneI][i].xx(), 1/3) * dXYZ_.value().x(); D_[zoneI][i].yy() += pow(gamma_[zoneI][i].yy(), 1/3) * dXYZ_.value().y(); D_[zoneI][i].zz() += pow(gamma_[zoneI][i].zz(), 1/3) * dXYZ_.value().z(); D_[zoneI][i] = coordSys_.R().transformTensor(D_[zoneI][i]); // leading 0.5 is from 1/2*rho F_[zoneI][i] = Zero; F_[zoneI][i].xx() += 0.5 * fXYZ_.value().x(); F_[zoneI][i].yy() += 0.5 * fXYZ_.value().y(); F_[zoneI][i].zz() += 0.5 * fXYZ_.value().z(); F_[zoneI][i] = coordSys_.R().transformTensor(F_[zoneI][i]); }
-
@TINGHAIK 下载了还没用过,感觉算气动应该挺不错的了,看里边的案例做的还挺有意思的,不过界面上应该还可以下点功夫,不涉及工程计算用现有的工具可以了。
-
@Samuel-Tu 最近几天看了看salome,感觉照着官方的tut操作一遍,使用上应该没啥问题了,除了操作有点繁琐,其他感觉用起来还挺顺手的,我先学学,学会了可能在b站录个系列教程。
salome的第一个tut就可以创建只有一层的网格,楼主有需要可以自己去看看。
-
@xpqiu u 好的,感谢!
-
@Samuel-Tu 好滴,gmsh和salome哪个好一些呢?
-
preCICE很amazing,用好了应该比自己改求解器简单高效 https://www.bilibili.com/video/BV1iT4y1P7e7/
(现在发帖竟然需要间隔300s ) -
cfmesh好像能定义不同方向不同的加密
-
想在计算完成之后输出ddt(U)和div(phi,U)
直接运行postProcess -func 'ddt(U)'
, 提示ddt is not supported with the postProcess utility FOAM Warning : functionObjects::ddt ddt(U) failed to execute.
运行pisoFoam -postProcess -func 'ddt(U)'
提示in command line pisoFoam -postProcess -func div(phi,U) Placeholder value is <fieldName>
想用coded输出也一直没成功,因为已经有计算结果了,不想动求解器:libs ("libutilityFunctionObjects.so"); type coded; name ddt; codeWrite #{ const volVectorField& U = mesh().lookupObject<volVectorField>("U"); //const volScalarField& phi = mesh().lookupObject<volScalarField>("phi"); // Write volVectorField ddt("ddt", fvc::ddt(U)); ddt.write(); #};
-
@Stan同学 这个看起来比IBM啥的简单一些,我看有人也用它算心脏的流动,坐等出教程,哈哈哈
-
preCICE is the leading open-source coupling library for partitioned multi-physics simulations, including, but not restricted to fluid-structure interaction and conjugate heat transfer simulations.
Partitioned means that preCICE couples existing programs/solvers capable of simulating a subpart of the complete physics involved in a simulation. This allows for the high flexibility that is needed to keep a decent time-to-solution for complex multi-physics scenarios.
The software offers convenient methods for transient equation coupling, communication, and data mapping.
visualisation of how preCICE couples different solvers
-
今天解决了这个问题
先在$WM_THIRD_PARTY_DIR
编译paraFoam并执行wmRefresh
到$WM_PROJECT_DIR/modules/visualization
路径下执行./Allwclean && ./Allwmake && wmRefresh
转到$WM_PROJECT_DIR
路径下执行./Allwmake && wmRefresh
命令:
cd $WM_THIRD_PARTY_DIR
./makeParaView
wmRefreshcd $WM_PROJECT_DIR/modules/visualization
./Allwclean && ./Allwmake && wmRefreshcd $WM_PROJECT_DIR
./Allwmake && wmRefresh -
你的paraFoam没有成功编译,打开的其实是paraview,在paraiew中可以使用VTK格式查看拉格朗日场,运行一下foamToVTK
-
@李东岳 李老师,可能是您python版本的问题,我用的是python3.8,您应该也有python3但是系统调用的是python2.7,可以试试
python3 plot.py
运行。
坐等大佬改我的代码 -
@李东岳 可以是可以,不过数据点得细,或者插值一下再做,您上边这个图应该是用matlab画的
-
很快嗷,Origin就出图了,画出来应该是这样的吧?
-
@霜染丹枫 好滴谢谢!张老师写的书有看过
-
@veen 破案了,应该是paraview读取case的问题openfoam-post-processing
-
今天在做模拟的时候发现,对入口进行CodedFixedValue边界赋值后,noslip壁面的速度不为0,换成FixedValue边界后又正常了,这是为什么呢?
U
boundary conditionFoamFile { version 2.0; format ascii; class volVectorField; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 1 -1 0 0 0 0]; internalField uniform (10 0 0); boundaryField { inlet { type codedFixedValue; value uniform (10 0 0); name codeinlet; code #{ const fvPatch& boundaryPatch = this->patch(); vectorField U = boundaryPatch.Cf(); vectorField u = boundaryPatch.Cf(); scalar zstar = 0.003; scalar kappa = 0.41; scalar ustar = 0.726; scalar ubar = 10; forAll(boundaryPatch, faceI) { //spatial coordinates, type: scalar scalar y = boundaryPatch.Cf()[faceI].y(); U[faceI] = vector((ustar/kappa)*log(1+y/zstar), 0, 0); u[faceI] = 0.1*ubar*exp(-0.5*y)*vector(rand() % 2 - 1, rand() % 2 - 1, rand() % 2 - 1); U[faceI] = U[faceI]+u[faceI]; if (U[faceI].x() < 0) { U[faceI].x() = -U[faceI].x(); } } operator==(U+u); #}; } outlet { type zeroGradient; } land { type noSlip; } symmetry { type slip; } }
这是计算得到的流场
案例文件在这:case.zip -
@Mania 如果是三个面网格不对应的话需要先对它进行插值,变成对应一致的场,然后再对它进行平均,至于钝体位置,应该是可以设置为0值的,或者自己去对应的坐标点赋值一下。之前在另一个软件surfer里边做过类似的东西,主要就是用到克里金插值。
直接平均是需要用网格体积去做加权平均的(这个没试过)。
应该都可以通过matlab、python这些工具去做出来。 -
@霜染丹枫 想问问有没有参考的文献
-
@liujunCFD 不太清楚你想要画什么样的网格,非结构是不需要分块的,pointwise我记得可以实现结构与非结构的混合,画好结构的区域再指定非结构的网格区域求解就好了。
-
@strive_DUT 你编译一下在自己的算例试一下,把场平均打开,然后把averagingProperties添加到constant文件夹。
-
@strive_DUT 可以看看这个求解器,然后自己改造一下pimpleTKEBudgetFoam
-
@liujunCFD
非结构不用划分block,生成网格的方法不一样。
结构化网格基于block生成对应的块网格,非结构网格基于八叉树等算法由面到体或者由体到面生成网格。 -
最近几天又仔细算了一下,发现算出来阻力还是不对,本来定义的是个阻力项,但是实际算出来是加速作用。
想请教一下各位老师有没有什么解决的办法? -
@OF初学者周 这个是最后sample操作时候的报错,求解器的报错在
log.multiphaseEulerFoam
里边。
我修改了求解器为multiphaseEulerFoam
, phase propertiestype basicMultiphaseSystem
, 提示需要定义alpha.water, 添加后还需要定义fvSchemes,可能是我添加有误,操作完成后还出现如下报错:
我也来蹲🙈一个大佬Courant Number mean: 0.0001514815028686309 max: 0.01324964389123762 deltaT = 0.002398081534772182 Time = 0.00239808 PIMPLE: Iteration 1 #0 Foam::error::printStack(Foam::Ostream&) at ??:? #1 Foam::sigFpe::sigHandler(int) at ??:? #2 ? in "/lib/x86_64-linux-gnu/libc.so.6" #3 Foam::MULES::limitSum(Foam::UPtrList<Foam::Field<double> const> const&, Foam::UPtrList<Foam::Field<double> >&, Foam::HashSet<int, Foam::Hash<int> > const&) at ??:? #4 void Foam::MULES::limitSum<Foam::PtrList<Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh> > >(Foam::PtrList<Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh> > const&, Foam::PtrList<Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh> >&, Foam::HashSet<int, Foam::Hash<int> > const&) at ??:? #5 Foam::phaseSystem::solve(Foam::PtrList<Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> > const&, Foam::PtrList<Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh> > const&) at ??:? #6 ? in "/home/veen/Disk/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/multiphaseEulerFoam" #7 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6" #8 ? in "/home/veen/Disk/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/multiphaseEulerFoam" Floating point exception (core dumped)
-
@veen 破案了,求解器发散是因为我把坐标写错了,F_[zoneI]的值不对造成了流场阻力过大,主要思路是没有问题的。
-
最近根据OpenFOAM中DarcyForchheimer模型想要实现自定义的阻力分布曲线,但是写好之后在porousSimpleFoam中运行会报错,查看流场发现阻力明显过大了,不知道能不能有简单点的定义方法呢?
这是运行的报错信息
Time = 166.5 GAMG: Solving for p, Initial residual = 0.0725239, Final residual = 4.0494e-05, No Iterations 6 time step continuity errors : sum local = 7.31179e-06, global = -6.23766e-08, cumulative = 2.94484e-05 smoothSolver: Solving for epsilon, Initial residual = 0.038307, Final residual = 1.89737e-05, No Iterations 5 smoothSolver: Solving for k, Initial residual = 0.0462341, Final residual = 3.10477e-05, No Iterations 5 ExecutionTime = 2.25 s ClockTime = 3 s Time = 167 #0 Foam::error::printStack(Foam::Ostream&) at ??:? #1 Foam::sigFpe::sigHandler(int) at ??:? #2 ? at ??:? #3 Foam::GAMGSolver::scale(Foam::Field<double>&, Foam::Field<double>&, Foam::lduMatrix const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&, Foam::Field<double> const&, unsigned char) const at ??:? #4 Foam::GAMGSolver::Vcycle(Foam::PtrList<Foam::lduMatrix::smoother> const&, Foam::Field<double>&, Foam::Field<double> const&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::PtrList<Foam::Field<double> >&, Foam::PtrList<Foam::Field<double> >&, unsigned char) const at ??:? #5 Foam::GAMGSolver::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:? #6 Foam::fvMatrix<double>::solveSegregated(Foam::dictionary const&) at ??:? #7 Foam::fvMatrix<double>::solve(Foam::dictionary const&) in "/home/veen/Disk/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/porousSimpleFoam" #8 Foam::fvMatrix<double>::solve() in "/home/veen/Disk/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/porousSimpleFoam" #9 ? in "/home/veen/Disk/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/porousSimpleFoam" #10 __libc_start_main at ??:? #11 ? in "/home/veen/Disk/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/porousSimpleFoam" [1] 14023 floating point exception (core dumped) porousSimpleFoam
有可能是我的代码写的有点问题,在调用网格坐标的时候使用
mesh.C()
提示没有声明,但是已经在前边有写const fvMesh& mesh
这是在model中定义的计算方式forAll(cellZoneIDs_, zoneI) { const labelList& cells = mesh_.cellZones()[cellZoneIDs_[zoneI]]; D_[zoneI].setSize(cells.size()); F_[zoneI].setSize(cells.size()); scalar a1 = geo_[0]*(1-betaXYZ_.value().x()); scalar b1 = geo_[1]*(1-betaXYZ_.value().y()); scalar c1 = geo_[2]*(1-betaXYZ_.value().z()); scalar c2 = geo_[3]*(1-betaXYZ_.value().z()); scalar d_ = geo_[3]+geo_[4]; scalar pox = pow(poXYZ_.value().x(), alphaXYZ_.value().x()); scalar poy = pow(poXYZ_.value().y(), alphaXYZ_.value().y()); scalar poz = pow(poXYZ_.value().z(), alphaXYZ_.value().z()); scalar gammax; scalar gammay; scalar gammaz; forAll(cells, i) { scalar x = mesh_.C()[i].x(); scalar y = mesh_.C()[i].y(); scalar z = mesh_.C()[i].z(); scalar dis1 = pow(x,2)/pow(a1,2)+pow(y,2)/pow(b1,2)+pow(z-d_,2)/pow(c1,2); scalar dis2 = pow(x,2)/pow(a1,2)+pow(y,2)/pow(b1,2)+pow(z-d_,2)/pow(c2,2); scalar dis1max = max(pow(geo_[0],2)/pow(a1,2), max(pow(geo_[1],2)/pow(b1,2), pow(geo_[2]-d_,2)/pow(c1,2))); scalar dis2max = max(pow(geo_[0],2)/pow(a1,2), max(pow(geo_[1],2)/pow(b1,2), pow(geo_[2]-d_,2)/pow(c2,2))); if (z>geo_[3] && dis1<1) { //scalar dis = 1-dis1; gammax = pox; gammay = poy; gammaz = poz; } else if (z<geo_[3] && dis2<1) { //scalar dis = 1-dis2; gammax = pox; gammay = poy; gammaz = poz; } else if (z>=geo_[3] && dis1>=1) { scalar dis = dis1-1; scalar dism = dis1max-1; gammax = (1-dis/dism)*pox; gammay = (1-dis/dism)*poy; gammaz = (1-dis/dism)*poz; } else { scalar dis = dis2-1; scalar dism = dis2max-1; gammax = (1-dis/dism)*pox; gammay = (1-dis/dism)*poy; gammaz = (1-dis/dism)*poz; } D_[zoneI][i] = Zero; D_[zoneI][i].xx() = gammax*dXYZ_.value().x(); D_[zoneI][i].yy() = gammay*dXYZ_.value().y(); D_[zoneI][i].zz() = gammaz*dXYZ_.value().z(); D_[zoneI][i] = coordSys_.R().transformTensor(D_[zoneI][i]); // leading 0.5 is from 1/2*rho F_[zoneI][i] = Zero; F_[zoneI][i].xx() = 0.5*pow(gammax,2)*fXYZ_.value().x(); F_[zoneI][i].yy() = 0.5*pow(gammay,2)*fXYZ_.value().y(); F_[zoneI][i].zz() = 0.5*pow(gammaz,2)*fXYZ_.value().z(); F_[zoneI][i] = coordSys_.R().transformTensor(F_[zoneI][i]); } }
-
@Zhy2022 好的谢谢!之后有时间看看论文再来填坑
-
@李东岳 谢谢李老师!
不过有一点想不明白,双流体方程在推导的时候单一相的每一相都会乘以相分数,到湍流分散力这一项为什么就没有了呢? -
@Zhy2022 加油!openfoam里边双流体模型我没有很深入去研究过,几何中心的求取直接根据定义写代码也行https://en.wikipedia.org/wiki/Centroid,用opencv做图像处理之后提取也行。
你算例中的问题可能与设置有关,可以再调试调试算理。 -
@Zhy2022 之前你圈起来的两个参数应该是固相之间的相互作用力或者双流体之间的相互作用力系数,你可以查一下文献。
你的入口边界是均一的固相体积分数?因为你的固相体积分数比较大,不知道你的实验是什么样的设定,但是实际情况中水流携沙也是随着离壁面距离增加而减小的,我的建议可以按实际情况去设定。
在沙堤沉降就达到alphaMax这个是没有问题的吧,或者我没太理解你的意思。
我建议你可以在模拟中用一下网格自适应,提高一下局部的分辨率。关于沙堤堆积后再推进和水沙运动理论有关,在水流携沙运动中,开始的时候水流中沙物质分数较大,在非饱和路径中以堆积为主,随着沙物质的堆积,计算域内非堆积搬运出现概率逐渐增加,沙丘开始逐步运动,你可以求一下沙丘的几何中心,看一看沙丘的运动情况,最开始应该是随着堆积几何中心移动最快,然后出现一段比较稳定的区域,最后如果计算区域和时间足够长,它会以比较衡定的速度运动。(以上是我自己的理解,也有可能有些问题)
-
reactingTwoPhaseFoam解析中湍流分散力的表达式为:
\begin{equation}
\bfM_\turb=C_\rT\rho_\rc k_\rc\nabla\alpha_\rd
\end{equation}
我的理解是$\nabla\alpha_\rd $的值应该为0?从公式推导来看$\nabla\alpha_\rd $是湍流分散力的系数之一,没有确切查到湍流分散力的表达式。
-
@Zhy2022 我那个也就是个Test case,从空气的计算来看没什么问题,你可以先计算一个纯气流的稳定场,然后map到多相流里边再开始算沉积,随着网格分辨率的提高,结果应该会越来越契合实际。
因为没看到你的case,我觉得可能时间步、网格、求解方法可以再调整调整。最大相分数不对我也不清楚为什么,你可以先设置为0.72看看堆积的相分数会不会再增加,更重要的还是看你想说明什么问题再去调整。
另外,水沙输运的求解也可以试试sedFoam。 -
@荷兰后腰阿贾克斯 openfoam里边有个带粗糙高度的边界条件,你也可以试试那个
-
@荷兰后腰阿贾克斯 感觉有可能论文里边指定了壁面的粗糙高度,或者在中间一段再设置一个循环的入口边界条件
-
@Zhy2022 你直接blockmesh改一下,然后改一下流体参数应该就好了,曳力函数也需要改一下。
-
@Zhy2022 刚刚看了我的alphamax也没改,链接在这:https://github.com/Veenxz/Veen_OpenFOAM_Cases/tree/main/2D_Plane_EE_Multiphase
-
@Zhy2022
之前在openfoam里边算过空气中沙物质沉降,算出来最大体积堆积分数和fluent是可以对上的,会不会是alphaMax
这个参数在设置的问题呢?
-
@hongjiewang 空的区域是多孔介质吗?之前在fluent处理是分成不同的区域,交界面设置interface,或许可以考虑用商软划分网格再导入openfoam。
有个小问题想请教:在openfoam里边多孔介质是直接加fvoption计算还是有自己的求解器啊? -
最近也基于pisoFoam植入了一下RKprojection foam,单个计算步不限制残差,projection method的确快很多,但是限制残差之后速度就变得特别慢,并且该算法内存占用量是pisoFoam的20倍。
不知道有没有大佬看到过把这个算法植入到多相流求解器的呢?想尝试一下把这个方法放到多相流计算里边去。 -
@心里的小漩涡 但是到实际工程上,基本不可能满足CFL<1.0吧,几百米几千米的计算域,满足精确计算的话花销太大了
-
我最近也发现一些类似的问题,openfoam求解时库朗数过大会直接发散,对于多相流求解器在1.0以下基本能够稳定求解,对于LES和qDNS可以大一些,但是从求解上来讲这两种方法都需要满足CFL小于1.0?
ANSYS 超算平台的使用
介绍一种新的大气边界层入口生成方法DFSR
用twoPhaseEulerFoam求解水砂输送的问题
用twoPhaseEulerFoam求解水砂输送的问题
并行计算后,reconstructPar后的时间步文件中没有物理场?
请教个简单问题
如何在多孔介质模型中使用自定义阻力分布?
气动中心的NNW软件使用体验
关于二维模型的计算,这两种snappyHexMesh方法有什么不同,应该采用哪一个?
postProcess 输出ddt(U)和div(phi,U)
关于二维模型的计算,这两种snappyHexMesh方法有什么不同,应该采用哪一个?
流体网格的更新问题
关于二维模型的计算,这两种snappyHexMesh方法有什么不同,应该采用哪一个?
postProcess 输出ddt(U)和div(phi,U)
流体网格的更新问题
流体网格的更新问题
of2006安装完找不到paraview和paraFoam
OpenFoam后处理读取颗粒错误
有人会画三维柱状图么?
有人会画三维柱状图么?
有人会画三维柱状图么?
如何在RANS模拟得到的速度场里加噪声(random velocity fluctuations)?
CodedFixedValue边界赋值后,noslip壁面变为滑移边界?
CodedFixedValue边界赋值后,noslip壁面变为滑移边界?
tecplot算一个新变量后无法显示出来怎么解决?
如何在RANS模拟得到的速度场里加噪声(random velocity fluctuations)?
icem非结构网格如何划分block
请问各位大佬怎么对瞬态问题的湍动能取一定时间内的平均值呢?
请问各位大佬怎么对瞬态问题的湍动能取一定时间内的平均值呢?
icem非结构网格如何划分block
如何在多孔介质模型中使用自定义阻力分布?
运行东岳流体reactingTwoPhaseEulerFoam|多流体模型中李老师上传的案例提示错误
如何在多孔介质模型中使用自定义阻力分布?
如何在多孔介质模型中使用自定义阻力分布?
reactingTwoPhaseFoam解析中湍流分散力的问题
reactingTwoPhaseFoam解析中湍流分散力的问题
用twoPhaseEulerFoam求解水砂输送的问题
用twoPhaseEulerFoam求解水砂输送的问题
reactingTwoPhaseFoam解析中湍流分散力的问题
用twoPhaseEulerFoam求解水砂输送的问题
如何给入口速度一个较厚的边界层而且边界层不会消失?
如何给入口速度一个较厚的边界层而且边界层不会消失?
用twoPhaseEulerFoam求解水砂输送的问题
用twoPhaseEulerFoam求解水砂输送的问题
用twoPhaseEulerFoam求解水砂输送的问题
不规则多孔介质的网格划分
projection method 真的比piso快吗?
关于使用层流模型求解湍流时发散的思考
关于使用层流模型求解湍流时发散的思考