import matplotlib.pyplot as plt from geoist.pfm import prism, pftrans, giutils from geoist.inversion.geometry import Prism from geoist import gridder # Create some synthetic magnetic data with a total magnetization that is # different from the geomagnetic field (so there is remanent magnetization or # some demagnetizing effect) inc, dec = -60, 23 # Geomagnetic field direction sinc, sdec = -30, -20 # Source magnetization direction mag = giutils.ang2vec(1, sinc, sdec) model = [Prism(-1500, 1500, -500, 500, 0, 2000, {'magnetization': mag})] area = (-7e3, 7e3, -7e3, 7e3) shape = (100, 100) x, y, z = gridder.regular(area, shape, z=-300) data = prism.tf(x, y, z, model, inc, dec) # Reduce to the pole data_at_pole = pftrans.reduce_to_pole(x, y, data, shape, inc, dec, sinc, sdec) # Make some plots plt.figure(figsize=(8, 6)) ax = plt.subplot(1, 2, 1) ax.set_title('Original data') ax.set_aspect('equal') tmp = ax.tricontourf(y / 1000, x / 1000, data, 30, cmap='RdBu_r') plt.colorbar(tmp, pad=0.1, aspect=30, orientation='horizontal').set_label('nT') ax.set_xlabel('y (km)') ax.set_ylabel('x (km)') ax.set_xlim(area[2] / 1000, area[3] / 1000)
prisms.append(p) print('kernel') inc, dec = 30, -4 kernelgz = prism.gz_kernel(xp, yp, zp, prisms) for i, layer in enumerate(mesh.layers()): for j, p in enumerate(layer): x1 = mesh.get_layer(i)[j].x1 x2 = mesh.get_layer(i)[j].x2 y1 = mesh.get_layer(i)[j].y1 y2 = mesh.get_layer(i)[j].y2 z1 = mesh.get_layer(i)[j].z1 z2 = mesh.get_layer(i)[j].z2 den = mesh.get_layer(i)[j].props model=[geometry.Prism(x1, x2, y1, y2, z1, z2, {'magnetization': giutils.ang2vec(1, inc, dec)})] field = prism.tf(xp, yp, zp, model, inc, dec) kernel.append(field) kk=np.transpose(kernel) #kernel matrix for inversion, 500 cells * 400 points field_mag=np.mat(kk)*np.transpose(np.mat(mag1.ravel())) field_gra=np.mat(kernelgz)*np.transpose(np.mat(rho1.ravel())) field_mag1 = giutils.contaminate(np.array(field_mag).ravel(), 0.05, percent = True) field_gra1 = giutils.contaminate(np.array(field_gra).ravel(), 0.05, percent = True) #保存正演异常 with open(graoutfile, 'w') as f: f.write('! model 2 gravity anomlay (mGal)\n') f.write('{}\n'.format(len(field_gra))) for i in range(len(field_gra)): f.write('{} {} {} {}\n'.format(yp[i],xp[i],zp[i],np.array(field_gra[i]).ravel()[0]))
""" import matplotlib.pyplot as plt from geoist.pfm import prism, pftrans, giutils from geoist.inversion.geometry import Prism from geoist import gridder # Create some synthetic magnetic data. We'll assume the data is already reduced # to the pole. inc, dec = 90, 0 mag = giutils.ang2vec(1, inc, dec) model = [Prism(-1500, 1500, -500, 500, 0, 2000, {'magnetization': mag})] area = (-7e3, 7e3, -7e3, 7e3) shape = (100, 100) x, y, z = gridder.regular(area, shape, z=-300) data_at_pole = prism.tf(x, y, z, model, inc, dec) # Calculate the tilt tilt = pftrans.tilt(x, y, data_at_pole, shape) # Make some plots plt.figure(figsize=(8, 6)) ax = plt.subplot(1, 2, 1) ax.set_title('Original data at the pole') ax.set_aspect('equal') tmp = ax.tricontourf(y / 1000, x / 1000, data_at_pole, 30, cmap='RdBu_r') plt.colorbar(tmp, pad=0.1, aspect=30, orientation='horizontal').set_label('nT') ax.set_xlabel('y (km)') ax.set_ylabel('x (km)') ax.set_xlim(area[2] / 1000, area[3] / 1000)
from geoist.inversion import geometry from geoist.pfm import prism, pftrans, giutils from geoist.vis import giplt # Direction of the Geomagnetic field inc, dec = -60, 0 # Make a model with only induced magnetization model = [ geometry.Prism(-100, 100, -100, 100, 0, 2000, {'magnetization': giutils.ang2vec(10, inc, dec)}) ] area = (-5000, 5000, -5000, 5000) shape = (100, 100) z0 = -500 x, y, z = gridder.regular(area, shape, z=z0) tf = giutils.contaminate(prism.tf(x, y, z, model, inc, dec), 1, seed=0) # Reduce to the pole using FFT. Since there is only induced magnetization, the # magnetization direction (sinc and sdec) is the same as the geomagnetic field pole = pftrans.reduce_to_pole(x, y, tf, shape, inc, dec, sinc=inc, sdec=dec) # Calculate the true value at the pole for comparison true = prism.tf(x, y, z, model, 90, 0, pmag=giutils.ang2vec(10, 90, 0)) fig, axes = plt.subplots(1, 3, figsize=(14, 4)) for ax in axes: ax.set_aspect('equal') plt.sca(axes[0]) plt.title("Original total field anomaly") giplt.contourf(y, x, tf, shape, 30, cmap=plt.cm.RdBu_r) plt.colorbar(pad=0).set_label('nT') giplt.m2km() plt.sca(axes[1])
""" GravMag: Calculate the analytic signal of a total field anomaly using FFT """ import matplotlib.pyplot as plt from geoist import gridder from geoist.inversion import geometry from geoist.pfm import prism, pftrans, giutils from geoist.vis import giplt model = [geometry.Prism(-100, 100, -100, 100, 0, 2000, {'magnetization': 10})] area = (-5000, 5000, -5000, 5000) shape = (100, 100) z0 = -500 x, y, z = gridder.regular(area, shape, z=z0) inc, dec = -30, 0 tf = giutils.contaminate(prism.tf(x, y, z, model, inc, dec), 0.001, percent=True) # Need to convert gz to SI units so that the result is also in SI total_grad_amp = pftrans.tga(x, y, giutils.nt2si(tf), shape) plt.figure() plt.subplot(1, 2, 1) plt.title("Original total field anomaly") plt.axis('scaled') giplt.contourf(y, x, tf, shape, 30, cmap=plt.cm.RdBu_r) plt.colorbar(orientation='horizontal').set_label('nT') giplt.m2km() plt.subplot(1, 2, 2) plt.title("Total Gradient Amplitude") plt.axis('scaled')