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



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

    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);
    }


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



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



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



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



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



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



  • @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);
    
    }

Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2