Hi Troels,

For speed, maybe you should send in the single value parameters
together with the array versions into the lib.dispersion modules?  The
check:

+        if np.allclose(dw, np.zeros(dw.shape)) or np.allclose(pA,
np.ones(dw.shape)) or np.allclose(kex, np.zeros(dw.shape)):

will be very expensive.

Regards,

Edward



On 8 June 2014 19:48,  <[email protected]> wrote:
> Author: tlinnet
> Date: Sun Jun  8 19:48:35 2014
> New Revision: 23737
>
> URL: http://svn.gna.org/viewcvs/relax?rev=23737&view=rev
> Log:
> Re-implemented safety checks in lib/dispersion/cr72.py.
>
> This is now implemented for both rank-1 float array and of higher dimensions.
>
> This makes the unit tests pass for multi dimensional computing.
>
> Task #7807 (https://gna.org/task/index.php?7807): Speed-up of dispersion 
> models for Clustered analysis.
>
> Modified:
>     branches/disp_spin_speed/lib/dispersion/cr72.py
>
> Modified: branches/disp_spin_speed/lib/dispersion/cr72.py
> URL: 
> http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/lib/dispersion/cr72.py?rev=23737&r1=23736&r2=23737&view=diff
> ==============================================================================
> --- branches/disp_spin_speed/lib/dispersion/cr72.py     (original)
> +++ branches/disp_spin_speed/lib/dispersion/cr72.py     Sun Jun  8 19:48:35 
> 2014
> @@ -128,9 +128,15 @@
>          rank_1 = False
>
>      # Catch parameter values that will result in no exchange, returning flat 
> R2eff = R20 lines (when kex = 0.0, k_AB = 0.0).
> +    # For rank-1 float array.
>      if rank_1:
>          if dw == 0.0 or pA == 1.0 or kex == 0.0:
>              back_calc[:] = array([r20a]*num_points)
> +            return
> +    # For higher dimensions, return same structure.
> +    else:
> +        if np.allclose(dw, np.zeros(dw.shape)) or np.allclose(pA, 
> np.ones(dw.shape)) or np.allclose(kex, np.zeros(dw.shape)):
> +            back_calc[:] = r20a
>              return
>
>      # The B population.
> @@ -165,16 +171,23 @@
>
>      # Catch math domain error of cosh(val > 710).
>      # This is when etapos > 710.
> -    if rank_1:
> -        if max(etapos) > 700:
> +    if max(etapos) > 700:
> +        if rank_1:
>              back_calc[:] = array([r20a]*num_points)
> +            return
> +        # For higher dimensions, return same structure.
> +        else:
> +            back_calc[:] = r20a
>              return
>
>      # The arccosh argument - catch invalid values.
>      fact = Dpos * cosh(etapos) - Dneg * cos(etaneg)
> -    if rank_1:
> -        if min(fact) < 1.0:
> +    if min(fact) < 1.0:
> +        if rank_1:
>              back_calc[:] = array([r20_kex]*num_points)
> +            return
> +        else:
> +            back_calc[:] = r20_kex
>              return
>
>      # Calculate R2eff.
> @@ -182,8 +195,10 @@
>
>      # Catch errors, taking a sum over array is the fastest way to check for
>      # +/- inf (infinity) and nan (not a number).
> -    if rank_1:
> -        if not isfinite(sum(R2eff)):
> +    if not isfinite(sum(R2eff)):
> +        if rank_1:
>              R2eff = array([1e100]*num_points)
> +        else:
> +            R2eff = np.ones(R2eff.shape) * 1e100
>
>      back_calc[:] = R2eff
>
>
> _______________________________________________
> relax (http://www.nmr-relax.com)
>
> This is the relax-commits mailing list
> [email protected]
>
> To unsubscribe from this list, get a password
> reminder, or change your subscription options,
> visit the list information page at
> https://mail.gna.org/listinfo/relax-commits

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
[email protected]

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel

Reply via email to