吾生有涯 学海无涯
析模有界 知识无界

工科人的情人节礼物,一颗跳动的心

内容纲要

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之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《工科人的情人节礼物,一颗跳动的心》
文章链接:https://www.topcfd.cn/21085/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册