示例#1
0
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;
}
示例#2
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
}
示例#3
0
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
}
示例#4
0
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
}
示例#5
0
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
}