求助:如何在边界a上索引边界b的值,且可以并行(包含多种边界值获取方式)
-
为了实现一些特殊需求,所以需要两个边界相互交互。但是修改后的边界条件仅在串行条件下可以运行。
下述代码为例:
//~in patch label patchi = this->patch().boundaryMesh().findPatchID(patchName_); const volScalarField& paraGet = this->db().objectRegistry::lookupObject<volScalarField>("paraA");//这一步可以正常运行 const scalarField& para = paraGet.boundaryField()[patchi];//这一步OK Info << para << endl;//这一步在并行条件下会报错,也就是引用的对象在使用的时候会报错
在此基础上,我修改了代码,发现如果不是引用,直接取值,也会报错,因此可以断定是取边界值的函数在并行条件下有问题。
报错代码
//~in patch label patchi = this->patch().boundaryMesh().findPatchID(patchName_); const volScalarField& paraGet = this->db().objectRegistry::lookupObject<volScalarField>("paraA");//这一步可以正常运行 const scalarField para = paraGet.boundaryField()[patchi];////这一步在并行条件下会报错
最后,也尝试过从网格转移获取边界值,但是并行时也会在取值时报错。
//~in patch label patchi = this->patch().boundaryMesh().findPatchID(patchName_); const volScalarField& paraGet = this->db().objectRegistry::lookupObject<volScalarField>("paraA");//这一步可以正常运行 const fvMesh& mesh = patch().boundaryMesh().mesh();//正常运行 const fvPatchField<scalar>& para = mesh.boundary()[patchi].lookupPatchField<volScalarField, scalar>("paraA");//这一步可以正常运行 Info << para << endl;//这一步在并行条件下会报错,也就是引用的对象在使用的时候会报错
所以想向各位老师和同僚请教下怎么处理这种问题