I want to numerically integrate function berrycur
over kx and ky. The definition of berrycur
is given at the end of the question.
The plot of berrycur[kx,ky,1]
is shown as follows:
and numerical integration
NIntegrate[
berrycur[kx, ky, 1], {kx, -((2 \π)/Sqrt[3]), (2 \π)/Sqrt[3]}, {ky, 0, (4 \π)/3}]
gives error message
NIntegrate::slwcon: Numerical integration converging too slowly; suspect one of the following: singularity, value of the integration is 0, highly oscillatory integrand, or WorkingPrecision too small. >>
The correct answer should be zero. Since the function is abnormal at some places, the error message is forgivable.
Then I define another function berrycurtmp
which is
berrycursum[kx_?NumericQ, ky_?NumericQ] =
berrycur[kx, ky, 1] + berrycur[kx, ky, 2]
the plot of berrycursum
is smooth now as shown in
But the numerical integration
NIntegrate[
berrycur[kx, ky, 1], {kx, -((2 \π)/Sqrt[3]), (2 \π)/Sqrt[3]}, {ky, 0, (4 \π)/3}]
still gives error message
NIntegrate::slwcon: Numerical integration converging too slowly; suspect one of the following: singularity, value of the integration is 0, highly oscillatory integrand, or WorkingPrecision too small. >>
why? And how could we get the correct answer zero?? And how to speed up this numerical integration?
The definition of berrycur
is here
Clear[h]
h[kx_, ky_] := {{0.01` +
0.1` (-4 Cos[1.5` ky] Sin[0.8660254037844386` kx] +
2 Sin[1.7320508075688772` kx]),
1 + 2 Cos[0.8660254037844386` kx] Cos[1.5` ky] -
2 I Cos[0.8660254037844386` kx] Sin[1.5` ky], 0,
0}, {1 + 2 Cos[0.8660254037844386` kx] Cos[1.5` ky] +
2 I Cos[0.8660254037844386` kx] Sin[1.5` ky], -0.01` -
0.1` (-4 Cos[1.5` ky] Sin[0.8660254037844386` kx] +
2 Sin[1.7320508075688772` kx]), 0, 0}, {0, 0,
0.01` - 0.1` (-4 Cos[1.5` ky] Sin[0.8660254037844386` kx] +
2 Sin[1.7320508075688772` kx]),
1 + 2 Cos[0.8660254037844386` kx] Cos[1.5` ky] -
2 I Cos[0.8660254037844386` kx] Sin[1.5` ky]}, {0, 0,
1 + 2 Cos[0.8660254037844386` kx] Cos[1.5` ky] +
2 I Cos[0.8660254037844386` kx] Sin[1.5` ky], -0.01` +
0.1` (-4 Cos[1.5` ky] Sin[0.8660254037844386` kx] +
2 Sin[1.7320508075688772` kx])}};
dim = Length@h[1, 1];
Clear[hpar1, hpar2];
hpar1[kx_, ky_] = D[h[kx, ky], kx];
hpar2[kx_, ky_] = D[h[kx, ky], ky];
Clear[purifyeigs];
purifyeigs[eigs_] :=
Transpose@Sort@Transpose@{Re[eigs[[1]]], eigs[[2]]};
berrycur[kxkx_?NumericQ, kyky_?NumericQ, i_] := Module[{eigs},
eigs = purifyeigs@Eigensystem[h[kxkx, kyky]];
Im@Sum[((Conjugate[eigs[[2, i]]].hpar1[kxkx, kyky].eigs[[2,
j]])*(Conjugate[eigs[[2, j]]].hpar2[kxkx, kyky].eigs[[2,
i]]) - (Conjugate[eigs[[2, i]]].hpar2[kxkx, kyky].eigs[[2,
j]])*(Conjugate[eigs[[2, j]]].hpar1[kxkx, kyky].eigs[[2,
i]]))/(eigs[[1, i]] - eigs[[1, j]])^2, {j,
DeleteCases[Range[1, dim], i]}]]