Les 1
spike. py from numpy import * import rsf. api as rsf подгружаем команды Madagascar a_obj=rsf. sfspike(n 1='5', k 1='2')[0] создали объект - вектор длины 5, все нули кроме 2 элемента (нумерация с еденицы). При этом создается временный файл формата rsf. b_obj=rsf. sfmath(output='1 -input')[a_obj] из вектора длины, состоящий из 1, вычли исходный вектор b_arr=ones(5, 'f') создали вектор длины 5 заполненный единицами b_arr[1]=0 второму элементу (нумерация с нуля) вектора присвоили нуль c_obj=rsf. File(b_arr) сохраняем вектор как rsf файл d_arr=array(c_obj) сохраняем rsf файл как вектор d_arr[1]=1 присваиваем второму элементу вектора значение 1 print b_arr выводим вектор b print b_obj[: ] выводим значения объекта b print d_arr выводим вектор d
print b_arr выводим вектор b print b_obj[: ] выводим значения объекта b print d_arr выводим вектор d
sfmath. py from numpy import * import rsf. api as rsf подгружаем команды Madagascar out=rsf. Output("out. rsf") создаем выходной rsf файл out. rsf b_obj=rsf. sfmath(n 1='3', o 1='1', n 2='2', o 2='1', d 1='1', d 2='1', output='x 2')[0] создаем объект - два вектора [1, 1, 1, 2, 2, 2] и [1, 2, 3, 1, 2, 3], сохраняем второй N 1=3 задаем параметры N 2=2 D 1=1 D 2=1 O 1=1 O 2=1 x 1=linspace(O 1, O 1+(N 1*D 1)-1, N 1, endpoint=True) задаем вектор x 1 x 2=linspace(O 2, O 2+(N 2*D 2)-1, N 2, endpoint=True) задаем вектор x 2
t=zeros((N 1, N 2), 'f') создаем матрицу N 1*N 2, состоящую из нулей for i in range(N 1): for j in range(N 2): t[i][j]=x 1[i]*x 2[j] заполняем матрицу элементами произведения векторов x 1 и x 2 a=b_obj[: ] переменная a содержит значения объекта b out. put('n 1', N 1) заполняем заголовок для out. rsf out. put('n 2', N 2) out. put('d 1', D 1) out. put('d 2', D 2) out. put('o 1', O 1) out. put('o 2', O 2) out. write(b_obj[: ]) записываем в out. rsf значения объекта b (вектор x 2) out. sfin() выводим заголовок out. rsf print a выводим a print t[: ] выводим значения м-цы t print x 1 выводим x 1 print x 2 выводим x 2
out. sfin() выводим заголовок out. rsf print a выводим a print t[: ] выводим значения м-цы t print x 1 выводим x 1 print x 2 выводим x 2
vel 1. py from numpy import * import rsf. api as rsf подгружаем команды Madagascar import os подгружаем возможность ввода в командную строку import matplotlib. pyplot as plt подгружаем графический пакет pyplot import pylab подгружаем графический пакет pylab N 1=200 задаем параметры модели N 2=200 O 1=-10 O 2=-10 D 1=0. 1 D 2=0. 1 tmp=zeros((N 2, N 1), 'f') создаем матрицу N 1*N 2, заполненную нулями output_tmp=rsf. Output("tmp. rsf") создаем выходной rsf файл tmp. rsf eicon_tmp=rsf. Output("eicon. rsf") создаем выходной rsf файл eicon. rsf output_tmp. put('n 1', N 1) заполняем заголовок для tmp. rsf output_tmp. put('n 2', N 2) output_tmp. put('o 1', O 1) output_tmp. put('o 2', O 2) output_tmp. put('d 1', D 1) output_tmp. put('d 2', D 2) X=linspace(-1, 1, 200, endpoint=True) задаем ось X Y=linspace(-1, 1, 200, endpoint=True) задаем ось Y for i in range(N 2): for j in range(N 1): tmp[i][j]=-0. 7*exp(-10*(X[i]**2+Y[j]**2))+2 заполняем матрицу tmp
g=tmp[100, : ] берем «срез» м-цы tmp по 100 -му элементу первой переменной plt. subplot(121) создаем вывод графики: 1 объект по вертикали, 2 по горизонтали; следующий вывод графики будет в первом положении (слева) plt. plot(g) рисуем «срез» в первом положении (слева) plt. subplot(122) следующий вывод графики будет во втором положении (справа) plt. imshow(tmp) рисуем м-цу tmp plt. show() выводим на экран plt. savefig("vel. png")сохраняем изображение как png os. system("display vel. png") через командную строку выводим изображение на экран output_tmp. write(tmp) записываем в tmp. rsf м-цу tmp output_tmp. close() «закрываем» файл tmp. rsf для дальнейших действий v 1=rsf. sfwindow(n 2='1', f 2='100')["tmp. rsf"] берем «срез» м-цы tmp по 100 -му элементу второй переменной gauss=rsf. sfgraph(title='1 D Gaussian')[v 1] рисуем v 1 gauss. show() выводим v 1 v=rsf. sfgrey(transp='n', title='2 D Gaussian', screenratio='1', scalebar='n', pclip='100', bias='1. 6')["tmp. rsf"] рисуем скоростную модель tmp. rsf v. show() выводим tmp. rsf
plt. subplot(121) создаем вывод графики: 1 объект по вертикали, 2 по горизонтали; следующий вывод графики будет в первом положении (слева) plt. plot(g) рисуем «срез» в первом положении (слева) plt. subplot(122) следующий вывод графики будет во втором положении (справа) plt. imshow(tmp) рисуем м-цу tmp plt. show() выводим на экран plt. savefig("vel. png")сохраняем изображение как png os. system("display vel. png") через командную строку выводим изображение на экран
v 1=rsf. sfwindow(n 2='1', f 2='100')["tmp. rsf"] берем «срез» м-цы tmp по 100 -му элементу второй переменной gauss=rsf. sfgraph(title='1 D Gaussian')[v 1] рисуем v 1 gauss. show() выводим v 1
v=rsf. sfgrey(transp='n', title='2 D Gaussian', screenratio='1', scalebar='n', pclip='100', bias='1. 6')["tmp. rsf"] рисуем скоростную модель tmp. rsf v. show() выводим tmp. rsf
t_obj=rsf. sfeikonal(zshot='0', yshot='-10')["tmp. rsf"] решаем уравнение эйконала для скоростной модели tmp. rsf, источник в (0, -10) t_obj. sfin() выводим на экран параметры заголовка файла t_obj d_array=array(t_obj) сохраняем t_obj как вектор eicon_tmp. put('n 1', N 1) заполняем заголовок eicom. rsf eicon_tmp. put('n 2', N 2) eicon_tmp. put('d 1', D 1) eicon_tmp. put('d 2', D 2) eicon_tmp. put('o 1', O 1) eicon_tmp. put('o 2', O 2) eicon_tmp. write(d_array) записываем d_array в eicon. rsf eicon_tmp. close() «закрываем» файл eicon. rsf для дальнейших действий e=rsf. sfcontour(transp='n', screenratio='1', plotcol='12', title='0')[t_obj] рисуем фронты из решения урния эйконала e. show() выводим на экран rays=rsf. rays 2(dt='0. 01', nt='1200', nr='101', a 0='0', zshot='0', yshot='-10')["tmp. rsf"] считаем лучи для скоростной модели tmp. rsf, если источник в (0, -10) rays 2=rsf. sfgraph(yreverse='y', screenratio='1', plotcol='0')[rays] рисуем положение лучей rays 2. show() выводим на экран a=rsf. Overlay(v, rays 2, e) накладываем поверх друг-друга скоростную модель, лучи и фронты a. show() выводим все на экран
e=rsf. sfcontour(transp='n', screenratio='1', plotcol='12', title='0')[t_obj] рисуем фронты из решения ур-ния эйконала e. show() выводим на экран rays=rsf. rays 2(dt='0. 01', nt='1200', nr='101', a 0='0', zshot='0', yshot='-10')["tmp. rsf"] считаем лучи для скоростной модели tmp. rsf, если источник в (0, -10) rays 2=rsf. sfgraph(yreverse='y', screenratio='1', plotcol='0')[rays] рисуем положение лучей rays 2. show() выводим на экран
a=rsf. Overlay(v, rays 2, e) накладываем поверх друг-друга скоростную модель, лучи и фронты a. show() выводим все на экран
fronts=[] создаем пустой массив for snap in range(400): цикл tsnap = 1. 0+snap*0. 03 время в секундах front 1=rsf. sfcontour(nc='1', c 0=tsnap, screenratio='1', plotcol='1', plotfat='5')["eicon. rsf"] рисуем один фронт в момент времени tsnap fronts. append(front 1) записываем front 1 в конец массива fronts b=rsf. Vppen(fronts, 'vpstyle=n') рисуем в виде «фильма» b. show() выводим на экран b. export(‘fronts. gif’) конвертируем в gif