diff --git a/OpenNL/include/OpenNL/bicgstab.h b/OpenNL/include/OpenNL/bicgstab.h index 8fae6c727bd..53370b66a72 100644 --- a/OpenNL/include/OpenNL/bicgstab.h +++ b/OpenNL/include/OpenNL/bicgstab.h @@ -137,7 +137,8 @@ public: while ( rTr>err && its < max_iter) { mult(A,d,Ad); rTAd=BLAS::dot(rT,Ad); - assert( ! IsZero(rTAd) ); + if (IsZero(rTAd)) + break; // stop if bad conditioning alpha=rTh/rTAd; BLAS::axpy(-alpha,Ad,r); BLAS::copy(h,s); @@ -156,8 +157,10 @@ public: BLAS::axpy(-omega,s,x); BLAS::copy(s,h); BLAS::axpy(-omega,t,h); - assert( ! IsZero(omega) ); - assert( ! IsZero(rTh) ); + if (IsZero(omega)) + break; // stop if bad conditioning + if (IsZero(rTh)) + break; // stop if bad conditioning beta=(alpha/omega)/rTh; rTh=BLAS::dot(rT,h); beta*=rTh; BLAS::scal(beta,d); BLAS::axpy(1,h,d); diff --git a/OpenNL/include/OpenNL/conjugate_gradient.h b/OpenNL/include/OpenNL/conjugate_gradient.h index 88ccc783828..bddc5d7e829 100644 --- a/OpenNL/include/OpenNL/conjugate_gradient.h +++ b/OpenNL/include/OpenNL/conjugate_gradient.h @@ -136,11 +136,13 @@ public: rho=BLAS::dot(p,p); sig=BLAS::dot(r,p); tau=BLAS::dot(g,r); - assert( ! IsZero(sig) ); + if (IsZero(sig)) + break; // stop if bad conditioning t=tau/sig; BLAS::axpy(t,r,x); BLAS::axpy(-t,p,g); - assert( ! IsZero(tau) ); + if (IsZero(tau)) + break; // stop if bad conditioning gam=(t*t*rho-tau)/tau; BLAS::scal(gam,r); BLAS::axpy(1,g,r);