fluent计算输出时均值
/
******************************************************************************
* Created on : 2017-5-30
17:12
* author :
硫酸亚铜
*需要在solution->Run
Calculation->Options勾选Data Sampling for Time
Statistics
*否则会报错
******************************************************************************/
#include "udf.h"
#define FLUID_ID 7 / *需要计算平均值的计算域的ID*/
DEFINE_ON_DEMAND(averageValue)
{
#if !RP_HOST
Domain* domain = Get_Domain(1); / *获取计算域*/
Thread* t;
/ *获取指针*/
cell_t
c; /
*标定单元*/
#else
int i; /
*用来循环计数*/
#endif
#if !RP_NODE
FILE *fp = NULL;
/ *定义一个文件指针*/
char filename[] = "average.txt";
/ *文件名*/
#endif
#if PARALLEL
int size; /
*传递变量的数据,实际上计算节点上的单元数*/
real* pAverage;
/ *pAverage表示压力平均*/
real* uAverage;
/ *uAverage表示x方向的速度分量*/
real* vAverage;
/ *vAverage表示y方向的速度分量*/
real* wAverage;
/ *wAverage表示z方向的速度分量*/
real position[ND_ND]; /
*记录单元的位置*/
int pe; / *用来保存主机和计算节点*/
#endif
#if !RP_HOST
t = Lookup_Thread(domain, FLUID_ID);
#endif
#if !RP_NODE
if ((fp = fopen(filename, "w")) == NULL)
/ *判断文件是否打开成功*/
Message("\n Warning: Unable to open %s for writing\n",
filename); /
*文件打开失败*/
else
Message("\nWriting averageValue to %s...", filename); /
*打开文件成功*/
#endif
#if !PARALLEL /
*在串行情况下,输出文件*/
begin_c_loop(c, t)
fprintf(fp,
"average pressure:%g\n \
The average velocity in the x direction is:%g \n \
The average velocity in the y direction is:%g \n \
The average velocity in the x direction is:%g \n", \
C_STORAGE_R(c, t, SV_P_MEAN) / delta_time_sampled,
\
C_STORAGE_R(c, t, SV_U_MEAN) / delta_time_sampled,
\
C_STORAGE_R(c, t, SV_V_MEAN) / delta_time_sampled,
\
C_STORAGE_R(c, t, SV_W_MEAN) /
delta_time_sampled);
end_c_loop(c,t)
#endif
#if RP_NODE
size=THREAD_N_ELEMENTS_INT(t); / *得到分块计算域内单元的数目*/
pAverage = (real *)malloc(size * sizeof(real)); /
*为平均压力分配空间*/
uAverage = (real *)malloc(size * sizeof(real)); /
*速度在x方向分量的平均值分配空间*/
vAverage = (real *)malloc(size * sizeof(real)); /
*速度在y方向分量的平均值分配空间*/
wAverage = (real *)malloc(size * sizeof(real)); /
*速度在z方向分量的平均值分配空间*/
begin_c_loop_int(c, t)
{
pAverage[c] = C_STORAGE_R(c, t, SV_P_MEAN) /
delta_time_sampled;
/ *得到压力的平均值*/
uAverage[c] = C_STORAGE_R(c, t, SV_U_MEAN) /
delta_time_sampled;
/ *得到速度x方向的速度分量的平均值*/
vAverage[c] = C_STORAGE_R(c, t, SV_V_MEAN) /
delta_time_sampled;
/ *得到速度y方向的速度分量的平均值*/
wAverage[c]
= C_STORAGE_R(c, t, SV_W_MEAN) /
delta_time_sampled;
/ *得到速度z方向的速度分量的平均值*/
}
end_c_loop_int(c, t)
/ ***************************************
*判断是否是0计算节点
*当前节点为0计算节点,则pe为node_host,
*通过0计算节点向主机节点发送数据
*当前节点为非0计算节点,则pe为node_zero
*其他计算节点向0计算节点发送数据
****************************************/
pe = (I_AM_NODE_ZERO_P) ? node_host: node_zero;
/ ********************************************
*当前节点为0节点,则当前节点向主机发送数据
*当前节点为非0节点,则当前节点向0节点发送数据
*********************************************/
PRF_CSEND_INT(pe, &size, 1, myid);
PRF_CSEND_REAL(pe, pAverage, size, myid);
PRF_CSEND_REAL(pe, uAverage, size, myid);
PRF_CSEND_REAL(pe, vAverage, size, myid);
PRF_CSEND_REAL(pe, wAverage, size, myid);
/ *发送数据以后,释放内存*/
free(pAverage);
free(uAverage);
free(vAverage);
free(wAverage);
if (I_AM_NODE_ZERO_P) /
*如果是0计算节点*/
{
compute_node_loop_not_zero(pe) / *循环非0节点*/
{
PRF_CRECV_INT(pe, &size, 1, pe);
/ *0计算节点从其他计算节点接收各分块节点的单元数*/
pAverage = (real *)malloc(size * sizeof(real)); /
*为平均压力分配空间*/
uAverage = (real *)malloc(size * sizeof(real)); /
*速度在x方向分量的平均值分配空间*/
vAverage = (real *)malloc(size * sizeof(real)); /
*速度在y方向分量的平均值分配空间*/
wAverage = (real *)malloc(size * sizeof(real)); /
*速度在z方向分量的平均值分配空间*/
/ *0计算节点从其他计算节点接收各结算节点的单元对应的变量*/
PRF_CRECV_REAL(pe, pAverage, size, pe);
PRF_CRECV_REAL(pe, uAverage, size, pe);
PRF_CRECV_REAL(pe, vAverage, size, pe);
PRF_CRECV_REAL(pe, wAverage, size, pe);
PRF_CSEND_INT(node_host, &size, 1, myid); /
*0计算节点将从各分块节点单元数发送给主机节点*/
/ *0计算节点将从其他计算节点接收各结算节点的单元对应的变量发送给主机节点*/
PRF_CSEND_REAL(node_host, pAverage, size, myid);
PRF_CSEND_REAL(node_host, uAverage, size, myid);
PRF_CSEND_REAL(node_host, vAverage, size, myid);
PRF_CSEND_REAL(node_host, wAverage, size, myid);
/ *释放内存*/
free((char *)pAverage);
free((char *)uAverage);
free((char *)vAverage);
free((char *)wAverage);
}
}
#endif
#if RP_HOST
compute_node_loop(pe) /
*仅仅作为一个循环计数器的角色*/
{
/ *接收各节点的数据*/
PRF_CRECV_INT(node_zero, &size, 1, node_zero);
pAverage = (real *)malloc(size * sizeof(real));
uAverage = (real *)malloc(size * sizeof(real));
vAverage = (real *)malloc(size * sizeof(real));
wAverage = (real *)malloc(size * sizeof(real));
PRF_CRECV_REAL(node_zero, pAverage, size, node_zero);
PRF_CRECV_REAL(node_zero, uAverage, size, node_zero);
PRF_CRECV_REAL(node_zero, vAverage, size, node_zero);
PRF_CRECV_REAL(node_zero, wAverage, size, node_zero);
/ *将数据写入文件当中*/
for (i=0; i
fprintf(fp,
"Time Sampled(s):%g \
\naverage pressure:%g
\
\nThe average velocity in the x direction is:%g \
\nThe average velocity in the y direction is:%g \
\nThe
average velocity in the x direction is:%g \n", \
delta_time_sampled, \
pAverage[i], \
uAverage[i], \
vAverage[i], \
wAverage[i]);
/ *释放内存*/
free(pAverage);
free(uAverage);
free(vAverage);
free(wAverage);
}
#endif
#if !RP_NODE
fclose(fp); / *关闭文件*/
Message("Done\n"); / *输出关闭文件完成*/
#endif
}
fluent计算输出时均值的更多相关文章
- tp5页面输出时,搜索后跳转下一页的处理
tp5页面输出时,搜索功能在跳转下一页时,如果不做任何处理,会返回原有是第二页输出的数据.为了保证跳转下一页时输出的是搜索到的数据,做以下处理. (要根据自己的搜索字段进行适当修改) 页面js代码,给 ...
- Java数字格式化输出时前面补0
Java数字格式化输出时前面补0 星期日 2014年11月30日| 分类: Java /** * 里数字转字符串前面自动补0的实现. * */ public class TestString ...
- js小功能合集:计算指定时间距今多久、评论树核心代码、字符串替换和去除。
1.计算指定时间距今多久 var date1=new Date('2017/02/08 17:00'); //开始时间 var date2=new Date(); //当前时间 var date3=d ...
- PHP根据秒计算持续时长
/** * 计算持续时长 * * @param int $second 秒数 * @return string $duration 5天10小时43分钟40秒 */ function second2d ...
- C-C++字符输出时遇到字符'\n','\0'区别
#include "iostream" #include "stdio.h" #include "stdio_ext.h" #include ...
- 用墨卡托和GPS坐标计算距离时误差测试
iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差. 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米 ...
- C语言:计算输出给定数组中每相邻两个元素的平均值的平方根之和。
//计算输出给定数组中每相邻两个元素的平均值的平方根之和. #include <stdio.h> #include <math.h> ]) { double a,b,s=0.0 ...
- 编写python程序读入1到100之间的整数,然后计算每个数出现的次数,输入0表示结束输人,输入数据不包括0。如果数出现的大现如果大于1,输出时使用复数times
#-*- coding:UTF-8 -*- #环境:python3 print("Enter the numbers between 1 and 100:") enterList= ...
- Caffe学习系列(12):不同格式下计算图片的均值和caffe.proto
均值是所有训练样本的均值,减去之后再进行训练会提高其速度和精度. 1.caffe下的均值 数据格式是二进制的binaryproto,作者提供了计算均值的文件compute_image_mean, 计算 ...
随机推荐
- windows nvlddmkm、DRIVER_POWER_STATE_FAILURE 蓝屏问题的解决资料
背景与现象描述 博主在最近购买了 机械革命 Z2-R (MECHREVO Z2-R Series GK5CP02) 笔记本电脑后,几乎每天均有不下3次的蓝屏,而且机器热时,更甚,达到每天10次以上,简 ...
- Vue v-bind与v-model的区别
v-bind 缩写 : 动态地绑定一个或多个特性,或一个组件 prop 到表达式. 官网举例 <!-- 绑定一个属性 --> <img v-bind:src=" ...
- localStorage的增删改查
var _localStorage = window.localStorage; undefined /* 增 */ _localStorage.name = '张泰松' "张泰松" ...
- 2.在HTML中使用JavaScript
目录 1. script元素 2. 标签的位置 3.延迟和异步加载 4.嵌入代码与外部代码的区别 5.noscript元素 6. 小结 1. script元素 向HTML中插入JavaScript的主 ...
- HANA- SAP S4/HANA BP屏幕增强添加自定义字段(BDT方式)
转载:https://www.cnblogs.com/hhelibeb/p/7412792.html 这里我们可以使用的技术是Business Data Toolset(以下简称BDT). 以下是网络 ...
- Alpha_4
一. 站立式会议照片 二. 工作进展 (1) 昨天已完成的工作 a. 我的·主界面设计 b. 番茄钟的页面及音乐选择弹窗页面设计 c. 实现自定义习惯和设置新习惯的功能页面,并可预览 d.已实现番茄钟 ...
- 图说jdk1.8新特性(4)--- stream
总述 jdk1.8引入了Stream相关的API,通过该API.可以实现流式编程,使你写代码的时候行云流水 Stream使得集合的转换变得更加简单,原来可能需要写多个for循环或者多个if判断的,直接 ...
- ECharts快速入门
一.简介 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Saf ...
- idea中flink启动报错org.apache.flink.api.common.ExecutionConfig$GlobalJobParameters
启动时出现如下报错: Caused by: java.lang.ClassNotFoundException: org.apache.flink.api.common.ExecutionConfig$ ...
- spring cloud (六) 将一个普通的springcloud项目 非feign或ribbon项目,改造成turbine可聚合监听的项目
改造之前一个项目 service-a 1 pom.xml添加如下 <dependency> <groupId>org.springframework.cloud</gro ...