MFiX-DEM中的并行碰撞搜索
基于MFiX-19.2.2
DEM并行程序中的颗粒循环
在DEM并行程序中,每个进程只循环该进程包含的颗粒,并且每个进程还有一层ghost cell,用来存放另一个进程发送过来的颗粒信息。
下面添加一些代码进行实验。在calc_force_dem.f
这个文件里对颗粒做一次遍历,且输出颗粒的ID和位置坐标。需要注意的是,这里用的两个线程并行,且每个进程打开一个文本,将该进程的颗粒信息输出到自己的文本中,对于ghost cell内的颗粒,输出的时候多输出一句“is ghost:
”,并带上三个判断函数的输出值(IS_GHOST(LL), IS_ENTERING_GHOST(LL), IS_EXITING_GHOST(LL)
)来看看是否分别为ghost cell内的颗粒、是否正在进入ghost cell以及是否正在离开ghost cell。遍历完所有颗粒后,关闭文件并停止运行。代码如下:
0号进程输出的颗粒ID及位置坐标:
1号进程输出的颗粒ID和位置坐标:
可以看到每个进程的ID都是从1开始,下面对颗粒信息在Excel中进行显示。
通过对数据显示,可以看到,Proc 0(即0号进程)只包含位于左半边网格(红色实线)的颗粒,Proc 1只包含位于右半边网格(红色实线)的颗粒。并且它们都有一层ghost cell(红色虚线)用来存放另一个进程copy过来的颗粒信息。当涉及到进程边界碰撞的时候,会利用ghost cell内的颗粒信息进行碰撞计算,并行应该保证ghost cell内的颗粒与被copy的颗粒保持实时同步。
至此,大致分析了下MFiX-DEM代码并行的颗粒循环机制,即会循环该进程内内的real partcle和ghost particle,在做颗粒信息统计的时候,需要注意这些问题。例如在统计碰撞的时候,数据传输边界处的碰撞计算了两次。下面给出实际输出结果。单线程的碰撞搜索的流程可以参考这篇博客-MFiX-DEM中的碰撞搜索。
DEM并行碰撞搜索
参照上面参考的那篇博文的思路,添加如下代码,循环思路是一致的,都是两层循环,先循环每个颗粒,然后内层循环该颗粒的neighbor。不同的是这里用两个线程并行计算,输出的时候也分别输出两个进程各自的数据。代码如下:
得到0号进程的输出结果如下:
重点看最后几行。可以看到,0号进程的最后一个颗粒17与ghost cell中的第一个颗粒18进行了一次碰撞检索。
再看下面1号进程的输出结果。可以看到,1号进程的第一个颗粒1号除了和右边的2号颗粒进行了一次碰撞检索,还和左边ghost cell中的17号颗粒进行了一次检索。这两次碰撞实际上为同一个碰撞,只不过在两个进程都进行了计算。
代码:https://github.com/yinweijie/MFiX_lab/tree/master/1.neighbor_search_test
MFiX-DEM中的并行碰撞搜索的更多相关文章
- .Net中的并行编程-2.ConcurrentStack的实现与分析
在上篇文章<.net中的并行编程-1.基础知识>中列出了在.net进行多核或并行编程中需要的基础知识,今天就来分析在基础知识树中一个比较简单常用的并发数据结构--.net类库中无锁栈的实现 ...
- .Net中的并行编程-3.ConcurrentQueue实现与分析
在上文<.Net中的并行编程-2.ConcurrentQueue的实现与分析> 中解释了无锁的相关概念,无独有偶BCL提供的ConcurrentQueue也是基于原子操作实现, 由于Con ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
- .Net中的并行编程-6.常用优化策略
本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略. 一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁 ...
- .Net中的并行编程-5.流水线模型实战
自己在Excel整理了很多想写的话题,但苦于最近比较忙(其实这是借口).... 上篇文章<.Net中的并行编程-4.实现高性能异步队列>介绍了异步队列的实现,本篇文章介绍我实际工作者遇到了 ...
- .Net中的并行编程-4.实现高性能异步队列
上文<.Net中的并行编程-3.ConcurrentQueue实现与分析>分析了ConcurrentQueue的实现,本章就基于ConcurrentQueue实现一个高性能的异步队列,该队 ...
- iOS中利用UISearchBar实现搜索
先把源码贴出来 https://github.com/losedMemory/ZSSearchBar 这是我在github上写的一个Demo,大家可以看看 在大多数app中都会用到搜索功能,那么搜 ...
- 对图片进行索引,存入数据库sqlite3中,实现快速搜索打开
对图片进行索引,存入数据库中,实现快速搜索打开 这个任务分为两步: 第一步:建立索引 import os import shutil import sqlite3 # 扫描函数,需扫描路径目录处 ...
- 1.3 正则表达式和Python语言-1.3.5使用 search()在一个字符串中查找模式(搜索与匹配 的对比)
1.3.5 使用 search()在一个字符串中查找模式(搜索与匹配的对比) 其实,想要搜索的模式出现在一个字符串中间部分的概率,远大于出现在字符串起始部分的概率.这也就是 search()派上用场的 ...
随机推荐
- 记一次"截图"功能的项目调研过程!
目录 项目需求 功能调研 AWT Swing Html2Image PhantomJS Headless Chrome 实现方案 结论 项目需求 最近,项目接到了一个新需求,要求对指定URL进行后端模 ...
- Redis学习(一)认识并安装redis
一.初识redis Redis是一个开源的Key-Value数据库,通常被称为数据结构服务器,其值可以是多种常见的数据格式,且读写性能极高,且所有操作都是原子性的. Redis是运行在内存中的,但是可 ...
- 刷题[FBCTF2019]Event
解题思路 信息收集 打开发现是这样的登陆框,信息泄露,弱口令什么的尝试一下,无果,正常注册登陆 发现需要通过admin用户登陆,并且发现有/flag这样的路由,猜测后台为python编写 抓包发现有看 ...
- Redis利用,攻击内网(ssrf)
Redis语法 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C ...
- python库之argparse
先运行一个干净的argparse 由于没有添加任何参数,所以只能用自带的 -h(--help)参数 现在来加一个参数 所以echo为必填项 描述在-h时会出现 type=int指定参数只能是数字,否则 ...
- subDomainsBrute安装(windows系统)
step1: 安装python2.7(省略) step2: 下载subDomainsBrute 地址: https://github.com/lijiejie/subDomainsBrute 下载 ...
- 几个超级好用但很少有人知道的 webstorm技巧
我总结一些我发现的比较实用的功能,内容来自日常工作中用到的功能.图片来自PPT,是在公司内部的分享. 你不知道的webstorm进阶使用技巧 1.双击shift 全局搜索,可以搜索代码.设置等. 如果 ...
- 在vue中使用天气插件
在vue中使用天气插件 插件网址: 中国天气 选择自己需要的插件.生成代码复制即可 在 vue 中的使用: template 中 <div id="weather-v2-plugin ...
- Linux 虚拟机绑定静态 IP
环境介绍 Machine: NUC8i5BEK OS: macOS Catalina 10.15.6 VirtualBox: 6.1.12 r139181 (Qt5.6.3) CentOS: 8.2. ...
- Android Handler 分析学习
一.Handler简介 Handler 是 Android 中用于线程间交互的机制.与其相关的概念有 Thread.Looper.Runnable.Message.MessageQueue 等. Go ...