Implementación del filtro de continuación analítica¶

Métodos potenciales de prospección, FCAG, 2024.

En el dominio transformado de Fourier, la continuación analítica de una función armónica $U(x,y,z)$ observada sobre una superficie horizontal $z=z_0$ a $U(x,y,z_0+\color{blue}{\Delta z})$ viene dada por

\begin{equation} \mathcal{F}[U(x,y,z_0+\color{blue}{\Delta z})]=\mathcal{F}[\psi_c]\;\mathcal{F}[U(x,y,z_0)], \end{equation}

con

\begin{equation} \mathcal{F}[\psi_c]=e^{-\color{blue}{\Delta z}||\mathbf{k}||}, \end{equation}

la transformada bidimensional de Fourier del operador de continuación analítica y $||\mathbf{k}||=\sqrt{k_x^2+k_y^2}$, la norma del vector número de onda.

Realizar la continuación analítica consiste principalmente en calcular la TDF 2D del dato observado ($\mathcal{F}[U]$) y la expresión del operador de continuación en el dominio del número de onda ($\mathcal{F}[\psi_c]$), hacer el producto y antitransformar.

En los métodos potenciales la función armónica puede ser la componente vertical de la atracción gravitatoria $g_z(x,y,z_0)$ o la anomalía magnética escalar de intensidad total (TFA) $\Delta T(x,y,z_0)$.

El operador de continuación ascendente¶

Graficamos el espectro de amplitud del operador de continuación ascendente $\mathcal{F}[\psi_r]=e^{-\Delta h ||\mathbf{k}||}$, $\Delta h>0$. Observamos que el filtro toma valores entre $(0,1]$ debido a que estamos tratando con un exponencial decreciente. El valor máximo se alcanza para $||\mathbf{k}||=0.$

El espectro de amplitud del filtro podemos obtenerlo por medio del siguiente código,

# Números de onda
kx       = 2*np.pi*np.fft.fftfreq(nx,dx)  # número de onda  en x  [1/m]
ky       = 2*np.pi*np.fft.fftfreq(ny,dy)  # número de onda  en y  [1/m]
kkx, kky = np.meshgrid(kx, ky)            # cuadrícula
kr       = np.sqrt(kkx*kkx +kky*kky)      # número de onda radial  [1/m] (cuadrícula)
# Filtro
h        = ...            # altura de continuación [m].
filtro   = np.exp(-h*kr)  # TDF 2D del filtro de continuación ascendente (si h>0).

El operador de continuación descendente¶

Graficamos el espectro de amplitud del operador de continuación descendente $\mathcal{F}[\psi_r]=e^{-\Delta h ||\mathbf{k}||}$ con , $\Delta h<0$. Observamos ahora que el filtro toma valores en $[1,+\infty)$ debido a que estamos tratando con un exponencial de argumento positivo. Es decir, toma valores grandes según $||\mathbf{k}||$ aumenta. El valor mínimo se alcanza para $||\mathbf{k}||=0.$

Aplicación: dato sintético¶

$\newcommand{\vec}[1]{\mathbf{#1}}$ $\newcommand{\versor}[1]{\hat{\mathbf{#1}}}$ $\newcommand{den}{\Delta\sigma}$ $\newcommand{G}{\mathcal{G}}$ $\newcommand{M}{\dfrac{4}{3}\pi\den R^3}$ $\newcommand{cte}{\dfrac{4}{3}\pi\G\den R^3}$

La componente vertical de la atracción gravitatoria debida a una esfera con contraste de densidad $\Delta\sigma$ viene dada por:

\begin{equation} g_z(\vec{r},\vec{r}_0) = \vec{g}\cdot\versor{k} = \cte\frac{z-z_0}{\sqrt{(x-x_0)^2+(y-y_0)^2+(z-z_0)^2}^{\phantom{.}3}}. \end{equation}

donde $\mathbf{r}=(x,y,z)$ son las coordenadas del punto de observación, $\mathbf{r}_0=(x_0,y_0,z_0)$ las coordenadas del centro de la esfera, $R$ el radio de la esfera y $r^2=||\vec{r}-\vec{r}_0||_2^2=(x-x_0)^2+(y-y_0)^2+(z-z_0)^2$.

Generamos un dato sintético de dos cuerpos esféricos con cierto contraste de densidad. Para ello, escribimos una subrutina gz_esfera() para el cálculo de $g_z$.

def gz_esfera(P,rho,R,P0):
    G        = 6.67e-11 # [m3 / kg s2]
    cte      = (4./3.)*np.pi*G
    convert  = 1e5 # m/s2 to mGal    
    x,y,z    = P
    x0,y0,z0 = P0   
    d2       = (x-x0)**2+(y-y0)**2+(z-z0)**2
    g = cte * rho * (R**3) * (z-z0)/(np.sqrt(d2)**3)
    return  g * convert

Tomamos parámetros para generar un modelo de dos esferas y elegimos parámetros de campaña adecuados.

constraste [kg/m3]         : 500.0
radio [m]                  : 200.0
profundidad [m]            : -400.0
posición de los centros [m]: 240.0 -240.0

Calculamos la anomalía y luego visualizamos,

g1 = gz_esfera(...) # anomalía del cuerpo 1 [mGal]
g2 = gz_esfera(...) # anomalía del cuerpo 2 [mGal]
anomalia = g1 + g2  # mGal
gz mínimo   [mGal]:  0.02
gz máximo   [mGal]:  0.91
gz promedio [mGal]:  0.19

Procesamiento¶

Aplicamos la continuación analítica al dato sintético recién calculado. Podemos tomar $\Delta z>0$ para hacer la continuación ascendente. También podemos considerar $\Delta z<0$ para realizar la continuación descendente, con recaudos.

kr       = ...
h        = ...
A        = np.fft.fft2(anomalia) # TDF 2D del dato
filtro   = np.exp(-h*kr)         # TDF 2D del filtro
cont     = np.real( np.fft.ifft2(A*filtro) ) # continuación
continuación para dz [m]   : 100.0
gz mínimo   [mGal]:  0.06
gz máximo   [mGal]:  0.67
gz promedio [mGal]:  0.19

A fines de comparar el resultado de aplicar el filtro, calculamos la respuesta analítica para $z=z_0+\Delta z$:

gz mínimo   [mGal]:  0.03
gz máximo   [mGal]:  0.66
gz promedio [mGal]:  0.17

Resultados¶

Representamos gráficamente los resultados e interpretamos.

Por último, analizamos el error entre la continuación analítica $\mathbf{g^c_z}$ para distintos $z$ y el resultado analítico dado por la expresión $\mathbf{g_z}$ de las esferas.

Observamos que la continuación descendente es inestable, mientras que la continuación ascendente es estable y arroja resultados con errores aceptables.

Eso es todo por hoy.