Openfoam中求解努塞尔数和fluent的结果相差较大,求各位大佬答疑解惑。
-
模型采用的是矩形槽道,求解器采用的是PimpleFoam。并采用如下方式添加了温度场:https://zhuanlan.zhihu.com/p/485714816
根据李老师写的求解努塞尔数的小代码,并对其进行改进,实现了实时输出,修改后的代码如下:coded { libs ( "libutilityFunctionObjects.so" ); enabled true; type coded; name printMinU; executeControl timeStep; executeInterval 200; writeControl timeStep; writeInterval 200; codeOptions #{ -I$(LIB_SRC)/meshTools/lnInclude #}; codeExecute #{ const volScalarField& T ( mesh().lookupObject<volScalarField>("T") ); const fvPatchList& patches = mesh().boundary(); std::ofstream file; file.open ("nus", std::ofstream::out | std::ofstream::app); forAll(patches, patchi) { const fvPatch& currPatch = patches[patchi]; if (currPatch.name() == "bottomWall") { fvPatchScalarField nus = T.boundaryField()[patchi]; scalar L = 0.1; scalar Timp = 343; const volScalarField& T = mesh().lookupObject<volScalarField>("T"); scalarField Tinternal = T.internalField(); scalar sumT = gSum(Tinternal * mesh().V()); scalar V = gSum(mesh().V()); scalar avgT = sumT / V; nus = T.boundaryField()[patchi].snGrad()*L/(Timp - avgT); //nus2file << "Time: " << mesh().time().timeName() << " " << nus << nl; forAll(T.boundaryField()[patchi], facei) { //Pout << mesh().C().boundaryField()[patchi][facei].x()/0.1 // << " " << nus[facei] << nl; file << "Time: " << mesh().time().timeName() << " " << mesh().C().boundaryField()[patchi][facei].x() << " " << mesh().C().boundaryField()[patchi][facei].z() << " " << nus[facei] << std::endl; } } } file.close(); #}; }
其中计算努塞尔数时,之前采用的参考温度和fluent中的温度是一样的,都是采用的300,但是求解出的努塞尔数差距过大,后来将参考温度改成实时体积平均温度,努塞尔数变大不少,但是和fluent计算得出的还是相差不少。在百度上我看有人说fluent中的努塞尔数是导出热通量以后计算的努塞尔数,而不是用采用的温度梯度。温度梯度这种计算方式与第一层网格的高度关系很大。不知道有没有大佬计算过这种问题,求解。
-
@2019201300 在 Openfoam中求解努塞尔数和fluent的结果相差较大,求各位大佬答疑解惑。 中说:
模型采用的是矩形槽道,求解器采用的是PimpleFoam。并采用如下方式添加了温度场:https://zhuanlan.zhihu.com/p/485714816
根据李老师写的求解努塞尔数的小代码,并对其进行改进,实现了实时输出,修改后的代码如下:coded { libs ( "libutilityFunctionObjects.so" ); enabled true; type coded; name printMinU; executeControl timeStep; executeInterval 200; writeControl timeStep; writeInterval 200; codeOptions #{ -I$(LIB_SRC)/meshTools/lnInclude #}; codeExecute #{ const volScalarField& T ( mesh().lookupObject<volScalarField>("T") ); const fvPatchList& patches = mesh().boundary(); std::ofstream file; file.open ("nus", std::ofstream::out | std::ofstream::app); forAll(patches, patchi) { const fvPatch& currPatch = patches[patchi]; if (currPatch.name() == "bottomWall") { fvPatchScalarField nus = T.boundaryField()[patchi]; scalar L = 0.1; scalar Timp = 343; const volScalarField& T = mesh().lookupObject<volScalarField>("T"); scalarField Tinternal = T.internalField(); scalar sumT = gSum(Tinternal * mesh().V()); scalar V = gSum(mesh().V()); scalar avgT = sumT / V; nus = T.boundaryField()[patchi].snGrad()*L/(Timp - avgT); //nus2file << "Time: " << mesh().time().timeName() << " " << nus << nl; forAll(T.boundaryField()[patchi], facei) { //Pout << mesh().C().boundaryField()[patchi][facei].x()/0.1 // << " " << nus[facei] << nl; file << "Time: " << mesh().time().timeName() << " " << mesh().C().boundaryField()[patchi][facei].x() << " " << mesh().C().boundaryField()[patchi][facei].z() << " " << nus[facei] << std::endl; } } } file.close(); #}; }
其中计算努塞尔数时,之前采用的参考温度和fluent中的温度是一样的,都是采用的300,但是求解出的努塞尔数差距过大,后来将参考温度改成实时体积平均温度,努塞尔数变大不少,但是和fluent计算得出的还是相差不少。在百度上我看有人说fluent中的努塞尔数是导出热通量以后计算的努塞尔数,而不是用采用的温度梯度。温度梯度这种计算方式与第一层网格的高度关系很大。不知道有没有大佬计算过这种问题,求解。
您好,请问Nu数这个代码直接加载controldict文件后面就行了吗,不需要再加其他的了