Skip to content
  • 0 赞同
    1 帖子
    24 浏览

    33ae34d9-4a5a-4ebd-8603-c18a65d1b2a3-image.png 按照经验来看,在高约化速度下,圆柱振幅应该降低的,结果振幅一直下不去,有没有大佬遇见过类似的问题?用的是圆形计算域

  • OpenFOAM 长波辐射模拟

    OpenFOAM
    1
    0 赞同
    1 帖子
    43 浏览
    S

    想请教一下大家openfoam中有涉及长波辐射模拟吗,如何实现呢?

  • 0 赞同
    1 帖子
    148 浏览
    B

    (One dimensional spherical flame initiation)
    我们最近在用reactingFoam、reactingDNS(考虑了组分的详细输运特性)来计算1D球形火焰传播,并且想与ASURF对照。在该算例中,火焰是在固定区域内沉积能量来引发的,该能量沉积区域位于1D计算域的左侧,长度rig=0.2mm,持续时长tig=0.2ms。该能量直接加入能量方程:power=energy/(4/3X3.14Xrig^3Xtig)Xexp(-(r/rig)^6)(X表示*)。在算例中使用topoSet工具降能量沉积区域disZone圈出来,求解器内部读取该disZone中的网格变化,然后对能量源项进行赋值。

    首先创建能量源项sparkE,读取算例中给的能量沉积半径dis_radius,持续时间dis_duration,能量dis_energy。 volScalarField sparkE ( IOobject ( "sparkE", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), mesh, dimensionedScalar("sparkE", dimEnergy/dimTime/dimVolume, 0.0) // J/m3/s ); IOdictionary chemistryDict ( IOobject ( thermo.phasePropertyName("chemistryProperties"), thermo.db().time().constant(), thermo.db(), IOobject::MUST_READ, IOobject::NO_WRITE, false ) ); const dictionary& dischargeTypeDict = chemistryDict.subDict("sparkDischarge"); scalar dis_duration = dischargeTypeDict.lookupOrDefault<scalar>("dis_duration", 2E-4); // 200 us scalar dis_radius = dischargeTypeDict.lookupOrDefault<scalar>("dis_radius", 2E-4); // 200 um scalar dis_energy = dischargeTypeDict.lookupOrDefault<scalar>("dis_energy", 1E-3); // 1 mJ //scalar dis_central = dischargeTypeDict.lookupOrDefault<scalar>("dis_central", 1E-3); // 1 mJ scalar PI = 3.1415926; scalar dis_paramTot = dis_energy/(4.0*PI/3.0*dis_radius*dis_radius*dis_radius*dis_duration); //scalar dis_paramTot = dis_energy/(PI*Foam::sqrt(PI)*dis_radius*dis_radius*dis_radius*dis_duration); 在求解器主程序中,对能量赋值 const label& disZoneID = mesh.cellZones().findZoneID("disZone"); const labelList& cZone = mesh.cellZones()[disZoneID]; forAll(mesh.C(),cellI) { sparkE[cellI] = 0.0; } if (disZoneID != -1 && cZone.size() > 0 && runTime.value() <= dis_duration) { forAll(cZone,cellI) { sparkE[cZone[cellI]] = dis_paramTot*std::exp(-PI/4.0*pow(mesh.C()[cZone[cellI]].x()/dis_radius,6)); // sparkE[cZone[cellI]] = dis_paramTot*std::exp(-pow(mesh.C()[cZone[cellI]].x()/dis_radius,2)); } } if ( (runTime.value()+runTime.deltaTValue()) > dis_duration && runTime.value() < dis_duration ) { runTime.setDeltaT((dis_duration-runTime.value())); } Info << " sparkE max/min: "<< max(sparkE).value() <<" "<< min(sparkE).value() << endl;

    但是如果采用ASURF中不能点火的能量,在openfoam中竟然能点燃。
    并且火焰半径(即火焰位置,定义为最大温度梯度)随时间的变化与ASURF完全不一样,图片左侧为openfoam计算结果,右侧为ASURF计算结果。请大家指点
    07dcd785-c9d6-4cca-a1e6-37f88d616cc8-flameRadius_left(reactingFoam)_right(ASURF).png

    算例可见附件:
    1Dflame_case.zip

  • 变量未初始化问题

    OpenFOAM
    1
    0 赞同
    1 帖子
    81 浏览
    T

    在lagrangian/intermediate/submodels/Kinematic/ParticleForces路径下添加了一个电场力模型,编译通过,case计算时报错,似乎跟q和E变量未初始化有关,代码小白,求指点。

    563ac197-796b-4021-a867-d6ecd3a34007-image.png
    648c605a-93af-4ff6-9178-8242e48f84bd-image.png

    // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class CloudType> Foam::ElectricfieldForce<CloudType>::ElectricfieldForce ( CloudType& owner, const fvMesh& mesh, const dictionary& dict, const word& forceType, const volScalarField& qField ) : ParticleForce<CloudType>(owner, mesh, dict, forceType, true), EName_(this->coeffs().template lookupOrDefault<word>("E", "E")), EInterpPtr_(NULL), qField_(qField) { Info<< "-----p in ELe\n" << endl; qInterpPtr_.reset ( interpolation<scalar>::New ( owner.solution().interpolationSchemes(), qField ).ptr() ); Info<< "-----p2 in ELe\n" << endl; } template<class CloudType> Foam::ElectricfieldForce<CloudType>::ElectricfieldForce ( const ElectricfieldForce& etf ) : ParticleForce<CloudType>(etf), EName_(etf.EName_), EInterpPtr_(NULL), qField_(etf.qField_) {}
  • 0 赞同
    1 帖子
    245 浏览

    各位老师,早上好!小白最近在做openfoam燃烧时发现得到的模拟结果过小,比如我在化学反应机理中添加激发态自由基的反应,模拟得到的激发态自由基的结果量级在10^(-9),这在实验中结果是可信的,因为这种自由基不稳定,很快会跃迁到基态,但是从数值角度怎么解释呢?也有一些基态自由基比如CH,它的量级在10^(-5)。在openfoam中很多方程,它的残差到10^(-6),我们就认为它收敛了。10^(-9)量级的值我们怎么才能够保证其数值模拟结果的可信性呢,而不是计算得到的误差?是对一些不大可能发生的反应乘上了一个很小的系数吗?还是经过什么处理?文献中也只是给出了一个结果,但并没有对结果的可信性作出解释,恳请各位老师解惑。

  • OpenFOAM.com系列国内满速下载地址

    OpenFOAM
    1
    0 赞同
    1 帖子
    219 浏览
    李东岳

    这些国内软件包都是直接fork国外github上面的OpenFOAM。因为有时候github访问不上去。就fork到国内。

    下列地址可直接使用git clone,例如,打开终端,在终端直接将下面的复制进去:

    git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-6.git

    即可在本地创建ThirdParty-6文件夹。如果提示你没有git,那么输入下面的即可:

    sudo apt install git

    正常的话是下图这样:

    捕获.JPG

    相关git地址: git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v2312.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v2306.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v2206.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v2106.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v2006.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v1912.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v1906.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-v1712.git

    第三方包地址:

    git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-v2306.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-v2212.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-v2206.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-v2106.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-v2006.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-v1906.git

    在下载的时候,需要下载相应的OpenFOAM与相应版本的第三方包

  • OpenFOAM.org系列国内满速下载地址

    OpenFOAM
    1
    0 赞同
    1 帖子
    207 浏览
    李东岳

    这些国内软件包都是直接fork国外github上面的OpenFOAM。因为有时候github访问不上去。就fork到国内。

    下列地址可直接使用git clone,例如,打开终端,在终端直接将下面的复制进去:

    git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-6.git

    即可在本地创建ThirdParty-6文件夹。如果提示你没有git,那么输入下面的即可:

    sudo apt install git

    正常的话是下图这样:

    捕获.JPG

    相关git地址: git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-11.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-10.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-9.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-8.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-7.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-6.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-5.x.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-4.x.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-3.0.x.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-2.3.0.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-2.2.0.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-2.1.1.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-2.1.0.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-2.0.0.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-1.7.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-1.6.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-1.5.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-1.4.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-1.3.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-1.2.git git clone https://e.coding.net/dyfluid/OpenFOAM/OpenFOAM-1.1.git

    第三方包地址:

    git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-11.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-10.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-9.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-8.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-7.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-6.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-5.x.git git clone https://e.coding.net/dyfluid/OpenFOAM/ThirdParty-3.0.x.git

    在下载的时候,需要下载相应的OpenFOAM与相应版本的第三方包

    如果有人需要scotch_6.0.3: scotch_6.0.3.tar.gz

  • 0 赞同
    1 帖子
    183 浏览
    J

    我在做射流模拟的时候,使用了SST k-omega湍流模型,控制了y+~1,但模拟出来的边界层和自由剪切层与实验相比厚了两倍,没有使用壁面函数,这种情况下该从哪个方面着手去解决呢?湍流边界条件omega是根据文献中建议的值去给定的。

  • olaFlow 造波为什么差别这么大

    OpenFOAM
    1
    0 赞同
    1 帖子
    252 浏览
    Y

    我尝试了olaFlow 来进行造波,水池深0.5米,波高0.024,周期1.26s,水池长12米,以下是各个位置的波高数据:
    x= 0.png
    x= 1.png
    x= 2.png
    x= 3.png
    x= 4.png
    x= 5.png
    x= 6.png
    x= 7.png
    x= 8.png
    x= 9.png

  • FPVFoam

    OpenFOAM
    1
    0 赞同
    1 帖子
    124 浏览
    L

    请问各位大佬,OpenFOAM v1912中怎么植入FPVFoam(新手)

  • 限制区域内提高重叠网格质量

    OpenFOAM
    1
    0 赞同
    1 帖子
    132 浏览
    C

    各位好,我现在设想一个工况是在水深非常浅,同时水深与船舶吃水非常小(大约1.2)的情况,在设置重叠部分也即船舶部分网格时,blockmesh需要画的比较小,底部与船舶底部很接近,这就造成了snappyhexmesh后船舶下部的网格质量很差,请问有没有什么办法或者思路来改善网格质量呢,如有相似问题的朋友欢迎讨论,谢谢!261e3ad06976a58e400a1fc15243dc1.png 78823dc1464db8ab58735e54dcd17d2.png efa88c4c50ed4254badb8dbc8db3089.png

  • interFoam如何初始化流场

    OpenFOAM
    1
    0 赞同
    1 帖子
    183 浏览

    用interFoam计算带自由液面的倒虹吸,参考其他人边界设置,往往是入口给定流量(流速),出口给定水位(alpha.air)。这种设置方式如果通过手动设置(setFields)往往因初始流场不好极易发散,有没有办法能跟Fluent一样通过混合初始化得到一个初始场保证计算能够进行下去。(openFoam好像可以通过potentialFoam初始化场,但是这个对于interFoam也可以使用吗)79538e5a-b907-420a-8777-c7a72dd6011f-image.png

  • 0 赞同
    1 帖子
    118 浏览
    L

    前一段时间搭建了流化床求解器(燃烧、密相颗粒流动求解器,下称newSolver),目前需要对这个求解器进行冷态颗粒流动的验证(常温,关闭化学反应、燃烧和传热)。通过验证发现颗粒轴向速度和实验吻合较好,但是气相压降差距很大,而使用MPPICFoam计算相同的case可以得到准确的压降(稳定时newSolver比MPPICFoam压降高两倍多)。

    为了找到问题所在,于是关闭颗粒计算纯气体流动的速度和压降,发现newSolver和MPPICFoam计算得到的气相速度相同但是压降有一定差距。因此猜测是气相压力方程计算的问题。

    由于newSolver是基于coalChemistryFoam流体方程加入alpha的修改的,纯气体流动情况下alpha=1。为了排除我修改方程所导致的错误,因此用coalChemistryFoam(关闭化学反应、燃烧和传热)计算纯气体流动看能否得到准确的结果。结果发现压降仍然有差距。

    难道coalChemisryFoam变密度的求解器无法计算常密度的情况吗?coalChemistryFoam是反应所导致的密度变化,关闭化学反应按理说密度应该是不变的,为何计算结果与实际差距大?常温纯气体流动压降都不准,加上化学反应燃烧后压降会准吗?

    MPPICFoam压力方程

    fvScalarMatrix pEqn ( fvm::laplacian(alphacf*rAUcf, p) == fvc::ddt(alphac) + fvc::div(alphacf*phiHbyA) );

    coalChemistryFoam压力方程

    fvScalarMatrix pEqn ( fvm::ddt(psi, p) + fvc::div(phiHbyA) - fvm::laplacian(rhorAUf, p) == coalParcels.Srho() + fvOptions(psi, p, rho.name()) );

    纯气体流动验证的几何模型和网格如下图所示
    图片1.png

    请各位大佬指教!

  • 使用swak4foam中的funkySetFields

    OpenFOAM
    1
    0 赞同
    1 帖子
    162 浏览
    Z

    基于interFoam求解器,添加了标量场S,在模拟了一段时间后,得到了两相流体分布,再使用swak4foam中的funkySetFields,把标量赋值到alpha1流体中,另一相不考虑,设置如下:
    b8c93503-efa8-4a6d-9b18-7852dcb2d072-image.png
    运行后报错:
    15a01aae-36ee-42e4-8223-4fc9eba68dd9-image.png
    请问各位大神该如何解决呢?

  • 0 赞同
    1 帖子
    134 浏览

    大家好!想请教各位在tecplot中对三维模型进行Mirror操作后,使用slices提取出一个面,可以观察到提取出来的面云图都还是对称的,但画出来的流线为什么不是对称的了?原计算案例对称轴所在的面本身使用的也是symmetryPlane型边界条件。
    QQ图片20240407133422.png
    $DR1%SP2~_Y1_A{0ZO8ZND8.png
    TUG[A$3E@2}8%R85`77T]3K.png

  • OpenFOAM边界可以设置既旋转又射流吗

    OpenFOAM
    1
    0 赞同
    1 帖子
    139 浏览
    1

    最近在做一个模型,有一个面既按照一定的角速度旋转,同时又有流体射出,但是不知道该怎么设置这个面的边界条件,有大佬知道吗

  • 关于ICEM尖角网格

    OpenFOAM
    1
    0 赞同
    1 帖子
    162 浏览
    C

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

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

    OpenFOAM
    1
    0 赞同
    1 帖子
    133 浏览
    L

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

  • 多相流液体铺展行为

    OpenFOAM
    1
    0 赞同
    1 帖子
    148 浏览

    我在做单根不锈钢丝切割液滴的模拟,发现液滴触碰到固体后,会快速铺展覆盖固体,这明显与实际情况不符:
    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

  • 0 赞同
    1 帖子
    163 浏览
    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