簡介
因爲我的課題涉及多孔介質結構的相關幾何分析,比如空隙分析,迂曲度分析等,因爲不想直接自己寫vti輸出,而且Palabos中又有已經現成可以使用的輸出函數可以調用,所以直接寫了一個轉換程序,將我自己的數據,轉成Paraview可以讀取的vti數據。
代碼
#include "palabos3D.h"
#include "palabos3D.hh"
#include <vector>
#include <cmath>
#include <cstdlib>
using namespace plb;
typedef double T;
void readGeometry(std::string fNameIn, std::string fNameOut, MultiScalarField3D<float>& geometry, std::string valueTag)
{
const plint nx = geometry.getNx();
const plint ny = geometry.getNy();
const plint nz = geometry.getNz();
Box3D sliceBox(0,0, 0,ny-1, 0,nz-1);
std::auto_ptr<MultiScalarField3D<float> > slice = generateMultiScalarField<float>(geometry, sliceBox);
plb_ifstream geometryFile(fNameIn.c_str());
for (plint iX=0; iX<nx; ++iX) {
if (!geometryFile.is_open()) {
pcout << "Error: could not open geometry file " << fNameIn << std::endl;
exit(EXIT_FAILURE);
}
geometryFile >> *slice;
copy(*slice, slice->getBoundingBox(), geometry, Box3D(iX,iX, 0,ny-1, 0,nz-1));
}
{
VtkImageOutput3D<T> vtkOut(valueTag, 1.0);
vtkOut.writeData<float>(*copyConvert<float,T>(geometry, geometry.getBoundingBox()), valueTag, 1.0);
}
}
int main(int argc, char **argv)
{
plbInit(&argc, &argv);
if (argc!=7) {
pcout << "Error missing some input parameter\n";
pcout << "The structure is :\n";
pcout << "1. Input file name.\n";
pcout << "2. Output directory name.\n";
pcout << "3. number of cells in X direction.\n";
pcout << "4. number of cells in Y direction.\n";
pcout << "5. number of cells in Z direction.\n";
pcout << "6. value tag\n";
pcout << "Example: " << argv[0] << " palabos.dat tmp/ 201 201 201 abc\n";
exit (EXIT_FAILURE);
}
std::string fNameIn = argv[1];
std::string fNameOut = argv[2];
const plint nx = atoi(argv[3]);
const plint ny = atoi(argv[4]);
const plint nz = atoi(argv[5]);
std::string valueTag = argv[6];
global::directories().setOutputDir(fNameOut+"/");
pcout << "Reading the geometry file." << std::endl;
MultiScalarField3D<float> geometry(nx,ny,nz);
readGeometry(fNameIn, fNameOut, geometry, valueTag);
return 0;
}
說明
這個代碼起源自原始案例中的滲透,即Palabos案例解析(一)permeability.cpp案例
我只是進行了一些簡化,只使用其中的數據讀入以及輸出的內容,在原始案例中,讀入的幾何結構只能讀整數,在這個代碼中,可以讀取任何浮點數,並輸出爲vti格式,使用paraview進行處理。
使用方法與滲透案例相同。
無圖無真相,這兩個圖是我計算迂曲度時所獲得的路徑,寫成對應於palabos的輸入格式,就可以簡便的轉成vti格式而不用自己寫vti數據頭。