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. 如何在动网格(被动运动)过程中施加主动运动(指定的冲击,类似脉冲函数)

如何在动网格(被动运动)过程中施加主动运动(指定的冲击,类似脉冲函数)

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

    各位老师好,

    我想要在运动系统中增加一个冲击位移,尝试了很多办法不能实现。
    静止系统中的冲击可以用自定义边界条件来实现,我尝试了一个简单脉冲函数,可以很好的反映这个冲击。

    如下在pointDisplacement文件中自定义待冲击的边界即可

    {
            type            codedFixedValue;
            value           uniform (0 0 0); // 初始位移
            name            pulseDisplacement; // 自定义边界条件的名称
            code
            #{
            const scalar t = this->db().time().value();
            const scalar t0 = 5; // 位移脉冲的发生时刻
            const vector pulseAmplitude = vector(0, 0.001, 0); // 脉冲幅度
    
            if (t >= t0 && t < t0 + this->db().time().deltaT().value())
            {
                operator==(pulseAmplitude);
            }
            else
            {
                operator==(vector::zero);
            }
            #};
        }
    

    但是6DOF运动中,pointDisplacement会被占用,他必须定义为sixdofsover里的边界(例如caculate)。这样上面静止系统的方案就不可行了。
    我又尝试在pimpleFoam主程序中将位移写为附加项,想在6dof更新状态时加上去

    if (currentTime >= pulseTime && currentTime < pulseTime + runTime.deltaT().value())
            {
                // 获取当前位移状态
                vector currentDisplacement = motion.centreOfRotation(); // 获取当前的中心位置
    
                // 将脉冲位移量叠加到当前位移
                vector newDisplacement = currentDisplacement + pulseDisplacement;
    
                // 使用 transform() 更新刚体的位置
                tensor identity(1, 0, 0, 0, 1, 0, 0, 0, 1);  // 单位张量,不涉及旋转
                // 调用合适的方法来更新位移
                motion.update(false, newDisplacement, vector(0, 0, 0), runTime.deltaT().value(), runTime.deltaT().value()); // 调用更新方法
    
    			
                
    			Info << "Pulse applied at time " << currentTime << " with displacement: " << pulseDisplacement << endl;
            }
    
    

    这个方案也不可行,我估计是6dof不仅涉及到刚体位置的变换还有对应网格的更新。请各位老师帮忙看下。

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

    如果原本不支持叠加的话,这种可能只有基于sixDoFRigidBodyMotion自定义一个动网格求解器了。

    I 1 条回复 最后回复
  • I 离线
    I 离线
    ice_flow
    在 中回复了 lwjetmann 最后由 编辑
    #3

    @lwjetmann 多谢,我自己增加了一个solver,确实是可行的。

    1 条回复 最后回复

  • 登录

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