Skip to content

OpenFOAM

OpenFOAM交流区

4.5k 主题 26.5k 帖子
  • OF8 虚拟机安装出现问题

    6
    6 帖子
    1k 浏览
    李东岳

    @try-harder 谢谢,谢谢!:xiexie: :xiexie:

  • 如何判断残差曲线是否达到要求?

    3
    3 帖子
    1k 浏览
    F

    @李东岳 谢谢李老师的回复~ 教师节快乐~ 是一个标准的channel。但是雷诺数非常高,Re=80 million, 没有8000万网格,是NASA官网上的一个标准算例,独特的地方就是雷诺数非常大

  • timeVaryingMappedfixedValue BC后续问题

    1
    1 帖子
    537 浏览

    Capture1.PNG
    Capture2.PNG

    如上2图,白色的点为测量数据点,每个点都有ux,uy,uz
    先在inlet 上通过topoSet 专门设置出了一个小的区域,
    图1是方形,图2是根据测量区域画出来的一个正方形加两个圆形的区域。

    现在最大的问题是,你可以发现topoSet的边界特别明显。。
    这种情况应该通过什么办法能解决呢?

    为什么用topoSet的原因是如果直接在inlet 上设置为timeVaryingMappedfixedValue 这个边界条件的话,code 会直接插值到最边界。。结果看起来更有问题,topoSet这个解决方法一定程度上规避了interpolation到最边界的情况,但是会造成这个patch 和他原来关联的patch的边界问题。。

    求大佬指点迷津

  • 3 帖子
    2k 浏览
    李东岳

    @李东岳 http://www.jhydrodynamics.com/en/download-of-liutex-code/ 这个已经有了个开源的代码

    /*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 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/>. Application stressComponents Description Calculates and writes the scalar fields of the six components of the stress tensor sigma for each time. \*---------------------------------------------------------------------------*/ #include "fvCFD.H" #include "OFstream.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // tensor rotation(vector u, vector v) { scalar eps = 1.0e-10; tensor q(tensor::zero); vector a( u.y()*v.z()-u.z()*v.y(), u.z()*v.x()-u.x()*v.z(), u.x()*v.y()-u.y()*v.x() ); if(Foam::mag(a)<eps) { q.xx()= 1.0; q.yy()= 1.0; q.zz()= 1.0; } else { a=a/Foam::mag(a); scalar t=Foam::sign( u & v); scalar alpha = Foam::acos(t); scalar c = Foam::cos(alpha); scalar s = Foam::sin(alpha); q.xx()=Foam::pow(a.x(),2)*(1-c)+c; q.xy()=a.x()*a.y()*(1-c)-a.z()*s; q.xz()=a.x()*a.z()*(1-c)+a.y()*s; q.yx() = a.y()*a.x()*(1-c)+a.z()*s; q.yy() = Foam::pow(a.y(),2)*(1-c)+c; q.yz() = a.y()*a.z()*(1-c)-a.x()*s; q.zx() = a.z()*a.x()*(1-c)-a.y()*s; q.zy() = a.z()*a.y()*(1-c)+a.x()*s; q.zz() = Foam::pow(a.z(),2)*(1-c)+c; } return q; } int main(int argc, char *argv[]) { timeSelector::addOptions(); #include "setRootCase.H" #include "createTime.H" instantList timeDirs = timeSelector::select0(runTime, args); #include "createMesh.H" forAll(timeDirs, timeI) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; IOobject Uheader ( "U", runTime.timeName(), mesh, IOobject::MUST_READ ); vector z0(0,0,1); // Check U exists if (Uheader.headerOk()) { mesh.readUpdate(); Info<< " Reading U" << endl; volVectorField U(Uheader, mesh); volVectorField Rotex ( IOobject ( "Rotex", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), mesh, dimensionedVector("zero", dimless, vector::zero) ); volTensorField gradU = fvc::grad(U); forAll(U,cellI) { scalar aa=-( gradU.component(tensor::XX)()[cellI] + gradU.component(tensor::YY)()[cellI] + gradU.component(tensor::ZZ)()[cellI] ); tensor a=gradU[cellI]; tensor tt =a & a; scalar bb = -0.5*(tt.xx()+tt.yy()+tt.zz()-pow((tt.xx()+tt.yy()+tt.zz()),2)); scalar cc = -( a.xx()*(a.yy()*a.zz()-a.yz()*a.zy()) -a.xy()*(a.yx()*a.zz()-a.yz()*a.zx()) +a.xz()*(a.yx()*a.zy()-a.yy()*a.zx()) ); scalar delta = 18.0*aa*bb*cc-4.0*Foam::pow(aa,3)*cc+Foam::pow(aa,2)*pow(bb,2)-4.0*Foam::pow(bb,3)-27.0*Foam::pow(cc,2); scalar qq=(Foam::pow(aa,2),3*bb)/9.0; scalar rr=(2.0*Foam::pow(aa,3)-9.0*aa*bb+27.0*cc)/54.0; delta=-delta/108.0; if(delta > 0.0) { scalar aaaa=-sign(rr)*Foam::pow(abs(rr)+Foam::sqrt(delta),scalar(1.0/3.0)); scalar bbbb=0; if( aaaa !=0.0) bbbb=qq/aaaa; scalar eig1c_r=-0.5*(aaaa+bbbb)-aa/3.0; scalar eig1c_i=0.5*Foam::sqrt(scalar(3.0))*(aaaa-bbbb); scalar eig2c_r=-0.5*(aaaa+bbbb)-aa/3.0; scalar eig2c_i=-0.5*Foam::sqrt(scalar(3.0))*(aaaa-bbbb); scalar eig3r = aaaa+bbbb-aa/3.0; scalar delta1(0.0),delta2(0.0),delta3(0.0); delta1 = (a.xx()-eig3r)*(a.yy()-eig3r) -a.yx()*a.xy(); delta2 = (a.yy()-eig3r)*(a.zz()-eig3r) -a.yz()*a.zy(); delta3 = (a.xx()-eig3r)*(a.zz()-eig3r) -a.zx()*a.xz(); if(delta1==0.0 && delta2==0.0 && delta3==0.0) { FatalErrorInFunction << "delta1-3 are:" << delta1 << "," << delta2 <<","<< delta3 << exit(FatalError); } vector vr(0,0,0); if( Foam::mag(delta1)>=Foam::mag(delta2) && Foam::mag(delta1)>=Foam::mag(delta3) ) { vr.x()=(-(a.yy()-eig3r)*a.xz()+a.xy()*a.yz())/delta1; vr.y()= (a.yx()*a.xz() - (a.xx()-eig3r)*a.yz())/delta1; vr.z()=1.0; } else if( Foam::mag(delta2)>=Foam::mag(delta1) && Foam::mag(delta2)>=Foam::mag(delta3) ) { vr.x()=1.0; vr.y()=(-(a.zz()-eig3r)*a.yx()+a.yz()*a.zx())/delta2; vr.z()=(a.zy()*a.yx() - (a.yy()-eig3r)*a.zx())/delta2; } else if( Foam::mag(delta3)>=Foam::mag(delta1) && Foam::mag(delta3)>=Foam::mag(delta2) ) { vr.x()=(-(a.zz()-eig3r)*a.xy()+a.xz()*a.zy())/delta3; vr.y()= 1.0 ; vr.z()=(a.zx()*a.xy() - (a.xx()-eig3r)*a.zy())/delta3; } else FatalErrorInFunction<< "vr error"<< exit(FatalError); vr = vr/Foam::sqrt(vr & vr); tensor qqq=rotation(z0,vr); tensor vg(qqq.T() & a); vg=vg & qqq; scalar alpha = 0.5*Foam::sqrt(Foam::pow(vg.yy()-vg.xx(),2)+Foam::pow(vg.yx()+vg.xy(),2)); scalar beta = 0.5*(vg.yx()-vg.xy()); if(Foam::magSqr(beta) > Foam::magSqr(alpha)) { scalar rm=0.0; if(beta > 0.0) rm=2.0*(beta-alpha); else rm=2.0*(beta+alpha); Rotex[cellI]=rm*vr; } } } Rotex.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; } else { Info<< " No U" << endl; } } Info<< "End" << endl; return 0; } // ************************************************************************* //
  • 并行问题

    2
    2 帖子
    768 浏览
    bestucanB

    是不是模型的xyz搞翻了,可以先用paraview看看。

    或者(16 2 1)试试

  • timeVaryingMappedFixedValue 是个好BC

    2
    2 帖子
    744 浏览
    李东岳

    @星星星星晴 :xiezuoye: :xiezuoye: :xiezuoye:

  • 5 帖子
    1k 浏览
    J

    @李东岳 So cool!

  • 湍流边界层平均速度剖面y+. vs. U+的处理

    4
    4 帖子
    2k 浏览
    李东岳

    对y+、u+感兴趣的,可以直接看看openfoam tutorials里面incompressible/boundaryFoam里面的自带算例,有处理y+、u+的图的脚本

  • Ubuntu16.04 安装foam-extend3.2

    3
    3 帖子
    750 浏览
    李东岳

    @冠竹 自行尝试下载metis-5.1.0.tar.gz试试

  • 新旧版本编程差异问题

    15
    15 帖子
    3k 浏览
    F

    @李东岳 我重新定义了k_, 将其强制变成const,但是还是报错,错误如下:

    error: no matching function for call to ‘ddt(const alphaField&, const rhoField&, const volScalarField&)’ + fvc::ddt(alpha, rho, k_) ~~~~~~~~^~~~~~~~~~~~~~~~

    可见k_前面已经有const,但是还是不行,可见应该还是要修改alpha与rho的类型?但是我重新赋值定义alpha, rho为volScalarField, 会报初始化错误,不能直接这样改,修改方式如下:
    const volScalarField alphat = this->alpha_; 再在fvc中调用fvc::ddt(alphat, rhot, k_)

  • openfoam9调用paraview5.9

    7
    7 帖子
    1k 浏览
    李东岳

    @tianyn 不客气。欢迎加入OpenFOAM开源大家庭 :duang:

  • OpenFOAM中的重叠网格cellTypes显示

    8
    8 帖子
    2k 浏览
    Y

    @yingdong
    问题已经解决
    5df70411-c33b-43b4-a648-6c2eb39b319b-图片.png
    (图示网格质量较差)
    最开始我建立模型使用的一半区域(使用对称边界symmetryPlane),全区域就不存在这个问题了

    请问老师有相关的dynamicMeshDict中dynamicFvMesh dynamicOversetFvMesh;相关的资料么?
    感谢老师指点@队长别开枪

  • 设置边界条件

    2
    2 帖子
    851 浏览
    H

    1630305503(1).png
    我也尝试了其他的边界条件,只有这个运行出来的结果是最接近现实的,但是他的出口压力边界我设置的是固定值

  • 运行时动态加载库

    8
    8 帖子
    2k 浏览

    @浪迹天大 在 运行时动态加载库 中说:

    @Micro 我有个朋友写过相关的博文,感兴趣可以看看
    https://zmeng.tech/2020/10/DynamicLibraries/

    https://zmeng.tech/2020/10/DynamicLibraries/

  • 并行计算更新边界的问题?

    7
    7 帖子
    2k 浏览
    MicroM

    @samuel-tu =等号类似的操作都需要correctBoundaryConditions()
    @李东岳 请问岳哥,为啥 = 号等类似的操作都需要显式更新下边条呢?能不能稍微解释下,感谢!

  • 后处理不正常,怀疑网格拉伸不正确?

    7
    7 帖子
    1k 浏览
    Y

    自己顶一下,有没有哪位老师给点意见,应该是网格拉伸方向错误了,但是不知道如何下手

  • 请教下在Paraview如何选择区域性的流场显示

    3
    3 帖子
    1k 浏览
    Z

    @tens 非常感谢,好好用:xinxin::146:

  • 如何设置密度随浓度变化?

    2
    2 帖子
    1k 浏览
    H

    请问您解决了吗,想问一下怎么解决的,遇到了同样的问题~

  • 并行时函数只能在processor0执行

    7
    7 帖子
    2k 浏览
    C

    接楼上的发言,Info在并行时只会输出master processor的信息,所以把Info改成Pout应该就可以了

  • 4 帖子
    2k 浏览

    @zp气固两相流 博主这个问题解决了吗?想知道后续