畢業了——課題代碼開源(一)使用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數據頭。
在這裏插入圖片描述在這裏插入圖片描述

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