Author: bugman Date: Mon Oct 21 08:55:18 2013 New Revision: 21191 URL: http://svn.gna.org/viewcvs/relax?rev=21191&view=rev Log: Shifted all of the numerical dispersion code to use the internal matrix power function. Instead of using the numpy.linalg.matrix_power() function, the relax lib.linear_algebra.square_matrix_power() function is being used instead. This allows the code to run on many older systems, as the numpy function is relatively new. Modified: branches/relax_disp/lib/dispersion/mq_ns_cpmg_2site.py branches/relax_disp/lib/dispersion/ns_cpmg_2site_star.py Modified: branches/relax_disp/lib/dispersion/mq_ns_cpmg_2site.py URL: http://svn.gna.org/viewcvs/relax/branches/relax_disp/lib/dispersion/mq_ns_cpmg_2site.py?rev=21191&r1=21190&r2=21191&view=diff ============================================================================== --- branches/relax_disp/lib/dispersion/mq_ns_cpmg_2site.py (original) +++ branches/relax_disp/lib/dispersion/mq_ns_cpmg_2site.py Mon Oct 21 08:55:18 2013 @@ -35,12 +35,12 @@ # Python module imports. from math import fabs, log from numpy import array, conj, dot, float64 -from numpy.linalg import matrix_power # relax module imports. from lib.dispersion.ns_matrices import rcpmg_3d from lib.float import isNaN from lib.linear_algebra.matrix_exponential import matrix_exponential +from lib.linear_algebra.matrix_power import square_matrix_power def populate_matrix(matrix=None, r20=None, dw=None, dwH=None, k_AB=None, k_BA=None): @@ -141,16 +141,16 @@ fact = int(power[i] / 2) # (M1.M2.M2.M1)^(n/2) - A = matrix_power(M1_M2_M2_M1, fact) + A = square_matrix_power(M1_M2_M2_M1, fact) # (M2*.M1*.M1*.M2*)^(n/2) - B = matrix_power(M2_M1_M1_M2_star, fact) + B = square_matrix_power(M2_M1_M1_M2_star, fact) # (M2.M1.M1.M2)^(n/2) - C = matrix_power(M2_M1_M1_M2, fact) + C = square_matrix_power(M2_M1_M1_M2, fact) # (M1*.M2*.M2*.M1*)^(n/2) - D = matrix_power(M1_M2_M2_M1_star, fact) + D = square_matrix_power(M1_M2_M2_M1_star, fact) # Matrices for odd n. else: @@ -158,19 +158,19 @@ fact = int((power[i] - 1) / 2) # (M1.M2.M2.M1)^((n-1)/2).M1.M2 - A = matrix_power(M1_M2_M2_M1, fact) + A = square_matrix_power(M1_M2_M2_M1, fact) A = dot(A, M1_M2) # (M1*.M2*.M2*.M1*)^((n-1)/2).M1*.M2* - B = matrix_power(M1_M2_M2_M1_star, fact) + B = square_matrix_power(M1_M2_M2_M1_star, fact) B = dot(B, M1_M2_star) # (M2.M1.M1.M2)^((n-1)/2).M2.M1 - C = matrix_power(M2_M1_M1_M2, fact) + C = square_matrix_power(M2_M1_M1_M2, fact) C = dot(C, M2_M1) # (M2*.M1*.M1*.M2*)^((n-1)/2).M2*.M1* - D = matrix_power(M2_M1_M1_M2_star, fact) + D = square_matrix_power(M2_M1_M1_M2_star, fact) D = dot(D, M2_M1_star) # The next lines calculate the R2eff using a two-point approximation, i.e. assuming that the decay is mono-exponential. Modified: branches/relax_disp/lib/dispersion/ns_cpmg_2site_star.py URL: http://svn.gna.org/viewcvs/relax/branches/relax_disp/lib/dispersion/ns_cpmg_2site_star.py?rev=21191&r1=21190&r2=21191&view=diff ============================================================================== --- branches/relax_disp/lib/dispersion/ns_cpmg_2site_star.py (original) +++ branches/relax_disp/lib/dispersion/ns_cpmg_2site_star.py Mon Oct 21 08:55:18 2013 @@ -38,11 +38,11 @@ # Python module imports. from math import log from numpy import add, complex, conj, dot -from numpy.linalg import matrix_power # relax module imports. from lib.float import isNaN from lib.linear_algebra.matrix_exponential import matrix_exponential +from lib.linear_algebra.matrix_power import square_matrix_power def r2eff_ns_cpmg_2site_star(Rr=None, Rex=None, RCS=None, R=None, M0=None, r20a=None, r20b=None, dw=None, inv_tcpmg=None, tcp=None, back_calc=None, num_points=None, power=None): @@ -102,7 +102,7 @@ prop_2 = dot(dot(eR_tcp, matrix_exponential(cR2*tcp[i])), eR_tcp) # Now create the total propagator that will evolve the magnetization under the CPMG train, i.e. it applies the above tau-180-tau-tau-180-tau so many times as required for the CPMG frequency under consideration. - prop_total = matrix_power(prop_2, power[i]) + prop_total = square_matrix_power(prop_2, power[i]) # Now we apply the above propagator to the initial magnetization vector - resulting in the magnetization that remains after the full CPMG pulse train. It is called M of t (t is the time after the CPMG train). Moft = dot(prop_total, M0)