メインコンテンツに移動

時間ステップ

時間ステップを指定

ここまでの方法では,時間は[1番目][2番目]...として設定するしかありませんでした.やはり,浮動小数の時間変数を入れたいわけです.これは空間を考慮するVTKでは不可能で,ParaViewなど画像処理プログラムの設定になります.

PVDwriteクラス

サンプルとして, PVDwriteクラスを作成しました.rect_4に入っています.

#include <iostream>
#include <fstream>
#include <map>
#include <boost/filesystem.hpp>
class PVDwrite {
    boost::filesystem::path _filename;
    boost::filesystem::path _basedir;
    std::map _array;
public:
    void Append(boost::filesystem::path &P,double time){
        _array[time]=P;
    };
    void Write(){
        boost::filesystem::ofstream ofs(_filename);
        ofs << "<?xml version=\"1.0\"?>";
        ofs << "<VTKFile type=\"Collection\" version=\"0.1\" byte_order=\"LittleEndian\" compressor=\"vtkZLibDataCompressor\" >";
        ofs << "<Collection>" << std::endl;
        for(auto& pair:_array) ofs << << "<DataSet timestep=\"" << pair.first << "\" group=\"\" part=\"0\" file=" << boost::filesystem::relative(pair.second,_basedir) << " />" << std::endl;
        ofs<<"</Collection></VTKFile>" << std::endl;
    }
    PVDwrite(boost::filesystem::path filename):_filename(filename){
        _basedir=_filename.parent_path();
    };
    ~PVDwrite(){
        _array.clear();
    };
};

まあこんな感じですかね.ようするにPVDwriteオブジェクトを*.pvdファイル名を与えて初期化

    PVDwrite BodyTime(bodyFolder/"body.pvd");

時間データを保存するごとにデータと物理時間の対応を追加:

 BodyTime.Append(fileName, time);

ほんで,プログラム終了時にPVDファイルを書き出すわけですよ:

    BodyTime.Write();

すると,PVDファイルが出現するってぇ寸法でぃ.

実際にRECT_4を実行してParaViewで開くと:

PVDファイルを開くと,時間が設定されている!

にゃお,PVDファイルの内容は,こんなノリです:

<?xml version="1.0"?><VTKFile type="Collection" version="0.1" byte_order="LittleEndian" compressor="vtkZLibDataCompressor" ><Collection>
<DataSet timestep="0.2" group="" part="0" file="data/body0001.vtm" />
<DataSet timestep="0.4" group="" part="0" file="data/body0002.vtm" />
<DataSet timestep="0.6" group="" part="0" file="data/body0003.vtm" />
<DataSet timestep="0.8" group="" part="0" file="data/body0004.vtm" />
<DataSet timestep="1" group="" part="0" file="data/body0005.vtm" />
<DataSet timestep="1.2" group="" part="0" file="data/body0006.vtm" />
<DataSet timestep="1.4" group="" part="0" file="data/body0007.vtm" />
<DataSet timestep="1.6" group="" part="0" file="data/body0008.vtm" />
<DataSet timestep="1.8" group="" part="0" file="data/body0009.vtm" />
<DataSet timestep="2" group="" part="0" file="data/body0010.vtm" />
</Collection></VTKFile>