FLUENT计算变量的梯度:VOF的梯度-pancard.doc

上传人:飞****9 文档编号:136356536 上传时间:2020-06-28 格式:DOC 页数:5 大小:25.50KB
返回 下载 相关 举报
FLUENT计算变量的梯度:VOF的梯度-pancard.doc_第1页
第1页 / 共5页
FLUENT计算变量的梯度:VOF的梯度-pancard.doc_第2页
第2页 / 共5页
FLUENT计算变量的梯度:VOF的梯度-pancard.doc_第3页
第3页 / 共5页
FLUENT计算变量的梯度:VOF的梯度-pancard.doc_第4页
第4页 / 共5页
FLUENT计算变量的梯度:VOF的梯度-pancard.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《FLUENT计算变量的梯度:VOF的梯度-pancard.doc》由会员分享,可在线阅读,更多相关《FLUENT计算变量的梯度:VOF的梯度-pancard.doc(5页珍藏版)》请在金锄头文库上搜索。

1、1 FLUENT变量梯度宏C_R_G C_P_G C_U_G C_V_G C_W_G C_T_G C_H_G C_YI_G C_R_RG C_P_RG C_U_RG C_V_RG C_W_RG C_T_RG C_H_RG C_YI_RG FLUENT计算中单元变量有两种梯度:非限制梯度(后缀_G)和重建梯度(后缀_RG),帮助文档建议如果需要通过单元变量重建计算单元面上的变量则使用重建梯度计算更精确。说明:(1) 只有当求解器正在求解某一变量时才能读取该变量的梯度。例如,定义一个能量源项时,可以读取温度梯度(C_T_G),但是不能读取速度梯度(如C_U_G)。这是因为求解器不断释放它不需要的变

2、量存储。如果你要保留这些变量梯度,可以使用TUI命令: solve/set/expert 设置“Keep temporary solver memory from being freed?” Yes。当然这样做,计算需要更多内存。(2) C_R_G 只有density-based solver中才能使用; C_P_G只有pressure-based solver中才能使用。 (3) C_YI_G 只有density-based solver中可用,如果pressure-based solver要使用C_YI_G,则需要设置 species/save-gradients? #t.(4) 变量的梯

3、度是否存在与求解器、模型、离散方式以及是否设置保留这些变量梯度有关。(5) C_VOF_G是否存在?质量源项中是否可以读取?设置保留对其无效?上述问题未知(6) UDS变量的梯度可以通过C_UDSI_G(C,0)访问,求解中始终存储,即使设置“Keep temporary solver memory from being freed?” No,UDS的梯度仍存在;而且在方程求解控制中设置不求解UDS,仍可以读取UDS梯度。2 FLUENT不计算和保存VOF的梯度一般情况下,FLUENT计算过程中会计算VOF及其梯度(因为表面张力的计算需要用到VOF梯度),会保存VOF值,但是不保存VOF梯度。

4、因此,如果UDF中利用宏C_VOF_G读取VOF梯度则会报读取错误,如下例:UDF定义一个与VOF梯度成正比的动量源项:DEFINE_SOURCE(xmomentum,c,t,dS,eqn) Thread *w; real vof_gx, source; w=THREAD_SUB_THREAD(t,1); vof_gx=C_VOF_G(c,w)0; source=-200*C_R(c,t)*vof_gx; dSeqn=0; return source;运行后报错:Error:FLUENT received fatal signal (ACCESS_VIOLATION)1. Note exact

5、 events leading to error.2. Save case/data under new name.3. Exit program and restart to continue.4. Report error to your distributor.有些人修改读取VOF梯度的语句后,运行成功,但是实际上未读取到梯度值。if(NNULLP(THREAD_STORAGE(t, SV_VOF_G) vof_gx=C_VOF_G(c,w)0; else vof_gx=0;由于FLUENT未存储VOF梯度,THREAD_STORAGE(t, SV_VOF_G)返回的都是NULL。还有些

6、人利用TUI打开中间量的保存:Solve-set-expertkeeptemporarysolvermemoryfrombeingfreed? yes保存求解临时存储而不释放?yes这一设置对C_T_G,C_P_G等梯度是有效的,但是对VOF的梯度似乎无效。3 读取VOF梯度方法1#include udf.h #include sg.h#include sg_mphase.h#include flow.h#include mem.h#include metric.hDEFINE_ADJUST(store_VOF_gradient, domain)Thread *t;Thread *ppt;Th

7、read *pt;cell_t c;int phase_domain_index=1;Domain *pDomain = DOMAIN_SUB_DOMAIN(domain,phase_domain_index);Alloc_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL);Scalar_Reconstruction(pDomain, SV_VOF,-1,SV_VOF_RG,NULL);Scalar_Derivatives(pDomain,SV_VOF,-1,SV_VOF_G,SV_VOF_RG, Vof_Deriv_Accumulate);mp_

8、thread_loop_c (t,domain,pt)if (FLUID_THREAD_P(t)ppt = ptphase_domain_index;begin_c_loop (c,t)C_UDMI(c,t,0) = C_VOF_G(c,ppt)0;C_UDMI(c,t,1) = C_VOF_G(c,ppt)1;C_UDMI(c,t,2) = C_VOF_G(c,ppt)2;end_c_loop (c,t)Free_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL);上例利用了一些帮助上无法查到的FLUENT函数手动设置VOF梯度计算,Alloc_

9、Storage_Vars,Scalar_Reconstruction,Scalar_Derivatives这些函数的大概功能可以猜到,但是没有详细说明。4 读取VOF梯度方法2将VOF赋值给UDS变量,然后通过C_UDSI_G间接求得梯度。下例是FLUENT帮助文档中给出的一个例子:将VOF赋值给UDS;进行一次迭代计算,但不计算UDS方程;尽管未计算UDS方程,仍可以得到梯度值,并将其赋值给UDM用于显示。 # include udf.h # define domain_ID 2 DEFINE_ADJUST(adjust_gradient, domain) Thread *t; cell_t

10、 c; face_t f; domain = Get_Domain(domain_ID); /* Fill UDS with the variable. */ thread_loop_c (t,domain) begin_c_loop (c,t) C_UDSI(c,t,0) = C_VOF(c,t); end_c_loop (c,t) thread_loop_f (t,domain) if (THREAD_STORAGE(t,SV_UDS_I(0)!=NULL) begin_f_loop (f,t) F_UDSI(f,t,0) = F_VOF(f,t); end_f_loop (f,t) DEFINE_ON_DEMAND(store_gradient) Domain *domain; cell_t c; Thread *t; domain=Get_Domain(1); /* Fill the UDM with magnitude of gradient. */ thread_loop_c (t,domain) begin_c_loop (c,t) C_UDMI(c,t,0) = NV_MAG(C_UDSI_G(c,t,0); end_c_loop (c,t) 5 在质量源项上读取VOF模型计算中,在某一相的质量源中读取C_VOF_G(C,ts)并将其传递给UDMI,方法未验证。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号