Skip to content

OpenFOAM

OpenFOAM交流区

4.5k Topics 26.5k Posts
  • 1 Posts
    529 Views
    GarethG

    各位老师好,我最近在尝试定义一个新的边界条件,结合timeVaryingMappedFixedValue和inletOutelt边界。在每个时间步对边界插值赋值之后,再根据边界上的通量判断入流/出流,将出流的区域设置zeroGradient,而入流区域仍采用插值结果。

    下面是我参考inletOutlet边界文件修改的updateCoeffs()函数:

    template<class Type> void Foam::timeVaryingInletOutletFvPatchField<Type>::updateCoeffs() { if (this->updated()) { return; } this->operator==(fieldMapper_.map()); // 拷贝于‘inletOutlet’边界源文件,用于判断方向并对系数赋值 const Field<scalar>& phip = this->patch().template lookupPatchField<surfaceScalarField, scalar> ( phiName_ ); this->valueFraction() = 1.0 - pos0(phip); // fixedValueFvPatchField<Type>::updateCoeffs(); }

    新的边界条件能够成功编译。但在进行测试case(pimpleFoam)时,会在decomposePar分解并行区域步骤报错(直接进行单核计算也会出现相同错误):

    --> FOAM FATAL ERROR: request for surfaceScalarField phi from objectRegistry region0 failed available objects of type surfaceScalarField are 0() From function const Type& Foam::objectRegistry::lookupObject(const Foam::word&) const [with Type = Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh>] in file /home/gareth/OpenFOAM/OpenFOAM-8/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 211.

    以下是objectRegistryTemplates.C文件的对应内容:

    FatalErrorInFunction << nl << " request for " << Type::typeName << " " << name << " from objectRegistry " << this->name() << " failed\n available objects of type " << Type::typeName << " are" << nl << names<Type>(); if (cacheTemporaryObject(name)) { FatalErrorInFunction << nl << " request for " << name << " from objectRegistry " << this->name() << " to be cached failed" << nl << " available temporary objects are" << nl << temporaryObjects_; } FatalErrorInFunction // line 211 << abort(FatalError); // line 212 } return NullObjectRef<Type>();

    根据错误信息,似乎是没有找到surfaceScalarField类型的对象phi,但我只是结合inletOutlet边界,对原始的timeVaryingMappedFixedValue边界代码进行修改,并未改变其他源代码部分。并且我检查了求解器createFields.H,包含对通量phi的创建。所以我很困惑这个问题是如何产生的?

    我是刚开始接触OpenFOAM的源代码,可能犯了一些愚蠢的错误。希望各位大佬能对该问题给出一些建议。 谢谢!

  • 编译新边界时报错

    2
    2 Posts
    656 Views
    GarethG

    我已经解决了这个编译错误,主要是自己粗心大意导致的:135: :136: 。
    在***FvPatchFields.C文件中增加了#include surfaceFields.H即能编译通过

  • 红皮书出中文版了!

    3
    3 Posts
    1k Views
    C

    @liujuncfd 我买了,翻译上还是可以的,但是不知道是出版社的原因,还是本身译者矫正工作做的不到位,这本书有一些符号和标志性的错误,比如有的函数是S(x,y,z)书里给写成S(x,x,z)这种的小错误,其他的问题倒是没什么。

  • 4 Posts
    2k Views

    不好意思,我来歪个楼:chouchou:
    老师好,
    我的问题不是双浮体,是一个浮体上的两个部分,如下图所示,因为想关注月池部分的受力,所以在划分边界面的时候,将船体边界面划分为hull和moonpool两个部分,方便在functionObject中分别监测这两个边界面的受力。但是问题来了,由于释放了两个自由度,现在不知道该怎么定义这本属于一个浮体上的两个边界面的运动属性了。想请问一下这种情况可以定义吗,还是干脆固定自由度得了.......:jingya:

    1636809464(1).png

  • 8 Posts
    2k Views

    @李东岳 好滴谢谢

  • OF9版本更新VOF-Lagrangian算法疑问

    5
    5 Posts
    1k Views
    M

    @tens 目前来看确实如你所说没有这个功能(VOF turn to Larangian)。

  • 7 Posts
    2k Views
    李东岳

    @fu 是的,老版本的要简单一些。

  • 以读取系数的方式修改湍流模型

    1
    1 Posts
    404 Views
    F

    请教各位老师~
    ****目标:***希望给雷诺应力增加高阶项来修改湍流模型,高阶项的形式是固定的(标量对称张量)
    ***想法:***因为雷诺应力本身就是对称张量,其中的标量是随时变化的,机器学习生成的。如果用include **.H的方式来修改湍流模型,则每次需要编译,比较耗时,(因为增加项会不断变化)。所以想通过在constant文件夹中以.H形式存储标量表达式,从而在turbulenceProperties中读取文件,以系数的形式修改表达式,由于系数是实时读取的,因此只需要编译一次。.H文件中就是一个标量表达式,命名为zetai.H
    ****问题:****如果仅有zetai.H,内容如下(I1 I2是已经在湍流模型中计算好了的体标量场):
    8b12a85a-ca5c-48ca-8d0a-0e643d6d5861-image.png
    并在湍流模型中读取:
    fb6a553a-b074-470e-97ef-4ccc9cc304ec-image.png
    如何能将zetai中的内容转换为体标量场进行计算?

  • ICEM网格导入openfoam后paraview打不开

    3
    3 Posts
    795 Views

    @李东岳 谢谢!

  • 关于vof模型的plot问题

    5
    5 Posts
    1k Views
    李东岳

    多谢反馈!!

  • 1 Posts
    525 Views

    冒昧打扰各位,我最近正在做一个封闭旋转圆筒半浸没气液两相流动的case,速度边界对于侧面和两端面选择的RotationalWallVelocity,压力边界条件,听从Openfoam官方文件的建议

    In the above example, it can be seen that all the wall boundaries use a boundary condition named fixedFluxPressure. This boundary condition is used for pressure in situations where zeroGradient is generally used, but where body forces such as gravity and surface tension are present in the solution equations. The condition adjusts the gradient accordingly).

    将侧面和两端面设置成fixedFluxPressure固定值为0的格式,结果报错为:Unable to set reference cell for field p,Please supply either pRefCell or pRefPoint。结合问题提示和网上查找解决方案,在fvsolution中的pimple加入参考网格或者参考点的压力值,因此我在pimple的子目录下添加最后两行如下所示:

    PIMPLE { nCorrectors 2; nNonOrthogonalCorrectors 0; pRefCell 0; pRefValue 0; }

    结果报错如下:
    98414f11-7705-4f4a-a503-bc89ed313159-image.png
    于是选择第二种解决方法,设置参考点的压力,如下所示:

    PIMPLE { nCorrectors 2; nNonOrthogonalCorrectors 0; pRefPoint (0 0 0); pRefValue 0; }

    结果又是报错,问题如下:
    d88d6776-a2f0-4df3-ba30-a1fb49516c6f-image.png
    谷歌搜索解决方案,很多人说需要设置一个压力场的fixedvalue才可以,我于是尝试分两次将两端面或者侧面的其中一个压力边界条件设置成fixedvalue 0,跑是能跑了,但是0.几秒就发散了,而且本人也觉得这种压力边界条件设置方法很不合理且不符合实际情况(明明都是封闭区域的墙啊)。实在找不到可能的解决措施了,麻烦各位指教一下,谢谢啦。

  • OpenFOAM 模型编译资料求助

    6
    6 Posts
    1k Views
    李东岳

    啊 我以为 @Zhoujq 老铁太忙了 也没好意思问 妥了 !

  • 两相流模型库朗数问题(二)

    3
    3 Posts
    810 Views

    @bestucan 好的,我去按照这个思路研究研究,非常感谢!

  • openfoam数据处理

    5
    5 Posts
    1k Views

    @bestucan 谢谢老师:146:

  • 7 Posts
    2k Views

    @cresendo 嗯呐,回头试试,你把湍流粘度比调大之后,nut的边界条件就可以不使用粗糙度边界条件了吧?我现在觉得DTCHull的nut边界条件使用粗糙度边界条件可能是为了在一定程度上修正粘性阻力被低估的问题......:chouchou:

  • 自定义Foam找不到求助

    10
    10 Posts
    2k Views
    T

    @tens 感谢您的指导,加入求解器名字之后报错解决了,非常感谢 :huahua: :huahua:

  • 2 Posts
    595 Views
    S

    并且我发现就算我没有最终安装of8,只执行之前的sudo apt update一系列命令,也会出现该问题。。。

  • 约束器constrain的实现

    1
    1 Posts
    485 Views

    在约束器Foam::fvConstraints::constrain的定义中有:

    (这里以输入为eqn的定义为例)

    template<class Type> bool Foam::fvConstraints::constrain(fvMatrix<Type>& eqn) const { checkApplied(); const PtrListDictionary<fvConstraint>& constraintList(*this); bool constrained = false; forAll(constraintList, i) { const fvConstraint& constraint = constraintList[i];//对象constraint源于类fvConstraint if (constraint.constrainsField(eqn.psi().name())) { constrainedFields_[i].insert(eqn.psi().name()); if (debug) { Info<< "Applying constraint " << constraint.name() << " to field " << eqn.psi().name() << endl; } constrained =//这里调用了对象constraint的constrain方法 constraint.constrain(eqn, eqn.psi().name()) || constrained; } } return constrained; }

    注意到,其中constrain方法所引用的是对象constraint,而对象constraint​源于​类fvConstraint​。但是,我目前在类fvConstraint​没有找到关于​constrain方法的定义,
    实际上,我对整个代码进行了搜索遍历,寻找包含两个输入对象的constrain方法,与类fvConstraint有关的,仅有fvConstraint头文件中定义的​​fvConstraintM.H​。
    但是其如何被类fvConstraint​继承无法看得出来,因为该类没有父类。为因此想请教一下大家这个方法的定义及其由来,以及其是如何在代码里实现的。​

  • 2 Posts
    729 Views
    L

    @guohuiqun
    大致步骤:

    random waves 都用波谱描述。谱很多,所以先确定用什么谱 确定后,找描述谱的数学函数 这样就可根句函数写code算谱值,或用现成的
    最后算出各个对应(从小到大)频率的谱值,频率和谱值换算成periods and heights 就输入到你上面那文件里了
    (要写个小code是因为,你例子中是3个,但如要300个,用计算器就不现实了)

    只知些皮毛,以上不保证正确。。。还请有经验的老师给你建议或你纠正以上不正确的地方

  • CPU超线程关闭

    11
    11 Posts
    5k Views
    袁宝强

    @袁宝强 windows为了平衡负载,开启的线程数和实际调用的线程并不一致。