新手小白求教,有没有能够通过读取向量文件数据获取动边界速度的功能
-
@yzxwh 确实有点奇怪,可能我理解有误。
timeVaryingMappedFixedValue
读取数据主要用了MappedFile.C
中的checkTable
函数。觉得把初始化中的这两行代码移到初始化括号外,每次运行应该就会更新文件夹中的时间文件夹。// Read the times for which data is available const fileName samplePointsDir = samplePointsFile.path(); sampleTimes_ = Time::findTimes(samplePointsDir);
MappedFile.C
中部分代码:template<class Type> void Foam::PatchFunction1Types::MappedFile<Type>::checkTable ( const scalar t ) const { const polyMesh& mesh = this->patch_.boundaryMesh().mesh(); const Time& time = mesh.time(); // Initialise if (!mapperPtr_) { ... // Read the times for which data is available const fileName samplePointsDir = samplePointsFile.path(); sampleTimes_ = Time::findTimes(samplePointsDir); DebugInfo << "In directory " << samplePointsDir << " found times " << pointToPointPlanarInterpolation::timeNames(sampleTimes_) << endl; }
-
-
@yzxwh 这块我没接触过,说下自己的理解:
- 如果不人为调整,后面自动生成的
pointmotionU
,不同时刻的结果是不一样,还是一直等同于初始0文件中设定的值? - 大致看了下程序,
velocityLaplacianFvMotionSolver
是继承velocityMotionSolver
,pointMotionU_
在velocityMotionSolver.C
中已经定义,在主函数中就不需要重复定义了。即使主函数定义了,读取的数值也没传递到定义的类中,也没起到作用。
velocityLaplacianFvMotionSolver.C
里边有个updateCoeffs()
,正常是通过这里更新数值。如果自动生成的pointmotionU
一直都是一样的,考虑在updateCoeffs()
前强制增加读取文件试试
pointmotionU_.read();
- 后面计算网格量大的话,单进程估计计算太慢。不过可以先把单进程调试通,再考虑如何改并行程序。
- 如果不人为调整,后面自动生成的
-
@coolhhh 万分感谢大佬的指点,回答一下第一点:后面生成的pointmotionU的确是不一样的,我可能表达有误,由于圆管的运动是通过别的软件生成决定的,所以圆管的运动数据是实时传输到of里面的。of里面的动边界相当于我另一个软件的圆管,但他的运动完全由那边所决定,我的想法是在运行过程中修改最新时步的pointmotionU文件最下面几行的边界条件代码,举个例子 如第一张图所示这是当前最新时刻的边界速度,我通过python强行修改了这个边界速度如下图
我是想让下一步能够以修改的边界条件进行运算,以此类推,往后每一步都会修改边界速度,然后下一步以新的边界速度运算,不过我的尝试没有成功,pointmotionU边界的读取似乎只与初始时刻相关。
关于大佬说的剩下三点我再好好理解理解,再次感谢大佬的悉心指点。 -
@coolhhh 大佬,我这边在velocityLaplacianFvMotionSolver.C添加了读取文件的代码pointmotionU_.read();文件的确是每个时步都被读取了,但是读取的边界条件一直是修改之前的。我还采用赋值的方法强行给pointmotionU_赋值,代码如下
强制读取当前时刻修改后的pointmotionu的数据存到temppointmotionu中然后再赋给pointmotionu,两个结果都在运算中打印出来了,结果发现,temppointmotionu是成功读取修改后数据的,但是赋值后的pointmotionu依旧是修改前的数据。是否是该类型无法被直接赋值,望指点。