CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新
    1. 主页
    2. 深蓝
    • 资料
    • 关注 1
    • 粉丝 1
    • 主题 10
    • 帖子 26
    • 群组 0

    深蓝

    @深蓝

    267
    资料浏览
    26
    帖子
    1
    粉丝
    1
    关注
    注册时间 最后登录
    网站 zhhlworx.wordpress.com/ 位置 大连

    深蓝 取消关注 关注

    深蓝 发布的最新帖子

    • RE: Fluent中PBM模型中怎么输入已知的粒径分布

      @bestucan 好的,我再去看一看帮助文件,谢谢老师啦:146:

      发布在 Fluent
      深蓝
      深蓝
    • Fluent中PBM模型中怎么输入已知的粒径分布

      在使用PBM模型模拟冰浆储存过程中冰颗粒的粒径变化时,冰颗粒的初始粒径分布如下图所示,其中粒径分组是以100为单位递增。请问有大佬知道在fluent中怎么以相同的方式输入粒径分组吗,求求了

      a3a1741d-48a3-49bf-b415-6fa012401815-image.png

      发布在 Fluent
      深蓝
      深蓝
    • RE: OpenFOAM python PINN tensorflow gpu (小白,莫笑)

      @mengqiang 我想到的能够用ISIGHT做集成,用ISIGHT调用fluent计算,然后用fluent自动后处理(都用TUI命令),再用ISIGHT调用python进行神经网络训练模型. 这样就不用学openfoam了,fluent也挺好用. 而且ISIGHT还能调用matlab...

      但是感觉不用这么折腾啊,为啥非要集成到一块. 用处理好的数据训练PINN也行啊. 我在用PINN做反演(污染物的溯源):chouchou:

      发布在 OpenFOAM
      深蓝
      深蓝
    • fluent数据处理成二维数组

      问题: fluent结果怎么处理为二维数组
      详述: fluent导出的结果为(坐标,坐标,值)的格式,(值)是一个一维数组,但是在神经网络训练的时候需要(值)为二维数组,请问怎么才能转换?示意图如下:
      微信截图_20220214144723.png

      难点:
      1、数据量很大,大概有几万个点
      2、fluent导出的数据很不规矩,(比如x=1的时候应该有y=a,y=b,y=c,x=2的时候应该有y=a,y=b,y=c),但是fluent导出的数,x=1的时候有y=a,y=b,y=c,x=2的时候可能只有y=c(不好解释啊:135: )。二维数组非常稀疏,如下图微信截图_20220214150241.png

      其实我就想要个二维数组来表示二维的物理量场,请大哥大姐们帮帮忙啊:chouchou:

      发布在 Fluent
      深蓝
      深蓝
    • RE: UDF宏自变量命名问题

      @ejector 变量的名词不重要,注意变量的类型就行

      发布在 Fluent
      深蓝
      深蓝
    • RE: UDS方程计算出来的污染物总量不守恒

      @bestucan 谢谢您的回复
      我已经找到解决办法了,在fluent中通过连续用C_UDSI(c,t,0)_G的办法不可行,又找到另外一种办法,如下:
      未命名1631102135.png
      是通过计算每个cell与周围cell的“浓度差”进行计算的。但是因为fluent只能获取到一个面左右两个网格(c0,c1)的信息,所以这种方法二阶导数最高只有二阶截断误差。想要有四阶阶段误差需要有9个节点的信息(二维),fluent的udf只能获得5个节点的信息。:ok2:

      发布在 Fluent
      深蓝
      深蓝
    • RE: UDS方程计算出来的污染物总量不守恒

      @李东岳 是的,确实是这样的

      发布在 Fluent
      深蓝
      深蓝
    • RE: 请教一下,这个蓝色和橙色的云图可以用什么软件做?

      这一看就是玉国论文中的图,你也研究室内污染物的传播?我们是同道中人啊:146:

      发布在 Fluent
      深蓝
      深蓝
    • RE: UDS方程计算出来的污染物总量不守恒

      @bestucan 谢谢您得持续回复。

      我进行了三次尝试,200*200=40000个网格,密度=1.0时,整个计算域都添加源项,1.0s后,总量为40000,如果是300*300=90000个网格,其他不变时,总量为90000,如果密度变成2.0,总量就是45000。可见跟密度有有关系的,在UDS对流项的宏(DEFINE_UDS_FLUX)里面需要获取网格的密度,UDF手册的表述如下:
      未命名1630154273.png

      我把uds对流项中的密度都设置成1.0常数,没有效果。
      我尝试把uds扩散项设置成常数也没有效果,分析应该是DEFINE_SOURCE宏返回值是一个扩散系数,密度项已经包含在默认的计算中了。
      对流项代码如下:

      DEFINE_UDS_FLUX(QR_flux,f,t,i)
      {
          cell_t c0, c1 = -1;
          Thread *t0, *t1 = NULL;
      
          real NV_VEC(psi_vec), NV_VEC(A), flux = 0.0;
      
          c0 = F_C0(f,t);
          t0 = F_C0_THREAD(f,t);
          F_AREA(A, f, t);
      	
      /* If face lies at domain boundary, use face values. */
      /* BOUNDARY_FACE_THREAD_P(t) expands to a function that returns TRUE if Thread *t is a boundary face thread. */
      
        	if(BOUNDARY_FACE_THREAD_P(t))
          	{
            		real dens;
      	  
      /* Depending on its BC, density may not be set on face thread. */
      /* Test whether the memory for SV_DENSITY has already been allocated on a given Thread or not. */
      
            		if(NNULLP(THREAD_STORAGE(t,SV_DENSITY)))			
              		dens = F_R(f,t);
          		else
              		dens = C_R(c0,t0);
      
            		NV_DS(psi_vec,  =, F_U(f,t), F_V(f,t), F_W(f,t), *, dens);
      
            		flux = 1 * NV_DOT(psi_vec, A);
          	}
        
      /* If face lies IN the domain, use average of adjacent cells. */
        
        	else
         		 {
            		c1 = F_C1(f,t);
            		t1 = F_C1_THREAD(f,t); 
      
            		NV_DS(psi_vec,  =, C_U(c0,t0),C_V(c0,t0),C_W(c0,t0),*,C_R(c0,t0));
            		NV_DS(psi_vec, +=, C_U(c1,t1),C_V(c1,t1),C_W(c1,t1),*,C_R(c1,t1));
      
            		flux = 1 * NV_DOT(psi_vec, A)/2.0;
          	}
      
        	return flux;
          
      }
      

      ###另外还有个小问题想请教您一下:
      未命名1630154958.png
      问题:UDS的方程中,瞬态项和对流项的处理都有现成可用的宏,我的方程中需要添加一个四阶导数项,看来只能放在源项中,源项处理四阶导数项的话,需要自己编写四阶导数吗,源项的线性化怎么处理……,您对处理这个四阶导数项有什么建议:chouchou:

      再次谢谢您得回复!!:xinxin2:
      尝试的代码如下:

      
      DEFINE_SOURCE(QR_source_2d, c, t, dS, eqn)
      {
      	real source;
      	real epsilon; 														/*stability coefficient*/
      	real rho;
      
      		
      C_UDSI(c,t,1) = C_UDSI_G(c,t,0)[0];							/*DcDx, returns the x-component of the UDS gradient vector*/	
      C_UDSI(c,t,2) = C_UDSI_G(c,t,1)[0];							/*DcDxx, returns the x-component of the UDS gradient vector*/	
      C_UDSI(c,t,3) = C_UDSI_G(c,t,2)[0];							/*DcDxxx, returns the x-component of the UDS gradient vector*/	
      C_UDSI(c,t,4) = C_UDSI_G(c,t,3)[0];							/*DcDxxxx, returns the x-component of the UDS gradient vector*/		
      C_UDSI(c,t,5) = C_UDSI_G(c,t,0)[1];							/*DcDy, returns the y-component of the UDS gradient vector*/	
      C_UDSI(c,t,6) = C_UDSI_G(c,t,5)[1];							/*DcDy, returns the y-component of the UDS gradient vector*/	
      C_UDSI(c,t,7) = C_UDSI_G(c,t,6)[1];							/*DcDyyy, returns the y-component of the UDS gradient vector*/	
      C_UDSI(c,t,8) = C_UDSI_G(c,t,7)[1];							/*DcDyyyy, returns the y-component of the UDS gradient vector*/
      
      epsilon = 5*pow(10,-6);
      rho = C_R(c,t);
      source = rho * epsilon * (C_UDSI(c,t,4) + C_UDSI(c,t,8));	/*dcdxxxx+dcdyyyy*/
      			
      dS[eqn] = 0;												/*source linearization*/
      			
      return source;
      					
      }
      
      
      
      发布在 Fluent
      深蓝
      深蓝
    • RE: UDS方程计算出来的污染物总量不守恒

      @bestucan 谢谢您得回复,通过您得建议,经过我几次尝试,结果如下:

      方法一:
      初始化所有区域的uds=0,u=2m/s,空气密度为1kg/m3
      Patch方块的uds=1
      方块的网格数量为29*29
      uds的总和为 29*29*1=841
      经过0.5s的发展如右图,uds的总和还是841
      Note:
      1、如果密度为2 kg/m3,则uds的总和为420
      8191.png

      方法二:
      初始化所有区域的uds=0,空气密度为1kg/m3
      设置方块的source=1
      方块的网格数量为29*29
      进过0.5s的释放和发展如右图(线性增加),uds的总和为420
      Note:
      1、 如果密度为0.5 kg/m3,则uds的总和为840
      2、 如果是稳态计算,uds是线性增加的
      8192.png
      8193.png
      所以,source的单位应该是generation-rate*density/cell numbers

      这里面需要计算网格的数量,我想udf怎么得到网格的数量呢,找了半天没有合适的,C_NNODES可以用来计算cell的节点数量,F_NNODES可以计算网格面上节点的数量,C_NFACES可以计算网格中面的数量,是否能间接得到网格的数量,但是udf手册中没有这个实例,但是在计算的时候编译一直通过不了,呜呜呜:135: ,代码如下:

      #include "udf.h"
      #include "mem.h"
      DEFINE_ON_DEMAND(name)
      {	
      	int sum=0;
      	Thread *t;
      	cell_t c;	
      		begin_c_loop(c, t)
      			{									
      			  {
      			    sum+=C_NNODES(c, t);
      			  }
      			}
      		end_c_loop(c, t)
      			
      	Message0("\n num=%f\n",num/4.0);
      		
      }
      
      
      发布在 Fluent
      深蓝
      深蓝