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

* 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. 2019-07-24 require 和 include的区别

    require 和 include 都是文件引入的常用用法.那他们有什么区别吗? 首先我们创建一个需要引入的文件叫做test.php,里面写上简单的一行代码: echo "我是要被引入的文件 ...

  2. k8s维护常用命令

    k8s维护 1. 不可调度 kubectl cordon k8s-node-1 kubectl uncordon k8s-node-1 #取消 2.驱逐已经运行的业务容器 kubectl drain ...

  3. mysql DML 数据插入,删除,更新,回退

    mysql插入,删除,更新地址:https://wenku.baidu.com/view/194645eef121dd36a32d82b1.html http://www.cnblogs.com/st ...

  4. unity 实现技能释放

    要实现技能释放其实很简单,说白了就是在指定的位置Instantiate一个对应的例子特效.我走的弯路主要在寻找这个指定位置上. 对于指向性技能就不多说了,因为是有确切目标的(当然首先判断下技能能不能对 ...

  5. 最佳移动端h5自适应rem适配方案

    一.利用lib-flexible.postcss-plugin-px2rem插件 进行移动端rem适配. 1.第一 引入lib-flexible . 安装lib-flexible: npm i lib ...

  6. E2E测试工具之--01 Cypress 上手使用

    The web has evolved. Finally, testing has too. 1. 简介 cypress 最近很火的e2e(即end to end(端到端))测试框架,它基于node ...

  7. PDF 补丁丁 0.6.2.3572 测试版发布

    近日有网友反馈 3571 测试版的补丁丁无法正常工作.请下载新发布的 3572 版本.

  8. Mysql 常见数据类型及约束

    Mysql 常见数据类型及约束 最近在跟几个不太懂技术的同事(哈哈, 其实我也不懂), 要整一个数据库项目, 然后前端, 后端, 都没有像样的, 数据输出还不是由我们控制.... 这可难受了, 然后总 ...

  9. php将原数组倒序array_reverse()

    1.数组倒序排列 $arr = array(1,2,3); $arr = array_reverse($arr); print_r($arr);

  10. VUE--404页面

    <一 404 动态页面> <!-- 2017/5/26- yyy-404页面--> <template> <section class="page_ ...