initial upload
This commit is contained in:
352
test/old_tests/inversion_tele/make_test_model.ipynb
Normal file
352
test/old_tests/inversion_tele/make_test_model.ipynb
Normal file
@@ -0,0 +1,352 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# notebook for create init and true test model"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"import math\n",
|
||||
"\n",
|
||||
"# grid\n",
|
||||
"R_earth = 6371.0 #6378.1370\n",
|
||||
"\n",
|
||||
"rr1=6070\n",
|
||||
"rr2=6400\n",
|
||||
"tt1=(30.0-1.5)/180*math.pi\n",
|
||||
"tt2=(50.0+1.5)/180*math.pi\n",
|
||||
"pp1=(15.0-1.5)/180*math.pi\n",
|
||||
"pp2=(40.0+1.5)/180*math.pi\n",
|
||||
"\n",
|
||||
"n_rtp = [55,55,55]\n",
|
||||
"dr = (rr2-rr1)/(n_rtp[0]-1)\n",
|
||||
"dt = (tt2-tt1)/(n_rtp[1]-1)\n",
|
||||
"dp = (pp2-pp1)/(n_rtp[2]-1)\n",
|
||||
"rr = np.array([rr1 + x*dr for x in range(n_rtp[0])])\n",
|
||||
"tt = np.array([tt1 + x*dt for x in range(n_rtp[1])])\n",
|
||||
"pp = np.array([pp1 + x*dp for x in range(n_rtp[2])])\n",
|
||||
"\n",
|
||||
"# initial model\n",
|
||||
"gamma = 0.0\n",
|
||||
"#s0 = 1.0/6.0\n",
|
||||
"slow_p=0.04\n",
|
||||
"ani_p=0.03\n",
|
||||
"\n",
|
||||
"eta_init = np.zeros(n_rtp)\n",
|
||||
"xi_init = np.zeros(n_rtp)\n",
|
||||
"zeta_init = np.zeros(n_rtp)\n",
|
||||
"fun_init = np.zeros(n_rtp)\n",
|
||||
"vel_init = np.zeros(n_rtp)\n",
|
||||
"a_init = np.zeros(n_rtp)\n",
|
||||
"b_init = np.zeros(n_rtp)\n",
|
||||
"c_init = np.zeros(n_rtp)\n",
|
||||
"f_init = np.zeros(n_rtp)\n",
|
||||
"\n",
|
||||
"# true model\n",
|
||||
"eta_true = np.zeros(n_rtp)\n",
|
||||
"xi_true = np.zeros(n_rtp)\n",
|
||||
"zeta_true = np.zeros(n_rtp)\n",
|
||||
"fun_true = np.zeros(n_rtp)\n",
|
||||
"vel_true = np.zeros(n_rtp)\n",
|
||||
"a_true = np.zeros(n_rtp)\n",
|
||||
"b_true = np.zeros(n_rtp)\n",
|
||||
"c_true = np.zeros(n_rtp)\n",
|
||||
"f_true = np.zeros(n_rtp)\n",
|
||||
"\n",
|
||||
"c=0\n",
|
||||
"for ir in range(n_rtp[2]):\n",
|
||||
" for it in range(n_rtp[1]):\n",
|
||||
" for ip in range(n_rtp[0]):\n",
|
||||
" #eta_init[ir,it,ip] = 0.0\n",
|
||||
" #xi_init[ir,it,ip] = 0.0\n",
|
||||
" zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2)\n",
|
||||
" \n",
|
||||
" if (rr[ir]>6351):\n",
|
||||
" fun_init[ir,it,ip] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7)\n",
|
||||
" elif (rr[ir]>6336):\n",
|
||||
" fun_init[ir,it,ip] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6)\n",
|
||||
" elif (rr[ir]>5961):\n",
|
||||
" fun_init[ir,it,ip] = 1.0/(8.0+(6336-rr[ir])/375.0*1) \n",
|
||||
" else:\n",
|
||||
" fun_init[ir,it,ip] = 1.0/9.0\n",
|
||||
"\n",
|
||||
" vel_init[ir,it,ip] = 1.0/fun_init[ir,it,ip]\n",
|
||||
" a_init[ir,it,ip] = 1.0 + 2.0*zeta_init[ir,it,ip]\n",
|
||||
" b_init[ir,it,ip] = 1.0 - 2.0*xi_init[ir,it,ip]\n",
|
||||
" c_init[ir,it,ip] = 1.0 + 2.0*xi_init[ir,it,ip]\n",
|
||||
" f_init[ir,it,ip] = -2.0 * eta_init[ir,it,ip]\n",
|
||||
"\n",
|
||||
" # true model\n",
|
||||
" if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \\\n",
|
||||
" and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \\\n",
|
||||
" and rr[ir] >= 6211.0 and rr[ir] <= 6371.0):\n",
|
||||
" c+=1\n",
|
||||
" sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \\\n",
|
||||
" *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \\\n",
|
||||
" *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0)\n",
|
||||
" else:\n",
|
||||
" sigma = 0.0\n",
|
||||
"\n",
|
||||
" if sigma < 0:\n",
|
||||
" psi = 60.0/180.0*math.pi\n",
|
||||
" elif sigma > 0:\n",
|
||||
" psi = 150.0/180.0*math.pi\n",
|
||||
" else:\n",
|
||||
" psi = 0.0\n",
|
||||
"\n",
|
||||
" eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi)\n",
|
||||
" xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi)\n",
|
||||
" zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2)\n",
|
||||
" fun_true[ir,it,ip] = fun_init[ir,it,ip]/(1.0+sigma*slow_p)\n",
|
||||
" vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] \n",
|
||||
" a_true[ir,it,ip] = 1.0 + 2.0*zeta_true[ir,it,ip]\n",
|
||||
" b_true[ir,it,ip] = 1.0 - 2.0*xi_true[ir,it,ip]\n",
|
||||
" c_true[ir,it,ip] = 1.0 + 2.0*xi_true[ir,it,ip]\n",
|
||||
" f_true[ir,it,ip] = -2.0 * eta_true[ir,it,ip]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"r_earth = R_earth #6378.1370\n",
|
||||
"print(\"depminmax {} {}\".format(r_earth-rr1,r_earth-rr2))\n",
|
||||
"print(c)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# write out\n",
|
||||
"import h5py\n",
|
||||
"\n",
|
||||
"fout_init = h5py.File('test_model_init.h5', 'w')\n",
|
||||
"fout_true = h5py.File('test_model_true.h5', 'w')\n",
|
||||
"\n",
|
||||
"# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n",
|
||||
"fout_init.create_dataset('eta', data=eta_init)\n",
|
||||
"fout_init.create_dataset('xi', data=xi_init)\n",
|
||||
"fout_init.create_dataset('zeta',data=zeta_init)\n",
|
||||
"fout_init.create_dataset('fun', data=fun_init)\n",
|
||||
"fout_init.create_dataset('fac_a', data=a_init)\n",
|
||||
"fout_init.create_dataset('fac_b', data=b_init)\n",
|
||||
"fout_init.create_dataset('fac_c', data=c_init)\n",
|
||||
"fout_init.create_dataset('fac_f', data=f_init)\n",
|
||||
"fout_init.create_dataset('vel', data=vel_init)\n",
|
||||
"\n",
|
||||
"# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n",
|
||||
"fout_true.create_dataset('eta', data=eta_true)\n",
|
||||
"fout_true.create_dataset('xi', data=xi_true)\n",
|
||||
"fout_true.create_dataset('zeta',data=zeta_true)\n",
|
||||
"fout_true.create_dataset('fun', data=fun_true)\n",
|
||||
"fout_true.create_dataset('fac_a', data=a_true)\n",
|
||||
"fout_true.create_dataset('fac_b', data=b_true)\n",
|
||||
"fout_true.create_dataset('fac_c', data=c_true)\n",
|
||||
"fout_true.create_dataset('fac_f', data=f_true)\n",
|
||||
"fout_true.create_dataset('vel', data=vel_true)\n",
|
||||
"\n",
|
||||
"fout_init.close()\n",
|
||||
"fout_true.close()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# prepare src station file\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
" 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n",
|
||||
" 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n",
|
||||
" 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n",
|
||||
" 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n",
|
||||
"\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import random\n",
|
||||
"random.seed(123456789)\n",
|
||||
"\n",
|
||||
"# dummys\n",
|
||||
"year_dummy = 1998\n",
|
||||
"month_dummy = 1\n",
|
||||
"day_dummy = 1\n",
|
||||
"hour_dummy = 0\n",
|
||||
"minute_dummy = 0\n",
|
||||
"second_dummy = 0\n",
|
||||
"mag_dummy = 3.0\n",
|
||||
"id_dummy = 1000\n",
|
||||
"st_name_dummy = 'AAAA'\n",
|
||||
"phase_dummy = 'P'\n",
|
||||
"dist_dummy = 100.0\n",
|
||||
"arriv_t_dummy = 0.0\n",
|
||||
"\n",
|
||||
"tt1deg = tt1 * 180.0/math.pi\n",
|
||||
"tt2deg = tt2 * 180.0/math.pi\n",
|
||||
"pp1deg = pp1 * 180.0/math.pi\n",
|
||||
"pp2deg = pp2 * 180.0/math.pi\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"n_src = 1\n",
|
||||
"n_rec = [1 for x in range(n_src)]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"lines = []\n",
|
||||
"\n",
|
||||
"pos_src=[]\n",
|
||||
"pos_rec=[]\n",
|
||||
"\n",
|
||||
"# one source outside of the region\n",
|
||||
"dep_srcs=[]\n",
|
||||
"lon_srcs=[]\n",
|
||||
"lat_srcs=[]\n",
|
||||
"\n",
|
||||
"# teleseismic events\n",
|
||||
"n_src_tele = 10\n",
|
||||
"center_lon = (pp2deg+pp1deg)/2.0\n",
|
||||
"center_lat = (tt2deg+tt1deg)/2.0\n",
|
||||
"r_src = 40 # deg\n",
|
||||
"d_r = 360.0/n_src_tele\n",
|
||||
"\n",
|
||||
"for i in range(n_src_tele):\n",
|
||||
" dep = 50.0\n",
|
||||
" lon = math.cos(d_r*i/180.0*math.pi)*r_src + center_lon\n",
|
||||
" lat = math.sin(d_r*i/180.0*math.pi)*r_src + center_lat\n",
|
||||
" dep_srcs.append(dep)\n",
|
||||
" lon_srcs.append(lon)\n",
|
||||
" lat_srcs.append(lat)\n",
|
||||
"\n",
|
||||
"# regional events\n",
|
||||
"n_src_reg = 0\n",
|
||||
"for i in range(n_src_reg):\n",
|
||||
" dep = random.uniform(r_earth-rr1,r_earth-rr2)\n",
|
||||
" lon = random.uniform(pp1deg,pp2deg)\n",
|
||||
" lat = random.uniform(tt1deg,tt2deg)\n",
|
||||
" dep_srcs.append(dep)\n",
|
||||
" lon_srcs.append(lon)\n",
|
||||
" lat_srcs.append(lat)\n",
|
||||
"\n",
|
||||
"n_src = n_src_tele + n_src_reg\n",
|
||||
"\n",
|
||||
"# create receiver coordinates\n",
|
||||
"n_rec = [20 for i in range(n_src)]\n",
|
||||
"elev_recs=[]\n",
|
||||
"lon_recs=[]\n",
|
||||
"lat_recs=[]\n",
|
||||
"rec_names=[]\n",
|
||||
"for i in range(n_rec[0]):\n",
|
||||
" #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n",
|
||||
" elev_recs.append(0) # elevation in m\n",
|
||||
" lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n",
|
||||
" lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n",
|
||||
" rec_names.append(i)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# create dummy src\n",
|
||||
"for i_src in range(n_src):\n",
|
||||
" # define one point in the domain (rr1 bottom, rr2 top)\n",
|
||||
" dep = dep_srcs[i_src]\n",
|
||||
" lon = lon_srcs[i_src]\n",
|
||||
" lat = lat_srcs[i_src]\n",
|
||||
"\n",
|
||||
" src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n",
|
||||
" lines.append(src)\n",
|
||||
"\n",
|
||||
" pos_src.append([lon,lat,dep])\n",
|
||||
"\n",
|
||||
" # create dummy station\n",
|
||||
" for i_rec in range(n_rec[i_src]):\n",
|
||||
" #elev_rec = random.uniform(0.0,-10.0) # elevation in m\n",
|
||||
" #lon_rec = random.uniform(pp1deg,pp2deg)\n",
|
||||
" #lat_rec = random.uniform(tt1deg,tt2deg)\n",
|
||||
"\n",
|
||||
" rec = [i_src, i_rec, st_name_dummy+\"_\"+str(i_rec), lat_recs[i_rec], lon_recs[i_rec], elev_recs[i_rec], phase_dummy, dist_dummy, arriv_t_dummy]\n",
|
||||
" lines.append(rec)\n",
|
||||
"\n",
|
||||
" pos_rec.append([lon_recs[i_rec],lat_recs[i_rec],elev_recs[i_rec]])\n",
|
||||
"\n",
|
||||
"# write out ev_arrivals file\n",
|
||||
"fname = 'src_rec_test.dat'\n",
|
||||
"\n",
|
||||
"with open(fname, 'w') as f:\n",
|
||||
" for line in lines:\n",
|
||||
" for elem in line:\n",
|
||||
" f.write('{} '.format(elem))\n",
|
||||
" f.write('\\n')\n",
|
||||
" "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# draw src and rec positions\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"for i_src in range(n_src):\n",
|
||||
" plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# plot receivers\n",
|
||||
"for i_rec in range(n_rec[0]):\n",
|
||||
" plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.9.1 64-bit ('3.9.1')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.1"
|
||||
},
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
Reference in New Issue
Block a user