Skip to content

Commit 6af97d7

Browse files
author
dyzheng
committed
Fix(xc): align PW DeltaSpin sigma_y sign with LCAO path
PW basis had incorrect sign for the off-diagonal (sigma_y) coefficients in the DeltaSpin Hamiltonian contribution: PW (before): [1]=(+λ_y) [2]=(-λ_y) ← WRONG LCAO (fixed): [1]=(-λ_y) [2]=(+λ_y) ← CORRECT For σ_y = [[0,-i],[i,0]]: H_{up,dn} = λ_x·σ_x + λ_y·σ_y = λ_x - i·λ_y → coeff imag = -λ_y H_{dn,up} = λ_x·σ_x + λ_y·σ_y = λ_x + i·λ_y → coeff imag = +λ_y Files fixed: - op_pw_proj.cpp: onsite projection DeltaSpin coefficient - force_op.cpp: DeltaSpin force kernel coefficient - stress_op.cpp: DeltaSpin stress kernel coefficient
1 parent 08bd7fa commit 6af97d7

3 files changed

Lines changed: 9 additions & 9 deletions

File tree

source/source_pw/module_pwdft/kernels/force_op.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -406,9 +406,9 @@ struct cal_force_nl_op<FPTYPE, base_device::DEVICE_CPU>
406406
int iat = iat0 + ia;
407407
int sum = sum0 + ia * nproj;
408408
const std::complex<FPTYPE> coefficients0(lambda[iat*3+2], 0.0);
409-
const std::complex<FPTYPE> coefficients1(lambda[iat*3] , lambda[iat*3+1]);
410-
const std::complex<FPTYPE> coefficients2(lambda[iat*3] , -1 * lambda[iat*3+1]);
411-
const std::complex<FPTYPE> coefficients3(-1 * lambda[iat*3+2], 0.0);
409+
const std::complex<FPTYPE> coefficients1(lambda[iat*3] , -lambda[iat*3+1]);
410+
const std::complex<FPTYPE> coefficients2(lambda[iat*3] , lambda[iat*3+1]);
411+
const std::complex<FPTYPE> coefficients3(-lambda[iat*3+2], 0.0);
412412
for (int ib = 0; ib < nbands_occ; ib++)
413413
{
414414
FPTYPE local_force[3] = {0, 0, 0};

source/source_pw/module_pwdft/kernels/stress_op.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -359,9 +359,9 @@ struct cal_stress_nl_op<FPTYPE, base_device::DEVICE_CPU>
359359
if (npol == 2)
360360
{
361361
const std::complex<FPTYPE> coefficients0(lambda[iat*3+2], 0.0);
362-
const std::complex<FPTYPE> coefficients1(lambda[iat*3] , lambda[iat*3+1]);
363-
const std::complex<FPTYPE> coefficients2(lambda[iat*3] , -1 * lambda[iat*3+1]);
364-
const std::complex<FPTYPE> coefficients3(-1 * lambda[iat*3+2], 0.0);
362+
const std::complex<FPTYPE> coefficients1(lambda[iat*3] , -lambda[iat*3+1]);
363+
const std::complex<FPTYPE> coefficients2(lambda[iat*3] , lambda[iat*3+1]);
364+
const std::complex<FPTYPE> coefficients3(-lambda[iat*3+2], 0.0);
365365
for (int ib = 0; ib < nbands_occ; ib++)
366366
{
367367
const int ib2 = ib * 2;

source/source_pw/module_pwdft/op_pw_proj.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,9 @@ void OnsiteProj<OperatorPW<T, Device>>::cal_ps_delta_spin(const int npol, const
163163
for(int iat=0;iat<this->ucell->nat;iat++)
164164
{
165165
tmp_lambda_coeff[iat * 4] = std::complex<double>(lambda[iat][2], 0.0);
166-
tmp_lambda_coeff[iat * 4 + 1] = std::complex<double>(lambda[iat][0], lambda[iat][1]);
167-
tmp_lambda_coeff[iat * 4 + 2] = std::complex<double>(lambda[iat][0], -1 * lambda[iat][1]);
168-
tmp_lambda_coeff[iat * 4 + 3] = std::complex<double>(-1 * lambda[iat][2], 0.0);
166+
tmp_lambda_coeff[iat * 4 + 1] = std::complex<double>(lambda[iat][0], -lambda[iat][1]);
167+
tmp_lambda_coeff[iat * 4 + 2] = std::complex<double>(lambda[iat][0], lambda[iat][1]);
168+
tmp_lambda_coeff[iat * 4 + 3] = std::complex<double>(-lambda[iat][2], 0.0);
169169
}
170170
}
171171
syncmem_complex_h2d_op()(this->lambda_coeff, tmp_lambda_coeff.data(), this->ucell->nat * 4);

0 commit comments

Comments
 (0)