removed old legacy vtk file writing

This commit is contained in:
Thorsten Liebig 2011-04-13 13:56:01 +02:00
parent 01e8a8011a
commit 7d30ce2fb6
4 changed files with 43 additions and 227 deletions

View File

@ -235,166 +235,6 @@ void ProcessFields::CalcMeshPos()
}
}
void ProcessFields::WriteVTKHeader(ofstream &file, double const* const* discLines, unsigned int const* numLines, unsigned int precision, string header_info, MeshType meshT, double discLines_scaling)
{
if (meshT==CARTESIAN_MESH)
WriteVTKCartesianGridHeader(file, discLines, numLines, precision, header_info, discLines_scaling);
else if (meshT==CYLINDRICAL_MESH)
WriteVTKCylindricalGridHeader(file, discLines, numLines, precision, header_info, discLines_scaling);
else
cerr << "ProcessFields::WriteVTKHeader: Warning: unknown mesh type, skipping header -> file will be invalid..." << endl;
}
void ProcessFields::WriteVTKCartesianGridHeader(ofstream &file, double const* const* discLines, unsigned int const* numLines, unsigned int precision, string header_info, double discLines_scaling)
{
file << "# vtk DataFile Version 2.0" << endl;
file << "Rectilinear Grid openEMS_ProcessFields";
if (!header_info.empty())
file << " " << header_info;
file << endl;
file << "ASCII" << endl;
file << "DATASET RECTILINEAR_GRID " << endl;
file << "DIMENSIONS " << numLines[0] << " " << numLines[1] << " " << numLines[2] << endl;
file << "X_COORDINATES " << numLines[0] << " " << __VTK_DATA_TYPE__ << endl;
for (unsigned int i=0; i<numLines[0]; ++i)
file << setprecision(precision) << discLines[0][i] * discLines_scaling << " ";
file << endl;
file << "Y_COORDINATES " << numLines[1] << " " << __VTK_DATA_TYPE__ << endl;
for (unsigned int i=0; i<numLines[1]; ++i)
file << setprecision(precision) << discLines[1][i] * discLines_scaling << " ";
file << endl;
file << "Z_COORDINATES " << numLines[2] << " " << __VTK_DATA_TYPE__ << endl;
for (unsigned int i=0; i<numLines[2]; ++i)
file << setprecision(precision) << discLines[2][i] * discLines_scaling << " ";
file << endl << endl;
file << "POINT_DATA " << numLines[0]*numLines[1]*numLines[2] << endl;
}
void ProcessFields::WriteVTKCylindricalGridHeader(ofstream &file, double const* const* discLines, unsigned int const* numLines, unsigned int precision, string header_info, double discLines_scaling)
{
file << "# vtk DataFile Version 3.0" << endl;
file << "Structured Grid from openEMS_ProcessFields";
if (!header_info.empty())
file << " " << header_info;
file << endl;
file << "ASCII" << endl;
file << "DATASET STRUCTURED_GRID " << endl;
file << "DIMENSIONS " << numLines[0] << " " << numLines[1] << " " << numLines[2] << endl;
file << "POINTS " << numLines[0]*numLines[1]*numLines[2] << " " << __VTK_DATA_TYPE__ << endl;
for (unsigned int k=0; k<numLines[2]; ++k)
for (unsigned int j=0; j<numLines[1]; ++j)
for (unsigned int i=0; i<numLines[0]; ++i)
{
file << setprecision(precision) << discLines[0][i] * cos(discLines[1][j]) * discLines_scaling << " "
<< discLines[0][i] * sin(discLines[1][j]) * discLines_scaling << " "
<< discLines[2][k] * discLines_scaling << endl;
}
file << endl;
file << endl << endl;
file << "POINT_DATA " << numLines[0]*numLines[1]*numLines[2] << endl;
}
void ProcessFields::WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT const* const* const* const* array, double const* const* discLines, unsigned int const* numLines, unsigned int precision, MeshType meshT)
{
file << "VECTORS " << name << " " << __VTK_DATA_TYPE__ << endl;
if (g_settings.NativeFieldDumps())
meshT = CARTESIAN_MESH; //dump field components as they are...
unsigned int pos[3];
for (pos[2]=0; pos[2]<numLines[2]; ++pos[2])
{
for (pos[1]=0; pos[1]<numLines[1]; ++pos[1])
{
double cos_a = cos(discLines[1][pos[1]]); //needed only for CYLINDRICAL_MESH
double sin_a = sin(discLines[1][pos[1]]); //needed only for CYLINDRICAL_MESH
for (pos[0]=0; pos[0]<numLines[0]; ++pos[0])
{
switch (meshT)
{
case CARTESIAN_MESH:
UNUSED(discLines); //disclines not needed for the original cartesian mesh
//in x
file << setprecision(precision) << array[0][pos[0]][pos[1]][pos[2]] << " ";
//in y
file << setprecision(precision) << array[1][pos[0]][pos[1]][pos[2]] << " ";
//in z
file << setprecision(precision) << array[2][pos[0]][pos[1]][pos[2]] << endl;
break;
case CYLINDRICAL_MESH:
//in x : F_x = F_r * cos(a) - F_a * sin(a);
file << setprecision(precision) << array[0][pos[0]][pos[1]][pos[2]] * cos_a - array[1][pos[0]][pos[1]][pos[2]] * sin_a << " ";
//in y : F_y = F_r * sin(a) + F_a * cos(a);
file << setprecision(precision) << array[0][pos[0]][pos[1]][pos[2]] * sin_a + array[1][pos[0]][pos[1]][pos[2]] * cos_a << " ";
//in z
file << setprecision(precision) << array[2][pos[0]][pos[1]][pos[2]] << endl;
break;
}
}
}
}
}
bool ProcessFields::DumpVectorArray2VTK(ofstream &file, string name, FDTD_FLOAT const* const* const* const* array, double const* const* discLines, unsigned int const* numLines, unsigned int precision, string header_info, MeshType meshT, double discLines_scaling)
{
WriteVTKHeader(file, discLines, numLines, precision, header_info, meshT, discLines_scaling);
WriteVTKVectorArray(file, name, array, discLines, numLines, precision, meshT);
return true;
}
bool ProcessFields::DumpMultiVectorArray2VTK(ofstream &file, string names[], FDTD_FLOAT const* const* const* const* const* array, unsigned int numFields, double const* const* discLines, unsigned int const* numLines, unsigned int precision, string header_info, MeshType meshT, double discLines_scaling)
{
WriteVTKHeader(file, discLines, numLines, precision, header_info, meshT, discLines_scaling);
for (unsigned int n=0; n<numFields; ++n)
{
WriteVTKVectorArray(file, names[n], array[n], discLines, numLines, precision, meshT);
file << endl;
}
return true;
}
void ProcessFields::WriteVTKScalarArray(ofstream &file, string name, FDTD_FLOAT const* const* const* array, unsigned int const* numLines, unsigned int precision)
{
file << "SCALARS " << name << " " << __VTK_DATA_TYPE__ << 1 << endl;
file << "LOOKUP_TABLE default" << endl;
unsigned int pos[3];
int count=0;
for (pos[2]=0; pos[2]<numLines[2]; ++pos[2])
{
for (pos[1]=0; pos[1]<numLines[1]; ++pos[1])
{
for (pos[0]=0; pos[0]<numLines[0]; ++pos[0])
{
file << setprecision(precision) << array[pos[0]][pos[1]][pos[2]] << " ";
++count;
if (count%10==0)
file << endl;
}
}
}
}
bool ProcessFields::DumpScalarArray2VTK(ofstream &file, string name, FDTD_FLOAT const* const* const* array, double const* const* discLines, unsigned int const* numLines, unsigned int precision, string header_info, MeshType meshT, double discLines_scaling)
{
WriteVTKHeader(file, discLines, numLines, precision, header_info, meshT, discLines_scaling);
WriteVTKScalarArray(file, name, array, numLines, precision);
return true;
}
bool ProcessFields::DumpMultiScalarArray2VTK(ofstream &file, string names[], FDTD_FLOAT const* const* const* const* array, unsigned int numFields, double const* const* discLines, unsigned int const* numLines, unsigned int precision, string header_info, MeshType meshT, double discLines_scaling)
{
WriteVTKHeader(file, discLines, numLines, precision, header_info, meshT, discLines_scaling);
for (unsigned int n=0; n<numFields; ++n)
{
WriteVTKScalarArray(file, names[n], array[n], numLines, precision);
file << endl;
}
return true;
}
bool ProcessFields::WriteMesh2HDF5(string filename, string groupName, unsigned int const* numLines, double const* const* discLines, MeshType meshT, double discLines_scaling)
{
H5::H5File file( filename, H5F_ACC_RDWR );

View File

@ -67,22 +67,6 @@ public:
//! Set dump type: 0 for E-fields, 1 for H-fields, 2 for D-fields, 3 for B-fields, 4 for J-fields, etc...
void SetDumpType(DumpType type) {m_DumpType=type;}
//! Write a vtk header to an already open file with given mesh-type
static void WriteVTKHeader(ofstream &file, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, string header_info = string(), MeshType meshT = CARTESIAN_MESH, double discLines_scaling = 1);
//! Write a vtk header to an already open file (cartesian grid)
static void WriteVTKCartesianGridHeader(ofstream &file, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, string header_info = string(), double discLines_scaling = 1);
//! Write a vtk header to an already open file (cylindrical grid)
static void WriteVTKCylindricalGridHeader(ofstream &file, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, string header_info = string(), double discLines_scaling = 1);
//! Append a vtk vector array to an already open vtk file, write a header first! \sa WriteVTKHeader()
static void WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT const* const* const* const* array, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, MeshType meshT = CARTESIAN_MESH);
//! Append a vtk scalar array to an already open vtk file, write a header first! \sa WriteVTKHeader()
static void WriteVTKScalarArray(ofstream &file, string name, FDTD_FLOAT const* const* const* array, unsigned int const* numLines, unsigned int precision=12);
static bool DumpVectorArray2VTK(ofstream &file, string name, FDTD_FLOAT const* const* const * const* array, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, string header_info = string(), MeshType meshT = CARTESIAN_MESH, double discLines_scaling = 1);
static bool DumpMultiVectorArray2VTK(ofstream &file, string names[], FDTD_FLOAT const* const* const* const* const* array, unsigned int numFields, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, string header_info = string(), MeshType meshT = CARTESIAN_MESH, double discLines_scaling = 1);
static bool DumpScalarArray2VTK(ofstream &file, string name, FDTD_FLOAT const* const* const* array, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, string header_info = string(), MeshType meshT = CARTESIAN_MESH, double discLines_scaling = 1);
static bool DumpMultiScalarArray2VTK(ofstream &file, string names[], FDTD_FLOAT const* const* const* const* array, unsigned int numFields, double const* const* discLines, unsigned int const* numLines, unsigned int precision=12, string header_info = string(), MeshType meshT = CARTESIAN_MESH, double discLines_scaling = 1);
//! Write a mesh information to the given hdf5-group
static bool WriteMesh2HDF5(string filename, string groupName, unsigned int const* numLines, double const* const* discLines, MeshType meshT = CARTESIAN_MESH, double discLines_scaling = 1);

