Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 模型报错: `request for surfaceScalarField phi...failed`

模型报错: `request for surfaceScalarField phi...failed`

已定时 已固定 已锁定 已移动 OpenFOAM
1 帖子 1 发布者 1.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • GarethG 离线
    GarethG 离线
    Gareth
    写于 最后由 编辑
    #1

    各位老师好,我最近在尝试定义一个新的边界条件,结合timeVaryingMappedFixedValue和inletOutelt边界。在每个时间步对边界插值赋值之后,再根据边界上的通量判断入流/出流,将出流的区域设置zeroGradient,而入流区域仍采用插值结果。

    下面是我参考inletOutlet边界文件修改的updateCoeffs()函数:

    template<class Type>
    void Foam::timeVaryingInletOutletFvPatchField<Type>::updateCoeffs()
    {
        if (this->updated())
        {
            return;
        }
       
        this->operator==(fieldMapper_.map());
    // 拷贝于‘inletOutlet’边界源文件,用于判断方向并对系数赋值
        const Field<scalar>& phip =
            this->patch().template lookupPatchField<surfaceScalarField, scalar>
            (
                phiName_
            );
        this->valueFraction() = 1.0 - pos0(phip);
    //
        fixedValueFvPatchField<Type>::updateCoeffs();
    }
    

    新的边界条件能够成功编译。但在进行测试case(pimpleFoam)时,会在decomposePar分解并行区域步骤报错(直接进行单核计算也会出现相同错误):

    --> FOAM FATAL ERROR:
        request for surfaceScalarField phi from objectRegistry region0 failed
        available objects of type surfaceScalarField are 0()
        
        From function const Type& Foam::objectRegistry::lookupObject(const Foam::word&) const [with Type = Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh>] in file /home/gareth/OpenFOAM/OpenFOAM-8/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 211.
    

    以下是objectRegistryTemplates.C文件的对应内容:

            FatalErrorInFunction
                << nl
                << "    request for " << Type::typeName
                << " " << name << " from objectRegistry " << this->name()
                << " failed\n    available objects of type " << Type::typeName
                << " are" << nl
                << names<Type>();
    
            if (cacheTemporaryObject(name))
            {
                FatalErrorInFunction
                    << nl
                    << "    request for " << name << " from objectRegistry "
                    << this->name() << " to be cached failed" << nl
                    << "    available temporary objects are" << nl
                    << temporaryObjects_;
            }
            FatalErrorInFunction                 // line 211
                << abort(FatalError);            // line 212
        }
        return NullObjectRef<Type>();
    

    根据错误信息,似乎是没有找到surfaceScalarField类型的对象phi,但我只是结合inletOutlet边界,对原始的timeVaryingMappedFixedValue边界代码进行修改,并未改变其他源代码部分。并且我检查了求解器createFields.H,包含对通量phi的创建。所以我很困惑这个问题是如何产生的?

    我是刚开始接触OpenFOAM的源代码,可能犯了一些愚蠢的错误。希望各位大佬能对该问题给出一些建议。 谢谢!

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]