Medan Gravitasi Vertikal akibat Titik Massa
Konten ini juga sebagai bahan belajar saya, kalau ada kesalahan bisa dikoreksi, thanks :)
Akhirnya setelah sekian lama berkutat dengan web berbagai event/organisasi tanpa punya blog sendiri, sekarang punya hehehe… ya semoga konsisten bisa posting macam-macam minimal seminggu sekali. Terima kasih pada GitHub dan Jekyll yang memberikan ruang serta tools yang luar bisa customable.
Belakangan ini saya memang tertarik untuk mendalami bahasa pemrograman Python
, bukan tanpa alasan sih, tuntutan duniawai agar bisa lebih survive di dunia hahaha. Bersamaan baca buku Gravity and Magnetic Exploration: Principles, Practices, and Applications karya William J. Hinze, Ralph R. B. von Frese and Afif H. Saad (2012), saya tertarik untuk belajar cara membuat peta magnitudo medan gravitasi. Sebenernya cukup sederhana, tapi untuk newbie macam saya ya kaya begini cukup menyulitkan, pada akhirnya saya banyak belajar karena kepo sana-sini.
Berawal dari coba-coba akhirnya keterusan, oposih. skip.
Saya sih berharap ada pembaca yang terinspirasi, terutama pembaca yang newbie Python
sehingga bisa ikut belajar, buat para mastah juga ikut membantu memberikan saran hehehe. Kode-kode di bawah ini sebenarnya sederhana dan banyak simplifikasi, misal dalam penurunan, kedepan semoga bisa saya sempurnakan. Untuk para geopipisis semoga konten saya dapat menginspirasi dan menambah ilmu tentang per-_gravity_-an.
Oke to the point, jadi ini adalah cara menghitung besar medan gravitasi ($ \boldsymbol{g} $) dari titik massa $ m $ kg di kedalaman $ d $ meter komponen $ x $, $ y $, maupun $ z $ dari penurunan potensial gravitasi $ U $. Rumus potensial gravitasi sendiri [1]:
\[U = G \frac{m} {r}\]dengan $ G $ : konstanta gravitasi, $ m $ : massa, dan $ r $ : jarak. Jarak ($ r $) sendiri merupakan $ \sqrt{x^2 + y^2 + z^2} $ , kok malah jadi sepaneng gini ya wehehehe. Nah ini contoh untuk komponen $ z $ [2]:
\[\boldsymbol{g_{z}} = \frac {\partial U}{\partial z}\]Nah disini saya ingin memberikan cara menghitung penurunan (derivatif) dengan rumus turunan sederhana yaitu [3]:
\[\boldsymbol{g_{z}} = \lim_{\Delta z \to 0} \frac {U(x,y,z+ \Delta z)-U(x,y,z)}{\Delta z}\](mohon dikoreksi kalo salah ya hehehe)
Nah karena ini pake diskrit di Python
jadi saya pilih saja $ \Delta z $ sekecil mungkin mendekati 0. Ya walaupun sebenarnya langsung bisa pakai rumus [4]:
Tapi kita coba pakai penurunan sendiri biar lebih menantang hehehe, semoga bener ya.
Nah langsung saja praktek:
1. Impor dulu modul dan konstanta yang dipake.
Disini saya pakai massa dan kedalaman tertera, silahkan kalo mau diganti, bebas pokoke.
import numpy as np
import matplotlib.pyplot as plt
# define some constants
G = 6.67408e-11 # gravitational constant
m = 1e12 # mass of a point mass in kg
d = -500 # depth of a point mass in m
Massa yang digunakan ada 10^12 kg dan kedalaman 500 meter, nilai ini saya sesuaikan dengan referensi buku Gravity and Magnetic Exploration, teman-teman bisa ganti monggo.
2. Selanjutnya adalah membuat sebaran datanya.
Pertama membuat sebaran koordinat dulu:
# create x, y, z sparse
x = np.arange(-1500, 1500, 50)
y = np.arange(-1500, 1500, 50)
z = np.arange(-500, 10, 10)
Sebaran yang saya pakai adalah -1500-1450 meter untuk x
dan y
, dan -500-0 meter untuk z
. Baru abis itu dibuat grid jadi 3D array:
# create X, Y, Z grid
X, Y, Z = np.meshgrid(x, y, z)
Buat teman-teman geopipisis pastinya sudah akrab dengan istilah grdding.
3. Lanjut mendefinisikan fungsi menghitung potensial $ U $
Membuat fungsi sederhana untuk menghitung potensial gravitasi:
# define function for gravitational potential
def grav_potential(xi, yi, zi, m, d):
"Calculate grav potential in a point in 3D space due to mass m in d depth, ex: grav_potential(X, Y, Z, 100, 5)"
r = np.sqrt(xi**2 + yi**2 + (zi-d)**2)
r[r==0]=np.nan #avoid dividing by zero
pot = G * m / r
return pot
Yang perlu diperhatikan adalah adanya zi-d
pada operasi untuk menghitung jarak dari point mass. r[r==0]=np.nan
digunakan untuk menghilangkan data di r=0
(di titik massa) agar tidak terjadi pembagian dengan 0 (ZeroDivisionError
).
4. Kemudian mendefinisikan fungsi derivatif terhadap $ z $ (menghitung medan)
Menurunkan potensial gravitas menjadi medan gravitasi komponen $ z $ menggunakan persamaan derivatif yang ada di atas [3].
#define function for derivative
dz = 0.000001
def grav_field(Xi, Yi, Zi):
"Calculate derivative in certain component, ex: grav_field(X, Y, Z+dz) --> Z component"
field = ((grav_potential(Xi, Yi, Zi, m, d) - grav_potential(X, Y, Z, m, d)) / dz)
return field
Saya menggunakan nilai $ \Delta z $ (dz = 0.000001
) yang saya anggap sudah mendekati nilai 0
.
5. Langsung panggil derivatif terhadap $ z $
nb. kalo mau terhadap komponen lain tinggal dz nya dipindah hehew, dikalikan 1e5
hanya biar skala warnanya masuuk..
# call the derivative
grav_z = grav_field(X, Y, Z+dz) * 1e5
Nilai 1e5
nanti akan dikembalikan lagi di keterangan warna (colorbar).
6. Mari diplot di kedalaman=0.
Kalau mau kedalaman lain nilai -1
tinggal diganti, itu dari -500 sampai 0 lompatan 10. Contoh kalo kedalaman -450 berarti 1
, -500 berarti 0
, -10 berarti -2
dsb.
plt.contourf(X[:,:,-1], Y[:,:,-1], grav_z[:,:,-1])
7. Final, masukkan parametter plotting
plt.colorbar()
plt.text(1600, 1600, "x 10^-5 m/s^2")
plt.xlabel("Easting (m)")
plt.ylabel("Northing (m)")
plt.title("Gravitational field in Z comp at 0 m of a point \n mass (1e12 kg) located at 500 m depth")
plt.show()
Dan hasilnya adalah…
Halaman ini akan saya sempurnakan lagi untuk kedepannya, untuk kalibrasi hasil bisa dilakukan dengan memasukkan m
menjadi massa bumi dan d
menjadi diameter bumi, walaupun belum memperhitungkan kelengkungan tetapi sudah cukup untuk melihat nilai medan gravitasi. Thank you for reading :)
References
2013
- Gravity and Magnetic Exploration, Principles, Practices, and Applications by Hinze, vonFrese and Saad, 2013Apr 2013
Enjoy Reading This Article?
Here are some more articles you might like to read next: