Author: tlinnet Date: Wed May 21 13:03:01 2014 New Revision: 23299 URL: http://svn.gna.org/viewcvs/relax?rev=23299&view=rev Log: Align math-domain catching for model M61 with trunk implementation. task #7793: (https://gna.org/task/?7793) Speed-up of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful. Modified: branches/disp_speed/lib/dispersion/m61.py Modified: branches/disp_speed/lib/dispersion/m61.py URL: http://svn.gna.org/viewcvs/relax/branches/disp_speed/lib/dispersion/m61.py?rev=23299&r1=23298&r2=23299&view=diff ============================================================================== --- branches/disp_speed/lib/dispersion/m61.py (original) +++ branches/disp_speed/lib/dispersion/m61.py Wed May 21 13:03:01 2014 @@ -91,15 +91,18 @@ # The numerator. numer = phi_ex * kex + # Catch zeros (to avoid pointless mathematical operations). + # This will result in no exchange, returning flat lines. + if numer == 0.0: + return array([r1rho_prime]*num_points) + # Denominator. denom = kex2 + spin_lock_fields2 # Catch math domain error of dividing with 0. # This is when denom=0. if min(abs(denom)) == 0: - R1rho = array([1e100]*num_points) - - return R1rho + return array([1e100]*num_points) # R1rho calculation. R1rho = r1rho_prime + numer / denom @@ -107,6 +110,6 @@ # Catch errors, taking a sum over array is the fastest way to check for # +/- inf (infinity) and nan (not a number). if not isfinite(sum(R1rho)): - R1rho = array([1e100]*num_points) + return array([1e100]*num_points) return R1rho