Skip to content

OpenFOAM

OpenFOAM交流区

5.3k 主题 31.5k 帖子
  • boundaryMesh().mesh().objectRegistry::template?

    3
    3 帖子
    3k 浏览
    Y

    @blookcfd 感谢您的回复,
    请问这种语法比较常见吗?
    这个objectRegistry::template是指代的 Type类型吗?

  • OpenFOAM中重叠网格问题Suggar++?

    3
    3 帖子
    2k 浏览
    五好青年

    Any information would be extremely helpful!

  • 关于multiphaseEulerFoam中固相摩擦黏度的计算问题

    11
    11 帖子
    8k 浏览
    Z

    @李东岳 东岳老师,从下面几个式子看,固相黏度应该都是半经验表达式,所以0.5可能是个实验获得的参数:
    d7cd3790-cd15-45c3-bad9-6dcba069f6f6-image.png (JJ)
    bcc611d5-bc11-49c6-beb6-73d08b8496ad-image.png (Schaeffer)
    a5a9446d-2284-45ea-b94d-84d8125963b2-image.png (Princeton)

    此外,princeton中摩擦应力计算如下:
    b334a3b1-6081-4a12-bb32-5f3c04cca839-image.png
    3e038a48-fde7-41ec-9125-df2a1283aecb-image.png

    对通量的处理:

    const volVectorField& U = phase.U(); surfaceScalarField phiU = fvc::interpolate(U) & U.mesh().Sf(); volScalarField Ud = fvc::div(phiU);

    对压力计算:

    const volScalarField pc = Fr_*pow(max(alpha - alphaMinFriction, scalar(0)), eta_) /pow(max(alphaMax - alpha, alphaDeltaMin_), p_); ...... //对体 forAll(n,celli) { if (Ud[celli] < 0.0) { n[celli] = 1.03; } else { n[celli] = 0.5*sqrt(3.0)*sin(phi_.value()); } m[celli] = n[celli]-1; //..No negative base. 对不对? pt[celli] = 1.0-Ud[celli]/( n[celli]*sqrt(2.0)*sin(phi_.value())* (sqrt(Us[celli]) + small) ); if (!(pt[celli] > 0.0)) { pt[celli] = small; } //..No negative exponent. if (m[celli] > 0) { //n-1 power pt[celli] = pc[celli]*pow(pt[celli], m[celli]); } else { pt[celli] = pc[celli]*pow(1/pt[celli], mag(m[celli])); } } ...... //对面 forAll(currPatch,facei) { if(UdBf[patchi][facei] < 0.0) { nBf[patchi][facei] = 1.03; } else { nBf[patchi][facei] = 0.5*sqrt(3.0)*sin(phi_.value()); } mBf[patchi][facei] = nBf[patchi][facei]-1; ptBf[patchi][facei] = 1.0-UdBf[patchi][facei]/( nBf[patchi][facei]*sqrt(2.0)*sin(phi_.value())* (sqrt(UsBf[patchi][facei]) + small) ); if (!(ptBf[patchi][facei] > 0.0)) { ptBf[patchi][facei] = small; } //..No negative exponent. if (mBf[patchi][facei] > 0) { ptBf[patchi][facei] = pcBf[patchi][facei]*pow(ptBf[patchi][facei], mBf[patchi][facei]); } else { ptBf[patchi][facei] = pcBf[patchi][facei]*pow(1/ptBf[patchi][facei], mag(mBf[patchi][facei])); } } } // Correct BCs pt.correctBoundaryConditions(); Us.correctBoundaryConditions(); Ud.correctBoundaryConditions();

    黏度计算:

    //对体 forAll(Ud,celli) { if (Ud[celli] < 0) { n[celli] = 1.03; } else { n[celli] = 0.5*sqrt(3.0)*sin(phi_.value()); } m[celli] = n[celli]-1; if (!(pc[celli] > 0)) { pc[celli] = small; } //..pf is a const. //calculation of nu if (m[celli] > 0) { nu[celli] = sqrt(2.0)*pf[celli]*sin(phi_.value())* ( n[celli]-(n[celli]-1.0)*pow(pf[celli]/(pc[celli]), 1/m[celli]) ) /(sqrt(Us[celli]) + small); } else { nu[celli] = sqrt(2.0)*pf[celli]*sin(phi_.value())* ( n[celli]-(n[celli]-1.0)*pow(pc[celli]/(pf[celli]+small), mag(1/m[celli])) ) /(sqrt(Us[celli]) + small); } } ...... //对面 forAll(patches, patchi) { if (!patches[patchi].coupled()) { const fvPatch& currPatch = patches[patchi]; forAll(currPatch,facei) { if(UdBf[patchi][facei] < 0.0) { nBf[patchi][facei] = 1.03; } else { nBf[patchi][facei] = 0.5*sqrt(3.0)*sin(phi_.value()); } mBf[patchi][facei] = nBf[patchi][facei]-1; if (!(pcBf[patchi][facei] > 0.0)) { pcBf[patchi][facei] = small; } if (mBf[patchi][facei] > 0) { nuBf[patchi][facei] = sqrt(2.0)*pf.boundaryField()[patchi][facei]*sin(phi_.value())* ( nBf[patchi][facei]-(nBf[patchi][facei]-1.0)*pow(pfBf[patchi][facei]/pcBf[patchi][facei], 1/mBf[patchi][facei]) ) /(sqrt(UsBf[patchi][facei]) + small); } else { nuBf[patchi][facei] = sqrt(2.0)*pf.boundaryField()[patchi][facei]*sin(phi_.value())* ( nBf[patchi][facei]-(nBf[patchi][facei]-1.0)*pow(pcBf[patchi][facei]/(pfBf[patchi][facei]+small), mag(1/mBf[patchi][facei])) ) /(sqrt(UsBf[patchi][facei]) + small); } } } } nu.correctBoundaryConditions(); Us.correctBoundaryConditions(); pc.correctBoundaryConditions(); Ud.correctBoundaryConditions();

    结果在相分数0.5左右(摩擦黏度产生处)报错:
    149e14c3-5f93-4325-980c-2e15732c8f04-image.png
    36f75fde-3108-44a1-88ee-ba7eee7d1aa7-image.png

    相分数出现突变,而且无法增大(继续堆积),增大就会报错,不知道是哪个地方的处理有问题,还请东岳老师和其他前辈能解答一二!

  • 1 帖子
    1k 浏览
    strive_DUTS

    如题,求帮助,:chouchou: 感谢各位的指导!

  • 请问如何根据stl文件创建边界?(SHM除外)

    3
    3 帖子
    3k 浏览
    C

    @blookcfd
    你好,感谢回复。

    我发现我的问题可能是由于snappyHexMesh选定的区域与重叠区域重合导致的,现在已经解决了。

    但是也有没解决的部分,我自己在原来overset网格的基础上加了一点东西,自己编译了另一个lib,这个lib与SHM还是有点冲突,运行的时候会报错,但实际上SHM执行了,网格也能用,所以我下一步好好看看我自己编的lib哪里有问题。

    当用toposet + createPatch时,提示找不到stl文件,但是我的stl文件就在对应文件夹下放着,所以这个问题我还没找到原因。

    我还在找寻替代方法,如果您知道其他方法能把stl放入计算域中,请不吝赐教,谢谢。

  • 1 帖子
    1k 浏览
    五好青年

    请教各位大佬

    问题:OpenFOAM中重叠网格,六自由度运动。关于物体属性设置请教

    算例:我算六自由度运动,想定义模型上面1和下面2,两部分密度不同。(就是材料不同)

    目前问题:我试过分开给属性,就变成2个模型了啊,但是我想让模型是一个整体啊。这个咋定义呢?感谢

    23423432.png

  • blueCFD并行计算

    8
    8 帖子
    6k 浏览
    S

    @samuel-tu 用Ubuntu系统,四个物理核心,8个超线程。开四核并行计算的时候,cpu利用率是50%,开8核并行的时候,CPU利用率是96%。但是八核比四核还慢了一点点。。。搞不懂了。。

  • 1 帖子
    1k 浏览
    D

    本算例采用的是气液两相流,想要给空气相加一个速度边界条件,而水相不加这个边界条件,下面给出的这个边界条件是空气相的,是依时的边界条件,按照网站上相似的做法编了以下,但是始终出现如下错误。请各位老师同学有时间帮忙解答一下,非常感谢!
    下面是边界条件:

    afInlet { type codedFixedValue; value $internalField; redirectType ramp; name sinewave; code #{ #include <math.h> scalar t = this->db().time().value(); fvPatchField<vector> u ( patch().lookupPatchField<volVectorField,vector>("U.air") ); u[t] = vector(0,0,2*3.1416*10/1000/0.77*1*sin(2*3.1416*1*t)); (*this) == u; #};

    下面是报错的内容:

    --> FOAM FATAL ERROR: request for volVectorField U from objectRegistry region0 failed available objects of type volVectorField are 8 ( HbyA.air U.air U.water U.air_0 KdUByA.air U.water_0 KdUByA.water HbyA.water ) From function const Type& Foam::objectRegistry::lookupObject(const Foam::word&) const [with Type = Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh>] in file /home/dyfluid/OpenFOAM/OpenFOAM-8/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 211. FOAM aborting #0 Foam::error::printStack(Foam::Ostream&) at ??:? #1 Foam::error::abort() at ??:? #2 Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh> const& Foam::objectRegistry::lookupObject<Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh> >(Foam::word const&) const in "/home/dyfluid/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/multiphaseEulerFoam" #3 Foam::totalPressureFvPatchScalarField::updateCoeffs() at ??:? #4 Foam::fvMatrix<double>::fvMatrix(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&, Foam::dimensionSet const&) in "/home/dyfluid/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/multiphaseEulerFoam" #5 ? in "/home/dyfluid/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/multiphaseEulerFoam" #6 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6" #7 ? in "/home/dyfluid/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/multiphaseEulerFoam" Aborted (core dumped)
  • foam-extend的fsiFoam并行效率问题

    7
    7 帖子
    6k 浏览
    五好青年

    @number44 在 foam-extend的fsiFoam并行效率问题 中说:

    foam-extend的icoFsiFoam

    您好,请问下,下面两者有什么区别呢?
    foam-extend中自带的icoFsiFoam

    单独的fsiFoam

  • 8 帖子
    6k 浏览

    @samuel-tu 这个可以有。如果可以的话用结构网格是最方便的了,直接在该区域定义一个block,单独进行网格划分

  • volScalarField的函数计算

    4
    4 帖子
    3k 浏览
    X

    @hongjiewang 请问你是在这步Clapeyron方程用局部压力计算饱和温度吗?还有这里的饱和压力pSat是个变量吗?

  • 网格转换writezones

    7
    7 帖子
    5k 浏览
    李东岳

    我有的时候画了一个非常复杂的网格,用各种block切分,然后导入报错。然后就是重新画,每个步骤导入一次看看有没有错误。然后搞得特别细。就没错误了。目前也不知道哪里有问题。

  • 关于重叠网格的几个小问题

    4
    4 帖子
    5k 浏览
    L

    @cfdngu 楼主您好,我现在也有你之前的问题,算了一个和你类似的例子,波浪作用在矩形防波堤下三个自由度的响应,在沿波浪传播方向的那个自由度,无论是加密重叠区域网格,还是改进时间步和库郎数的关系,都没有好转,有了解贴体网格,但还没有采用做验证。以及您说的测点如何设置能在重叠网格上随物体一起运动。期待您的回答,祝您一切都好。

  • 1 帖子
    1k 浏览
    五好青年

    请教各位使用过,浸入边界法IBM,解决流固耦合fsi问题的大佬。

    最近在用foam-extend中的浸入边界法,算圆柱绕流(刚性问题) 如果我想考虑圆柱的流固耦合fsi,请问设置上的区别在哪呢?
    即:浸入边界法,做流固耦合问题,和刚性问题,设置上区别在哪呢?
    万分感谢!

    7ffe581e-acb0-42ea-abb7-64507e4652c1-image.png

  • 3 帖子
    3k 浏览
    五好青年

    @oitocfd
    您好,请问foam-extend,浸入边界法,做流固耦合问题,和刚性问题,
    设置上区别在哪呢?

  • OF中是怎么处理非线性的?

    7
    7 帖子
    5k 浏览
    MicroM

    @micro 自挖自填。
    大家可以参考东岳老师关于icoFoam解析的文章,说的很正确的,一个时间步骤动量方程的系数是不变的,因为动量方程每个时间步中仅被组建了一次。但是每个时间步中,U可是被更新了好几次(在压力泊松循环中),两者并不矛盾!另外,我们同样可知,一个时间步中,我们反复求解压力泊松方程(一般是3次),压力泊松方程的系数同样是不变的,变化的是右端项(因为右端项是用速度组建的)。

  • 请教后处理中,关于探针的使用方法

    2
    2 帖子
    2k 浏览

    在设置探针的时候,有个fixedLocation的条目可以设置为false,这样的话对于动网格探针应该是会随着网格拓扑更新移动的。

  • 关于potentialFoam的问题

    6
    6 帖子
    4k 浏览
    W

    @xpqiu 谢谢您的回复!关于2,我设置的phi的tolerance是10^-6,solver是GAMG。把nNonOrthogonalCorrectors设为10之后,最后几次计算的No. Iteration 就随计算次数减小了,最后为0,我想应该是残差已经降到最低。谢谢!

  • interFoam相方程里人工对流项在哪里?

    5
    5 帖子
    4k 浏览
    李东岳

    @cresendo 那就是纯对流方程了

  • 7 帖子
    5k 浏览
    MicroM

    @xpqiu 收到,还是非常感谢!!解释的已经很清晰了!