首页/文章/ 详情

FLUENT单向流固耦合分析案例后记

5月前浏览1260
之前我们做了一个单向流固耦合案例,我们知道单向耦合的核心特征为:流场对固体场施加单向载荷作用,固体变形不反向影响流场计算。判断流固耦合用单向还是双向,核心判据是:结构变形/运动是否显著改变流场,工程上可通过无量纲数、变形量级、刚度 / 质量比、动态特性四类指标量化判断,如下表。
参数    
定义 / 物理意义    
单向耦合阈值    
双向耦合阈值    
柯西数 Ca    
流体动压 / 结构刚度Ca=ρfU2/E    
Ca < 0.05(结构响应极弱)    
Ca > 0.1(结构响应强)    
质量比 Mr    
结构质量 / 流体质量Mr=ρsf    
Mr>100(结构重、流体惯性可忽略)    
Mr<10(结构轻、流体惯性主导)    
变形比 δ/L    
结构最大位移 / 特征长度    
δ/L<1%(变形极小)    
δ/L>5%(变形显著)    
斯托克斯数 Stk    
颗粒 / 结构惯性 / 流体粘性    
Stk < 0.1(流体主导)    
Stk > 1(惯性主导)    
当然,很多工程实际问题通过直观经验也可以判断,比如单向耦合的结构刚度极大、变形极小(如刚性管道、厚壁压力容器、赛车尾翼),变形对流场几何 / 边界条件无影响。双向耦合的结构刚度小、柔性大、变形大(如柔性机翼、血管瓣膜、旗帜、波纹管),变形显著改变流道形状与边界运动。
对于之前的案例,若通过柯西数来判断,我们暂且用弹性模量E来表征结构刚度,本案例E=1.5e6Pa,流体密度ρf=1.225(空气),流速30m/s,故Ca=0.000735。从Ca数看,这个案例可考虑单向耦合。但是在笔者看来,当选用的无量纲数计算过程有参考值(如特征长度)时,可能会有一千个读者一千个哈姆雷特的嫌疑,不过一些工程经验或者权威还是可以大胆参考的。我们似乎还可以用另一个角度看,因为结构变形是否会对流体流动产生显著影响是关键判断,那么当流体专业关心的某个参数发生了他不希望看到的结果时,是否也可以要求进行双向耦合呢?比如之前的案例,管道发生了如下的变形后,管道的阻力特性发生了多大的变化从而造成管路流量、压力的变化,这个变化能否接受等等。
今天,我们就针对这个问题进行模拟讨论。核心思路就是用变形后的管道模型再进行一次CFD计算,看一下在相同的流量下,管道入口的压力有什么变化,由于变形是使弯管拉直的效果,因此我们初步怀疑管道阻力减小,入口压力会降低。
本次模拟的核心就是管道变形后的再建模。
新版的workbench都可以直接从变形结果导出变形后的模型(如下图),但是导出的是网格数据(stl格式),需要进行模型处理。这里需要特别说明一下,由于stl保存的是网格数据,如果网格数量巨大,那么后续的模型处理难度就不小了。
经过较多应用软件的尝试,笔者认为采用FreeCAD将stl模型转换为stp模型是一个相对不错的方式。FreeCAD 是一款开源免费的参数化 3D 建模软件,大家可以上他们的官网进行下载,。
首先通过文件打开stl文件。
导入stl文件后,可以在mesh模块检查修复一下模型,本案例模型完好,无需修复。
然后通过零件的“从网格中创建形状”将网格转为曲面壳体,可以通过容差来设置精度,值越小精度越高,但是计算机配置不够的话可能死机。
成功后得到shape模型,可以把原先的stl模型删除。
接着通过零件的“转化成实体”将曲面模型转为实体模型,最后就可以导出stp模型了。
我们用上面生成的stp模型在ansys的discovery里面进行前处理,主要就是几何修复、体积抽取和边界命名。Tips:在Discovery里,双击面等于一键选整片连续面。由于实体模型保留了stl的面体信息,因此抽取出来的流体边界(壁面)也会有这些小面体,可以做一些处理。比如本案例将端面的小面体合并,便于抽取体积时的端面选择;同时创建了辅助实体,为的是更好形成封闭区域(对于本案例,这一步没有做的话很难抽取完整的体积)
最终抽取体积如下,我们把固体删除只留下流体区域,可以看到壁面的小面体非常多。
各边界的命名在下图位置操作。
由于存在很多三角形面体,我们在workbench的mesh模块进行网格划分,测试发现若在fluent meshing进行多面体网格划分,则无法导入模型(问题尚未解决)。
网格划分结果如下
最后,在FLUENT开展计算,边界条件采取之前案例的值。我们重点看一下入口的压力为379.7Pa,不考虑变形的情况下入口压力412Pa(详见上一个案例),也就是说如果管道发生计算的变形量,则对流体的影响为入口压力降低约8.4%,符合我们之前的预期。但实际上,入口压力降低后,管道的变形可能会减小,最终造成入口压力的降低量小于8.4%,最后达到一个平衡值,这个值就需要用双向耦合来分析了,我们在以后的案例详细讨论。

