CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    请教一个入口非均匀风速设置的问题

    OpenFOAM
    2
    5
    1713
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      Mania 最后由 编辑

      想把入口设置成大气边界层,
      对于高度z小于300,速度x=20*(z/25)^0.15,
      高度300=<z<1000,x=29.03
      (整个流场高度就是1000m,所以这里就有一个小疑问,需不需要写上<1000的条件,Q1)

      代码我是先再论坛里搜了一下,然后自己琢磨的,没有写过代码所以希望哪位大神能指点一下

      dimensions      [0 1 -1 0 0 0 0];
      
      internalField   uniform (0 0 0);
      
      boundaryField
      {
          INLET
          {
      	type			codedfixedValue;
      	value			uniform (x 0 0);
      	name          	uuu;//我看有的帖子里说name是一定要有的,但是后面的可以随便写,是这样的么Q2;还有的写的是redirectType    XXX;,所以也想请教一下有什么区别,还是说是不一样的情况Q3
      
      	code
              #{
      		const fvPatch& boundaryPatch = patch();//这个意思是获取inlet这个边界面么Q4
      		scalar z = boundaryPatch.z();//这里我是想定义高度z,但是不知道怎么定义,就这样写的,感觉肯定不对Q5
      		
      		forAll( patch())
      		
      		if z<300  x==20*(z/25)^0.15;
      		
      		if 300=<z<1000 x=29.03
      	
      	 #};
          }
      
          
      }
      
      

      希望有大佬能指点一下,非常感谢

      1 条回复 最后回复 回复 引用
      • M
        Mania 最后由 编辑

        发现用代码高亮反而让人看的不方便
        dimensions [0 1 -1 0 0 0 0];

        internalField uniform (0 0 0);

        boundaryField
        {
        INLET
        {
        type codedfixedValue;
        value uniform (x 0 0);
        name uuu;//我看有的帖子里说name是一定要有的,但是后面的可以随便写,是这样的么Q2;还有的写的是redirectType XXX;,所以也想请教一下有什么区别,还是说是不一样的情况Q3

        code
            #{
        	const fvPatch& boundaryPatch = patch();//这个意思是获取inlet这个边界面么Q4
        	scalar z = boundaryPatch.z();//这里我是想定义高度z,但是不知道怎么定义,就这样写的,感觉肯定不对Q5
        	
        	forAll( patch())
        	
        	if z<300  x==20*(z/25)^0.15;
        	
        	if 300=<z<1000 x=29.03
        
         #};
        }
        

        }

        1 条回复 最后回复 回复 引用
        • C
          calrel 最后由 李东岳 编辑

          code
                  #{
                      const fvPatch& boundaryPatch = this -> patch();
                      vectorField U = boundaryPatch.Cf();
                      forAll (boundaryPatch, faceI)
                      {
                          scalar y = boundaryPatch.Cf()[faceI].y();
                          U[faceI] = vector(* , * , *);
                      }
                      opertor == (U);
                   #};
          

          我是这样整的,运行没问题,但当时有别的事,没有继续算下去,你试试吧

          M 1 条回复 最后回复 回复 引用
          • M
            Mania @calrel 最后由 编辑

            @calrel 好的~~~谢谢你,我前两天电脑画网格卡死了,没能上网及时回复你,现在试试,非常感谢

            1 条回复 最后回复 回复 引用
            • M
              Mania 最后由 李东岳 编辑

              以前没学过c+,这几天看了看琢磨一下,
              最后我是这样设置的

              INLET
                  {
              		type            codedFixedValue;
              		value           uniform (0 0 0);
              		name			IN;
              		code
              		#{
              				const vectorField& Cf = patch().Cf();
              
              				vectorField& field = *this;
              
              				forAll(Cf,faceI)
              				{
              					if( Cf[faceI].z()<300)
              					{
              						field[faceI] = vector(20*pow((Cf[faceI].z()/10), 0.15), 0, 0);
              					}else{
              						field[faceI] = vector(30, 0, 0);
              					}
              				}
              		#};
              
              1 条回复 最后回复 回复 引用
              • First post
                Last post