예제 #1
0
파일: core.py 프로젝트: atztogo/phonopy
    def __init__(self,
                 volumes,
                 electronic_energies,
                 eos='vinet'):
        self._volumes = volumes
        if np.array(electronic_energies).ndim == 1:
            self._electronic_energies = electronic_energies
        else:
            self._electronic_energies = electronic_energies[0]
        self._eos = get_eos(eos)

        self._energy = None
        self._bulk_modulus = None
        self._b_prime = None

        try:
            (self._energy,
             self._bulk_modulus,
             self._b_prime,
             self._volume) = fit_to_eos(volumes,
                                        self._electronic_energies,
                                        self._eos)
        except TypeError:
            msg = ["Failed to fit to \"%s\" equation of states." % eos]
            if len(volumes) < 4:
                msg += ["At least 4 volume points are needed for the fitting."]
            msg += ["Careful choice of volume points is recommended."]
            raise RuntimeError("\n".join(msg))
예제 #2
0
 def __init__(self, volumes, electronic_energies, eos="vinet"):
     self._volumes = volumes
     self._electronic_energies = electronic_energies
     self._eos = get_eos(eos)
     (self._energy, self._bulk_modulus, self._b_prime, self._volume) = fit_to_eos(
         volumes, electronic_energies, self._eos
     )
예제 #3
0
파일: core.py 프로젝트: yw-fang/phonopy
    def __init__(self, volumes, electronic_energies, eos='vinet'):
        self._volumes = volumes
        if electronic_energies.ndim == 1:
            self._electronic_energies = electronic_energies
        else:
            self._electronic_energies = electronic_energies[0]
        self._eos = get_eos(eos)

        (self._energy, self._bulk_modulus, self._b_prime,
         self._volume) = fit_to_eos(volumes, self._electronic_energies,
                                    self._eos)
예제 #4
0
    def __init__(
            self,
            volumes,  # Angstrom^3
            electronic_energies,  # eV
            temperatures,
            cv,  # J/K/mol
            entropy,  # J/K/mol
            fe_phonon,  # kJ/mol
            eos='vinet',
            t_max=None,
            energy_plot_factor=None):
        self._volumes = np.array(volumes)
        self._electronic_energies = np.array(electronic_energies)

        self._all_temperatures = np.array(temperatures)
        self._cv = np.array(cv)
        self._entropy = np.array(entropy)
        self._fe_phonon = np.array(fe_phonon) / EvTokJmol

        self._eos = get_eos(eos)
        self._t_max = t_max
        self._energy_plot_factor = energy_plot_factor

        self._temperatures = None
        self._equiv_volumes = None
        self._equiv_energies = None
        self._equiv_bulk_modulus = None
        self._equiv_parameters = None
        self._free_energies = None
        self._num_elems = None

        self._thermal_expansions = None
        self._cp_numerical = None
        self._volume_entropy_parameters = None
        self._volume_cv_parameters = None
        self._volume_entropy = None
        self._volume_cv = None
        self._cp_polyfit = None
        self._dsdv = None
        self._gruneisen_parameters = None
        self._len = None
예제 #5
0
    def __init__(
            self,
            volumes,  # Angstrom^3
            electronic_energies,  # eV
            temperatures,
            cv,  # J/K/mol
            entropy,  # J/K/mol
            fe_phonon,  # kJ/mol
            eos='vinet',
            t_max=None):

        self._volumes = np.array(volumes)
        self._electronic_energies = np.array(electronic_energies)

        self._temperatures = np.array(temperatures)
        self._cv = np.array(cv)
        self._entropy = np.array(entropy)
        self._fe_phonon = np.array(fe_phonon) / EvTokJmol

        if t_max:
            self._max_t_index = self._get_max_t_index(t_max)
        else:
            self._max_t_index = len(temperatures) - 3

        self._eos = get_eos(eos)
        self._equiv_volumes = []
        self._equiv_energies = []
        self._equiv_bulk_modulus = []
        self._equiv_parameters = []
        self._free_energies = []

        self._thermal_expansions = None
        self._volume_expansions = None
        self._cp_numerical = None
        self._volume_entropy_parameters = None
        self._volume_cv_parameters = None
        self._volume_entropy = None
        self._volume_cv = None
        self._cp_polyfit = None
        self._dsdv = None
        self._gruneisen_parameters = None
