Author: bugman Date: Sun Apr 13 16:17:09 2008 New Revision: 5622 URL: http://svn.gna.org/viewcvs/relax?rev=5622&view=rev Log: Bug fix for optimisation when order parameters of exactly zero are encountered. The steady-state NOE value, gradient, and Hessian is properly calculated when an order parameter of 0.0 is encountered. The 0.0/0.0 is avoided and instead the value, gradient, and Hessian components of 1.0, 0.0, and 0.0 respectively are set. Modified: 1.3/maths_fns/ri.py Modified: 1.3/maths_fns/ri.py URL: http://svn.gna.org/viewcvs/relax/1.3/maths_fns/ri.py?rev=5622&r1=5621&r2=5622&view=diff ============================================================================== --- 1.3/maths_fns/ri.py (original) +++ 1.3/maths_fns/ri.py Sun Apr 13 16:17:09 2008 @@ -39,7 +39,9 @@ data.r1[i] = get_r1[i](data, i, frq_num, params) # Calculate the NOE. - if data.r1[i] == 0.0: + if data.r1[i] == 0.0 and data.ri_prime[i] == 0.0: + data.ri[i] = 1.0 + elif data.r1[i] == 0.0: data.ri[i] = 1e99 else: data.ri[i] = 1.0 + data.g_ratio*(data.ri_prime[i] / data.r1[i]) @@ -53,7 +55,9 @@ # Calculate the NOE derivative. data.dr1[j, i] = get_dr1[i](data, i, frq_num, params, j) - if data.r1[i] == 0.0: + if data.r1[i] == 0.0 and data.ri_prime[i] == 0.0: + data.dri[j, i] = 0.0 + elif data.r1[i] == 0.0: data.dri[j, i] = 1e99 else: data.dri[j, i] = data.g_ratio * (1.0 / data.r1[i]**2) * (data.r1[i] * data.dri_prime[j, i] - data.ri_prime[i] * data.dr1[j, i]) @@ -67,7 +71,9 @@ # Calculate the NOE second derivative. data.d2r1[j, k, i] = get_d2r1[i](data, i, frq_num, params, j, k) - if data.r1[i] == 0.0: + if data.r1[i] == 0.0 and data.ri_prime[i] == 0.0: + data.d2ri[j, k, i] = 0.0 + elif data.r1[i] == 0.0: data.d2ri[j, k, i] = 1e99 else: a = data.ri_prime[i] * (2.0 * data.dr1[j, i] * data.dr1[k, i] - data.r1[i] * data.d2r1[j, k, i])