最终效果
图片预处理
PS类软件
这里生成的画布为300×900,在中间输入文字后,保存为1.png。
Matlab二值化处理
clear
clc
// Here the size of 1.png is 300*900
A=imread('1.png');
thresh=graythresh(A)
B=im2bw(A,thresh);
B=flipud(B);//垂直翻转
B=rot90(B,3);
C=~B;
imshow(C);
dlmwrite('1.dat',C,'delimiter',' ');
其中元素以空格为分隔符输出保存在1.dat里。
Palabos输入
MultiScalarField2D<bool> boolMask(parameters.getNx(), parameters.getNy());
plb_ifstream ifile("1.dat");
ifile >> boolMask;
defineDynamics(lattice, boolMask, new BounceBack<T,DESCRIPTOR>, true);
核心代码如上,由于输入dat文件数据时,Palabos逐行读取dat文件的行,然后写入Palabos的列,所以上面的m文件有一个旋转的操作,就是为了让图片的列对应上Palabos的列。最后设置为反弹格子。
由于图片尺寸为300×900,所以在cpp文档中流场的尺寸也该对应设置为300×900,。
IncomprFlowParam<T> parameters (
(T) 1e-2, // uMax
(T) 300., // Re
299, // N y轴方向的像素点数
3., // lx 即3×N
1. // ly 即1×N
);
//Poiseuille流的解释可以去下面这个网址看:
//https://github.com/Yulan-Fang/PalabosCodeExplanation/blob/master/tutorial_1/tutorial_1_5.cpp
示例代码网址:
https://github.com/Yulan-Fang/SampleCodesofPalabos/tree/master/BoolMask
该文件夹的loadGeometry.cpp主要基于palabos/examples内的tutorial_1_5和loadGeometry来改写。用于示范如何导入二值化的图片至流域中。
流场为Poiseuille流。
你需要添加makefile,以及include路径和tmp文件夹用于输出。