externalFlowAroundObstacle.cpp

这个算例里,particle是不影响流体的,文中注释表明该算例的particles仅仅是可视化的作用,用于绘制流线图。

主要内容为:
使用的是DenseParticleField3D。

 typedef DenseParticleField3D<T,DESCRIPTOR> ParticleFieldT;

定义参数。

    int particleTimeFactor;             // If the particle time factor is 2, then the integration time step//   for the particles is twice that of the fluid.T particleProbabilityPerCell;       // Probability of injection of a particle at an injection cell at each time step.T cutOffSpeedSqr;                   // Criterion to eliminate particles with very small velocity.int maxNumParticlesToWrite;         // Maximum number of particles in the output VTK files.

定义MultiParticleField3D,particleArg,particleFluidArg,particleArg与cutOffSpeedSqr一起集成到AdvanceParticlesEveryWhereFunctional3D中,用于更新particles位置,数据处理器level为0,particleFluidArg与particleTimeFactor一起集成到FluidToParticleCoupling3D,用于更新particles速度,数据处理器level为1。
定义injectionDomain,用于后续输出particles时使用。
定义PointParticle3D至模板particleTemplate,从src源码来看,第一个是tag,第二个是坐标,第三个是速度,该particleTemplate用于后续输出particles时使用。
定义particleInjectionArg,与particleTemplate,particleProbabilityPerCell,injectionDomain一起被集成到InjectRandomParticlesFunctional3D里,数据处理器level为0。

定义出口Box3D absorbtionDomain(param.outlet);,这里直接用了流场的出口位置,集成到数据处理器AbsorbParticlesFunctional3D上,level为0。

执行数据处理器particles->executeInternalProcessors();

 MultiParticleField3D<ParticleFieldT>* particles = 0;particles = new MultiParticleField3D<ParticleFieldT> (lattice->getMultiBlockManagement(),defaultMultiBlockPolicy3D().getCombinedStatistics() );std::vector<MultiBlock3D*> particleArg;particleArg.push_back(particles);std::vector<MultiBlock3D*> particleFluidArg;particleFluidArg.push_back(particles);particleFluidArg.push_back(lattice);// Functional that advances the particles to their new position at each predefined time step.integrateProcessingFunctional (new AdvanceParticlesEveryWhereFunctional3D<T,DESCRIPTOR>(param.cutOffSpeedSqr),lattice->getBoundingBox(), particleArg, 0);// Functional that assigns the particle velocity according to the particle's position in the fluid.integrateProcessingFunctional (new FluidToParticleCoupling3D<T,DESCRIPTOR>((T) param.particleTimeFactor),lattice->getBoundingBox(), particleFluidArg, 1 );// Definition of a domain from which particles will be injected in the flow field.Box3D injectionDomain(0, 0, centerLB[1]-0.25*param.ny, centerLB[1]+0.25*param.ny,centerLB[2]-0.25*param.nz, centerLB[2]+0.25*param.nz);// Definition of simple mass-less particles.Particle3D<T,DESCRIPTOR>* particleTemplate=0;particleTemplate = new PointParticle3D<T,DESCRIPTOR>(0, Array<T,3>(0.,0.,0.), Array<T,3>(0.,0.,0.));// Functional which injects particles with predefined probability from the specified injection domain.std::vector<MultiBlock3D*> particleInjectionArg;particleInjectionArg.push_back(particles);integrateProcessingFunctional (new InjectRandomParticlesFunctional3D<T,DESCRIPTOR>(particleTemplate, param.particleProbabilityPerCell),injectionDomain, particleInjectionArg, 0 );// Definition of an absorbtion domain for the particles.Box3D absorbtionDomain(param.outlet);// Functional which absorbs the particles which reach the specified absorbtion domain.integrateProcessingFunctional (new AbsorbParticlesFunctional3D<T,DESCRIPTOR>, absorbtionDomain, particleArg, 0 );particles->executeInternalProcessors();

循环时,用于输出vtk文件。

if (i % param.vtkIter == 0) {pcout << "Writing VTK at time t = " << i*param.dt << endl;writeVTK(*boundaryCondition, i);if (param.useParticles) {writeParticleVtk<T,DESCRIPTOR> (*particles, createFileName(outputDir+"particles_", i, PADDING) + ".vtk",param.dx, param.maxNumParticlesToWrite );}}

在lattice进行碰撞迁移循环的时候,对particles也进行数据处理器的执行。

     lattice->executeInternalProcessors();lattice->incrementTime();if (param.useParticles && i % param.particleTimeFactor == 0) {particles->executeInternalProcessors();}

小总结

如果想在流场中定义一个仅用于绘制流线图的particles,首先需要定义必须的参数,接着定义particleArg用于更新位置,particleFluidArg用于更新速度,particleInjectionArg用于生产particles,其次还需要particleTemplate来决定生产何种种类的particles,injectionDomain和absorbtionDomain用于决定生成和消除particles的区域位置。集成完毕后在lattice碰撞迁移后面增加particles->executeInternalProcessors();即可。

