level 2
麦克斯韦的妖😈
楼主
请求各位大佬帮忙,万分感谢
代码功能:对Eigensystem函数进行编译,求解矩阵特征值
所遇问题:编译时开并行化就出错 (错误提示,附图)
Parallelization -> True 出错
Parallelization -> False 不报错

附代码:
ClearAll["Global`*"]
Needs["CompiledFunctionTools`"]
{eval, evec} = With[{v1 = 5.922,
v2 = 1.25,
v3 = 0.1974,
m0 = -0.0047,
mp = 15,
mz = 0.15,
\[Mu]B = 5.788*10.^-5,
gbpd = 33.75,
gbmd = 11.25},
Compile[{{bx, _Real, 0}, {kx, _Real, 0}, {ky, _Real,
0}, {kz, _Real, 0}}, #, Parallelization -> True,
CompilationTarget -> "C", RuntimeAttributes -> {Listable}]] & /@
Eigensystem[{{m0 + (kx^2 + ky^2) mp +
kz^2 mz, -(1/2) bx gbpd \[Mu]B, kx v1 - I ky v2,
kz v3}, {-(1/2) bx gbpd \[Mu]B, m0 + (kx^2 + ky^2) mp + kz^2 mz,
kz v3, -kx v1 - I ky v2}, {kx v1 + I ky v2,
kz v3, -m0 - (kx^2 + ky^2) mp -
kz^2 mz, -(1/2) bx gbmd \[Mu]B}, {kz v3, -kx v1 +
I ky v2, -(1/2) bx gbmd \[Mu]B, -m0 - (kx^2 + ky^2) mp -
kz^2 mz}}];
n = 30;
bx = 5.;
dk = 6.283/n;
kk = Range[-0.12, 0.12, dk];
surface = Tuples[kk, 3];
range = Length[surface];
bbx = ConstantArray[bx, range];
data = Partition[Flatten[Transpose[{bbx, surface}]], 4];
eval @@ Transpose[data]
2020年12月28日 05点12分
1
代码功能:对Eigensystem函数进行编译,求解矩阵特征值
所遇问题:编译时开并行化就出错 (错误提示,附图)
Parallelization -> True 出错
Parallelization -> False 不报错

附代码:ClearAll["Global`*"]
Needs["CompiledFunctionTools`"]
{eval, evec} = With[{v1 = 5.922,
v2 = 1.25,
v3 = 0.1974,
m0 = -0.0047,
mp = 15,
mz = 0.15,
\[Mu]B = 5.788*10.^-5,
gbpd = 33.75,
gbmd = 11.25},
Compile[{{bx, _Real, 0}, {kx, _Real, 0}, {ky, _Real,
0}, {kz, _Real, 0}}, #, Parallelization -> True,
CompilationTarget -> "C", RuntimeAttributes -> {Listable}]] & /@
Eigensystem[{{m0 + (kx^2 + ky^2) mp +
kz^2 mz, -(1/2) bx gbpd \[Mu]B, kx v1 - I ky v2,
kz v3}, {-(1/2) bx gbpd \[Mu]B, m0 + (kx^2 + ky^2) mp + kz^2 mz,
kz v3, -kx v1 - I ky v2}, {kx v1 + I ky v2,
kz v3, -m0 - (kx^2 + ky^2) mp -
kz^2 mz, -(1/2) bx gbmd \[Mu]B}, {kz v3, -kx v1 +
I ky v2, -(1/2) bx gbmd \[Mu]B, -m0 - (kx^2 + ky^2) mp -
kz^2 mz}}];
n = 30;
bx = 5.;
dk = 6.283/n;
kk = Range[-0.12, 0.12, dk];
surface = Tuples[kk, 3];
range = Length[surface];
bbx = ConstantArray[bx, range];
data = Partition[Flatten[Transpose[{bbx, surface}]], 4];
eval @@ Transpose[data]