Relaxed shooting discontinuity check
This commit is contained in:
parent
00a5f66418
commit
df833235c8
10
dirac.jl
10
dirac.jl
|
|
@ -43,10 +43,12 @@ function solveWf(κ, p, E, Φ0, W0, B0, A0, r_max, divs; shooting=true, normaliz
|
|||
wf = hcat(sol.u...)
|
||||
|
||||
if shooting # join two segments
|
||||
rescale_factor = wf[1, end] / wf_right[1, 1]
|
||||
rescale_factor ≈ wf[2, end] / wf_right[2, 1] || @warn "Shooting method joint has a discontinuity"
|
||||
rescale_factor = isfinite(rescale_factor) ? rescale_factor : 1
|
||||
wf = hcat(wf[:, 1:(end - 1)], wf_right .* rescale_factor)
|
||||
rescale_factor_g = wf[1, end] / wf_right[1, 1]
|
||||
rescale_factor_f = wf[2, end] / wf_right[2, 1]
|
||||
@assert isfinite(rescale_factor_g) && isfinite(rescale_factor_f) "Cannot rescale the right partition"
|
||||
isapprox(rescale_factor_g, rescale_factor_f; rtol=0.03) || @warn "Discontinuity between two partitions"
|
||||
wf_right_rescaled = wf_right .* ((rescale_factor_g + rescale_factor_f) / 2)
|
||||
wf = hcat(wf[:, 1:(end - 1)], wf_right_rescaled)
|
||||
end
|
||||
|
||||
if normalize
|
||||
|
|
|
|||
Loading…
Reference in New Issue