# Add packages needed
# PyPlot is already installed in the environment
# using Pkg
# Pkg.add(["Distributed", "SlimOptim", "JUDI", "SetIntersectionProjection"])
FWI Example
We will peform FWI using the following steps: 1. Prepare models 2. Setup Constraints with SetIntersectionProjection 3. Build a small local compute cluster (2 workers) * Take care of some HPC details related to thread affinity 4. Create source and receivers geometries 5. Build F
, the JUDI modeling operator 6. Use F
to create data for both models 7. Visualize data 8. Assess if data is cycle skipped at the farthest offsets 9. Build the objective
function 10. Perform the FWI using minConf_PQN
from JUDI 11. Visualize velocity models and objective function 12. Visualize data match 13. Remove workers
Note on runtime
Warning: this notebook takes more than 1 hour to run for 16 shots with two workers on an Intel 8168.
lscpu
CPU information: Intel(R) Xeon(R) Platinum 8168 CPU @ 2.70GHz
using Distributed, JUDI, SlimOptim, LinearAlgebra, PyPlot, SetIntersectionProjection, Printf
Prepare models
= (251, 251) # nx, nz
n = (15., 15.) # hx, hz
d = (0., 0.); # ox, oz o
# Squared slowness
= 1.5f0^(-2) * ones(Float32, n)
m 101:150, 101:150] .= 1.7f0^(-2)
m[= 1/1.5f0^2 * ones(Float32, n); m0
= Model(n,d,o,m)
model = Model(n,d,o,m0); model0
Visualize
figure(figsize=(8,9))
= extrema(m)
vmin,vmax = -.1,.1
dmin,dmax
subplot(3,1,1); imshow(m,aspect="auto",cmap="jet");
colorbar(); clim(vmin,vmax); title("True squared slowness (m)")
subplot(3,1,2); imshow(m0,aspect="auto",cmap="jet");
colorbar(); clim(vmin,vmax); title("Initial squared slowness (m0)");
subplot(3,1,3); imshow(m.-m0,aspect="auto",cmap="seismic");
colorbar(); clim(dmin,dmax); title("Difference (m-m0)");
tight_layout()
Setup Constraints with SetIntersectionProjection
=PARSDMM_options()
options=Float32
options.FL=default_PARSDMM_options(options,options.FL)
options= Vector{SetIntersectionProjection.set_definitions}()
constraint = Vector{SetIntersectionProjection.set_definitions}() constraint2
set_definitions[]
We setup two constaints: - Bounds that limit maximum and minimum velocity - TV, that limits variation and force a piece-wise constant structure
#bounds:
= 0 .* m .+ minimum(m).*.5
m_min = 0 .* m .+ maximum(m)
m_max = "bounds"
set_type = "identity"
TD_OP = ("matrix","")
app_mode = ([],false)
custom_TD_OP push!(constraint, set_definitions(set_type,TD_OP,vec(m_min),vec(m_max),app_mode,custom_TD_OP));
push!(constraint2, set_definitions(set_type,TD_OP,vec(m_min),vec(m_max),app_mode,custom_TD_OP));
#TV
= get_TD_operator(model0,"TV",options.FL)
(TV,dummy1,dummy2,dummy3) = 0.0
m_min = norm(TV*vec(m),1) * .5
m_max = "l1"
set_type = "TV"
TD_OP = ("matrix","")
app_mode = ([],false)
custom_TD_OP push!(constraint, set_definitions(set_type,TD_OP,m_min,m_max,app_mode,custom_TD_OP));
#set up constraints with bounds only, precompute some things and define projector
= setup_constraints(constraint2, model0,options.FL)
(P_sub2,TD_OP2,set_Prop2) = PARSDMM_precompute_distribute(TD_OP2,set_Prop2,model0,options)
(TD_OP2,AtA2,l2,y2) = deepcopy(options)
options2 = ones(length(TD_OP2))*10.0
options2.rho_ini
= x-> PARSDMM(x, AtA2, TD_OP2, set_Prop2, P_sub2, model0, options2)
proj_intersection2
# Projection function
function prj2(input)
= Float32.(input)
input = proj_intersection2(vec(input))
(x,dummy1,dummy2,dymmy3) return x
end
prj2 (generic function with 1 method)
#set up constraints with bounds and TV
= setup_constraints(constraint, model0,options.FL)
(P_sub,TD_OP,set_Prop) = PARSDMM_precompute_distribute(TD_OP,set_Prop,model0,options)
(TD_OP,AtA,l,y) = ones(length(TD_OP))*10.0
options.rho_ini
= x-> PARSDMM(x, AtA, TD_OP, set_Prop, P_sub, model0, options)
proj_intersection
# Projection function
function prj(input)
= Float32.(input)
input = proj_intersection(vec(input))
(x,dummy1,dummy2,dymmy3) return x
end
prj (generic function with 1 method)
Build a small local compute cluster
Setup OMP environment variables for the cluster
In the distributed compute case the workers that we add would be on different hardware, and we might add tens of workers in 2D and hundreds in 3D. Here we run on a single machine with only 2 workers, and so we need to be careful with details related to high performance computing. If we did not specify thread affinity, the two workers would compete for the same physical cores and the modeling would be incredibly slow.
We spin up the small 2-worker cluster by calling addprocs(2)
, and because we set the environment variable ENV["OMP_DISPLAY_ENV"] = "true"
we will see the OMP environment printed out on each worker. In that output (below) we can verify that half of the total threads (44/2 = 22) are assigned to each socket on this 2 socket system. You can obtain more details about the hardware with the shell command lscpu
.
We set four environment variables related to OpenMP: * OMP_DISPLAY_ENV
prints out the OpenMP environment on each worker * OMP_PROC_BIND
specifies that threads should be bound to physical cores * OMP_NUM_THREADS
specifies the number of threads per workers is 1/2 the number of physical cores * GOMP_CPU_AFFINITY
specifies which physical cores the threads run on for each worker
If you run the shell command top
during execution, you will see 3 julia processes: the main process and two workers. The two workers should generally have about 50% of the system, and load average
should tend towards the physical number of cores.
= Sys.CPU_THREADS
nthread = 2
nw
ENV["OMP_DISPLAY_ENV"] = "true"
ENV["OMP_PROC_BIND"] = "close"
ENV["OMP_NUM_THREADS"] = "$(div(nthread, nw))"
addprocs(nw)
@show workers()
for k in 1:nworkers()
= (k - 1) * div(nthread,nworkers())
place1 = (k + 0) * div(nthread,nworkers()) - 1
place2 @show place1, place2, div(nthread, nw)
@spawnat workers()[k] ENV["GOMP_CPU_AFFINITY"] = "$(place1)-$(place2)";
end
workers() = [2, 3]
(place1, place2, div(nthread, nw)) = (0, 1, 2)
(place1, place2, div(nthread, nw)) = (2, 3, 2)
@everywhere using Distributed, JUDI, LinearAlgebra
From worker 3:
From worker 3: OPENMP DISPLAY ENVIRONMENT BEGIN
From worker 3: _OPENMP = '201511'
From worker 3: OMP_DYNAMIC = 'FALSE'
From worker 3: OMP_NESTED = 'FALSE'
From worker 3: OMP_NUM_THREADS = '2'
From worker 3: OMP_SCHEDULE = 'DYNAMIC'
From worker 3: OMP_PROC_BIND = 'CLOSE'
From worker 3: OMP_PLACES = ''
From worker 3: OMP_STACKSIZE = '2097152'
From worker 3: OMP_WAIT_POLICY = 'PASSIVE'
From worker 3: OMP_THREAD_LIMIT = '4294967295'
From worker 3: OMP_MAX_ACTIVE_LEVELS = '1'
From worker 3: OMP_CANCELLATION = 'FALSE'
From worker 3: OMP_DEFAULT_DEVICE = '0'
From worker 3: OMP_MAX_TASK_PRIORITY = '0'
From worker 3: OMP_DISPLAY_AFFINITY = 'FALSE'
From worker 3: OMP_AFFINITY_FORMAT = 'level %L thread %i affinity %A'
From worker 3: OMP_ALLOCATOR = 'omp_default_mem_alloc'
From worker 3: OMP_TARGET_OFFLOAD = 'DEFAULT'
From worker 3: OPENMP DISPLAY ENVIRONMENT END
From worker 2:
From worker 2: OPENMP DISPLAY ENVIRONMENT BEGIN
From worker 2: _OPENMP = '201511'
From worker 2: OMP_DYNAMIC = 'FALSE'
From worker 2: OMP_NESTED = 'FALSE'
From worker 2: OMP_NUM_THREADS = '2'
From worker 2: OMP_SCHEDULE = 'DYNAMIC'
From worker 2: OMP_PROC_BIND = 'CLOSE'
From worker 2: OMP_PLACES = ''
From worker 2: OMP_STACKSIZE = '2097152'
From worker 2: OMP_WAIT_POLICY = 'PASSIVE'
From worker 2: OMP_THREAD_LIMIT = '4294967295'
From worker 2: OMP_MAX_ACTIVE_LEVELS = '1'
From worker 2: OMP_CANCELLATION = 'FALSE'
From worker 2: OMP_DEFAULT_DEVICE = '0'
From worker 2: OMP_MAX_TASK_PRIORITY = '0'
From worker 2: OMP_DISPLAY_AFFINITY = 'FALSE'
From worker 2: OMP_AFFINITY_FORMAT = 'level %L thread %i affinity %A'
From worker 2: OMP_ALLOCATOR = 'omp_default_mem_alloc'
From worker 2: OMP_TARGET_OFFLOAD = 'DEFAULT'
From worker 2: OPENMP DISPLAY ENVIRONMENT END
Create source and receivers geometries
We use 8 shot locations evenly distributed across the left of the model.
= 4000 # Recording time in ms
tn = 2f0 # Shot record sampling rate in ms
dt = 0.005 # Peak frquency in kHz f0
0.005
= 8
nsrc = convertToCell(d[1].*ones(Float32, nsrc))
xsrc = convertToCell(range(0f0, stop = 0f0, length = nsrc))
ysrc = convertToCell(range(0f0, (n[2] - 1)*d[2], length=nsrc))
zsrc = Geometry(xsrc, ysrc, zsrc; dt=dt, t=tn); src_geom
= 251
nrec = (n[1] - 2)*d[1] .* ones(Float32, nrec)
xrec = 0f0
yrec = range(0f0, (n[2] - 1)*d[2], length=nrec)
zrec = Geometry(xrec, yrec, zrec; dt=dt, t=tn, nsrc=nsrc); rec_geom
Visualize geometry
figure()
= extrema(m)
vmin,vmax = -.1,.1
dmin,dmax
imshow(m,aspect="auto",cmap="jet", extent=[0, 3750, 3750, 0]);
colorbar(); clim(vmin,vmax); title("True squared slowness (m)")
scatter(xsrc, zsrc, c="g", label="Sources")
scatter(xrec[1:4:end], zrec[1:4:end], c="c", label="Receiver")
legend()
PyObject <matplotlib.legend.Legend object at 0x170fa68b0>
Build F
, the JUDI modeling operator
# True model operator
= judiModeling(model, src_geom, rec_geom)
F
# Intial model operator
= judiModeling(model0, src_geom, rec_geom); F0
# Source function
= judiVector(src_geom, ricker_wavelet(tn, dt, f0)); fsrc
Use F
to create the data in both models
= @elapsed begin
t1 = F*fsrc;
dobs end
@info @sprintf("Time in true model; %.2f seconds\n", t1);
= @elapsed begin
t2 = F0*fsrc;
d0 end
@info @sprintf("Time in init model; %.2f seconds\n", t2);
From worker 3:
From worker 3: OPENMP DISPLAY ENVIRONMENT BEGIN
From worker 3: _OPENMP = '201511'
From worker 3: OMP_DYNAMIC = 'FALSE'
From worker 3: OMP_NESTED = 'FALSE'
From worker 3: OMP_NUM_THREADS = '2'
From worker 3: OMP_SCHEDULE = 'DYNAMIC'
From worker 3: OMP_PROC_BIND = 'CLOSE'
From worker 3: OMP_PLACES = ''
From worker 3: OMP_STACKSIZE = '2097152'
From worker 3: OMP_WAIT_POLICY = 'PASSIVE'
From worker 3: OMP_THREAD_LIMIT = '4294967295'
From worker 3: OMP_MAX_ACTIVE_LEVELS = '2147483647'
From worker 3: OMP_CANCELLATION = 'FALSE'
From worker 3: OMP_DEFAULT_DEVICE = '0'
From worker 3: OMP_MAX_TASK_PRIORITY = '0'
From worker 3: OMP_DISPLAY_AFFINITY = 'FALSE'
From worker 3: OMP_AFFINITY_FORMAT = 'level %L thread %i affinity %A'
From worker 3: OPENMP DISPLAY ENVIRONMENT END
From worker 2:
From worker 2: OPENMP DISPLAY ENVIRONMENT BEGIN
From worker 2: _OPENMP = '201511'
From worker 2: OMP_DYNAMIC = 'FALSE'
From worker 2: OMP_NESTED = 'FALSE'
From worker 2: OMP_NUM_THREADS = '2'
From worker 2: OMP_SCHEDULE = 'DYNAMIC'
From worker 2: OMP_PROC_BIND = 'CLOSE'
From worker 2: OMP_PLACES = ''
From worker 2: OMP_STACKSIZE = '2097152'
From worker 2: OMP_WAIT_POLICY = 'PASSIVE'
From worker 2: OMP_THREAD_LIMIT = '4294967295'
From worker 2: OMP_MAX_ACTIVE_LEVELS = '2147483647'
From worker 2: OMP_CANCELLATION = 'FALSE'
From worker 2: OMP_DEFAULT_DEVICE = '0'
From worker 2: OMP_MAX_TASK_PRIORITY = '0'
From worker 2: OMP_DISPLAY_AFFINITY = 'FALSE'
From worker 2: OMP_AFFINITY_FORMAT = 'level %L thread %i affinity %A'
From worker 2: OPENMP DISPLAY ENVIRONMENT END
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `forward` ran in 0.48 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.46 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.29 s
┌ Info: Time in true model; 27.31 seconds
└ @ Main In[20]:4
┌ Info: Time in init model; 10.21 seconds
└ @ Main In[20]:9
Compute the residual data
= d0 - dobs; r
Visualize data
= [1,4,8] shots
3-element Vector{Int64}:
1
4
8
Plot shot gathers for true model, initial model, and residual
The table below describes the data images below. We flip the direction of the residual and modeled data in order to help display the match with the true data.
Initial Residual Data (flipped) |
True Data |
Initial Data (flipped) |
Note that the data modeled in the initial model lacks a lot of reflectivity that is evident in the data modeled in the true model. We expect to recover this missing reflectivity with the FWI.
= 10.0 / sqrt(norm(dobs)^2 / length(dobs.data))
scale @show scale
= 5
nzero = ones(Float32,2001,nzero)
pad
figure(figsize=(8,9)); clf()
for (iplot,ishot) in enumerate(shots)
= hcat(reverse(r.data[ishot],dims=2), pad, dobs.data[ishot], pad, reverse(d0.data[ishot],dims=2))
cat2 subplot(3,1,iplot);
imshow(cat2,cmap="gray",aspect="auto",clim=[-1,+1]);
title(" Initial Residual sz=$(zsrc[ishot]) | True sz=$(zsrc[ishot]) | Initial sz=$(zsrc[ishot]) (flipped)");
end
tight_layout()
scale = 0.018069575143305386
Assess if data is cycle skipped at the farthest offsets
Next we plot the far offset traces for these three shots in order to assess if the data is cycle skipped.
You can ovbserve in the plots below that the refraction waveforms (first arrivals) in the initial model are not cycle skipped with respect to the true model, so we can proceed.
A very significant part of the residual wavefield is actually reflections in this example.
= 10.0 / sqrt(norm(dobs)^2 / length(dobs.data))
scale = [0.0:dt:tn;]
t
figure(figsize=(8,9)); clf()
for (iplot,ishot) in enumerate(shots)
subplot(3,1,iplot);
plot(t,dobs.data[ishot][:,end],label="True Model $(ishot) at z=$(zsrc[ishot])");
plot(t,d0.data[ishot][:,end],label="Initial Model $(ishot) at z=$(zsrc[ishot])");
xlim([4.5,t[end]])
legend()
end
tight_layout()
Build the objective
functions
Build src/rec positions mask
We use this mask to remove the imprint in gradients of proximity to source locations. The mask is set to 0 wherever a source or receiver is close, and is set to 1 otherwise. Without this mask most of the gradient updates would be concentrated close to sources where the model is correct.
= ones(Float32,size(m))
wb_mask 1:5, :] .= 0;
wb_mask[end-5:end, :] .= 0;
wb_mask[
figure(figsize=(8,3))
imshow(wb_mask', aspect="auto",cmap="gray_r",clim=[0,+2]);
colorbar();
title("Water Bottom Mask");
tight_layout()
Build the objective
function
This method is called by the solver whenever the gradient is required. Steps in computing the gradient are as follows: 1. Apply the adjoint of the Jacobian to the current residual J' * [F*v - d]
1. Apply simple scaling based on the size of the first gradient, and save to apply to future gradients
# build Jacoian
= judiJacobian(F0, fsrc)
J
function objective(F0, G, m, dobs, wb_mask)
.= m
F0.model.m = @elapsed begin
t = F0*fsrc
d0 if isnothing(G)
return .5f0*norm(d0 .- dobs)^2
end
.= J' * (d0 .- dobs)
G end
.*= vec(wb_mask)
G = .5f0*norm(d0 .- dobs)^2
ϕ if gscale == 0.0
# compute scalar from first gradient, apply to future gradients
global gscale = .25f0 ./ maximum(G)
@show gscale
end
.*= gscale
G return ϕ
end
# struct to save the first gradient scalar
= 0f0
gscale f(x) = objective(F0, nothing, x, dobs, wb_mask)
g!(G, x) = objective(F0, G, x, dobs, wb_mask)
fg!(G, x) = objective(F0, G, x, dobs, wb_mask)
fg! (generic function with 1 method)
Compute gradient
= 0f0 .* vec(m0)
grad1 = @elapsed begin
tgrad1 g!(grad1, vec(m0))
= 0
gscale end
@show tgrad1;
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.31 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.26 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.47 s
From worker 3: Operator `gradient` ran in 0.59 s
From worker 2: Operator `gradient` ran in 0.46 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.48 s
From worker 3: Operator `gradient` ran in 0.63 s
From worker 2: Operator `gradient` ran in 0.49 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `gradient` ran in 0.52 s
From worker 2: Operator `gradient` ran in 0.48 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `gradient` ran in 0.54 s
From worker 2: Operator `gradient` ran in 0.34 s
gscale = 3.15937f-5
tgrad1 = 33.235375243
= m0 .- m
dm = reshape(grad1, n)
grad1 = reshape(m0 .- grad1, n)
mg2 figure(figsize=(8,9))
subplot(5,1,1)
imshow(grad1' ./ maximum(abs,grad1),aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(-1,1);
title("Initial Gradient without Illumination Compensation");
subplot(5,1,2)
imshow(dm ./ maximum(abs,dm),aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(-1,1);
title("Squared slowness Difference: (m0 - m)");
subplot(5,1,3)
imshow(mg2',aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(vmin,vmax)
title("Updated squared slowness: (m0 - grad1)");
subplot(5,1,4)
imshow(reshape(prj(mg2), n)',aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(vmin,vmax)
title("Updated projected (bounds + TV) squared slowness: prj(m0 - grad1)");
subplot(5,1,5)
imshow(reshape(prj2(mg2), n)',aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(vmin,vmax)
title("Updated projected (bounds) squared slowness: prj(m0 - grad1)");
tight_layout()
relative evolution to small, exiting PARSDMM (iteration 37)
input to PARSDMM is feasible, returning
Perform the FWI using minConf_PQN
We will do 10 functions evaluation cost of projected quasi-Newton with two setup: - Bounds constraints only - Bounds + tv constrains
# FWI with PQN
= 10
niter = 0f0
gscale = pqn_options(progTol=0, store_trace=true, verbose=3, maxIter=niter) options_pqn
SlimOptim.PQN_params(3, 1.0f-5, 0, 10, 0.0001f0, 10, false, true, true, 1.0f-6, 1.0f-7, 100, false, 20, 1, 1)
= pqn(f, g!, fg!, vec(m0), prj, options_pqn); sol
Running PQN...
Number of L-BFGS Corrections to store: 10
Spectral initialization of SPG: 1
Maximum number of SPG iterations: 100
SPG optimality tolerance: 1.00e-06
SPG progress tolerance: 1.00e-07
PQN optimality tolerance: 1.00e-05
PQN progress tolerance: 0.00e+00
Quadratic initialization of line search: 0
Maximum number of iterations: 10
Line search: BackTracking{Float32, Int64}
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.32 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.47 s
From worker 2: Operator `forward` ran in 0.32 s
From worker 3: Operator `forward` ran in 0.22 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `gradient` ran in 0.56 s
From worker 3: Operator `gradient` ran in 0.50 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `gradient` ran in 0.44 s
From worker 3: Operator `gradient` ran in 0.50 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `gradient` ran in 0.57 s
From worker 3: Operator `gradient` ran in 0.47 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `gradient` ran in 0.54 s
From worker 3: Operator `gradient` ran in 0.38 s
gscale = 3.159375f-5
Iteration FunEvals GradEvals Projections Step Length Function Val Opt Cond
relative evolution to small, exiting PARSDMM (iteration 37)
0 0 0 0 0.00000e+00 8.04513e+05 6.74951e-02
relative evolution to small, exiting PARSDMM (iteration 37)
relative evolution to small, exiting PARSDMM (iteration 37)
From worker 2: Operator `forward` ran in 0.24 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.26 s
From worker 2: Operator `forward` ran in 0.28 s
From worker 3: Operator `forward` ran in 0.32 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.54 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.23 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.22 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `gradient` ran in 0.33 s
From worker 3: Operator `gradient` ran in 0.48 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `gradient` ran in 0.55 s
From worker 3: Operator `gradient` ran in 0.50 s
From worker 2: Operator `forward` ran in 0.31 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `gradient` ran in 0.58 s
From worker 3: Operator `gradient` ran in 0.50 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `gradient` ran in 0.52 s
From worker 3: Operator `gradient` ran in 0.32 s
relative evolution to small, exiting PARSDMM (iteration 38)
1 3 2 6 1.00000e-01 5.95413e+05 5.50441e-02
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 29)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.25 s
From worker 3: Operator `forward` ran in 0.23 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.32 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.22 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.32 s
From worker 2: Operator `forward` ran in 0.24 s
From worker 2: Operator `forward` ran in 0.32 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `gradient` ran in 0.69 s
From worker 3: Operator `gradient` ran in 0.71 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `gradient` ran in 0.73 s
From worker 3: Operator `gradient` ran in 0.72 s
From worker 2: Operator `forward` ran in 0.46 s
From worker 3: Operator `forward` ran in 0.54 s
From worker 2: Operator `gradient` ran in 0.72 s
From worker 3: Operator `gradient` ran in 0.72 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `gradient` ran in 0.66 s
From worker 3: Operator `gradient` ran in 0.63 s
relative evolution to small, exiting PARSDMM (iteration 15)
2 5 3 36 1.00000e-01 4.97818e+05 1.70875e-01
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 30)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.48 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.23 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.31 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.23 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `gradient` ran in 0.62 s
From worker 2: Operator `gradient` ran in 0.62 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `gradient` ran in 0.62 s
From worker 2: Operator `gradient` ran in 0.66 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `gradient` ran in 0.66 s
From worker 2: Operator `gradient` ran in 0.68 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `gradient` ran in 0.71 s
From worker 2: Operator `gradient` ran in 0.68 s
relative evolution to small, exiting PARSDMM (iteration 15)
3 7 4 64 1.00000e-01 3.82668e+05 1.56781e-01
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 29)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.24 s
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.23 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `gradient` ran in 0.33 s
From worker 2: Operator `gradient` ran in 0.52 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `gradient` ran in 0.53 s
From worker 2: Operator `gradient` ran in 0.51 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.43 s
From worker 3: Operator `gradient` ran in 0.54 s
From worker 2: Operator `gradient` ran in 0.48 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `gradient` ran in 0.49 s
From worker 2: Operator `gradient` ran in 0.32 s
relative evolution to small, exiting PARSDMM (iteration 15)
4 8 5 92 1.00000e+00 3.50573e+05 6.73204e-02
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 38)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.32 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.24 s
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.30 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.24 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `gradient` ran in 0.67 s
From worker 2: Operator `gradient` ran in 0.85 s
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `forward` ran in 0.44 s
From worker 3: Operator `gradient` ran in 0.62 s
From worker 2: Operator `gradient` ran in 0.60 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `gradient` ran in 0.62 s
From worker 2: Operator `gradient` ran in 0.67 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `gradient` ran in 0.65 s
From worker 2: Operator `gradient` ran in 0.66 s
relative evolution to small, exiting PARSDMM (iteration 26)
5 9 6 116 1.00000e+00 1.17713e+05 2.24156e-02
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.22 s
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.23 s
From worker 3: Operator `forward` ran in 0.26 s
From worker 2: Operator `forward` ran in 0.46 s
From worker 3: Operator `gradient` ran in 0.70 s
From worker 2: Operator `gradient` ran in 0.72 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `forward` ran in 0.44 s
From worker 3: Operator `gradient` ran in 0.74 s
From worker 2: Operator `gradient` ran in 0.74 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `gradient` ran in 0.35 s
From worker 2: Operator `gradient` ran in 0.55 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `gradient` ran in 0.50 s
From worker 2: Operator `gradient` ran in 0.32 s
relative evolution to small, exiting PARSDMM (iteration 26)
6 10 7 130 1.00000e+00 8.91832e+04 2.10390e-02
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 28)
relative evolution to small, exiting PARSDMM (iteration 28)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.30 s
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.43 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.25 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `gradient` ran in 0.58 s
From worker 3: Operator `gradient` ran in 0.51 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `gradient` ran in 0.59 s
From worker 3: Operator `gradient` ran in 0.49 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `gradient` ran in 0.58 s
From worker 3: Operator `gradient` ran in 0.50 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `gradient` ran in 0.50 s
From worker 3: Operator `gradient` ran in 0.40 s
relative evolution to small, exiting PARSDMM (iteration 14)
7 11 8 146 1.00000e+00 3.31746e+04 2.72466e-02
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 27)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.23 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.26 s
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.45 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.25 s
From worker 3: Operator `forward` ran in 0.26 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `gradient` ran in 0.75 s
From worker 2: Operator `gradient` ran in 0.77 s
From worker 3: Operator `forward` ran in 0.52 s
From worker 2: Operator `forward` ran in 0.51 s
From worker 3: Operator `gradient` ran in 0.62 s
From worker 2: Operator `gradient` ran in 0.61 s
From worker 3: Operator `forward` ran in 0.46 s
From worker 2: Operator `forward` ran in 0.45 s
From worker 3: Operator `gradient` ran in 0.76 s
From worker 2: Operator `gradient` ran in 0.77 s
From worker 3: Operator `forward` ran in 0.50 s
From worker 2: Operator `forward` ran in 0.44 s
From worker 3: Operator `gradient` ran in 0.82 s
From worker 2: Operator `gradient` ran in 0.80 s
relative evolution to small, exiting PARSDMM (iteration 14)
8 12 9 164 1.00000e+00 1.77415e+04 2.05675e-02
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 27)
relative evolution to small, exiting PARSDMM (iteration 20)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.25 s
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.25 s
From worker 3: Operator `forward` ran in 0.26 s
From worker 2: Operator `forward` ran in 0.53 s
From worker 3: Operator `gradient` ran in 0.96 s
From worker 2: Operator `gradient` ran in 0.97 s
From worker 3: Operator `forward` ran in 0.45 s
From worker 2: Operator `forward` ran in 0.47 s
From worker 3: Operator `gradient` ran in 0.78 s
From worker 2: Operator `gradient` ran in 0.75 s
From worker 3: Operator `forward` ran in 0.53 s
From worker 2: Operator `forward` ran in 0.57 s
From worker 3: Operator `gradient` ran in 0.77 s
From worker 2: Operator `gradient` ran in 0.78 s
From worker 3: Operator `forward` ran in 0.51 s
From worker 2: Operator `forward` ran in 0.51 s
From worker 3: Operator `gradient` ran in 0.70 s
From worker 2: Operator `gradient` ran in 0.74 s
relative evolution to small, exiting PARSDMM (iteration 14)
9 13 10 184 1.00000e+00 1.05269e+04 1.38740e-02
relative evolution to small, exiting PARSDMM (iteration 25)
relative evolution to small, exiting PARSDMM (iteration 41)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 14)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.27 s
relative evolution to small, exiting PARSDMM (iteration 15)
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.24 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `gradient` ran in 0.81 s
From worker 2: Operator `gradient` ran in 0.81 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `gradient` ran in 0.54 s
From worker 3: Operator `gradient` ran in 0.58 s
From worker 2: Operator `forward` ran in 0.54 s
From worker 3: Operator `forward` ran in 0.52 s
From worker 2: Operator `gradient` ran in 0.67 s
From worker 3: Operator `gradient` ran in 0.52 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.45 s
From worker 2: Operator `gradient` ran in 0.58 s
From worker 3: Operator `gradient` ran in 0.35 s
relative evolution to small, exiting PARSDMM (iteration 14)
10 14 11 216 1.00000e+00 5.58767e+03 9.81355e-03
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
┌ Info: Line search failed
└ @ SlimOptim /Users/mathiaslouboutin/.julia/dev/SlimOptim/src/linesearches.jl:47
= pqn(f, g!, fg!, vec(m0), prj2, options_pqn); sol2
Running PQN...
Number of L-BFGS Corrections to store: 10
Spectral initialization of SPG: 1
Maximum number of SPG iterations: 100
SPG optimality tolerance: 1.00e-06
SPG progress tolerance: 1.00e-07
PQN optimality tolerance: 1.00e-05
PQN progress tolerance: 0.00e+00
Quadratic initialization of line search: 0
Maximum number of iterations: 10
Line search: BackTracking{Float32, Int64}
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.31 s
From worker 2: Operator `forward` ran in 0.31 s
From worker 3: Operator `forward` ran in 0.22 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `gradient` ran in 0.50 s
From worker 3: Operator `gradient` ran in 0.47 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `gradient` ran in 0.54 s
From worker 3: Operator `gradient` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `gradient` ran in 0.47 s
From worker 3: Operator `gradient` ran in 0.42 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `gradient` ran in 0.48 s
From worker 3: Operator `gradient` ran in 0.29 s
Iteration FunEvals GradEvals Projections Step Length Function Val Opt Cond
input to PARSDMM is feasible, returning
0 0 0 0 0.00000e+00 8.04514e+05 2.50000e-01
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.51 s
From worker 2: Operator `forward` ran in 0.48 s
From worker 3: Operator `forward` ran in 0.48 s
From worker 2: Operator `forward` ran in 0.52 s
From worker 3: Operator `forward` ran in 0.51 s
From worker 2: Operator `forward` ran in 0.50 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.29 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.32 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.22 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.22 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `gradient` ran in 0.73 s
From worker 3: Operator `gradient` ran in 0.77 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `gradient` ran in 0.50 s
From worker 3: Operator `gradient` ran in 0.51 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.46 s
From worker 2: Operator `gradient` ran in 0.59 s
From worker 3: Operator `gradient` ran in 0.48 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `gradient` ran in 0.56 s
From worker 3: Operator `gradient` ran in 0.33 s
input to PARSDMM is feasible, returning
1 3 2 6 1.00000e-01 4.12124e+05 1.59019e-01
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.43 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.64 s
From worker 3: Operator `forward` ran in 0.26 s
From worker 2: Operator `forward` ran in 0.22 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.23 s
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.45 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.24 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 3: Operator `gradient` ran in 0.75 s
From worker 2: Operator `gradient` ran in 0.75 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.46 s
From worker 2: Operator `gradient` ran in 0.61 s
From worker 3: Operator `gradient` ran in 0.47 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `gradient` ran in 0.58 s
From worker 3: Operator `gradient` ran in 0.49 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `gradient` ran in 0.51 s
From worker 3: Operator `gradient` ran in 0.31 s
input to PARSDMM is feasible, returning
2 5 3 42 1.00000e-01 2.75734e+05 1.35675e-01
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.23 s
From worker 3: Operator `forward` ran in 0.26 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `gradient` ran in 0.77 s
From worker 2: Operator `gradient` ran in 0.79 s
From worker 3: Operator `forward` ran in 0.67 s
From worker 2: Operator `forward` ran in 0.60 s
From worker 3: Operator `gradient` ran in 0.99 s
From worker 2: Operator `gradient` ran in 0.99 s
From worker 3: Operator `forward` ran in 0.54 s
From worker 2: Operator `forward` ran in 0.48 s
From worker 3: Operator `gradient` ran in 0.73 s
From worker 2: Operator `gradient` ran in 0.93 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.48 s
From worker 3: Operator `gradient` ran in 0.67 s
From worker 2: Operator `gradient` ran in 0.42 s
input to PARSDMM is feasible, returning
3 6 4 70 1.00000e+00 1.12580e+05 1.14484e-01
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `forward` ran in 0.53 s
From worker 3: Operator `forward` ran in 0.47 s
From worker 2: Operator `forward` ran in 0.51 s
From worker 3: Operator `forward` ran in 0.52 s
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.51 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.23 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `gradient` ran in 0.84 s
From worker 3: Operator `gradient` ran in 0.84 s
From worker 2: Operator `forward` ran in 0.43 s
From worker 3: Operator `forward` ran in 0.47 s
From worker 2: Operator `gradient` ran in 0.64 s
From worker 3: Operator `gradient` ran in 0.69 s
From worker 2: Operator `forward` ran in 0.44 s
From worker 3: Operator `forward` ran in 0.46 s
From worker 2: Operator `gradient` ran in 0.78 s
From worker 3: Operator `gradient` ran in 0.79 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.47 s
From worker 2: Operator `gradient` ran in 0.60 s
From worker 3: Operator `gradient` ran in 0.41 s
input to PARSDMM is feasible, returning
4 7 5 94 1.00000e+00 3.94970e+04 4.63609e-02
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.43 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.24 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.48 s
From worker 3: Operator `forward` ran in 0.32 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.23 s
From worker 2: Operator `forward` ran in 0.32 s
From worker 3: Operator `forward` ran in 0.56 s
From worker 2: Operator `gradient` ran in 0.43 s
From worker 3: Operator `gradient` ran in 0.51 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `gradient` ran in 0.51 s
From worker 3: Operator `gradient` ran in 0.46 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `gradient` ran in 0.50 s
From worker 3: Operator `gradient` ran in 0.52 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `gradient` ran in 0.44 s
From worker 3: Operator `gradient` ran in 0.35 s
input to PARSDMM is feasible, returning
5 8 6 118 1.00000e+00 2.78628e+04 2.88242e-02
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.24 s
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.29 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.25 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.45 s
From worker 2: Operator `gradient` ran in 0.62 s
From worker 3: Operator `gradient` ran in 0.58 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.45 s
From worker 2: Operator `gradient` ran in 0.59 s
From worker 3: Operator `gradient` ran in 0.50 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `gradient` ran in 0.58 s
From worker 3: Operator `gradient` ran in 0.56 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `gradient` ran in 0.60 s
From worker 3: Operator `gradient` ran in 0.35 s
input to PARSDMM is feasible, returning
6 9 7 150 1.00000e+00 1.45960e+04 2.03700e-02
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.35 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.24 s
input to PARSDMM is feasible, returning
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.23 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.50 s
From worker 2: Operator `gradient` ran in 0.64 s
From worker 3: Operator `gradient` ran in 0.56 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.49 s
From worker 2: Operator `gradient` ran in 0.64 s
From worker 3: Operator `gradient` ran in 0.51 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `gradient` ran in 0.60 s
From worker 3: Operator `gradient` ran in 0.52 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `gradient` ran in 0.54 s
From worker 3: Operator `gradient` ran in 0.34 s
input to PARSDMM is feasible, returning
7 10 8 190 1.00000e+00 7.63842e+03 1.36674e-02
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.23 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.26 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.33 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.33 s
From worker 2: Operator `forward` ran in 0.24 s
From worker 2: Operator `forward` ran in 0.26 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `gradient` ran in 0.80 s
From worker 3: Operator `gradient` ran in 0.80 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `gradient` ran in 0.53 s
From worker 3: Operator `gradient` ran in 0.53 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `gradient` ran in 0.48 s
From worker 3: Operator `gradient` ran in 0.53 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.42 s
From worker 2: Operator `gradient` ran in 0.58 s
From worker 3: Operator `gradient` ran in 0.38 s
input to PARSDMM is feasible, returning
8 11 9 238 1.00000e+00 3.18718e+03 1.09845e-02
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.35 s
From worker 2: Operator `forward` ran in 0.37 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `forward` ran in 0.40 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.34 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.36 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.24 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.43 s
From worker 3: Operator `gradient` ran in 0.61 s
From worker 2: Operator `gradient` ran in 0.51 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `gradient` ran in 0.65 s
From worker 2: Operator `gradient` ran in 0.52 s
From worker 3: Operator `forward` ran in 0.43 s
From worker 2: Operator `forward` ran in 0.44 s
From worker 3: Operator `gradient` ran in 0.52 s
From worker 2: Operator `gradient` ran in 0.51 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.42 s
From worker 3: Operator `gradient` ran in 0.51 s
From worker 2: Operator `gradient` ran in 0.34 s
input to PARSDMM is feasible, returning
9 12 10 292 1.00000e+00 2.62946e+03 1.24063e-02
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.59 s
From worker 3: Operator `forward` ran in 0.36 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.24 s
input to PARSDMM is feasible, returning
From worker 3: Operator `forward` ran in 0.39 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.46 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.24 s
From worker 3: Operator `forward` ran in 0.40 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `gradient` ran in 0.74 s
From worker 2: Operator `gradient` ran in 0.76 s
From worker 3: Operator `forward` ran in 0.46 s
From worker 2: Operator `forward` ran in 0.46 s
From worker 3: Operator `gradient` ran in 0.78 s
From worker 2: Operator `gradient` ran in 0.82 s
From worker 3: Operator `forward` ran in 0.52 s
From worker 2: Operator `forward` ran in 0.50 s
From worker 3: Operator `gradient` ran in 0.78 s
From worker 2: Operator `gradient` ran in 0.78 s
From worker 3: Operator `forward` ran in 0.44 s
From worker 2: Operator `forward` ran in 0.47 s
From worker 3: Operator `gradient` ran in 0.73 s
From worker 2: Operator `gradient` ran in 0.71 s
input to PARSDMM is feasible, returning
10 13 11 338 1.00000e+00 1.73191e+03 5.47692e-03
= reshape(prj(sol.x), n) # optimal solution
mf = sol.ϕ_trace # cost vs iteration
ϕ = sol.x_trace # model vs iteration
m1 collect(m1[i] = reshape(m1[i], n) for i=1:length(ϕ));
relative evolution to small, exiting PARSDMM (iteration 15)
= reshape(prj(sol2.x), n) # optimal solution
mf2 2 = sol2.ϕ_trace # cost vs iteration
ϕ= sol2.x_trace # model vs iteration
m2 collect(m2[i] = reshape(m2[i], n) for i=1:length(ϕ2));
relative evolution to small, exiting PARSDMM (iteration 15)
Visualize velocity models and objective function
figure(figsize=(8,9)); clf()
subplot(4,1,1);imshow(m0',aspect="auto",cmap="jet");
colorbar(orientation="vertical");clim(vmin,vmax);title("Initial Velocity");
subplot(4,1,2);imshow(mf2',aspect="auto",cmap="jet");
colorbar(orientation="vertical");clim(vmin,vmax);title("FWI Velocity");
subplot(4,1,3);imshow(mf',aspect="auto",cmap="jet");
colorbar(orientation="vertical");clim(vmin,vmax);title("FWI Velocity with TV");
subplot(4,1,4);imshow(m',aspect="auto",cmap="jet");
colorbar(orientation="vertical");clim(vmin,vmax);title("True Velocity")
tight_layout()
Display the velocity difference models
= @sprintf("%.1f m/s", sqrt(norm(m .- m0)^2 / length(m)))
rms_v2 = @sprintf("%.1f m/s", sqrt(norm(m .- mf)^2 / length(m)))
rms_vf = @sprintf("%.1f m/s", sqrt(norm(m .- mf2)^2 / length(m)))
rms_vf2
figure(figsize=(8,6)); clf()
subplot(3,1,1);imshow(m .- m0,aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(dmin,dmax);
title("Vtrue - Vinit difference, rms=$(rms_v2)");
subplot(3,1,2);imshow(m .- mf,aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(dmin,dmax);
title("Vtrue - Vfwi difference, rms=$(rms_vf)");
subplot(3,1,3);imshow(m .- mf2,aspect="auto",cmap="seismic");
colorbar(orientation="vertical");clim(dmin,dmax);
title("Vtrue - Vfwi_TV difference, rms=$(rms_vf2)");
tight_layout()
Display the cost function
figure(figsize=(8,4)); clf()
= [0:1:niter;]
iters plot(ϕ[2:end] ./ ϕ[2], marker="o", label="FWI_TV")
plot(ϕ2[2:end] ./ ϕ2[2], marker="o", label="FWI")
ylim([0,1.05])
xlabel("Nonlinear Iteration")
ylabel("Normalized cost ||f(v) - d||")
title(@sprintf("FWI Objective Function reduced %.1f percent and %.1f percent with TV",
100 * (ϕ[2] - ϕ[end]) / ϕ[2], 100 * (ϕ2[2] - ϕ2[end]) / ϕ2[2]));
tight_layout()
Display data misfit vs model misfit
figure(figsize=(8,4)); clf()
= [norm(m1[i] .- m, 2) for i in 1:length(m1)]
c = [norm(m2[i] .- m, 2) for i in 1:length(m2)]
c2 loglog(c[2:end], ϕ[2:end], label="FWI_TV", marker="s", linewidth=1)
loglog(c2[2:end], ϕ2[2:end], label="FWI", marker="s", linewidth=1)
legend()
xlabel("Log Model residual")
ylabel("Log Data residual")
title("Misfit Trajectory, LOOK AT THAT TV MODEL ERROR");
tight_layout()
Visualize data match
Generate data in the FWI velocity model
= @elapsed begin
tf .= vec(mf)
F0.model.m = F0*fsrc;
df end
@show tf;
= @elapsed begin
tf2 .= vec(mf2)
F0.model.m = F0*fsrc;
df2 end
@show tf2;
From worker 2: Operator `forward` ran in 0.24 s
From worker 3: Operator `forward` ran in 0.37 s
From worker 2: Operator `forward` ran in 0.48 s
From worker 3: Operator `forward` ran in 0.41 s
From worker 2: Operator `forward` ran in 0.39 s
From worker 3: Operator `forward` ran in 0.34 s
From worker 2: Operator `forward` ran in 0.37 s
From worker 3: Operator `forward` ran in 0.24 s
tf = 10.834594565
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.41 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.45 s
From worker 2: Operator `forward` ran in 0.38 s
From worker 3: Operator `forward` ran in 0.38 s
From worker 2: Operator `forward` ran in 0.25 s
tf2 = 10.631615719
Compute residuals
= df - dobs;
rf = df2 - dobs; rf2
Plot shot gathers for true, initial model, and fwi models
The table below describes the data images below. We will flip the direction of the residual and modeled data in order to help display the match with the true data. We include the initial data as shown above for easier comparison.
Initial Residual Data (flipped) |
True Data |
Initial Data (flipped) |
FWI Residual Data (flipped) |
True Data |
FWI Data (flipped) |
We first make a function to create the plots that we can re-use for the selected shots.
= trunc.([zsrc[i][1] for i=1:nsrc]; digits=6)
zsrc function make_plot(index)
figure(figsize=(8,6)); clf()
= hcat(reverse(r.data[index],dims=2), pad, dobs.data[index], pad, reverse(d0.data[index],dims=2))
cat2 = hcat(reverse(rf.data[index],dims=2), pad, dobs.data[index], pad, reverse(df.data[index],dims=2))
catf = hcat(reverse(rf2.data[index],dims=2), pad, dobs.data[index], pad, reverse(df.data[index],dims=2))
catf2 subplot(3,1,1);
imshow(cat2,cmap="gray",aspect="auto",clim=[-1,+1]);
title(" Initial Residual sz=$(zsrc[index]) || True sz=$(zsrc[index]) || Initial sz=$(zsrc[index]) (flipped)");
subplot(3,1,2);
imshow(catf2,cmap="gray",aspect="auto",clim=[-1,+1]);
title(" FWI Residual sz=$(zsrc[index]) || True sz=$(zsrc[index]) || FWI sz=$(zsrc[index]) (flipped)");
tight_layout()
subplot(3,1,3);
imshow(catf,cmap="gray",aspect="auto",clim=[-1,+1]);
title("TV FWI Residual sz=$(zsrc[index]) || True sz=$(zsrc[index]) || FWI sz=$(zsrc[index]) (flipped)");
tight_layout()
end
make_plot (generic function with 1 method)
Data for the 1st shot, generated in the initial and FWI models
make_plot(1)
Data for the 4th shot, generated in the initial and FWI models
make_plot(4)
Data for the 8th shot, generated in the initial and FWI models
make_plot(8)
Remove workers
rmprocs(workers());
┌ Warning: rmprocs: process 1 not removed
└ @ Distributed /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Distributed/src/cluster.jl:1038