int ProcessFieldsTD::Process() { if (Enabled==false) return -1; if (CheckTimestep()==false) return GetNextInterval(); string filename = m_filename; float**** field = CalcField(); bool success = true; if (m_fileType==VTK_FILETYPE) { m_Vtk_Dump_File->SetTimestep(m_Eng_Interface->GetNumberOfTimesteps()); m_Vtk_Dump_File->ClearAllFields(); m_Vtk_Dump_File->AddVectorField(GetFieldNameByType(m_DumpType),field); success &= m_Vtk_Dump_File->Write(); } else if (m_fileType==HDF5_FILETYPE) { stringstream ss; ss << std::setw( pad_length ) << std::setfill( '0' ) << m_Eng_Interface->GetNumberOfTimesteps(); size_t datasize[]={numLines[0],numLines[1],numLines[2]}; success &= m_HDF5_Dump_File->WriteVectorField(ss.str(), field, datasize); float time[1]={m_Eng_Interface->GetTime(m_dualTime)}; success &= m_HDF5_Dump_File->WriteAtrribute("/FieldData/TD/"+ss.str(),"time",time,1); } else { success = false; cerr << "ProcessFieldsTD::Process: unknown File-Type" << endl; } Delete_N_3DArray<FDTD_FLOAT>(field,numLines); if (success==false) { SetEnable(false); cerr << "ProcessFieldsTD::Process: can't dump to file... disabled! " << endl; } return GetNextInterval(); }
void ProcessFieldsFD::DumpFDData() { if (m_fileType==VTK_FILETYPE) { unsigned int pos[3]; FDTD_FLOAT**** field = Create_N_3DArray<float>(numLines); std::complex<float>**** field_fd = NULL; double angle=0; int Nr_Ph = 21; for (size_t n = 0; n<m_FD_Samples.size(); ++n) { //dump multiple phase to vtk-files for (int p=0; p<Nr_Ph; ++p) { angle = 2.0 * M_PI * p / Nr_Ph; std::complex<float> exp_jwt = std::exp( (std::complex<float>)( _I * angle) ); field_fd = m_FD_Fields.at(n); for (pos[0]=0; pos[0]<numLines[0]; ++pos[0]) { for (pos[1]=0; pos[1]<numLines[1]; ++pos[1]) { for (pos[2]=0; pos[2]<numLines[2]; ++pos[2]) { field[0][pos[0]][pos[1]][pos[2]] = real(field_fd[0][pos[0]][pos[1]][pos[2]] * exp_jwt); field[1][pos[0]][pos[1]][pos[2]] = real(field_fd[1][pos[0]][pos[1]][pos[2]] * exp_jwt); field[2][pos[0]][pos[1]][pos[2]] = real(field_fd[2][pos[0]][pos[1]][pos[2]] * exp_jwt); } } } stringstream ss; ss << m_filename << fixed << "_f=" << m_FD_Samples.at(n) << "_p=" << std::setw( 3 ) << std::setfill( '0' ) <<(int)(angle * 180 / M_PI); m_Vtk_Dump_File->SetFilename(ss.str()); m_Vtk_Dump_File->ClearAllFields(); m_Vtk_Dump_File->AddVectorField(GetFieldNameByType(m_DumpType),field); if (m_Vtk_Dump_File->Write()==false) cerr << "ProcessFieldsFD::Process: can't dump to file... abort! " << endl; } { //dump magnitude to vtk-files for (pos[0]=0; pos[0]<numLines[0]; ++pos[0]) { for (pos[1]=0; pos[1]<numLines[1]; ++pos[1]) { for (pos[2]=0; pos[2]<numLines[2]; ++pos[2]) { field[0][pos[0]][pos[1]][pos[2]] = abs(field_fd[0][pos[0]][pos[1]][pos[2]]); field[1][pos[0]][pos[1]][pos[2]] = abs(field_fd[1][pos[0]][pos[1]][pos[2]]); field[2][pos[0]][pos[1]][pos[2]] = abs(field_fd[2][pos[0]][pos[1]][pos[2]]); } } } stringstream ss; ss << m_filename << fixed << "_f=" << m_FD_Samples.at(n) << "_abs"; m_Vtk_Dump_File->SetFilename(ss.str()); m_Vtk_Dump_File->ClearAllFields(); m_Vtk_Dump_File->AddVectorField(GetFieldNameByType(m_DumpType),field); if (m_Vtk_Dump_File->Write()==false) cerr << "ProcessFieldsFD::Process: can't dump to file... abort! " << endl; } { //dump phase to vtk-files for (pos[0]=0; pos[0]<numLines[0]; ++pos[0]) { for (pos[1]=0; pos[1]<numLines[1]; ++pos[1]) { for (pos[2]=0; pos[2]<numLines[2]; ++pos[2]) { field[0][pos[0]][pos[1]][pos[2]] = arg(field_fd[0][pos[0]][pos[1]][pos[2]]); field[1][pos[0]][pos[1]][pos[2]] = arg(field_fd[1][pos[0]][pos[1]][pos[2]]); field[2][pos[0]][pos[1]][pos[2]] = arg(field_fd[2][pos[0]][pos[1]][pos[2]]); } } } stringstream ss; ss << m_filename << fixed << "_f=" << m_FD_Samples.at(n) << "_arg"; m_Vtk_Dump_File->SetFilename(ss.str()); m_Vtk_Dump_File->ClearAllFields(); m_Vtk_Dump_File->AddVectorField(GetFieldNameByType(m_DumpType),field); if (m_Vtk_Dump_File->Write()==false) cerr << "ProcessFieldsFD::Process: can't dump to file... abort! " << endl; } } Delete_N_3DArray(field,numLines); return; } if (m_fileType==HDF5_FILETYPE) { for (size_t n = 0; n<m_FD_Samples.size(); ++n) { stringstream ss; ss << "f" << n; size_t datasize[]={numLines[0],numLines[1],numLines[2]}; if (m_HDF5_Dump_File->WriteVectorField(ss.str(), m_FD_Fields.at(n), datasize)==false) cerr << "ProcessFieldsFD::Process: can't dump to file...! " << endl; //legacy support, use /FieldData/FD frequency-Attribute in the future float freq[1] = {(float)m_FD_Samples.at(n)}; if (m_HDF5_Dump_File->WriteAtrribute("/FieldData/FD/"+ss.str()+"_real","frequency",freq,1)==false) cerr << "ProcessFieldsFD::Process: can't dump to file...! " << endl; if (m_HDF5_Dump_File->WriteAtrribute("/FieldData/FD/"+ss.str()+"_imag","frequency",freq,1)==false) cerr << "ProcessFieldsFD::Process: can't dump to file...! " << endl; } return; } cerr << "ProcessFieldsFD::Process: unknown File-Type" << endl; }