从objectRegistry中无法获得输运字典问题
-
使用了湍流模型的流固耦合求解器计算一个流固耦合算例(封闭方腔传热问题)时出现了如下报错:
Region: fluid Courant Number mean: 0 max: 0 Region: fluid Courant Number mean: 0 max: 0 Time = 0.01 Solving for fluid region fluid DILUPBiCG: Solving for Ux, Initial residual = 0, Final residual = 0, No Iterations 0 DILUPBiCG: Solving for Uy, Initial residual = 0, Final residual = 0, No Iterations 0 DILUPBiCG: Solving for Uz, Initial residual = 0, Final residual = 0, No Iterations 0 GAMGPCG: Solving for p, Initial residual = 0, Final residual = 0, No Iterations 0 time step continuity errors : sum local = 0, global = 0, cumulative = 1(0) DILUPBiCG: Solving for omega, Initial residual = 0.3364115726, Final residual = 9.041867288e-08, No Iterations 81 DILUPBiCG: Solving for k, Initial residual = 1, Final residual = 9.098095726e-08, No Iterations 158 bounding k, min: -36.19837748 max: -14.87872514 average: -18.05165843 [6] [6] [1] --> FOAM FATAL ERROR: [1] request for dictionary transportProperties from objectRegistry fluid failed available objects of type dictionary are 5 ( RASProperties// fvSchemes fvSolution data turbulenceModel ) [1] [1] [1] From function objectRegistry::lookupObject<Type>(const word&) const [1] in file /home/kdd/OpenFOAM/OpenFOAM-2.3.1/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 198. [1] FOAM parallel run aborting
算例接下去是求解温度方程,无法获得输运字典的参数进而不能往下计算。
查看了一些相关的帖子,一般都是某个变量没有注册对象导致错误。但我这个报错直接是输运字典错误,并且对于提示的五个可获得的字典也看不出有任何关联。
在求解器的流体区创建场的相关代码也写了:如下forAll(fluidRegions, i) { Info<< "*** Reading fluid mesh thermophysical properties for region " << fluidRegions[i].name() << nl << endl; IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), fluidRegions[i], IOobject::MUST_READ, IOobject::NO_WRITE ) ); Info<< " Adding to TFluid\n" << endl; TFluid.set ( i, new volScalarField ( IOobject ( "T", runTime.timeName(), fluidRegions[i], IOobject::MUST_READ, IOobject::AUTO_WRITE ), fluidRegions[i] ) ); laminarTransportFluid.set//jiade ( i, new singlePhaseTransportModel(UFluid[i], phiFluid[i]) ); Info<< " Adding to turbulence\n" << endl;//jiade turbulenceFluid.set ( i, incompressible::turbulenceModel::New ( UFluid[i], phiFluid[i], laminarTransportFluid[i] ).ptr() ); Info<< " Adding to alphatFluid\n" << endl;//jiade alphatFluid.set//jiade ( i, new volScalarField ( IOobject ( "alphat", runTime.timeName(), fluidRegions[i], IOobject::MUST_READ, IOobject::AUTO_WRITE ), fluidRegions[i] ) );
这个报错第一次遇到,有没有小伙伴和大佬能指点指点,感激不尽。
-
首先你的计算看起来发散了,出现了“bounding k xxx”。一般情况下不应该出现这个,而且显示算出来的k都是负值,这个明显不对。
其次,一般情况下出现“request for xxx from objectRegisttry failed”是因为你计算中需要什么东西而你没有提供或者它没有识别到。看提示它需要你提供fluid的各种参数设置,而你的算例没有,方便的话把整个算例贴上来看看。
-
aaa.zip
这是我的完整算例(求解器的温度方程和创建流体场的代码也在其中),目前有关湍流模型需要用到的边界条件(nut、k、Omega、alphat、Pr)我还不能确定,所以应该会发散,只是这个报错让我不解。 -
@一颗鸭蛋 不好意思啊这几天才有时间看这个。这个是你自己添加了新的输运模型的模块么?一下子看不出来什么问题,求解器好像也是新的。你说的下一步是求解温度方程是solveFluid_MHD.H这个文件里面的内容么,有没有试过一行一行的去调试这个里面的代码,比如让它随便输出个啥,这样可以找出来到底是哪里有问题。
-
@cccrrryyy 的确添加了新的输运模块,在流体区求解温度方程(solveFluid_MHD.H),同时也会在固体区求解温度方程(流固耦合),只是目前还没有计算到固体区。调过一些可能有问题的代码,但依然存在这个问题。给我的直觉是湍流热扩散系数的计算有问题,但检查过后没发现问题(或者发现不了)
-
PtrList<IOdictionary> transportProperties(fluidRegions.size()); forAll(fluidRegions, i) { Info<< "*** Reading fluid mesh thermophysical properties for region " << fluidRegions[i].name() << nl << endl; Info<< "Reading transportProperties\n" << endl; transportProperties.set ( i, new IOdictionary ( IOobject ( "transportProperties", //runTime.timeName(), runTime.constant(), fluidRegions[i], IOobject::MUST_READ, IOobject::NO_WRITE ) ) ); } forAll(fluidRegions, i) { //const IOdictionary& dict = fluidRegions[i].thisDb() // .lookupObject<IOdictionary>("transportProperties"); const IOdictionary& dict = fluidRegions[i].thisDb() .lookupObject<IOdictionary>("transportPropertie"); }
Log, appear in the List:
Reading transportProperties --> FOAM FATAL ERROR: request for dictionary transportPropertie from objectRegistry bottomAir failed available objects of type dictionary are 3 ( fvSchemes fvSolution transportProperties //get it! )
-
@马乔 我这个报错已经解决了,是流体区零文件下的alphat文件的壁面边界条件不能使用alphatJayatilleWallFunction函数。但是具体具体为什么不能使用我并不知道其中缘由。也许你可以调试一下边界条件。
该壁面函数我在单域方腔绝缘算例中是能够使用的,但是在流固耦合求解器计算的流固耦合算例中却会报类似上述错误。希望了解该函数的朋友能够讲解一番,不胜感激。 -
@马乔 您好,我参照你的方法将transportProperties代码写进去,但是很奇怪的是,报错显示,request for dictionary transportPropertie ,而可获得的字典里是transportProperties,两者总是存在单复数的差别(就像你贴的代码里一样)。本来想着直接用令锑度边界条件绕开这个错误,但是最近发现还是得用alphat壁面函数。真是很奇怪呀。