• 关于csv文件的可视化

    Fluent
    0 赞同
    1 帖子
    32 浏览

    我在算liutex,本来准备仍udm里 但是因为要矩阵运算不想写轮子,就导出数据到csv里在fluent外算的。本来准备仍tecplot 但缺少网格拓扑 导入之后只有一堆线。想问有没有其他可视化的思路

  • fluent的overset出问题

    Fluent
    0 赞同
    1 帖子
    66 浏览

    fluent 2D,重叠网格,圆柱入水,为什么这个样子呢,液面随着overset下降,很奇怪
    8c2e5309-bef2-4c3f-911f-160729d98921-55d86309dbfea66064014c30d1894e1.png

  • tecplot消除多核计算的分界线

    Fluent
    0 赞同
    1 帖子
    93 浏览

    d8ddb624-ae67-45a5-b91b-a37014bcda10-image.png
    最近用tecplot处理fluent云图,发现在应用edge时,出现了图示裂痕,怀疑是多核计算造成的。有大佬知道怎么解决吗?我目前了解到的是用单核打开,再输出tecplot文件。不过好像也有概率问题,并且算例较大且多,每次都这样很麻烦。有比较好的方法吗?

  • 0 赞同
    1 帖子
    90 浏览

    cbc4c76d6a01019f59da4b5821b9841.png b88edb1d22b9badd6c01ade2964c0f8.png

  • 0 赞同
    1 帖子
    64 浏览

    请问各位优秀的学术者,我现在已经用fluent算完了一个三维冷态的(即没进行点火燃烧)超音速燃烧仿真,现在想要去分析计算域里某一截面上燃料与空气的混合效率,但是这个 a 的值我没办法直接获取,因为这个截面上的燃料分布是不均匀的,如果用fluent里面自带的面加权平均来算的话,这个 a 的值就比实验值小很多,所以我想请教一下在fluent或者tecplot、cfd-post这样的后处理软件怎么去正确获取a的值呢?谢谢各位

    混合效率.png

  • 0 赞同
    1 帖子
    51 浏览

    3965ae40-ebda-4f61-8653-2c5c5e4bbc2e-0e3073cf46e92704523c1c59afe2762.png

  • DPM粒子运动到中间不再向后运动

    Fluent
    0 赞同
    1 帖子
    58 浏览

    使用DPM计算,粒子运动到中间某个位置就不再继续往后运动,中间并没有壁面。有大佬知道怎么回事吗?虚心求教!
    117d89b9-90b2-4563-a9d0-f492f4fcde20-5cf03298abc6cff2aaff57c23a7cd6ca.png

  • fluent做三维底吹可压缩气体

    Fluent
    0 赞同
    1 帖子
    77 浏览

    91dd3661-b2f2-42ff-8ee0-667296957aaa-image.png
    在计算过程中,每一次迭代之后连续性方程的残差呈现递增的趋势,请教一下这是为什么?

  • 用于实现吸收空气中CO的源项UDF

    Fluent
    0 赞同
    1 帖子
    75 浏览

    计算域某个区域可以吸收CO,吸收的CO的量与该区域的每个网格单元本身的浓度值成正比,请问各位老师这个UDF对吗,我设置了这个之后CO浓度无变化

    #include "udf.h"

    DEFINE_SOURCE(co_absorption, c, t, dS, eqn)
    {
    real S;
    real Ci;

    Ci = C_YI(c, t, 0); // 获取CO的浓度,假设CO是第一个组分(编号为0) // 计算吸收区域吸收CO的量 S = -0.0064 * Ci; // 更新源项数组 dS[eqn] = S; return S;

    }

  • 0 赞同
    1 帖子
    80 浏览

    请问大佬们知道怎么用starccm实现传送带(带凸起)的运动吗。
    目前能想到的就只有给凸起物一个个建模设置好运动路径,但应该有更简单的方法吧。提前感谢各位大佬。
    0ae2d1b3-d3ba-4382-8cac-a470e7232877-image.png

  • fluent模拟压力旋流喷雾

    Fluent
    0 赞同
    1 帖子
    123 浏览

    首先在稳态条件下模拟一个风流场,然后利用dpm模型模拟压力旋流喷雾过程,试跑的过程有的方向能喷, 有的方向喷不出来是为什么,新手求帮助ebb4c6e2-270a-497e-a003-fb08d398d4bd-image.png
    z两个方向可以喷,但是换到-y方向时候就喷不出来

  • 关于fluent overset 的一些后处理问题

    Fluent
    0 赞同
    1 帖子
    123 浏览

    论坛里面有没有高手遇到overset 的后处理问题:
    问题描述:fluent overset 方法计算翼型表面转拟,但是在显示翼型面上切应力时,数据分布呈现锯齿状分布。
    下图1是overset cell type.
    9de13be5-dde7-4e34-ba97-95264d78b5b8-image.png
    图2是翼型表面的切应力
    5b284d9b-e3bc-45a4-b92e-d749155a96c3-image.png

  • 0 赞同
    1 帖子
    173 浏览

    1710316733826.jpg

    使用滑移网格fluent报错:Note: zone-surface: cannot create surface from sliding interface zone.

  • 0 赞同
    1 帖子
    141 浏览

    a80fed28-45ef-4507-a08d-13abf19c7ccc-image.png 这个udf具体该怎么编写和使用?

  • 0 赞同
    1 帖子
    233 浏览

    想设置一个壁面接触角随时间增加减小,用公式描述
    QMF9EZM9NI7B{$AS17ASF{M.jpg
    但是模拟过程中不到0.01s就已经完全铺开了
    8d0dfcc4-1ada-4bec-8a31-d4000f59d818-0~FKZ}KBX0WEF3X7@2%@NTD.png
    接触角为定值的时候没有问题,请问接触角随时间增加减小的设置哪里出了问题,该如何设置

  • 0 赞同
    1 帖子
    234 浏览

    用Fluent大涡模拟计算充分发展的槽道湍流,流向和展向为周期性边界条件,上下为壁面,如何设置流体进出口呢?看了之前的一些帖子,需要进口设定一定压力梯度吗?如何定义压力梯度啊

  • 有关泡沫金属与石蜡传热传质问题

    Fluent
    0 赞同
    1 帖子
    180 浏览

    我模拟的是一个矩形泡沫铜浸润石蜡的传热传质过程,现在模型验证一直没弄好。首先是编写了一个简单的UDF,采用热平衡模型,导入fluent后提醒我定义比热的那一块有错误,求各位前辈帮我看一下;其次,我添加了Boussinesq项后,优化了一点点液相云图中熔融线一直平行的问题,但是与论文中的还是有差距,且我的熔融线上下厚度保持一致(实际上应该下面厚很多),UDF中还需要添加什么项来解决这个问题呢?以下三张图分别是我的UDF、我跑出来的液相云图以及论文的液相云图,求各位帮我解惑,不甚感激。2.png 3.pn替代文字g 4.png

  • 0 赞同
    1 帖子
    315 浏览

    我想建立一个水槽,水流从水槽一边冲过去,然后又从另一边冲过来,两边的入口和出口边界要随时间变化,有没有大神指导一下,怎么实现?谢谢!

  • 0 赞同
    1 帖子
    268 浏览

    我模拟的对象是反应堆内的稳态流动传热,由于堆芯内组件数量庞大,精细建模复杂,因此采用多孔介质模型对堆芯区域进行简化。

    为了验证这种等效的合理性和误差,我先对单个组件栅元进行多孔介质简化,并将多孔介质模拟结果与未简化的模型结果对比验证多孔介质模型的合理性。

    单个组件栅元的截面图如下:
    图片1.png

    其二维轴对称模型如下图:
    f510f5de-0d5e-4389-b577-ad2d3defe29c-image.png

    模拟结果
    (1)未采用多孔介质模型
    我用了二维轴对称模型来模拟,设置固体流体内热源,入口质量流量和出口压力边界条件,流体和固体分别加载体积热源P1和P2(W/m3),流体和固体的导热系数均为常数,得到的稳态温度场和压损分布如下:
    bca065f1-7cc4-4385-8113-d7e0acd6d23e-image.png
    流体出口温度700℃,固体由于带内热源温度高于流体,固体最高温度为799℃,固体平均温度为756℃,组件压损为2400Pa

    (2)采用多孔介质模型模拟
    由于固体带内热源,流固存在较大温差,采用非热平衡模型
    根据栅元几何结构指定:孔隙率γ=0.1 ,界面换热系数hfs=5000W/M2K(与未采用多孔介质模型算得的换热系数一致),界面面积密度Afs=6.71m-1

    通过流速-压力实验关系确定粘性损失项系数和惯性损失项系数,只考虑x方向的流动损失,y方向系数放大100倍

    别给多孔介质流体和多孔介质固体设置了内热源,分别为P1×孔隙率和P2×(1-孔隙率),初始化后检查内热源加载总量无误;流体固体的热导率输入值和上个模型一致

    得到的模拟结果:
    af1efa10-a95f-4e49-a69c-63b4b4357ca0-image.png
    采用多孔介质非热平衡模型模拟得到的流体温度是正确的,压损也是正确的,但固体温度分布明显不对,固体域温度热点仅为725℃,平均温度为711℃,均远小于实际模型算得的固体温度值。

    我自己的猜测:
    多孔介质模型将单组件变为流固均匀介质后,不能模拟固体区域沿导热路径带来的固体温升?刚好我这个栅元模型中固体由于导热产生的温升非常高,如果是这样,说明多孔介质非热平衡模型不适用于我所研究的问题,因为简化后会显著低估固体温度热点。

    请问我的理解是正确的么

  • 0 赞同
    1 帖子
    235 浏览

    请问我想使用dpm模型模拟液滴的凝固,应该选什么类型得到颗粒呢?我看几种类型的粒子没有考虑凝固过程,求教!!!

  • 0 赞同
    1 帖子
    254 浏览

    我这边需要仿真一个构件在烘箱中逐渐被加热的过程,结构非常简单,就是一个构件周围用壁面包裹,其截面如下图所示。
    IGBT fixture-温度2.jpg
    四周壁面设定为固定温度358K,初始温度为293K。由于工作中计算资源有限,且目前只需要定性得到构件各部位升温的快慢情况,因此仿真时只打开了能量方程,上图就是仿真至380秒左右时的状态。

    然后在仿真中,初始的时间步长是0.001s,因为太小了导致仿真进度比较慢,而且能量方程的残差一直保持在10e-7级别,我这边通过不断地放大时间步长,至380s时时间步长为0.1s,至400s左右时时间步长改为1s。在这个过程中,我发现每次增大时间步长,监测点的温升曲线斜率都会变小,也就是说温升变慢了,比如下图就是时间步长由0.1s改为1s时,监测点温升情况的变化:
    IGBT fixture-温升.jpg

    在我更改时间步长的过程中,方程的残差均保持在10e-7级别,那么我想知道,温升速率为什么会因为时间步长的增加而变小呢?是不是因为网格不够精细造成的,因为为了快速出结果,网格确实比较粗糙,还是说还有其他可能的因素?谢谢大家了

  • 0 赞同
    1 帖子
    218 浏览

    各位大佬,我要使用fluent进行山地管道泄露扩散研究 。现在不知道怎么能将山地地形DEM高程数据,导入到icem中,请教各位有没有走过这个流程的,(在arcGis中应该转化成什么格式)这应该是怎么个搞法。

  • 关于动网格的问题

    Fluent
    0 赞同
    1 帖子
    317 浏览

    请问动网格udf中的DEFINE_CG_MOTION如何让刚体绕需要的轴旋转?

  • fluent监测化学反应的热损失

    Fluent
    0 赞同
    1 帖子
    195 浏览

    各位老师好:
    请问如何在fluent中监测化学反应过程(甲烷燃烧)中的热损失或随时间变化的热损失率?
    a48a4b6c-85b3-4cf7-9480-3521960916ab-image.png

  • fluent和cfx计算结果不同

    Fluent
    0 赞同
    1 帖子
    278 浏览

    各位同仁好,最近在算一个节流装置的阻力系数,标准值是1350,但是fluent不管怎么加密网格改湍流模型,算出来都在1500左右,cfx随便画个网格用sst算出来就是1350,请问有没有人了解这是什么原因?请各位大佬不吝赐教。
    附上几何文件,流体是水,入口流速1.5m/s
    SYS-6.scdoc

  • 0 赞同
    1 帖子
    216 浏览

    各位前辈好!最近在关于喷油器动网格问题上陷入了困境,希望能够得到大家的帮助。
    先简单说一下喷油器的工作原理。图一为三维模型的剖面截图。
    5eff8661692327fa42f84dfe24b6f95.png
    5deae10e01c9e42e75ad3500a12d353.png
    cd0e8a4b2e3be20ae6dee2b9c90b6dc.png
    上面那个是球阀,下面那个是针阀,球阀、针阀最初均只受到液体力、弹簧力共同作用静止不动,然后给球阀施加一个电磁力,球阀开始运动,进而改变了流场的压力,从而使得下面的针阀也随之运动。研究的内容主要是通过向fluent中导入模拟两个阀门运动的udf文件,如下。球阀udf```
    #include "udf.h"
    #include "dynamesh_tools.h"

    static real v_prev = 0.0;//initial velocity
    static real loc_prev = 0.0;//spring deformation

    DEFINE_CG_MOTION(ballball_six_three_one_parallel3, dt, vel, omega, time, dtime)
    {
    real ELECTROMAGNETIC_FORCE_MAGNITUDE = 155.0;
    real SPRING_FORCE_MAGNITUDE = 100.0;
    real SPRING_STIFFNESS = 20000.0;
    real MASS = 0.00184;
    real DISPLACEMENT_LIMIT = 0.0001;
    real f1 = 0.0;
    real f2, f_s, dv;
    real NV_VEC(A);

    #if !RP_HOST
    Thread *t;
    face_t f;
    NV_S(vel, =, 0.0);
    NV_S(omega, =, 0.0);
    if (!Data_Valid_P())return;

    t = DT_THREAD(dt); begin_f_loop(f, t) { if (PRINCIPAL_FACE_P(f, t)) { F_AREA(A, f, t); f1 = f1 + F_P(f, t) * A[1]; } } end_f_loop(f, t)

    #endif

    #if RP_NODE
    f1 = PRF_GRSUM1(f1);
    #endif

    node_to_host_real_1(f1);

    #if !RP_NODE
    if (time <= 0.0001)
    {
    if (loc_prev < DISPLACEMENT_LIMIT)
    {
    f_s = SPRING_FORCE_MAGNITUDE + SPRING_STIFFNESS * loc_prev;//spring force
    f2 = f1 + ELECTROMAGNETIC_FORCE_MAGNITUDE - f_s;
    dv = dtime * f2 / MASS;
    v_prev = v_prev + dv;
    loc_prev = loc_prev + v_prev * dtime;
    }
    else
    {
    v_prev = 0.0;
    }
    }
    if (time > 0.0001)
    {
    if (loc_prev > 0)
    {
    f_s = SPRING_FORCE_MAGNITUDE + SPRING_STIFFNESS * loc_prev;//spring force
    f2 = - f_s;
    dv = dtime * f2 / MASS;
    v_prev = v_prev + dv;
    loc_prev = loc_prev + v_prev * dtime;
    }
    else
    {
    v_prev = 0;
    }
    }
    Message("\n\ntime=%f,y_vel=%f,f1=%f,f2=%f,f_s=%f,loc_prev=%f,dv=%f\n", time, v_prev, f1, f2, f_s, loc_prev, dv);
    #endif
    host_to_node_real_1(v_prev);
    vel[1] = v_prev;
    }

    针阀udf:

    #include "udf.h"
    #include "dynamesh_tools.h"

    static real v_prev = 0.0;//initial velocity
    static real loc_prev = 0.0;//spring deformation

    DEFINE_CG_MOTION(needle_six_three_one_parallel2, dt, vel, omega, time, dtime)
    {
    real SPRING_FORCE_MAGNITUDE = 30.0;
    real SPRING_STIFFNESS = 20000.0;
    real DISPLACEMENT_LIMIT = 0.00018;
    real MASS = 0.01;
    real f1 = 0.0;
    real f2, f_s, dv;
    real NV_VEC(A);

    #if !RP_HOST
    Thread *t;
    face_t f;
    NV_S(vel, =, 0.0);
    NV_S(omega, =, 0.0);
    if (!Data_Valid_P())return;

    t = DT_THREAD(dt); begin_f_loop(f, t) { if (PRINCIPAL_FACE_P(f, t)) { F_AREA(A, f, t); f1 = f1 + F_P(f, t) * A[1]; } } end_f_loop(f, t)

    #endif
    #if RP_NODE
    f1 = PRF_GRSUM1(f1);
    #endif

    node_to_host_real_1(f1);

    #if !RP_NODE
    f_s = SPRING_FORCE_MAGNITUDE + SPRING_STIFFNESS * loc_prev;
    f2 = f1 - f_s;
    dv = dtime * f2 / MASS;
    if (f2 <= 0.0)
    {
    if (loc_prev <= 0.0)
    {
    v_prev = 0.0;
    }
    else
    {
    v_prev = v_prev + dv;
    loc_prev = loc_prev + v_prev * dtime;
    }
    }
    else
    {
    if (loc_prev < DISPLACEMENT_LIMIT)
    {
    v_prev = v_prev + dv;
    loc_prev = loc_prev + v_prev * dtime;
    }
    else
    {
    v_prev = 0.0;
    }
    }
    Message("\n\nn_time=%f,n_y_vel=%f,n_f1=%f,n_f2=%f,n_f_s=%f,n_loc_prev=%f,n_dv=%f\n",time,v_prev,f1,f2,f_s,loc_prev,dv);
    #endif
    host_to_node_real_1(v_prev);
    vel[1] = v_prev;
    }

    但是导入计算后计算到一半fluent总是卡在一半,没有报错, 也没有退出,就是卡在一个界面无法继续算下去,就是上图 的一直卡在0.000077s,就算不下去了,等了快半周了还是在 那个位置,不知道是代码的原因还是什么原因。 希望能够得到前辈们的解答。万分感谢!!!! ![5deae10e01c9e42e75ad3500a12d353.png](/assets/uploads/files/1703672401397-5deae10e01c9e42e75ad3500a12d353.png) ![cd0e8a4b2e3be20ae6dee2b9c90b6dc.png](/assets/uploads/files/1703672414778-cd0e8a4b2e3be20ae6dee2b9c90b6dc.png)
  • 0 赞同
    1 帖子
    240 浏览

    我在DPM中设置了两种不同的injection,但是在云图-DPM concentration中只能看混合相的浓度。有其他地方可以单独看的吗??dpm.png

  • 0 赞同
    1 帖子
    179 浏览

    最近有一个项目在meshing里最小正交质量已经提到0.15以上了,放到求解器中提示在0.01以下,有没有前辈有过这种问题?

  • 0 赞同
    1 帖子
    201 浏览

    亲爱的各位前辈们,小白问的问题可能不成熟,请见谅,,
    是想分析一下天然气管道流动特性、振动与压缩机轴/叶频的关系
    但压缩机没有设计参数,做不了数值模拟,只能采集一些管道脉动或者管道振动数据。
    想问,某一工况下,能不能根据采集到的脉动数据搞成UDF,作为数值模拟管道入口脉动从而代替压缩机呢?想问一下这能不能实现,,,

  • fluent初始化显示

    Fluent
    0 赞同
    1 帖子
    255 浏览

    fluent初始化显示mass diffusivity:invalid diffusivity please check material。用的组分输运涡耗散模型

  • fluent湍流粘度超限,多相流发散

    Fluent
    0 赞同
    1 帖子
    307 浏览

    IMG_20231127_193223.jpg
    在计算单相流作为初场,可以收敛,但是湍流粘度比超限,继续设置为多相流空化计算的时候,开始发散,不知道有哪些解决办法,已经重新画过网格。
    边界条件是速度入口,压力出口,湍流sst k-w,稳态计算

  • 0 赞同
    1 帖子
    239 浏览

    气液两相流,多相流采用双欧拉模型,且与PBM模型进行耦合,模拟结束后,如何提取破碎频率或聚并效率云图?是roport definitions中采用expression编辑破碎频率公式么,编辑的话如何确定公式中气泡直径的输入?还是用UDF的方式?求大神告知。。。

  • 0 赞同
    1 帖子
    243 浏览

    510c9b90-10d2-4e21-b5db-0881bbb269e0-image.png
    雷诺正应力是通过上图所示方法计算得到,u'u'的时均。但是雷诺剪应力u'v'的时均该怎么计算呢?向各位大佬求助。

  • 0 赞同
    1 帖子
    242 浏览

    想要计算的物理问题是跨临界流体(二氧化碳,或者是氟利昂制冷剂)在大范围压降条件下的相变过程,说人话就是比如入口是超临界的CO2,经过Laval nozzle膨胀到亚临界;
    对于这种情况必须考虑真实流体热力学方程了,目前我用的实现方法是通过调用NIST REFPROP生成的real gas property lookup table的办法来计算气液相流体的热物性,这个方法在计算亚临界范围内,大压降的工况也可以计算,收敛情况相对满意,但是一旦计算跨临界状态就发散了,在外国的CFD论坛上找过,类似的答复是NIST流体数据库使用的方程在临界点附近似乎存在不收敛的问题,如图所示:

    1c5761fa-95be-44a0-a527-4e2f418b4098-9bacb2a3045cb6950be3e5620394144.png
    现在很苦恼,一直卡在这个问题上面,请教一下各位大神,在fluent里面计算跨临界流体热物性还有什么别的实现方法吗

  • fluent xy plot

    Fluent
    0 赞同
    1 帖子
    211 浏览

    请问在fluent里怎么增加x,yplot的数据点,现在是每隔1微米一个点,怎么每0.1微米一个点?或者在别的后处理软件能实现吗?现在的网格也是1微米的。
    0b602e26-be9f-406e-bbae-aa49086f601a-image.png

  • 液滴凝固体积膨胀

    Fluent
    0 赞同
    1 帖子
    198 浏览

    通过VOF和solidification模型仿真液滴结冰,有没有大佬实现过体积膨胀?

  • Fluent延长出口计算时出现了如下问题

    Fluent
    0 赞同
    1 帖子
    292 浏览

    求助各位老师,在扩展出口计算域计算时,发现了如下问题,具体细节如下图,不同方案中红色截面处的总压大小不同,是什么原因造成的。(尤其是方案2和方案3总压的不同是因为什么原因)
    问.png

  • 老师们求帮助

    Fluent
    0 赞同
    1 帖子
    286 浏览

    有没有大佬做过电解碱水制氢的算例模拟啊,帮助文档里的电解水制氢复现了,点解碱水大佬们有没有做成功的case文件

  • 0 赞同
    1 帖子
    214 浏览

    请问一下各位大佬,欧拉-欧拉气固两相流模拟,设置流体域旋转后,wall可以设置成不旋转吗,对结果有没有影响,因为wall设置成旋转之后,就无法设置镜面反射系数了

  • 0 赞同
    1 帖子
    358 浏览

    各位CFD大佬,小弟最近在用fluent做模拟时遇到一个问题,物理背景就是管内的热水以射流的方式喷出然后被周围的环境冷水稀释,在做小模型模拟(x=40m y=2m z=13.3cm)的时候,模拟结果尚可,对称性很完美,但在做大模型的时候(x=4000m y=2000m z=10m),模拟结果很不好。
    用的稳态模拟,大模型网格数量大概七百多万,用的reliazable k-e湍流模型,进口的湍流参数设置用CFD计算器估算过了,另外在模拟的时候fluent一直有湍流粘度比超限的提示,但小模型就不会有,不知道最后的不对称结果和这个是不是有关系。
    1564dc71-8ed2-4905-ba1b-67fbca1936e3-图片.png
    热水从圆的四周均匀喷射出来,然后被流动的冷水稀释,冷水流动方向从左至右,可以看到图中并没有达到一个对称效果,等值线都没有对称。
    21f863e0-2b3c-4e9f-994a-ae3797889acf-图片.png
    热水进口在上图的最底部,垂直向上喷射,中间比较黑的那一块有一块顶盖,作用是让热水向周围扩散开来而不是垂直向上冲,图中看到网格有些瑕疵的地方是tecplot的显示问题,可以忽略。
    a652dbd8-6ce0-4c30-9c4a-97e6fee8e965-892fea64760b5fcdfe9299ba371783e.png
    从这张图可以看出热水向上喷射,被顶盖挡住,最后向四周扩散上浮的过程。

    总结一下几点疑问:
    1.模拟时fluent的湍流粘度比超限警告是否和最后模拟结果的不对称有关系?
    2.小模型模拟结果对称,而大模型就不行,和网格的大小有关系吗?小模型的最大网格大概也就在厘米级别,而大模型的最大网格一般在米级别(最大有五米左右)。
    其实最核心的诉求还是想解决对称性的问题,最好不要用对称边界条件,能用整个模型就用整个模型。

  • 0 赞同
    1 帖子
    294 浏览

    采用overset重叠网格和UDF函数模拟串列三圆柱的涡激振动,其中UDF分别尝试了Newmark-Beta方法和4阶Runge Kutta法获取圆柱的振动响应,通过DEFINE_CG_MOTION宏赋予三个圆柱及component cells的运动速度,算例的雷诺数约200,采用k-omega sst模型,考虑水作为来流介质,计算过程中尝试了时间步长从1.0e-3缩小到1.0e-5等多个量级,但是求解过程总是出现升力和升力矩突然骤增,继而导致圆柱运动速度过大,最终计算发散。

    请各位大佬帮忙看看是哪里出问题?

    具体的UDF和部分设置如下:

    #include "udf.h" #include "sg_mem.h" #include "dynamesh_tools.h" #define PI 3.141592654 #define zoneID_1 4 #define zoneID_2 16 #define zoneID_3 20 FILE *outNB,*outRK; static real y = 0.0; static real yRK = 0.0; static real dy = 0.0; static real vy = 0.0; static real vyRK = 0.0; static real vyRK2 = 0.0; static real ay = 0.0; static real current_time = 5; static real y2 = 0.0; static real y2RK = 0.0; static real dy2 = 0.0; static real vy2 = 0.0; static real vy2RK = 0.0; static real vy2RK2 = 0.0; static real ay2 = 0.0; static real current_time2 = 5; static real y3 = 0.0; static real y3RK = 0.0; static real dy3 = 0.0; static real vy3 = 0.0; static real vy3RK = 0.0; static real vy3RK2 = 0.0; static real ay3 = 0.0; static real current_time3 = 5; DEFINE_CG_MOTION(cylinder_1,dt,vel,omega,time,dtime) { real ctime = RP_Get_Real("flow-time"); real ctimestep = RP_Get_Integer("time-step"); real niter = N_ITER; if (current_time < ctimestep) { current_time = ctimestep; /*Define variables*/ /*Mesh variables*/ real cg[3],vcg[3]; /*Cylinder variables*/ real diameter = 0.063; real fn = 1.0892; real density = 998.2; real length = 1; real water_depth = 1; real mass_ratio = 0.3937; real damping_ratio = 0.01; real mass = mass_ratio*density*pow((0.5*diameter),2)*PI*length; real ad_mass = mass*(0); /*density*pow((0.5*diameter),2)*PI*water_depth;*/ real total_mass = mass + ad_mass; real k = 4*pow((PI*fn),2)*total_mass; real c = 2 * damping_ratio * sqrt(k*total_mass); /*Force calculation. Force = F_pressure + F_viscous*/ real fy = 0.0; real fvy = 0.0; int i; #if !RP_HOST Thread *tc,*thread; Domain *d = Get_Domain(1); face_t f; tc = Lookup_Thread(d,zoneID_1); thread = DT_THREAD(dt); NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); real NV_VEC(A); begin_f_loop(f,tc) { if (PRINCIPAL_FACE_P(f,tc)) { fvy = F_STORAGE_R_N3V(f,tc,SV_WALL_SHEAR)[1]*-1; /*“*-1”表示方向*/ F_AREA(A,f,tc); /*Force calculation with a depth of 1m*/ fy += F_P(f,tc)*A[1] + fvy; } } end_f_loop(f,tc) #endif #if RP_NODE fy = PRF_GRSUM1(fy); #endif /*Dynamic mesh position*/ #if!RP_HOST for (i=0;i<3;i++) { cg[i]=DT_CG(dt)[i]; vcg[i] = DT_VEL_CG(dt)[i]; } Message("Position CG: %f \n",cg[1]); #endif node_to_host_real_2(fy,cg[1]); /*Numerical methods*/ /*Numark-beta*/ real beta = 0.25; real gamma = 0.5; real term0 = (1/(beta*dtime*dtime))*(mass+ad_mass) + (gamma/(beta*dtime))*c; real term1 = (1/(beta*dtime))*(mass+ad_mass) + ((gamma/beta)-1)*c; real term2 = ((1/(2*beta))-1)*(mass+ad_mass) + dtime*((gamma/(2*beta))-1)*c; real Keff = k + term0; real Reff = fy*water_depth + term0*cg[1] + term1*vy + term2*ay; Message("Velocity: %f \n",vy); dy = Reff/Keff - cg[1]; y += dy; real vprev = vy; vy = (gamma/(beta*dtime))*dy + (1-(gamma/beta))*vy + dtime*(1-(gamma/(2*beta)))*ay; ay = (1/(beta*dtime*dtime))*dy - (1/(beta*dtime))*vprev - ((1/(2*beta))-1)*ay; /*Runge-kutta 4th order*/ real K1 = (fy*water_depth - c*vyRK - k*yRK) / total_mass; real K2 = (fy*water_depth - c*(vyRK+dtime*0.5*K1) - k*(yRK+dtime*0.5*vyRK)) / total_mass; real K3 = (fy*water_depth - c*(vyRK+dtime*0.5*K2) - k*(yRK+dtime*0.5*vyRK+dtime*dtime*K1/4)) / total_mass; real K4 = (fy*water_depth - c*(vyRK+dtime*K3) - k*(yRK+dtime*vyRK+dtime*dtime*K1/2)) / total_mass; yRK = yRK + vyRK*dtime + dtime*dtime*(K1 + K2 + K3 + K4)/6; vyRK = vyRK + dtime*(K1 + K2 + K3 + K4)/6; /*Transfer result to the dynamic mesh*/ vel[0] = 0.0; vel[1] = vyRK; /*Save files*/ #if !RP_NODE /*Message ("Force = %f, pos = %f, vel = %f, acc = %f\n", fy, cg[1], y, vy);*/ if(NULL == (outNB = fopen("dataNB1.txt","a"))) { Error("Could not open file for append!\n"); } fprintf(outNB,"%16.4e %12.1f %16.3e %16.7f %16.7f %16.7f \n", ctime,niter, fy , cg[1], y, vy); fclose(outNB); if(NULL == (outRK = fopen("dataRK1.txt","a"))) { Error("Could not open file for append!\n"); } fprintf(outRK,"%16.4e %12.1f %16.3e %16.7f %16.7f %16.7f \n", ctime,niter, fy , cg[1], yRK, vyRK); fclose(outRK); #endif } /*Transfer result to the dynamic mesh*/ vel[0] = 0.0; vel[1] = vyRK; } DEFINE_CG_MOTION(cylinder_1_frontgrid_1,dt,vel,omega,time,dtime) { NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); vel[0]=0.0; vel[1]=vyRK; } DEFINE_CG_MOTION(cylinder_1_overset_2,dt,vel,omega,time,dtime) { NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); vel[0]=0.0; vel[1]=vyRK; } DEFINE_ZONE_MOTION(cylinder_1_zone,omega,axis,origin,velocity,time,dtime) { N3V_D(velocity, =, 0, 0, 0); N3V_S(origin, =, -0.32); N3V_D(axis, =, 0.0, 0.0, 1.0); velocity[1]=vyRK; } DEFINE_CG_MOTION(cylinder_2,dt,vel,omega,time,dtime) { real ctime = RP_Get_Real("flow-time"); real ctimestep = RP_Get_Integer("time-step"); real niter = N_ITER; if (current_time2 < ctimestep) { current_time2 = ctimestep; /*Define variables*/ /*Mesh variables*/ real cg[3],vcg[3]; /*Cylinder variables*/ real diameter = 0.063; real fn = 1.0892; real density = 998.2; real length = 1; real water_depth = 1; real mass_ratio = 0.3937; real damping_ratio = 0.01; real mass = mass_ratio*density*pow((0.5*diameter),2)*PI*length; real ad_mass = mass*(0); /*density*pow((0.5*diameter),2)*PI*water_depth;*/ real total_mass = mass + ad_mass; real k = 4*pow((PI*fn),2)*total_mass; real c = 2 * damping_ratio * sqrt(k*total_mass); /*Force calculation. Force = F_pressure + F_viscous*/ real fy = 0.0; real fvy = 0.0; int i; #if !RP_HOST Thread *tc,*thread; Domain *d = Get_Domain(1); face_t f; tc = Lookup_Thread(d,zoneID_2); thread = DT_THREAD(dt); NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); real NV_VEC(A); begin_f_loop(f,tc) { if (PRINCIPAL_FACE_P(f,tc)) { fvy = F_STORAGE_R_N3V(f,tc,SV_WALL_SHEAR)[1]*-1; /*“*-1”表示方向*/ F_AREA(A,f,tc); /*Force calculation with a depth of 1m*/ fy += F_P(f,tc)*A[1] + fvy; } } end_f_loop(f,tc) #endif #if RP_NODE fy = PRF_GRSUM1(fy); #endif /*Dynamic mesh position*/ #if!RP_HOST for (i=0;i<3;i++) { cg[i]=DT_CG(dt)[i]; vcg[i] = DT_VEL_CG(dt)[i]; } Message("Position CG: %f \n",cg[1]); #endif node_to_host_real_2(fy,cg[1]); /*Numerical methods*/ /*Numark-beta*/ real beta = 0.25; real gamma = 0.5; real term0 = (1/(beta*dtime*dtime))*(mass+ad_mass) + (gamma/(beta*dtime))*c; real term1 = (1/(beta*dtime))*(mass+ad_mass) + ((gamma/beta)-1)*c; real term2 = ((1/(2*beta))-1)*(mass+ad_mass) + dtime*((gamma/(2*beta))-1)*c; real Keff = k + term0; real Reff = fy*water_depth + term0*cg[1] + term1*vy2 + term2*ay2; Message("Velocity: %f \n",vy2); dy2 = Reff/Keff - cg[1]; y2 += dy2; real vprev = vy2; vy2 = (gamma/(beta*dtime))*dy2 + (1-(gamma/beta))*vy2 + dtime*(1-(gamma/(2*beta)))*ay2; ay2 = (1/(beta*dtime*dtime))*dy2 - (1/(beta*dtime))*vprev - ((1/(2*beta))-1)*ay2; /*Runge-kutta 4th order*/ real K1 = (fy*water_depth - c*vy2RK - k*yRK) / total_mass; real K2 = (fy*water_depth - c*(vy2RK+dtime*0.5*K1) - k*(y2RK+dtime*0.5*vy2RK)) / total_mass; real K3 = (fy*water_depth - c*(vy2RK+dtime*0.5*K2) - k*(y2RK+dtime*0.5*vy2RK+dtime*dtime*K1/4)) / total_mass; real K4 = (fy*water_depth - c*(vy2RK+dtime*K3) - k*(y2RK+dtime*vy2RK+dtime*dtime*K1/2)) / total_mass; y2RK = y2RK + vy2RK*dtime + dtime*dtime*(K1 + K2 + K3 + K4)/6; vy2RK = vy2RK + dtime*(K1 + K2 + K3 + K4)/6; /*Transfer result to the dynamic mesh*/ vel[0] = 0.0; vel[1] = vy2RK; /*Save files*/ #if !RP_NODE /*Message ("Force = %f, pos = %f, vel = %f, acc = %f\n", fy, cg[1], y, vy);*/ if(NULL == (outNB = fopen("dataNB2.txt","a"))) { Error("Could not open file for append!\n"); } fprintf(outNB,"%16.4e %12.1f %16.3e %16.7f %16.7f %16.7f \n", ctime,niter, fy , cg[1], y2, vy2); fclose(outNB); if(NULL == (outRK = fopen("dataRK2.txt","a"))) { Error("Could not open file for append!\n"); } fprintf(outRK,"%16.4e %12.1f %16.3e %16.7f %16.7f %16.7f \n", ctime,niter, fy , cg[1], y2RK, vy2RK); fclose(outRK); #endif } /*Transfer result to the dynamic mesh*/ vel[0] = 0.0; vel[1] = vy2RK; } DEFINE_CG_MOTION(cylinder_2_frontgrid_1,dt,vel,omega,time,dtime) { NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); vel[0]=0.0; vel[1]=vy2RK; } DEFINE_CG_MOTION(cylinder_2_overset_2,dt,vel,omega,time,dtime) { NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); vel[0]=0.0; vel[1]=vy2RK; } DEFINE_ZONE_MOTION(cylinder_2_zone,omega,axis,origin,velocity,time,dtime) { N3V_D(velocity, =, 0, 0, 0); N3V_S(origin, =, 0.0); N3V_D(axis, =, 0.0, 0.0, 1.0); velocity[1]=vy2RK; } DEFINE_CG_MOTION(cylinder_3,dt,vel,omega,time,dtime) { real ctime = RP_Get_Real("flow-time"); real ctimestep = RP_Get_Integer("time-step"); real niter = N_ITER; if (current_time3 < ctimestep) { current_time3 = ctimestep; /*Define variables*/ /*Mesh variables*/ real cg[3],vcg[3]; /*Cylinder variables*/ real diameter = 0.063; real fn = 1.0892; real density = 998.2; real length = 1; real water_depth = 1; real mass_ratio = 0.3937; real damping_ratio = 0.01; real mass = mass_ratio*density*pow((0.5*diameter),2)*PI*length; real ad_mass = mass*(0); /*density*pow((0.5*diameter),2)*PI*water_depth;*/ real total_mass = mass + ad_mass; real k = 4*pow((PI*fn),2)*total_mass; real c = 2 * damping_ratio * sqrt(k*total_mass); /*Force calculation. Force = F_pressure + F_viscous*/ real fy = 0.0; real fvy = 0.0; int i; #if !RP_HOST Thread *tc,*thread; Domain *d = Get_Domain(1); face_t f; tc = Lookup_Thread(d,zoneID_3); thread = DT_THREAD(dt); NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); real NV_VEC(A); begin_f_loop(f,tc) { if (PRINCIPAL_FACE_P(f,tc)) { fvy = F_STORAGE_R_N3V(f,tc,SV_WALL_SHEAR)[1]*-1; /*“*-1”表示方向*/ F_AREA(A,f,tc); /*Force calculation with a depth of 1m*/ fy += F_P(f,tc)*A[1] + fvy; } } end_f_loop(f,tc) #endif #if RP_NODE fy = PRF_GRSUM1(fy); #endif /*Dynamic mesh position*/ #if!RP_HOST for (i=0;i<3;i++) { cg[i]=DT_CG(dt)[i]; vcg[i] = DT_VEL_CG(dt)[i]; } Message("Position CG: %f \n",cg[1]); #endif node_to_host_real_2(fy,cg[1]); /*Numerical methods*/ /*Numark-beta*/ real beta = 0.25; real gamma = 0.5; real term0 = (1/(beta*dtime*dtime))*(mass+ad_mass) + (gamma/(beta*dtime))*c; real term1 = (1/(beta*dtime))*(mass+ad_mass) + ((gamma/beta)-1)*c; real term2 = ((1/(2*beta))-1)*(mass+ad_mass) + dtime*((gamma/(2*beta))-1)*c; real Keff = k + term0; real Reff = fy*water_depth + term0*cg[1] + term1*vy3 + term2*ay3; Message("Velocity: %f \n",vy3); dy3 = Reff/Keff - cg[1]; y3 += dy3; real vprev = vy3; vy3 = (gamma/(beta*dtime))*dy3 + (1-(gamma/beta))*vy3 + dtime*(1-(gamma/(2*beta)))*ay3; ay3 = (1/(beta*dtime*dtime))*dy3 - (1/(beta*dtime))*vprev - ((1/(2*beta))-1)*ay3; /*Runge-kutta 4th order*/ real K1 = (fy*water_depth - c*vy3RK - k*y3RK) / total_mass; real K2 = (fy*water_depth - c*(vy3RK+dtime*0.5*K1) - k*(y3RK+dtime*0.5*vy3RK)) / total_mass; real K3 = (fy*water_depth - c*(vy3RK+dtime*0.5*K2) - k*(y3RK+dtime*0.5*vy3RK+dtime*dtime*K1/4)) / total_mass; real K4 = (fy*water_depth - c*(vy3RK+dtime*K3) - k*(y3RK+dtime*vy3RK+dtime*dtime*K1/2)) / total_mass; y3RK = y3RK + vy3RK*dtime + dtime*dtime*(K1 + K2 + K3 + K4)/6; vy3RK = vy3RK + dtime*(K1 + K2 + K3 + K4)/6; /*Transfer result to the dynamic mesh*/ vel[0] = 0.0; vel[1] = vy3RK; /*Save files*/ #if !RP_NODE /*Message ("Force = %f, pos = %f, vel = %f, acc = %f\n", fy, cg[1], y, vy);*/ if(NULL == (outNB = fopen("dataNB3.txt","a"))) { Error("Could not open file for append!\n"); } fprintf(outNB,"%16.4e %12.1f %16.3e %16.7f %16.7f %16.7f \n", ctime,niter, fy , cg[1], y3, vy3); fclose(outNB); if(NULL == (outRK = fopen("dataRK3.txt","a"))) { Error("Could not open file for append!\n"); } fprintf(outRK,"%16.4e %12.1f %16.3e %16.7f %16.7f %16.7f \n", ctime,niter, fy , cg[1], y3RK, vy3RK); fclose(outRK); #endif } /*Transfer result to the dynamic mesh*/ vel[0] = 0.0; vel[1] = vy3RK; } DEFINE_CG_MOTION(cylinder_3_frontgrid_1,dt,vel,omega,time,dtime) { NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); vel[0]=0.0; vel[1]=vy3RK; } DEFINE_CG_MOTION(cylinder_3_overset_2,dt,vel,omega,time,dtime) { NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); vel[0]=0.0; vel[1]=vy3RK; } DEFINE_ZONE_MOTION(cylinder_3_zone,omega,axis,origin,velocity,time,dtime) { N3V_D(velocity, =, 0, 0, 0); N3V_S(origin, =, 0.32); N3V_D(axis, =, 0.0, 0.0, 1.0); velocity[1]=vy3RK; }

    运动速度.png
    运动速度

    运动位移.png
    运动位移

    压力系数.png
    压力系数

    动网格设置.png
    动网格设置

  • 流向周期性能量不守恒

    Fluent
    0 赞同
    1 帖子
    225 浏览

    各位大佬好,模型是一个0.125x0.5x0.6m的光滑通道,上下壁面均为无滑移的300K恒温壁面,进口温度320K,进出口及左右壁面均采用周期性边界条件,模拟步骤是先用RANS模拟,之后使用TUI指令添加扰动然后切换到LES模拟。按理说流体温度应该小于等于320K而且随时间逐渐减小,但是云图画出来最高温度有323K,又模拟了0.5s后最高温度没什么变化其他地方的温度似乎也没什么变化。周期性设置如图(压力梯度最开始为0)搜狗截图20230903172308.png
    我想知道是为啥 :136:

  • 0 赞同
    1 帖子
    223 浏览

    我采用的稳态MRF模型进行模拟,如果桨距角改变,同一来流速度下给旋转域设置的旋转速度需要改变吗

  • 0 赞同
    1 帖子
    277 浏览

    81a56a41-f2c6-4e5c-8504-2cb7df0a1f28-image.png ,我看帮助文档中DPM对droplet的描述是换热、蒸发和沸腾,这都是液滴材料从液相传质到气相,请问能不能实现从气相到液相的传质(就是吸收)?

  • 0 赞同
    1 帖子
    257 浏览

    81a56a41-f2c6-4e5c-8504-2cb7df0a1f28-image.png ,我看帮助文档中DPM对droplet的描述是换热、蒸发和沸腾,这都是液滴材料从液相传质到气相,请问能不能实现从气相到液相的传质(就是吸收)?

  • 0 赞同
    1 帖子
    232 浏览

    小白初学fluent,对凝固过程有了解,也做过连铸凝固模型案例,但是组分输送模型和多相流VOF要怎么开启还不清楚,有没有大神教一下怎么设置

  • dpm模型模拟闪蒸

    Fluent
    0 赞同
    1 帖子
    255 浏览

    请问一下各位大佬,在使用dpm模拟液滴闪蒸时,液滴沸点设置为373k,液滴温度设置为400k,连续相温度为300k,连续相介质为空气,采用双向耦合进行计算,当液滴颗粒射入连续相中时,连续相喷嘴处的温度就迅速上升,可达上千度,甚至报温度超限的错误,请问一下这是为什么呀![QQ图片20230818084454.jpg

  • 0 赞同
    1 帖子
    231 浏览

    个人觉得这个功能特别实用,特别是对于边界很多的案例,能直观看到边界在哪个位置。但是2020以后的版本都没有找到此功能,想问一下是阉割掉了还是被别的功能替代了?谢谢!微信图片_20230818185948.png

  • 使用UDS的时候怎么确定单位啊?

    Fluent
    0 赞同
    1 帖子
    256 浏览

    使用UDS计算电势和流体所受到的电场力,但是在边界定义标量数值的时候默认单位是1吗?怎么弄成电势单位?

  • 关于PBM模型的聚合核UDF问题

    Fluent
    0 赞同
    1 帖子
    284 浏览

    欧拉欧拉模型的群体平衡方程,如果有多相参与计算那么聚合核的UDF需要额外改吗?比如气固的聚合核UDF在气固固能直接用吗? 因为我使用的FLUENT的DQMOM模型,里面必须有三相参与计算,需要编聚合核的UDF。