diff --git a/source/source_esolver/esolver.cpp b/source/source_esolver/esolver.cpp index 50fdb97be7..2d89673313 100644 --- a/source/source_esolver/esolver.cpp +++ b/source/source_esolver/esolver.cpp @@ -206,41 +206,45 @@ ESolver* init_esolver(const Input_para& inp, UnitCell& ucell) return new ESolver_GetS(); } } - if (PARAM.globalv.gamma_only_local) + else if (PARAM.inp.deepks_out_base != "none") { - if (PARAM.inp.deepks_out_base != "none") + if (PARAM.globalv.gamma_only_local) { return new ESolver_DoubleXC(); } + else if (PARAM.inp.nspin < 4) + { + return new ESolver_DoubleXC, double>(); + } else { - return new ESolver_KS_LCAO(); + return new ESolver_DoubleXC, std::complex>(); } } - else if (PARAM.inp.nspin < 4) + else if (PARAM.inp.dm_to_rho) { - if (PARAM.inp.dm_to_rho) + if (PARAM.globalv.gamma_only_local) { - return new ESolver_DM2rho, double>(); + ModuleBase::WARNING_QUIT("ESolver", "dm_to_rho is not implemented for gamma_only"); } - else if (PARAM.inp.deepks_out_base != "none") + else if (PARAM.inp.nspin < 4) { - return new ESolver_DoubleXC, double>(); + return new ESolver_DM2rho, double>(); } else { - return new ESolver_KS_LCAO, double>(); + return new ESolver_DM2rho, std::complex>(); } } else { - if (PARAM.inp.dm_to_rho) + if (PARAM.globalv.gamma_only_local) { - return new ESolver_DM2rho, std::complex>(); + return new ESolver_KS_LCAO(); } - else if (PARAM.inp.deepks_out_base != "none") + else if (PARAM.inp.nspin < 4) { - return new ESolver_DoubleXC, std::complex>(); + return new ESolver_KS_LCAO, double>(); } else {