最新要闻
- 世界热门:RTX 4070 Laptop逆天能效比!七彩虹将星X15 AT 2023游戏本首发评测
- 全球快看:1月豪华车销量榜:蔚来碾压全系合资二线豪华品牌
- 被网友玩坏?微软Bing的ChatGPT被证实变愚蠢了
- 每日消息!“张伟”骗取数位宝马车主百万购车款 4S店疯狂推卸责任?
- AMD锐龙7 7735HS迷你机也有“青春版”:只变了两个USB接口
- 环球今头条!攒台白色的MATX主机,在B760主板上也能玩好内存超频
- 当前热门:用送的那块布擦镜片:小心眼镜被废!
- 观热点:60岁快递员意外猝死 快递公司回应:深感痛心 善后已达成一致
- 女子连刷10个差评商家找上门:不好吃你天天来干嘛 谁生活容易啊
- 【世界报资讯】果粉入手一加Ace 2:开20个应用不杀后台 苹果开3个应用就不行了
- 80后回忆的“均瑶牛奶”公司进军新能源车:首款纯电SUV云兔来了 莆田生产
- 《原子之心》冰箱诺拉全九国语言配音:怎么没日语?
- 粉丝发现周深自用手机是iQOO 11 Pro传奇版:5米开外就能看到
- 电动两轮车总是骑半路就没电?这5种错误充电习惯赶快纠正
- 世界今头条!男子酷爱嚼槟榔:最终确诊舌癌
- 【报资讯】免费的ChatGPT意外断网 国内伪装自主的AI露馅了
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
openfoam文件读取
对于openfoam或其他c++程序而言,文件的读取是尤为重要的
我们最开始学习C++时,会学到类的初始化,或者是变量定义为某个值,再对某个值进行遍历,,,类似如下:
点击查看代码
#include // 包含头文件。using namespace std; // 指定缺省的命名空间。int main(){ int a = 10; int b = (10); int c(10); int e = {10}; int f{ 10 }; cout << "a=" << a << endl; cout << "b=" << b << endl; cout << "c=" << c << endl; cout << "e=" << e << endl; cout << "f=" << f << endl;}
尤其c++,初学时候内心非常感慨,怎么这么多初始化方式,我该用哪个现在回头看,其实能熟悉一个,其他看懂就行,看不懂都没关系,毕竟我们还有gdb或者typeid()帮忙,可以看看这个变量类型具体是什么说到底我们要问题导向目标导向,我们学习C++是为了类似openfoam这样的大工程服务的那学这么多初始化赋值,有必要吗如果是个大工程或者大程序是完全没必要的,因为大工程的数据都是从文件或者数据库中获得的你想想,要计算一个流体问题,如果有一万个网格,手打一万个三维位置就已经非常让人头疼了,更不要说上百个组分和压力等参数了,不现实所以又回到了问题的起点,读取文件很重要,那么如何从文件中初始化程序,如何读取文件
(资料图片)
在看of源码之前,不妨复习下C++是怎么读取文件的,进行下知识巩固
C++多使用fstream类或ifstream类
点击查看代码
#include #include // ifstream类需要包含的头文件。#include // getline()函数需要包含的头文件。using namespace std;int main(){ string filename = R"(./test.txt)"; //ifstream fin(filename, ios::in); ifstream fin; fin.open(filename , ios::in); // 判断打开文件是否成功。 // 失败的原因主要有:1)目录不存在;2)文件不存在;3)没有权限,Linux平台下很常见。 if (fin.is_open() == false) { cout << "打开文件" << filename << "失败。\n"; return 0; } string buffer; while (fin >> buffer) { cout << buffer << endl; } fin.close(); // 关闭文件,fin对象失效前会自动调用close()。 cout << "操作文件完成。\n";}
OPENFOAM的文件读写,主要是用IOdictionary类
打开IOdictionary类的头文件,并不复杂
点击查看代码
class IOdictionary: public baseIOdictionary{public: // Constructors //- Construct given an IOobject IOdictionary(const IOobject&); //- Construct given an IOobject and dictionary IOdictionary(const IOobject&, const dictionary&); //- Construct given an IOobject and Istream IOdictionary(const IOobject&, Istream&); //- Copy constructor IOdictionary(const IOdictionary&); //- Move constructor IOdictionary(IOdictionary&&); //- Destructor virtual ~IOdictionary(); // Member Functions //- Is object global virtual bool global() const { return true; } //- Return complete path + object name if the file exists // either in the case/processor or case otherwise null virtual fileName filePath() const { return globalFilePath(type()); } // Member Operators //- Move assignment void operator=(IOdictionary&&);};
继承于baseIOdictionary类,借助于IOobject接口有五个构造函数,这五个中一个移动构造一个拷贝构造,其他类继承可以创建自己成员函数global()和filePath(),头文件还对移动构造创建了等号赋值运算符我们再看IOdictionary类的关键先生IOobject
IOobjectIOobject就稍显复杂了,我们先看openfoam对其的描述:
IOobject defines the attributes of an object for which implicit objectRegistry management is supported, and provides the infrastructure for performing stream I/O.An IOobject is constructed with an object name, a class name, an instance path, a reference to a objectRegistry, and parameters determining its storage status.
下面这张图是openfoam与该接口有关的类谱图打开regIOobject类,这是个抽象类,openfoam对regIOobject的描述为:
regIOobject is an abstract class derived from IOobject to handle automatic object registration with the objectRegistry.
刨根问底,那么再继续看IOobject类,openfoam对IOobject类的描述为:
IOobject defines the attributes of an object for which implicit objectRegistry management is supported, and provides the infrastructure for performing stream I/O.An IOobject is constructed with an object name, a class name, an instance path, a reference to a objectRegistry, and parameters determining its storage status.
看到这里,可能你都忍不住要吐槽一句,这么溯源什么时候是头
刨根问底刨个稀烂,知道结果明年再见
是的,openfoam征程就是这么快乐,快乐的我现在看起来略显迷茫这里不赘述了,最后查了好半天,大概是哈希表来的,方便查询读取。openfoam中/0,/constant以及/system文件夹中那种奇怪的文件格式肯定有适合自己的读取方法。
那我们看看IOobject类相关源码,IOobject类有四个枚举控制读取权限以及文件检查
点击查看代码
//- Enumeration defining the valid states of an IOobject enum objectState { GOOD, BAD }; //- Enumeration defining the read options enum readOption { MUST_READ, MUST_READ_IF_MODIFIED, READ_IF_PRESENT, NO_READ }; //- Enumeration defining the write options enum writeOption { AUTO_WRITE = 0, NO_WRITE = 1 }; //- Enumeration defining the file checking options enum fileCheckTypes { timeStamp, timeStampMaster, inotify, inotifyMaster };
内共有六个构造函数,其中一个拷贝构造
点击查看代码
// Constructors //- Construct from name, instance, registry, io options IOobject ( const word& name, const fileName& instance, const objectRegistry& registry, readOption r=NO_READ, writeOption w=NO_WRITE, bool registerObject=true ); //- Construct from name, instance, local, registry, io options IOobject ( const word& name, const fileName& instance, const fileName& local, const objectRegistry& registry, readOption r=NO_READ, writeOption w=NO_WRITE, bool registerObject=true ); //- Construct from path, registry, io options // Uses fileNameComponents() to split path into components. IOobject ( const fileName& path, const objectRegistry& registry, readOption r=NO_READ, writeOption w=NO_WRITE, bool registerObject=true ); //- Construct from copy resetting registry IOobject ( const IOobject& io, const objectRegistry& registry ); //- Construct from copy resetting name IOobject ( const IOobject& io, const word& name ); //- Copy constructor IOobject(const IOobject& io) = default;
我们举个例子,基于这些构造函数可以这样写类似这样的读取端口:
点击查看代码
IOobject dicName( "dicName", runTime.timeName(), //runTime.constant(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE) ;
再回到IOdictionary类,
通过查看IOdictionary类的构造函数,我们了解到可以在创建好的IOobject端口基础上构建,也可以直接构建IOobject端口
点击查看代码
IOdictionary dicName( IOobject ( "dicName", //runTime.constant(), runTime.system(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE ) ) ;
那么我们如何通过IOdictionary类读取openfoam内文件呢,以openfoam内置icoFoam为例$ ls cavity/
0 constant system$ tree cavity/
cavity/├── 0│ ├── U│ └── p├── constant│ ├── polyMesh│ │ ├── boundary│ │ ├── faces│ │ ├── neighbour│ │ ├── owner│ │ └── points│ └── transportProperties└── system├── blockMeshDict├── controlDict├── fvSchemes└── fvSolution$ head cavity/0/* -n15
cavity/0/U */--------------------------------- C++ -----------------------------------========= |\ / F ield | OpenFOAM: The Open Source CFD Toolbox\ / O peration | Website: https://openfoam.org\ / A nd | Version: 8\/ M anipulation |*---------------------------------------------------------------------------*/FoamFile{version 2.0;format ascii;class ** volVectorField;**object U;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
cavity/0/p */--------------------------------- C++ -----------------------------------========= |\ / F ield | OpenFOAM: The Open Source CFD Toolbox\ / O peration | Website: https://openfoam.org\ / A nd | Version: 8\/ M anipulation |*---------------------------------------------------------------------------*/FoamFile{version 2.0;format ascii;class ** volScalarField;**object p;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //从以上内容可以看到,U和v分别属于volVectorField类以及volScalarField类,那么就利用IOobject接口分别创建相关类如下所示:
点击查看代码
volVectorField U( IOobject( "U" , runTime.timeName() , mesh , IOobject::MUST_READ , IOobject::AUTO_WRITE ) , mesh ); volScalarField p( IOobject( "p" , runTime.timeName() , mesh , IOobject::MUST_READ , IOobject::AUTO_WRITE ) , mesh );
再看其他两个文件夹$ grep -rn "dicti" .
./cavity/constant/transportProperties:12: class dictionary;./cavity/system/controlDict:12: class dictionary;./cavity/system/fvSolution:12: class dictionary;./cavity/system/blockMeshDict:12: class dictionary;./cavity/system/fvSchemes:12: class dictionary;./constant/transportProperties:12: class dictionary;./system/controlDict:12: class dictionary;./system/fvSolution:12: class dictionary;./system/blockMeshDict:12: class dictionary;./system/fvSchemes:12: class dictionary;都是dictionary类,那创建起来更方便了,比如说contorlDict文件
点击查看代码
IOdictionary controlDict( IOobject ( "controlDict", runTime.constant(), //runTime.system(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE ) ) ;
有了dictionary这个字典类,顾名思义,字典当然是很方便查找啊,而且本身也是在链表以及哈希列表基础上建立的,能用的函数就很丰富了,如lookup()等。
综上,openfoam创建了一个读取方便查找容易的类支持of进行数据处理,寻根溯源很麻烦,但是用起来还是很简单的。
正因为文件读取占用很大的比重,这篇文章写了三个多小时,我们也是借此机会对openfoam内部略窥一二,这样我们就知道我们的程序在写什么,知道其所能为与不能为。
最后奉上自己编写的openfoam codesnip ,节约大家时间
点击查看代码
//***********************************************////openfoam"Foam_IOobject": {"prefix": "IOobject_Foam_","body": ["IOobject ${1|U,p,T,dicName|}(",// "\t${2|\"U\",\"p\",\"T\"|}","\t\"${1}\",","\t//runTime.timeName(),","\t//runTime.constant(),","\tmesh,","\tIOobject::MUST_READ,","\tIOobject::AUTO_WRITE",") ;"],"description": "FOAM::IOobject"},"Foam::IOdictionary": {"prefix": "IOdictionary_Foam_","body": ["IOdictionary ${1:dicName}(","\tIOobject (",// "\t${2|\"U\",\"p\",\"T\"|}","\t\t\"${1}\",","\t\t//runTime.constant(),","\t\t//runTime.system(),","\t\tmesh,","\t\tIOobject::MUST_READ,","\t\tIOobject::AUTO_WRITE","\t)",") ;"],"description": "Foam::IOdictionary"},"Foam::volVectorField": {"prefix": "volVectorField_Foam_","body": ["volVectorField ${U}(","\tIOobject (","\t\t\"${U}\",","\t\trunTime.timeName(),","\t\tmesh,","\t\tIOobject::MUST_READ,","\t\tIOobject::AUTO_WRITE","\t),","\tmesh",") ;"],"description": "Foam::volVectorField"},"Foam::volScalarField": {"prefix": "volScalarField_Foam_","body": ["volScalarField ${p}(","\tIOobject (","\t\t\"${p}\",","\t\trunTime.timeName(),","\t\tmesh,","\t\tIOobject::MUST_READ,","\t\tIOobject::AUTO_WRITE","\t),","\tmesh",") ;"],"description": "Foam::volScalarField"},"Foam::scalar": {"prefix": "scalar","body": ["scalar "],"description": "Foam::scalar"},//***********************************************//
创作不易,如若喜欢,不胜感激,欢迎支持,欢迎指正
openfoam文件读取
fusion app自定义事件源码介绍(上)
世界热门:RTX 4070 Laptop逆天能效比!七彩虹将星X15 AT 2023游戏本首发评测
全球快看:1月豪华车销量榜:蔚来碾压全系合资二线豪华品牌
被网友玩坏?微软Bing的ChatGPT被证实变愚蠢了
每日消息!“张伟”骗取数位宝马车主百万购车款 4S店疯狂推卸责任?
AMD锐龙7 7735HS迷你机也有“青春版”:只变了两个USB接口
环球今头条!攒台白色的MATX主机,在B760主板上也能玩好内存超频
全球焦点!RS485 MODBUS转PROFINET网关案例 | 超声波明渠流量计接入到PLC1200 PROFINE
焦点热门:前后端分离项目解决跨域的终极方法
环球今热点:[Java基础]自动装箱与自动拆箱--为什么整型比较必须用equals?
【天天新要闻】Detecting glass in Simulataneous Localisation and Mapping
天天热文:贝叶斯与卡尔曼滤波(2)--连续随机变量的贝叶斯公式
当前热门:用送的那块布擦镜片:小心眼镜被废!
观热点:60岁快递员意外猝死 快递公司回应:深感痛心 善后已达成一致
女子连刷10个差评商家找上门:不好吃你天天来干嘛 谁生活容易啊
【世界报资讯】果粉入手一加Ace 2:开20个应用不杀后台 苹果开3个应用就不行了
80后回忆的“均瑶牛奶”公司进军新能源车:首款纯电SUV云兔来了 莆田生产
信息:Qt调用摄像头一,基础版
k8s多节点二进制部署以及Dashboard UI
记住这12个要点,你也能打造出让HR和技术主管前一亮的前端简历
《原子之心》冰箱诺拉全九国语言配音:怎么没日语?
粉丝发现周深自用手机是iQOO 11 Pro传奇版:5米开外就能看到
电动两轮车总是骑半路就没电?这5种错误充电习惯赶快纠正
世界今头条!男子酷爱嚼槟榔:最终确诊舌癌
【报资讯】免费的ChatGPT意外断网 国内伪装自主的AI露馅了
守护安全|AIRIOT城市天然气综合管理解决方案
0x03_My-OS在实体机上面运行
每日播报!【算法训练营day53】LeetCode1143. 最长公共子序列 LeetCode1035. 不相交的线 LeetCode53. 最大子序和
快讯:两数之和、三数之和、四数之和(双指针)
世界焦点!今日山水一程三生有幸是形容爱情的吗_山水一程三生有幸
环球最资讯丨俞敏洪说想给董宇辉在北京买套房子 这话我听着耳熟
消息!魅族20未发先火!1元超前预订7小时订单破10万
世界热讯:研究称果糖或能导致老年痴呆:专家建议少食用
全球热议:旅日大熊猫香香坐顺丰飞机到家!1个月后与公众见面
环球视讯!成都一公司面试需填芝麻信用分 网友热议
每日信息:100亿级订单怎么调度,来一个大厂的极品方案
[学习笔记]Rocket.Chat业务数据备份
记录--uni-app实现京东canvas拍照识图功能
世界快资讯:Java+Jquer实现趋势图
全球最新:温州特斯拉事故20年驾龄司机仍昏迷:特斯拉回应称难过 重申全力配合调查
环球今热点:Xbox游戏将登陆任天堂主机 网友质疑:NS能带动吗?
世界微资讯!场面爆笑!外国人为开比亚迪开始学中文:难为“小迪”了
即时看!音悦台将回归登热搜!主体公司已成老赖:累计被执行1376万
世界视讯!什么是经营贷什么是消费贷?浅谈二者区别
puppet安装使用踩坑笔记
箭头函数详解
TypeScript 入门自学笔记 — 接口的使用(六)
快资讯丨Python关于异常处理的教程
天天观察:scrollView 嵌套 recyclerview 时 BaseQuickAdapter 九宫格图片拖拽到底部删除
14年老牌网站 音悦台要回归了!官方称很快就要内测
每日快看:杭州发现鱼类新物种苕溪鱲:通体散发宝蓝色金属光泽
当前播报:爱奇艺认错 恢复会员投屏!上海消保委:愿意为消费者叫板
是懂玩家的!《原子之心》为机器人姐妹花开通ins账号
焦点观察:张小泉公开一防菜刀断裂专利 这次拍蒜不断了?
当前最新:中小企业如何有效应对计算资源的弹性变化需求?
热消息:来一波骚操作,Java内存模型
全球新消息丨Windows家庭版安装本地组策略编辑器【gpedit.msc】
Redis详解
当前焦点!@ResponseBody注解的作用
万马股份(002276.SZ):万马新能源充电桩的枪线已经自产 由万马专缆生产
精选!售10-20万元 蔚来整合猎豹工厂:新品牌“萤火虫”落户安徽
今日最新!冲刺IPO!一年狂赚7亿美元 中国跨境电商神话靠啥吸粉?
乐视被强制执行100万:没版权擅自转播了优酷综艺
男子网购iPhone 14开箱发现是iQOO 商家赔50元优惠券被拒
当前动态:曾致135人死亡 印度断桥事故调查报告出炉:钢索严重腐蚀
0x02_My-OS操作系统里的helloworld
天天新资讯:iptables防火墙
世界热议:万物皆可集成资源包!低代码集成系列一网打尽
天天快播:通过例子学习粒子群优化算法
全球速讯:暂时性死区以及函数作用域
全球观察:祸不单行!美国俄亥俄州又现爆炸:30公里外都见到蘑菇云
天天新消息丨2.8K OLED屏+10核CPU 小米首款翻转本降价1000元起
售价高达4199元!森海塞尔HD 660S2开放式动圈耳机正式开售
【世界独家】【算法训练营day52】LeetCode300. 最长递增子序列 LeetCode674. 最长连续递增子序列 LeetCode718. 最长重复子
开心档之Bootstrap4 自定义表单
速读:标准语言的重要性_语言的重要性
环球热讯:《蚁人3》等漫威大片中国吃瘪!国人为国产电影买单 《流浪地球2》等降维打击
世界微速讯:直播预告 | 嵌入式BI如何将数据分析真正融入业务流程
当前快报:(数据库系统概论|王珊)第六章关系数据理论-第一节:为什么要研究关系数据理论
世界播报:C# 利用FluentFTP实现FTP上传下载功能
天天通讯!NBA中国与蚂蚁集团开启全面战略合作:支付宝能看球了!
比亚迪百万级超跑 仰望U9路试谍照首次曝光:变好看了
环球播报:特斯拉中国工厂提速:2023新款Model 3来了 内饰大升级
每日精选:云业务成本的组成与管理趋势
世界快消息!火山引擎数智平台ByteHouse入围稀土掘金《Top10 年度创新产品》
天天快资讯丨前端开发页面性能优化法则
每日热门:爱奇艺修改会员投屏限制后:优酷腾讯尚未跟进 默不作声
快资讯:全球首款!努比亚Pad 3D内置AI引擎:实现全场景3D应用
每日资讯:抢在EOS R1前发布:佳能EOS R5 Mark II或将第二季度亮相
快讯:张小泉菜刀拍蒜断成两截被吐槽 厂家回应:硬度越大越脆
热效率44.26%!吉利新雷神电混发动机量产下线:终于换4缸了
热点!咽字组词_咽的组词有哪些
欢喜来逗阵结局谁和谁一起了?欢喜来逗阵演员名单
翡翠玉镯戴久了有什么变化?翡翠玉镯怎么样辨别真假?
青铜时代是哪个朝代?青铜时代介绍
【天天播资讯】一台不容错过的Java单元测试代码“永动机”
全球动态:火爆全球的ChatGPT是什么?
环球要闻:数据结构刷题2023.02.21小记
若依框架的MVC各层功能解释