@仲阳 迟复为歉,我的方法是修改壁面普朗特数为0.005,参考张腾飞论文的论文:ZHANG T T, ZHOU H, WANG S. An adjustment to the standard temperature wall function for CFD modeling of indoor convective heat transfer[J]. Building and environment, 2013, 68: 159–169. 如果有问题可以进一步与我联系,乐意回答,我已经给你发送邮件。
深蓝
帖子
-
-
@bestucan 好的,我再去看一看帮助文件,谢谢老师啦
-
在使用PBM模型模拟冰浆储存过程中冰颗粒的粒径变化时,冰颗粒的初始粒径分布如下图所示,其中粒径分组是以100为单位递增。请问有大佬知道在fluent中怎么以相同的方式输入粒径分组吗,求求了
-
@mengqiang 我想到的能够用ISIGHT做集成,用ISIGHT调用fluent计算,然后用fluent自动后处理(都用TUI命令),再用ISIGHT调用python进行神经网络训练模型. 这样就不用学openfoam了,fluent也挺好用. 而且ISIGHT还能调用matlab...
但是感觉不用这么折腾啊,为啥非要集成到一块. 用处理好的数据训练PINN也行啊. 我在用PINN做反演(污染物的溯源)
-
问题: fluent结果怎么处理为二维数组
详述: fluent导出的结果为(坐标,坐标,值)的格式,(值)是一个一维数组,但是在神经网络训练的时候需要(值)为二维数组,请问怎么才能转换?示意图如下:
难点:
1、数据量很大,大概有几万个点
2、fluent导出的数据很不规矩,(比如x=1的时候应该有y=a,y=b,y=c,x=2的时候应该有y=a,y=b,y=c),但是fluent导出的数,x=1的时候有y=a,y=b,y=c,x=2的时候可能只有y=c(不好解释啊 )。二维数组非常稀疏,如下图其实我就想要个二维数组来表示二维的物理量场,请大哥大姐们帮帮忙啊
-
@ejector 变量的名词不重要,注意变量的类型就行
-
@bestucan 谢谢您的回复
我已经找到解决办法了,在fluent中通过连续用C_UDSI(c,t,0)_G的办法不可行,又找到另外一种办法,如下:
是通过计算每个cell与周围cell的“浓度差”进行计算的。但是因为fluent只能获取到一个面左右两个网格(c0,c1)的信息,所以这种方法二阶导数最高只有二阶截断误差。想要有四阶阶段误差需要有9个节点的信息(二维),fluent的udf只能获得5个节点的信息。 -
@李东岳 是的,确实是这样的
-
这一看就是玉国论文中的图,你也研究室内污染物的传播?我们是同道中人啊
-
@bestucan 谢谢您得持续回复。
我进行了三次尝试,200*200=40000个网格,密度=1.0时,整个计算域都添加源项,1.0s后,总量为40000,如果是300*300=90000个网格,其他不变时,总量为90000,如果密度变成2.0,总量就是45000。可见跟密度有有关系的,在UDS对流项的宏(DEFINE_UDS_FLUX)里面需要获取网格的密度,UDF手册的表述如下:
我把uds对流项中的密度都设置成1.0常数,没有效果。
我尝试把uds扩散项设置成常数也没有效果,分析应该是DEFINE_SOURCE宏返回值是一个扩散系数,密度项已经包含在默认的计算中了。
对流项代码如下:DEFINE_UDS_FLUX(QR_flux,f,t,i) { cell_t c0, c1 = -1; Thread *t0, *t1 = NULL; real NV_VEC(psi_vec), NV_VEC(A), flux = 0.0; c0 = F_C0(f,t); t0 = F_C0_THREAD(f,t); F_AREA(A, f, t); /* If face lies at domain boundary, use face values. */ /* BOUNDARY_FACE_THREAD_P(t) expands to a function that returns TRUE if Thread *t is a boundary face thread. */ if(BOUNDARY_FACE_THREAD_P(t)) { real dens; /* Depending on its BC, density may not be set on face thread. */ /* Test whether the memory for SV_DENSITY has already been allocated on a given Thread or not. */ if(NNULLP(THREAD_STORAGE(t,SV_DENSITY))) dens = F_R(f,t); else dens = C_R(c0,t0); NV_DS(psi_vec, =, F_U(f,t), F_V(f,t), F_W(f,t), *, dens); flux = 1 * NV_DOT(psi_vec, A); } /* If face lies IN the domain, use average of adjacent cells. */ else { c1 = F_C1(f,t); t1 = F_C1_THREAD(f,t); NV_DS(psi_vec, =, C_U(c0,t0),C_V(c0,t0),C_W(c0,t0),*,C_R(c0,t0)); NV_DS(psi_vec, +=, C_U(c1,t1),C_V(c1,t1),C_W(c1,t1),*,C_R(c1,t1)); flux = 1 * NV_DOT(psi_vec, A)/2.0; } return flux; }
###另外还有个小问题想请教您一下:
问题:UDS的方程中,瞬态项和对流项的处理都有现成可用的宏,我的方程中需要添加一个四阶导数项,看来只能放在源项中,源项处理四阶导数项的话,需要自己编写四阶导数吗,源项的线性化怎么处理……,您对处理这个四阶导数项有什么建议再次谢谢您得回复!!
尝试的代码如下:DEFINE_SOURCE(QR_source_2d, c, t, dS, eqn) { real source; real epsilon; /*stability coefficient*/ real rho; C_UDSI(c,t,1) = C_UDSI_G(c,t,0)[0]; /*DcDx, returns the x-component of the UDS gradient vector*/ C_UDSI(c,t,2) = C_UDSI_G(c,t,1)[0]; /*DcDxx, returns the x-component of the UDS gradient vector*/ C_UDSI(c,t,3) = C_UDSI_G(c,t,2)[0]; /*DcDxxx, returns the x-component of the UDS gradient vector*/ C_UDSI(c,t,4) = C_UDSI_G(c,t,3)[0]; /*DcDxxxx, returns the x-component of the UDS gradient vector*/ C_UDSI(c,t,5) = C_UDSI_G(c,t,0)[1]; /*DcDy, returns the y-component of the UDS gradient vector*/ C_UDSI(c,t,6) = C_UDSI_G(c,t,5)[1]; /*DcDy, returns the y-component of the UDS gradient vector*/ C_UDSI(c,t,7) = C_UDSI_G(c,t,6)[1]; /*DcDyyy, returns the y-component of the UDS gradient vector*/ C_UDSI(c,t,8) = C_UDSI_G(c,t,7)[1]; /*DcDyyyy, returns the y-component of the UDS gradient vector*/ epsilon = 5*pow(10,-6); rho = C_R(c,t); source = rho * epsilon * (C_UDSI(c,t,4) + C_UDSI(c,t,8)); /*dcdxxxx+dcdyyyy*/ dS[eqn] = 0; /*source linearization*/ return source; }
-
@bestucan 谢谢您得回复,通过您得建议,经过我几次尝试,结果如下:
方法一:
初始化所有区域的uds=0,u=2m/s,空气密度为1kg/m3
Patch方块的uds=1
方块的网格数量为29*29
uds的总和为 29*29*1=841
经过0.5s的发展如右图,uds的总和还是841
Note:
1、如果密度为2 kg/m3,则uds的总和为420
方法二:
初始化所有区域的uds=0,空气密度为1kg/m3
设置方块的source=1
方块的网格数量为29*29
进过0.5s的释放和发展如右图(线性增加),uds的总和为420
Note:
1、 如果密度为0.5 kg/m3,则uds的总和为840
2、 如果是稳态计算,uds是线性增加的
所以,source的单位应该是generation-rate*density/cell numbers这里面需要计算网格的数量,我想udf怎么得到网格的数量呢,找了半天没有合适的,C_NNODES可以用来计算cell的节点数量,F_NNODES可以计算网格面上节点的数量,C_NFACES可以计算网格中面的数量,是否能间接得到网格的数量,但是udf手册中没有这个实例,但是在计算的时候编译一直通过不了,呜呜呜 ,代码如下:
#include "udf.h" #include "mem.h" DEFINE_ON_DEMAND(name) { int sum=0; Thread *t; cell_t c; begin_c_loop(c, t) { { sum+=C_NNODES(c, t); } } end_c_loop(c, t) Message0("\n num=%f\n",num/4.0); }
-
@bestucan 谢谢您得回复,在fluent 的udf手册中写道,源项的单位是generation-rate/volume,单位体积的生成率在往外传递的时候不应该是一个通量吗?设置的“值”或是设置“通量”是否是对应的边界条件,而这个地方设置的是源项。
如果我的目的是放置一个1kg的污染物在这儿,看他随时间扩散后质量的变化情况,请问改怎么设置啊。
-
问题: UDS方程在封闭计算域内的计算出来的污染物总量不守恒。
详细描述:
我需要用FLUENT的UDS方程计算污染物的传播
UDS标量方法:
$$\frac { \partial \rho \phi } { \partial t } + \frac { \partial \rho U \phi} { \partial x } = \frac { \partial } { \partial x } (\Gamma _ { \Phi ,eff } \frac { \partial \phi } { \partial x } ) + S _ { 0 }$$
我在一个正方形内计算污染物的扩散,无进出口,长宽为10m* 10m,具体如图:
在计算域中间设置了UDS的源项,源的大小为0.2m*0.2m,释放时间为0.1s,代码很简单,如下:
第一种方法:DEFINE_SOURCE(aerosol_source,c,t,dS,eqn) { real x[ND_ND]; real con, source; C_CENTROID(x,c,t); if(x[0]>4.5&&x[0]<5.0&&x[1]>4.5&&x[1]<5.0) { source=1; } else { source=0; } dS[eqn] = 0; return source; }
第二种方法
或者Mark一个区域出来,把这个区域的source设为1,其他区域的source设为0。如图:
所说的守恒就是源的释放量(udf手册说DEFINE_SOURCE宏的source的单位是产生率/m3,如果是质量源就是kg/(s-m3))乘释放时间,再乘释放体积应该等于总量,但是上述两种source设置方法得到的结果在计算域中统计都不守恒。
这两种方法计算出来结果还不同,如下:
第一种方法:
第二种方法:
第一种方法为15.99,第二种方法为2.04。
疑问:
按理来说应该等于$0.2* 0.2*0.1=0.004$,这算出来跟释放源完全不守恒,请问大家这是什么原因呢? -
最近几天恶补了一把UDF,觉得挺万能的,自己的使用经验比较匮乏,请问在使用过程中有哪些明显的局限性呢?
-
@CambridgeARDC 哈哈,我换回了2019版本,等等2020的R2吧,可能会解决问题
-
good idea!
-
各位老哥,请教一个小问题。
今天我安装了ANSYS2020的版本,装完后碰到一个小问题——fluent和cfd-post的界面字体太大了(如图1和图2所示),根本没法使用。其他的软件(如ICEM,workbench,SCDM)字体大小显示都正常。
我尝试的办法:
1、改高分屏的分辨率兼容性(如图3),结果有一定的效果,但是界面的分辨率下降率不少,看着好难受,并且界面还是排布不开(如图4)。
2、另外找了一个安装包,下载安装后,面临同样的问题。
3、在网站查找了修改fluent字体大小的方法:“首先在安装路径里找到一个文件cxdisplay.qss;将文件用记事本打开后,查找font;最后将相关的字体改大保存即可。”尝试修改后,根本没效果。重启什么的也试了很多次了。
请各位老哥帮忙看了下这怎么办呀!多谢!
附图:
图1
图2
图3
图4 -
@Mikasa 我写的UDF与你的程序相似,同样出现了在FLUENT当中添加mass transfer就发散的问题,请问您是怎样解决的?
-
谢谢李老师的回复。
我想求的不是网格中心到网格边上的距离,是网格中心到最近的壁面边界的距离(比如说在一个房间内,房间内部的某个网格到最近墙壁的距离)。
谢谢李老师的提醒,我突然想到一个办法,就是对每个网格中心点的x,y,z坐标进行大小判断,找出最小的那个,感觉可以,我先试试。
-
大家好我有一个小问题想请教各位大神。
问题简单描述:
我想求计算域中每个网格的中心到最近壁面的距离。
问题详细描述:
我使用的是C_WALL_DIST宏,但是发现在初始化的时候会报错。在二维的算例中能编译通过并进行计算,但是在三维的算例中可以编译通过但初始化错误(试过几台电脑,也试过串行并行)。
错误提示为:f1 process could not be started fluent.我的问题
请问要求计算域中每个网格的中心到最近壁面的距离,有什么办法可以实现?这个C_WALL_DIST宏在帮助手册里没有说明,不知道可否满足我的需求。另外,我网上查找的时候,有人说(链接地址)可以先定义一个标量,把距离存在标量中,再拿到udf中计算用,他的代码完全看不懂啊(心累),请问这样可以吗?
谢谢大家
我的UDF代码如下:/*用于修改湍流模型中的湍流粘度*/ #include "udf.h" DEFINE_TURBULENT_VISCOSITY(chen_mu_t,cell,thread) { real chen_mu_t; real rho = C_R(cell,thread); real u,v,w; u=C_U(cell,thread); v=C_V(cell,thread); w=C_W(cell,thread); real local_velocity = sqrt(pow(u,2.0)+pow(v,2.0)+pow(w,2.0)); real distance =C_WALL_DIST(cell,thread); chen_mu_t = 0.03874*rho*local_velocity*distance; return chen_mu_t; }
-
请问一下,fluent中开了s2s辐射模型后,在边界条件中设置的Internal emissivity 的物理意义是什么啊,就是指的物体表面材料的发射率吗?
-
没碰到过这种问题,你用到的是哪些宏,方便把代码贴上来看看吗?
-
@东岳 谢谢您的回复
对于动量源项的添加我仍有一些地方不理解,想再请教您一下
如下:-
如果动量源是添加一个力的话,那在空气流动方向的水平方向添加力会有效果吗?我知道在与运动方向垂直方向添加外力会使流线产生弯曲。但是与运动方向水平的方向却想象不来。
-
如果这个力能使速度增大的话,那质量流量也增大(空气的密度是常数,并且不可压缩),不会导致进出口的质量的不守恒吗?
-
同样的,如果管段中存在一个多孔介质区,相当于在动量方程中添加一个阻力源项,动量因为多孔介质造成了损失,速度会减小吗,速度减小的话会导致计算域内质量净通量不为零吗?
-
我这个模拟的入口条件采用的是速度入口,稳态计算,在风口第一层网格添加动量源后的收敛结果,如下图所示。边界条件的设置和上个帖子一样,入口速度为1 m/s,但是从图中理解不了为什么会产生这样的结果。
-
-
请问大家一个问题:
问题是关于fluent中udf自定义动量源项的使用及添加源项的物理意义。
问题描述:
我的模型是模拟室内流场的,需要在室内风口的位置附近的网格添加动量源项,实现风口的动量方法模型(一种风口模型)。具体源项方程如下面第一张图所示。简化后的物理模型如第二张所示。
我的问题是:
在动量方程右端添加源项的本质是什么,如果作为“源”的话会导致连续性方程的不守恒吗?添加动量源项后的结果是体现在速度上吗?我尝试在这个模型中添加源项但是一直得不到收敛的结果,不知道是源项的大小有问题,还是这么样物理模型本身就不合理。得到可能的结果如第三张图(模型的速度入口在右端),也有一些直接发散得不到结果的。
***请大神指点一下,谢谢大家啊。 ***UDF代码如下:
#include "udf.h" /*********************************************************** 为动力方程增加动量源项,实现陈清焰的风口动量模型方法。 其中Rfa为有效风口面积系数,Agross为风口整体面积,rho为空气密度 volume为单个控制体体积,velocity为在整体风口尺寸下的送风速度(名义风口速度) ***********************************************************/ DEFINE_SOURCE(mom_sou, cell, thread, dS, eqn) { real Rfa=0.1; real Agross=0.5883; real rho=1.217; real velocity=0.09; real volume; real source; volume=C_VOLUME(cell,thread); source = (rho*Agross*((1.0/Rfa)-1.0)*velocity*velocity)/volume; dS[eqn] = (2*rho0*Agross*((1.0/Rfa)-1.0)*velocity)/volume; return source; }
-
问题描述:
求解CFD-PBM模型时通过per phase方法求解其湍流方程,计算过程中湍流的物理参数,仅有primary and secondary phases。则在UDF编写中,想要调用颗粒相(secondary phase)的物理参数,调用颗粒相的指针语句应当怎样书写?疑问1:在利用mixture求解湍流方程时,调用颗粒相物理参数可通过下列语句:
Thread *tm=THREAD_SUPER_THREAD (thread);/mixture/
Thread *tp=THREAD_SUB_THREAD(tm,1); /particle phase/但利用per phase求解湍流方程时,并不存在mixture这一项,因此是否还存在 superdomain呢?如果没有了superdomain,我应当怎么来表示颗粒相的指针呢?
-
我想要模拟室内置换通风的温度速度场的分布情况,几何模型很简单,如图1所示。我使用的模拟工具是fluent和airpak。湍流模型选用的标准k-e模型、RNGk-e模型、室内零方程湍流模型(都有试过),空气密度设为不可压理想气体、Boussinesq模型(都有试过),墙面边界条件为固定热流密度,人员和电脑边界条件为固定热流密度,风口入口边界条件:速度=0.2m/s,温度=20度,湍动能=4.25%,水力直径=0.58m,回风口边界条件试过自由出流、压力出口。使用SIMPLE、SIMPLEC算过,压力采用PRESTO!,其他都是二阶迎风精度(一阶的也试过)。网格采用ICEM的结构网格,数量20万、50W、80W,后来也考虑过Y+值。
我的问题是,我现在不管怎么处理都收敛不了,尝试过调温度、密度的松弛因子都不收敛,而且收敛残差值都类似,都是先下降,然后上升,再不断振荡下去,我使用airpak建立相同模型,残差也是类似结果。如图2。
这个问题卡了我快两个月,找了各种原因都不行,请大家帮帮找找原因,谢谢大家了。
我的模型传到网盘上了:链接: https://pan.baidu.com/s/1-glgZNYdPPbJ-xnvyuH_GQ 提取码: tmun -
不能的,目前只能二选一。
关于置换通风室内气流模拟不收敛问题
Fluent中PBM模型中怎么输入已知的粒径分布
Fluent中PBM模型中怎么输入已知的粒径分布
OpenFOAM python PINN tensorflow gpu (小白,莫笑)
fluent数据处理成二维数组
UDF宏自变量命名问题
UDS方程计算出来的污染物总量不守恒
UDS方程计算出来的污染物总量不守恒
请教一下,这个蓝色和橙色的云图可以用什么软件做?
UDS方程计算出来的污染物总量不守恒
UDS方程计算出来的污染物总量不守恒
UDS方程计算出来的污染物总量不守恒
UDS方程计算出来的污染物总量不守恒
关于Fluent UDF有哪些明显的局限性?
ANSYS2020字体太大,显示不全
ANSYS2020字体太大,显示不全
ANSYS2020字体太大,显示不全
相变UDF求助
UDF求计算域中某网格到壁面的最近距离(C_WALL_DIST宏)
UDF求计算域中某网格到壁面的最近距离(C_WALL_DIST宏)
边界条件中Internal emissivity的物理意义
fluent 17.0 写udf并行运算的时候为什么只有6核才能计算?
关于fluent中udf自定义动量源项的使用,及添加源项的物理意义。
关于fluent中udf自定义动量源项的使用,及添加源项的物理意义。
per phase方法求解湍流模型,各相参数在UDF中应当如何调用
关于置换通风室内气流模拟不收敛问题
CFD2019新的公式功能