The Mathematica code used for the analysis of the convergence of the Collision integral,
, in Equation (
43) is provided below.
(* Definition of terms in the integrand*)
-------------------------------------------
perp[k_] := {[email protected], k[[2]], 0}
par[k_] := {-k[[2]], [email protected], 0}
norm[k_] := Sqrt[k[[1]]^2 + k[[2]]^2 + k[[3]]^2]
(*Lkpq[k_,p_,q_]:=(par[p].perp[q](perp[q]-perp[p]).(perp[k] + \
perp[q]+perp[p]))/(2*[email protected]@k [email protected]@p [email protected]@q)*)
Lkpq[k_, p_,
q_] := (par[p].perp[q] ( [email protected]@q - [email protected]@p) (
[email protected]@k + [email protected]@p + [email protected]@q))/(2*
[email protected]@k [email protected]@p [email protected]@q)
FullSimplify[Lkpq[{kx, ky, kz}, {px, py, pz}, {qx, qy, qz}]]
alpha0 = 3;
beta0 = 1;
ee[k_, alpha_: alpha0,
beta_: beta0] := ([email protected]@k)^-alpha k[[3]]^-beta
I1b[k_, p_, q_, alpha_: 3, beta_: 1] :=
Lkpq[k, p, q]^2 ([email protected] [email protected] - [email protected] [email protected] - [email protected] [email protected])
Simplify[I1b[{kx, ky, kz}, {px, py, pz}, {qx, qy, qz}]]
I2b[{kx_, ky_, kz_}, {px_, py_, pz_}, {qx_, qy_, qz_}] :=
2 I1b[{px, py, pz}, {kx, ky, kz}, {qx, qy, qz}]
I0b[{kx_, ky_, kz_}, {px_, py_, pz_}, {qx_, qy_, qz_}] :=
I1b[{kx, ky, kz}, {px, py, pz}, {qx, qy, qz}] -
I2b[{kx, ky, kz}, {px, py, pz}, {qx, qy, qz}]
(*Define surface of integration*)
-------------------------------------
surfpz[k_,
p_] := ([email protected][p] k[[3]]/
[email protected][k]) (Sqrt[(k[[1]] - p[[1]])^2 + (k[[2]] - p[[2]])^2] -
[email protected][k])/(Sqrt[(k[[1]] - p[[1]])^2 + (k[[2]] - p[[2]])^2] -
[email protected][p])
surf[{kx_, ky_, kz_}, {px_, py_, pz_}] :=
pz == surfpz[{kx, ky, kz}, {px, py, 0}]
(*Definition of the Jacobian, computing Jacobian*)
-----------------------------------------------------
jaco[{kx_, ky_, kz_}, {px_, py_,
pz_}] := \[Sqrt](1 + D[surfpz[{kx, ky, kz}, {px, py, 0}], px]^2 +
D[surfpz[{kx, ky, kz}, {px, py, 0}], py]^2)
Simplify[jaco[{kx, ky, kz}, {px, py, 0}]]
(*Display surface of integration and value ofsub- integrand*)
-----------------------------------------------------
windowx = -10;
windowy = -10;
With[{kx = 20, ky = 20, kz = 1},
SliceContourPlot3D[
[email protected]@I0b[{kx, ky, kz}, {px, py, pz}, {kx - px, ky - py,
kz - pz}],
surf[{kx, ky, kz}, {px, py, pz}] == 0, {px, -kx + windowx,
kx - windowx}, {py, -ky + windowy, ky - windowy}, {pz, -4, 4},
ColorFunction -> "Rainbow", PlotLegends -> All,
AxesLabel -> {px, py, "pz"}]]
With[{kx = 20, ky = 20, kz = 1},
SliceContourPlot3D[
I0b[{kx, ky, kz}, {px, py, pz}, {kx - px, ky - py, kz - pz}],
surf[{kx, ky, kz}, {px, py, pz}] == 0, {px, -kx + windowx,
kx - windowx}, {py, -ky + windowy, ky - windowy}, {pz, -4, 4},
ColorFunction -> "Rainbow", PlotLegends -> All,
AxesLabel -> {px, py, "pz"}]]
(*Define the integrand, set it to zero at singular points which are outside
the region of validity of AT (R-RHD)*)
--------------------------------------------------------------------------
tolerance1 = 0.5;
tolerance2 = 0.5;
kz = 1;
I0bjacos[{kx_, ky_, kz_}, {px_, py_, pz_}] :=
If[
Boole[Abs[Sqrt[(kx - px)^2 + (ky - py)^2] - Sqrt[(px^2 + py^2)]] >
tolerance1]
Boole[
Abs[Sqrt[(kx - px)^2 + (ky - py)^2] - Sqrt[(kx^2 + ky^2)]] >
tolerance2]
Boole[Abs[Sqrt[(px^2 + py^2)]] > tolerance1]
Boole[Abs[Sqrt[(kx - px)^2 + (ky - py)^2]] > tolerance1]
Boole[Abs[kz - surfpz[{kx, ky, kz}, {px, py, 0}]] > tolerance1] ==
0, 0, I0b[{kx, ky, kz}, {px, py,
surfpz[{kx, ky, kz}, {px, py, 0}]}, {kx - px, ky - py,
kz - surfpz[{kx, ky, kz}, {px, py, 0}]}] jacos[{kx, ky, kz}, {px,
py, 0}]]
I0bjacosFULL[{kx_, ky_, kz_}, {px_, py_, pz_}] :=
I0b[{kx, ky, kz}, {px, py,
surfpz[{kx, ky, kz}, {px, py, 0}]}, {kx - px, ky - py,
kz - surfpz[{kx, ky, kz}, {px, py, 0}]}] jacos[{kx, ky, kz}, {px,
py, 0}]
(*Perform the numerical integration and then display*)
-----------------------------------------------------------------------
txy =
Table[NIntegrate[
I0bjacos[{kx, ky, kz}, {px, py, 0}], {px, 10, 150}, {py, 10, 150},
Method -> {"AdaptiveMonteCarlo", "MaxPoints" -> 100000},
WorkingPrecision -> MachinePrecision, MaxRecursion -> 100], {kx,
10, 150, 20}, {ky, 10, 150, 20}]
(*txy = Table[
NIntegrate[
I0bjacos[{kx, ky, kz}, {px, py, 0}], {px, 10, 150}, {py, 10, 150},
Method -> {"GlobalAdaptive", "MaxErrorIncreases" -> 3000},
WorkingPrecision -> MachinePrecision, MaxRecursion -> 30], {kx, 10,
150, 20}, {ky, 10, 150, 20}]*)
ListPlot3D[txy, PlotLegends -> Automatic,
AxesLabel -> {kx, ky, "I(kx,ky)"}, ClippingStyle -> None,
DataRange -> {{10, 150}, {10, 150}}]