예제 #6
0
    def __init__(self,
                 volumes, # Angstrom^3
                 electronic_energies, # eV
                 temperatures,
                 cv,        # J/K/mol
                 entropy,   # J/K/mol
                 fe_phonon, # kJ/mol
                 eos='vinet',
                 t_max=None):

        self._volumes = np.array(volumes)
        self._electronic_energies = np.array(electronic_energies)

        self._temperatures = np.array(temperatures)
        self._cv = np.array(cv)
        self._entropy = np.array(entropy)
        self._fe_phonon = np.array(fe_phonon) / EvTokJmol

        if t_max:
            self._max_t_index = self._get_max_t_index(t_max)
        else:
            self._max_t_index = len(temperatures) - 3

        self._eos = get_eos(eos)
        self._equiv_volumes = []
        self._equiv_energies = []
        self._equiv_bulk_modulus = []
        self._equiv_parameters = []
        self._free_energies = []

        self._thermal_expansions = None
        self._volume_expansions = None
        self._cp_numerical = None
        self._volume_entropy_parameters = None
        self._volume_cv_parameters = None
        self._volume_entropy = None
        self._volume_cv = None
        self._cp_polyfit = None
        self._dsdv = None
        self._gruneisen_parameters = None
예제 #7
0
파일: core.py 프로젝트: atztogo/phonopy
    def __init__(self,
                 volumes,              # Angstrom^3
                 electronic_energies,  # eV
                 temperatures,
                 cv,                   # J/K/mol
                 entropy,              # J/K/mol
                 fe_phonon,            # kJ/mol
                 eos='vinet',
                 t_max=None,
                 energy_plot_factor=None):
        self._volumes = np.array(volumes)
        self._electronic_energies = np.array(electronic_energies)

        self._all_temperatures = np.array(temperatures)
        self._cv = np.array(cv)
        self._entropy = np.array(entropy)
        self._fe_phonon = np.array(fe_phonon) / EvTokJmol

        self._eos = get_eos(eos)
        self._t_max = t_max
        self._energy_plot_factor = energy_plot_factor

        self._temperatures = None
        self._equiv_volumes = None
        self._equiv_energies = None
        self._equiv_bulk_modulus = None
        self._equiv_parameters = None
        self._free_energies = None
        self._num_elems = None

        self._thermal_expansions = None
        self._cp_numerical = None
        self._volume_entropy_parameters = None
        self._volume_cv_parameters = None
        self._volume_entropy = None
        self._volume_cv = None
        self._cp_polyfit = None
        self._dsdv = None
        self._gruneisen_parameters = None
        self._len = None
예제 #8
0
    def __init__(self, volumes, electronic_energies, eos='vinet'):
        self._volumes = volumes
        if np.array(electronic_energies).ndim == 1:
            self._electronic_energies = electronic_energies
        else:
            self._electronic_energies = electronic_energies[0]
        self._eos = get_eos(eos)

        self._energy = None
        self._bulk_modulus = None
        self._b_prime = None

        try:
            (self._energy, self._bulk_modulus, self._b_prime,
             self._volume) = fit_to_eos(volumes, self._electronic_energies,
                                        self._eos)
        except TypeError:
            msg = ["Failed to fit to \"%s\" equation of states." % eos]
            if len(volumes) < 4:
                msg += ["At least 4 volume points are needed for the fitting."]
            msg += ["Careful choice of volume points is recommended."]
            raise RuntimeError("\n".join(msg))
