U*sin(t)边界条件



  • 我刚开始学OpenFOAM,我没在用户手册里看到怎么样把速度的边界条件设成time dependent的,比如我要wall velocity 是U*sin(t),这个样子的?能麻烦你告诉我一下实现这个的函数吗?

    inlet
        {
            type            codedFixedValue;
            name            dummy;
            code
            #{
    		const scalar& time = this->db().time().value();
    	        operator==(vector(2.0*sin(time),0,0));
           #}; 
            value           $internalField;
        }
    

    请参考



  • 我直接把这个代码拷进去替换原来的比如fixedValue condition,显示错误,
    keyword name is undefined in dictionary "/home/abc/OpenFOAM/abc-4.1/run/cavity/0/U.boundaryField.movingWall"
    这应该怎么处理?多谢!



  • 上面只是inlet的边界条件,你需要设置movingWall的边界条件。



  • 我先拿一个简单的例子试一下,就把cavity算例里的moving wall边界条件改了,本来U的边界条件是

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volVectorField;
        object      U;
    }
    
    dimensions      [0 1 -1 0 0 0 0];
    
    internalField   uniform (0 0 0);
    
    boundaryField
    {
        movingWall
        {
            type            fixedValue;
            value           uniform (1 0 0);
        }
    
        fixedWalls
        {
            type            noSlip;
        }
    
        frontAndBack
        {
            type            empty;
        }
    }
    

    我改成了

    dimensions      [0 1 -1 0 0 0 0];
    
    internalField   uniform (0 0 0);
    
    boundaryField
    {
        movingWall
        {
            type            codedFixedValue;
            
            code
            #{
                   const scalar& time = this->db().time().value();
                   operator==(vector(2.0*sin(time),0,0));
            #};
    
            value           $internalField;
        }
    
        fixedWalls
        {
            type            noSlip;
        }
    
        frontAndBack
        {
            type            empty;
        }
    }
    

    就出错了



  • 什么错误?把log贴上来看一下?



  • 你那个movingWall里面忘记了name dummy;

    dimensions      [0 1 -1 0 0 0 0];
    
    internalField   uniform (0 0 0);
    
    boundaryField
    {
        movingWall
        {
            type            codedFixedValue;
            name          dummy;
            
            code
            #{
                   const scalar& time = this->db().time().value();
                   operator==(vector(2.0*sin(time),0,0));
            #};
    
            value           $internalField;
        }
    
        fixedWalls
        {
            type            noSlip;
        }
    
        frontAndBack
        {
            type            empty;
        }
    }
    


  • 多谢东岳,加上这一行果然就可以了。不知道有没有这方面的资料可以推荐一下,不是很明白name dummy这一行的用法,多谢!



  • @李东岳 还是想问一下这里为什么要用this指针?



  • 因为你需要知道当前时间步的值,要不然你怎么调用数据库呢?如果你不需要数据里面的信息,可以去掉,比如:operator==(vector(2,0,0));



  • @李东岳 多谢解释,就是说“time”这个变量是数据库db()里的,关于db()的话是不是就不是Openfoam的范畴了?而是C++的内容?还有就是,这里的name dummy的用法是什么呢?



  • 是OpenFOAM范畴,name dummy中的name是关键词,必须要给,值可以随便,也可以写name OMG :cheeky:



  • @李东岳 您好,我这个地方还有一个问题,在internalField 设置是uniform (0,0,0)的时候用这个代码没有问题,但我把一个已经算出的速度场file代替这个(0,0,0)的时候还用这个codedFixedValue就会出问题,错误提示好像是跟internalField相关,请问您知道这可能是什么原因吗?多谢



  • @xiaofenger 你把$internalField 直接写成uniform (0 0 0)不就好咯


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待