Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ne = 10;
- nl = 20;
- nL = 2*nl;
- nst = 2 (2 nl + 1);
- mvec1 = Table[-(nl - i), {i, 0, nL}]
- mvec = Join[mvec1, mvec1]
- Lfxn[[Mu]_] := Mod[[Mu] - 1, nL] + 1
- sfxn[[Mu]_] := Sign[[Mu] - ( nst/2 + 0.5)]
- kdfxn[i_, j_] := If[i == j, 1, 0]
- Lvec = Table[i, {i, 1, nL}];
- svec = Table[sfxn[i[Mu]], {i[Mu], 1, nst}];
- avec = Table[kdfxn[i, j], {i, 1, ne}, {j, 1, nst}];
- Vc = Block[{l, L, m, m1, p},
- With[{code =
- N[0.5 ThreeJSymbol[{l, 0}, {l, 0}, {L, 0}]^2 ThreeJSymbol[{l,
- m}, {l, m1}, {L, -(m + m1)}] ThreeJSymbol[{l, -p}, {l,
- p - (m + m1)}, {L, (m + m1)}] (2 l + 1)^2 (-1)^(
- p - (m + m1))]},
- Compile[{{l, _Integer}, {L, _Integer}, {m, _Integer}, {m1,
- _Integer}, {p, _Integer}}, code, CompilationTarget -> "C"]]];
- Vex = Block[{l, L, m, m1, p},
- With[{code =
- N[0.5 ThreeJSymbol[{l, 0}, {l, 0}, {L,
- 0}]^2 ThreeJSymbol[{l, (-p)}, {l, m}, {l,
- p - m}] ThreeJSymbol[{l, m1 - m + p}, {l, -m1}, {L,
- m - p}] (2 l + 1)^2 (-1)^(m + m1)]},
- Compile[{{l, _Integer}, {L, _Integer}, {m, _Integer}, {m1,
- _Integer}, {p, _Integer}}, code, CompilationTarget -> "C"]]];
- chmat = With[{Vcc = Vc, Vexx = Vex, kkdfxn = (If[# == #2, 1, 0] &)},
- Compile[{{nl, _Integer}, {nL, _Integer}, {nst, _Integer}, {ne,
- _Integer}, {mvec, _Real}, {Lvec, _Real}, {avec, _Real}, {svec, _Real}},
- Block[{ms, ms1, kf01, L0, tmp1, tmp2, m0, m10, p0, l0, tmp}, Table[
- ms = Compile`GetElement[svec, nms];
- ms1 = Compile`GetElement[svec, nms1];
- L0 = Compile`GetElement[Lvec, nL0];
- l0 = nl;
- tmp = 0.0;
- Do[
- m0 = Compile`GetElement[mvec, nm];
- m10 = Compile`GetElement[mvec, nm1];
- p0 = Compile`GetElement[mvec, nm3];
- tmp1 = Vcc[l0, L0, m0, m10, p0];
- tmp2 = Vexx[l0, L0, m0, m10, p0];
- kf01 = kkdfxn[ms, ms1];
- Do[
- tmp += (tmp1 kf01) Compile`GetElement[avec, j,
- nm3] Compile`GetElement[avec, j, nm3 + nm1 - nm] -
- tmp2 Compile`GetElement[avec, j, nm3] Compile`GetElement[
- avec, j, nm1 - nm + nm3], {j, 1, ne}], {nm1, 1, nst}, {nm,
- 1, nst}, {nm3, 1, nst}];
- , {nms, 1, nst}, {nms1, 1, nst}, {nL0, 1, nL}]]
- , CompilationTarget -> "C",
- CompilationOptions -> {"InlineCompiledFunctions" -> True},
- RuntimeOptions -> "Speed"]];
- chmat[nl, nL, nst, ne, mvec, Lvec, avec, svec]
Add Comment
Please, Sign In to add comment