Palabos程序代码解读 | particle应用externalFlowAroundObstacle.cpp | 如何绘制流线图相关推荐

  1. 【GNSS】GREAT多频多系统GREAT-UPD开源代码-第4.1章 代码解读之gnss.h/gnss.cpp

    GREAT多频多系统GREAT-UPD开源代码-第4.1章 代码解读之gnss.h/gnss.cpp 第4.1章 代码解读之gnss.h/gnss.cpp 1. GNSS系统设定 ///< GN ...

  2. LOAM论文和程序代码的解读

    目的 LOAM是KITTI测试中排名第一的状态估计和激光建图方法,知名度很高,在它的基础上衍生出了很多改进版本,例如LEGO-LOAM.LLOAM.ALOAM.Inertial-LOAM等等. 本文对 ...

  3. VINS-Mono代码解读——状态估计器流程 estimator 写在初始化和非线性优化前

    前言 本文主要介绍VINS的状态估计器模块(estimator),主要在代码中/vins_estimator节点的相关部分实现. 这个模块可以说是VINS的最核心模块,从论文的内容上来说,里面的内容包 ...

  4. 200行代码解读TDEngine背后的定时器

    作者 | beyondma来源 | CSDN博客 导读:最近几周,本文作者几篇有关陶建辉老师最新的创业项目-TdEngine代码解读文章出人意料地引起了巨大的反响,原以为C语言已经是昨日黄花,不过从读 ...

  5. matlab绘制频散曲线,Matlab绘制频散曲线程序代码.docx

    Matlab绘制频散曲线程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...

  6. vins 解读_代码解读 | VINS 视觉前端

    AI 人工智能 代码解读 | VINS 视觉前端 本文作者是计算机视觉life公众号成员蔡量力,由于格式问题部分内容显示可能有问题,更好的阅读体验,请查看原文链接:代码解读 | VINS 视觉前端 v ...

  7. jsoup获得css,Jsoup代码解读之五-实现一个CSS Selector

    Jsoup代码解读之七-实现一个CSS Selector 当当当!终于来到了Jsoup的特色:CSS Selector部分.selector也是我写的爬虫框架webmagic开发的一个重点.附上一张s ...

  8. 栈区,堆区,全局区,文字常量区,程序代码区详解(程序中不同类型数据所在区)

    一.预备知识-程序的内存分配     一个由C/C++编译的程序占用的内存分为以下几个部分     1.栈区(stack)-   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其   ...

  9. softmax理论及代码解读——UFLDL

    前言 看了各种softmax以后迷迷糊糊的,还是研究一下UFLDL的教程稳点.当然还是得参考挺多教程的:UFLDL-softmax .Softmax的理解与应用 .Logistic 分类器与 soft ...

最新文章

  1. codevs 2879 堆的判断
  2. 双击打开excel时提示:向程序发送命令时出现问题
  3. 从零开始入门 K8s | 应用存储和持久化数据卷:核心知识
  4. 最短路(hdu4725)(建点巧妙)
  5. Java动态代理一览笔录
  6. 比尔盖茨:若新冠病毒疫苗有效 富裕国家在2021年底恢复正常
  7. c++ 优先队列_数据结构 | TencentOStiny中队列、环形队列、优先级队列的实现及使用...
  8. 吴恩达机器学习(十五)大规模机器学习(Batch、Stochastic、Mini-batch gradient descent、MapReduce)
  9. Linux基金会要“下田”了!开源技术在农业领域能做什么?
  10. ansible 小试身手
  11. 前端每日实战:98# 视频演示如何用纯 CSS 创作一只愤怒小鸟中的绿猪
  12. MATLAB--求解矩阵方程
  13. 前端点击按钮下载图片
  14. 双11,立减¥3554!戴尔官网撩客服砍价带走高性能电脑,速来!
  15. 上海自考计算机应用基础实践,2001年4月份全国高教自考计算机应用基础试题及答案...
  16. 适用于 Windows 操作系统的远程服务器管理工具 (RSAT)
  17. 使用pyecharts绘制各个3D图表代码示例整理和分享
  18. imshow 显示图像(Matlab)
  19. asp.net基于net的小美果蔬批发网-蔬菜商城系统-计算机毕业设计
  20. 《Smart Contract Development: Challenges and Opportunities》论文笔记

热门文章

  1. iFunk品牌影响力不断攀升
  2. 关于渐变纹理图表编辑工具的开发及基础应用
  3. 基于亚像素的图像测量仪标定算法(满视场棋盘格,张正友标定法)
  4. go mirco 微服务框
  5. usb4与雷电4的区别
  6. 电子制造业如何进行物料编码管理,提高物料管理效率?
  7. 哈罗出行2019年4月22日 找零钱问题(动态规划)
  8. hugeng007_RandomForestClassifier_demo
  9. python中exp函数_Python3中exp()函数用法分析
  10. 2019年最硬核科技