using SeismicWaves
# numerics
nt = 1500
dt = 0.0012
dh = 8.0
t = collect(Float64, range(0.0; step=dt, length=nt)) ## time vector
# create a velocity model (gradient from top to bottom)
nx = 211
nz = 120
velmod = zeros(nx, nz)
for i in 1:nx
for j in 1:nz
velmod[i, j] = 2000.0 + 12.0 * (j - 1)
end
end
matprop = VpAcousticCDMaterialProperties(velmod)
# shots definition
nshots = 6
shots = Vector{ScalarShot{Float64}}()
# sources x-position (in grid points) (different for every shot)
ixsrc = round.(Int, LinRange(32, nx - 31, nshots))
for i in 1:nshots
# sources definition
nsrc = 1
possrcs = zeros(1, 2) ## 1 source, 2 dimensions
possrcs[:, 1] .= (ixsrc[i] - 1) * dh ## x-positions in meters
possrcs[:, 2] .= 2 * dh ## y-positions in meters
# source time functions
srcstf = zeros(nt, nsrc)
for s in 1:nsrc
srcstf[:, s] .= 1000.0 .* rickerstf.(t, 1.20 / 12.0, 12.0)
end
srcs = ScalarSources(possrcs, srcstf, 12.0)
# receivers definition
nrecs = 20
# receivers x-positions (in grid points) (same for every shot)
ixrec = round.(Int, LinRange(30, nx - 29, nrecs))
posrecs = zeros(nrecs, 2) ## 20 receivers, 2 dimensions
posrecs[:, 1] .= (ixrec .- 1) .* dh ## x-positions in meters
posrecs[:, 2] .= 2 * dh ## y-positions in meters
recs = ScalarReceivers(posrecs, nt)
# add pair as shot
push!(shots, ScalarShot(; srcs=srcs, recs=recs)) ## srcs => recs)
end
# Input parameters for acoustic simulation
snapevery = 100
boundcond = CPMLBoundaryConditionParameters(; halo=20, rcoef=0.0001, freeboundtop=true)
params = InputParametersAcoustic(nt, dt, (nx, nz), (dh, dh), boundcond)
# Compute the seismograms
runparams = RunParameters(parall=:threads,snapevery=snapevery)
snapshots = swforward!(
params,
matprop,
shots;
runparams=runparams
)
6-element Vector{Dict{Int64, Dict{String, <:SeismicWaves.AbstractField{Float64}}}}:
Dict(200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.0008824207718527565 … -6.077836915676642e-38 0.0; … ; 0.0 -2.911114892700982e-157 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])), 1100 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.00044749271767252543 … -6.084272925019345e-5 0.0; … ; 0.0 5.671681219065803e-6 … -0.00021792682138966786 0.0; 0.0 0.0 … 0.0 0.0])), 1000 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 1.8528187474108396e-6 … -3.305219243201502e-5 0.0; … ; 0.0 8.804321189479274e-6 … 0.0003569773135395156 0.0; 0.0 0.0 … 0.0 0.0])), 700 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.0028336397151790134 … -0.00011280868282694933 0.0; … ; 0.0 -2.138160161267033e-5 … 0.0007299410568311321 0.0; 0.0 0.0 … 0.0 0.0])), 300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 1.789353273381702e-5 … -2.2420855490684763e-6 0.0; … ; 0.0 -7.225139785415074e-81 … -2.3091319227317173e-135 0.0; 0.0 0.0 … 0.0 0.0])), 1200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.00045324614155693385 … -2.425514379175672e-5 0.0; … ; 0.0 4.763979619855671e-5 … -9.739573793341426e-5 0.0; 0.0 0.0 … 0.0 0.0])), 800 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -9.513160504008343e-5 … -0.00018129795081319198 0.0; … ; 0.0 -0.007144702261283479 … 0.00014007973276165513 0.0; 0.0 0.0 … 0.0 0.0])), 500 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -5.538749504746482e-6 … 0.0007221587148290577 0.0; … ; 0.0 -8.547276774864053e-15 … -1.4157307445658457e-9 0.0; 0.0 0.0 … 0.0 0.0])), 900 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -4.322255121608741e-6 … 0.0006936901241992097 0.0; … ; 0.0 -1.3197767432601548e-6 … -0.00011336982298160624 0.0; 0.0 0.0 … 0.0 0.0])), 1300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 3.6057869823670468e-6 … -1.8279784033997402e-5 0.0; … ; 0.0 2.574223182676145e-5 … -2.6369935002561738e-5 0.0; 0.0 0.0 … 0.0 0.0]))…)
Dict(200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -5.932517749545567e-7 … -4.4548067632076527e-64 0.0; … ; 0.0 -2.872904184904844e-100 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])), 1100 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 5.857635165683706e-5 … -8.192826518678114e-5 0.0; … ; 0.0 3.7583982987404168e-6 … -0.00017788794767037918 0.0; 0.0 0.0 … 0.0 0.0])), 1000 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.00013277774845174445 … -0.0001391455008901603 0.0; … ; 0.0 6.211552198625943e-6 … -0.0011257117063188337 0.0; 0.0 0.0 … 0.0 0.0])), 700 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.007107378151728605 … -3.766965145692696e-5 0.0; … ; 0.0 -0.001625243701895036 … 0.000425500258377502 0.0; 0.0 0.0 … 0.0 0.0])), 300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.0006453581539290609 … -1.2768212998126427e-11 0.0; … ; 0.0 -3.61530285228931e-46 … -4.7887152314707104e-83 0.0; 0.0 0.0 … 0.0 0.0])), 1200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.000592171950357331 … -3.6226615787300405e-5 0.0; … ; 0.0 -9.473388287659046e-5 … -7.309124618087515e-5 0.0; 0.0 0.0 … 0.0 0.0])), 800 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -3.647913299144147e-5 … -0.00015121152645378633 0.0; … ; 0.0 0.002002899736207056 … -6.089388113896651e-6 0.0; 0.0 0.0 … 0.0 0.0])), 500 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -8.866623464452951e-7 … 0.000909515458147968 0.0; … ; 0.0 -0.0002519718650135191 … -0.004429495411236907 0.0; 0.0 0.0 … 0.0 0.0])), 900 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -9.614580126521063e-7 … 0.0006335018135391376 0.0; … ; 0.0 1.537521352363752e-5 … -0.00016370177128534146 0.0; 0.0 0.0 … 0.0 0.0])), 1300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 2.624091216106079e-6 … -8.136813864674782e-6 0.0; … ; 0.0 -0.00011362041478893608 … -1.812815243485625e-5 0.0; 0.0 0.0 … 0.0 0.0]))…)
Dict(200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -7.192497848641216e-25 … 0.0 0.0; … ; 0.0 -1.7976740339947922e-57 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])), 1100 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -4.384375252287879e-6 … -0.00010385255233719259 0.0; … ; 0.0 2.6816198924297913e-6 … -0.00014048739342557338 0.0; 0.0 0.0 … 0.0 0.0])), 1000 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.00010847769326011517 … 2.128764835963002e-5 0.0; … ; 0.0 3.3547994859803765e-6 … -0.00040985999906148046 0.0; 0.0 0.0 … 0.0 0.0])), 700 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.002823186173240022 … 5.43164087200029e-5 0.0; … ; 0.0 0.005594713939332966 … 0.0001952689356287215 0.0; 0.0 0.0 … 0.0 0.0])), 300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -3.9316391035756095e-6 … -1.09795856373371e-24 0.0; … ; 0.0 -7.287212433327641e-21 … -1.0332059382558158e-48 0.0; 0.0 0.0 … 0.0 0.0])), 1200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.0003426077045316665 … -5.075328174914417e-5 0.0; … ; 0.0 -0.0003601195872811236 … -5.630821016170948e-5 0.0; 0.0 0.0 … 0.0 0.0])), 800 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -2.126055603851667e-5 … -0.00024726706865919396 0.0; … ; 0.0 -0.00012091249640557331 … -0.00010123628679219525 0.0; 0.0 0.0 … 0.0 0.0])), 500 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 1.263613617942429e-5 … 0.001854587116887208 0.0; … ; 0.0 -0.0006086396891299392 … 0.05866044121267509 0.0; 0.0 0.0 … 0.0 0.0])), 900 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -2.6249449302636744e-6 … -1.6109532406700823e-5 0.0; … ; 0.0 2.2488202059887735e-5 … -0.0001790311056814307 0.0; 0.0 0.0 … 0.0 0.0])), 1300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 6.445850463020045e-6 … -1.9478430101783015e-5 0.0; … ; 0.0 2.6051289258516673e-7 … -1.2305915204510399e-5 0.0; 0.0 0.0 … 0.0 0.0]))…)
Dict(200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -1.2042096271624082e-57 … 0.0 0.0; … ; 0.0 -1.1433698211561869e-24 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])), 1100 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 2.1820492693827987e-6 … -0.00012891363554498126 0.0; … ; 0.0 6.05061758490187e-6 … -0.00011240411802567794 0.0; 0.0 0.0 … 0.0 0.0])), 1000 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 5.365190562705885e-5 … -0.00035287333550960997 0.0; … ; 0.0 1.0410757132258226e-5 … 4.425240630815004e-7 0.0; 0.0 0.0 … 0.0 0.0])), 700 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.004370956929070871 … 0.000177148466348923 0.0; … ; 0.0 -0.00350886765142476 … 4.290016708464205e-5 0.0; 0.0 0.0 … 0.0 0.0])), 300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -4.473516406653087e-21 … -7.358582116835009e-49 0.0; … ; 0.0 -6.83302139655541e-6 … -1.5303155994828094e-24 0.0; 0.0 0.0 … 0.0 0.0])), 1200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.0003196447388747044 … -6.672426302317719e-5 0.0; … ; 0.0 0.00037371447554913494 … -4.164818820080105e-5 0.0; 0.0 0.0 … 0.0 0.0])), 800 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.00010779974985348448 … 0.0005219809016063488 0.0; … ; 0.0 -1.4753460955550403e-5 … -0.00013197978731249962 0.0; 0.0 0.0 … 0.0 0.0])), 500 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.00037676102229070393 … 0.042912936907561094 0.0; … ; 0.0 1.1393186449468585e-5 … 0.002459028338519416 0.0; 0.0 0.0 … 0.0 0.0])), 900 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.00026721249978519686 … -0.000110265783985359 0.0; … ; 0.0 5.214048252007772e-6 … 4.380673714167096e-5 0.0; 0.0 0.0 … 0.0 0.0])), 1300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 5.942511875217753e-7 … -2.2461974032625173e-5 0.0; … ; 0.0 6.129425817001505e-6 … -8.364532338786963e-6 0.0; 0.0 0.0 … 0.0 0.0]))…)
Dict(200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -1.999561448567128e-100 … 0.0 0.0; … ; 0.0 -1.0362041254754317e-6 … -6.145107173884744e-64 0.0; 0.0 0.0 … 0.0 0.0])), 1100 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 2.778244379683042e-6 … -0.0001464020204893103 0.0; … ; 0.0 2.9390461225082833e-5 … -9.356105405973602e-5 0.0; 0.0 0.0 … 0.0 0.0])), 1000 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 1.6897014102667185e-6 … -0.0009149868132030793 0.0; … ; 0.0 1.8559454400203916e-5 … -0.00018142263993732355 0.0; 0.0 0.0 … 0.0 0.0])), 700 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.0011932079400719295 … -0.00019244207238530833 0.0; … ; 0.0 0.0077008556935704965 … -6.145676706761962e-5 0.0; 0.0 0.0 … 0.0 0.0])), 300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -2.3371722514821782e-46 … -3.4356170286893206e-83 0.0; … ; 0.0 -0.0011857235260010373 … -1.6756525851939065e-11 0.0; 0.0 0.0 … 0.0 0.0])), 1200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -8.038406724155317e-5 … -8.03357258029239e-5 0.0; … ; 0.0 0.0006150355363992744 … -3.354645661843686e-5 0.0; 0.0 0.0 … 0.0 0.0])), 800 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 0.0015846667605107644 … 3.91109539557365e-5 0.0; … ; 0.0 -2.6053937508508602e-5 … -0.00019211386544898477 0.0; 0.0 0.0 … 0.0 0.0])), 500 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.0001479535511092435 … -0.0031289909761545625 0.0; … ; 0.0 -7.817398198362957e-6 … 0.0011409875317247966 0.0; 0.0 0.0 … 0.0 0.0])), 900 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 2.148335306523324e-5 … -9.772515650724636e-5 0.0; … ; 0.0 8.781927474762942e-7 … 0.0005576253661804058 0.0; 0.0 0.0 … 0.0 0.0])), 1300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -9.948415340454327e-5 … -2.7674892119800955e-5 0.0; … ; 0.0 1.788983520937696e-6 … -5.913547760596794e-6 0.0; 0.0 0.0 … 0.0 0.0]))…)
Dict(200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -2.0826225370223883e-157 … 0.0 0.0; … ; 0.0 -0.0015906463506714227 … -7.940402408824096e-38 0.0; 0.0 0.0 … 0.0 0.0])), 1100 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 3.796228687666702e-6 … -0.00021571123078370253 0.0; … ; 0.0 -1.320166627183546e-6 … -7.825086050190789e-5 0.0; 0.0 0.0 … 0.0 0.0])), 1000 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 4.801337899193394e-6 … 0.00030127335696749345 0.0; … ; 0.0 1.3949084539174771e-6 … -0.00016653302903892042 0.0; 0.0 0.0 … 0.0 0.0])), 700 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -8.814326699931269e-6 … 0.0006051527962659532 0.0; … ; 0.0 0.002640272218954313 … -0.00013865725958654986 0.0; 0.0 0.0 … 0.0 0.0])), 300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -4.848427097122628e-81 … -1.673651174386671e-135 0.0; … ; 0.0 2.5266619426922252e-5 … -2.5933102820201527e-6 0.0; 0.0 0.0 … 0.0 0.0])), 1200 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 3.9017878586994454e-5 … -9.866675862226415e-5 0.0; … ; 0.0 0.0004932907330106057 … -2.667032568467987e-5 0.0; 0.0 0.0 … 0.0 0.0])), 800 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -0.005278986499747693 … 0.0001587614489349205 0.0; … ; 0.0 -7.308933305337429e-5 … -0.0002152125563270643 0.0; 0.0 0.0 … 0.0 0.0])), 500 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 -5.173872345260021e-15 … -9.735032819749739e-10 0.0; … ; 0.0 -1.2573251146718065e-5 … 0.0008623713445864092 0.0; 0.0 0.0 … 0.0 0.0])), 900 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 4.3252435387643485e-5 … -5.5301586844289456e-5 0.0; … ; 0.0 -2.840276406759465e-6 … 0.0006869739899051554 0.0; 0.0 0.0 … 0.0 0.0])), 1300 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("pcur" => SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}([0.0 0.0 … 0.0 0.0; 0.0 2.0832881105105242e-5 … -3.5004034531779724e-5 0.0; … ; 0.0 -5.030025083101855e-7 … -1.1254474267930108e-6 0.0; 0.0 0.0 … 0.0 0.0]))…)
# time stuff
nt = 3000 #1500
dt = 0.0008
t = collect(Float64, range(0.0; step=dt, length=nt)) # seconds
# create a velocity model
nx = 380 ## 211
nz = 270 ## 120
dh = 4.5 ## meters
vp = zeros(nx, nz)
vp[nx÷2+10:end, :] .= 3100.0
for i in 1:nx
for j in 1:nz
vp[i, j] = 2000.0 + dh * (j - 1)
end
end
vs = vp ./ sqrt(3)
ρ = 2100.0 * ones(nx, nz)
μ = vs .^ 2 .* ρ ## μ = Vs^2⋅ρ
λ = (vp .^ 2 .* ρ) .- (2 .* μ) ## λ = vp^2 · ρ - 2μ
matprop = ElasticIsoMaterialProperties(; λ=λ, μ=μ, ρ=ρ)
# shots definition
nshots = 1
shots = Vector{MomentTensorShot{Float64, 2, MomentTensor2D{Float64}}}()
for i in 1:nshots
# sources definition
nsrc = 1
# sources x-position (in grid points) (different for every shot)
if nsrc == 1
ixsrc = [nx / 2]
else
ixsrc = round.(Int, LinRange(30, nx - 31, nsrc))
end
possrcs = zeros(nsrc, 2) ## 1 source, 2 dimensions
for s in 1:nsrc
possrcs[s, 1] = (ixsrc[i] - 1) * dh .+ 0.124 ## x-positions in meters
possrcs[s, 2] = (nz / 2) * dh .+ 0.124 ## y-positions in meters
end
# source time functions
f0 = 12.0
t0 = 1.20 / f0
srcstf = zeros(nt, nsrc)
Mxx = zeros(nsrc)
Mzz = zeros(nsrc)
Mxz = zeros(nsrc)
for s in 1:nsrc
srcstf[:, s] .= rickerstf.(t, t0, f0)
Mxx[s] = 5e10
Mzz[s] = 5e10
Mxz[s] = 0.89e10
end
srcs = MomentTensorSources(
possrcs, srcstf,
[MomentTensor2D(; Mxx=Mxx[s], Mzz=Mzz[s], Mxz=Mxz[s]) for s in 1:nsrc],
f0
)
# receivers definition
nrecs = 10
# receivers x-positions (in grid points) (same for every shot)
ixrec = round.(Int, LinRange(40, nx - 40, nrecs))
posrecs = zeros(nrecs, 2) ## 20 receivers, 2 dimensions
posrecs[:, 1] .= (ixrec .- 1) .* dh .- 0.324 ## x-positions in meters
posrecs[:, 2] .= 3 * dh ## y-positions in meters
ndim = 2
recs = VectorReceivers(posrecs, nt, ndim)
# add pair as shot
push!(shots, MomentTensorShot(; srcs=srcs, recs=recs)) # srcs => recs)
end
# Input parameters for elastic simulation
snapevery = 5
infoevery = 100
freetop = true
halo = 20
rcoef = 0.0001
boundcond = CPMLBoundaryConditionParameters(; halo=halo, rcoef=rcoef, freeboundtop=freetop)
params = InputParametersElastic(nt, dt, (nx, nz), (dh, dh), boundcond)
# Compute the seismograms
runparams = RunParameters(parall=:threads,infoevery=infoevery,snapevery=snapevery)
snapshots = swforward!(
params,
matprop,
shots;
runparams=runparams
)
1-element Vector{Dict{Int64, Dict{String, <:SeismicWaves.AbstractField{Float64}}}}:
Dict(2050 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[-5.446625340027628e-18 0.0010334776522954187 … 0.0010865299803666894 0.0016738612588438433; -6.1264248711278115e-18 0.00106706218677227 … 0.0012782876591674486 5.2272917134019734e-5; … ; 6.008486384565883e-19 -0.0015964286684123363 … 0.0022925995953519615 0.00335254515620442; -6.633988724477177e-19 -0.0015466097856696426 … 0.0023772359202859582 0.0009287797451330734], [0.002594926105224257 0.0018443841526979237 … -0.003483472979668877 -0.0018009427426331978; 0.0012988097560404624 0.000979737708424162 … -0.0023537833490348305 -0.0024490218026446114; … ; 0.0015516147364126082 0.0010499611800879902 … -0.0005578520459084861 -0.000682798615583967; 0.0035356966208298433 0.0023574386557281006 … -0.001645635604710705 0.0007436619391715278]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; -5.807790426532093e-10 -217382.89376446334 … 306564.1578513306 0.0; … ; -2.1350392294170327e-9 -335107.8750579038 … 502029.7981653699 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; -5.867007719731802e-11 -640811.9072608278 … -573198.2820284675 0.0; … ; -6.442182746288014e-10 -991607.3238906696 … -390579.2604334067 0.0; 0.0 0.0 … 0.0 0.0], [-282523.71550946997 -187829.75197774908 … 392347.5386010079 125211.73171301345; 179493.3622331905 113207.8968740759 … 162276.4696945033 -138527.9535669194; … ; -275067.1092846837 -172377.3305855371 … 43957.40009502615 312211.8740373302; 437960.4059088067 294645.34038175776 … -210590.2319038774 50889.614632276775]])), 35 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0]])), 425 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[7.269446849158516e-57 -6.467252113571921e-39 … 8.850116708523362e-9 -1.0906385223823709e-8; 5.864561436692962e-56 4.659671780756362e-39 … 1.0113239561574352e-8 -1.8444412632540083e-9; … ; -7.559185290158448e-57 5.498729284084472e-39 … -1.8333623029699155e-8 8.123740421534012e-9; -6.414148725520511e-58 1.7896711970748549e-40 … 1.7191480654450556e-8 -1.1214717111718835e-10], [2.699129211635307e-40 -2.248021687848323e-39 … 8.63838002531372e-9 1.1158012585381472e-8; -6.377066407351727e-39 1.0038336709156114e-38 … -1.3399743013204888e-8 -1.1819803847990064e-8; … ; -1.3075897056938287e-40 -6.187859470544686e-39 … 8.336365489674346e-9 1.671173986954947e-8; 1.1228529995234179e-40 -8.144594452458243e-42 … 6.020813119538679e-10 -3.907271381386741e-10]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; -1.723076992510261e-47 -1.9482162623915333e-29 … 130.8276131134531 0.0; … ; 1.7696381568100056e-47 -7.768055730166235e-30 … 130.06816589953218 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 1.2959605825012038e-46 -2.060418297905262e-29 … 70.36000914164741 0.0; … ; 3.9733705912321995e-47 -8.883590021808308e-30 … 68.27205738757505 0.0; 0.0 0.0 … 0.0 0.0], [-1.901898458960785e-30 -1.1726535426540343e-29 … 6.397446762092206 13.949439080759456; -1.1757103088220287e-29 6.223103454446924e-29 … -39.80461975682646 -58.869335330696636; … ; 2.8268959640594895e-30 4.833700859464168e-30 … 18.579476725352507 25.720087689584492; -8.317185716115147e-31 4.102179919211857e-30 … -62.44845945479761 -88.8522562521443]])), 1175 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[-1.2693806559181593e-20 -0.0001238118229702116 … 0.003456017713440457 0.0038646541473206647; -3.868298313953212e-19 -0.00011030957860673768 … 0.0036043115198326264 0.003364235409872275; … ; -2.5640736950127227e-18 -0.0002522901585734583 … -0.002778197424200823 -0.0026045755434345053; -1.286958842995524e-18 -0.00028254297424147964 … -0.0026671584670824055 -0.0029670641343066432], [0.001288801097572093 0.0012209568985143303 … -0.00464675433857752 -0.003912154848381559; 0.001277663203884944 0.0012102729915739237 … -0.004524071935353545 -0.004464614856634166; … ; -0.0024907510172260533 -0.002348447665847583 … -0.0034498899207672734 -0.003405310720137871; -0.002484430127294554 -0.0023327649845737747 … -0.0035385452276869775 -0.0030016556040951977]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; -1.667793174620065e-9 -6233.94711039192 … -113999.47400449378 0.0; … ; 1.5172131565132062e-9 8427.321409861659 … -102506.23691606303 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; -6.45879682886967e-10 -138010.25070437352 … -512541.9523026549 0.0; … ; 2.8086615713703804e-10 267381.102732867 … -397214.9736913936 0.0; 0.0 0.0 … 0.0 0.0], [-137770.0574584666 -139058.1272174632 … 386273.63007464353 280893.4271898242; -148761.8224375113 -147132.01324899244 … 89725.10626915851 179734.90073957204; … ; -264781.03362170357 -254090.72390480104 … -80388.19101326322 -150453.05797965472; -258316.56850364158 -248604.6457199522 … -302556.69213637686 -224882.64675939354]])), 60 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0]])), 220 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[8.589129610716963e-162 1.6903982358289998e-143 … 6.114972399579393e-92 -4.452191035986163e-93; -9.582657249975005e-161 -1.7857853239013674e-142 … -1.9385261957975694e-91 2.0865273770416256e-92; … ; 6.560507746802711e-162 1.8225811965325228e-143 … 9.183299027370928e-92 -6.174610056610269e-93; 2.699511486254682e-162 -8.911526871437298e-145 … -1.7976629478443212e-92 1.04326172868373e-93], [-2.4124208667427075e-145 6.076329855586587e-144 … -1.234514835466626e-92 4.767751236569494e-93; 1.7738955677596143e-143 -2.424586629143644e-142 … 1.0664734869317337e-91 -5.828780533681512e-92; … ; 9.583931236792085e-145 -2.341305868681443e-143 … 4.880267430895232e-92 -1.6754760328314658e-92; 1.1571681051207163e-146 3.200134453369951e-145 … -3.765514440982462e-93 1.1324874922255008e-93]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; 3.475327408302538e-152 7.19801489242319e-134 … 8.972168583062485e-82 0.0; … ; -3.689373171070909e-152 -1.0479194269293465e-135 … 2.2316921045223864e-82 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 1.1584424694341789e-152 8.2253689292915445e-134 … 6.717345606930748e-82 0.0; … ; -5.6555507004428125e-152 -1.6603469098980022e-135 … 1.6383908777510823e-82 0.0; 0.0 0.0 … 0.0 0.0], [5.154848914039796e-136 4.1263787585705835e-134 … -2.412528858342954e-82 7.86113910937394e-83; 3.686450441903753e-134 -7.146586085438289e-133 … 1.0093309385577839e-81 -4.2470598314596575e-82; … ; -1.2930611145679098e-136 4.898434611792732e-134 … -3.3979211712336254e-82 1.0675736487999549e-82; -4.592559702649699e-136 6.943928665370761e-136 … 6.089747783560945e-83 -1.651481095805507e-83]])), 1595 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[-1.1321724486799312e-18 0.00033346013085307387 … 0.0005380429660239253 0.00019437214862907473; -1.459651485601956e-18 0.00033024251365590255 … 0.0005327782925340377 0.0006110129763111236; … ; 9.994456429355453e-19 -0.00042065911729641486 … -0.0004113630524592251 -0.000517376011027244; 1.1355152565150188e-18 -0.0004146416667589345 … -0.0004211268140450515 -1.720368396676086e-5], [-0.0013557822715711848 -0.0013315999749177008 … 0.0002260746964740082 -0.00016336890148428853; -0.0015229631076671803 -0.0014976938930346714 … 8.782199592591804e-5 0.00013078465434712352; … ; -0.0009203725033342387 -0.0009233894233039708 … 0.0003174048190310038 0.00036498995107510276; -0.0006105630525883002 -0.0006253289107948642 … 0.0004914652474348314 2.0160807085569604e-5]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; -9.894866536479659e-11 -15010.91398748335 … -40381.00512377151 0.0; … ; -7.402513814693727e-10 -22371.074072041367 … -24443.094924281148 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 1.4691436090562558e-10 33200.40983927409 … 193861.72593887642 0.0; … ; -3.7042981942517426e-10 -13969.525318666436 … 261619.49154797668 0.0; 0.0 0.0 … 0.0 0.0], [130218.49114277851 118317.11733805719 … -125248.94579871932 -69873.64565619265; 226330.99354855053 210456.67609832867 … -26209.79162596175 -10878.387963673757; … ; -163009.5782973578 -147439.25667665698 … 55618.213447088034 35041.63870675736; -72121.36772339871 -61422.42934874311 … 177567.3977983494 108431.19378141963]])), 1855 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[-3.894262035529252e-18 -0.0012800648845578654 … 0.0012454124615770956 0.00039405975665328185; -4.317034694346074e-18 -0.0013971484241844996 … 0.0012019101881140248 0.0019160058996584729; … ; -4.740587685150152e-20 0.002182865900052509 … -0.00032452915114350087 -0.00028923784724921417; -4.31413456682784e-19 0.0020379319952122704 … -0.0003321396144638592 -0.001074547079233674], [-0.005071608342821278 -0.004424290407362314 … 0.0012200074528891304 -0.000277911113959671; -0.003493935583232014 -0.003088312724851273 … 0.000482016128648423 0.0005505873643147248; … ; -0.003471986662153756 -0.002966764194196903 … -0.0020407868126247645 -0.001953253465983329; -0.005749820155232021 -0.004907495617565043 … -0.002002591085385045 -0.0011380046065738799]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; -1.6639281024971893e-9 114846.15894174948 … -293647.00315178034 0.0; … ; -8.986216238165603e-10 174404.24560271684 … -91215.79915308746 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; -5.546427008323962e-10 719166.0718739248 … 272237.4016423374 0.0; … ; 1.527964510878939e-11 897165.0843451511 … 57036.23089716314 0.0; 0.0 0.0 … 0.0 0.0], [360751.6947770263 316031.6570922278 … -139070.81044522577 9858.985724745748; -28071.50908083454 -8691.626060291284 … 9477.4721019043 160194.80397493858; … ; 243504.1594985864 206491.65121291846 … -1434.8282291919468 -61987.687503782145; -354998.1043369286 -303282.75385409634 … 32580.811074341746 -13951.852313296853]])), 1010 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[-1.0810942750939625e-18 7.527605351177131e-5 … -2.9274626293508822e-5 -4.807466591179373e-7; 6.495082448894916e-20 7.775988062921445e-5 … -3.092639940677149e-5 -2.9886446883558548e-5; … ; -1.7351778290562332e-18 -8.671433960032696e-5 … -5.145140618974587e-5 -4.6927435866587546e-5; -1.7430880268911143e-18 -9.212323515570814e-5 … -4.8911459777698214e-5 -1.0998298998903423e-5], [0.0012246543109240878 0.001209725215723121 … -3.101964098838169e-5 -1.7750343715324608e-6; 0.0011738126858876713 0.0011601556936945065 … -3.246889041016741e-5 -3.075101773101715e-5; … ; 0.0015575645494652706 0.001559354138788547 … 3.068699843336767e-5 2.8908527565853015e-5; 0.0015849682705424831 0.001582054706159525 … 2.6940093963161812e-5 -8.262464561776258e-6]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; 1.6700531351548956e-9 -8621.753054702247 … -1775.4450503974253 0.0; … ; -2.1717577928022273e-10 -14506.628904288547 … 2283.769768019144 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 6.916073154053833e-10 -18176.935080771997 … 1846.476049448184 0.0; … ; -7.239192642674088e-11 4640.096626203184 … -2360.771452892047 0.0; 0.0 0.0 … 0.0 0.0], [-8329.504160106375 -12866.339429657519 … -1270.698377596739 -262.88561099548025; -4361.96573881381 -11959.958030962043 … -343.7510093046842 529.1703310790249; … ; -13282.114279660316 -4881.263858113453 … -122.3625337874908 1077.5069699597796; -8680.631206214117 -3042.551090259279 … -1161.7684327176512 -6.7217656354506525]])), 1900 => Dict{String, Union{SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}, SeismicWaves.ScalarVariableField{Float64, 2, Matrix{Float64}}}}("ucur" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[-4.749101630973448e-18 0.0014640644023281078 … -0.008060063888426188 -0.0013724556962253966; -4.264033336234263e-18 0.001548099496873925 … -0.008088045256557772 -0.010462997939315904; … ; 6.116374910710462e-19 -0.0022682846936549882 … 0.0040808057368486965 0.0043738431159783845; 2.179251254153547e-19 -0.0021440935340425902 … 0.003972567110140448 0.001693705379050486], [0.0036882904479445477 0.003009651308999593 … -0.008340985905279453 0.0006760118501363279; 0.0020664046753401024 0.0017094908737181023 … -0.005863065234417978 -0.005923735421277247; … ; 0.00239452066100157 0.0018708792654660907 … -0.0007370809426962573 -0.00071981842603372; 0.0047887168712776275 0.0038012084157399606 … -0.001088065969525437 0.0014914124499559134]]), "σ" => SeismicWaves.MultiVariableField{Float64, 2, Matrix{Float64}}([[0.0 0.0 … 0.0 0.0; 1.3537572478938026e-9 -162653.56284471048 … 905371.7366680673 0.0; … ; -4.737121078760193e-10 -234144.6491241679 … 177972.41856060844 0.0; 0.0 0.0 … 0.0 0.0], [0.0 0.0 … 0.0 0.0; 4.5125241596460067e-10 -674061.6142538221 … -951634.3925760663 0.0; … ; -2.9282697297909135e-10 -969273.9274837667 … 9598.792872148595 0.0; 0.0 0.0 … 0.0 0.0], [-253836.49837279005 -204294.54769015912 … 537180.9410758798 20556.244237439318; 224747.40336987065 177012.54449141 … -21619.736940742194 -498978.20356332423; … ; -344696.87901277485 -279995.3159235575 … 20644.774351859254 111006.27478014694; 357059.5681594397 285135.854248309 … 57999.90011571107 83852.67681718497]]))…)