自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 问答 (1)
  • 收藏
  • 关注

原创 在C++中混编调用CHEMKIN

填周六的坑,CHEMKIN是一个燃烧经常使用的Fortran代码包。笔者当前的代码为C++的MPI并行代码,为了在代码中使用CHEMKIN的模块,需要进行C++和Fortran的混编。基础的混编测试可以查看前一篇https://blog.csdn.net/qq_40583925/article/details/123024724调试花了几天的时间,这里先讲需要注意的点,然后直接贴代码~编译选项的使用前面已经遇到过C++代码混编和C代码混编不同的问题,解决方案便是使用extern "C"功能,指示编

2022-02-21 17:52:16 1256

原创 Linux下C++和Fortran的混编

事情的起因是我需要计算多组分燃烧问题中的粘性项,实现起来非常麻烦。并且CHEMKIN中有现成的代码,但问题在于我的程序为.cpp的MPI并行代码。将Fortran代码翻译成C++代码再用也可,但是仅仅计算粘性的单独模块TRANLIB.F大概在2000行左右,改写起来很麻烦。因此!干脆将C++和Fortran混编起来吧!为此专门研究了一下怎么弄C语言和Fortran混编C语言和Fortran混编的博客还是挺多的,虽然网上好像在互相抄同一段代码。似乎最早的源头是这篇https://www.cnblogs.

2022-02-19 22:21:58 1926

原创 Shell学习笔记

通过几个例子,快速的学习或者复习Shell脚本的使用方法

2021-12-19 23:36:48 681

原创 Tecplot进阶——如何用Tecplot制作一张满足论文投稿要求的图片

如题,一两年前刚刚做Tecplot入门,满足自己基础的作图需求。之后投了自己的第一篇文章,Tecplot作为作图主力被大量使用。除了基础功能外,还有很多额外的操作被用到,这里进行一个简单的总结。基础操作https://blog.csdn.net/qq_40583925/article/details/101852339?spm=1001.2014.3001.5502嗯,之前写过这个,这里主要做二维的图。我们以如下一个图为例讲解。调整XY的取值范围双击坐标轴,然后可以得到一系列的调整,选到Rang

2021-04-14 15:08:18 29156 2

原创 杂谈——并行计算的四种道路

马上要找工作了呀…虽然鄙人方向是计算流体力学,但是这个方向找工作,呃…微妙…所以…我只好碰瓷人家并行方向。嘛,不过虽然不是专门做并行的,不过并行大规模的使用是没有瞎说的。这里在正式的面试之前,进行一个简单的总结。目前笔者掌握的并行计算的方法有四种,分别是openMP并行,多线程并行MPI并行,以及CUDA并行。从前往后,从串行代码改写到并行代码的麻烦程度递增,不过加速比也是越来越好。这里要分别进行介绍(但愿面试第一轮面试前我能写完这个)openMP并行OK!我们先从最简单的开始,openMP并行其实是

2021-03-31 22:06:28 862 3

原创 win下的Qt Creator如何在C++代码使用MPI 和 openMP

如题,我们希望在Windows下的Qt Creator中运行如下的一段并行代码:#include <math.h>#include "mpi.h"#include <iostream>using namespace std;int main(int argc, char *argv[]){ /*myid 和 numprocs分别记录某一个并行执行进程的标识和所有参加计算的进程的个数*/ int myid, numprocs; MPI_Init

2020-11-24 20:24:23 2011 5

原创 OpenFOAM中的Chemistry类

