import numpy as np
import functions as fc
import fourier_continuation as fc_c
from timeit import default_timer as time
from fatiando.gravmag import polyprism, sphere
from fatiando import mesher, gridder,utils
from fatiando.constants import G, SI2MGAL
from scipy.sparse import diags
from matplotlib import pyplot as plt
import matplotlib.cm as cm
from scipy.interpolate import griddata
from scipy import interpolate
from fatiando.vis import mpl
import cPickle as pickle
%matplotlib inline
/home/vanderlei/Documents/fatiando/fatiando/vis/mpl.py:70: UserWarning: This module will be removed in v0.6. We recommend the use of matplotlib.pyplot module directly. Some of the fatiando specific functions will remain. "specific functions will remain.")
with open('synthetic_gz.pickle') as r:
synthetic_gz = pickle.load(r)
xi = synthetic_gz['x']
yi = synthetic_gz['y']
zi = synthetic_gz['z']
zi_up = synthetic_gz['z_up']
zi_down = synthetic_gz['z_down']
dobs = synthetic_gz['gz_med']
dobs_up = synthetic_gz['gz_up']
dobs_down = synthetic_gz['gz_down']
shape = (100, 100)
area = [-5000, 5000, -4000, 4000]
R = 1000
xc, yc = -3000, 0
# Equivalent Layer depth
zj = np.ones_like(zi)*300
# Predicted data
itmax = 40
s = time()
rho, gzp = fc.fast_eq(xi,yi,zi,zj,shape,dobs,itmax)
e = time()
tcpu = e - s
print tcpu, 'seconds'
10.3862431049 seconds
# Predicted data
itmax = 40
s = time()
rho_c, gzp_bccb = fc.fast_eq_bccb(xi,yi,zi,zj,shape,dobs,itmax)
e = time()
tcpu = e - s
print tcpu, 'seconds'
0.0598001480103 seconds
N = shape[0]*shape[1]
#up BCCB
s = time()
#zi_up = np.ones_like(zi)*-300
BTTB_up = fc.bttb(xi,yi,zi_up,zj)
cev_up = fc.bccb(shape,N,BTTB_up)
gzp_bccb_up = fc.fast_forward_bccb(shape,N,rho_c,cev_up)
e = time()
tcpu = e - s
print tcpu, 'seconds'
s = time()
A = fc.sensibility_matrix(xi,yi,zi_up,zj,N)
gzp_up = A.dot(rho)
e = time()
tcpu = e - s
print tcpu, 'seconds'
#down BCCB
s = time()
#zi_down = np.ones_like(zi)*-50
BTTB_down = fc.bttb(xi,yi,zi_down,zj)
cev_down = fc.bccb(shape,N,BTTB_down)
gzp_bccb_down = fc.fast_forward_bccb(shape,N,rho_c,cev_down)
e = time()
tcpu = e - s
print tcpu, 'seconds'
s = time()
A = fc.sensibility_matrix(xi,yi,zi_down,zj,N)
gzp_down = A.dot(rho)
e = time()
tcpu = e - s
print tcpu, 'seconds'
0.00499701499939 seconds 8.85737490654 seconds 0.00388503074646 seconds 8.63595795631 seconds
delta_gz_bccb_up = dobs_up-gzp_bccb_up
delta_gz_up = dobs_up-gzp_up
#Projection_model
phi = np.linspace(0, 2.*np.pi, 36) #36 points
x = xc + R*np.cos(phi)
y = yc + R*np.sin(phi)
x_p = [-3000., -3500, 0, 500, -3000.]
y_p = [-500., 0, 4500, 4000, -500.]
x_p2 = [-3000, -2500, 3500, 3000, -3000.]
y_p2 = [4000, 4500, 0, -500, 4000]
mean = np.mean(delta_gz_up)
print mean
std = np.std(delta_gz_up)
print std
mean = np.mean(delta_gz_bccb_up)
print mean
std = np.std(delta_gz_bccb_up)
print std
0.0031299438371729044 0.03444145923923826 0.0031299438371728884 0.03444145923923814
delta_gz_down = dobs_down-gzp_down
delta_gz_bccb_down = dobs_down-gzp_bccb_down
mean = np.mean(delta_gz_down)
print mean
std = np.std(delta_gz_down)
print std
mean = np.mean(delta_gz_bccb_down)
print mean
std = np.std(delta_gz_bccb_down)
print std
-0.001007217244496282 0.03831202233877217 -0.0010072172444962715 0.038312022338772185
# Up Fourier
gzp_fourier_up = fc_c.upcontinue(xi, yi, dobs, shape, 200)
# define the scale for residuals
delta_gz_fourier_up = dobs_up-np.ravel(gzp_fourier_up)
scale_max = np.max([delta_gz_bccb_up, delta_gz_up, delta_gz_fourier_up])
scale_min = np.min([delta_gz_bccb_up, delta_gz_up, delta_gz_fourier_up])
print scale_min, scale_max
-1.9005183543218769 1.9026002023084692
colorbar_ranges = np.linspace(-2, 2, 21)
colorbar_ranges
array([-2. , -1.8, -1.6, -1.4, -1.2, -1. , -0.8, -0.6, -0.4, -0.2, 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ])
font_title = 8
font_ticks = 5
font_labels = 6
height=9.
width = 10.
height_per_width = height/width
#plt.figure(figsize=(10,9))
plt.figure(figsize=(4.33,4.33*height_per_width))
plt.subplot(221)
plt.title('(a)', y=0.95, x=-0.18, fontsize=font_title)
# plt.tricontourf(yi,xi,dobs_up,22,cmap='jet',
# vmin=synthetic_gz['gz_min'],vmax=synthetic_gz['gz_max'])
plt.contourf(yi.reshape(shape),xi.reshape(shape),dobs_up.reshape(shape),
22,cmap='jet',vmin=synthetic_gz['gz_min'],vmax=synthetic_gz['gz_max'])
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
cb = plt.colorbar(shrink=1)
#plt.axis('scaled')
cb.set_label('Gravity data (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
#plt.xlabel('Easting coordinate y (km)', fontsize=14)
plt.ylabel('Northing coordinate x (m)', fontsize=font_labels)
mpl.m2km()
plt.subplot(222)
plt.title('(b)', y=0.95, x=-0.18, fontsize=font_title)
#plt.tricontourf(yi,xi,delta_gz_bccb_up,22,cmap='jet', vmin = scale_min, vmax = scale_max)
plt.contourf(yi.reshape(shape),xi.reshape(shape),delta_gz_bccb_up.reshape(shape),
22,cmap='jet',vmin=scale_min,vmax=scale_max)
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
#define colorbar
cbar = plt.cm.ScalarMappable(cmap=cm.jet)
cbar.set_array(delta_gz_bccb_up)
cbar.set_clim(scale_min, scale_max)
cb = plt.colorbar(cbar, shrink=1, boundaries=colorbar_ranges)
cb.set_label('Residuals (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
#plt.xlabel('Easting coordinate y (km)', fontsize=14)
#plt.ylabel('Northing coordinate x (m)', fontsize=14)
mpl.m2km()
plt.subplot(223)
plt.title('(c)', y=0.95, x=-0.18, fontsize=font_title)
#plt.tricontourf(yi,xi,delta_gz_up,22,cmap='jet', vmin = scale_min, vmax = scale_max)
plt.contourf(yi.reshape(shape),xi.reshape(shape),delta_gz_up.reshape(shape),
22,cmap='jet',vmin=scale_min,vmax=scale_max)
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
#define colorbar
cbar = plt.cm.ScalarMappable(cmap=cm.jet)
cbar.set_array(delta_gz_up)
cbar.set_clim(scale_min, scale_max)
cb = plt.colorbar(cbar, shrink=1, boundaries=colorbar_ranges)
cb.set_label('Residuals (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
plt.xlabel('Easting coordinate y (km)', fontsize=font_labels)
plt.ylabel('Northing coordinate x (m)', fontsize=font_labels)
mpl.m2km()
plt.subplot(224)
plt.title('(d)', y=0.95, x=-0.18, fontsize=font_title)
#plt.tricontourf(yi,xi,delta_gz_fourier_up,22,cmap='jet', vmin = scale_min, vmax = scale_max)
plt.contourf(yi.reshape(shape),xi.reshape(shape),delta_gz_fourier_up.reshape(shape),
22,cmap='jet',vmin=scale_min,vmax=scale_max)
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
#define colorbar
cbar = plt.cm.ScalarMappable(cmap=cm.jet)
cbar.set_array(delta_gz_fourier_up)
cbar.set_clim(scale_min, scale_max)
cb = plt.colorbar(cbar, shrink=1, boundaries=colorbar_ranges)
cb.set_label('Residuals (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
plt.xlabel('Easting coordinate y (km)', fontsize=font_labels)
#plt.ylabel('Northing coordinate x (m)', fontsize=4)
mpl.m2km()
plt.tight_layout(True)
#plt.savefig('../manuscript/Fig/upward_fourier_med.png', dpi=300)
plt.savefig('../manuscript/Fig/Figure7.png', dpi=1200)
print np.std(delta_gz_bccb_up)
print np.std(delta_gz_up)
print np.mean(delta_gz_fourier_up)
print np.std(delta_gz_fourier_up)
0.03444145923923814 0.03444145923923826 -0.029923731936085017 0.26232817198362085
gzp_fourier_down = fc_c.upcontinue(xi, yi, dobs, shape, -50)
fourier_continuation.py:57: UserWarning: Using 'height' <= 0 means downward continuation, which is known to be unstable. "which is known to be unstable.")
# define the scale for residuals
delta_gz_fourier_down = dobs_down-np.ravel(gzp_fourier_down)
scale_max = np.max([delta_gz_bccb_down, delta_gz_down, delta_gz_fourier_down])
scale_min = np.min([delta_gz_bccb_down, delta_gz_down, delta_gz_fourier_down])
print scale_min, scale_max
-4.117539688908588 4.121771949535535
colorbar_ranges = np.arange(-4.4, 4.41, 0.4)
colorbar_ranges
array([-4.40000000e+00, -4.00000000e+00, -3.60000000e+00, -3.20000000e+00, -2.80000000e+00, -2.40000000e+00, -2.00000000e+00, -1.60000000e+00, -1.20000000e+00, -8.00000000e-01, -4.00000000e-01, 3.55271368e-15, 4.00000000e-01, 8.00000000e-01, 1.20000000e+00, 1.60000000e+00, 2.00000000e+00, 2.40000000e+00, 2.80000000e+00, 3.20000000e+00, 3.60000000e+00, 4.00000000e+00, 4.40000000e+00])
font_title = 8
font_ticks = 5
font_labels = 6
height=9.
width = 10.
height_per_width = height/width
#plt.figure(figsize=(10,9))
plt.figure(figsize=(4.33,4.33*height_per_width))
plt.subplot(221)
plt.title('(a)', y=0.95, x=-0.18, fontsize=font_title)
#plt.tricontourf(yi,xi,dobs_down,22,cmap='jet',
# vmin=synthetic_gz['gz_min'],vmax=synthetic_gz['gz_max'])
plt.contourf(yi.reshape(shape),xi.reshape(shape),dobs_down.reshape(shape),
22,cmap='jet',vmin=synthetic_gz['gz_min'],vmax=synthetic_gz['gz_max'])
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
cb = plt.colorbar(shrink=1)
#plt.axis('scaled')
cb.set_label('Gravity data (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
#plt.xlabel('Easting coordinate y (km)', fontsize=14)
plt.ylabel('Northing coordinate x (m)', fontsize=font_labels)
mpl.m2km()
plt.subplot(222)
plt.title('(b)', y=0.95, x=-0.18, fontsize=font_title)
#plt.tricontourf(yi,xi,delta_gz_bccb_down,22,cmap='jet', vmin = scale_min, vmax = scale_max)
plt.contourf(yi.reshape(shape),xi.reshape(shape),delta_gz_bccb_down.reshape(shape),
22,cmap='jet',vmin=scale_min,vmax=scale_max)
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
#define colorbar
cbar = plt.cm.ScalarMappable(cmap=cm.jet)
cbar.set_array(delta_gz_bccb_down)
cbar.set_clim(scale_min, scale_max)
cb = plt.colorbar(cbar, shrink=1, boundaries=colorbar_ranges)
cb.set_label('Residuals (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
#plt.xlabel('Easting coordinate y (km)', fontsize=14)
#plt.ylabel('Northing coordinate x (m)', fontsize=14)
mpl.m2km()
plt.subplot(223)
plt.title('(c)', y=0.95, x=-0.18, fontsize=font_title)
#plt.tricontourf(yi,xi,delta_gz_down,22,cmap='jet', vmin = scale_min, vmax = scale_max)
plt.contourf(yi.reshape(shape),xi.reshape(shape),delta_gz_down.reshape(shape),
22,cmap='jet',vmin=scale_min,vmax=scale_max)
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
#define colorbar
cbar = plt.cm.ScalarMappable(cmap=cm.jet)
cbar.set_array(delta_gz_down)
cbar.set_clim(scale_min, scale_max)
cb = plt.colorbar(cbar, shrink=1, boundaries=colorbar_ranges)
cb.set_label('Residuals (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
plt.xlabel('Easting coordinate y (km)', fontsize=font_labels)
plt.ylabel('Northing coordinate x (m)', fontsize=font_labels)
mpl.m2km()
plt.subplot(224)
plt.title('(d)', y=0.95, x=-0.18, fontsize=font_title)
#plt.tricontourf(yi,xi,delta_gz_fourier_down,22,cmap='jet', vmin = scale_min, vmax = scale_max)
plt.contourf(yi.reshape(shape),xi.reshape(shape),delta_gz_fourier_down.reshape(shape),
22,cmap='jet',vmin=scale_min,vmax=scale_max)
plt.plot(x_p,y_p,color="k", linewidth=1)
plt.plot(x_p2,y_p2,color="k", linewidth=1)
plt.plot(y, x, color="k", linewidth=1)
#define colorbar
cbar = plt.cm.ScalarMappable(cmap=cm.jet)
cbar.set_array(delta_gz_fourier_down)
cbar.set_clim(scale_min, scale_max)
cb = plt.colorbar(cbar, shrink=1, boundaries=colorbar_ranges)
cb.set_label('Residuals (mGal)', rotation=90, fontsize=font_labels)
cb.ax.tick_params(labelsize=font_ticks)
plt.xlim(np.min(yi),np.max(yi))
plt.ylim(np.min(xi),np.max(xi))
plt.xticks(fontsize=font_ticks)
plt.yticks(fontsize=font_ticks)
plt.xlabel('Easting coordinate y (km)', fontsize=font_labels)
#plt.ylabel('Northing coordinate x (m)', fontsize=14)
mpl.m2km()
plt.tight_layout(True)
#plt.savefig('../manuscript/Fig/downward_fourier_med.png', dpi=300)
plt.savefig('../manuscript/Fig/Figure8.png', dpi=1200)
print np.std(delta_gz_bccb_down)
print np.std(delta_gz_down)
print np.mean(delta_gz_fourier_down)
print np.std(delta_gz_fourier_down)
0.038312022338772185 0.03831202233877217 0.007934556980489862 0.5816240951130157