来源:仿真与工程
MeshingFluent MeshingFluentWorkbenchECAD曲面ANSYS管道
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-03-24
最近编辑:5月前
余花生
签名征集中
获赞 259粉丝 606文章 391课程 0
点赞
收藏
作者推荐

Fluent案例:利用VOF+凝固熔化+UDF实现激光焊熔池模拟

案例描述利用VOF+凝固熔化+UDF对激光焊熔池过程的模拟,该过程中包括金属材料的相变、激光热源加热、热源移动等物理变化过程。通过UDF完整地模拟了激光焊接过程中的热源加热、熔池流动、反冲压力效应、表面张力变化和浮力效应等关键物理现象。构建模型如下图所示,模型的正面为对称面,其他均为壁面,焊接的起始点为(-3.5,0,0),激光热源的移动速度为0.01m/s(文末附案例文件获取方式)。步骤1.导入网格模型导入模型网格文件,如下图所示:2.通用设置采用压力基求解器,瞬态求解,重力方向为z的负方向。3.模型选择开启能量方程,粘性模型选择层流,开启凝固和熔化模型并保持默认设置。4.UDF加载添加udf.c源文件,点击编译并加载。UDF完整地模拟了激光焊接过程中的热源加热、熔池流动、反冲压力效应、表面张力变化和浮力效应等关键物理现象。注意:UDF定义焊接速度的过程中,速度的定义并非热源点的移动速度,而是计算域的移动速度。#include&quot;udf.h&quot;#include&quot;sg_mphase.h&quot;//多相流相关的头文件#include&quot;math.h&quot;//数学函数库#include&quot;sg.h&quot;//源项和梯度相关头文件#include&quot;flow.h&quot;//流动相关头文件#include&quot;mem.h&quot;//内存管理头文件#include&quot;metric.h&quot;//几何度量相关头文件//定义常数宏#definev0.01/*焊接速度*///焊接速度0.01m/s#defineL0.006/*工件厚度*///工件厚度0.006m#defineT_SAT2700/*汽相线*///汽化温度2700K#defineP3000//激光功率3000W#definen0.9/*热效率*///热效率90%#definePI3.141592653//圆周率π#defineR00.0006/*热源加热斑点半径*///热源半径0.0006m#defineRe4.5E6/*recoil—_pressure系数*///反冲压力系数#defineRee0.5/*recoil—_pressure系数*///反冲压力系数(x,y方向)#defineReez1/*recoil—_pressure系数*///反冲压力系数(z方向)#definexx00.0035//热源初始位置偏移量//激光热源函数DEFINE_SOURCE(laser_source,c,t,dS,eqn)//定义热源项,FluentUDF标准格式{realxc[ND_ND],x,y,z,time,Q,r,H,source;//声明变量:坐标、时间、功率、半径、深度、源项Thread*sec_th;//声明第二相线程指针sec_th=THREAD_SUB_THREAD(t,1);//获取第二相线程(多相流中的气相)time=RP_Get_Real(&quot;flow-time&quot;);//获取当前流动时间C_CENTROID(xc,c,t);//获取当前网格单元的中心坐标x=xc[0]+xx0-v*time;//计算移动热源的x坐标(考虑焊接速度,速度的定义并非热源点的移动速度,而是计算域的移动速度)y=xc[1];//y坐标z=xc[2];//z坐标H=0.003;/*热源深度*///定义热源作用深度r=sqrt(x*x+y*y);//计算点到热源中心的水平距离Q=n*P;//计算有效功率Q=效率×功率if(r&lt;=R0&amp;&amp;z&lt;=0&amp;&amp;z&gt;=-H)//判断条件:在热源半径内且在深度范围内{//高斯旋转体热源模型source=9*Q/(PI*R0*R0*H*0.95)*exp(-6/(log(H/(-z))*R0*R0)*r*r);dS[eqn]=0;//源项对变量的导数为0(常数源项)}else{source=0;//在热源范围外,源项为0dS[eqn]=0;//导数为0}returnsource;//返回热源项值}//VOF梯度存储函数DEFINE_ADJUST(store_VOF_gradient,domain)//定义调整函数,在每个时间步执行{Thread*t;//线程指针Thread*ppt;//主相线程指针Thread**pt;//线程指针数组cell_tc;//网格单元标识符intphase_domain_index=1;//相域索引Domain*pDomain=DOMAIN_SUB_DOMAIN(domain,phase_domain_index);//获取子域//分配存储空间用于VOF梯度计算Alloc_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL);//重构VOF标量场Scalar_Reconstruction(pDomain,SV_VOF,-1,SV_VOF_RG,NULL);//计算VOF梯度Scalar_Derivatives(pDomain,SV_VOF,-1,SV_VOF_G,SV_VOF_RG,Vof_Deriv_Accumulate);//循环遍历所有线程mp_thread_loop_c(t,domain,pt){if(FLUID_THREAD_P(t))//如果是流体线程{ppt=pt[phase_domain_index];//获取主相线程begin_c_loop(c,t)//开始单元循环{//将VOF梯度分量存储到UDM中C_UDMI(c,t,0)=C_VOF_G(c,ppt)[0];//x方向梯度C_UDMI(c,t,1)=C_VOF_G(c,ppt)[1];//y方向梯度C_UDMI(c,t,2)=C_VOF_G(c,ppt)[2];//z方向梯度}end_c_loop(c,t)//结束单元循环}}//释放存储空间Free_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL);}//X方向反冲压力源项DEFINE_SOURCE(x_recoil_source,c,t,dS,eqn){realxc[ND_ND],x,y,z,r,time,T,xfen,recoil,x_source;//声明变量Thread*sec_th;sec_th=THREAD_SUB_THREAD(t,1);//获取第二相线程T=C_T(c,t);//获取当前单元温度time=RP_Get_Real(&quot;flow-time&quot;);//获取当前时间C_CENTROID(xc,c,t);//获取单元中心坐标x=xc[0]+xx0-v*time;//计算移动坐标y=xc[1];z=xc[2];r=sqrt(x*x+y*y);//计算到热源中心距离//计算x方向界面法向分量(归一化)xfen=C_UDMI(c,t,0)/sqrt(C_UDMI(c,t,0)*C_UDMI(c,t,0)+C_UDMI(c,t,1)*C_UDMI(c,t,1)+C_UDMI(c,t,2)*C_UDMI(c,t,2)+0.00000001);if(r&lt;=0.001)//在反冲压力作用半径内{//条件:温度达到汽化点且在气液界面区域if(T&gt;=T_SAT&amp;&amp;C_VOF(c,sec_th)&gt;=0.1&amp;&amp;C_VOF(c,sec_th)&lt;=0.9)//反冲压力必须施加在第二相上,0表示第一相-空气相{//反冲压力计算(基于温度的经验公式)recoil=3.35*Re*exp(12.37*(T-T_SAT)/T);x_source=recoil*xfen;//x方向反冲压力分量C_UDMI(c,t,3)=x_source;//存储到UDM3}elsex_source=0;//不满足条件时源项为0}else{x_source=0;//在作用半径外源项为0}returnx_source*Ree;//返回x方向反冲压力源项}//Y方向反冲压力源项DEFINE_SOURCE(y_recoil_source,c,t,dS,eqn){realxc[ND_ND],x,y,z,r,time,T,yfen,recoil,y_source;Thread*sec_th;sec_th=THREAD_SUB_THREAD(t,1);T=C_T(c,t);time=RP_Get_Real(&quot;flow-time&quot;);C_CENTROID(xc,c,t);x=xc[0]+xx0-v*time;y=xc[1];z=xc[2];r=sqrt(x*x+y*y);//计算y方向界面法向分量yfen=C_UDMI(c,t,1)/sqrt(C_UDMI(c,t,0)*C_UDMI(c,t,0)+C_UDMI(c,t,1)*C_UDMI(c,t,1)+C_UDMI(c,t,2)*C_UDMI(c,t,2)+0.00000001);if(r&lt;=0.001){if(T&gt;=T_SAT&amp;&amp;C_VOF(c,sec_th)&gt;=0.1&amp;&amp;C_VOF(c,sec_th)&lt;=0.9){recoil=3.35*Re*exp(12.37*(T-T_SAT)/T);y_source=recoil*yfen;//y方向反冲压力分量C_UDMI(c,t,4)=y_source;//存储到UDM4}elsey_source=0;}else{y_source=0;}returny_source*Ree;//返回y方向反冲压力源项}//Z方向反冲压力源项DEFINE_SOURCE(z_recoil_source,c,t,dS,eqn){realxc[ND_ND],x,y,z,r,time,T,zfen,recoil,z_source;Thread*sec_th;sec_th=THREAD_SUB_THREAD(t,1);T=C_T(c,t);time=RP_Get_Real(&quot;flow-time&quot;);C_CENTROID(xc,c,t);x=xc[0]+xx0-v*time;y=xc[1];z=xc[2];r=sqrt(x*x+y*y);//计算z方向界面法向分量zfen=C_UDMI(c,t,2)/sqrt(C_UDMI(c,t,0)*C_UDMI(c,t,0)+C_UDMI(c,t,1)*C_UDMI(c,t,1)+C_UDMI(c,t,2)*C_UDMI(c,t,2)+0.00000001);if(r&lt;=0.001){if(T&gt;=T_SAT&amp;&amp;C_VOF(c,sec_th)&gt;=0.1&amp;&amp;C_VOF(c,sec_th)&lt;=0.9){recoil=3.35*Re*exp(12.37*(T-T_SAT)/T);z_source=recoil*zfen;//z方向反冲压力分量C_UDMI(c,t,5)=z_source;//存储到UDM5}elsez_source=0;}else{z_source=0;}returnz_source*Reez;//返回z方向反冲压力源项(不同系数)}//表面张力属性定义DEFINE_PROPERTY(surf_tension,c,t){realsurf;intcurr,i,j;realtemp1=C_T(c,t);//获取当前单元温度if(temp1&gt;=930)//温度≥930Ksurf=1.0-0.0003*(temp1-930);//线性减小elseif(temp1&gt;=2730)//温度≥2730Ksurf=0.41;//保持最小值elsesurf=1.0;//低温时保持最大值returnsurf;//返回表面张力系数}//浮力源项DEFINE_SOURCE(fuli,cell,thread,dS,eqn){realsource;realp,g,B,T,Tl;T=C_T(cell,thread);//获取温度p=2700;//密度g=-9.81;//重力加速度B=0.0001;//热膨胀系数Tl=930;//液相线温度if(T&gt;Tl)//温度高于液相线source=-p*g*B*(T-Tl);//计算浮力源项elsesource=0;//固态时无浮力dS[eqn]=0;//导数为0returnsource;//返回浮力源项}5.材料参数设置添加并定义金属材料,在流体材料中修改空气材料的参数并另存为金属材料,再对相关参数进行修改。其中密度、比热、导热率、粘度参数为分段线性函数。其中密度、比热、导热率、粘度参数定义如下:①密度根据温度定义4个点:300K,2700kg/m3;820K,2700kg/m3;930K,2400kg/m3;5000K,2400kg/m3;②比热根据温度定义4个点:300K,871J/(kgK);820K,871J/(kgK);930K,1060J/(kgK);5000K,1060J/(kgK);③导热率根据温度定义4个点:300K,238W/(mK);820K,238W/(mK);930K,100W/(mK);5000K,100W/(mK);④粘度根据温度定义2个点:930K,0.0016kg/(ms);5000K,0.0016kg/(ms)。添加金属材料后,定义VOF模型,表面张力系数选择UDF中定义的surf_tension。6.单元区域条件设置在单元区域设置中勾选源项,并分别添加源项的数量,包括XYZ三个方向上的反冲压力源项、Z方向上的浮力源项和一个能量源项。7.边界条件设置定义底部壁面的传热边界条件:定义四周壁面的传热边界条件:8.初始化新建一个区域标记,用于后续的局部初始化。初始化选择标准初始化,温度为300K,第二相的体积为0。局部初始化将标记出的区域第二相的体积分数设置为1。9.运行计算时间步数和时间步长定义如下:温度分布云图空气相体积分布云图来源:仿真与工程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