从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]
            )
        );
    

    这个报错第一次遇到,有没有小伙伴和大佬能指点指点,感激不尽。


  • OpenFOAM副教授

    首先你的计算看起来发散了,出现了“bounding k xxx”。一般情况下不应该出现这个,而且显示算出来的k都是负值,这个明显不对。

    其次,一般情况下出现“request for xxx from objectRegisttry failed”是因为你计算中需要什么东西而你没有提供或者它没有识别到。看提示它需要你提供fluid的各种参数设置,而你的算例没有,方便的话把整个算例贴上来看看。



  • aaa.zip
    这是我的完整算例(求解器的温度方程和创建流体场的代码也在其中),目前有关湍流模型需要用到的边界条件(nut、k、Omega、alphat、Pr)我还不能确定,所以应该会发散,只是这个报错让我不解。


  • OpenFOAM副教授

    @一颗鸭蛋 不好意思啊这几天才有时间看这个。这个是你自己添加了新的输运模型的模块么?一下子看不出来什么问题,求解器好像也是新的。你说的下一步是求解温度方程是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壁面函数。真是很奇怪呀。


Log in to reply
 

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