예제 #9
0
    def __init__(self, volumes, energies, eos="vinet"):
        """Init method.

        volumes : array_like
            Unit cell volumes where energies are obtained.
            shape=(volumes, ), dtype='double'.
        energies : array_like
            Energies obtained at volumes.
            shape=(volumes, ), dtype='double'.
        eos : str
            Identifier of equation of states function.

        """
        self._volumes = volumes
        if np.array(energies).ndim == 1:
            self._energies = energies
        else:
            self._energies = energies[0]
        self._eos = get_eos(eos)

        self._energy = None
        self._bulk_modulus = None
        self._b_prime = None

        try:
            (
                self._energy,
                self._bulk_modulus,
                self._b_prime,
                self._volume,
            ) = fit_to_eos(volumes, self._energies, self._eos)
        except TypeError:
            msg = ['Failed to fit to "%s" equation of states.' % eos]
            if len(volumes) < 4:
                msg += ["At least 4 volume points are needed for the fitting."]
            msg += ["Careful choice of volume points is recommended."]
            raise RuntimeError("\n".join(msg))
예제 #10
0
 def ev(volume, *p):
     return get_eos('murnaghan')(volume, *p)
예제 #11
0
 def ev(volume, *p):
     return get_eos('vinet')(volume, *p)
예제 #12
0
    def __init__(
        self,
        volumes,  # angstrom^3
        electronic_energies,  # eV
        temperatures,  # K
        cv,  # J/K/mol
        entropy,  # J/K/mol
        fe_phonon,  # kJ/mol
        eos="vinet",
        t_max=None,
        energy_plot_factor=None,
    ):
        """Init method.

        Parameters
        ----------
        volumes: array_like
            Unit cell volumes (V) in angstrom^3.
            dtype='double'
            shape=(volumes,)
        electronic_energies: array_like
            Electronic energies (U_el) or electronic free energies (F_el) in eV.
            It is assumed as formar if ndim==1 and latter if ndim==2.
            dtype='double'
            shape=(volumes,) or (temperatuers, volumes)
        temperatures: array_like
            Temperatures ascending order (T) in K.
            dtype='double'
            shape=(temperatures,)
        cv: array_like
            Phonon Heat capacity at constant volume in J/K/mol.
            dtype='double'
            shape=(temperatuers, volumes)
        entropy: array_like
            Phonon entropy at constant volume (S_ph) in J/K/mol.
            dtype='double'
            shape=(temperatuers, volumes)
        fe_phonon: array_like
            Phonon Helmholtz free energy (F_ph) in kJ/mol.
            dtype='double'
            shape=(temperatuers, volumes)
        eos: str
            Equation of state used for fitting F vs V.
            'vinet', 'murnaghan' or 'birch_murnaghan'.
        t_max: float
            Maximum temperature to be calculated. This has to be not
            greater than the temperature of the third element from the
            end of 'temperatre' elements. If max_t=None, the temperature
            of the third element from the end is used.
        energy_plot_factor: float
            This value is multiplied to energy like values only in plotting.

        """
        self._volumes = np.array(volumes)
        self._electronic_energies = np.array(electronic_energies)

        self._all_temperatures = np.array(temperatures)
        self._cv = np.array(cv)
        self._entropy = np.array(entropy)
        self._fe_phonon = np.array(fe_phonon) / EvTokJmol

        self._eos = get_eos(eos)
        self._t_max = t_max
        self._energy_plot_factor = energy_plot_factor

        self._temperatures = None
        self._equiv_volumes = None
        self._equiv_energies = None
        self._equiv_bulk_modulus = None
        self._equiv_parameters = None
        self._free_energies = None
        self._num_elems = None

        self._thermal_expansions = None
        self._cp_numerical = None
        self._volume_entropy_parameters = None
        self._volume_cv_parameters = None
        self._volume_entropy = None
        self._volume_cv = None
        self._cp_polyfit = None
        self._dsdv = None
        self._gruneisen_parameters = None
        self._len = None