内容纲要
2月14,祝天下有情人终成眷属。
弄颗心玩一玩儿。效果如下图所示。
心形线的参数方程:
式中,参数用于控制尺寸,。
可以使用python画个图看看。
import numpy as np
import matplotlib.pyplot as plt
a = 1
t = np.linspace(-np.pi, np.pi, 100)
X = a*(2*np.cos(t)-np.cos(2*t))
Y = a*(2*np.sin(t)-np.sin(2*t))
plt.plot(X, Y, color='r')
plt.show()
然而心形是躺着的。
可以翻转坐标轴,这样就竖起来了。
ICEM CFD中生成点,这里只用了20个点,如果不嫌麻烦,可以用更多的点。
将点连成线,这样就得到了如下图所示的图形。
利用分块方式生成全四边形网格。
让心跳起来需要使用DEFINE_GRID_MOTION
宏。代码比较简单,如下所示。
#include "udf.h"
DEFINE_GRID_MOTION(heart, domain, dt, time, dtime)
{
Thread *tf = DT_THREAD(dt);
face_t f;
int n;
Node *v;
double theta;
real velocity = 2 * sin(12.56 * time); //控制运动速度
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf));
begin_f_loop(f, tf)
{
f_node_loop(f, tf, n)
{
v = F_NODE(f, tf, n);
if (NODE_POS_NEED_UPDATE(v))
{
NODE_POS_UPDATED(v);
theta = atan2(NODE_X(v), NODE_Y(v)); //注意x和y在前面是反转了的,这里照样反过来
NODE_X(v) += velocity * dtime * (2 * sin(theta) - sin(2 * theta)); //反转
NODE_Y(v) += velocity * dtime * (2 * cos(theta) - cos(2 * theta)); //反转
}
}
}
end_f_loop(f, tf);
}
然后就动起来了。
有兴趣的道友可以在心里面放点儿流体,然后看看随着心的跳动里面的流体压力变化。
网格和程序代码在这里:
链接:https://pan.baidu.com/s/1G1XgtE60zrFTXyGvzrU7rg
提取码:hzxt”
(本文结束)
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册