View File

@ -17,6 +17,7 @@
#include "processfields_sar.h"
#include "operator_base.h"
#include "tools/vtk_file_io.h"
ProcessFieldsSAR::ProcessFieldsSAR(Engine_Interface_Base* eng_if) : ProcessFieldsFD(eng_if)
{
@ -81,12 +82,6 @@ double ProcessFieldsSAR::GetKappaDensityRatio(const unsigned int* pos)
void ProcessFieldsSAR::DumpFDData()
{
#ifdef OUTPUT_IN_DRAWINGUNITS
double discLines_scaling = 1;
#else
double discLines_scaling = Op->GetGridDelta();
#endif
unsigned int pos[3];
FDTD_FLOAT*** SAR = Create3DArray<float>(numLines);
std::complex<float>**** field_fd = NULL;
@ -112,12 +107,13 @@ void ProcessFieldsSAR::DumpFDData()
if (m_fileType==VTK_FILETYPE)
{
stringstream ss;
ss << m_filename << fixed << "_f=" << m_FD_Samples.at(n) << ".vtk";
ofstream file(ss.str().c_str());
if (file.is_open()==false)
cerr << "ProcessFieldsSAR::DumpFDData: can't open file '" << ss.str() << "' for writing... abort! " << endl;
DumpScalarArray2VTK(file,GetFieldNameByType(m_DumpType),SAR,discLines,numLines,m_precision,string("Interpolation: ")+m_Eng_Interface->GetInterpolationTypeString(), m_Mesh_Type, discLines_scaling);
file.close();
ss << m_filename << fixed << "_f=" << m_FD_Samples.at(n);
m_Dump_File->SetFilename(ss.str());
m_Dump_File->ClearAllFields();
m_Dump_File->AddScalarField(GetFieldNameByType(m_DumpType),SAR,numLines);
if (m_Dump_File->Write()==false)
cerr << "ProcessFieldsSAR::Process: can't dump to file... abort! " << endl;
}
else if (m_fileType==HDF5_FILETYPE)
{

View File

@ -22,6 +22,7 @@
#include "extensions/operator_ext_excitation.h"
#include "Common/processfields.h"
#include "tools/array_ops.h"
#include "tools/vtk_file_io.h"
#include "fparser.hh"
Operator* Operator::New()
@ -404,13 +405,6 @@ void Operator::DumpOperator2File(string filename)
double discLines_scaling = GetGridDelta();
#endif
ofstream file(filename.c_str(),ios_base::out);
if (!file.is_open())
{
cerr << "Operator::DumpOperator2File(): Can't open file: " << filename << endl;
return;
}
cout << "Operator: Dumping FDTD operator information to vtk file: " << filename << " ..." << flush;
FDTD_FLOAT**** exc = Create_N_3DArray<FDTD_FLOAT>(numLines);
@ -437,18 +431,23 @@ void Operator::DumpOperator2File(string filename)
ii_temp[n][pos[0]][pos[1]][pos[2]] = GetII(n,pos);
}
string names[] = {"vv", "vi", "iv" , "ii", "exc"};
FDTD_FLOAT**** array[] = {vv_temp,vi_temp,iv_temp,ii_temp,exc};
VTK_File_IO* vtk_io = new VTK_File_IO(filename.c_str(), m_MeshType);
vtk_io->SetMeshLines(discLines,numLines,discLines_scaling);
vtk_io->SetHeader("openEMS - Operator dump");
ProcessFields::DumpMultiVectorArray2VTK(file, names , array , 5, discLines, numLines, 6, "Operator dump" , (ProcessFields::MeshType)m_MeshType, discLines_scaling);
Delete_N_3DArray(ii_temp,numLines);
Delete_N_3DArray(iv_temp,numLines);
Delete_N_3DArray(vi_temp,numLines);
vtk_io->AddVectorField("vv",vv_temp,numLines);
Delete_N_3DArray(vv_temp,numLines);
vtk_io->AddVectorField("vi",vi_temp,numLines);
Delete_N_3DArray(vi_temp,numLines);
vtk_io->AddVectorField("iv",iv_temp,numLines);
Delete_N_3DArray(iv_temp,numLines);
vtk_io->AddVectorField("ii",ii_temp,numLines);
Delete_N_3DArray(ii_temp,numLines);
vtk_io->AddVectorField("exc",exc,numLines);
Delete_N_3DArray(exc,numLines);
file.close();
if (vtk_io->Write()==false)
cerr << "Operator::DumpOperator2File: Error: Can't write file... skipping!" << endl;
cout << " done!" << endl;
}
@ -458,13 +457,6 @@ void Operator::DumpOperator2File(string filename)
//! visualize only one component (x, y or z)
void Operator::DumpPEC2File( string filename )
{
ofstream file( filename.c_str() );
if (!file.is_open())
{
cerr << "Operator::DumpPEC2File(): Can't open file: " << filename << endl;
return;
}
cout << "Operator: Dumping PEC information to vtk file: " << filename << " ..." << flush;
FDTD_FLOAT**** pec = Create_N_3DArray<FDTD_FLOAT>( numLines );
@ -533,9 +525,16 @@ void Operator::DumpPEC2File( string filename )
#else
scaling = GetGridDelta();
#endif
ProcessFields::DumpVectorArray2VTK( file, "PEC", pec, discLines, numLines, 6, "PEC dump" , (ProcessFields::MeshType)m_MeshType, scaling );
file.close();
VTK_File_IO* vtk_io = new VTK_File_IO(filename.c_str(), m_MeshType);
vtk_io->SetMeshLines(discLines,numLines,scaling);
vtk_io->SetHeader("openEMS - PEC dump");
vtk_io->AddVectorField("PEC",pec,numLines);
Delete_N_3DArray(pec,numLines);
if (vtk_io->Write()==false)
cerr << "Operator::DumpPEC2File: Error: Can't write file... skipping!" << endl;
cout << " done!" << endl;
}
@ -548,13 +547,6 @@ void Operator::DumpMaterial2File(string filename)
double discLines_scaling = GetGridDelta();
#endif
ofstream file(filename.c_str(),ios_base::out);
if (!file.is_open())
{
cerr << "Operator::DumpMaterial2File(): Can't open file: " << filename << endl;
return;
}
cout << "Operator: Dumping material information to vtk file: " << filename << " ..." << flush;
FDTD_FLOAT**** epsilon = Create_N_3DArray<FDTD_FLOAT>(numLines);
@ -582,17 +574,21 @@ void Operator::DumpMaterial2File(string filename)
}
}
string names[] = {"epsilon","mue","kappa","sigma"};
FDTD_FLOAT**** array[] = {epsilon,mue,kappa,sigma};
ProcessFields::DumpMultiVectorArray2VTK(file, names, array, 4, discLines, numLines, 6, "Material dump" , (ProcessFields::MeshType)m_MeshType, discLines_scaling);
VTK_File_IO* vtk_io = new VTK_File_IO(filename.c_str(), m_MeshType);
vtk_io->SetMeshLines(discLines,numLines,discLines_scaling);
vtk_io->SetHeader("openEMS - material dump");
vtk_io->AddVectorField("epsilon",epsilon,numLines);
Delete_N_3DArray(epsilon,numLines);
vtk_io->AddVectorField("mue",mue,numLines);
Delete_N_3DArray(mue,numLines);
vtk_io->AddVectorField("kappa",kappa,numLines);
Delete_N_3DArray(kappa,numLines);
vtk_io->AddVectorField("sigma",sigma,numLines);
Delete_N_3DArray(sigma,numLines);
file.close();
if (vtk_io->Write()==false)
cerr << "Operator::DumpMaterial2File: Error: Can't write file... skipping!" << endl;
cout << " done!" << endl;
}
@ -838,11 +834,11 @@ int Operator::CalcECOperator( DebugFlags debugFlags )
m_Op_exts.at(n)->BuildExtension();
if (debugFlags & debugMaterial)
DumpMaterial2File( "material_dump.vtk" );
DumpMaterial2File( "material_dump" );
if (debugFlags & debugOperator)
DumpOperator2File( "operator_dump.vtk" );
DumpOperator2File( "operator_dump" );
if (debugFlags & debugPEC)
DumpPEC2File( "PEC_dump.vtk" );
DumpPEC2File( "PEC_dump" );
//cleanup
for (int n=0; n<3; ++n)