速度出口边界条件有问题,改成防止回流的边界条件就可以。
一朵苍凉
帖子
-
使用overInterDyMFoam计算均匀来流的圆柱入水问题 -
使用overInterDyMFoam计算均匀来流的圆柱入水问题参照一篇论文在做圆柱入水问题,该论文是基于star CCM+计算了均匀风和流速下,圆柱垂直入水问题。想学着使用OpenFOAM复现一下。
网格是基于snappyHexMesh和blockMesh生成的,几何比较简单,网格如下图所示。使用KOmegaSST湍流模型进行计算,近壁面处理使用全壁面函数。发现CN的时间离散格式不支持MULES方法的SubCycles,所以将时间离散格式又改成了Euler,对流项的离散格式除了湍流相关物理量使用upwind格式,其余都使用二阶格式。扩散项使用中心差分格式,oversetInterpolation使用inverseDistance。fvSchemes和fvSolution的设置贴于下方。现在的问题是静水计算没有问题。之前做的其他使用overInterDyMFoam和波浪入射条件的也都没啥问题。因为均匀来流的问题和DTCHull计算船舶阻力的问题很相似,所以边界条件是参照DTCHull算例进行设置的,按照我的理解应该是没有问题的。但是加上来流之后计算就几乎是一提交就崩溃退出。麻烦各位前辈帮忙分析一下原因和解决方法。防沉,手动艾特一下大佬~ @队长别开枪 , @wwzhao
网格布置
初边值条件FoamFile { version 2.0; format ascii; class volScalarField; location "0"; object alpha; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 0 0 0 0]; internalField uniform 0; boundaryField { #includeEtc "caseDicts/setConstraintTypes"//为基类型提供自动的边界条件,oversetPatch和sides inlet { type fixedValue; //提供一个固定值约束 value $internalField; } outlet { type variableHeightFlowRate;//提供基于局部流动条件的相分数条件,其中值被限制在用户定义的下限和上限之间。 lowerBound 0; upperBound 1; value $internalField; } stationaryWalls { type zeroGradient; //从边界面内部场向边界面应用零梯度边界条件 } atmosphere { type inletOutlet;//提供一般流出条件,在有回流的情况下具有指定的流入量 inletValue uniform 0; value uniform 0; } floatingObject { type zeroGradient; //从边界面内部场向边界面应用零梯度边界条件 } } FoamFile { version 2.0; format ascii; class volScalarField; object p_rgh; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [1 -1 -2 0 0 0 0]; internalField uniform 0; boundaryField { #includeEtc "caseDicts/setConstraintTypes"//为oversetPatch和sides指定默认基类型,这里是oversetPatch和sides inlet { type fixedFluxPressure; value $internalField; } outlet { type zeroGradient; } stationaryWalls { type fixedFluxPressure; value $internalField; } atmosphere { type totalPressure; p0 uniform 0; U U; phi phi; rho rho; psi none; gamma 1; value uniform 0; } floatingObject { type fixedFluxPressure; value $internalField; } } FoamFile { version 2.0; format ascii; class pointVectorField; object pointDisplacement; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 1 0 0 0 0 0]; internalField uniform (0 0 0); boundaryField { #includeEtc "caseDicts/setConstraintTypes"//为基类型提供默认边界条件,oversetPatch和sides inlet { type fixedValue; value uniform (0 0 0); } outlet { type fixedValue; value uniform (0 0 0); } stationaryWalls { type fixedValue; value uniform (0 0 0); } atmosphere { type fixedValue; value uniform (0 0 0); } floatingObject { type calculated; value uniform (0 0 0); } oversetPatch { patchType overset; type zeroGradient; } sides { patchType overset; type zeroGradient; } } FoamFile { version 2.0; format ascii; class volVectorField; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Umean 1.525; mUmean -1.525; dimensions [0 1 -1 0 0 0 0]; internalField uniform ($mUmean 0 0); boundaryField { #includeEtc "caseDicts/setConstraintTypes"//为基类型提供自动的边界条件,主要指oversetPatch和sides inlet { type fixedValue; value $internalField; } outlet { type outletPhaseMeanVelocity; alpha alpha.water; Umean $Umean; value $internalField; } stationaryWalls { type fixedValue; value uniform (0 0 0); } atmosphere { type pressureInletOutletVelocity; tangentialVelocity $internalField; value uniform (0 0 0); } floatingObject { type movingWallVelocity; value uniform (0 0 0); } } FoamFile { version 2.0; format ascii; class volScalarField; object zoneID; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 0 0 0 0]; internalField uniform 0; boundaryField { #includeEtc "caseDicts/setConstraintTypes"//为基类型提供自动的边界条件 inlet { type zeroGradient; } outlet { type zeroGradient; } stationaryWalls { type zeroGradient; } atmosphere { type zeroGradient; } floatingObject { type zeroGradient; } }
运动属性定义
FoamFile { version 2.0; format ascii; class dictionary; object dynamicMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // motionSolverLibs (sixDoFRigidBodyMotion); dynamicFvMesh dynamicOversetFvMesh; solver sixDoFRigidBodyMotion; solver { type Newmark; } sixDoFRigidBodyMotionCoeffs { patches (floatingObject); innerDistance 100.0; outerDistance 101.0; centreOfMass (0 0 0.1); velocity (0 0 -6.1);//下落速度 // Density of the solid rhoSolid 898.38; D 0.05; L 0.2; // Cuboid mass mass 0.3528; // 关于质心的物体转动惯量 momentOfInertia (0.00123 0.00123 1.1025e-4); rhoInf 1; report on; accelerationRelaxation 0.5; accelerationDamping 1.0; solver { type Newmark; } constraints { } restraints { } }
离散格式和求解设置
FoamFile { version 2.0; format ascii; class dictionary; object fvSchemes; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ddtSchemes { //default CrankNicolson 0.5; default Euler; } gradSchemes { //default cellLimited Gauss linear 1; default cellLimited Gauss linear 0.5; grad(U) cellLimited Gauss linear 1; //grad(k) cellLimited Gauss linear 1; //grad(omega) cellLimited Gauss linear 1; grad(yPsi) cellLimited Gauss linear 1.0; } divSchemes { default none; div(rhoPhi,U) Gauss linearUpwind grad(U); div(U) Gauss linear; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; //div(phi,k) Gauss linearUpwind default; //div(phi,omega) Gauss linearUpwind default; div(phi,k) Gauss upwind; div(phi,omega) Gauss upwind; } laplacianSchemes { default Gauss linear limited 0.5; } interpolationSchemes { default linear; } snGradSchemes { default limited 0.5; } oversetInterpolation { //method cellVolumeWeight;//一阶精度 method inverseDistance;//二阶精度 } /* oversetInterpolationRequired { //omega; //k; //nut; } */ oversetInterpolationSuppressed { grad(p_rgh); surfaceIntegrate(phiHbyA); } fluxRequired { default no; p_rgh; pcorr; alpha.water; } wallDist//湍流近壁面距离计算 { //method meshWave; method Poisson; } FoamFile { version 2.0; format ascii; class dictionary; object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // solvers { "cellDisplacement.*" { solver PCG; preconditioner DIC; tolerance 1e-06; relTol 0; maxIter 100; } "alpha.water.*" { nAlphaCorr 3; nAlphaSubCycles 2; cAlpha 1; icAlpha 0; MULESCorr yes; nLimiterIter 5; alphaApplyPrevCorr no; solver smoothSolver; smoother symGaussSeidel; tolerance 1e-8; relTol 0; } "pcorr.*" { solver PCG; preconditioner DIC; tolerance 1e-9; relTol 0; } p_rgh { solver PBiCGStab; preconditioner DILU; tolerance 1e-9; relTol 0.01;//松迭代 } p_rghFinal//使用PISO和PIMPLE的时候需要定义最后一个压力修正步 { $p_rgh; relTol 0; } yPsi { solver PBiCGStab; preconditioner DILU; tolerance 1e-6; relTol 0.0; } "(U|k|omega|epsilon).*" { solver smoothSolver; smoother symGaussSeidel; tolerance 1e-08; relTol 0; } } PIMPLE { momentumPredictor yes; nOuterCorrectors 5; nCorrectors 2; nNonOrthogonalCorrectors 1; ddtCorr yes; correctPhi no; checkMeshCourantNo yes; //D no moveMeshOuterCorrectors no; turbOnFinalIterOnly no; oversetAdjustPhi no; } relaxationFactors { fields { } equations { ".*" 1; } } cache {}
-
讨论下与openfoam匹配的画网格软件@队长别开枪 您好,我在OF8中编译了ccm26ToFoam,想模拟波物相互作用,转化后的网格checkMesh也是ok的,转化之后的网格我放到OF v1912里面进行计算的(还没编译ccmToFoam),但是相同的设置用OpenFOAM自带的sHM划分的网格可以计算,ccm26ToFoam转化的网格却在0.02s就突然发散了。想问一下有什么解决办法吗?
-
OpenFOAM动网格疑问,求助:想求解两个浮体的六自由度运动不好意思,我来歪个楼
老师好,
我的问题不是双浮体,是一个浮体上的两个部分,如下图所示,因为想关注月池部分的受力,所以在划分边界面的时候,将船体边界面划分为hull和moonpool两个部分,方便在functionObject中分别监测这两个边界面的受力。但是问题来了,由于释放了两个自由度,现在不知道该怎么定义这本属于一个浮体上的两个边界面的运动属性了。想请问一下这种情况可以定义吗,还是干脆固定自由度得了....... -
以DTCHullWave算例为例 ,使用dynamicmeshDict计算船舶波浪增阻,这里参数的意义是我所标注的这个意思吗?@souliam 这个centerofmass是质心,orientation应该是旋转中心吧,一般可以默认旋转中心在质心处(个人理解)。
-
以DTCHullWave算例为例 ,使用dynamicmeshDict计算船舶波浪增阻,这里参数的意义是我所标注的这个意思吗?@souliam 看起来你释放了一个平动和三个转动,不确定你的惯性矩等几何参数设置是否正确。为什么浮体网格表面看起来那么稀?
-
以DTCHullWave算例为例 ,使用dynamicmeshDict计算船舶波浪增阻,这里参数的意义是我所标注的这个意思吗?@souliam
运行很快崩溃的话,可能是存在非常致命的问题。首先确保网格是mesh ok的,然后确保物体的几何属性例如质量惯性矩这些都没问题,如果还是很快crash的话,可以适当增大pimple求解的外循环次数。 -
interFoam求解器计算出的摩擦阻力被低估@cresendo 嗯呐,回头试试,你把湍流粘度比调大之后,nut的边界条件就可以不使用粗糙度边界条件了吧?我现在觉得DTCHull的nut边界条件使用粗糙度边界条件可能是为了在一定程度上修正粘性阻力被低估的问题......
-
interFoam求解器计算出的摩擦阻力被低估@李东岳 谢谢前辈回复,star ccm+为了程序的鲁棒性,很多参数都有默认设置,所以没有保证完全一致,但是基本上差不多。
-
interFoam求解器计算出的摩擦阻力被低估@一朵苍凉 根据论文查阅发现interFoam确实有低估粘性阻力的趋势
-
interFoam求解器计算出的摩擦阻力被低估自问自答一波,nut的hull壁面条件对摩擦阻力影响很大。看试验的船模情况,需要进行调试。
-
interFoam求解器计算出的摩擦阻力被低估大家好,
我最近在做船舶静水阻力计算,结合试验值进行验证,但是在网格收敛性分析这里就已经卡了两周了。与同学使用star ccm+模拟得到的阻力成分进行了对比,发现压阻力的计算精度还可以,但是摩擦阻力被严重低估。
我使用的版本是OpenFOAM-v1912,网格是自带的blockMesh使用refineMesh多次加密,之后使用snappyHexMesh生成的,使用了snappyHexMesh的边界层生成工具,虽然该工具一直被诟病,经过多次调试,得到了覆盖率超过90%的边界层网格,第一层边界层网格的高度为1.3mm。使用了k-omega SST模型,近壁面处理使用了壁面函数,因此保证了船体壁面大部分满足30<y+<300。
但是由于摩擦阻力的严重低估,导致计算结果和试验值存在10%以上的误差。 熟悉DTCHull算例的朋友知道,nut的船体壁面条件使用的是nutRoughWallFunction,但是我认为船模是光滑的,因此将其改成了nutkWallFunction,这可能是摩擦阻力被低估的一个原因。除此之外,fvScheme和fvSolution以及其他物理量的边界条件基本未作修改。对于湍流变量的初始值,采用cfd-online网站上的turbulence工具进行了估计。
各位前辈有没有什么建议?已经不知道要怎么调了 ,cfd-online上面说有些版本的代码由于壁面切应力的算法问题会导致摩擦阻力低估的问题?有没有人遇到过类似问题?-
图1是网格加密情况;
-
图2是粗网格和实验值对比,差异在10%以上,加密网格之后差异反而更大,因为加密网格后曲线的平衡位置稍稍上移。
-
OpenFOAM粗网格的摩擦阻力分量和star CCM+模拟的摩擦阻力分量对比。
提前谢谢。
-
-
如何得到自由面等高线云图?@一朵苍凉
自问自答,先用contour设置alpha.water=0.5的自由面,然后使用calculator选择coord Z定义为surface elevation,接着使用surface elevation的值生成一系列contour,即可得到自由面等高线图。 -
如何得到自由面等高线云图?@gemini 谢谢回复,我想知道paraview是否可以得到这样的图,主要是那些等高线不知道如何设置显示。
-
如何得到自由面等高线云图?请教大家:
如何得到下图类似的自由面等高线云图呢?应该使用哪个滤镜吗?请有经验的前辈给点建议。
-
论文小白有关phase shift的疑问@gemini 谢谢回复,但是本例中的波浪是线性规则波,应该不存在波的叠加,浮体在简谐波作用下会产生相应的简谐运动,例如规则波的波面方程为eta=Acos(kx-wt),那么浮体在波浪中产生的运动可能是y=Bcos(kx-wt+phi),这里的相位差应该指的就是这个phi,我不明白比较phi有什么意义?
还有您提到的L1是月池的长度,谢谢 -
论文小白有关phase shift的疑问各位大佬前辈好,
想问一下有没有做波浪和浮体运动的前辈,一般情况下再进行波浪监测的时候,phase shift也就是相位偏移这个量有什么具体的物理含义呢?
下图是浮体的月池内一处监测得到的无量纲波高响应幅值(RAO),以及相位偏移,我不太理解相位偏移这个物理量有何现实含义,监测这个有啥用以及在CFD中怎么进行监测呢?
谢谢看到此贴并不吝赐教。
-
paraview中将空气设置为不可见,水相设置为蓝色?@oitocfd 谢谢各位前辈,按照前辈的提示,我首先将颜色条选为blue2cyan,然后使用Contour作用于alpha.water,值设置为0.5,可以得到想要的效果。
-
paraview中将空气设置为不可见,水相设置为蓝色?请教paraview中的两相流问题中,将空气设置为不可见,水相设置为蓝色,应该怎么操作呢?
如下面的动画效果所示
谢谢~ -
paraview中的glyph滤镜设置问题@李东岳 谢谢前辈,已成功设置。