int main(int argc, char *argv[]) { std::string filename(argv[1]); std::string basename; { size_t pos = filename.rfind(".sgy"); if(pos==std::string::npos) { pos = filename.rfind(".segy"); } if(pos==std::string::npos) { pos = filename.rfind(".SGY"); } if(pos==std::string::npos) { pos = filename.rfind(".SEGY"); } if(pos==std::string::npos) { opesci_abort("Do not recognise file extension. Expecting either .segy or .sgy"); } basename = filename.substr(0, pos); } std::vector<float> array; int dim[] = {1, 1, 1}; float spacing[] = {1.0, 1.0, 1.0}; opesci_read_model_segy(filename.c_str(), array, dim, spacing); opesci_dump_field_vts(basename, dim, spacing, array); return 0; }
void opesci_dump_field_vts_3d(std::string name, const int dims[], const float spacing[], int margin, float *field) { #ifdef VTK_FOUND vtkSmartPointer<vtkStructuredGrid> sg = vtkSmartPointer<vtkStructuredGrid>::New(); sg->SetDimensions(dims[0], dims[1], dims[2]); { vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); for(int i=0; i<dims[0]; i++) { float x = (i-margin)*spacing[0]; for(int j=0; j<dims[1]; j++) { float y = (j-margin)*spacing[1]; for(int k=0; k<dims[2]; k++) { float z = (k-margin)*spacing[2]; points->InsertNextPoint(x, y, z); } } } sg->SetPoints(points); } { vtkSmartPointer<vtkFloatArray> vtkfield = vtkSmartPointer<vtkFloatArray>::New(); vtkfield->SetName("field"); vtkfield->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); for(int i=0; i<dims[0]; i++) { for(int j=0; j<dims[1]; j++) { for(int k=0; k<dims[2]; k++) { int index = i*dims[1]*dims[2]+j*dims[2]+k; vtkfield->SetTuple1(index, *(field+index)); } } } sg->GetPointData()->AddArray(vtkfield); } vtkSmartPointer<vtkXMLStructuredGridWriter> writer = vtkSmartPointer<vtkXMLStructuredGridWriter>::New(); writer->SetFileName(std::string(name+".vts").c_str()); vtkSmartPointer<vtkZLibDataCompressor> compressor = vtkSmartPointer<vtkZLibDataCompressor>::New(); compressor->SetCompressionLevel(9); writer->SetCompressor(compressor); #if VTK_MAJOR_VERSION <= 5 writer->SetInput(sg); #else writer->SetInputData(sg); #endif writer->Write(); #else opesci_abort("ERROR: OPESCI built without VTK support. Cannot dump VTK files."); #endif }
void opesci_dump_field_vts(std::string name, const int dims[], const float spacing[], std::vector<float> &field) { #ifdef VTK_FOUND assert(dims[0]*dims[1]*dims[2]==field.size()); vtkSmartPointer<vtkStructuredGrid> sg = vtkSmartPointer<vtkStructuredGrid>::New(); sg->SetDimensions(dims[0], dims[1], dims[2]); { vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->SetNumberOfPoints(dims[0]*dims[1]*dims[2]); vtkSmartPointer<vtkFloatArray> vtkfield = vtkSmartPointer<vtkFloatArray>::New(); vtkfield->SetName("field"); vtkfield->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); vtkIdType pcnt=0; for(int k=0; k<dims[2]; k++) { float z = k*spacing[2]; for(int j=0; j<dims[1]; j++) { float y = j*spacing[1]; for(int i=0; i<dims[0]; i++) { float x = i*spacing[0]; points->SetPoint(pcnt, x, y, z); vtkfield->SetTuple1(pcnt, field[pcnt]); pcnt++; } } } sg->SetPoints(points); sg->GetPointData()->AddArray(vtkfield); } vtkSmartPointer<vtkXMLStructuredGridWriter> writer = vtkSmartPointer<vtkXMLStructuredGridWriter>::New(); writer->SetFileName(std::string(name+".vts").c_str()); vtkSmartPointer<vtkZLibDataCompressor> compressor = vtkSmartPointer<vtkZLibDataCompressor>::New(); compressor->SetCompressionLevel(1); writer->SetCompressor(compressor); #if VTK_MAJOR_VERSION <= 5 writer->SetInput(sg); #else writer->SetInputData(sg); #endif writer->Write(); #else opesci_abort("ERROR: OPESCI built without VTK support. Cannot dump VTK files."); #endif }
void opesci_dump_solution_vts(std::string name, const int dims[], const float spacing[], std::vector<float> &u, std::vector<float> &v, std::vector<float> &w, std::vector<float> &txx, std::vector<float> &tyy, std::vector<float> &tzz){ #ifdef VTK_FOUND vtkSmartPointer<vtkStructuredGrid> sg = vtkSmartPointer<vtkStructuredGrid>::New(); sg->SetDimensions(dims[0], dims[1], dims[2]); { vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); for(int k=0;k<dims[2];k++){ float z = k*spacing[2]; for(int j=0;j<dims[1];j++){ float y = j*spacing[1]; for(int i=0;i<dims[0];i++){ float x = i*spacing[0]; points->InsertNextPoint(x, y, z); } } } sg->SetPoints(points); } { vtkSmartPointer<vtkFloatArray> velocity = vtkSmartPointer<vtkFloatArray>::New(); velocity->SetName("velocity"); velocity->SetNumberOfComponents(3); velocity->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); for(int k=0;k<dims[2];k++){ for(int j=0;j<dims[1];j++){ for(int i=0;i<dims[0];i++){ int index = k*dims[0]*dims[1]+j*dims[1]+i; velocity->SetTuple3(index, u[index], v[index], w[index]); } } } sg->GetPointData()->AddArray(velocity); } { vtkSmartPointer<vtkFloatArray> pressure = vtkSmartPointer<vtkFloatArray>::New(); pressure->SetName("pressure"); pressure->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); pressure->SetNumberOfComponents(1); for(int k=0;k<dims[2];k++){ for(int j=0;j<dims[1];j++){ for(int i=0;i<dims[0];i++){ int index = k*dims[0]*dims[1]+j*dims[1]+i; pressure->SetTuple1(index, (txx[index]+tyy[index]+tzz[index])/3); } } } sg->GetPointData()->AddArray(pressure); } vtkSmartPointer<vtkXMLStructuredGridWriter> writer = vtkSmartPointer<vtkXMLStructuredGridWriter>::New(); writer->SetFileName(std::string(name+".vts").c_str()); vtkSmartPointer<vtkZLibDataCompressor> compressor = vtkSmartPointer<vtkZLibDataCompressor>::New(); compressor->SetCompressionLevel(9); writer->SetCompressor(compressor); writer->SetInput(sg); writer->Write(); #else opesci_abort("ERROR: OPESCI built without VTK support. Cannot dump VTK files."); #endif }
void opesci_dump_receivers_vts(std::string name, const int dims[], const float spacing[], std::vector<float> &uss, std::vector<float> &vss, std::vector<float> &wss, std::vector<float> &pss){ #ifdef VTK_FOUND vtkSmartPointer<vtkStructuredGrid> sg = vtkSmartPointer<vtkStructuredGrid>::New(); sg->SetDimensions(dims[0], dims[1], dims[2]); { vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); for(int k=0;k<dims[2];k++){ float z = k*spacing[2]; for(int j=0;j<dims[1];j++){ float y = j*spacing[1]; for(int i=0;i<dims[0];i++){ float x = i*spacing[0]; points->InsertNextPoint(x, y, z); } } } sg->SetPoints(points); } { vtkSmartPointer<vtkFloatArray> vtkfield = vtkSmartPointer<vtkFloatArray>::New(); vtkfield->SetName("vss"); vtkfield->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); for(int k=0;k<dims[2];k++){ for(int j=0;j<dims[1];j++){ for(int i=0;i<dims[0];i++){ int index = k*dims[0]*dims[1]+j*dims[1]+i; vtkfield->SetTuple1(index, vss[index]); } } } sg->GetPointData()->AddArray(vtkfield); } { vtkSmartPointer<vtkFloatArray> vtkfield = vtkSmartPointer<vtkFloatArray>::New(); vtkfield->SetName("wss"); vtkfield->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); for(int k=0;k<dims[2];k++){ for(int j=0;j<dims[1];j++){ for(int i=0;i<dims[0];i++){ int index = k*dims[0]*dims[1]+j*dims[1]+i; vtkfield->SetTuple1(index, wss[index]); } } } sg->GetPointData()->AddArray(vtkfield); } { vtkSmartPointer<vtkFloatArray> vtkfield = vtkSmartPointer<vtkFloatArray>::New(); vtkfield->SetName("pss"); vtkfield->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); for(int k=0;k<dims[2];k++){ for(int j=0;j<dims[1];j++){ for(int i=0;i<dims[0];i++){ int index = k*dims[0]*dims[1]+j*dims[1]+i; vtkfield->SetTuple1(index, pss[index]); } } } sg->GetPointData()->AddArray(vtkfield); } { vtkSmartPointer<vtkFloatArray> vtkfield = vtkSmartPointer<vtkFloatArray>::New(); vtkfield->SetName("uss"); vtkfield->SetNumberOfTuples(dims[0]*dims[1]*dims[2]); for(int k=0;k<dims[2];k++){ for(int j=0;j<dims[1];j++){ for(int i=0;i<dims[0];i++){ int index = k*dims[0]*dims[1]+j*dims[1]+i; vtkfield->SetTuple1(index, uss[index]); } } } sg->GetPointData()->AddArray(vtkfield); } vtkSmartPointer<vtkXMLStructuredGridWriter> writer = vtkSmartPointer<vtkXMLStructuredGridWriter>::New(); writer->SetFileName(std::string(name+".vts").c_str()); vtkSmartPointer<vtkZLibDataCompressor> compressor = vtkSmartPointer<vtkZLibDataCompressor>::New(); compressor->SetCompressionLevel(9); writer->SetCompressor(compressor); writer->SetInput(sg); writer->Write(); #else opesci_abort("ERROR: OPESCI built without VTK support. Cannot dump VTK files."); #endif }