如何在动网格(被动运动)过程中施加主动运动(指定的冲击,类似脉冲函数)
-
各位老师好,
我想要在运动系统中增加一个冲击位移,尝试了很多办法不能实现。
静止系统中的冲击可以用自定义边界条件来实现,我尝试了一个简单脉冲函数,可以很好的反映这个冲击。如下在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不仅涉及到刚体位置的变换还有对应网格的更新。请各位老师帮忙看下。