Skip to content

OpenFOAM

OpenFOAM交流区

4.5k Topics 26.5k Posts
  • 4 Posts
    464 Views

    @李东岳 谢谢李老师,我把sqr函数看成sqrt了,现在我明白了,是能对上的

  • 【分享】 Residual 动态监测

    9
    9 Posts
    3k Views

    好人一生平安

  • 如何得到自由面等高线云图?

    5
    5 Posts
    1k Views
    B

    @一朵苍凉 您好,请问如何将压力云图离散化并使等值线作为其颜色分界线呢?

  • 使用QBMM模拟气泡流

    39
    39 Posts
    21k Views
    WeakFormW

    @李东岳 多谢李老师

  • 内部场引用编程问题

    2
    2 Posts
    329 Views
    C

    请教各位前辈一个简单的编程问题。我先用topoSet在网格中创建内部cellZone,名称为interior。现在想对interior每个网格体心的U赋值,代码如下:

    label patchID = mesh.cellZones().findZoneID("interior"); const labelList cells = mesh.cellZones()[patchID]; forAll(cells, i) { label celli = cells[i]; U[celli] = vector(0.1, 0.1, 0.1); }

    如果是边界,一般可以写成引用的方式:

    label patchID = mesh.boundaryMesh().findPatchID("inlet"); vectorField& patchField = U.boundaryFieldRef()[patchID];

    以上方式是可以实现赋值,想问的问题是:

    (1)内部cellZone是否可以类似写成引用的形式,再对patchField赋值?类似边界场写成以下形式会报错,但不知道怎么修改:

    label patchID = mesh.cellZones().findZoneID("interior"); vectorField& patchField = U.primitiveFieldRef()[patchID];

    报错如下:

    error: invalid initialization of reference of type 'Foam::vectorField&' {aka 'Foam::Field<Foam::Vector<double> >&'} from expression of type 'Foam::Vector<double>' 180 | vectorField& patchField = U.primitiveFieldRef()[patchID]; |

    (2)U[celli]和U.primitiveField()[celli]这两者有无区别?测试效果好像是一样的

    forAll(cells, i) { label celli = cells[i]; U[celli] = vector(0.1, 0.1, 0.1); U.primitiveField()[celli] = vector(0.1, 0.1, 0.1); }
  • DPMFoam求解粒子密度小于液体

    3
    3 Posts
    401 Views
    vbcwlV

    @李东岳 感谢东岳前辈,之前做的是气固,密度比上千,可以指考虑drag,才开始研究密度比较接近的颗粒。想要比较精确的结果还需要考虑更多的力

  • 如何单独保存粒子数据

    5
    5 Posts
    626 Views
    T

    @李东岳 还是受到李老师的启发想到这种操作:chouchou:

    @李东岳 在 reconstructPar 一边组一边删除数据 中说:

    最近在算几个LES,我勒个去数据太大了。大算例一般算完了只有几百个G,比如500G,reconstructPar重组的时候并不会删processor的数据,这将导致占据双倍的硬盘,直接干到1T。利用下面这个命令,可以重组一个时间步,删除一个时间步,对于硬盘吃紧的时候非常有用:

    #!/bin/bash for i in $(foamListTimes -case processor0); do reconstructPar -time ${i} && rm -r processo*/${i} done

    Pretty Simple :high: :high: :high:

  • 9 Posts
    2k Views
    R

    @Tens
    您好,我参考您的代码也在compressibleInterFoam中添加了组分方程,目前出现了某种组分的质量分数超过1的情况,这个问题困扰我很久了,可以麻烦您帮我看一下代码有什么问题吗?万分感谢!

    tmp<fv::convectionScheme<scalar>> mvConvection ( fv::convectionScheme<scalar>::New//convectionScheme:Abstract base class for convection schemes. ( mesh, fields, alpha2rho2phi, mesh.divScheme("div(alpha2rho2phi,Yi)") ) ); { forAll(Y, i) { if (i != inertIndex && composition.active(i)) { volScalarField& Yi = Y[i]; fvScalarMatrix YEqn ( fvm::ddt(alpha2rho2, Yi) + mvConvection->fvmDiv(alpha2rho2phi, Yi) - fvm::laplacian(turbulence.muEff()*alpha2, Yi) == alpha2*parcels.SYi(i, Yi) + fvOptions(rho2, Yi) ); YEqn.relax(); fvOptions.constrain(YEqn); YEqn.solve(mesh.solver("Yi")); fvOptions.correct(Yi); Yi.max(0.0); Yt += Yi; } Y[inertIndex] = scalar(1) - Yt; Info<<"info::inertIndex.................="<< inertIndex <<endl; Info<<"info::Y[inertIndex].................="<< max(Y[inertIndex]) <<endl; Y[inertIndex].max(0.0);

    我在createField.H中声明了下列变量:

    volScalarField alpha2rho2 ( IOobject ( "alpha2rho2", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), alpha2*rho2 ); surfaceScalarField alpha2rho2phi ( IOobject ( "alpha2rho2phi", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), linearInterpolate(alpha2*rho2*U) & mesh.Sf() );
  • 5 Posts
    658 Views
    R

    @李东岳 是跑求解器的时候出错的

  • probes和sample提取wallShearStress问题

    2
    2 Posts
    319 Views
    李东岳

    体心跟面心上面确实是不同的数据类型。有可能probes只能到体心吧。还真没用过probes监控面边界数据。

  • 4 Posts
    512 Views
    李东岳
    pressureGradient { alpha alpha; }

    类似的,试试

  • 2 Posts
    327 Views
    李东岳

    边界条件的移植相对来说简单一些。你边界条件的代码发来看看。不过我不会给你亲自移植,但是可以给你判断几个好走的路 :-)

  • reactingTwoPhaseEulerFoam添加空化模型

    2
    2 Posts
    341 Views
    李东岳

    openfoam这面要注意版本问题。你这个链接里面我看起码是2017年之前的文章。然后你用的openfoam2206。这里面版本不对。按照之前的弄,100%会有问题。

  • 5 Posts
    773 Views
    W

    @Rachel0096 在 twoPhaseMixture类修改,编译通过,运行出错 中说:

    还是卡在了下面的for循环当中

    没瞧出有啥问题。看输出的信息就是遍历网格,计算每个网格内的密度倒数。
    如果猜测是卡在for循环里了,这个cellVolMixture函数在heRhoThermo.C文件里也有调用,那里面也有一个for循环,瞅瞅是不是那里边有问题。

  • 关于cyclic boundary condition

    11
    11 Posts
    6k Views
    G

    关于cyclic boundary最近有一些发现,跟楼主和各位高手探讨一下,看看能否有所启发。

    本人的测试用例为大佬李东岳翻译的openfoam用户指南-9里面的顶盖驱动流,差别是左右边界设置为cyclic边界,设置方法为陈与论帖子(https://zhuanlan.zhihu.com/p/84137342 )前半段那个简单的方法,网格x和y两个方向各画了3个网格。openfoam版本用的是OpenFOAM-9.

    针对这个案例,在研究对流项的离散时,在gaussConvectionScheme.C中fvmDiv函数里发现,计算边界对矩阵A和源项的影响时,fvm.internalCoeffs()[patchi]和fvm.boundaryCoeffs()[patchi]的计算没有区分边界是否为coupled(),是否coupled()是通过调用不同类型的valueInternalCoeffs(pw)和valueBoundaryCoeffs(pw)实现的。通过valueInternalCoeffs(pw)和valueBoundaryCoeffs(pw)的返回值我们可以看到,对于cyclic的两个边界,这俩函数在coupledFvPatchField.C中计算,分别返回了

    Type(pTraits<Type>::one)*w; Type(pTraits<Type>::one)*(1.0 - w);

    由于

    fvm.internalCoeffs()[patchi] = patchFlux*psf.valueInternalCoeffs(pw); fvm.boundaryCoeffs()[patchi] = -patchFlux*psf.valueBoundaryCoeffs(pw);

    结合phi_f = A*phi_c+B(https://zhuanlan.zhihu.com/p/609043262 )的理论,相当于在cyclic边界上fvm计算面心的值时,只用到了边界单元的体心值phi_c,而没有用到周期边界另一头的单元值。分析其原因,这可能是由于openfoam矩阵存储方式的限制不得已而为之,因为非对角元是由lduAddressing来定位的,对于本案例而言,非对角上的非零元个数与内部面数目相同,为12个,如果在cyclic边界上计算面心的值时用到两个体心的值,则会新增一个非零元(相当于这个面变成了内部面),那么就出现了13个内部面,没办法在当前体系下存储。openfoam在处理周期边界fvm对流项的离散时相当于有一个窟窿。

    那么,既然没有用到cyclic另一头的单元,OpenFOAM怎么实现周期边界的呢。在surfaceInterpolationScheme.C:287可以发现,在fvc类型计算插值时,对于coupled()的情况进行了分别处理,用到了patchNeighbourField(),相当于在计算通量时补上了前面的窟窿。但是感觉影响应该还是会有,因此我建议楼主考察一下,遇到的问题是否与openfoam这个窟窿有关。

    最后,想跟大家探讨一下,假如想补上这个窟窿,有没有什么办法能够存储由于周期边界带来的矩阵中多的这个非零元素?这个问题非常关键,一是可以解决周期边界现有的问题,二是有可能解除当前openfoam面心插值时只有owner和neighbour两个体心值可用的限制。以上是个人的一些粗浅理解,希望大佬们指正!

  • 21 Posts
    6k Views
    C

    @李东岳 Fluent对用户来说其实都没有并行、分区、合并这种概念。印象很深,我刚转到OpenFOAM的时候才“发现”原来并行计算之前是需要分区的,自然分完区后也是需要合并的。虽然这个过程在我知道了之后很符合直觉,也慢慢习惯,但不得不说这方面Fluent做的真的很好。计算前设置好并行数量,跑完算例之后直接在GUI上看云图,流畅的一比。

    我记得Fluent用的是Metis,好像本来是开源的后来商业化了?会不会跟它有关,商业化的东西在用户体验这块肯定是好的。

  • 标量输运方程中的扩散项的正负

    3
    3 Posts
    457 Views
    vbcwlV

    @李东岳 感谢东岳老师,扩散项我明白了,但是对流项还有一个疑问,就是他的正负只跟速度有关,跟浓度梯度没有任何关系么还是受到二者共同影响?

  • 颗粒的平均量和脉动量的统计

    1
    1 Posts
    194 Views

    请教一下,有什么办法可以获得openfoam中颗粒的平均速度,直径等量 以及RMS的信息,或者怎么后处理可以得到?

  • 添加粒子后计算速度变慢

    12
    12 Posts
    2k Views
    vbcwlV

    @星星星星晴 明白了,谢谢星星前辈

  • 超音速喷管CDV算例

    2
    2 Posts
    728 Views
    李东岳

    亚音速的算例:CDV-subsonic-rhoPimpleFoam.tar.xz