initial upload
This commit is contained in:
14
test/old_tests/inversion_2/README.md
Normal file
14
test/old_tests/inversion_2/README.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Inversion test
|
||||
|
||||
This is a test setup for inversion calculation.
|
||||
|
||||
1. Run all cells of `make_test_model.ipynb` for creating
|
||||
- source, receiver file
|
||||
- true model
|
||||
- initial model
|
||||
|
||||
2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations
|
||||
-> this will output src_rec_result.dat file which includes the arrival time at each station
|
||||
|
||||
3. run TOMOATT in inversion mode with `input_params.yml`.
|
||||
|
||||
62
test/old_tests/inversion_2/check_obj_func.ipynb
Normal file
62
test/old_tests/inversion_2/check_obj_func.ipynb
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# check the change of objective values\n",
|
||||
"\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"fpath='objective_function.txt'\n",
|
||||
"\n",
|
||||
"objs=[]\n",
|
||||
"\n",
|
||||
"with open(fpath) as f:\n",
|
||||
" lines = f.readlines()\n",
|
||||
"\n",
|
||||
" for l in lines:\n",
|
||||
" if(l.startswith('i_inv')):\n",
|
||||
" continue\n",
|
||||
" objs.append(float(l.strip().split(',')[1]))\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"plt.plot(objs)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "fbd0b2a7df497f398d93ab2f589d8a5daa3108cfb7ff2b90736653cca3aeadc0"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
119
test/old_tests/inversion_2/check_src_rec_file.ipynb
Normal file
119
test/old_tests/inversion_2/check_src_rec_file.ipynb
Normal file
@@ -0,0 +1,119 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"sys.path.append(\"../../utils/\")\n",
|
||||
"\n",
|
||||
"from src_rec_file_helper import read_src_rec_file\n",
|
||||
"\n",
|
||||
"events_true = read_src_rec_file(\"./src_rec_test_out.dat\")\n",
|
||||
"events_calc = read_src_rec_file(\"./src_rec_test_out_out.dat\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# check objective function value\n",
|
||||
"v_obj = 0.0\n",
|
||||
"for i_ev in range(len(events_true)):\n",
|
||||
" for i_rec in range(len(events_true[i_ev].rec_list)):\n",
|
||||
" v_obj += abs(events_true[i_ev].rec_list[i_rec].arr_time - events_calc[i_ev].rec_list[i_rec].arr_time)**2/2.0\n",
|
||||
"\n",
|
||||
"print(\"v_obj: \", v_obj)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# calculate summation of difference of arrival times at each receiver\n",
|
||||
"list_diff_v_obj = []\n",
|
||||
"for i_ev in range(len(events_true)):\n",
|
||||
" for i_rec in range(len(events_true[i_ev].rec_list)):\n",
|
||||
" #tmp_v_obj = abs(events_true[i_ev].rec_list[i_rec].arr_time - events_calc[i_ev].rec_list[i_rec].arr_time)**2/2.0\n",
|
||||
" tmp_v_obj = events_true[i_ev].rec_list[i_rec].arr_time - events_calc[i_ev].rec_list[i_rec].arr_time\n",
|
||||
"\n",
|
||||
" if (i_ev == 0):\n",
|
||||
" list_diff_v_obj.append(tmp_v_obj)\n",
|
||||
" else:\n",
|
||||
" list_diff_v_obj[i_rec] += tmp_v_obj\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# plot list_diff_v_obj on map\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# colormap by list_diff_v_obj\n",
|
||||
"cmap = plt.get_cmap('viridis')\n",
|
||||
"norm = plt.Normalize(vmin=min(list_diff_v_obj), vmax=max(list_diff_v_obj))\n",
|
||||
"\n",
|
||||
"print(\"min: \", min(list_diff_v_obj))\n",
|
||||
"print(\"max: \", max(list_diff_v_obj))\n",
|
||||
"\n",
|
||||
"list_lon = []\n",
|
||||
"list_lat = []\n",
|
||||
"\n",
|
||||
"for i_rec in range(len(events_true[0].rec_list)):\n",
|
||||
" list_lon.append(events_true[0].rec_list[i_rec].lon)\n",
|
||||
" list_lat.append(events_true[0].rec_list[i_rec].lat)\n",
|
||||
"\n",
|
||||
"plt.scatter(list_lon, list_lat, c=list_diff_v_obj, cmap=cmap, norm=norm)\n",
|
||||
"\n",
|
||||
"# color bar\n",
|
||||
"plt.colorbar()\n",
|
||||
"\n",
|
||||
"# tight \n",
|
||||
"plt.tight_layout()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
284
test/old_tests/inversion_2/compare_with_fortran_code.ipynb
Normal file
284
test/old_tests/inversion_2/compare_with_fortran_code.ipynb
Normal file
@@ -0,0 +1,284 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# compare result from TOMOATT and fortran code\n",
|
||||
"\n",
|
||||
"fpath_kernel_fort = './fortran/ega5/output/kernel_step1_sum'\n",
|
||||
"fpath_synth_fort = './fortran/ega5/output/syn_step1_event1' # Table\n",
|
||||
"fpath_adj_fort = './fortran/ega5/output/adj_step1_event1' # TableADJ\n",
|
||||
"fpath_out_tomoatt = './out_data_sim_0.h5'\n",
|
||||
"\n",
|
||||
"# grid information in fortran code\n",
|
||||
"nr = 55\n",
|
||||
"nt = 55\n",
|
||||
"np = 55\n",
|
||||
"npoints = nr*nt*np\n",
|
||||
"\n",
|
||||
"# division\n",
|
||||
"ndiv_r = 1 \n",
|
||||
"ndiv_t = 1 \n",
|
||||
"ndiv_p = 1 "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import h5py\n",
|
||||
"import numpy\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# read fortran test file and convert to numpy array\n",
|
||||
"def read_fortran_result_file(fpath):\n",
|
||||
" with open(fpath, 'r') as f:\n",
|
||||
" lines = f.readlines()\n",
|
||||
" lines = [line.strip() for line in lines]\n",
|
||||
" lines = [line for line in lines if line]\n",
|
||||
" lines = [line.split() for line in lines]\n",
|
||||
" lines = numpy.array(lines, dtype=numpy.float64)\n",
|
||||
" return lines\n",
|
||||
"\n",
|
||||
"fortran_data = read_fortran_result_file(fpath_kernel_fort)\n",
|
||||
"## change dimension of fortran data\n",
|
||||
"Ks_fort = fortran_data[:,3].reshape(nr, nt, np)\n",
|
||||
"Kxi_fort = fortran_data[:,4].reshape(nr, nt, np)\n",
|
||||
"Keta_fort = fortran_data[:,5].reshape(nr, nt, np)\n",
|
||||
"\n",
|
||||
"fortran_synth_data = read_fortran_result_file(fpath_synth_fort).reshape(nr, nt, np)\n",
|
||||
"fortran_adj_data = read_fortran_result_file(fpath_adj_fort).reshape(nr, nt, np)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# read h5 data\n",
|
||||
"import sys\n",
|
||||
"sys.path.append(\"../../utils/\")\n",
|
||||
"\n",
|
||||
"from tomoatt_data_retrieval import get_data_from_h5\n",
|
||||
"\n",
|
||||
"#Ks_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Ks_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True)\n",
|
||||
"#Kxi_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Kxi_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n",
|
||||
"#Keta_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Keta_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n",
|
||||
"\n",
|
||||
"Ks_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Ks_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True)\n",
|
||||
"Kxi_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Kxi_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n",
|
||||
"Keta_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Keta_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n",
|
||||
"\n",
|
||||
"Syn_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/T_res_src_0_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n",
|
||||
"Adj_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/adjoint_field_src_0_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# plot slice of Ks_inv\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import matplotlib.animation as animation\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def plot_slice(data_es, data_fort, slice_ax, id_slice, contour=False, make_anime=False, tag=\"\"):\n",
|
||||
"\n",
|
||||
" if (slice_ax == 'r'):\n",
|
||||
" data_es_v = data_es[ id_slice, :, :]\n",
|
||||
" data_fort_v = data_fort[id_slice, :, :]\n",
|
||||
" elif (slice_ax == 't'):\n",
|
||||
" data_es_v = data_es[ :, id_slice, :]\n",
|
||||
" data_fort_v = data_fort[:, id_slice, :]\n",
|
||||
" elif (slice_ax == 'p'):\n",
|
||||
" data_es_v = data_es[ :, :, id_slice]\n",
|
||||
" data_fort_v = data_fort[:, :, id_slice]\n",
|
||||
" else:\n",
|
||||
" print(\"Error: slice_ax should be 'r', 't' or 'p'\")\n",
|
||||
" return\n",
|
||||
"\n",
|
||||
" # use the same color range for both tomoatt and fortran \n",
|
||||
" combined_data = numpy.array([data_es_v.flatten(),data_fort_v.flatten()])\n",
|
||||
" #Get the min and max of all your data\n",
|
||||
" _min, _max = numpy.amin(combined_data), numpy.amax(combined_data)\n",
|
||||
" # make the color range symmetric\n",
|
||||
" if (abs(_min) > abs(_max)):\n",
|
||||
" if(_min < 0):\n",
|
||||
" _max = -_min\n",
|
||||
" else:\n",
|
||||
" _min = -_max\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" # make the color range symmetric\n",
|
||||
" diff_data = data_es_v-data_fort_v\n",
|
||||
" _min_diff, _max_diff = numpy.amin(diff_data), numpy.amax(diff_data)\n",
|
||||
" if (abs(_min_diff) > abs(_max_diff)):\n",
|
||||
" if (_min_diff < 0):\n",
|
||||
" _max_diff = -_min_diff\n",
|
||||
" else:\n",
|
||||
" _min_diff = -_max_diff\n",
|
||||
"\n",
|
||||
" #cmap1=\"viridis\"\n",
|
||||
" cmap1=\"seismic\"\n",
|
||||
" cmap2=\"seismic\"\n",
|
||||
"\n",
|
||||
" plt.figure(figsize=(20,10))\n",
|
||||
"\n",
|
||||
" plt.subplot(1,3,1)\n",
|
||||
" plt.imshow(data_es_v, cmap=cmap1, vmin=_min, vmax=_max)\n",
|
||||
" plt.colorbar()\n",
|
||||
" if(contour):\n",
|
||||
" plt.contour(data_es_v, colors='k', linewidths=0.5)\n",
|
||||
" plt.title('result_tomoatt')\n",
|
||||
"\n",
|
||||
" plt.subplot(1,3,2)\n",
|
||||
" plt.imshow(data_fort_v, cmap=cmap1, vmin=_min, vmax=_max)\n",
|
||||
" plt.colorbar()\n",
|
||||
" if(contour): \n",
|
||||
" plt.contour(data_fort_v, colors='k', linewidths=0.5)\n",
|
||||
" plt.title('result_fort')\n",
|
||||
" \n",
|
||||
" plt.subplot(1,3,3)\n",
|
||||
" plt.imshow(diff_data, cmap=cmap2, vmin=_min_diff, vmax=_max_diff)\n",
|
||||
" plt.colorbar()\n",
|
||||
" if(contour):\n",
|
||||
" plt.contour(diff_data, colors='k', linewidths=0.5) \n",
|
||||
" plt.title('tomoatt-fort')\n",
|
||||
"\n",
|
||||
" if (not make_anime):\n",
|
||||
" plt.show()\n",
|
||||
" else:\n",
|
||||
" plt.savefig(\"out_\"+tag+\"_\"+slice_ax+str(id_slice).zfill(3)+\".png\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"plot_slice(Syn_tomoatt, fortran_synth_data, 'r', 20, contour=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"\n",
|
||||
"def anime_slices(data_es, data_fort, slice_ax, tag):\n",
|
||||
"\n",
|
||||
" if (slice_ax == 'r'):\n",
|
||||
" n = nr\n",
|
||||
" elif (slice_ax == 't'):\n",
|
||||
" n = nt\n",
|
||||
" elif (slice_ax == 'p'):\n",
|
||||
" n = np\n",
|
||||
"\n",
|
||||
" for i in range(0, n):\n",
|
||||
" plot_slice(data_es, data_fort, slice_ax, i, contour=True, make_anime=True, tag=tag)\n",
|
||||
"\n",
|
||||
" ## make png files to gif\n",
|
||||
" import subprocess\n",
|
||||
" subprocess.call([\"convert\", \"-delay\", \"20\", \"-loop\", \"0\", \"out_{}_{}*.png\".format(tag,slice_ax), \"out_{}_{}.gif\".format(tag,slice_ax)])\n",
|
||||
" # erase png files\n",
|
||||
" for i in range(0, nr):\n",
|
||||
" subprocess.call([\"rm\", \"out_{}_{}\".format(tag,slice_ax)+str(i).zfill(3)+\".png\"])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"anime_slices(Ks_tomoatt, Ks_fort, 'r', 'Ks')\n",
|
||||
"anime_slices(Ks_tomoatt, Ks_fort, 't', 'Ks')\n",
|
||||
"anime_slices(Ks_tomoatt, Ks_fort, 'p', 'Ks')\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"anime_slices(Adj_tomoatt, fortran_adj_data,'r', 'Adj')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"anime_slices(Keta_tomoatt, Keta_fort, 'r', 'Keta')\n",
|
||||
"anime_slices(Keta_tomoatt, Keta_fort, 't', 'Keta')\n",
|
||||
"anime_slices(Keta_tomoatt, Keta_fort, 'p', 'Keta')\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"anime_slices(Kxi_tomoatt, Kxi_fort, 'r', 'Kxi')\n",
|
||||
"anime_slices(Kxi_tomoatt, Kxi_fort, 't', 'Kxi')\n",
|
||||
"anime_slices(Kxi_tomoatt, Kxi_fort, 'p', 'Kxi')\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"anime_slices(Adj_tomoatt, fortran_adj_data, 'r', 'adj')\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
3
test/old_tests/inversion_2/fortran/Readme.txt
Normal file
3
test/old_tests/inversion_2/fortran/Readme.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
mpif90 ega5_sphe_3d_inversion_Tong_3Dinv.f90 -o a5.out
|
||||
|
||||
mpirun -n 4 a5.out
|
||||
501
test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES.txt
Normal file
501
test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES.txt
Normal file
@@ -0,0 +1,501 @@
|
||||
500
|
||||
12.902894 37.503373 16.794572
|
||||
17.416074 36.974148 25.587149
|
||||
10.553441 48.572870 29.755519
|
||||
17.050082 30.582756 20.557365
|
||||
7.733536 30.049830 22.686053
|
||||
2.695465 45.678252 36.050257
|
||||
19.018349 30.835213 33.695062
|
||||
16.538200 39.559879 22.351080
|
||||
2.947435 37.234474 24.550463
|
||||
15.739527 49.857044 16.506392
|
||||
15.732578 34.182860 27.127186
|
||||
1.296549 48.107962 29.948977
|
||||
14.587690 39.140723 23.153653
|
||||
18.135532 45.517829 17.105875
|
||||
8.364121 30.479830 15.883796
|
||||
9.211189 38.133248 17.858524
|
||||
4.272898 31.194404 18.573422
|
||||
6.948694 35.954361 24.462624
|
||||
12.746088 49.850406 26.847644
|
||||
11.313107 45.103047 16.301263
|
||||
3.313507 46.477589 36.875331
|
||||
10.145642 42.073024 18.769733
|
||||
8.250413 48.900277 19.475522
|
||||
13.804441 49.786255 16.530966
|
||||
17.835237 45.927679 19.912836
|
||||
11.877357 33.654921 22.852455
|
||||
12.871971 34.707392 21.890595
|
||||
4.097522 34.532987 27.568581
|
||||
17.874029 34.484387 34.692491
|
||||
3.866172 33.865449 28.496058
|
||||
16.252330 41.105672 19.464576
|
||||
1.213538 36.013973 17.977264
|
||||
14.955385 45.399043 29.827500
|
||||
17.469489 35.163250 19.273657
|
||||
7.375320 32.817054 28.313777
|
||||
18.585662 33.143956 25.800265
|
||||
15.518612 34.328928 29.752072
|
||||
18.309939 33.218516 38.096180
|
||||
5.752131 32.762387 39.124230
|
||||
12.471990 48.600499 37.709010
|
||||
8.119302 41.058539 27.574594
|
||||
13.473451 36.710096 33.310765
|
||||
12.096579 45.910913 20.602681
|
||||
12.291621 35.421838 19.609690
|
||||
6.722855 34.197625 22.922348
|
||||
19.977008 33.357824 20.801610
|
||||
14.042122 42.609560 36.961508
|
||||
8.278199 33.440638 35.377468
|
||||
10.130480 41.237552 26.524442
|
||||
9.874228 41.667609 22.900117
|
||||
2.528995 40.838610 35.938716
|
||||
15.334613 43.507392 36.217644
|
||||
2.660098 44.120069 32.041887
|
||||
1.861117 38.659778 36.102099
|
||||
17.497575 45.676303 27.354341
|
||||
11.287530 40.851293 33.379047
|
||||
18.006903 38.149825 25.683572
|
||||
9.641227 30.509291 32.005355
|
||||
11.281402 38.301783 26.210378
|
||||
17.511430 43.700541 20.496900
|
||||
6.279207 49.780686 35.342213
|
||||
10.691969 45.580664 36.011519
|
||||
15.409820 38.320676 17.830344
|
||||
19.051727 44.632362 37.180772
|
||||
1.812418 37.134760 37.694988
|
||||
4.160294 33.803068 37.492413
|
||||
19.990846 44.087650 38.916613
|
||||
6.919528 36.705624 30.282383
|
||||
3.762207 33.859941 23.084520
|
||||
6.696542 31.799267 15.983610
|
||||
5.207515 43.495341 36.539506
|
||||
15.760515 33.837372 18.996584
|
||||
16.401076 40.346859 29.422924
|
||||
3.985079 48.258603 32.826637
|
||||
16.886675 48.716436 23.605320
|
||||
18.974327 46.091270 22.697943
|
||||
7.384952 38.441961 16.463244
|
||||
4.231388 42.800608 22.558010
|
||||
3.169625 49.753544 33.780253
|
||||
3.741493 42.843651 38.277171
|
||||
1.703036 35.504006 28.680233
|
||||
2.556739 31.467144 23.718764
|
||||
8.546980 41.234760 31.150894
|
||||
13.221493 40.941614 33.480616
|
||||
6.837920 34.912584 35.820479
|
||||
7.716762 41.133360 20.876900
|
||||
10.321416 31.362250 29.092427
|
||||
17.855166 45.569227 19.744126
|
||||
5.414400 45.949803 24.029219
|
||||
10.622310 33.633958 37.349613
|
||||
18.821079 45.259309 23.690669
|
||||
6.400983 42.879048 20.743236
|
||||
10.339512 44.689643 20.088403
|
||||
14.157235 42.069607 38.833834
|
||||
17.014583 34.928036 31.302363
|
||||
12.827352 36.255275 22.938120
|
||||
7.405344 48.287391 34.564176
|
||||
3.771071 43.293532 28.422367
|
||||
11.910684 48.348929 36.441739
|
||||
3.053959 43.737186 36.600389
|
||||
8.579958 40.581127 25.851314
|
||||
11.931197 31.720220 17.810105
|
||||
7.425585 44.628309 34.089390
|
||||
1.517343 49.451598 36.749768
|
||||
13.373374 37.648809 36.512094
|
||||
4.490529 47.682461 26.286905
|
||||
17.470296 43.349799 16.006251
|
||||
19.343889 44.865620 31.299373
|
||||
15.455612 39.569737 21.775167
|
||||
13.382569 38.684806 37.606354
|
||||
16.876219 37.640250 22.490769
|
||||
5.007780 43.252308 31.761110
|
||||
14.917810 48.036944 16.404019
|
||||
18.211096 33.840776 16.319922
|
||||
7.586946 30.429530 17.767477
|
||||
15.527441 36.791267 32.576167
|
||||
8.395652 47.363883 30.734555
|
||||
8.300918 45.773041 18.973032
|
||||
12.811946 37.078433 31.654726
|
||||
11.271027 44.367770 23.614827
|
||||
7.883254 33.508117 25.081344
|
||||
9.318537 34.252752 21.126458
|
||||
10.125988 49.407886 23.732711
|
||||
15.231482 31.012657 38.326734
|
||||
17.583612 46.667417 35.223383
|
||||
3.975712 45.446574 19.293018
|
||||
6.378385 47.601238 37.559922
|
||||
2.237225 46.922084 15.276371
|
||||
18.881117 47.018476 32.117860
|
||||
7.601149 37.424848 33.048987
|
||||
1.545623 35.528771 31.054720
|
||||
15.305942 41.902726 32.920003
|
||||
8.780450 43.137000 29.771781
|
||||
15.653881 33.574476 22.550923
|
||||
8.374878 42.226796 29.428747
|
||||
1.649332 37.516438 29.602287
|
||||
15.471741 42.579812 34.244173
|
||||
14.121526 31.968351 35.539179
|
||||
19.951984 31.884994 38.930168
|
||||
5.686047 46.021632 37.620089
|
||||
3.356280 35.028285 27.812111
|
||||
17.282928 32.916989 20.503907
|
||||
17.587365 30.437778 27.868687
|
||||
16.846272 32.526293 23.686783
|
||||
5.595438 46.916388 30.602188
|
||||
10.617813 47.056847 29.509244
|
||||
3.472421 46.734969 23.827490
|
||||
9.450474 39.510548 26.858533
|
||||
7.050903 31.802893 18.651294
|
||||
16.740378 42.673295 22.941474
|
||||
8.748832 49.086459 28.498236
|
||||
11.101980 48.419839 33.467477
|
||||
1.821840 40.425959 24.967524
|
||||
18.807331 49.210102 23.627239
|
||||
16.048152 33.431415 27.275778
|
||||
4.156495 37.028503 23.441579
|
||||
8.252786 43.619866 31.044609
|
||||
6.039243 44.924797 25.445324
|
||||
15.698418 36.891680 31.709361
|
||||
13.305460 31.432069 28.565380
|
||||
1.884098 33.514374 39.083138
|
||||
19.784318 48.068758 33.412684
|
||||
10.067793 43.703751 38.394139
|
||||
9.332467 39.505090 19.017737
|
||||
12.280919 46.423916 38.722269
|
||||
18.443031 39.348801 27.023964
|
||||
15.761264 48.206337 22.708882
|
||||
7.403360 37.157790 15.624682
|
||||
11.901780 46.996568 29.408969
|
||||
19.234729 44.636488 39.127281
|
||||
4.699343 31.480019 22.985463
|
||||
8.029268 33.651500 17.282239
|
||||
9.408798 39.483198 37.726002
|
||||
2.995543 45.341282 28.914835
|
||||
1.469270 43.894101 35.258155
|
||||
17.054291 30.978729 17.580649
|
||||
5.151633 42.357135 21.048084
|
||||
11.523488 48.279981 20.451448
|
||||
12.625369 47.910449 23.809322
|
||||
10.805510 39.289972 33.099199
|
||||
16.688680 31.235778 31.772384
|
||||
5.872404 46.921761 20.735459
|
||||
7.760370 49.248566 27.412126
|
||||
14.981766 48.345084 22.449809
|
||||
17.494891 42.556305 17.939339
|
||||
16.883756 35.789221 26.232745
|
||||
18.320859 32.768764 34.301897
|
||||
17.639973 41.691055 20.038187
|
||||
9.699485 49.507576 29.079033
|
||||
18.107852 35.136726 29.376171
|
||||
18.308439 37.395076 27.395968
|
||||
7.807415 35.196537 36.702486
|
||||
19.870463 31.937476 26.900138
|
||||
3.831742 44.590580 18.565134
|
||||
15.201851 32.646130 39.026955
|
||||
15.828158 47.973824 36.504196
|
||||
13.003291 37.834748 30.167337
|
||||
6.392706 37.452325 18.574045
|
||||
16.906282 42.459442 35.050055
|
||||
13.809721 39.226894 19.719641
|
||||
2.349331 48.568978 36.858088
|
||||
13.463109 31.025621 32.611917
|
||||
7.791103 35.619114 35.466085
|
||||
15.908805 31.883312 36.337440
|
||||
12.117860 40.626769 15.503395
|
||||
17.224971 30.288926 20.225713
|
||||
7.769806 32.781915 20.240085
|
||||
19.515691 32.790366 18.423108
|
||||
13.086107 35.997238 32.187432
|
||||
19.583843 46.680117 23.645876
|
||||
5.856651 40.007246 21.179095
|
||||
7.862932 44.479540 23.893157
|
||||
6.880727 30.486859 36.304971
|
||||
12.890612 39.620341 15.500047
|
||||
17.079175 38.401798 27.785445
|
||||
5.828536 41.348587 16.106890
|
||||
16.937460 42.816015 36.720915
|
||||
3.914160 30.441916 38.949482
|
||||
19.655249 45.167885 21.419356
|
||||
5.977111 38.508239 20.391821
|
||||
6.927604 39.621611 32.875926
|
||||
18.361222 45.590869 38.069800
|
||||
10.260030 43.346131 15.879682
|
||||
2.192603 39.046662 33.248710
|
||||
19.085453 37.873403 16.629225
|
||||
12.101016 38.044051 24.990450
|
||||
5.819428 32.772253 26.474392
|
||||
12.724981 46.690291 27.925452
|
||||
18.061294 42.771723 33.725329
|
||||
14.506720 47.805098 26.622413
|
||||
19.850651 49.189715 25.849751
|
||||
15.219038 43.463470 25.041924
|
||||
19.886991 34.051333 32.426005
|
||||
7.117638 32.476564 32.376542
|
||||
5.495352 36.502620 28.691081
|
||||
16.996145 40.153394 37.204504
|
||||
6.456862 33.696229 34.883926
|
||||
2.330674 33.891702 15.484274
|
||||
16.654256 35.373110 33.898747
|
||||
5.038885 38.192102 27.689718
|
||||
14.123672 33.761702 24.479974
|
||||
1.429166 47.744844 31.788410
|
||||
4.269137 39.186264 18.096003
|
||||
2.289546 40.394737 27.797130
|
||||
8.634843 49.702312 16.408445
|
||||
4.519147 37.133705 18.956423
|
||||
15.655447 42.736719 21.384360
|
||||
12.749631 32.600550 38.708210
|
||||
4.951746 46.823971 36.767247
|
||||
9.331854 35.692199 21.771833
|
||||
10.011062 46.663543 24.723024
|
||||
19.949108 42.198244 27.340252
|
||||
10.252827 47.219953 25.322984
|
||||
16.510059 43.107901 28.874568
|
||||
6.363226 49.090611 17.454213
|
||||
10.635868 40.297072 33.028443
|
||||
16.850642 38.133906 27.489172
|
||||
1.209319 37.893652 34.507359
|
||||
12.115913 34.227874 36.364014
|
||||
12.821762 39.440078 33.040301
|
||||
18.591223 39.525593 31.873724
|
||||
8.071489 49.360508 16.522758
|
||||
8.888324 42.368580 26.650131
|
||||
8.889626 41.127943 35.902008
|
||||
10.999334 37.031617 39.494656
|
||||
18.362983 30.378271 18.297875
|
||||
4.302350 36.174539 25.849816
|
||||
7.203800 35.926694 33.803271
|
||||
5.955434 30.625004 18.539309
|
||||
18.701156 48.114168 36.495495
|
||||
9.310080 31.778387 24.469818
|
||||
4.443713 48.914441 17.652480
|
||||
6.915923 33.492221 30.512492
|
||||
12.953648 47.034138 17.407188
|
||||
13.014381 38.565701 16.404760
|
||||
3.750504 34.237353 36.468920
|
||||
14.823263 48.440372 22.486555
|
||||
15.668423 46.749729 32.080923
|
||||
15.249817 31.028147 15.608834
|
||||
13.264813 47.340345 31.103057
|
||||
15.198867 35.515848 16.671581
|
||||
9.743653 41.383808 30.090270
|
||||
13.220311 46.330492 36.129090
|
||||
3.174404 32.263913 36.140707
|
||||
6.044751 33.274473 15.721678
|
||||
11.565608 35.746820 22.653814
|
||||
16.179206 44.677125 24.020450
|
||||
11.327136 44.811048 32.693529
|
||||
1.636618 40.444103 18.356178
|
||||
10.744547 37.150505 16.214572
|
||||
13.261026 34.105829 21.999317
|
||||
3.868859 49.216692 21.453701
|
||||
18.240428 30.304513 30.673916
|
||||
7.072615 35.062618 26.710350
|
||||
9.121655 48.655297 29.967281
|
||||
5.855663 35.811613 27.420149
|
||||
12.000977 43.413023 15.537291
|
||||
6.564213 36.838226 35.870052
|
||||
7.714274 42.313338 28.048145
|
||||
2.081489 43.751865 27.701850
|
||||
8.319217 33.115678 38.739537
|
||||
14.511302 34.703210 16.585363
|
||||
9.035614 36.808248 20.909689
|
||||
14.228832 44.449462 15.947576
|
||||
10.282913 49.531593 19.906303
|
||||
17.589859 47.123318 23.446360
|
||||
4.864052 37.595184 15.336005
|
||||
5.554797 45.565313 38.282334
|
||||
10.528200 42.619743 24.326508
|
||||
11.040215 46.010982 22.617869
|
||||
11.404083 46.772047 20.275623
|
||||
8.466629 43.802511 26.377092
|
||||
14.969797 31.351324 25.339695
|
||||
14.235184 33.858954 37.025746
|
||||
8.455785 49.863795 33.265439
|
||||
8.889406 35.667726 17.308049
|
||||
6.681788 37.412732 15.346280
|
||||
8.976410 34.648739 17.568041
|
||||
10.814533 44.752360 29.627384
|
||||
10.199468 40.546340 32.494767
|
||||
14.496903 45.258427 38.066645
|
||||
3.094126 35.259604 16.746947
|
||||
8.520395 42.659554 15.880581
|
||||
17.611133 41.555600 18.232809
|
||||
14.251795 33.115916 20.736805
|
||||
7.514731 30.399115 21.351999
|
||||
5.196915 45.397866 34.915807
|
||||
19.166354 32.396496 21.352377
|
||||
13.151796 40.555799 27.727383
|
||||
5.350548 46.598504 34.378491
|
||||
9.529635 40.571371 18.426558
|
||||
9.126816 41.898209 17.050111
|
||||
13.802897 32.953515 28.238527
|
||||
15.418929 34.298935 26.833731
|
||||
12.574792 35.492734 26.555897
|
||||
16.938654 44.491948 25.265210
|
||||
10.924080 48.518974 17.175958
|
||||
7.117455 42.434404 23.654994
|
||||
14.009338 36.036521 39.017975
|
||||
19.349324 30.799935 19.716167
|
||||
14.201462 37.024155 38.578311
|
||||
2.822673 33.994394 34.302821
|
||||
13.892456 32.962351 32.359032
|
||||
15.995095 43.754437 29.772219
|
||||
12.968758 32.410285 24.381215
|
||||
1.583361 48.689008 24.016421
|
||||
15.389693 46.555314 19.407358
|
||||
17.453486 39.698530 32.665472
|
||||
12.941524 30.636925 27.452996
|
||||
13.213848 32.944137 23.119204
|
||||
5.801494 40.680483 39.987076
|
||||
16.748570 32.170913 15.378249
|
||||
5.500054 38.628247 24.922452
|
||||
9.008471 31.774374 37.808194
|
||||
14.855098 47.897280 39.249556
|
||||
18.168511 33.566407 22.346673
|
||||
17.753149 42.913741 33.127159
|
||||
19.795910 35.010497 18.833259
|
||||
13.418894 37.999490 18.797014
|
||||
10.696075 37.767208 37.509466
|
||||
1.516162 41.220767 36.769994
|
||||
9.791821 47.293788 32.327841
|
||||
15.542095 41.085072 23.263423
|
||||
16.094111 33.695693 15.819606
|
||||
11.757946 39.421142 30.979153
|
||||
16.568937 34.064155 18.969278
|
||||
6.911632 36.546812 20.978434
|
||||
4.881109 32.834115 39.250059
|
||||
14.023054 45.882062 37.160694
|
||||
9.816248 46.742746 29.781763
|
||||
8.756145 37.174411 24.408729
|
||||
17.588240 44.192292 26.619717
|
||||
17.340343 41.790910 28.580176
|
||||
12.088289 45.478525 27.897123
|
||||
2.586683 37.906181 27.284716
|
||||
14.494787 31.239448 15.065949
|
||||
19.880752 30.337209 16.025088
|
||||
12.823786 43.458027 18.855097
|
||||
15.293022 31.406674 37.847072
|
||||
13.980302 44.345304 18.989914
|
||||
8.991872 32.283652 15.894826
|
||||
10.306169 44.491996 15.351453
|
||||
9.244054 31.064154 35.461811
|
||||
11.066989 35.074635 21.009033
|
||||
9.996705 35.829850 28.967240
|
||||
11.044099 39.587919 35.338766
|
||||
1.917792 49.787496 20.053103
|
||||
1.898804 31.727660 26.029601
|
||||
17.236757 44.662413 28.599031
|
||||
8.003001 41.530145 34.147378
|
||||
11.296640 31.640054 29.667642
|
||||
7.470842 38.590285 16.251505
|
||||
4.120357 40.312343 30.229225
|
||||
8.168395 39.952977 27.957050
|
||||
14.557243 45.490199 23.005864
|
||||
8.675602 35.746172 28.944592
|
||||
13.436976 32.236888 28.823008
|
||||
17.809797 33.690628 26.829731
|
||||
8.031168 39.495328 32.948914
|
||||
14.566420 42.285006 32.930929
|
||||
10.051800 39.544345 25.797573
|
||||
15.312497 35.367693 24.154386
|
||||
2.101328 37.582577 35.819286
|
||||
14.200961 38.741432 22.349646
|
||||
17.750624 33.199228 15.433538
|
||||
5.105492 42.003092 30.932790
|
||||
10.710424 46.645944 31.550315
|
||||
4.863936 33.255507 39.528023
|
||||
10.640629 37.713774 30.208056
|
||||
3.363033 36.409599 39.058745
|
||||
11.715459 45.522667 32.434962
|
||||
13.464532 47.534408 37.701884
|
||||
5.753267 33.153432 38.744854
|
||||
18.406300 45.310872 29.325427
|
||||
13.206913 40.476137 23.713366
|
||||
8.022162 30.669901 22.709029
|
||||
3.752878 32.705859 37.542413
|
||||
1.610955 47.782385 29.385167
|
||||
3.282363 49.872369 28.006430
|
||||
15.645580 31.838090 35.763354
|
||||
4.094538 33.332994 30.739124
|
||||
19.389613 49.000040 18.201493
|
||||
12.304495 31.002744 35.347648
|
||||
16.636205 41.587288 38.509899
|
||||
16.242905 37.908027 22.830238
|
||||
5.293874 39.810962 24.214172
|
||||
17.730042 40.807401 24.413293
|
||||
10.848526 46.719333 35.651427
|
||||
7.126381 30.842360 33.846795
|
||||
5.959882 33.494248 22.053307
|
||||
19.655118 37.249880 30.995999
|
||||
17.472236 42.954364 33.867949
|
||||
8.702629 44.307435 34.928355
|
||||
14.553503 36.391143 23.208353
|
||||
16.004125 47.562957 34.801544
|
||||
11.432695 47.088634 33.492738
|
||||
18.226320 43.756214 35.926311
|
||||
3.436149 42.651048 38.536654
|
||||
13.874327 30.831422 25.310616
|
||||
14.802646 40.372075 29.327322
|
||||
17.366240 48.310718 23.205411
|
||||
18.883354 33.973377 34.189039
|
||||
4.940024 38.820683 21.764487
|
||||
6.389472 34.087807 31.184860
|
||||
9.686298 46.746346 32.711941
|
||||
14.858616 49.173689 28.350539
|
||||
12.892325 33.920028 27.283556
|
||||
10.997502 36.579405 32.044916
|
||||
17.125470 47.650177 29.239499
|
||||
10.673225 33.505780 21.271442
|
||||
15.673616 33.342102 36.331892
|
||||
19.150955 35.558436 38.191118
|
||||
7.109812 49.243617 18.690492
|
||||
6.496059 31.449753 32.600549
|
||||
16.655108 39.629968 37.582826
|
||||
10.026644 39.787402 21.084604
|
||||
7.611422 40.274845 26.509155
|
||||
19.789113 39.105677 19.207532
|
||||
2.261065 37.897836 16.342341
|
||||
3.544031 45.823398 29.063016
|
||||
8.128766 31.176403 35.862979
|
||||
1.144189 43.284815 36.664338
|
||||
11.880560 36.253201 23.576926
|
||||
16.624167 49.768690 39.240587
|
||||
15.503963 36.766183 20.953801
|
||||
17.806003 30.839724 27.752022
|
||||
8.304373 48.787565 21.408915
|
||||
10.181775 35.977743 18.438917
|
||||
17.122472 34.268485 38.754985
|
||||
5.311906 43.788904 17.804844
|
||||
12.012478 31.562773 17.345468
|
||||
19.961598 36.302881 28.623923
|
||||
19.538837 36.303158 31.781007
|
||||
4.523682 48.587788 33.198009
|
||||
13.324998 42.192480 29.795723
|
||||
1.123948 43.299255 23.155238
|
||||
17.451114 45.355883 24.606045
|
||||
4.411658 44.468014 25.506241
|
||||
3.964021 38.375390 37.494247
|
||||
3.342860 44.301725 24.667203
|
||||
16.858232 33.418985 37.621960
|
||||
17.575051 42.057543 21.681617
|
||||
3.721699 44.550901 22.869235
|
||||
4.536435 32.653021 20.354643
|
||||
12.418668 47.807467 24.510958
|
||||
3.480837 37.949268 25.698086
|
||||
17.659928 48.015778 25.153195
|
||||
3.404855 39.565089 37.688459
|
||||
19.441124 45.664148 24.812879
|
||||
15.163402 48.596491 28.147741
|
||||
7.069610 34.859944 37.842481
|
||||
10.350486 40.456093 36.237884
|
||||
19.801801 40.683590 39.924546
|
||||
7.334750 39.747428 31.758286
|
||||
18.418554 30.115213 16.453879
|
||||
5.771517 49.221621 20.668848
|
||||
18.747257 49.783529 38.782999
|
||||
12.681107 36.749221 26.025580
|
||||
18.648049 31.794062 33.729165
|
||||
3.086854 38.310420 27.893166
|
||||
@@ -0,0 +1,6 @@
|
||||
5
|
||||
12.902894 37.503373 16.794572
|
||||
17.416074 36.974148 25.587149
|
||||
10.553441 48.572870 29.755519
|
||||
17.050082 30.582756 20.557365
|
||||
7.733536 30.049830 22.686053
|
||||
61
test/old_tests/inversion_2/fortran/ega5/input/STATIONS.txt
Normal file
61
test/old_tests/inversion_2/fortran/ega5/input/STATIONS.txt
Normal file
@@ -0,0 +1,61 @@
|
||||
60
|
||||
0.0 36.472809 29.812050
|
||||
0.0 42.546922 16.133799
|
||||
0.0 30.991032 23.169443
|
||||
0.0 46.965102 39.508986
|
||||
0.0 47.511915 37.527905
|
||||
0.0 48.435600 20.814328
|
||||
0.0 41.863499 15.672084
|
||||
0.0 32.635381 25.986810
|
||||
0.0 38.657687 39.966088
|
||||
0.0 40.746866 34.837968
|
||||
0.0 42.548883 27.938223
|
||||
0.0 45.654715 39.054882
|
||||
0.0 35.547420 37.107352
|
||||
0.0 34.000382 19.128119
|
||||
0.0 44.563868 35.283488
|
||||
0.0 40.983368 32.490992
|
||||
0.0 41.849069 38.852775
|
||||
0.0 30.415956 28.399387
|
||||
0.0 39.547377 26.435165
|
||||
0.0 32.064886 30.332071
|
||||
0.0 42.476838 23.230493
|
||||
0.0 34.956877 26.244838
|
||||
0.0 42.093400 15.092363
|
||||
0.0 37.363268 23.303628
|
||||
0.0 41.913218 33.323567
|
||||
0.0 43.569418 26.558183
|
||||
0.0 36.206968 29.037593
|
||||
0.0 30.241436 25.506620
|
||||
0.0 44.117881 30.429571
|
||||
0.0 39.517000 34.746538
|
||||
0.0 37.361734 22.829658
|
||||
0.0 49.421317 23.380557
|
||||
0.0 35.352432 34.053354
|
||||
0.0 42.126659 22.069541
|
||||
0.0 40.290506 34.457216
|
||||
0.0 37.633977 35.795705
|
||||
0.0 42.640993 22.595143
|
||||
0.0 41.972681 38.966854
|
||||
0.0 43.073835 35.660796
|
||||
0.0 45.484914 23.240725
|
||||
0.0 44.787236 30.506240
|
||||
0.0 36.156778 18.188633
|
||||
0.0 34.670427 29.724995
|
||||
0.0 48.621299 19.602209
|
||||
0.0 35.103483 16.672438
|
||||
0.0 48.315182 37.314071
|
||||
0.0 42.367526 34.248809
|
||||
0.0 39.728066 28.578711
|
||||
0.0 44.531207 26.103171
|
||||
0.0 31.457146 27.143870
|
||||
0.0 31.580000 17.230000
|
||||
0.0 32.120000 19.330000
|
||||
0.0 49.220000 16.330000
|
||||
0.0 45.630000 18.290000
|
||||
0.0 40.870000 19.970000
|
||||
0.0 48.740000 27.460000
|
||||
0.0 47.520000 32.420000
|
||||
0.0 33.250000 33.980000
|
||||
0.0 30.990000 34.470000
|
||||
0.0 31.120000 39.100000
|
||||
@@ -0,0 +1,6 @@
|
||||
5
|
||||
0.0 36.472809 29.812050
|
||||
0.0 42.546922 16.133799
|
||||
0.0 30.991032 23.169443
|
||||
0.0 46.965102 39.508986
|
||||
0.0 47.511915 37.527905
|
||||
@@ -0,0 +1,737 @@
|
||||
include "eikon_solver_mpi.f90"
|
||||
|
||||
|
||||
! example: 3-D 3rd order anisotropic eikonal equation in cartesian coordinate (Point source)
|
||||
! parameter setting:
|
||||
! domain: R * Theta * Phi = [6275, 6375] * [49^\circ, 51^\circ] * [129^\circ, 131^\circ]
|
||||
! analytic solution: T = |x-x_s|/c0
|
||||
! isotropic eik equ: Tx^2 + Ty^2 + Tz^2 = s^2,
|
||||
! boundary condition: T(x0,y0,z0) = 0 (point source)
|
||||
! test function: 'FSM_WENO3_PS_sphe_3d' in "eikon_solver.f90"
|
||||
!
|
||||
|
||||
program eikonal_2d
|
||||
use mpi
|
||||
|
||||
! ######################### 参数声明 parameters statement #########################
|
||||
|
||||
implicit none
|
||||
|
||||
! mesh grid
|
||||
integer,parameter :: nr=55,nt=55,np=55
|
||||
double precision,parameter :: pi=3.14159265358979323846264338327950288
|
||||
double precision,parameter :: rr1=6070,rr2=6400
|
||||
double precision,parameter :: tt1=(30.0-1.5)/180*pi,tt2=(50.0+1.5)/180*pi
|
||||
double precision,parameter :: pp1=(15.0-1.5)/180*pi,pp2=(40.0+1.5)/180*pi
|
||||
double precision :: rr(nr),tt(nt),pp(np),dr,dt,dp
|
||||
|
||||
|
||||
! source (STATIONS) & receiver (EARTHQUAKES)
|
||||
integer :: nsou
|
||||
double precision,allocatable :: rsou(:),tsou(:),psou(:) ! source (station)
|
||||
integer :: nrec
|
||||
double precision,allocatable :: rrec(:),trec(:),prec(:) ! receiver (earthquake)
|
||||
|
||||
! model parameter
|
||||
double precision,parameter :: gamma = 0.0
|
||||
double precision :: xi(nr,nt,np),eta(nr,nt,np),zeta(nr,nt,np) ! syn model (ani)
|
||||
double precision :: xiT(nr,nt,np),etaT(nr,nt,np),zetaT(nr,nt,np) ! true model (ani)
|
||||
double precision :: sigma1,sigma2,psi
|
||||
double precision,parameter :: slow_p=0.04,ani_p=0.03
|
||||
|
||||
! Eikonal solver
|
||||
double precision :: aT(nr,nt,np),bT(nr,nt,np),cT(nr,nt,np),fT(nr,nt,np),funT(nr,nt,np) ! true model 真实模型
|
||||
double precision :: a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np),fun(nr,nt,np) ! syn model 猜测模型
|
||||
double precision :: uT(nr,nt,np),TableT(nr,nt,np) !true timetable 真实走时场
|
||||
double precision :: u(nr,nt,np),Table(nr,nt,np) !syn timetable 猜测走时场
|
||||
!double precision :: T0para(8),tau(nr,nt,np) ! multiplicative factor
|
||||
|
||||
! adjoint source
|
||||
double precision,allocatable :: sourceADJ(:),TtimeT(:,:),Ttime(:,:) ! adjoint source 伴随源,真实走时,合成走时
|
||||
double precision :: TableADJ(nr,nt,np) ! adjoint field 伴随场
|
||||
double precision :: Ks(nr,nt,np),Kxi(nr,nt,np),Keta(nr,nt,np) ! event kernel
|
||||
integer,parameter :: nk = 3 ! number of kernels
|
||||
double precision :: all_Ks(nr,nt,np),all_Kxi(nr,nt,np),all_Keta(nr,nt,np) ! sensitivity kernel
|
||||
double precision :: all_Kernel(nr,nt,np,nk) ! kernels for all parameters together
|
||||
!double precision,parameter :: radius = 40 ! kernel mask radius
|
||||
|
||||
! inversion grid
|
||||
integer,parameter :: ninvr=11,ninvt=10,ninvp=10 ! inversion grid size (coarse)
|
||||
double precision,parameter :: invr1=6070.0,invr2=6400.0
|
||||
double precision,parameter :: invt1=30.0/180*pi,invt2=50.0/180*pi
|
||||
double precision,parameter :: invp1=15.0/180*pi,invp2=40.0/180*pi
|
||||
integer,parameter :: ngrid=5 ! number of nultigrid (multigrid technique)
|
||||
double precision :: invr(ngrid,ninvr),invt(ngrid,ninvt),invp(ngrid,ninvp),dinvr,dinvt,dinvp
|
||||
double precision :: update_value(nr,nt,np,nk) ! parameter update value 更新参数的变化量
|
||||
|
||||
! model update (optimization)
|
||||
double precision :: stepsize ! stepsize
|
||||
integer,parameter :: MaxIter=1 ! max iteration step
|
||||
double precision :: old_obj, obj, sou_obj ! 优化目标函数 objective function
|
||||
double precision,allocatable :: weight_sou(:),weight_rec(:) !weight function
|
||||
double precision :: dis_ij, dis_zero !weight function
|
||||
logical :: weight_sou_bool=.false. , weight_rec_bool= .false.
|
||||
|
||||
! temp var
|
||||
double precision :: depth,lat,lon
|
||||
|
||||
! output file
|
||||
character(Len=80) :: filename,form,form2
|
||||
|
||||
! loop index
|
||||
integer :: iir,iit,iip,idi,idj,idk,i,j,k,iter,igrid
|
||||
|
||||
! computing time
|
||||
double precision :: time_begin,time_end,alpha
|
||||
|
||||
! mpi parameter
|
||||
integer :: ierr,myid,nproc
|
||||
|
||||
! ############################# main work #############################
|
||||
|
||||
call mpi_init(ierr)
|
||||
|
||||
call mpi_comm_rank(mpi_comm_world,myid,ierr)
|
||||
call mpi_comm_size(mpi_comm_world,nproc,ierr)
|
||||
|
||||
call CPU_TIME(time_begin) ! program start
|
||||
|
||||
|
||||
|
||||
! ################### read sources and receivers 读取地震台站数据 ###################
|
||||
open(10,file='ega5/input/STATIONS_5.txt')
|
||||
read(10,*) nsou
|
||||
allocate(rsou(nsou),tsou(nsou),psou(nsou),weight_sou(nsou))
|
||||
do i=1,nsou
|
||||
read(10,*) depth,lat,lon
|
||||
rsou(i) = 6371.0-depth
|
||||
tsou(i) = lat/180.0*pi
|
||||
psou(i) = lon/180.0*pi
|
||||
end do
|
||||
close(10)
|
||||
|
||||
open(10,file='ega5/input/EARTHQUAKES_5.txt')
|
||||
read(10,*) nrec
|
||||
allocate(rrec(nrec),trec(nrec),prec(nrec),weight_rec(nrec))
|
||||
do i=1,nrec
|
||||
read(10,*) depth,lat,lon
|
||||
rrec(i) = 6371.0-depth
|
||||
trec(i) = lat/180.0*pi
|
||||
prec(i) = lon/180.0*pi
|
||||
end do
|
||||
close(10)
|
||||
|
||||
! distance based weight -rec 台站权重
|
||||
if (weight_rec_bool) then
|
||||
dis_zero = 0
|
||||
do i=1,nrec-1
|
||||
do j=i,nrec
|
||||
call Epicenter_Distance(trec(i),prec(i),trec(j),prec(j),dis_ij)
|
||||
dis_zero = dis_zero + dis_ij
|
||||
end do
|
||||
end do
|
||||
dis_zero = dis_zero/nrec/(nrec-1)*2
|
||||
dis_zero = dis_zero/2
|
||||
|
||||
do i=1,nrec
|
||||
weight_rec(i)=0.0
|
||||
do j=1,nrec
|
||||
call Epicenter_Distance(trec(i),prec(i),trec(j),prec(j),dis_ij)
|
||||
weight_rec(i) = weight_rec(i) + exp(-(dis_ij/dis_zero)**2)
|
||||
end do
|
||||
weight_rec(i) = 1.0/weight_rec(i)
|
||||
end do
|
||||
print *, dis_zero
|
||||
end if
|
||||
|
||||
if (weight_rec_bool) then
|
||||
! distance based weight - soruce 地震权重
|
||||
dis_zero = 0
|
||||
do i=1,nsou-1
|
||||
do j=i,nsou
|
||||
call Epicenter_Distance(tsou(i),psou(i),tsou(j),psou(j),dis_ij)
|
||||
dis_zero = dis_zero + dis_ij
|
||||
end do
|
||||
end do
|
||||
dis_zero = dis_zero/nsou/(nsou-1)*2
|
||||
dis_zero = dis_zero/4
|
||||
|
||||
do i=1,nsou
|
||||
weight_sou(i)=0.0
|
||||
do j=1,nsou
|
||||
call Epicenter_Distance(tsou(i),psou(i),tsou(j),psou(j),dis_ij)
|
||||
weight_sou(i) = weight_sou(i) + exp(-(dis_ij/dis_zero)**2)
|
||||
end do
|
||||
weight_sou(i) = 1.0/weight_sou(i)
|
||||
end do
|
||||
print *, dis_zero
|
||||
end if
|
||||
|
||||
! ---- 记录到 matlab 数据中 matlab record ----
|
||||
if (myid .eq. 0) then
|
||||
open(100,file='ega5/output/STATIONS')
|
||||
open(101,file='ega5/output/EARTHQUAKES')
|
||||
do i=1,nsou
|
||||
write(100,'(f13.7,f13.7,f13.7,f13.7)') rsou(i),tsou(i),psou(i),weight_sou(i)
|
||||
end do
|
||||
do i=1,nrec
|
||||
write(101,'(f13.7,f13.7,f13.7,f13.7)') rrec(i),trec(i),prec(i),weight_rec(i)
|
||||
end do
|
||||
close(100);close(101)
|
||||
end if
|
||||
|
||||
! ######################### 生成网格 build mesh grid #####################################
|
||||
! -------- forward modeling grid ----------
|
||||
dr=(rr2-rr1)/(nr-1); dt=(tt2-tt1)/(nt-1); dp=(pp2-pp1)/(np-1)
|
||||
do iir=1,nr
|
||||
rr(iir)=rr1+(iir-1)*dr
|
||||
end do
|
||||
do iit=1,nt
|
||||
tt(iit)=tt1+(iit-1)*dt
|
||||
end do
|
||||
do iip=1,np
|
||||
pp(iip)=pp1+(iip-1)*dp
|
||||
end do
|
||||
|
||||
! -------- inversion multigrid ----------
|
||||
dinvr=(invr2-invr1)/(ninvr-1); dinvt=(invt2-invt1)/(ninvt-1); dinvp=(invp2-invp1)/(ninvp-1)
|
||||
do igrid=1,ngrid
|
||||
do iir=1,ninvr
|
||||
invr(igrid,iir)=invr1+(iir-1)*dinvr-(igrid-1)*dinvr/ngrid
|
||||
end do
|
||||
do iit=1,ninvt
|
||||
invt(igrid,iit)=invt1+(iit-1)*dinvt-(igrid-1)*dinvt/ngrid
|
||||
end do
|
||||
do iip=1,ninvp
|
||||
invp(igrid,iip)=invp1+(iip-1)*dinvp-(igrid-1)*dinvp/ngrid
|
||||
end do
|
||||
end do
|
||||
|
||||
! ######################### 构建背景模型 build the synthetic and true model #####################################
|
||||
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
|
||||
! synthetic (initial) model
|
||||
eta(iir,iit,iip)=0.0;
|
||||
xi(iir,iit,iip)=0.0;
|
||||
zeta(iir,iit,iip)=gamma*sqrt(eta(iir,iit,iip)**2+xi(iir,iit,iip)**2)
|
||||
! if (rr(iir)>6351) then ! 6371 - 6351 20 km
|
||||
! fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7)
|
||||
! elseif (rr(iir)>6336) then ! 6351 - 6336 15 km
|
||||
! fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6)
|
||||
! elseif (rr(iir)>6251) then ! 6336 - 6251 85 km
|
||||
! fun(iir,iit,iip) = 1.0/(8.04+(6336-rr(iir))/85.0*0.01)
|
||||
! elseif (rr(iir)>6161) then ! 6251 - 6161 90 km
|
||||
! fun(iir,iit,iip) = 1.0/(8.05+(6251-rr(iir))/90.0*0.25)
|
||||
! elseif (rr(iir)>5961) then ! 6161 - 5961 200 km
|
||||
! fun(iir,iit,iip) = 1.0/(8.30+(6161-rr(iir))/200.0*0.73)
|
||||
! else
|
||||
! fun(iir,iit,iip) = 1.0/9.03
|
||||
! end if
|
||||
|
||||
if (rr(iir)>6351) then ! 6371 - 6351 20 km
|
||||
fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7)
|
||||
elseif (rr(iir)>6336) then ! 6351 - 6336 15 km
|
||||
fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6)
|
||||
elseif (rr(iir)>5961) then ! 6351 - 6336 15 km
|
||||
fun(iir,iit,iip) = 1.0/(8.0+(6336-rr(iir))/375.0*1)
|
||||
else
|
||||
fun(iir,iit,iip) = 1.0/9.0
|
||||
end if
|
||||
|
||||
|
||||
!read(100,*) xi(iir,iit,iip)
|
||||
!read(101,*) eta(iir,iit,iip)
|
||||
!read(102,*) fun(iir,iit,iip)
|
||||
|
||||
a(iir,iit,iip)=1.0+2*zeta(iir,iit,iip);
|
||||
b(iir,iit,iip)=1.0-2*xi(iir,iit,iip);
|
||||
c(iir,iit,iip)=1.0+2*xi(iir,iit,iip);
|
||||
f(iir,iit,iip)=-2*eta(iir,iit,iip);
|
||||
|
||||
Table(iir,iit,iip) = 0
|
||||
|
||||
|
||||
|
||||
! true (target) model
|
||||
if (tt(iit)>=30.0/180*pi .and. tt(iit)<=50.0/180*pi .and. &
|
||||
& pp(iip)>=15.0/180*pi .and. pp(iip)<=40.0/180*pi .and. &
|
||||
& rr(iir)>=6211.0 .and. rr(iir)<=6371.0 ) then
|
||||
sigma1 = sin(4*pi*(tt(iit)-30.0/180*pi)/(20.0/180*pi))* &
|
||||
& sin(4*pi*(pp(iip)-15.0/180*pi)/(25.0/180*pi))* &
|
||||
& sin(2*pi*(rr(iir)-6211)/160.0)
|
||||
else
|
||||
sigma1 = 0.0
|
||||
end if
|
||||
|
||||
|
||||
if (sigma1<0) then
|
||||
psi = 60.0/180*pi
|
||||
elseif (sigma1 > 0) then
|
||||
psi = 150.0/180*pi
|
||||
else
|
||||
psi = 0
|
||||
end if
|
||||
|
||||
etaT(iir,iit,iip)=ani_p*abs(sigma1)*sin(2*psi);
|
||||
xiT(iir,iit,iip)=ani_p*abs(sigma1)*cos(2*psi);
|
||||
zetaT(iir,iit,iip)=gamma*sqrt(etaT(iir,iit,iip)**2+xiT(iir,iit,iip)**2)
|
||||
|
||||
aT(iir,iit,iip)=1.0+2*zetaT(iir,iit,iip);
|
||||
bT(iir,iit,iip)=1.0-2*xiT(iir,iit,iip);
|
||||
cT(iir,iit,iip)=1.0+2*xiT(iir,iit,iip);
|
||||
fT(iir,iit,iip)=-2*etaT(iir,iit,iip);
|
||||
funT(iir,iit,iip) = fun(iir,iit,iip)/(1+sigma1*slow_p)
|
||||
|
||||
!fun(iir,iit,iip) = funT(iir,iit,iip)
|
||||
!eta(iir,iit,iip)=etaT(iir,iit,iip);
|
||||
!xi(iir,iit,iip)=xiT(iir,iit,iip);
|
||||
!zeta(iir,iit,iip)=zetaT(iir,iit,iip)
|
||||
!a(iir,iit,iip)=aT(iir,iit,iip)
|
||||
!b(iir,iit,iip)=bT(iir,iit,iip)
|
||||
!c(iir,iit,iip)=cT(iir,iit,iip)
|
||||
!f(iir,iit,iip)=fT(iir,iit,iip)
|
||||
|
||||
TableT(iir,iit,iip) = 0
|
||||
u(iir,iit,iip) = 0
|
||||
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
|
||||
|
||||
! ---- 记录到 matlab 数据中 matlab record ----
|
||||
if (myid==0) then
|
||||
open(100,file='ega5/output/model_true')
|
||||
open(101,file='ega5/output/model_init')
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') &
|
||||
& rr(iir),tt(iit),pp(iip), &
|
||||
& funT(iir,iit,iip),xiT(iir,iit,iip),etaT(iir,iit,iip)
|
||||
write(101,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') &
|
||||
& rr(iir),tt(iit),pp(iip), &
|
||||
& fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100);close(101)
|
||||
|
||||
! --------- 多重网格 multiple grid ------
|
||||
do igrid=1,Ngrid
|
||||
select case(igrid)
|
||||
case (1:9)
|
||||
write(form,'(I1)') igrid
|
||||
case (10:99)
|
||||
write(form,'(I2)') igrid
|
||||
end select
|
||||
open(100,file='ega5/output/multigrid'//trim(form))
|
||||
|
||||
do iir=1,ninvr
|
||||
do iit=1,ninvt
|
||||
do iip=1,ninvp
|
||||
write(100,'(f13.7,f13.7,f13.7)') &
|
||||
& invr(igrid,iir),invt(igrid,iit),invp(igrid,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100)
|
||||
end do
|
||||
|
||||
end if
|
||||
|
||||
|
||||
! ######################### 计算真实到时 calculate true traveltimes ######################
|
||||
call mpi_barrier(mpi_comm_world,ierr)
|
||||
allocate(TtimeT(nsou,nrec)) ! 初始化真实到时表 initiate true traveltimes
|
||||
allocate(Ttime(nsou,nrec)) ! 初始化合成到时表 initiate syn traveltimes
|
||||
allocate(sourceADJ(nrec)) ! 初始化伴随源 initiate adjoint source
|
||||
|
||||
if (myid==0) then
|
||||
print *, ' '
|
||||
print *, '----------------- calculating true timetable ... ----------------'
|
||||
print *, ' '
|
||||
end if
|
||||
|
||||
do i=1,nsou ! loop sources (STATIONS)
|
||||
! -------- 求解程函方程 solve eikonal equations ------------
|
||||
call mpi_barrier(mpi_comm_world,ierr)
|
||||
!rsou(i)=6371.0; tsou(i)=30.5/180.0*pi; psou(i)=15.5/180.0*pi
|
||||
call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,TableT,funT,rsou(i),tsou(i),psou(i),u)
|
||||
call mpi_barrier(mpi_comm_world,ierr)
|
||||
! -------- 得到真实走时 calculate true arrival time at receiver --------
|
||||
call Linear_Interp_3D(rr,tt,pp,TableT,nr,nt,np,rrec,trec,prec,TtimeT(i,:),nrec)
|
||||
!if ((myid.eq.0) .and. 1>0) then
|
||||
! print *, rsou(i),tsou(i)/pi*180,psou(i)/pi*180
|
||||
! open(100,file='ega5/output/arrivaltime')
|
||||
! do j=1,nrec
|
||||
! write(100,'(i5.3,f8.2,f6.2,f6.2,f8.3)') j, rrec(j),trec(j)/pi*180,prec(j)/pi*180,TtimeT(i,j)
|
||||
! end do
|
||||
! close(100)
|
||||
!end if
|
||||
end do
|
||||
|
||||
print *, '----------------- calculating true timetable over ---------------- '
|
||||
|
||||
! ######################## 反演开始 inversion start ##########################
|
||||
|
||||
! ----- 初始化反演参数 initiate inversion parameters ----
|
||||
stepsize = 0.01 ! 迭代步长 stepsize
|
||||
old_obj = 0; obj = 0 ! 目标函数 objective function
|
||||
|
||||
|
||||
|
||||
if (myid .eq. 0) then
|
||||
print *, ' '
|
||||
print *, '----------------- inversion start ... ----------------'
|
||||
print *, ' '
|
||||
end if
|
||||
|
||||
|
||||
|
||||
do iter = 1,MaxIter
|
||||
call mpi_barrier(mpi_comm_world,ierr)
|
||||
if (myid .eq. 0) then
|
||||
print *, '----------------- iteration ',iter,' starting ... ----------------'
|
||||
end if
|
||||
|
||||
! ----- 初始化参数 initiate parameters ------
|
||||
all_Ks = 0; all_Kxi = 0; all_Keta = 0;
|
||||
obj = 0;
|
||||
|
||||
if (myid .eq. 0) then
|
||||
select case (iter)
|
||||
case (1:9)
|
||||
write(form,'(I1)') iter
|
||||
case (10:99)
|
||||
write(form,'(I2)') iter
|
||||
end select
|
||||
filename='ega5/output/misfit_step'//trim(form)
|
||||
open(998, file=trim(filename))
|
||||
end if
|
||||
|
||||
|
||||
do i=1,nsou ! loop sources (STATIONS)
|
||||
|
||||
! ######################## 计算合成走时场 calculate synthetic timetable ########################
|
||||
if (myid .eq. 0) then
|
||||
print *, '----------------- calculating synthetic timetable ... ----------------'
|
||||
end if
|
||||
|
||||
Table = 20
|
||||
call mpi_barrier(mpi_comm_world,ierr)
|
||||
call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,a,b,c,f,Table,fun,rsou(i),tsou(i),psou(i),u)
|
||||
call mpi_barrier(mpi_comm_world,ierr)
|
||||
! -------- 得到合成走时 calculate synthetic arrival time at receiver --------
|
||||
call Linear_Interp_3D(rr,tt,pp,Table,nr,nt,np,rrec,trec,prec,Ttime(i,:),nrec)
|
||||
|
||||
! -------- 构造伴随源 build adjoint source -------
|
||||
call Adjoint_Source_Dt(Ttime(i,:),TtimeT(i,:),nrec,sourceADJ,sou_obj) ! absolute traveltime difference
|
||||
if (myid .eq. 0) then
|
||||
do j=1,nrec
|
||||
write(998,'(f10.5)') Ttime(i,j)-TtimeT(i,j)
|
||||
end do
|
||||
end if
|
||||
|
||||
! weighting adjoint source
|
||||
if (weight_rec_bool) then
|
||||
do j=1,nrec
|
||||
sourceADJ(j) = sourceADJ(j) * weight_rec(j)
|
||||
end do
|
||||
end if
|
||||
|
||||
if (1>0 .and. (myid .eq. 0)) then
|
||||
select case (iter)
|
||||
case (1:9)
|
||||
write(form,'(I1)') iter
|
||||
case (10:99)
|
||||
write(form,'(I2)') iter
|
||||
end select
|
||||
select case (i)
|
||||
case (1:9)
|
||||
write(form2,'(I1)') i
|
||||
case (10:99)
|
||||
write(form2,'(I2)') i
|
||||
end select
|
||||
filename='ega5/output/syn_step'//trim(form)//'_event'//trim(form2)
|
||||
open(100,file=trim(filename))
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
write(100,'(f13.7)') Table(iir,iit,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100)
|
||||
end if
|
||||
!
|
||||
|
||||
!print *, Ttime(i,:),TtimeT(i,:)
|
||||
!call Adjoint_Source_Ddt(Ttime(i,:),TtimeT(i,:),nrec,sourceADJ,sou_obj) ! double difference traveltime
|
||||
!do j=1,nrec-1
|
||||
! do k=j,nrec
|
||||
! write(998,'(f10.5)') (Ttime(i,j)-Ttime(i,k))-(TtimeT(i,j)-TtimeT(i,k))
|
||||
! end do
|
||||
!end do
|
||||
|
||||
! ######################## 计算伴随场 adjoint field ########################
|
||||
if (myid .eq. 0) then
|
||||
! print *, '----------------- calculating adjoint field ... ----------------'
|
||||
end if
|
||||
call FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,nrec,rrec,trec,prec,sourceADJ)
|
||||
!call FSM_O1_Adj_PS_sphe_3d(rr,tt,pp,nr,nt,np,T0para,tau,TableADJ,zeta,xi,eta,nrec,rrec,trec,prec,sourceADJ)
|
||||
! ---- 记录到 matlab 数据中 matlab record (adjoint field) ----
|
||||
if (1>0 .and. (myid .eq. 0)) then
|
||||
select case (iter)
|
||||
case (1:9)
|
||||
write(form,'(I1)') iter
|
||||
case (10:99)
|
||||
write(form,'(I2)') iter
|
||||
end select
|
||||
select case (i)
|
||||
case (1:9)
|
||||
write(form2,'(I1)') i
|
||||
case (10:99)
|
||||
write(form2,'(I2)') i
|
||||
end select
|
||||
filename='ega5/output/adj_step'//trim(form)//'_event'//trim(form2)
|
||||
open(100,file=trim(filename))
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
write(100,'(f13.7)') TableADJ(iir,iit,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100)
|
||||
end if
|
||||
! ######################## 计算敏感核 sensitivity kernel ########################
|
||||
!print *, '----------------- calculating kernel ... ----------------'
|
||||
call Sensitivity_Kernel(rr,tt,pp,nr,nt,np,Table,TableADJ,gamma,xi,eta,fun,Ks,Kxi,Keta)
|
||||
|
||||
! ------- 抹去伴随源处的大函数值 mask the source -------
|
||||
!print *, '----------------- kernel mask ----------------'
|
||||
!call Kernel_Mask(rr,tt,pp,nr,nt,np,Ks,rsou(i),tsou(i),psou(i),radius)
|
||||
!call Kernel_Mask(rr,tt,pp,nr,nt,np,Kxi,rsou(i),tsou(i),psou(i),radius)
|
||||
!call Kernel_Mask(rr,tt,pp,nr,nt,np,Keta,rsou(i),tsou(i),psou(i),radius)
|
||||
call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Ks,rsou(i),tsou(i),psou(i))
|
||||
call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Kxi,rsou(i),tsou(i),psou(i))
|
||||
call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Keta,rsou(i),tsou(i),psou(i))
|
||||
|
||||
! ---- 记录到 matlab 数据中 matlab record (adjoint field) ----
|
||||
if (1<0 .and. myid .eq. 0) then
|
||||
select case (iter)
|
||||
case (1:9)
|
||||
write(form,'(I1)') iter
|
||||
case (10:99)
|
||||
write(form,'(I2)') iter
|
||||
end select
|
||||
select case (i)
|
||||
case (1:9)
|
||||
write(form2,'(I1)') i
|
||||
case (10:99)
|
||||
write(form2,'(I2)') i
|
||||
end select
|
||||
filename='ega5/output/kernel_step'//trim(form)//'_event'//trim(form2)
|
||||
open(100,file=trim(filename))
|
||||
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') &
|
||||
& rr(iir),tt(iit),pp(iip), &
|
||||
& Ks(iir,iit,iip),Kxi(iir,iit,iip),Keta(iir,iit,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100)
|
||||
end if
|
||||
|
||||
! --------- 敏感核,obj叠加 sum kernels and objective function -------
|
||||
if (weight_sou_bool) then ! no weight
|
||||
all_Ks = all_Ks + Ks * weight_sou(i);
|
||||
all_Kxi = all_Kxi + Kxi * weight_sou(i);
|
||||
all_Keta = all_Keta + Keta * weight_sou(i);
|
||||
obj = obj + sou_obj !* weight_sou(i)
|
||||
else ! source weighted
|
||||
all_Ks = all_Ks + Ks;
|
||||
all_Kxi = all_Kxi + Kxi;
|
||||
all_Keta = all_Keta + Keta;
|
||||
obj = obj + sou_obj
|
||||
end if
|
||||
|
||||
end do
|
||||
|
||||
close(998)
|
||||
|
||||
! ---- 记录到 matlab 数据中 matlab record (kernel) ----
|
||||
if (1>0 .and. myid .eq. 0) then
|
||||
select case (iter)
|
||||
case (1:9)
|
||||
write(form,'(I1)') iter
|
||||
case (10:99)
|
||||
write(form,'(I2)') iter
|
||||
end select
|
||||
filename='ega5/output/kernel_step'//trim(form)//'_sum'
|
||||
open(100,file=trim(filename))
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') &
|
||||
& rr(iir),tt(iit),pp(iip), &
|
||||
& all_Ks(iir,iit,iip),all_Kxi(iir,iit,iip),all_Keta(iir,iit,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100)
|
||||
end if
|
||||
! ##################### 模型更新 model update ####################
|
||||
print *, '----------------- model updating ... ----------------'
|
||||
|
||||
all_Kernel(:,:,:,1) = all_Ks;
|
||||
all_Kernel(:,:,:,2) = all_Kxi;
|
||||
all_Kernel(:,:,:,3) = all_Keta;
|
||||
|
||||
! ------------ 更新速度(慢度) update velocity (slowness) ------------
|
||||
call Parameter_Update_Multigrid(rr,tt,pp,nr,nt,np,all_Kernel,nk, &
|
||||
& invr,invt,invp,ninvr,ninvt,ninvp,ngrid,stepsize,update_value)
|
||||
|
||||
if (1<0 .and. myid .eq. 0) then
|
||||
select case (iter)
|
||||
case (1:9)
|
||||
write(form,'(I1)') iter
|
||||
case (10:99)
|
||||
write(form,'(I2)') iter
|
||||
end select
|
||||
filename='ega5/output/model_update_step'//trim(form)
|
||||
open(100,file=trim(filename))
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') &
|
||||
& rr(iir),tt(iit),pp(iip), &
|
||||
& -fun(iir,iit,iip)*update_value(iir,iit,iip,1), &
|
||||
& -update_value(iir,iit,iip,2),-update_value(iir,iit,iip,3)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100)
|
||||
end if
|
||||
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
fun(iir,iit,iip) = fun(iir,iit,iip)*(1-update_value(iir,iit,iip,1))
|
||||
!fun(iir,iit,iip) = fun(iir,iit,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
! ------------ 更新xi update xi ------------
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
xi(iir,iit,iip) = xi(iir,iit,iip)-update_value(iir,iit,iip,2)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
! ------------ 更新eta update eta ------------
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
eta(iir,iit,iip) = eta(iir,iit,iip)-update_value(iir,iit,iip,3)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
! ----------- 更新 update eikonal solver paramater -----------------
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
b(iir,iit,iip)=1.0-2*xi(iir,iit,iip);
|
||||
c(iir,iit,iip)=1.0+2*xi(iir,iit,iip);
|
||||
f(iir,iit,iip)=-2*eta(iir,iit,iip);
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
|
||||
|
||||
|
||||
|
||||
! ##################### 调整下降步长 modify stepsize #############
|
||||
if (myid .eq. 0) then
|
||||
print *, ' '
|
||||
end if
|
||||
|
||||
if (1>0 .and. (myid .eq. 0)) then
|
||||
open(999,file='ega5/output/obj',access='append')
|
||||
write(999,'(f9.2,f9.6)') obj, stepsize
|
||||
close(999)
|
||||
end if
|
||||
|
||||
if (iter == 1 ) then
|
||||
if (myid .eq. 0) then
|
||||
write(*,'(a,f9.2)') 'iter 1, obj is', obj
|
||||
write(*,'(a,f9.6)') 'iter 1, stepsize is', stepsize
|
||||
end if
|
||||
elseif (iter >= 2 .and. obj < old_obj) then
|
||||
!stepsize = min(0.01,stepsize*1.2)
|
||||
if (myid .eq. 0) then
|
||||
write(*,'(a,f9.2,a,f9.2)') 'objective function decreases, from', old_obj, ' to', obj
|
||||
write(*,'(a,f9.6)') 'new stepsize is ', stepsize
|
||||
end if
|
||||
elseif (iter >= 2 .and. obj >= old_obj) then
|
||||
!stepsize = max(0.002,stepsize*0.5)
|
||||
if (myid .eq. 0) then
|
||||
write(*,'(a,f9.2,a,f9.2)') 'objective function increases, from', old_obj, ' to', obj
|
||||
write(*,'(a,f9.6)') 'new stepsize is ', stepsize
|
||||
end if
|
||||
end if
|
||||
|
||||
print *, '----------------- iteration ',iter,' over ----------------'
|
||||
print *, ' '
|
||||
print *, ' '
|
||||
|
||||
|
||||
old_obj = obj
|
||||
|
||||
! ---- 记录到 matlab 数据中 matlab record ----
|
||||
if (1>0 .and. (myid .eq. 0)) then
|
||||
select case (iter)
|
||||
case (1:9)
|
||||
write(form,'(I1)') iter
|
||||
case (10:99)
|
||||
write(form,'(I2)') iter
|
||||
end select
|
||||
filename='ega5/output/model_step'//trim(form)
|
||||
open(100,file=trim(filename))
|
||||
do iir=1,nr
|
||||
do iit=1,nt
|
||||
do iip=1,np
|
||||
write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') &
|
||||
& rr(iir),tt(iit),pp(iip), &
|
||||
& fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip)
|
||||
end do
|
||||
end do
|
||||
end do
|
||||
close(100)
|
||||
end if
|
||||
|
||||
|
||||
if (myid .eq. 0) then
|
||||
call CPU_TIME(time_end)
|
||||
write(*,'(f10.2)') time_end - time_begin
|
||||
end if
|
||||
|
||||
end do
|
||||
|
||||
|
||||
call mpi_finalize(ierr)
|
||||
|
||||
end program eikonal_2d
|
||||
|
||||
2836
test/old_tests/inversion_2/fortran/eikon_solver_mpi.f90
Normal file
2836
test/old_tests/inversion_2/fortran/eikon_solver_mpi.f90
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
54
test/old_tests/inversion_2/input_params.yml
Normal file
54
test/old_tests/inversion_2/input_params.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
version : 2
|
||||
|
||||
domain :
|
||||
#min_max_dep : [-21.863,308.8137] # depth in km
|
||||
min_max_dep : [-29.0,301.0] # depth in km
|
||||
min_max_lat : [28.5,51.5] # latitude in degree
|
||||
min_max_lon : [13.5,41.5] # longitude in degree
|
||||
n_rtp : [55,55,55] # number of nodes
|
||||
|
||||
source :
|
||||
#src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree
|
||||
#src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree
|
||||
src_rec_file : 'src_rec_test_out.dat' # source receiver file (if found, src_dep_lat_lon is ignored)
|
||||
#src_rec_file : 'src_rec_compare_with_fortran_out.dat' # source receiver file (if found, src_dep_lat_lon is ignored)
|
||||
swap_src_rec : 1 # swap source and receiver (1: yes, 0: no)
|
||||
|
||||
|
||||
model :
|
||||
init_model_type : '' # 'fd' (input file) or '1d_ak135'
|
||||
init_model_path : './test_model_init.h5' # path to initial model file (ignored if init_model_type is '1d_*')
|
||||
|
||||
inversion :
|
||||
run_mode : 1 # 0 for forward simulation only, 1 for inversion
|
||||
optim_method : 2 # optimization method. 0 : "grad_descent", 1 : "lbfgs", 2 : "halve-stepping"
|
||||
smooth_method : 0 # 0: multigrid parametrization, 1: laplacian smoothing with CG
|
||||
max_iterations_inv : 100 # maximum number of inversion iterations
|
||||
step_size : 0.01 # step size for inversion
|
||||
|
||||
# parameters for multiparametric inversion
|
||||
n_inversion_grid : 5 # number of inversion grid sets
|
||||
n_inv_dep_lat_lon : [11,10,10] # number of the base inversion grid points
|
||||
min_max_dep_inv : [-29.0, 301.0] # depth in km with R = 6371.0
|
||||
min_max_lat_inv : [30.0,50.0] # latitude in degree
|
||||
min_max_lon_inv : [15.0,40.0] # longitude in degree
|
||||
# parameters for laplacian smoothing
|
||||
l_smooth_rtp : [1,1,1] # smoothing coefficients for each direction
|
||||
regularization_weight : 2000.0 # regularization weight
|
||||
# parameter for halving-stepping or lbfgs
|
||||
max_sub_iterations : 100 # maximum number of sub-iterations
|
||||
|
||||
|
||||
parallel :
|
||||
n_sims : 1 # number of simultaneous run
|
||||
ndiv_rtp : [2,2,2] # number of subdomains
|
||||
nproc_sub : 1 # number of subprocess used for each subdomain
|
||||
use_gpu : 0
|
||||
|
||||
calculation :
|
||||
convergence_tolerance : 1e-5
|
||||
max_iterations : 200
|
||||
stencil_order : 3 # 1 or 3
|
||||
sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization
|
||||
|
||||
|
||||
36
test/old_tests/inversion_2/input_params_pre.yml
Normal file
36
test/old_tests/inversion_2/input_params_pre.yml
Normal file
@@ -0,0 +1,36 @@
|
||||
version : 2
|
||||
|
||||
domain :
|
||||
#min_max_dep : [-21.863,308.8137] # depth in km
|
||||
min_max_dep : [-29.0,301.0] # depth in km
|
||||
min_max_lat : [28.5,51.5] # latitude in degree
|
||||
min_max_lon : [13.5,41.5] # longitude in degree
|
||||
n_rtp : [55,55,55] # number of nodes
|
||||
|
||||
source :
|
||||
#src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree
|
||||
#src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree
|
||||
src_rec_file : 'src_rec_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored)
|
||||
#src_rec_file : 'src_rec_compare_with_fortran.txt' # source receiver file (if found, src_dep_lat_lon is ignored)
|
||||
swap_src_rec : 1 # swap source and receiver
|
||||
model :
|
||||
init_model_type : '' # 'fd' (input file) or '1d_ak135'
|
||||
init_model_path : './test_model_true.h5' # path to initial model file (ignored if init_model_type is '1d_*')
|
||||
|
||||
inversion :
|
||||
run_mode : 0 # 0 for forward simulation only, 1 for inversion
|
||||
n_inversion_grid : 1
|
||||
|
||||
|
||||
parallel :
|
||||
n_sims : 1 # number of simultaneous run
|
||||
ndiv_rtp : [1,1,1] # number of subdomains
|
||||
nproc_sub : 8 # number of subprocess used for each subdomain
|
||||
|
||||
calculation :
|
||||
convergence_tolerance : 1e-5
|
||||
max_iterations : 200
|
||||
stencil_order : 3 # 1 or 3
|
||||
sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization
|
||||
|
||||
|
||||
328
test/old_tests/inversion_2/make_test_model.ipynb
Normal file
328
test/old_tests/inversion_2/make_test_model.ipynb
Normal file
@@ -0,0 +1,328 @@
|
||||
{
|
||||
"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 = 6378.1370\n",
|
||||
"R_earth = 6371.0\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",
|
||||
"n_rtp.reverse()\n",
|
||||
"dr = (rr2-rr1)/(n_rtp[2]-1)\n",
|
||||
"dt = (tt2-tt1)/(n_rtp[1]-1)\n",
|
||||
"dp = (pp2-pp1)/(n_rtp[0]-1)\n",
|
||||
"rr = np.array([rr1 + x*dr for x in range(n_rtp[2])])\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[0])])\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[ip,it,ir] = 0.0\n",
|
||||
" #xi_init[ip,it,ir] = 0.0\n",
|
||||
" zeta_init[ip,it,ir] = gamma*math.sqrt(eta_init[ip,it,ir]**2 + xi_init[ip,it,ir]**2)\n",
|
||||
" \n",
|
||||
" if (rr[ir]>6351):\n",
|
||||
" fun_init[ip,it,ir] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7)\n",
|
||||
" elif (rr[ir]>6336):\n",
|
||||
" fun_init[ip,it,ir] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6)\n",
|
||||
" elif (rr[ir]>5961):\n",
|
||||
" fun_init[ip,it,ir] = 1.0/(8.0+(6336-rr[ir])/375.0*1) \n",
|
||||
" else:\n",
|
||||
" fun_init[ip,it,ir] = 1.0/9.0\n",
|
||||
"\n",
|
||||
" vel_init[ip,it,ir] = 1.0/fun_init[ip,it,ir]\n",
|
||||
" a_init[ip,it,ir] = 1.0 + 2.0*zeta_init[ip,it,ir]\n",
|
||||
" b_init[ip,it,ir] = 1.0 - 2.0*xi_init[ip,it,ir]\n",
|
||||
" c_init[ip,it,ir] = 1.0 + 2.0*xi_init[ip,it,ir]\n",
|
||||
" f_init[ip,it,ir] = -2.0 * eta_init[ip,it,ir]\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[ip,it,ir] = ani_p*abs(sigma)*math.sin(2.0*psi)\n",
|
||||
" xi_true[ip,it,ir] = ani_p*abs(sigma)*math.cos(2.0*psi)\n",
|
||||
" zeta_true[ip,it,ir] = gamma*math.sqrt(eta_true[ip,it,ir]**2 + xi_true[ip,it,ir]**2)\n",
|
||||
" fun_true[ip,it,ir] = fun_init[ip,it,ir]/(1.0+sigma*slow_p)\n",
|
||||
" vel_true[ip,it,ir] = 1.0/fun_true[ip,it,ir] \n",
|
||||
" a_true[ip,it,ir] = 1.0 + 2.0*zeta_true[ip,it,ir]\n",
|
||||
" b_true[ip,it,ir] = 1.0 - 2.0*xi_true[ip,it,ir]\n",
|
||||
" c_true[ip,it,ir] = 1.0 + 2.0*xi_true[ip,it,ir]\n",
|
||||
" f_true[ip,it,ir] = -2.0 * eta_true[ip,it,ir]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"print(\"depminmax {} {}\".format(R_earth-rr1,R_earth-rr2))\n",
|
||||
"print(c)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"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.T)\n",
|
||||
"fout_init.create_dataset('xi', data=xi_init.T)\n",
|
||||
"fout_init.create_dataset('zeta', data=zeta_init.T)\n",
|
||||
"fout_init.create_dataset('fun', data=fun_init.T)\n",
|
||||
"fout_init.create_dataset('fac_a', data=a_init.T)\n",
|
||||
"fout_init.create_dataset('fac_b', data=b_init.T)\n",
|
||||
"fout_init.create_dataset('fac_c', data=c_init.T)\n",
|
||||
"fout_init.create_dataset('fac_f', data=f_init.T)\n",
|
||||
"fout_init.create_dataset('vel', data=vel_init.T)\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.T)\n",
|
||||
"fout_true.create_dataset('xi', data=xi_true.T)\n",
|
||||
"fout_true.create_dataset('zeta', data=zeta_true.T)\n",
|
||||
"fout_true.create_dataset('fun', data=fun_true.T)\n",
|
||||
"fout_true.create_dataset('fac_a', data=a_true.T)\n",
|
||||
"fout_true.create_dataset('fac_b', data=b_true.T)\n",
|
||||
"fout_true.create_dataset('fac_c', data=c_true.T)\n",
|
||||
"fout_true.create_dataset('fac_f', data=f_true.T)\n",
|
||||
"fout_true.create_dataset('vel', data=vel_true.T)\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(1145141919810)\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 = 500\n",
|
||||
"n_rec = [60 for x in range(n_src)]\n",
|
||||
"#n_src = 10\n",
|
||||
"#n_rec = [10 for x in range(n_src)]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"lines = []\n",
|
||||
"\n",
|
||||
"pos_src=[]\n",
|
||||
"pos_rec=[]\n",
|
||||
"\n",
|
||||
"# create receiver coordinates\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 = random.uniform((R_earth-rr1)*0.1,(R_earth-rr1)*0.9)\n",
|
||||
" lon = random.uniform(pp1deg,pp2deg)\n",
|
||||
" lat = random.uniform(tt1deg,tt2deg)\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",
|
||||
" elev_rec = elev_recs[i_rec]\n",
|
||||
" lon_rec = lon_recs[i_rec]\n",
|
||||
" lat_rec = lat_recs[i_rec]\n",
|
||||
" st_name_dummy = rec_names[i_rec]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n",
|
||||
" lines.append(rec)\n",
|
||||
"\n",
|
||||
" pos_rec.append([lon_rec,lat_rec,elev_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')"
|
||||
]
|
||||
}
|
||||
],
|
||||
"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