def calc_sp(self, dry_run=False):
        """
        calculate single point energy
        """
        if self.is_finished_scf:
            logger.info("SP has been calced.")
            self._grouping_fragments()
            self._switch_fragments()
            return

        if self.is_finished_prescf != True:
            self.calc_preSCF(dry_run)

        self.cd_work_dir("calc SP")
        self.check_bump_of_atoms()

        self._setup_pdf()
        # self.output_xyz("{}/model.xyz".format(self.name))
        self.pdfparam.step_control = "guess scf"
        self.save()

        pdfsim = pdf.PdfSim()
        pdfsim.sp(
            self.pdfparam,
            workdir=self.work_dir,
            db_path=self.db_path,
            dry_run=dry_run,
            cmd_archive=self._cmds["archive"],
        )

        self._cache.pop("pdfparam")
        self.is_finished_scf = True

        self._grouping_fragments()
        self._switch_fragments()
        self.save()

        self.restore_cwd()