define dump precision

pull/1/head
Thorsten Liebig 2010-04-12 09:38:24 +02:00
parent 4db42917bb
commit b4bc990b0f
7 changed files with 42 additions and 33 deletions

View File

@ -16,6 +16,7 @@
*/
#include "processcurrent.h"
#include <iomanip>
ProcessCurrent::ProcessCurrent(Operator* op, Engine* eng) : Processing(op, eng)
{
@ -97,6 +98,6 @@ int ProcessCurrent::Process()
// cerr << "ts: " << Eng->numTS << " i: " << current << endl;
v_current.push_back(current);
//current is sampled half a timestep later then the voltages
file << (0.5 + (double)Eng->GetNumberOfTimesteps())*Op->GetTimestep() << "\t" << current << endl;
file << setprecision(m_precision) << (0.5 + (double)Eng->GetNumberOfTimesteps())*Op->GetTimestep() << "\t" << current << endl;
return GetNextInterval();
}

View File

@ -17,6 +17,7 @@
#include "processfields.h"
#include <iomanip>
#include "H5Cpp.h"
ProcessFields::ProcessFields(Operator* op, Engine* eng) : Processing(op, eng)
@ -26,6 +27,7 @@ ProcessFields::ProcessFields(Operator* op, Engine* eng) : Processing(op, eng)
// vtk-file is default
m_fileType = VTK_FILETYPE;
SetSubSampling(1);
SetPrecision(6);
for (int n=0;n<3;++n)
{
@ -203,7 +205,7 @@ void ProcessFields::SetSubSampling(unsigned int subSampleRate, int dir)
else subSample[dir]=subSampleRate;
}
void ProcessFields::WriteVTKHeader(ofstream &file, double** discLines, unsigned int* numLines)
void ProcessFields::WriteVTKHeader(ofstream &file, double** discLines, unsigned int* numLines, unsigned int precision)
{
file << "# vtk DataFile Version 2.0" << endl;
file << "Rectilinear Grid openEMS_ProcessFields" << endl;
@ -212,20 +214,20 @@ void ProcessFields::WriteVTKHeader(ofstream &file, double** discLines, unsigned
file << "DIMENSIONS " << numLines[0] << " " << numLines[1] << " " << numLines[2] << endl;
file << "X_COORDINATES " << numLines[0] << " float" << endl;
for (unsigned int i=0;i<numLines[0];++i)
file << discLines[0][i] << " ";
file << setprecision(precision) << discLines[0][i] << " ";
file << endl;
file << "Y_COORDINATES " << numLines[1] << " float" << endl;
for (unsigned int i=0;i<numLines[1];++i)
file << discLines[1][i] << " ";
file << setprecision(precision) << discLines[1][i] << " ";
file << endl;
file << "Z_COORDINATES " << numLines[2] << " float" << endl;
for (unsigned int i=0;i<numLines[2];++i)
file << discLines[2][i] << " ";
file << setprecision(precision) << discLines[2][i] << " ";
file << endl << endl;
file << "POINT_DATA " << numLines[0]*numLines[1]*numLines[2] << endl;
}
void ProcessFields::WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT**** array, unsigned int* numLines)
void ProcessFields::WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT**** array, unsigned int* numLines, unsigned int precision)
{
file << "VECTORS " << name << " float " << endl;
@ -237,36 +239,36 @@ void ProcessFields::WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT*
for (pos[0]=0;pos[0]<numLines[0];++pos[0])
{
//in x
file << array[0][pos[0]][pos[1]][pos[2]] << " ";
file << setprecision(precision) << array[0][pos[0]][pos[1]][pos[2]] << " ";
//in y
file << array[1][pos[0]][pos[1]][pos[2]] << " ";
file << setprecision(precision) << array[1][pos[0]][pos[1]][pos[2]] << " ";
//in z
file << array[2][pos[0]][pos[1]][pos[2]] << endl;
file << setprecision(precision) << array[2][pos[0]][pos[1]][pos[2]] << endl;
}
}
}
}
bool ProcessFields::DumpVectorArray2VTK(ofstream &file, string name, FDTD_FLOAT**** array, double** discLines, unsigned int* numLines)
bool ProcessFields::DumpVectorArray2VTK(ofstream &file, string name, FDTD_FLOAT**** array, double** discLines, unsigned int* numLines, unsigned int precision)
{
WriteVTKHeader(file, discLines, numLines);
WriteVTKVectorArray(file, name, array, numLines);
WriteVTKHeader(file, discLines, numLines, precision);
WriteVTKVectorArray(file, name, array, numLines, precision);
return true;
}
bool ProcessFields::DumpMultiVectorArray2VTK(ofstream &file, string names[], FDTD_FLOAT**** array[], unsigned int numFields, double** discLines, unsigned int* numLines)
bool ProcessFields::DumpMultiVectorArray2VTK(ofstream &file, string names[], FDTD_FLOAT**** array[], unsigned int numFields, double** discLines, unsigned int* numLines, unsigned int precision)
{
WriteVTKHeader(file, discLines, numLines);
WriteVTKHeader(file, discLines, numLines, precision);
for (unsigned int n=0;n<numFields;++n)
{
WriteVTKVectorArray(file, names[n], array[n], numLines);
WriteVTKVectorArray(file, names[n], array[n], numLines, precision);
file << endl;
}
return true;
}
void ProcessFields::WriteVTKScalarArray(ofstream &file, string name, FDTD_FLOAT*** array, unsigned int* numLines)
void ProcessFields::WriteVTKScalarArray(ofstream &file, string name, FDTD_FLOAT*** array, unsigned int* numLines, unsigned int precision)
{
file << "SCALARS " << name << " float " << 1 << endl;
file << "LOOKUP_TABLE default" << endl;
@ -287,19 +289,19 @@ void ProcessFields::WriteVTKScalarArray(ofstream &file, string name, FDTD_FLOAT*
}
}
bool ProcessFields::DumpScalarArray2VTK(ofstream &file, string name, FDTD_FLOAT*** array, double** discLines, unsigned int* numLines)
bool ProcessFields::DumpScalarArray2VTK(ofstream &file, string name, FDTD_FLOAT*** array, double** discLines, unsigned int* numLines, unsigned int precision)
{
WriteVTKHeader(file, discLines, numLines);
WriteVTKScalarArray(file, name, array, numLines);
WriteVTKHeader(file, discLines, numLines, precision);
WriteVTKScalarArray(file, name, array, numLines, precision);
return true;
}
bool ProcessFields::DumpMultiScalarArray2VTK(ofstream &file, string names[], FDTD_FLOAT*** array[], unsigned int numFields, double** discLines, unsigned int* numLines)
bool ProcessFields::DumpMultiScalarArray2VTK(ofstream &file, string names[], FDTD_FLOAT*** array[], unsigned int numFields, double** discLines, unsigned int* numLines, unsigned int precision)
{
WriteVTKHeader(file, discLines, numLines);
for (unsigned int n=0;n<numFields;++n)
{
WriteVTKScalarArray(file, names[n], array[n], numLines);
WriteVTKScalarArray(file, names[n], array[n], numLines, precision);
file << endl;
}
return true;

View File

@ -52,10 +52,10 @@ 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;}
static bool DumpVectorArray2VTK(ofstream &file, string name, FDTD_FLOAT**** array, double** discLines, unsigned int* numLines);
static bool DumpMultiVectorArray2VTK(ofstream &file, string names[], FDTD_FLOAT**** array[], unsigned int numFields, double** discLines, unsigned int* numLines);
static bool DumpScalarArray2VTK(ofstream &file, string name, FDTD_FLOAT*** array, double** discLines, unsigned int* numLines);
static bool DumpMultiScalarArray2VTK(ofstream &file, string names[], FDTD_FLOAT*** array[], unsigned int numFields, double** discLines, unsigned int* numLines);
static bool DumpVectorArray2VTK(ofstream &file, string name, FDTD_FLOAT**** array, double** discLines, unsigned int* numLines, unsigned int precision=12);
static bool DumpMultiVectorArray2VTK(ofstream &file, string names[], FDTD_FLOAT**** array[], unsigned int numFields, double** discLines, unsigned int* numLines, unsigned int precision=12);
static bool DumpScalarArray2VTK(ofstream &file, string name, FDTD_FLOAT*** array, double** discLines, unsigned int* numLines, unsigned int precision=12);
static bool DumpMultiScalarArray2VTK(ofstream &file, string names[], FDTD_FLOAT*** array[], unsigned int numFields, double** discLines, unsigned int* numLines, unsigned int precision=12);
static bool DumpVectorArray2HDF5(string filename, string name, FDTD_FLOAT**** array, unsigned int* numLines);
@ -65,9 +65,9 @@ public:
// virtual void Process();
protected:
static void WriteVTKHeader(ofstream &file, double** discLines, unsigned int* numLines);
static void WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT**** array, unsigned int* numLines);
static void WriteVTKScalarArray(ofstream &file, string name, FDTD_FLOAT*** array, unsigned int* numLines);
static void WriteVTKHeader(ofstream &file, double** discLines, unsigned int* numLines, unsigned int precision=12);
static void WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT**** array, unsigned int* numLines, unsigned int precision=12);
static void WriteVTKScalarArray(ofstream &file, string name, FDTD_FLOAT*** array, unsigned int* numLines, unsigned int precision=12);
static string GetFieldNameByType(DumpType type);
DumpMode m_DumpMode;

View File

@ -71,7 +71,7 @@ void ProcessFieldsTD::DumpCellInterpol(string filename)
{
ofstream file(filename.c_str());
if (file.is_open()==false) { cerr << "ProcessFieldsTD::Process: can't open file '" << filename << "' for writing... abort! " << endl;};
DumpVectorArray2VTK(file,string("E-Field"),E_T,discDLines,numDLines);
DumpVectorArray2VTK(file,string("E-Field"),E_T,discDLines,numDLines,m_precision);
file.close();
}
else if (m_fileType==HDF5_FILETYPE)
@ -123,7 +123,7 @@ void ProcessFieldsTD::DumpCellInterpol(string filename)
{
ofstream file(filename.c_str());
if (file.is_open()==false) { cerr << "ProcessFieldsTD::Process: can't open file '" << filename << "' for writing... abort! " << endl;};
DumpVectorArray2VTK(file,string("H-Field"),H_T,discDLines,numDLines);
DumpVectorArray2VTK(file,string("H-Field"),H_T,discDLines,numDLines,m_precision);
file.close();
}
else if (m_fileType==HDF5_FILETYPE)
@ -173,7 +173,7 @@ void ProcessFieldsTD::DumpNoInterpol(string filename)
{
ofstream file(filename.c_str());
if (file.is_open()==false) { cerr << "ProcessFieldsTD::Process: can't open file '" << filename << "' for writing... abort! " << endl;};
DumpVectorArray2VTK(file,string("E-Field"),E_T,discLines,numLines);
DumpVectorArray2VTK(file,string("E-Field"),E_T,discLines,numLines,m_precision);
file.close();
}
else if (m_fileType==HDF5_FILETYPE)
@ -216,7 +216,7 @@ void ProcessFieldsTD::DumpNoInterpol(string filename)
{
ofstream file(filename.c_str());
if (file.is_open()==false) { cerr << "ProcessFieldsTD::Process: can't open file '" << filename << "' for writing... abort! " << endl;};
DumpVectorArray2VTK(file,string("H-Field"),H_T,discLines,numLines);
DumpVectorArray2VTK(file,string("H-Field"),H_T,discLines,numLines,m_precision);
file.close();
}
else if (m_fileType==HDF5_FILETYPE)

View File

@ -23,6 +23,7 @@ Processing::Processing(Operator* op, Engine* eng)
Eng=eng;
Enabled = true;
m_PS_pos = 0;
SetPrecision(12);
ProcessInterval=0;
}

View File

@ -46,9 +46,13 @@ public:
//! If Disabled Process() will do nothing...
virtual bool GetEnable() const {return Enabled;}
//! Set the dump precision
void SetPrecision(unsigned int val) {m_precision = val;}
protected:
Operator* Op;
Engine* Eng;
unsigned int m_precision;
bool Enabled;

View File

@ -16,6 +16,7 @@
*/
#include "processvoltage.h"
#include <iomanip>
ProcessVoltage::ProcessVoltage(Operator* op, Engine* eng) : Processing(op, eng)
{
@ -45,6 +46,6 @@ int ProcessVoltage::Process()
FDTD_FLOAT voltage=CalcLineIntegral(start,stop,0);
// cerr << voltage << endl;
voltages.push_back(voltage);
file << (double)Eng->GetNumberOfTimesteps()*Op->GetTimestep() << "\t" << voltage << endl;
file << setprecision(m_precision) << (double)Eng->GetNumberOfTimesteps()*Op->GetTimestep() << "\t" << voltage << endl;
return GetNextInterval();
}