化学反应相关的类,以热学相关的类为基础,它位于路径src/chemistryModel/。它的类间关系如下:接下来我们逐个介绍这些类的内容basicChemistryModel最基础的类,头文件内容如下:class basicChemistryModel: public IOdictionary{protected: //- Reference to the mesh database const fvMesh& mesh_;

2020-08-06 21:35:58 1701 1

原创 openFOAM中文件流的获取——lookup函数

openFOAM中的几乎所有类都提供了文件流操作的重定义,即>> <<即可实现文件流操作。例如对于标量来说,读取标量时:scalar readScalar(Istream& is){ scalar rs; is >> rs; return rs;}我们只需要提供文件流is,就可以通过调用函数返回一个标量值。那么这样的文件流如何获取呢?这里讨论这部分内容这里介绍的是lookup函数,他位于路径src/OpenFOAM/db/d

2020-08-05 17:29:02 1895

原创 openFOAM的基础数据结构汇总

openFOAM将数组链表等数据结构也进行了封装,这里进行一个汇总。可能陆续也会更新标量scalar其实就是浮点数,不过浮点数有多重类型精度,比如float double longdouble,这里将类型统一为scalar这个类型使用,具体见如下链接:https://blog.csdn.net/qq_40583925/article/details/107735351向量vector...

2020-08-05 15:02:24 2183 1

原创 openFOAM中的label

其实就是指i,j,k这类浮标使用的类型。我们通常就使用int就可以,但是这里也进行了封装。其头文件的源码如下:#include "int.H"#define INT_ADD_SIZE(x,s,y) x ## s ## y#define INT_ADD_DEF_SIZE(x,s,y) INT_ADD_SIZE(x,s,y)#define INT_SIZE(x,y) INT_ADD_DEF_SIZE(x,WM_LABEL_SIZE,y)#if WM_LABEL_SIZE != 32 &&

2020-08-05 15:01:56 1462

原创 openFOAM中的Field

就是域的创建,速度域等等量直接在这里存储他分别位于若干个位置,所以下面会单独罗列,其类间关系如下这里对其中的Fields DimensionedFields GeometricFields进行解读Field其路径为src/OpenFOAM/fields/Fields/Field他包含若干个头文件:FieldFunctions.HFieldFunctionsM.HFieldM.HField.CFieldFunctions.CFieldFunctionsM.C我们从头文件开始解读,代

2020-08-05 11:56:08 2323 5

原创 openFOAM中的tensor

是指3*3的张量,其路径为src/OpenFOAM/primitives/Tensor对应的文件关系如下:基本结构和vector非常相似MatrixSpace他用VectorSpace创建,头文件如下:template<class Form, class Cmpt, direction Mrows, direction Ncols>class MatrixSpace: public VectorSpace<Form, Cmpt, Mrows*Ncols>{publ

2020-08-01 22:30:54 680

原创 openFOAM中的vector

首先需要声明这里的vector和我们平时C++中说的数组,或者STL中的vector不是一个。它是openFOAM从九十年代改动至今留下来的一个习惯,这里的vector特质(x,y,z)这样的三维向量,用来表示坐标速度等等。他位于路径OpenFOAM/primitives/Vector/complexVector我们首先来看一下文件的依赖关系VectorSpace头文件内容如下:template<class Form, class Cmpt, direction Ncmpts>cl

2020-08-01 20:41:25 1485 6

原创 openFOAM中的Scalar

位于路径src/OpenFOAM/primitives/Scalar标量,其实就是浮点数。但是浮点数具有不同的精度,最终文件将根据宏的设置决定程序使用哪种精度文件依赖关系如下:注意这里大小写的scalar是两个文件,大写的Scalar是各个精度的浮点数的依赖文件,而这些具体的精度的实现又是小写的scalar的实现floatScalar这里给出其中一个文件的具体实现方式,其余的类似头文件内容如下:typedef float floatScalar;定义最大最小的浮点数floatScala

2020-08-01 19:50:01 1867 2

原创 openFOAM学习笔记(五)——chemFoam的运行过程

在前面的帖子中已经大概给出了chemFoam主程序的结构,这里给出一个比较全面的总结首先程序结构如下:添加头文件//*****************************//int main(int argc, char *argv[]){ 初始化 while(runTime.run()) { 计算化学反应 输出中间结果 } return 0;}我们接下来介绍各个部分的具体内容while循环中的燃烧计算其源码如下:while (run

2020-07-31 15:38:45 3843

原创 openFOAM中时间步长计算参数是怎样读进程序的——Time类

接着前面的内容,在createTime.H中创建了Time类的对象runTimeFoam::Info<< "Create time\n" << Foam::endl;Foam::Time runTime(Foam::Time::controlDictName, args);这里,我们尝试解读这第二行代码中更加具体的内容。Time类的内容源码有500+行,这里不粘贴了,只给出大概的内容,首先文件使用了一系列的头文件,后面会陆续解读:#include "TimePaths.

2020-07-15 16:55:28 1998 1

原创 openFOAM的基础类型汇总

openFOAM代码非常非常多,但是让人比较郁闷的是很多是基础类的实现,openFOAM中很多基础的类,包括char,string,int等等,都添加功能封装在了Foam这个名字域中。好处就是同样使用int,可以比在C++使用更多的功能,坏处就是一个很简单的功能,依赖的文件数量惊人。把这么多的封装全部读完总结完可能头发都白了,但是只把常用的拿出来总结一下是可以的,这篇帖子就是做这个工作,当然这里是针对chemFoam这个求解器。这个帖子会在编写其他帖子的过程中持续更新基础类的源码组织特点通常为一个x

2020-07-15 15:16:18 3769

原创 openFOAM中时间步长计算参数是怎样读进程序的——初步理解框架

内容如题,在阅读完大量的基础代码之后,我们现在可以尝试解读一下chemFOAM中的程序流程。因为内容很多,所以会分好几个子标题讲完。我们使用openFOAM的过程中,通常是从tutorials中找到对应算例的配置文件,复制到run的文件夹中,然后使用编译好程序运行,而控制则通过配置文件中的参数设置。那么,首先我们需要理解这些控制文件中的参数是怎样读入到程序中。配置文件的内容本文以chemFOAM中的氢气燃烧算例为例,对应的文件夹为tutorials/combustion/chemFoam/h2,内容有

2020-07-10 21:21:10 3053 1

原创 openFOAM学习笔记(四)—— openFOAM中的List

又是一个很底层的部分,但是也非常重要

2020-06-27 23:13:55 3269 1

原创 openFOAM中的forAll

这是用户二次开发代码中非常常用的一个语法,我们这里看一下它的底层实现。当然不同的class会各自实现一个forall,这里给出的是UList的实现,具体路径位于src/OpenFOAM/container/Lists/UList/文件夹中定义了UList类,使用一个连续存储,通过制定类型T的指针给定首地址template<class T>class UList { // Private Data //- Number of elements in UList

2020-06-27 22:20:40 2196

原创 openFOAM学习笔记(三)—— char和string相关的类

openFOAM中的char和string并不是直接使用C++提供的string,而是进行了一系列的封装,并添加了更多的功能。这里进行一个总结。char类型的更多功能openFOAM中并没有对char进行封装,而是直接在上面添加功能。主要依赖的是如下路径的几个文件:src/OpenFOAM/primitives/chars/charchar.H charIO.Csrc/OpenFOAM/primitives/chars/wcharwchar.H wcharIO.C添加了readCha

2020-06-25 22:38:15 907

原创 openFOAM代码阅读——基础代码中的string

代码仍然是src/OpenFOAM/primitives/路径中的,为文件夹strings,其中有内容fileName keyType lists string stringOps word wordRe这里的多个文件夹都使用到了这里的word文件夹中的文件,而word用到了string中的内容,所以我们先读这个吧。这里包含了如下几个文件:string.C string.H stringI.H stringIO.C stringIOList.C stringIOList.H从string.H开始

2020-06-11 23:52:43 929

原创 openFOAM代码阅读——基础代码中的wchar

路径src/OpenFOAM/primitives/chars中还有另外一个文件夹wchar,我们这里来看看这里面有什么。头文件wchar.H的内容如下:#include <cwchar>#include <string>// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //namespace Foam{class Istream;class Ostream;

2020-06-11 17:18:56 519

原创 openFOAM代码阅读——基础代码中的char

openFOAM的源码文件夹src中的内容如下:dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/src$ lsAllwmake genericPatchFields rigidBodyDynamicsatmosphericModels lagrangian rigidBodyMeshMotioncombustionModels mesh rigidBodyState

2020-06-11 16:41:58 1671

原创 openFOAM代码阅读——综述和版本说明

这里阅读的是openFOAM7的源码。openFOAM的教程要多少有多少,各种书籍线上教程,甚至还有培训班。但是openFOAM的代码的真正解读的资料缺并不多,这里笔者只好自行补齐部分基础的代码阅读。首先说明一下我们阅读的主要内容。openFOAM中的代码主要分了三个部分:其一,是用来进行计算的参数设置网格设置文件,在文件夹tutorials中其二,是用来支持各个类型的算例运行的具体求解器的源码,在文件夹application中其三,是application的支持性文件,也就是真正的源码所在的文

2020-06-11 16:13:33 3228

原创 chemFoam的源码提取

ok!经过一系列的铺垫,我们来尝试一下提取出openFOAM中的chemFoam程序的源码,然后用Makefile编译运行一下,这样可以帮助我们进行二次开发。呃。。。这个怎么说呢。。。openFOAM一个单独算例的程序依赖深度超过我的预期了。首先程序编译的过程是有记录的,保存如下路径下的文件:dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/applications/solvers/combustion/chemFo

2020-06-09 15:49:18 852

原创 openFOAM7几个文件夹的作用

想搞懂openFOAM整个程序的结构,了解程序开发过程中几个命名的文件夹的作用比较重要。这里单独了解一下。openFOAM7的全部文件夹罗列如下:dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7$ lsAllwmake bin doc platforms src tutorialsapplications COPYING etc README.org test wmake其中Allwmake为openFOAM中的编译命令,类似ma

2020-06-09 13:53:41 3521

原创 openFOAM combustion模块学习笔记——程序结构

基础资料废话不多说,首先罗列一些笔者参考的资料openFOAM的官方网站为:https://openfoam.org/东岳流体网站:http://www.dyfluid.com/本文使用的为openFOAM7版本,可以从网上下载到提前预装好的虚拟机,从而避免了安装的麻烦。openFOAM7安装和虚拟机:http://www.dyfluid.com/docs/install.htmlopenFOAM7网页用户手册:https://cfd.direct/openfoam/user-guide/另外

2020-06-08 21:41:57 3145

原创 一文讲全如何用MATLAB给科技论文作图——投稿修图实录

实际上论文修图是很麻烦的一件事情,除去数据本身需要反复测试,保证完全没有问题之外,图片本身也要兼具美观和分辨率的要求。这里记录一下写科研论文过程中,遇到的作图要求和解决方法。方便日后论文投稿过来复制粘贴(反正一定没人看,给自己看就好)当然论文写作的作图可以借助很多软件,比如说笔者还用到了gnuplot和tecplot,但是那个并不熟悉,菜鸡如我还是以matlab为主。提高图片分辨率首先是分辨...

2020-05-08 15:55:57 3698 1

原创 Matlab动态作图——animatedline函数

为了改文章作图,不得不整了一个Matlab2018b版本,看新版本特性发现了一个有趣的函数。这里mark一下,省得以后还得用pause去做别的不说,直接给代码clc; clear;format long e;h = animatedline;axis([0,4*pi,-1,1])x = linspace(0,4*pi,1000);y = sin(x);for k = 1:len...

2020-05-08 00:44:05 8251

原创 2020华为软挑热身赛 个人总结

热身赛讲实话并没有花太多的时间,队友做了更多的工作,本人只对读取数据的模块进行了比较多的处理。比赛的名头是机器学习相关,实际上操作的时候发现也不完全是。可以使用机器学习的技巧,不过我们的队伍主要使用优化的知识,维持原来LR回归的框架,改换了迭代算法。而比赛的主要评分指标并非准确率而是运行速度,对于我们这种搞高性能计算,机器学习算法是小白的同学反而是一件好事。个人最终成绩0.66s,排名150+...

2020-04-01 00:29:27 911

原创 Essential C++ 学习笔记 第七章

异常处理本来觉得这章会教怎么解决常见bug之类的,结果主要讲的是跟踪代码中的异常并输出,是讲如何把程序写得更加健壮。这些代码画风给人感觉就特别像Java抛出异常就是throw这个命令,给出一个例子:inline void Traingular_iterator::check_integrity(){ if (_index>=Triangular::_max_elems) ...

2020-03-31 02:27:09 211

原创 Essential C++ 学习笔记 第六章

以template进行编程template翻译过来叫模板,它的本名叫做被参数化类型(parameterized type),即可以当做类型使用,但是类型本身被参数化了。而本章主要内容是利用class template实现一个二叉树。首先介绍二叉树的基本概念,树(tree)是由节点(node)以及节点之间的链接(link)组成。所谓二叉树,是指每个节点之后最多两个子节点,即左子节点(left c...

2020-03-30 22:50:19 263

原创 Essential C++ 学习笔记 第五章

第五章 面向对象的编程风格。前面其实已经用到了类的概念,但是并没有引入面向对象的编程,因为还没有引入继承和多态两种重要的特性。本章主要介绍这一内容面向对象编程概念首先解释继承(inheritance)和多态(polymorphism)继承定义了类之间的父子关系,父类(parent)定义了所有子类共有的接口(public interface)和私有实现(private implementat...

2020-03-23 23:55:25 348

原创 Essential C++ 学习笔记 第四章

本书一共七章,读完这章就过半啦~这章的题目是基于对象的编程风格。介绍对象class的实现方法。之前其实已经使用过一些class,比如说<string>和<vector>。使用方法是将string或者vector当做数据类型使用定义变量,而这个变量就被称为对象的实例,并且可以进行初始化。然后对实例进行函数操作。函数的实现包括public和private两个部分。均包含操作...

2020-03-15 17:48:37 481 1

翻译 Github Guides中文版

将github官方网站教程https://guides.github.com/activities/hello-world/翻译了一下,方便以后回来复习。Github两年前就第一次使用了,是版本管理和小型团队搬砖比较常用的工具。杂七杂八的教程非常非常多,但是感觉还是官网上面的教程最简洁方便。这里直接翻译一下,方便自己翻阅,也避免其他人走弯路。菜鸡如我,都现在了还不会github,现在两个地方需要...

2020-03-12 23:55:37 2602

原创 Essential C++ 学习笔记 第三章

泛型的编程风格这章,在介绍泛型的同时,还介绍了它的实现思路。将算法从数据类型,返回值类型等抽离出来,就得到了泛型算法。容量对于我这样的C++初学者来说还是有点大。啃了两遍才读了下来。STL(standard template library)翻译过来就是标准模板库,由两种组件构成:其一是容器(container),包括vector,list,set,map等。其二是泛型算法,包括find(),s...

2020-03-09 14:33:34 414

原创 彭国伦Fortran95学习笔记(一)第八章至第十六章

基本读了一遍,把剩下的总结完。第八章 函数基本的调用不解释了,这里强调一些细节。可以在子函数最后使用end表示函数的结束,不过实际上使用retrun是标准的用法,并且可以选择让函数在执行到一般的时候return返回。Fortran77不支持递归,但是Fortran90支持,不过递归的调用需要额外的命令,由于递归调用的计算速度很慢,科学计算中并不推荐使用,参考Page195Fortran...

2020-03-03 00:22:41 1731

原创 Essential C++ 学习笔记 第二章

面向过程的编程风格传值和传址这部分内容在C语言中就已经有强调,即函数的传参的细节。目前的参数传递分成两种方式,传址(by reference)和传值(by value)。为了将两者的用法进行说明,需要先解释调用函数时,程序运行的袭击。当我们调用一个函数时,会在内存中建立起一块特殊区域,成为“程序堆栈(program stack)"。这块特殊区域提供了每个函数参数的储存空间。他也提供了函数所定...

2020-02-23 22:43:29 355

原创 Essential C++学习笔记 第一章

被大佬建议在阅读C++ Primer Plus之前先读这本,本书由Stanley B. Lippman著,由侯捷翻译,我手里这本应该是第四版。书里一共七章,还提供了代码和习题答案,非常适合C++入门使用。趁疫情赋闲在家,把C++也学习一个。同样也只记录笔者不熟悉,或者觉得重要的内容,C语言基础的部分太烂大街直接略过。OK!那我们开始第一章 C++编程基础isostream库首先是库iost...

2020-02-23 01:17:00 561

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除