Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: using built in compiler

  • To: mathgroup at smc.vnet.net
  • Subject: [mg128339] Re: using built in compiler
  • From: Chris <kristoph.steikert at gmail.com>
  • Date: Mon, 8 Oct 2012 02:31:04 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net
  • References: <k3jo30$2cj$1@smc.vnet.net>

Am Samstag, 22. September 2012 09:08:33 UTC+2 schrieb (unbekannt):
> dear esteemed mathematica experts,
>
> hello there & greetings from malaysia.
>
>  i have been trying to use the compiler on a module to see whether it speeds up the execution or not. kindly see below.
>
> unfortunately, mathematica returns  a couple of error messages.
>
> can anybody help ? will appreciate any assistance from this forum.
>
>
>
> cheers
>
> rajesh
>
>
>
> fC := Compile[{{l, _Real}, {nsteps, _Integer}, {En, _Real} },
>
>   Module[{meV, \[Angstrom], \[Sigma], \[Mu], \[Lambda], k, s,
>
>     scat, \[Delta]},
>
>    meV = 1./(27.3*1000.);
>
>    en = En*meV; \[Angstrom] = 1./0.52; \[Sigma] =
>
>     3.57 \[Angstrom]; \[Epsilon] = 5.9 meV;
>
>    V[r_] = \[Epsilon] ((\[Sigma]/r)^12 - 2 (\[Sigma]/r)^6);
>
>   
>
>    \[Mu] = (mH mKr)/(mH + mKr) /. {mH -> 1836.0, mKr -> 1836.0*136.0};
>
>    (*Print[\[Mu]];*)
>
>    \[Mu] // N;
>
>    \[Lambda] = 2 \[Pi]/Sqrt[2.0 \[Mu] en] // N; k = 2 \[Pi]/\[Lambda];
>
>    (*Print["\[Lambda]= ",\[Lambda]]*);
>
>    s = 5. \[Lambda]/nsteps;
>
>    x = {0.5 \[Sigma], 0.5 \[Sigma] + s}; \[Psi] = {0.0, 0.0001};
>
>    F[r_] = 2. \[Mu]1 (V[r] + 1/(2. \[Mu]1 r^2) l (l + 1) - en);
>
>    Do[\[Psi]m = \[Psi][[n - 1]]; \[Psi]n = \[Psi][[n]];
>
>     xm = x[[n - 1]]; xn = x[[n]];
>
>     xp = xn + s; x = Append[x, xp]; Fn = F[xn]; Fp = F[xp]; Fm = F[xm];
>
>     \[Psi]p = (2. \[Psi]n - \[Psi]m +
>
>         s^2/12. (10. Fn \[Psi]n + Fm \[Psi]m))/(1. - s^2/12. Fp);
>
>     \[Psi] = Append[\[Psi], \[Psi]p], {n, 2, nsteps}];
>
>    \[Psi] = \[Psi]/Max[\[Psi]]; scat = Transpose[{x, \[Psi]}];
>
>    nmax = Length[scat]; {r1, u1} = scat[[nmax]]; {r2, u2} =
>
>     scat[[nmax - 1]];
>
>    K = (r1 u2)/(r2 u1); j1 = j[l, k r1]; j2 = j[l, k r2];
>
>    n1 = n[l, k r1]; n2 = n[l, k r2];
>
>    \[Delta] = ArcTan[(K j1 - j2)/(K n1 - n2)]]]
>
>
>
> fC[2.0, 1000, 2.0] // AbsoluteTiming
>
> CompiledFunction::cfse: Compiled expression 1822.5985401459855` should be a machine-size integer. >>
>
>
>
> CompiledFunction::cfex: Could not complete external evaluation at instruction 7; proceeding with uncompiled evaluation. >>

Hi

Here is some code that works. There are still some lines that are unnecessary but I think it will do. Note, that the code is not complete because it is not clear what you mean after your function K. It seems that you are new 
to the topic, thus I advise to debug your code one line at a tim. Cheers

fC:=Compile[{{l,_Real},{nsteps,_Integer},{En,_Real}},Block[{meV=1./(27. 3*1000.),en,\[Angstrom]=1./0.52,\[Sigma],\[Epsilon],mH=1836.,mKr=249696.,\[Mu],\[Lambda],k,s,x,\[Psi]={0.0,0.0001},scat,vec1,vec2,K},
en=En*meV;
\[Sigma]=3.57 \[Angstrom];
\[Epsilon]=5.9 meV;
\[Mu]=(mH mKr)/(mH+mKr);
\[Lambda]=2 \[Pi]/Sqrt[2.* \[Mu]* en];
k=2 \[Pi]/\[Lambda];
s=5.*\[Lambda]/nsteps;
x={0.5 \[Sigma],0.5 \[Sigma]+s};

Block[{n=2,xn,xm,xp,\[Psi]n,\[Psi]m,\[Psi]p,Fn,Fp,Fm},
Do[
xn=x[[n]];
xp=xn+s;
AppendTo[x,xp];

\[Psi]n=\[Psi][[n]];
\[Psi]m=\[Psi][[n-1]];
xm=x[[n-1]];
Fn=2.*\[Mu]*(\[Epsilon] *((\[Sigma]/xn)^12-2.* (\[Sigma]/xn)^6)+1./(2. \[Mu]* xn^2) l (l+1.)-en);
Fp=2.*\[Mu]*(\[Epsilon] *((\[Sigma]/xp)^12-2.* (\[Sigma]/xp)^6)+1./(2. \[Mu]* xp^2) l (l+1.)-en);
Fm=2.*\[Mu]*(\[Epsilon] *((\[Sigma]/xm)^12-2.* (\[Sigma]/xm)^6)+1./(2. \[Mu]* xm^2) l (l+1.)-en);
\[Psi]p=(2.*\[Psi]n-\[Psi]m+s^2/12. *(10. Fn* \[Psi]n+Fm* \[Psi]m))/(1.-s^2/12.*Fp);
AppendTo[\[Psi],\[Psi]p];

n++
,{nsteps-2}]
];
\[Psi]=\[Psi]/Max[\[Psi]];
scat=Transpose[{x,\[Psi]}];
vec1=scat[[-1]];
vec2=scat[[-2]];
K=(vec1[[1]]* vec2[[2]])/(vec2[[1]]* vec1[[2]])
]
]



  • Prev by Date: Re: Integrating DiracDelta in Mathematica: how to suppress ConditionalExpression
  • Next by Date: Re: Integrating DiracDelta in Mathematica: how to suppress ConditionalExpression
  • Previous by thread: Re: Re: Grouping graphics that are transformed together
  • Next by thread: KnotData not working right