Exemplo n.º 1
0
    def __init__(
            self,
            # solvation related arguments:
            cavity,
            dielectric,
            interactions,
            # RealSpaceHamiltonian arguments:
            gd,
            finegd,
            nspins,
            collinear,
            setups,
            timer,
            xc,
            world,
            redistributor,
            vext=None,
            psolver=None,
            stencil=3):
        """Constructor of SolvationRealSpaceHamiltonian class.

        Additional arguments not present in RealSpaceHamiltonian:
        cavity       -- A Cavity instance.
        dielectric   -- A Dielectric instance.
        interactions -- A list of Interaction instances.
        """
        self.cavity = cavity
        self.dielectric = dielectric
        self.interactions = interactions
        cavity.set_grid_descriptor(finegd)
        dielectric.set_grid_descriptor(finegd)
        for ia in interactions:
            ia.set_grid_descriptor(finegd)
        if psolver is None:
            psolver = WeightedFDPoissonSolver()
        psolver.set_dielectric(self.dielectric)
        self.gradient = None
        RealSpaceHamiltonian.__init__(self,
                                      gd,
                                      finegd,
                                      nspins,
                                      collinear,
                                      setups,
                                      timer,
                                      xc,
                                      world,
                                      vext=vext,
                                      psolver=psolver,
                                      stencil=stencil,
                                      redistributor=redistributor)

        for ia in interactions:
            setattr(self, 'e_' + ia.subscript, None)
        self.new_atoms = None
        self.vt_ia_g = None
        self.e_el_free = None
        self.e_el_extrapolated = None
Exemplo n.º 2
0
    def __init__(self,
                 cavity,
                 dielectric,
                 interactions,
                 gd,
                 finegd,
                 nspins,
                 setups,
                 timer,
                 xc,
                 world,
                 redistributor,
                 vext=None,
                 psolver=None,
                 stencil=3,
                 collinear=None):
        """Constructor of SJM_RealSpaceHamiltonian class.


        Notes
        -----
        The only difference to SolvationRealSpaceHamiltonian is the
        possibility to perform a dipole correction

        """

        self.cavity = cavity
        self.dielectric = dielectric
        self.interactions = interactions
        cavity.set_grid_descriptor(finegd)
        dielectric.set_grid_descriptor(finegd)
        for ia in interactions:
            ia.set_grid_descriptor(finegd)

        if psolver is None:
            psolver = WeightedFDPoissonSolver()
            self.dipcorr = False
        elif isinstance(psolver, dict):
            psolver = SJMDipoleCorrection(WeightedFDPoissonSolver(),
                                          psolver['dipolelayer'])
            self.dipcorr = True

        if self.dipcorr:
            psolver.poissonsolver.set_dielectric(self.dielectric)
        else:
            psolver.set_dielectric(self.dielectric)

        self.gradient = None

        RealSpaceHamiltonian.__init__(self,
                                      gd,
                                      finegd,
                                      nspins,
                                      collinear,
                                      setups,
                                      timer,
                                      xc,
                                      world,
                                      vext=vext,
                                      psolver=psolver,
                                      stencil=stencil,
                                      redistributor=redistributor)

        for ia in interactions:
            setattr(self, 'e_' + ia.subscript, None)
        self.new_atoms = None
        self.vt_ia_g = None
        self.e_el_free = None
        self.e_el_extrapolated = None