From 6649d14455e670f5242a03a7793673e0e511a2e6 Mon Sep 17 00:00:00 2001 From: Chen Nuo <49788094+Cstandardlib@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:12:12 +0800 Subject: [PATCH] Replace goto with while loop in occupy.cpp --- source/source_estate/occupy.cpp | 62 ++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/source/source_estate/occupy.cpp b/source/source_estate/occupy.cpp index d9d8bebf9b..95fd4a83a4 100644 --- a/source/source_estate/occupy.cpp +++ b/source/source_estate/occupy.cpp @@ -318,36 +318,40 @@ void Occupy::efermig(const ModuleBase::matrix& ekb, //================= // call sumkg int changetime = 0; -sumkg: - - const double sumkup = Occupy::sumkg(ekb, nband, nks, wk, smearing_sigma, ngauss, eup, is, isk); - const double sumklw = Occupy::sumkg(ekb, nband, nks, wk, smearing_sigma, ngauss, elw, is, isk); - - if (changetime > 1000) - { - std::cout << " SOMETHING WRONG: " << std::endl; - std::cout << " is = " << is << std::endl; - std::cout << " eup = " << eup << std::endl; - std::cout << " elw = " << elw << std::endl; - std::cout << " nband = " << nband << std::endl; - std::cout << " nelec = " << nelec << std::endl; - std::cout << " sumkup = " << sumkup << std::endl; - std::cout << " sumklw = " << sumklw << std::endl; - std::cout << " sumkup - nelec = " << sumkup - nelec << std::endl; - std::cout << " sumklw - nelec = " << sumklw - nelec << std::endl; - ModuleBase::WARNING_QUIT("Occupy::efermig", "ERROS in SMEARING"); - } - else if ((sumkup - nelec) < -eps) + while (true) { - eup += 2 * smearing_sigma; - ++changetime; - goto sumkg; - } - else if ((sumklw - nelec) > eps) - { - elw -= 2 * smearing_sigma; - ++changetime; - goto sumkg; + const double sumkup = Occupy::sumkg(ekb, nband, nks, wk, smearing_sigma, ngauss, eup, is, isk); + const double sumklw = Occupy::sumkg(ekb, nband, nks, wk, smearing_sigma, ngauss, elw, is, isk); + + if (changetime > 1000) + { + std::cout << " SOMETHING WRONG: " << std::endl; + std::cout << " is = " << is << std::endl; + std::cout << " eup = " << eup << std::endl; + std::cout << " elw = " << elw << std::endl; + std::cout << " nband = " << nband << std::endl; + std::cout << " nelec = " << nelec << std::endl; + std::cout << " sumkup = " << sumkup << std::endl; + std::cout << " sumklw = " << sumklw << std::endl; + std::cout << " sumkup - nelec = " << sumkup - nelec << std::endl; + std::cout << " sumklw - nelec = " << sumklw - nelec << std::endl; + ModuleBase::WARNING_QUIT("Occupy::efermig", "ERROS in SMEARING"); + // no need to break; quit directly + } + else if ((sumkup - nelec) < -eps) + { + eup += 2 * smearing_sigma; + ++changetime; + } + else if ((sumklw - nelec) > eps) + { + elw -= 2 * smearing_sigma; + ++changetime; + } + else + { + break; + } } for (int i = 0; i < maxiter; i++)