fluent当中的梯度宏和VOF梯度的获取【转载】
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),帮助文档建议如果需要通过单元变量重建计算单元面上的变量则使用重建梯度计算更精确。
说明:
- 只有当求解器正在求解某一变量时才能读取该变量的梯度。例如,定义一个能量源项时,可以读取温度梯度(C_T_G),但是不能读取速度梯度(如C_U_G)。这是因为求解器不断释放它不需要的变量存储。如果你要保留这些变量梯度,可以使用TUI命令:
solve/set/expert 设置"Keep temporary solver memory from being freed?"
[Yes]。当然这样做,计算需要更多内存。 - C_R_G
只有density-based solver中才能使用; C_P_G只有pressure-based
solver中才能使用。 - C_YI_G 只有density-based solver中可用,如果pressure-based
solver要使用C_YI_G,则需要设置 species/save-gradients? #t. - 变量的梯度是否存在与求解器、模型、离散方式以及是否设置保留这些变量梯度有关。
- C_VOF_G是否存在?质量源项中是否可以读取?设置保留对其无效?上述问题未知
- 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梯度。因此,如果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;
dS[eqn]=0;
return source;
}
运行后报错:
Error:
FLUENT received fatal signal
(ACCESS_VIOLATION)
1. Note exact 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。
还有些人利用TUI打开中间量的保存:
Solve->set->expert
keep temporary solver memory from being freed?
[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.h"
DEFINE_ADJUST(store_VOF_gradient, domain)
{
Thread *t;
Thread *ppt;
Thread **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_thread_loop_c (t,domain,pt)
{
if (FLUID_THREAD_P(t))
{
ppt = pt[phase_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_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 c;
face_t f;
domain = Get_Domain(domain_ID);
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);
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,方法未验证。
fluent当中的梯度宏和VOF梯度的获取【转载】的更多相关文章
- NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降
1.前言 这几种方法呢都是在求最优解中常常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中.都是环绕下面这个式子展开: 当中在上面的式子中hθ(x)代表.输入为x的时候的其当时θ參数下的输出值 ...
- Logistic 回归(sigmoid函数,手机的评价,梯度上升,批处理梯度,随机梯度,从疝气病症预测病马的死亡率
(手机的颜色,大小,用户体验来加权统计总体的值)极大似然估计MLE 1.Logistic回归 Logistic regression (逻辑回归),是一种分类方法,用于二分类问题(即输出只有两种).如 ...
- 对数几率回归法(梯度下降法,随机梯度下降与牛顿法)与线性判别法(LDA)
本文主要使用了对数几率回归法与线性判别法(LDA)对数据集(西瓜3.0)进行分类.其中在对数几率回归法中,求解最优权重W时,分别使用梯度下降法,随机梯度下降与牛顿法. 代码如下: #!/usr/bin ...
- 机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)
本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有 ...
- 机器学习(ML)十五之梯度下降和随机梯度下降
梯度下降和随机梯度下降 梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础.随后,将引出随机梯度下降(stochastic ...
- 梯度下降法VS随机梯度下降法 (Python的实现)
# -*- coding: cp936 -*- import numpy as np from scipy import stats import matplotlib.pyplot as plt # ...
- 梯度下降之随机梯度下降 -minibatch 与并行化方法
问题的引入: 考虑一个典型的有监督机器学习问题,给定m个训练样本S={x(i),y(i)},通过经验风险最小化来得到一组权值w,则现在对于整个训练集待优化目标函数为: 其中为单个训练样本(x(i),y ...
- 机器学习笔记 1 LMS和梯度下降(批梯度下降) 20170617
https://www.cnblogs.com/alexYuin/p/7039234.html # 概念 LMS(least mean square):(最小均方法)通过最小化均方误差来求最佳参数的方 ...
- 机器学习进阶-图像形态学操作-梯度运算 cv2.GRADIENT(梯度运算-膨胀图像-腐蚀后的图像)
1.op = cv2.GRADIENT 用于梯度运算-膨胀图像-腐蚀后的图像 梯度运算:表示的是将膨胀以后的图像 - 腐蚀后的图像,获得了最终的边缘轮廓 代码: 第一步:读取pie图片 第二步:进行腐 ...
随机推荐
- Django form表单 组件
目录 Django form表单 组件 Form 组件介绍 普通方式手写注册功能 使用form组件实现注册功能 Form 常用字段与插件 常用字段(必备) 字段参数(必备) 内置验证(必备) 自定义效 ...
- ActiveMQ Queue vs Topic vs VirtualTopic
之前写过一篇文章讨论VirtualTopic,但觉得不够透彻,这里再根据实验结果进行一次横向对比破除模糊和选择困难症. 文章中核心对比要素是:消息副本和负载均衡 Queue的特点和优势 ActiveM ...
- 在编译内核的最后阶段出现sdhci_esdhc_imx_pdata未定义的错误
遇到下面这种错误 在网上查找资料后,发现一篇好文,提出了良好的找错误的策略: (1)利用grep命令查看该变量在何处使用: (2)查看相应的头文件是否在Kconfig中被定义且在make menuco ...
- [极客-Linux] 05 系统调用
分配内存的系统调用 1)brk 小内存 2)mmap 大内存 sigaction 注册信号处理函数 进程间通信: 1)消息队列,在内核中,msgget 创建 2)共享内存,shmget 内核源代码 ...
- redis哨兵配置 总结
本文内容涵盖 windows下单机部署redis多实例(docker.linux下的配置也可参考本文) redis主从配置 redis哨兵配置 以spring boot redis demo下一个存a ...
- eclipse更改web项目访问路径(修改配置文件)
1.打开你的web项目,然后找到 .settings文件夹,如果你的项目中没有这个文件夹,请搜索如何显示web项目中的隐藏文件夹就能够看到了. 2.打开.settings文件夹找到这个文件. 3.在这 ...
- 彻底终结MySQL同步延迟问题
作为一名DBA,在工作中会经常遇到一些MySQL主从同步延迟的问题,这些同步慢的问题,其实原因非常多,可能是因为主从的网络问题导致,可能是因为网络带宽问题导致,可能是因为大事务导致,也可能是因为单线程 ...
- 开发一个代码的自动生成器,使用Jfinal4.3+Swagger+Sql
-- 所有表名select column_name 列名, data_type 字段类型, column_comment 字段注释 from information_schema.columns ...
- typescript 接口
接口:用来建立某种代码约定,使得其他开发者在调用某个方法或创建新的类时必须遵循接口所定义的代码约定 在js里面没有接口这个概念,在ts里面通过两个关键字来支撑接口这个特性 interface ...
- 基于Java+Selenium的WebUI自动化测试框架(十三)-----基础页面类BasePage(Excel)
前面,我们讲了如何使用POI进行Excel的“按需读取”.根据前面我们写的BasePageX,我们可以很轻松的写出来基于这个“按需读取”的BasePage. package webui.xUtils; ...