已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Palabos (/)PalaBos的是一款高效的流体模拟及其建模库,开发基于C的STL(标准模板库),有极强的拓展性!尽管其源代码是开放,但是基于PalaBos的FlowKit公司已于2011年9月开始运营(/),主要为流体力学相关领域提供解决方案,并定制软件。主要的开发者为我的日内瓦朋友Jonas Latt博士,另外一个重要开发成员Orestis博士也是我的合作者和好朋友,其主要的贡献在于湍流模型和多块加密的代码的开发。在版本1.0中,目前二维的多块加密是可用的,三维的曲面边界可用,需要提供stl几何文件(参:examples/showCases/aneurysm)。PalaBos的主要特点在于,其在并行结构上采取并行机制与模型分离的方式,使得应用建模与并行机制不相关。这也使得PalaBos的易于扩展。下面举例来说明其代码特点:对于二维计算下面两个基本的文件必须包括#include palabos2D.h#include palabos2D.hh#include #include #include #include #include 基本的名字空间using namespace plb;using namespace plb:descriptors;using namespace std;typedef double T;基本模型的描述。对于PalaBos,众多模型的应用,都是通过DnQmDescriptor来描述的。用户可自定义! #define DESCRIPTOR D2Q9Descriptor初场的定义,建议使用这种方法T poiseuilleVelocity(plint iY, IncomprFlowParam const& parameters) T y = (T)iY / parameters.getResolution();return 4.*parameters.getLatticeU() * (y-y*y);压力的定义T poiseuillePressure(plint iX, IncomprFlowParam const& parameters) T Lx = parameters.getNx()-1;T Ly = parameters.getNy()-1;return 8.*parameters.getLatticeNu()*parameters.getLatticeU() / (Ly*Ly) * (Lx/(T)2-(T)iX);密度场的定义T poiseuilleDensity(plint iX, IncomprFlowParam const& parameters) return poiseuillePressure(iX,parameters)*DESCRIPTOR:invCs2 + (T)1;根据坐标进行速度初始化templateclass PoiseuilleVelocity public:PoiseuilleVelocity(IncomprFlowParam parameters_): parameters(parameters_) void operator()(plint iX, plint iY, Array& u) const u0 = poiseuilleVelocity(iY, parameters);u1 = T();private:IncomprFlowParam parameters;根据坐标进行密度初始化templateclass PoiseuilleDensity public:PoiseuilleDensity(IncomprFlowParam parameters_): parameters(parameters_) T operator()(plint iX, plint iY) const return poiseuilleDensity(iX,parameters);private:IncomprFlowParam parameters;零速度场初始化templateclass PoiseuilleDensityAndZeroVelocity public:PoiseuilleDensityAndZeroVelocity(IncomprFlowParam parameters_): parameters(parameters_) void operator()(plint iX, plint iY, T& rho, Array& u) const rho = poiseuilleDensity(iX,parameters);u0 = T();u1 = T();private:IncomprFlowParam parameters;枚举类型,表示边界类型enum InletOutletT pressure, velocity;建立几何void channelSetup( MultiBlockLattice2D& lattice,IncomprFlowParam const& parameters,OnLatticeBoundaryCondition2D& boundaryCondition,InletOutletT inletOutlet )const plint nx = parameters.getNx();const plint ny = parameters.getNy();下边界boundaryCondition.setVelocityConditionOnBlockBoundaries (lattice, Box2D(0, nx-1, 0, 0) );上边界boundaryCondition.setVelocityConditionOnBlockBoundaries (lattice, Box2D(0, nx-1, ny-1, ny-1) );设置相关边界if (inletOutlet = pressure) boundaryCondition.setPressureConditionOnBlockBoundaries (lattice, Box2D(0,0, 1,ny-2) );boundaryCondition.setPressureConditionOnBlockBoundaries (lattice, Box2D(nx-1,nx-1, 1,ny-2) );else boundaryCondition.setVelocityConditionOnBlockBoundaries (lattice, Box2D(0,0, 1,ny-2) );boundaryCondition.setVelocityConditionOnBlockBoundaries (lattice, Box2D(nx-1,nx-1, 1,ny-2) );设置常密度和速度,边界的速度和密度同时被施加setBoundaryDensity (lattice, lattice.getBoundingBox(),PoiseuilleDensity(parameters) );setBoundaryVelocity (lattice, lattice.getBoundingBox(),PoiseuilleVelocity(parameters) );初始化平衡态initializeAtEquilibrium (lattice, lattice.getBoundingBox(),PoiseuilleDensityAndZeroVelocity(parameters) );初始化模拟系统lattice.initialize();图片文件保存void writeGif(MultiBlockLattice2D& lattice, plint iter)const plint imSize = 600;ImageWriter imageWriter(leeloo);imageWriter.writeScaledGif(createFileName(u, iter, 6),*computeVelocityNorm(lattice),imSize, imSize );VTK 保存void writeVTK(MultiBlockLattice2D& lattice,IncomprFlowParam const& parameters, plint iter)T dx = parameters.getDeltaX();T dt = parameters.getDeltaT();VtkImageOutput2D vtkOut(createFileName(vtk, iter, 6), dx);vtkOut.writeData(*computeVelocityNorm(lattice), velocityNorm, dx/dt);vtkOut.writeData(*computeVelocity(lattice), velocity, dx/dt);计算均方根误差T computeRMSerror ( MultiBlockLattice2D& lattice,IncomprFlowParam const& parameters )MultiTensorField2D analyticalVelocity(lattice);setToFunction( analyticalVelocity, analyticalVelocity.getBoundingBox(),PoiseuilleVelocity(parameters) );MultiTensorField2D numericalVelocity(lattice);computeVelocity(lattice, numericalVelocity, lattice.getBoundingBox();return 1./parameters.getLatticeU() *std:sqrt( computeAverage( *computeNormSqr(*subtract(analyticalVelocity, numericalVelocity) ) );主函数int main(int argc, char* argv) plbInit(&argc, &argv);global:directories().setOutputDir(./tmp/);基本参数,Orestis为我加入了另外的个构造函数,可直接在物理空间中定义这些参数!后续我将给出分析!IncomprFlowParam parameters(T) 2e-2, / uMax(T) 5., / Re60, / N3., / lx1. / ly);const T logT = (T)0.1;const T imSave = (T)0.5;const T vtkSave = (T)2.;const T maxT = (T)15.1;const InletOutletT inletOutlet = velocity;写日志文件writeLogFile(parameters, Poiseuille flow);使用MultiBlockLatticeMultiBlockLattice2D lattice (parameters.getNx(), parameters.getNy(),设置松弛参数new BGKdynamics(parameters.getOmega() );声明边界OnLatticeBoundaryCondition2D*boundaryCondition = createLocalBoundaryCondition2D();channelSetup(lattice, parameters, *boundaryCondition, inletOutlet);主循环for (plint iT=0; iT*parameters.getDeltaT()maxT; +iT) if (iT%parameters.nStep(imSave)=0) pcout Saving Gif . 0) pcout Saving VTK file . endl;writeVTK(lattice, parameters, iT);if (iT%parameters.nStep(logT)=0) pcout step iT ; t= iT*parameters.getDeltaT() ; RMS error= computeRMSerror(lattice, parameters);Array uCenter;lattice.get(parameters.getNx()/2,parameters.getNy()/2).computeVelocity(uCenter);pcout ; center velocity= uCenter0/parameters.getLatticeU() endl;碰撞迁移,此函数不再有bool类型参数,其不同于Openlblattice.collideAndStream();删除边界对象delete boundaryCondition;由此上面代码可以看出,PalaBos的结构是非常清晰的,用户在实现过程也异常的简单!以上资料出自/s/blog_6a40fba10100znv9.htmlParaview (/) Par
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国加热型挡风玻璃行业市场前景预测及投资价值评估分析报告
- 2026年中国焖锅行业市场前景预测及投资价值评估分析报告
- 2025广西百色田林县事业单位定向招聘2020-2022届服务期满“三支一扶”人员12人考试笔试备考试题及答案解析
- 2025黑龙江鸡西市邮政管理局招聘公益岗位就业人员1人笔试考试备考题库及答案解析
- 2026上海松江区教育系统第一批教师招聘742人考试笔试参考题库附答案解析
- 2025江苏苏州市健康养老产业发展集团有限公司下属子企业招聘4人(第五批)笔试考试参考试题及答案解析
- 老年痴呆护理要点
- 耐药菌感染防控策略探讨
- 抗生素临床使用核心原则培训
- 2025年办公楼装修合同协议
- 【MOOC】《创业团队建设与管理》(首都经济贸易大学)章节期末慕课答案
- MOOC 食品营养学-福建农林大学 中国大学慕课答案
- 人教版高中物理必修一导学案(全册)
- 变电运维管理规定(试行)第3分册组合电器运维细则
- 《小英雄雨来》整本书阅读教学设计
- 气箱脉冲袋式除尘器说明书
- 比较思想政治教育学11
- 病人欠费催缴通知单
- GB/T 23180-2008饲料添加剂2%d-生物素
- GB/T 16857.901-2020产品几何技术规范(GPS)坐标测量机的验收检测和复检检测第901部分:配置多影像探测系统的坐标测量机
- GB/T 12624-2006劳动防护手套通用技术条件
评论
0/150
提交评论