毕业了——课题代码开源(一)使用Palabos包将其他数据转为vti

简介

因为我的课题涉及多孔介质结构的相关几何分析,比如空隙分析,迂曲度分析等,因为不想直接自己写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数据头。
在这里插入图片描述在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章