/
******************************************************************************

* 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计算输出时均值的更多相关文章

  1. tp5页面输出时,搜索后跳转下一页的处理

    tp5页面输出时,搜索功能在跳转下一页时,如果不做任何处理,会返回原有是第二页输出的数据.为了保证跳转下一页时输出的是搜索到的数据,做以下处理. (要根据自己的搜索字段进行适当修改) 页面js代码,给 ...

  2. Java数字格式化输出时前面补0

    Java数字格式化输出时前面补0 星期日 2014年11月30日|  分类: Java     /** * 里数字转字符串前面自动补0的实现. * */ public class TestString ...

  3. js小功能合集:计算指定时间距今多久、评论树核心代码、字符串替换和去除。

    1.计算指定时间距今多久 var date1=new Date('2017/02/08 17:00'); //开始时间 var date2=new Date(); //当前时间 var date3=d ...

  4. PHP根据秒计算持续时长

    /** * 计算持续时长 * * @param int $second 秒数 * @return string $duration 5天10小时43分钟40秒 */ function second2d ...

  5. C-C++字符输出时遇到字符'\n','\0'区别

    #include "iostream" #include "stdio.h" #include "stdio_ext.h" #include ...

  6. 用墨卡托和GPS坐标计算距离时误差测试

    iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差. 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米 ...

  7. C语言:计算输出给定数组中每相邻两个元素的平均值的平方根之和。

    //计算输出给定数组中每相邻两个元素的平均值的平方根之和. #include <stdio.h> #include <math.h> ]) { double a,b,s=0.0 ...

  8. 编写python程序读入1到100之间的整数,然后计算每个数出现的次数,输入0表示结束输人,输入数据不包括0。如果数出现的大现如果大于1,输出时使用复数times

    #-*- coding:UTF-8 -*- #环境:python3 print("Enter the numbers between 1 and 100:") enterList= ...

  9. Caffe学习系列(12):不同格式下计算图片的均值和caffe.proto

    均值是所有训练样本的均值,减去之后再进行训练会提高其速度和精度. 1.caffe下的均值 数据格式是二进制的binaryproto,作者提供了计算均值的文件compute_image_mean, 计算 ...

随机推荐

  1. Springboot html vue.js 前后分离 跨域 Activiti6 工作流 集成代码生成器 shiro 权限

    官网:www.fhadmin.org 特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...

  2. vue插件(还真是第一次接触)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 1519484 - How to analyze network disconnections shown in system log (transaction SM21)

    Symptom System log (transaction SM21) shows network disconnections, e.g.: Q04 Connection to user 264 ...

  4. zookeeper的安装使用

    转载从:https://blog.csdn.net/shenlan211314/article/details/6170717 一.zookeeper 介绍 ZooKeeper 是一个为分布式应用所设 ...

  5. Kubernetes集群开启Firewall

    关于端口的官方说明:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ k8s ...

  6. Altium Designer常用快捷键总结

    一.PCB中常用快捷键 ● R+L 输出PCB中所有网络的布线长度 ● Ctrl+左键点击 对正在布的线完成自动布线连接 ● M+G 可更改铜的形状; ● 按P+T在布线状态下,按Shift+A可直接 ...

  7. 项目Alpha冲刺(团队) -- 测试

    项目Alpha冲刺(团队) --测试 1.团队信息 团队名 :男上加男 成员信息 : 队员学号 队员姓名 个人博客地址 备注 221600427 Alicesft https://www.cnblog ...

  8. Beta冲刺(1/7)——2019.5.22

    所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(1/7)--2019.5.22 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...

  9. MySql常用函数大全

    MySql常用函数大全 MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操 ...

  10. 创建django项目完整实例

    虚拟环境搭配 安装和配置 安装虚拟环境的命令: 1)sudo pip install virtualenv #安装虚拟环境 2)sudo pip install virtualenvwrapper # ...