removed old legacy vtk file writing
This commit is contained in:
parent
01e8a8011a
commit
7d30ce2fb6
@ -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 );
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user