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中文网

  1. CFD中文网
  2. OpenFOAM
  3. 编译新的湍流模型遇到no match for ‘operator<’

编译新的湍流模型遇到no match for ‘operator<’

已定时 已固定 已锁定 已移动 OpenFOAM
14 帖子 4 发布者 9.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • strive_DUTS 离线
    strive_DUTS 离线
    strive_DUT
    写于 最后由 编辑
    #1

    我在编译一个新湍流模型,遇到了以下报错问题:

    no match for ‘operator<’ (operand types are ‘Foam::volScalarField {aka Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>}’ and ‘int’)
         if (p2 < 0) 
    

    源代码为:

    tmp<volScalarField> KEF::fMu2() const
    {
        const tmp<volTensorField> tgradU = fvc::grad(U_);
        const volTensorField& gradU = tgradU();
        volSymmTensorField sij(symm(gradU));
        volTensorField wij(skew(gradU));
        
        volScalarField Sij(mag(sij)*k_/epsilon_);//Sij*
        volScalarField Wij(mag(wij)*k_/epsilon_);//Wij*
        
        volScalarField S(sqrt(2*Sij*Sij));//S*
        volScalarField W(sqrt(2*Wij*Wij));//W*
    
        volScalarField Eta(fw_*S);//η
        volScalarField Kce(fw_*W);//ξ
     
        volScalarField As = sqr(alpha3_)*sqr(Kce) - sqr(alpha2_)*sqr(Eta)/3;
        volScalarField p1 = C0_*(C0_*C0_/27-(As+alpha1_*Eta*Eta)/6+0.5);
        volScalarField p2 = p1*p1 - (C0_*C0_/9-(As+alpha1_*Eta*Eta)/3);
        volScalarField g(As);
        if (p2 < 0) 
        {
    	g = C0_/3+2*pow(p1*p1-p2), 1/6)+cos(1/3*acos(p1/(sqrt(p1*p1-p2))));//p1,p2的类型导致错误
        }
        else 
        {
    	g = C0_/3+pow(p1+pow(p2, 0.5), 1/3)+sign(p1-pow(p2, 0.5))*pow(mag(p1-pow(p2, 0.5)), 1/3);
        }
    
        volScalarField fMu2_ = 5*(1+g)/(g*g+Cmu_*g*g*g+As);
    
        return fMu2_;
    }
    

    请问李老师和各位同学,这个地方应该怎么处理呢?找了很多源码,没有发现类似的问题,求解答!谢谢各位啦:xiexie:

    1 条回复 最后回复
  • strive_DUTS 离线
    strive_DUTS 离线
    strive_DUT
    写于 最后由 编辑
    #2

    @东岳 李老师,求指点:xinxin3:

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #3

    p2是一个volScalarField,不能写if (p2 < 0)

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    strive_DUTS 1 条回复 最后回复
  • strive_DUTS 离线
    strive_DUTS 离线
    strive_DUT
    在 中回复了 李东岳 最后由 编辑
    #4

    @东岳 是的李老师,p2是一个体标量场,0是整型,那这个地方应该怎么处理呢,求指点

    C 1 条回复 最后回复
  • C 离线
    C 离线
    chien
    在 中回复了 strive_DUT 最后由 编辑
    #5

    @strive_dut 解决了吗?老哥

    strive_DUTS 2 条回复 最后回复
  • strive_DUTS 离线
    strive_DUTS 离线
    strive_DUT
    在 中回复了 chien 最后由 编辑
    #6

    @chien 你好!抱歉回复晚了。可以用最值替换来解决,例如p2 < 0,即体标量场p2的最大值小于0,这样可以编译通过,但是是否具体可行我没有做测试呢。

    1 条回复 最后回复
  • strive_DUTS 离线
    strive_DUTS 离线
    strive_DUT
    在 中回复了 chien 最后由 编辑
    #7

    @chien 还可将 volScalarField无量纲化

    p2.dimensions().reset(dimless)
    
    C 流 2 条回复 最后回复
  • C 离线
    C 离线
    chien
    在 中回复了 strive_DUT 最后由 编辑
    #8

    @strive_dut 好的,谢谢老哥,我用了forAll,对每一个值比较。

    strive_DUTS 流 2 条回复 最后回复
  • strive_DUTS 离线
    strive_DUTS 离线
    strive_DUT
    在 中回复了 chien 最后由 编辑
    #9

    @chien 解决了就好:ok:

    1 条回复 最后回复
  • 流 离线
    流 离线
    流体中二少年
    在 中回复了 chien 最后由 编辑
    #10

    @chien 请问用forall如何比较,能否提供下code,万分感谢:140:

    C 1 条回复 最后回复
  • 流 离线
    流 离线
    流体中二少年
    在 中回复了 strive_DUT 最后由 编辑
    #11

    @strive_dut 大哥,你最后是怎么解决的,我也遇到和你相同的问题

    if (p<5 )               
    			{
                        	field[faceI] = vector(0,0,0);
                    	}
    		else
                    	{
                        	field[faceI] = vector(U_0*t,0,0);
                    	}
    		}
    
    strive_DUTS 1 条回复 最后回复
  • strive_DUTS 离线
    strive_DUTS 离线
    strive_DUT
    在 中回复了 流体中二少年 最后由 编辑
    #12

    @流体中二少年 上面回复中提到了,你可以取变量p的最大值,然后进行比较,即

    scalar pmax = max(p2).value();
    if ( pmax < scalar(5.0) )
    

    或者你将volScalarField无量纲化,应该也可以比较。

    流 1 条回复 最后回复
  • 流 离线
    流 离线
    流体中二少年
    在 中回复了 strive_DUT 最后由 编辑
    #13

    @strive_dut 非常感谢,我试试

    1 条回复 最后回复
  • C 离线
    C 离线
    chien
    在 中回复了 流体中二少年 最后由 编辑
    #14

    @流体中二少年

    forAll(crossDiff,i)
    {
    	if (crossDiff[i] > 0.0)
    	{
    		arg1[i] = 0.125;
    	}
    	else
    	{
    		arg1[i] = 0.0;
    	}
    }
    
    
    1 条回复 最后回复

  • 登录

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