implemented vgrids2VTK to surveyUtils
This commit is contained in:
		
							parent
							
								
									98df4db95d
								
							
						
					
					
						commit
						f7878cdb4a
					
				| @ -194,5 +194,115 @@ def findTracesInRanges(shot_dict, distancebin, pickbin): | ||||
| 
 | ||||
|     return shots_found | ||||
|          | ||||
| def vgrids2VTK(inputfile = 'vgrids.in', outputfile = 'vgrids.vtk'): | ||||
|     def getDistance(angle): | ||||
|         PI = np.pi | ||||
|         R = 6371. | ||||
|         distance = angle / 180 * (PI * R) | ||||
|         return distance | ||||
| 
 | ||||
|     def readNumberOfPoints(filename): | ||||
|         fin = open(filename, 'r') | ||||
|         vglines = fin.readlines() | ||||
| 
 | ||||
|         nR = int(vglines[1].split()[0]) | ||||
|         nTheta = int(vglines[1].split()[1]) | ||||
|         nPhi = int(vglines[1].split()[2]) | ||||
| 
 | ||||
|         fin.close() | ||||
|         return nR, nTheta, nPhi | ||||
| 
 | ||||
|     def readDelta(filename): | ||||
|         fin = open(filename, 'r') | ||||
|         vglines = fin.readlines() | ||||
| 
 | ||||
|         dR = float(vglines[2].split()[0]) | ||||
|         dTheta = float(vglines[2].split()[1]) | ||||
|         dPhi = float(vglines[2].split()[2]) | ||||
| 
 | ||||
|         fin.close() | ||||
|         return dR, dTheta, dPhi | ||||
| 
 | ||||
|     def readStartpoints(filename): | ||||
|         fin = open(filename, 'r') | ||||
|         vglines = fin.readlines() | ||||
| 
 | ||||
|         sR = float(vglines[3].split()[0]) | ||||
|         sTheta = float(vglines[3].split()[1]) | ||||
|         sPhi = float(vglines[3].split()[2]) | ||||
| 
 | ||||
|         fin.close() | ||||
|         return sR, sTheta, sPhi | ||||
| 
 | ||||
|     def readVelocity(filename): | ||||
|         vel = []; count = 0 | ||||
|         fin = open(filename, 'r') | ||||
|         vglines = fin.readlines() | ||||
| 
 | ||||
|         for line in vglines: | ||||
|             count += 1 | ||||
|             if count > 4: | ||||
|                 vel.append(float(line.split()[0])) | ||||
| 
 | ||||
|         print("Read %d points out of file: %s" %(count - 4, filename)) | ||||
|         return vel | ||||
| 
 | ||||
|     R = 6371 # earth radius | ||||
|     outfile = open(outputfile, 'w') | ||||
| 
 | ||||
|     # Theta, Phi in radians, R in km | ||||
|     nR, nTheta, nPhi = readNumberOfPoints(inputfile) | ||||
|     dR, dTheta, dPhi = readDelta(inputfile) | ||||
|     sR, sTheta, sPhi = readStartpoints(inputfile) | ||||
|     vel = readVelocity(inputfile) | ||||
| 
 | ||||
|     nX = nPhi; nY = nTheta; nZ = nR | ||||
| 
 | ||||
|     sZ = sR - R | ||||
|     sX = getDistance(np.rad2deg(sPhi)) | ||||
|     sY = getDistance(np.rad2deg(sTheta)) | ||||
| 
 | ||||
|     dX = getDistance(np.rad2deg(dPhi)) | ||||
|     dY = getDistance(np.rad2deg(dTheta)) | ||||
|      | ||||
|     xGrid = np.linspace(sX, sX + (dX * nX), nX) | ||||
|     yGrid = np.linspace(sZ, sZ + (nY * dY), nY) | ||||
|     zGrid = np.linspace(sZ, sZ + (nR * dR), nR) | ||||
|     nPoints = len(xGrid) * len(yGrid) * len(zGrid) | ||||
| 
 | ||||
|     # write header | ||||
|     print("Writing header for VTK file...") | ||||
|     outfile.writelines('# vtk DataFile Version 3.1\n') | ||||
|     outfile.writelines('Velocity on FMTOMO vgrids.in points\n') | ||||
|     outfile.writelines('ASCII\n') | ||||
|     outfile.writelines('DATASET POLYDATA\n') | ||||
|     outfile.writelines('POINTS %15d float\n' %(nPoints)) | ||||
| 
 | ||||
|     # write coordinates | ||||
|     print("Writing coordinates to VTK file...") | ||||
|     for z in zGrid: | ||||
|         for y in yGrid: | ||||
|             for x in xGrid: | ||||
|                 outfile.writelines('%10f %10f %10f \n' %(x, y, z)) | ||||
| 
 | ||||
| 
 | ||||
|     outfile.writelines('VERTICES %15d %15d\n' %(nPoints, 2 * nPoints)) | ||||
| 
 | ||||
|     # write indices | ||||
|     print("Writing indices to VTK file...") | ||||
|     for index in range(nPoints): | ||||
|         outfile.writelines('%10d %10d\n' %(1, index)) | ||||
| 
 | ||||
|     outfile.writelines('POINT_DATA %15d\n' %(nPoints)) | ||||
|     outfile.writelines('SCALARS velocity float %d\n' %(1)) | ||||
|     outfile.writelines('LOOKUP_TABLE default\n') | ||||
| 
 | ||||
|     # write velocity | ||||
|     print("Writing velocity values to VTK file...") | ||||
|     for velocity in vel: | ||||
|         outfile.writelines('%10f\n' %velocity) | ||||
| 
 | ||||
|     outfile.close() | ||||
|     print("Wrote velocity grid for %d points to file: %s" %(nPoints, outputfile)) | ||||
|     return | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user