Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

C

Chen_hao

@Chen_hao
关于
帖子
44
主题
10
群组
0
粉丝
0
关注
3

帖子

最新

  • 每个时间步文件夹下没有数据写入,求大神!
    C Chen_hao

    @bestucan 谢谢老师,我试了下,还是不行~

    他是由于none量 他把它删了,看来我的问题就是那个omega,只要用

    const volScalarField& omega_ = 
    (
    this->mesh_.objectRegistry::template 
    lookupObject<volScalarField>("omega")
    );
    

    就会找不到,估计是结构问题,难道只能重写了。


  • 每个时间步文件夹下没有数据写入,求大神!
    C Chen_hao

    @bestucan
    谢谢老师的耐心解答:xinxin: ,我之前想达到的理想效果是:
    建立个 一次性的Omega场 让第一个循环运行起来后注销,后面的omega场是原湍流模型里的。
    在线性项中加入,会可能出现老师说的情况,每轮都会重新新建。

    求解器运行时,按照createFields.H中的顺序建立许多场,然后读取湍流模型的智能指针,我有个想法:如果有能注销IOobject的建立场命令吗 ,我在createFields中建立这种一次性的omega!
    如果没发做到,按照我的编写似乎没发在linearstress运行前注册进去Omega,似乎这种硬植入是无解的:xinlei:


  • 每个时间步文件夹下没有数据写入,求大神!
    C Chen_hao

    @chen_hao 在 每个时间步文件夹下没有数据写入,求大神! 中说:

    我在linearViscousStress.H中需要引用omega(SSTkomega.C中的)变量,然后我这样引用:

    const volScalarField& omega_ = 
    (
    this->mesh_.objectRegistry::template 
    lookupObject<volScalarField>("omega")
    );
    

    编译没问题,但当我运行求解器时,会出现:

    --> FOAM FATAL ERROR: 
    
        request for volScalarField omega from objectRegistry region0 failed
        available objects of type volScalarField are
    15
    (
    sigmaMag
    alphas
    nu.pos
    muMag_0
    rho
    nu.molten
    p_rgh
    nu
    alpha.molten
    nu.neg
    muMag
    rho_0
    alpha.neg
    alpha.pos
    sigmaMag_0
    )
    

    即objectRegistry region0此时没有omega注册,我分析原因:执行求解器的时候linearViscousStress.C先执行,此时omega还没注册进表里,显示找不到它,我现在在linearViscousStress.C的引用以前加入:

    omega
        (
            IOobject
            (
                IOobject::groupName("omega", alphaRhoPhi.group()),
                //"omega",
                runTime.timeName(),      //way--time
                mesh,                    //objectRegistry---region0(fvmesh)
                IOobject::MUST_READ,            //regIOobject	
                IOobject::AUTO_WRITE            //regIOobject
            ),
            mesh
    );
    
    const volScalarField& omega_ = 
        (
        this->mesh_.objectRegistry::template 
        lookupObject<volScalarField>("omega")
    );
    

    求解器可以运行,也omage也正常迭代,
    但在每个时间步文件夹下,omage文件始终保持0文件下的状态,没有数据写入,所以不知为何?
    我相当于IOobject了两次omega变量(其中SSTkomegabase.C本身自带一次,自己人为添加一次),是这个原因吗?

    :zoule: :zoule: :zoule:

    @李东岳 @bestucan 想问下怎么把一个注册到某个objectRegistry的物理量从其中 删除注销:mihu: 有没有办法 我看regIOobject里有checkOut()函数,不知道能不能实现


  • 每个时间步文件夹下没有数据写入,求大神!
    C Chen_hao

    @尚善若水
    谢谢, 你是放在controlDict中吗?


  • 每个时间步文件夹下没有数据写入,求大神!
    C Chen_hao

    @尚善若水
    唯独omega没有输出,其他正常,我看有求解器程序中有runTime.write()

    我单独加omega的话该怎么写


  • 每个时间步文件夹下没有数据写入,求大神!
    C Chen_hao

    我在linearViscousStress.H中需要引用omega(SSTkomega.C中的)变量,然后我这样引用:

    const volScalarField& omega_ = 
    (
    this->mesh_.objectRegistry::template 
    lookupObject<volScalarField>("omega")
    );
    

    编译没问题,但当我运行求解器时,会出现:

    --> FOAM FATAL ERROR: 
    
        request for volScalarField omega from objectRegistry region0 failed
        available objects of type volScalarField are
    15
    (
    sigmaMag
    alphas
    nu.pos
    muMag_0
    rho
    nu.molten
    p_rgh
    nu
    alpha.molten
    nu.neg
    muMag
    rho_0
    alpha.neg
    alpha.pos
    sigmaMag_0
    )
    

    即objectRegistry region0此时没有omega注册,我分析原因:执行求解器的时候linearViscousStress.C先执行,此时omega还没注册进表里,显示找不到它,我现在在linearViscousStress.C的引用以前加入:

    omega
        (
            IOobject
            (
                IOobject::groupName("omega", alphaRhoPhi.group()),
                //"omega",
                runTime.timeName(),      //way--time
                mesh,                    //objectRegistry---region0(fvmesh)
                IOobject::MUST_READ,            //regIOobject	
                IOobject::AUTO_WRITE            //regIOobject
            ),
            mesh
    );
    
    const volScalarField& omega_ = 
        (
        this->mesh_.objectRegistry::template 
        lookupObject<volScalarField>("omega")
    );
    

    求解器可以运行,也omage也正常迭代,
    但在每个时间步文件夹下,omage文件始终保持0文件下的状态,没有数据写入,所以不知为何?
    我相当于IOobject了两次omega变量(其中SSTkomegabase.C本身自带一次,自己人为添加一次),是这个原因吗?

    :zoule: :zoule: :zoule:


  • IOobject::groupName("omega", alphaRhoPhi.group()) 这句话的意思是?
    C Chen_hao

    注册omega如下,有地方不理解:

    omega_
        (
            IOobject
            (
                IOobject::groupName("omega", alphaRhoPhi.group()),
                this->runTime_.timeName(),     
                this->mesh_,                    
                IOobject::MUST_READ,            
                IOobject::AUTO_WRITE           
            ),
            this->mesh_
        )
    

    IOobject::groupName("omega", alphaRhoPhi.group()) 知道是定义omage的name,但是 后面这个alphaRhoPhi.group(),是起到什么作用呢?

    如果我定义成:

    omega_
        (
            IOobject
            (
               "omega", 
                this->runTime_.timeName(),     
                this->mesh_,                    
                IOobject::MUST_READ,            
                IOobject::AUTO_WRITE           
            ),
            this->mesh_
        )
    

    会有什么效果无法实现?:tishizi:


  • 关于用lookupObject引用变量报错,求大佬们指点。
    C Chen_hao

    @李东岳
    针对 ncompressible::turbulenceModel 模板特化后的 ShihQuadraticKE 模型 ,仔细研究了一下其怎么实现非线性项的实现,发现其是在 NonlinearEddyViscosity.H 中定义 nonlinearStress_ 项,然后用 ShihQuadraticKE 作为子类继承父类 NonlinearEddyViscosity 以便在 ShihQuadraticKE.C 中直接引用omega_。

    但由于我修改的是SSTkomegabase.H( 继承于TurbulenceModel类 )与 linearViscousStrss.H ( 继承于BasicturbulenceModel原则类 ) 没有特例化,不能简单类似上面的ShihQuadraticKE 模型。需要从新仿造框架,是一项大工程!

    我的策略是:在现有的文件上直接硬植入,简单很多,毕竟涉及到湍流模型的类错综复杂,针对找不到omega,按照我的分析应该是对的,运行求解器时linearViscousStrss.C先运行此时并未运行SSTkomegabase.C 所以没有omega场注册,找不到他,所以我在creatfield.H中IOobject一下omega场,目前可以算了,结果还未检查,不知道我的理解有没有问题。


  • 量纲问题:加入的fvm::susp部分总差个密度量纲?求大佬指点,我已黔驴技穷了
    C Chen_hao

    @李东岳 :xinxin:
    谢谢老师,已经帮我很多了,记录下来,也可以帮助其他人


  • 讨论帖:静止到不稳定性流动发生采用湍流模型计算。
    C Chen_hao

    液态电池在一定的电压下,中间的电介质层会失稳,过程如下:

    13.png

    失稳这个过程我要采用湍流模型来算,但他是从静止开始的,我无法直接
    用湍流模型,我有以下两种思路:

    1、我目前采用了一个转捩模型,但对于这用流动不知道算不算严格的层流到湍流

    2、异想天开:采用DNS当雷诺数到达一定值就采用湍流模型 可能实现吗?

    还有其他解决办法吗 引用: 湍流模型计算层流转变为湍流 看东岳老师提了一个用湍流计算层流很有意思,具体是怎么实现呢?

    希望有相关经验的可以跟我交流。


  • 量纲问题:加入的fvm::susp部分总差个密度量纲?求大佬指点,我已黔驴技穷了
    C Chen_hao

    @chen_hao
    自回复,如果论文中源项公式没错的话,按部就班导入进来就会有量纲问题,
    解决办法:不要纠结,计算好源项量纲直接除一个带量纲的标量1即可。:zoule:
    希望可以给大家节省时间。

        dimensionedScalar I1                                                   
        (
        	"I1",
        	dimDensity, 
        	1
        );
    

  • 量纲问题:加入的fvm::susp部分总差个密度量纲?求大佬指点,我已黔驴技穷了
    C Chen_hao

    @李东岳

    fvm::SuSp(0.1*alpha()*rho()*Scmag()/k_(), omega_)
    

    自己添加这一部分算下来确实如错误所示 [1,-3,-2,0,0,0,0]

    fvm::SuSp((2.0/3.0)*alpha()*rho()*gamma*divU, omega_)
    

    不理解的是这一部分 alpha gamma 无量纲,rho [1,-3,0,0,0,0,0] , divU [0,0,-1,0,0,0,0 ] , omega [0,0,-1,0,0,0,0] ,
    按道理来说应该也是 [1,-3,-2,0,0,0,0],可错误显示其为 [0 0 -2 0 0 0 0],

    然后omegaSource定义的量纲:

    kOmegaSST<TurbulenceModel, BasicTurbulenceModel>::omegaSource() const
    {
        return tmp<fvScalarMatrix>
        (
            new fvScalarMatrix
            (
                omega_,
                dimVolume*this->rho_.dimensions()*omega_.dimensions()/dimTime
            )
        );
    }
    

    从这看是[ 1,0,-2,0,0,0,0] ???


  • 量纲问题:加入的fvm::susp部分总差个密度量纲?求大佬指点,我已黔驴技穷了
    C Chen_hao

    错误如下:

    --> FOAM FATAL ERROR: 
    incompatible dimensions for operation 
        [omega[0 0 -2 0 0 0 0] ] - [omega[1 -3 -2 0 0 0 0] ]
    
    

    我定义量部分:

     const volVectorField& B = 
    (
        this->mesh_.objectRegistry::template
        lookupObject<volVectorField>("B")
    );
        const volScalarField& sigmaMag = 
    (
        this->mesh_.objectRegistry::template
        lookupObject<volScalarField>("sigmaMag")
    );
        volScalarField Ux = U.component(0);
        volScalarField Uy = U.component(1);
        volScalarField Uz = U.component(2);
        volScalarField Bx = B.component(0);
        volScalarField By = B.component(1);
        volScalarField Bz = B.component(2);
        
        volScalarField Scmag 
        (
           ((sigmaMag/rho)*(2.0*Ux*Uy*Bx*By) + (2.0*Ux*Uz*Bx*Bz) + (2.0*Uy*Uz*Bx*By) - (Uy*Uy + Uz*Uz)*Bx*Bx - (Ux*Ux + Uz*Uz)*By*By - (Uy*Uy + Ux*Ux)*Bz*Bz)
        );
    

    加入一个fvm::susp部分:

     tmp<fvScalarMatrix> omegaEqn
            (
                fvm::ddt(alpha, rho, omega_)
              + fvm::div(alphaRhoPhi, omega_)
              - fvm::laplacian(alpha*rho*DomegaEff(F1), omega_)
             ==
                alpha()*rho()*gamma
               *min
                (
                    GbyNu, //G 
                    (c1_/a1_)*betaStar_*omega_()
                   *max(a1_*omega_(), b1_*F23()*sqrt(S2()))
                )
              - fvm::SuSp((2.0/3.0)*alpha()*rho()*gamma*divU, omega_)
               //加入部分如下:
              - fvm::SuSp(0.1*alpha()*rho()*Scmag()/k_(), omega_) 
              - fvm::Sp(alpha()*rho()*beta*omega_(), omega_)
              - fvm::SuSp
                (
                    alpha()*rho()*(F1() - scalar(1))*CDkOmega()/omega_(),
                    omega_
                )
              + Qsas(S2(), gamma, beta)
              + omegaSource()
              + fvOptions(alpha, rho, omega_)
            );
    
    

    量纲显示差一个密度,可我计算的Scmag量 [0,2,-3,0,0,0,0] 密度没差,:mihu: 莫非是方程默认除了一个rho的单位?


  • 关于几个运算符运算后的量纲疑问
    C Chen_hao

    @chen_hao
    解决了,改成了无量纲,就避免出问题:

     volSymmTensorField Sij(twoSymm(tgradU())/omega_);
     volTensorField Wij(2.0*skew(tgradU())/omega_);
    

  • 关于几个运算符运算后的量纲疑问
    C Chen_hao

    @chen_hao 在 关于几个运算符运算后的量纲疑问 中说:

    定义如下:

         
        tensor I(1,0,0,0,1,0,0,0,1); 
        volSymmTensorField Sij(twoSymm(fvc::grad(this->U_)));
        volTensorField Wij(2.0*skew(fvc::grad(this->U_)));
    

    运算如下:

         Sij&Sij  - (1.0/3.0)*magSqr(Wij)*I 
    

    Sij应该是[0 0 -1 0 0 0 0],为啥 &内积 后还是[0 0 -1 0 0 0 0]?
    而 magSqr(Wij) 模的平方后乘以I为啥 [0 0 -2 0 0 0 0] ?

    显示错误如下,我通过排查也确实是这个地方,Sij & Sij 量纲显示为[0 0 -1 0 0 0 0 ],解释不通:zoule: :zoule: 难道要强行在乘一个量纲数?

    --> FOAM FATAL ERROR: 
    LHS and RHS of - have different dimensions
         dimensions : [0 0 -1 0 0 0 0] - [0 0 -2 0 0 0 0]
    

  • 关于几个运算符运算后的量纲疑问
    C Chen_hao

    定义如下:

         
        tensor I(1,0,0,0,1,0,0,0,1); 
        volSymmTensorField Sij(twoSymm(fvc::grad(this->U_)));
        volTensorField Wij(2.0*skew(fvc::grad(this->U_)));
    

    运算如下:

         Sij&Sij  - (1.0/3.0)*magSqr(Wij)*I 
    

    Sij应该是[0 0 -1 0 0 0 0],为啥 &内积 后还是[0 0 -1 0 0 0 0]?
    而 magSqr(Wij) 模的平方后乘以I为啥 [0 0 -2 0 0 0 0] ?


  • 关于用lookupObject引用变量报错,求大佬们指点。
    C Chen_hao

    @chen_hao 在 关于用lookupObject引用变量报错,求大佬们指点。 中说:

    @bestucan @李东岳
    虽然上面编译通过了,可兴致勃勃开始运行算例提示错误如下:136:

    --> FOAM FATAL ERROR: 
    
        request for volScalarField omega_ from objectRegistry region0 failed
        available objects of type volScalarField are
    
    15
    (
    sigmaMag
    alphas
    nu.pos
    muMag_0
    rho
    nu.molten
    p_rgh
    nu
    alpha.molten
    nu.neg
    muMag
    rho_0
    alpha.neg
    alpha.pos
    sigmaMag_0
    )
    
    
        From function const Type& Foam::objectRegistry::lookupObject(const Foam::word&) const [with Type = Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>]
        in file /home/dyfluid/OpenFOAM/OpenFOAM-7/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 193.
    

    还是关于omega_的引用问题,我在想是不是因为linearVicousStress.C是父类,而omega是在SSTbase.C中定义的(类似于子类),所以找不到?难道我要在linearVicousStress.C中重新IObject?
    还是说这个引用方式有问题...但我用

    const volScalarField& omega_ = this->mesh_.lookupObject<volScalarField>("omega_");
    

    会编译不通过......不知道老师们有没有想法,十分需要帮助,再次感谢老师们:wanan:

    我的分析原因是:执行求解器的时候linearStress.C先执行,所以此时omega还没注册进表里,显示找不到它,我现在在linearStress.C中加入一个omega的IOobject可不可行,毕竟在SST.C中还会IOobject一次,一个变量可以注册多次吗,会不会影响计算结果?:140:


  • 关于用lookupObject引用变量报错,求大佬们指点。
    C Chen_hao

    @wwzhao
    老师,可以帮忙解答一下吗~:xinxin:


  • 关于用lookupObject引用变量报错,求大佬们指点。
    C Chen_hao

    @bestucan @李东岳
    虽然上面编译通过了,可兴致勃勃开始运行算例提示错误如下:136:

    --> FOAM FATAL ERROR: 
    
        request for volScalarField omega_ from objectRegistry region0 failed
        available objects of type volScalarField are
    
    15
    (
    sigmaMag
    alphas
    nu.pos
    muMag_0
    rho
    nu.molten
    p_rgh
    nu
    alpha.molten
    nu.neg
    muMag
    rho_0
    alpha.neg
    alpha.pos
    sigmaMag_0
    )
    
    
        From function const Type& Foam::objectRegistry::lookupObject(const Foam::word&) const [with Type = Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>]
        in file /home/dyfluid/OpenFOAM/OpenFOAM-7/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 193.
    

    还是关于omega_的引用问题,我在想是不是因为linearVicousStress.C是父类,而omega是在SSTbase.C中定义的(类似于子类),所以找不到?难道我要在linearVicousStress.C中重新IObject?
    还是说这个引用方式有问题...但我用

    const volScalarField& omega_ = this->mesh_.lookupObject<volScalarField>("omega_");
    

    会编译不通过......不知道老师们有没有想法,十分需要帮助,再次感谢老师们:wanan:


  • 关于用lookupObject引用变量报错,求大佬们指点。
    C Chen_hao

    @bestucan
    :xinxin: 谢谢,刚才的wmake通过的太轻松了哈哈哈,还好问了一下,
    果然很多错才是该有的样子。我先自己改改,有问题可能还会麻烦老师~

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]