Revert update if residuals or jacobian have NaNs (block_trust_region).
parent
4cccdd9074
commit
b9bc1e7cb1
|
@ -132,7 +132,7 @@ contains
|
||||||
real(real64) :: xnorm ! Norm of rescaled x
|
real(real64) :: xnorm ! Norm of rescaled x
|
||||||
real(real64), dimension(size(x)) :: p ! Candidate increment computed by dogleg
|
real(real64), dimension(size(x)) :: p ! Candidate increment computed by dogleg
|
||||||
real(real64) :: pnorm ! Norm of rescaled p
|
real(real64) :: pnorm ! Norm of rescaled p
|
||||||
real(real64), dimension(size(x)) :: x2 ! Candidate x for next iteration
|
real(real64), dimension(size(x)) :: x2, x0 ! Candidate x for next iteration and copy of x
|
||||||
real(real64), dimension(size(x)) :: fvec2 ! Candidate function values
|
real(real64), dimension(size(x)) :: fvec2 ! Candidate function values
|
||||||
real(real64) :: fn2 ! Norm of the candidate function values
|
real(real64) :: fn2 ! Norm of the candidate function values
|
||||||
real(real64), dimension(size(x)) :: w ! Candidate in the approximated linear model
|
real(real64), dimension(size(x)) :: w ! Candidate in the approximated linear model
|
||||||
|
@ -212,8 +212,17 @@ contains
|
||||||
|
|
||||||
! If successful iteration, move x and update various variables
|
! If successful iteration, move x and update various variables
|
||||||
if (ratio >= 1e-4_real64) then
|
if (ratio >= 1e-4_real64) then
|
||||||
|
x0 = x
|
||||||
x = x2
|
x = x2
|
||||||
call f_and_update_norms
|
call f_and_update_norms
|
||||||
|
if (any(isnan(fvec)) .or. any(isnan(fjac))) then
|
||||||
|
x = x0
|
||||||
|
call f_and_update_norms
|
||||||
|
delta = delta / 2
|
||||||
|
ncslow = ncslow + 1
|
||||||
|
niter = niter + 1
|
||||||
|
cycle
|
||||||
|
end if
|
||||||
xnorm = norm2(dg * x)
|
xnorm = norm2(dg * x)
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue