CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    编写一个只提供边界条件即可以监测受力大小的函数

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

      请教大家一个编程问题,如何将这个监测受力的文件编写成一个函数,并且只提供边界名称作为参数,以后受力监测只需要调用该函数,并且提供边界名称即可,希望能得到大家的帮助。

      forces_object
      {
      type forces;
      functionObjectLibs ("libforces.so");
      
      //writeControl outputTime;
      writeControl   timeStep;
      writeInterval  1;
      
      //// Patches to sample
      //patches ("body1" "body2" "body3");
      patches ("cylinder");
      
      //// Name of fields
      pName p;
      Uname U;
      
      //// Density
      rho rhoInf;
      rhoInf 1.;
      
      //// Centre of rotation
      CofR (0 0 0);
      }
      
      X 1 条回复 最后回复 回复 引用
      • X
        xpqiu 教授 @波流力 最后由 编辑

        @波流力 找到 src/functionObjects/forces 目录,改造下面的 forces.H 和 forces.C,看懂他是怎么计算受力的,然后把有用的部分拿出来,写成一个新函数。需要处理的问题主要有两个,一个是把跟 functionObjects框架的部分剥离,另一个是用其他方式提供本来是有functionObjects框架提供的变量,主要是湍流接口,U场和p场。

        波 1 条回复 最后回复 回复 引用
        • 波
          波流力 @xpqiu 最后由 编辑

          @xpqiu 好的,非常感谢,我试试看能不能弄,解决不了就使用他原来的函数,就是太麻烦了。因为我做的是群桩的数值模拟,要监测近百根圆柱的受力实在太麻烦了。

          X 1 条回复 最后回复 回复 引用
          • X
            xpqiu 教授 @波流力 最后由 编辑

            @波流力 是要每个圆柱的受力分开监控吗?

            波 1 条回复 最后回复 回复 引用
            • 波
              波流力 最后由 编辑

              是的,需要分别监测单根圆柱的受力大小。

              1 条回复 最后回复 回复 引用
              • 波
                波流力 @xpqiu 最后由 编辑

                @xpqiu 试看了一下代码,基础太差了,搞不成~~~~~~~

                1 条回复 最后回复 回复 引用
                • B
                  BlookCFD 最后由 编辑

                  把patches以外的内容,单独写成一个文件,然后include进来,应该就可以

                  波 1 条回复 最后回复 回复 引用
                  • 波
                    波流力 @BlookCFD 最后由 李东岳 编辑

                    @BlookCFD 解决了,受到下面代码的启发,即重复利用代码,更新边界名称即可

                      p
                        {
                            solver           GAMG;
                            tolerance        1e-6;
                            relTol           0;
                            smoother         GaussSeidel;
                            nPreSweeps       0;
                            nPostSweeps      2;
                            cacheAgglomeration on;
                            agglomerator     faceAreaPair;
                            nCellsInCoarsestLevel 100;
                            mergeLevels      1;
                        }
                    
                        pFinal
                        {
                            $p;
                            relTol          0;
                        }
                    
                    最后的要实现结果如下图:
                     forceCoeffs_object
                        {
                    	// rhoInf - reference density
                    	// CofR - Centre of rotation
                    	// dragDir - Direction of drag coefficient
                    	// liftDir - Direction of lift coefficient
                    	// pitchAxis - Pitching moment axis
                    	// magUinf - free stream velocity magnitude
                    	// lRef - reference length
                    	// Aref - reference area
                    	type forceCoeffs;
                    	functionObjectLibs ("libforces.so");
                    	//patches ("body1" "body2" "body3");
                    	patches (C0);
                    
                    	pName p;
                    	Uname U;
                    	rho rhoInf;
                    	rhoInf 1.0;
                    
                    	//// Dump to file
                    	log true;
                    
                    	CofR (0.0 0 0);
                    	liftDir (0 1 0);
                    	dragDir (1 0 0);
                    	pitchAxis (0 0 1);
                    	magUInf 1.0;
                    	lRef 1.0;         // reference lenght for moments!!!
                    	Aref 2.0;         // reference area 1 for 2d
                    
                            writeControl   timeStep;
                            writeInterval  1;
                        }
                    
                    //监测新的边界条件,只需要重复利用代码,更新边界名称即可
                    C1
                    {
                    $forceCoeffs_object
                    	patches (C1);
                    
                    }
                    1 条回复 最后回复 回复 引用
                    • First post
                      Last post