Skip to content

OpenFOAM

OpenFOAM交流区

4.5k 主题 26.5k 帖子
  • 自适应时间步长统一输出精度问题

    5
    5 帖子
    389 浏览
    S

    @尚善若水 问题解决了,多谢多谢

  • 如何布置正弦内部场?

    2
    2 帖子
    206 浏览

    已解决。

  • 关于ICEM尖角网格

    1
    1 帖子
    146 浏览
    C

    这么做尖角网格是不是看起来不太对呀,这类尖角网格有没有什么好一点的做法呢?
    虽然看着网格质量还行,但总感觉不太对
    Snipaste_2024-04-03_21-48-45.png

  • OpenFOAM中二维轴对称模型的一些问题

    1
    1 帖子
    126 浏览
    L

    在轴对称模型中,可以只计算两个方向(轴向和径向)的量吗,在写方程时,如何不计算第三个方向的偏导数,可以像volTensorField一样定义一个Tensor2D的体积场吗

  • Smagorinsky模型系数问题

    43
    43 帖子
    6k 浏览
    L

    @coolhhh 太细致了!!!

  • 关于在求解器中使用热物理库中的函数

    4
    4 帖子
    378 浏览
    W

    @huangyuhui723 我明白你的意思了。

    @huangyuhui723 在 关于在求解器中使用热物理库中的函数 中说:

    通过其它计算更新了T之后想对he赋值

    如果是求解TEqn,可以是得到温度T后更新he。OpenFOAM里的求解器一般都是求解EEqn,得到he后通过thermo.correct()更新T。

    如果已知边界温度T后要对he赋值,应该在求解EEqn之前对he边界赋值,然后求解EEqn。大致代码是这样:

    volScalarField& he = thermo.he(); //****************************************//加这一段 forAll(p.boundaryField(), patchi) { forAll(p.boundaryField()[patchi], facei) { he.boundaryFieldRef()[patchi][facei] = function(p.boundaryField()[patchi][facei], T.boundaryField()[patchi][facei]); } } //****************************************// fvScalarMatrix EEqn ( ...... );

    这个function函数就是T与he的关系,类似上面,混合物的he通过各组分的显焓的质量分数加权得到,显焓用janaf里的关系确定。

    供参考。

  • 关于编译动态库后在求解器中使用报错

    6
    6 帖子
    496 浏览
    H

    @学流体的小明 感谢老师,我找时间试试看

  • 多相流液体铺展行为

    1
    1 帖子
    133 浏览

    我在做单根不锈钢丝切割液滴的模拟,发现液滴触碰到固体后,会快速铺展覆盖固体,这明显与实际情况不符:
    dc6202db-0a4b-4bee-8dfd-d8db7a8ba44e-image.png
    9f370870-b0be-4f65-9075-57dd718ce5cd-image.png
    求解器用的v2212的MPPICInterFOAM,固体壁面的边界条件为:U noSlip;P fixedFluxPressure;Alpha constantAlphaContactAngle,接触角为155疏水界面

    文献和实际可视化拍摄中,液体不会有如此快速的铺展,还请各位指点一二
    c833896f-62e9-4161-ae81-1b226e382477-image.png

  • paraview处理数据

    3
    3 帖子
    344 浏览
    Z

    @尚善若水 感谢,我去试试

  • 阿里ECS进行OpenFOAM的计算流程

    22
    22 帖子
    12k 浏览
    B

    1711709658497.png阿里云的VFC链接可以安装图形界面,按照这个教程来就可以,非常简单https://help.aliyun.com/zh/ecs/user-guide/install-a-gui-desktop-for-ubuntu-18

  • 3 帖子
    316 浏览
    学流体的小明

    可以从边界上的face返回这个face属于的cell

    const Foam::fvBoundaryMesh &procBoundary = mesh.boundary(); forAll(procBoundary, patch) { forAll(procBoundary[patch], facei) { const label bcell = boundaryMesh[patch].faceCells()[facei]; } }

    你可以得到所有的边界单元编号,然后做你其它向做的事就应该比较方便了

  • 62 帖子
    15k 浏览
    C

    @pengdi 没有收缩段,RANS结果就是很差的,LES即使入口只加平均风,也比RANS结果精确很多

  • 想请教一下各位大佬流动方程的推导

    2
    2 帖子
    233 浏览
    T

    已经搞清楚了,谢谢!

  • 计算过程中的得到x=1位置处的水位

    2
    2 帖子
    165 浏览
    C

    openfoam自带有interfaceHeight的function

  • 1 帖子
    134 浏览
    1

    报错的自定义边界如下,如图所示报错为:“‘incompressible’ does not name a type“,恳请论坛内各位老师解惑
    /---------------------------------------------------------------------------\

    \ / F ield OpenFOAM: The Open Source CFD Toolbox \ / O peration \ / A nd Copyright (C) 2011 OpenFOAM Foundation \/ M anipulation

    License
    This file is part of OpenFOAM.

    OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.

    *---------------------------------------------------------------------------*/

    #include "adjointOutletPressureHeatFvPatchScalarField.H"
    #include "addToRunTimeSelectionTable.H"
    #include "fvPatchMapper.H"
    #include "volFields.H"
    #include "surfaceFields.H"
    #include "RASModel.H"

    // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

    Foam::adjointOutletPressureHeatFvPatchScalarField::
    adjointOutletPressureHeatFvPatchScalarField
    (
    const fvPatch& p,
    const DimensionedField<scalar, volMesh>& iF
    )
    :
    fixedValueFvPatchScalarField(p, iF)
    {}

    Foam::adjointOutletPressureHeatFvPatchScalarField::
    adjointOutletPressureHeatFvPatchScalarField
    (
    const adjointOutletPressureHeatFvPatchScalarField& ptf,
    const fvPatch& p,
    const DimensionedField<scalar, volMesh>& iF,
    const fvPatchFieldMapper& mapper
    )
    :
    fixedValueFvPatchScalarField(ptf, p, iF, mapper)
    {}

    Foam::adjointOutletPressureHeatFvPatchScalarField::
    adjointOutletPressureHeatFvPatchScalarField
    (
    const fvPatch& p,
    const DimensionedField<scalar, volMesh>& iF,
    const dictionary& dict
    )
    :
    fixedValueFvPatchScalarField(p, iF)
    {
    fvPatchField<scalar>::operator=
    (
    scalarField("value", dict, p.size())
    );
    }

    Foam::adjointOutletPressureHeatFvPatchScalarField::
    adjointOutletPressureHeatFvPatchScalarField
    (
    const adjointOutletPressureHeatFvPatchScalarField& tppsf,
    const DimensionedField<scalar, volMesh>& iF
    )
    :
    fixedValueFvPatchScalarField(tppsf, iF)
    {}

    // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //

    void Foam::adjointOutletPressureHeatFvPatchScalarField::updateCoeffs()
    {
    if (updated())
    {
    return;
    }

    const fvsPatchField<scalar>& phip = patch().lookupPatchField<surfaceScalarField, scalar>("phi"); const fvsPatchField<scalar>& phiap = patch().lookupPatchField<surfaceScalarField, scalar>("phib"); const fvPatchField<vector>& Uap = patch().lookupPatchField<volVectorField, vector>("Ub"); const dictionary& transportProperties = db().lookupObject<IOdictionary>("transportProperties"); dimensionedScalar nu(transportProperties.lookup("nu")); scalarField Up_n = phip / patch().magSf();//Primal scalarField Uap_n = phiap / patch().magSf();//Adjoint const incompressible::RASModel& rasModel = db().lookupObject<Foam::incompressible::RASModel>("RASProperties"); scalarField nueff = rasModel.nuEff()().boundaryField()[patch().index()]; const scalarField& deltainv = patch().deltaCoeffs(); // distance^(-1) scalarField Uaneigh_n = (Uap.patchInternalField() & patch().nf()); //operator ==((Up_n * Uap_n) +2*nu.value()*deltainv*(Uap_n-Uaneigh_n));

    operator ==((Up_n * Uap_n) +2*nueff.value()deltainv(Uap_n-Uaneigh_n));

    fixedValueFvPatchScalarField::updateCoeffs();

    }

    void Foam::adjointOutletPressureHeatFvPatchScalarField::write(Ostream& os) const
    {
    fvPatchScalarField::write(os);
    writeEntry("value", os);
    }

    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

    namespace Foam
    {
    makePatchTypeField
    (
    fvPatchScalarField,
    adjointOutletPressureHeatFvPatchScalarField
    );
    incompressible
    }
    f0c155d4-8455-4c68-be20-3db9aa49d6b6-image.png

  • 17 帖子
    4k 浏览

    @疏影横斜水清浅 在 topoSet, createPatch, createBaffle 在网格内部添加一个平面 求指教 中说:

    @脉动通风 你好,能详细说一下么,你是用的哪种颗粒注入方式,内部画网格是指生成面还是cellzone,你使用的方式是连续注入么

    内部画网格就是我自己在房间中间挖了一块正方体的区域,然后再使用ICEM画的网格。最后传入Openfoam中,再对那个正方体的一个面设置气体输入的浓度。
    使用的方式是连续注入,我是注入气体。

  • icoFoam源代码解读

    1
    1 帖子
    202 浏览

    各位老师,大佬晚上好!openfoam小白最近在阅读icoFoam源代码时遇到了一点问题,根据李老师对icoFoam求解器的理论推导,它的压力泊松方程如下:7.png
    99.png
    在源代码中首先定义了phiHbyA,应该是HbyA的面通量:
    1.png
    但是,它的压力泊松方程里面的用的是phiHbyA而不是HbyA,这里我不是很能理解:
    3.png
    另外按理说piso算法每算一次U、P,按理来说应该要更新HbyA一次:
    8.png
    但是源代码里面更新的好像是phiHbyA(速度变了,且是个通量)
    在我的理解里,这段代码每次进行piso算法时,HbyA似乎没变,毕竟它是从之前的速度方程那里得到的?(对UEqn.A这个函数不太了解)
    9.png
    但是piso算完以后的U用的又是和理论推导的结果一致,用的是HbyA,而不是phiHbyA:
    6.png
    恳请各位老师,大佬解惑,谢谢各位!

  • OpenFOAM 8中的波浪边界是否支持纯波浪?

    18
    18 帖子
    4k 浏览
    Y

    @tidedrinker 前辈你好,我在使用olaFlow做一个二维的狭缝共振,但是把两个浮箱加上之后造出的波浪不向前传递是什么原因呀,详细的我放在了这个问题里面问题地址

  • 7 帖子
    529 浏览
    B

    参考openfoam自带的dambreach这个算例

  • reactingFoam甲烷空气预混燃烧后处理

    3
    3 帖子
    340 浏览

    @wangfei9088 好滴,感谢大佬:xinxin2: