fix vtk-dump: vector fields consider mesh type
furthermore: - new argument: --nativeFieldDumps to dump original FDTD field components for debugging purposes - show global arguments on startuppull/1/head
parent
482de93d3d
commit
1e78e5c2d6
|
@ -345,23 +345,42 @@ void ProcessFields::WriteVTKCylindricalGridHeader(ofstream &file, double const*
|
|||
}
|
||||
|
||||
|
||||
void ProcessFields::WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT const* const* const* const* array, unsigned int const* numLines, unsigned int precision)
|
||||
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 << " float " << 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])
|
||||
{
|
||||
//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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -371,7 +390,7 @@ void ProcessFields::WriteVTKVectorArray(ofstream &file, string name, FDTD_FLOAT
|
|||
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, numLines, precision);
|
||||
WriteVTKVectorArray(file, name, array, discLines, numLines, precision, meshT);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -380,7 +399,7 @@ bool ProcessFields::DumpMultiVectorArray2VTK(ofstream &file, string names[], FDT
|
|||
WriteVTKHeader(file, discLines, numLines, precision, header_info, meshT, discLines_scaling);
|
||||
for (unsigned int n=0;n<numFields;++n)
|
||||
{
|
||||
WriteVTKVectorArray(file, names[n], array[n], numLines, precision);
|
||||
WriteVTKVectorArray(file, names[n], array[n], discLines, numLines, precision, meshT);
|
||||
file << endl;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -61,7 +61,7 @@ public:
|
|||
//! 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, unsigned int const* numLines, unsigned int precision=12);
|
||||
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);
|
||||
|
||||
|
|
2
main.cpp
2
main.cpp
|
@ -62,6 +62,8 @@ int main(int argc, char *argv[])
|
|||
cout << "\t\t--engine=multithreaded\t\tengine using compressed operator + sse vector extensions + multithreading" << endl;
|
||||
cout << "\t--numThreads=<n>\tForce use n threads for multithreaded engine (needs: --engine=multithreaded)" << endl;
|
||||
cout << "\t--no-simulation\tonly run preprocessing; do not simulate" << endl;
|
||||
cout << "\n\t Additional global arguments " << endl;
|
||||
g_settings.ShowArguments(cout,"\t");
|
||||
cout << endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
|
|
@ -27,6 +27,13 @@ Global g_settings;
|
|||
Global::Global()
|
||||
{
|
||||
m_showProbeDiscretization = false;
|
||||
m_nativeFieldDumps = false;
|
||||
}
|
||||
|
||||
void Global::ShowArguments(ostream& ostr, string front)
|
||||
{
|
||||
ostr << front << "--showProbeDiscretization\tShow probe discretization information" << endl;
|
||||
ostr << front << "--nativeFieldDumps\tDump all fields using the native field components" << endl;
|
||||
}
|
||||
|
||||
//! \brief This function initializes the object
|
||||
|
@ -41,6 +48,11 @@ bool Global::parseCommandLineArgument( const char *argv )
|
|||
m_showProbeDiscretization = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
else if (strcmp(argv,"--nativeFieldDumps")==0)
|
||||
{
|
||||
cout << "openEMS - dumping all fields using the native field components" << endl;
|
||||
m_nativeFieldDumps = true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#ifndef GLOBAL_H
|
||||
#define GLOBAL_H
|
||||
|
||||
#include <sstream>
|
||||
|
||||
class Global
|
||||
{
|
||||
public:
|
||||
|
@ -26,8 +28,14 @@ public:
|
|||
|
||||
bool showProbeDiscretization() const {return m_showProbeDiscretization;}
|
||||
|
||||
//! Returns true if native field dumps are requested...
|
||||
bool NativeFieldDumps() const {return m_nativeFieldDumps;}
|
||||
|
||||
void ShowArguments(std::ostream& ostr, std::string front=std::string());
|
||||
|
||||
protected:
|
||||
bool m_showProbeDiscretization;
|
||||
bool m_nativeFieldDumps;
|
||||
};
|
||||
|
||||
extern Global g_settings;
|
||||
|
|
Loading…
Reference in New Issue