movingConeTopoFvMesh使用的一些疑惑



  • 各位大佬,以下是使用movingConeTopoFvMesh提示我需要输入的参数,

    dynamicFvMesh   movingConeTopoFvMesh;
    
    motionVelAmplitude		(1 0 0);
    motionVelPeriod			1;
    leftEdge				0;
    leftObstacleEdge		0;
    rightObstacleEdge		1;
    right     				1;
    

    但运行时跳出报这样错误,求教怎么解决

    Attempt to return primitive entry ITstream : /home/fang/OpenFOAM/fhc/study/cavity/constant/dynamicMeshDict.right, line 25, IOstream: Version 2.0, format ASCII, line 0, OPENED, GOOD
        primitiveEntry 'right' comprises 
            on line 25 the label 1
     as a sub-dictionary
    
    

  • OpenFOAM讲师

    @xiaolin 你用的是哪个版本?我用OpenFOAM 7,这个动网格设置大约是这个风格

    dynamicFvMeshLibs ("libmovingConeTopoFvMesh.so");
    
    dynamicFvMesh      movingConeTopoFvMesh;
    
    movingConeTopoXXXFvMeshCoeffs
    {
        motionVelAmplitude      (0 0.00006 0);
        motionVelPeriod         1;
    
        //leftEdge                0;
        leftObstacleEdge        0.2;
        rightObstacleEdge       1.5;
    
        left
        {
            minThickness        2.5e-3;
            maxThickness        7.6e-3;
        }
    
        right
        {
            minThickness        1.2e-3;
            maxThickness        2.8e-3;
        }
    }
    


  • 您好,史老师,我在设置的时候碰到这个问题,是不是需要在初始文件中定义边界运动情况还是网格拉伸区域范围

    Face extrusion zone contains no faces. Please check your mesh definition.
    
    

    我使用的是6,所以删除了一点,不知道会不会产生影响呢

    dynamicFvMesh      movingConeTopoFvMesh;
    
    
        motionVelAmplitude      (0 0.3 0);
        motionVelPeriod         1;
    
        leftEdge                -0.1;
        leftObstacleEdge        0;
        rightObstacleEdge       2;
    
        left
        {
            minThickness        0.005;
            maxThickness        0.05;
        }
    
        right
        {
            minThickness        0.005;
            maxThickness        0.05;
        }
    
    

  • OpenFOAM讲师

    @xiaolin 我刚刚看了一下,我用的是OpenFOAM 6,前面写错了抱歉。
    下面是movingConeTopoFvMesh中对应的构造函数(初始化函数)

     Foam::movingConeTopoFvMesh::movingConeTopoFvMesh(const IOobject& io)
     :
         topoChangerFvMesh(io),
         motionDict_
         (
             IOdictionary
             (
                 IOobject
                 (
                     "dynamicMeshDict",
                     time().constant(),
                     *this,
                     IOobject::MUST_READ_IF_MODIFIED,
                     IOobject::NO_WRITE,
                     false
                 )
             ).optionalSubDict(typeName + "Coeffs")  //在movingConeTopoFvMeshCoeffs中寻找对应参数
         ),
         motionVelAmplitude_(motionDict_.lookup("motionVelAmplitude")),
         motionVelPeriod_(readScalar(motionDict_.lookup("motionVelPeriod"))),
         curMotionVel_
         (
             motionVelAmplitude_*sin(time().value()*pi/motionVelPeriod_)
         ),
         leftEdge_(readScalar(motionDict_.lookup("leftEdge"))),
         curLeft_(readScalar(motionDict_.lookup("leftObstacleEdge"))),
         curRight_(readScalar(motionDict_.lookup("rightObstacleEdge")))
    {
        ...
    }
    

    从构造函数可以看出来,所有的动网格参数要从一个movingConeTopoFvMeshCoeffs的字典中查找获得,所以,在设置动网格参数的时候,这个字典是不能少的,其对应结构如下:

    movingConeTopoFvMeshCoeffs
    {
        ...
    }
    

    你好像缺少了这个结构



  • @史浩
    好的,已经照您说的加了,不过我的6里面并不包含libmovingConeTopoFvMesh.so这个动态链接库,

    dynamicFvMeshLibs ("libmovingConeTopoFvMesh.so");
    

    所以这个我没加进去,不知道会不会有影响,现在碰到了这个问题

    Selecting dynamicFvMesh movingConeTopoFvMesh
    Initial time:0 Initial curMotionVel_:(0 0 0)
    Time = 0
    Adding zones and modifiers to the mesh
    zone: 0()
    zone: 0()
    Adding mesh zones.
    
    
    --> FOAM FATAL ERROR: 
    Face extrusion zone contains no faces. Please check your mesh definition.
    

    尝试使用求解器计算时出现如上错误,zone无边界面,我想达成的效果如下,底部滑块可以左右移动
    2020-08-22 20-36-25 的屏幕截图(1).jpg
    有如下几点疑惑:在DyDict里只给定了运动周期和振幅,leftEdge,leftObstacleEdge,rightObstacleEdge,因为没有实例,所以想问程序怎么识别我想运动哪一块边界,即出现上述Zone no faces的原因
    2.能不能应用于模型内部滑块上下左右的可变运动,既然运动通过motionVelAmplitude和motionVelPeriod给定,那leftEdge,leftObstacleEdge,rightObstacleEdge达到一种什么目的?看不太明白


  • OpenFOAM讲师

    @xiaolin leftEdge没有意义,leftObstacleEdge(rightObstacleEdge)是指运动的左(右)侧边界的位置
    这个类其实是一个不太好用的类,你自己要改一下。这个建议你先去看一下源码,了解里面的操作流程,然后修改一下就可以自己用了,亲测可以


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2