From f12260fd4a4bd84ce5586c3f8c7986c927a832fd Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Sat, 8 Feb 2025 20:08:58 +0900 Subject: [PATCH 1/6] Refactoring of fc solver --- phono3py/api_phono3py.py | 2 +- phono3py/interface/fc_calculator.py | 99 +++++++++++++++++++---------- phono3py/phonon3/fc3.py | 10 ++- 3 files changed, 76 insertions(+), 35 deletions(-) diff --git a/phono3py/api_phono3py.py b/phono3py/api_phono3py.py index fb18fe6c..2c106a77 100644 --- a/phono3py/api_phono3py.py +++ b/phono3py/api_phono3py.py @@ -1510,7 +1510,7 @@ def produce_fc3( self._dataset, self._symmetry, is_compact_fc=is_compact_fc, - verbose=self._log_level, + verbose=self._log_level > 0, ) if symmetrize_fc3r: if is_compact_fc: diff --git a/phono3py/interface/fc_calculator.py b/phono3py/interface/fc_calculator.py index ac2ec11b..a0ec4b2b 100644 --- a/phono3py/interface/fc_calculator.py +++ b/phono3py/interface/fc_calculator.py @@ -39,12 +39,68 @@ from typing import Optional, Union import numpy as np +from phonopy.interface.fc_calculator import get_fc_solver from phonopy.interface.symfc import SymfcFCSolver from phonopy.structure.atoms import PhonopyAtoms from phonopy.structure.cells import Primitive from phonopy.structure.symmetry import Symmetry +def get_fc3_solver( + supercell: PhonopyAtoms, + primitive: Primitive, + dataset: dict, + fc_calculator: Optional[str] = None, + fc_calculator_options: Optional[str] = None, + is_compact_fc: bool = False, + symmetry: Optional[Symmetry] = None, + log_level: int = 0, +): + """Return force constants solver for fc3. + + Parameters + ---------- + supercell : PhonopyAtoms + Supercell + primitive : Primitive + Primitive cell + dataset : dict, optional + Dataset that contains displacements, forces, and optionally + energies. Default is None. + fc_calculator : str, optional + Currently only 'alm' is supported. Default is None, meaning invoking + 'alm'. + fc_calculator_options : str, optional + This is arbitrary string. + is_compact_fc : bool, optional + If True, force constants are returned in the compact form. + symmetry : Symmetry, optional + Symmetry of supercell. This is used for the traditional and symfc FC + solver. Default is None. + log_level : integer or bool, optional + Verbosity level. False or 0 means quiet. True or 1 means normal level + of log to stdout. 2 gives verbose mode. + + Returns + ------- + (fc2, fc3) : tuple[ndarray] + 2nd and 3rd order force constants. + + """ + fc_solver = get_fc_solver( + supercell, + dataset, + primitive=primitive, + fc_calculator=fc_calculator, + fc_calculator_options=fc_calculator_options, + orders=[2, 3], + is_compact_fc=is_compact_fc, + symmetry=symmetry, + log_level=log_level, + ) + return fc_solver + + def get_fc3( supercell: PhonopyAtoms, primitive: Primitive, @@ -85,38 +141,17 @@ def get_fc3( 2nd and 3rd order force constants. """ - if fc_calculator == "alm": - from phonopy.interface.alm import run_alm - - fc = run_alm( - supercell, - primitive, - displacements, - forces, - 2, - options=fc_calculator_options, - is_compact_fc=is_compact_fc, - log_level=log_level, - ) - return fc[2], fc[3] - elif fc_calculator == "symfc": - from phonopy.interface.symfc import run_symfc - - fc = run_symfc( - supercell, - primitive, - displacements, - forces, - orders=[2, 3], - is_compact_fc=is_compact_fc, - symmetry=symmetry, - options=fc_calculator_options, - log_level=log_level, - ) - return fc[2], fc[3] - else: - msg = "Force constants calculator of %s was not found ." % fc_calculator - raise RuntimeError(msg) + fc_solver = get_fc3_solver( + supercell, + primitive, + {"displacements": displacements, "forces": forces}, + fc_calculator=fc_calculator, + fc_calculator_options=fc_calculator_options, + is_compact_fc=is_compact_fc, + symmetry=symmetry, + log_level=log_level, + ) + return fc_solver.force_constants[2], fc_solver.force_constants[3] def extract_fc2_fc3_calculators( diff --git a/phono3py/phonon3/fc3.py b/phono3py/phonon3/fc3.py index eba2a35e..b0587e60 100644 --- a/phono3py/phonon3/fc3.py +++ b/phono3py/phonon3/fc3.py @@ -40,13 +40,13 @@ import numpy as np from phonopy.harmonic.force_constants import ( distribute_force_constants, - get_fc2, get_nsym_list_and_s2pp, get_positions_sent_by_rot_inv, get_rotated_displacement, similarity_transformation, solve_force_constants, ) +from phonopy.interface.fc_calculator import get_fc2 from phonopy.structure.atoms import PhonopyAtoms from phonopy.structure.cells import Primitive, compute_all_sg_permutations from phonopy.structure.symmetry import Symmetry @@ -84,7 +84,13 @@ def get_fc3( """ # fc2 has to be full matrix to compute delta-fc2 # p2s_map elements are extracted if is_compact_fc=True at the last part. - fc2 = get_fc2(supercell, symmetry, disp_dataset) + fc2 = get_fc2( + supercell, + disp_dataset, + primitive=primitive, + is_compact_fc=False, + symmetry=symmetry, + ) fc3 = _get_fc3_least_atoms( supercell, primitive, From e0fc1dfa31dd726396845aa104d52b97bfd6ef9b Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Sat, 8 Feb 2025 22:40:33 +0900 Subject: [PATCH 2/6] Refactoring of fc solver --- phono3py/api_phono3py.py | 47 ++++----- phono3py/interface/fc_calculator.py | 144 ++++++++++++++++------------ 2 files changed, 97 insertions(+), 94 deletions(-) diff --git a/phono3py/api_phono3py.py b/phono3py/api_phono3py.py index 2c106a77..52eed4f7 100644 --- a/phono3py/api_phono3py.py +++ b/phono3py/api_phono3py.py @@ -41,7 +41,6 @@ from typing import Literal, Optional, Union import numpy as np -from phonopy.exception import ForceCalculatorRequiredError from phonopy.harmonic.displacement import ( directions_to_displacement_dataset, get_least_displacements, @@ -74,10 +73,10 @@ from phono3py.conductivity.direct_solution import get_thermal_conductivity_LBTE from phono3py.conductivity.rta import get_thermal_conductivity_RTA -from phono3py.interface.fc_calculator import get_fc3 +from phono3py.interface.fc_calculator import get_fc3_solver from phono3py.interface.phono3py_yaml import Phono3pyYaml from phono3py.phonon.grid import BZGrid -from phono3py.phonon3.dataset import forces_in_dataset, get_displacements_and_forces_fc3 +from phono3py.phonon3.dataset import forces_in_dataset from phono3py.phonon3.displacement_fc3 import ( direction_to_displacement, get_third_order_displacements, @@ -89,7 +88,6 @@ set_translational_invariance_compact_fc3, set_translational_invariance_fc3, ) -from phono3py.phonon3.fc3 import get_fc3 as get_phono3py_fc3 from phono3py.phonon3.imag_self_energy import ( get_imag_self_energy, write_imag_self_energy, @@ -1485,33 +1483,20 @@ def produce_fc3( Options for external force constants calculator. """ - if fc_calculator is not None: - disps, forces = get_displacements_and_forces_fc3(self._dataset) - fc2, fc3 = get_fc3( - self._supercell, - self._primitive, - disps, - forces, - fc_calculator=fc_calculator, - fc_calculator_options=fc_calculator_options, - is_compact_fc=is_compact_fc, - symmetry=self._symmetry, - log_level=self._log_level, - ) - else: - if "displacements" in self._dataset: - raise ForceCalculatorRequiredError( - "fc_calculator has to be set to produce force constants from this " - "dataset." - ) - fc2, fc3 = get_phono3py_fc3( - self._supercell, - self._primitive, - self._dataset, - self._symmetry, - is_compact_fc=is_compact_fc, - verbose=self._log_level > 0, - ) + fc_solver = get_fc3_solver( + self._supercell, + self._primitive, + self._dataset, + fc_calculator=fc_calculator, + fc_calculator_options=fc_calculator_options, + is_compact_fc=is_compact_fc, + symmetry=self._symmetry, + log_level=self._log_level, + ) + fc2 = fc_solver.force_constants[2] + fc3 = fc_solver.force_constants[3] + + if fc_calculator is None or fc_calculator == "traditional": if symmetrize_fc3r: if is_compact_fc: set_translational_invariance_compact_fc3(fc3, self._primitive) diff --git a/phono3py/interface/fc_calculator.py b/phono3py/interface/fc_calculator.py index a0ec4b2b..cb783c07 100644 --- a/phono3py/interface/fc_calculator.py +++ b/phono3py/interface/fc_calculator.py @@ -39,12 +39,15 @@ from typing import Optional, Union import numpy as np -from phonopy.interface.fc_calculator import get_fc_solver +from phonopy.interface.fc_calculator import FCSolver from phonopy.interface.symfc import SymfcFCSolver from phonopy.structure.atoms import PhonopyAtoms from phonopy.structure.cells import Primitive from phonopy.structure.symmetry import Symmetry +from phono3py.phonon3.dataset import get_displacements_and_forces_fc3 +from phono3py.phonon3.fc3 import get_fc3 + def get_fc3_solver( supercell: PhonopyAtoms, @@ -55,7 +58,7 @@ def get_fc3_solver( is_compact_fc: bool = False, symmetry: Optional[Symmetry] = None, log_level: int = 0, -): +) -> FC3Solver: """Return force constants solver for fc3. Parameters @@ -83,77 +86,25 @@ def get_fc3_solver( Returns ------- - (fc2, fc3) : tuple[ndarray] - 2nd and 3rd order force constants. + FC3Solver + Force constants solver for fc3. """ - fc_solver = get_fc_solver( + fc_solver_name = fc_calculator if fc_calculator is not None else "traditional" + fc_solver = FC3Solver( + fc_solver_name, supercell, - dataset, + symmetry=symmetry, + dataset=dataset, + is_compact_fc=is_compact_fc, primitive=primitive, - fc_calculator=fc_calculator, - fc_calculator_options=fc_calculator_options, orders=[2, 3], - is_compact_fc=is_compact_fc, - symmetry=symmetry, + options=fc_calculator_options, log_level=log_level, ) return fc_solver -def get_fc3( - supercell: PhonopyAtoms, - primitive: Primitive, - displacements: np.ndarray, - forces: np.ndarray, - fc_calculator: Optional[str] = None, - fc_calculator_options: Optional[str] = None, - is_compact_fc: bool = False, - symmetry: Optional[Symmetry] = None, - log_level: int = 0, -): - """Calculate 2upercell 2nd and 3rd order force constants. - - Parameters - ---------- - supercell : PhonopyAtoms - Supercell - primitive : Primitive - Primitive cell - displacements : array_like - Displacements of atoms in supercell. - shape=(num_snapshots, num_atoms, 3), dtype='double', order='C' - forces : array_like - Forces of atoms in supercell. - shape=(num_snapshots, num_atoms, 3), dtype='double', order='C' - fc_calculator : str, optional - Currently only 'alm' is supported. Default is None, meaning invoking - 'alm'. - fc_calculator_options : str, optional - This is arbitrary string. - log_level : integer or bool, optional - Verbosity level. False or 0 means quiet. True or 1 means normal level - of log to stdout. 2 gives verbose mode. - - Returns - ------- - (fc2, fc3) : tuple[ndarray] - 2nd and 3rd order force constants. - - """ - fc_solver = get_fc3_solver( - supercell, - primitive, - {"displacements": displacements, "forces": forces}, - fc_calculator=fc_calculator, - fc_calculator_options=fc_calculator_options, - is_compact_fc=is_compact_fc, - symmetry=symmetry, - log_level=log_level, - ) - return fc_solver.force_constants[2], fc_solver.force_constants[3] - - def extract_fc2_fc3_calculators( fc_calculator: Optional[Union[str, dict]], order: int, @@ -227,3 +178,70 @@ def estimate_symfc_memory_usage( memsize = basis_size**2 * 3 * 8 / 10**9 memsize2 = len(supercell) * 3 * batch_size * basis_size * 8 / 10**9 return memsize, memsize2 + + +class FDFC3Solver: + """Finite difference type force constants calculator. + + This is phono3py's traditional force constants calculator. + + """ + + def __init__( + self, + supercell: PhonopyAtoms, + primitive: Primitive, + symmetry: Symmetry, + dataset: dict, + is_compact_fc: bool = False, + log_level: int = 0, # currently not used + ): + self._fc2, self._fc3 = self._run( + supercell, + primitive, + symmetry, + dataset, + is_compact_fc, + log_level, + ) + + @property + def force_constants(self) -> dict[int, np.ndarray]: + """Return force constants. + + Returns + ------- + dict[int, np.ndarray] + Force constants with order as key. + + """ + return {2: self._fc2, 3: self._fc3} + + def _run( + self, + supercell: PhonopyAtoms, + primitive: Primitive, + symmetry: Symmetry, + dataset: dict, + is_compact_fc: bool, + log_level: int, + ): + return get_fc3( + supercell, + primitive, + dataset, + symmetry, + is_compact_fc=is_compact_fc, + verbose=log_level > 0, + ) + + +class FC3Solver(FCSolver): + """Force constants solver for fc3.""" + + def _set_traditional_solver(self, solver_class: Optional[type] = FDFC3Solver): + return super()._set_traditional_solver(solver_class=solver_class) + + def _get_displacements_and_forces(self): + """Return displacements and forces for fc3.""" + return get_displacements_and_forces_fc3(self._dataset) From cb4cd068debfc1ec3e1c69e717ae68f6e64f5872 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 00:05:08 +0000 Subject: [PATCH 3/6] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.9.4 → v0.9.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.9.4...v0.9.6) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 935d4531..ca98ecf9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: exclude: ^example/AlN-LDA/ - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.4 + rev: v0.9.6 hooks: - id: ruff args: [ "--fix", "--show-fixes" ] From 0d6549b2e8b0cfe24a5268aa25d14e8411e2dee2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 20:39:05 +0000 Subject: [PATCH 4/6] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.9.6 → v0.9.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.9.6...v0.9.7) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ca98ecf9..9634c810 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: exclude: ^example/AlN-LDA/ - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.6 + rev: v0.9.7 hooks: - id: ruff args: [ "--fix", "--show-fixes" ] From 8dac418ffc19a43041a8e1e37be99aeb40f06591 Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Sat, 1 Mar 2025 16:49:15 +0900 Subject: [PATCH 5/6] Set version 3.14.1 --- doc/changelog.md | 4 ++++ doc/conf.py | 2 +- phono3py/phonon3/fc3.py | 10 ++++++++-- phono3py/version.py | 2 +- pyproject.toml | 2 +- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/doc/changelog.md b/doc/changelog.md index 40b18195..cf195246 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,6 +2,10 @@ # Change Log +## Mar-1-2025: Version 3.14.1 + +- Release to follow the change of phonopy + ## Feb-7-2025: Version 3.14.0 - Release to follow the change of phonopy diff --git a/doc/conf.py b/doc/conf.py index 70b79c7d..e01f7947 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -60,7 +60,7 @@ # The short X.Y version. version = "3.14" # The full version, including alpha/beta/rc tags. -release = "3.14.0" +release = "3.14.1" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/phono3py/phonon3/fc3.py b/phono3py/phonon3/fc3.py index eba2a35e..b0587e60 100644 --- a/phono3py/phonon3/fc3.py +++ b/phono3py/phonon3/fc3.py @@ -40,13 +40,13 @@ import numpy as np from phonopy.harmonic.force_constants import ( distribute_force_constants, - get_fc2, get_nsym_list_and_s2pp, get_positions_sent_by_rot_inv, get_rotated_displacement, similarity_transformation, solve_force_constants, ) +from phonopy.interface.fc_calculator import get_fc2 from phonopy.structure.atoms import PhonopyAtoms from phonopy.structure.cells import Primitive, compute_all_sg_permutations from phonopy.structure.symmetry import Symmetry @@ -84,7 +84,13 @@ def get_fc3( """ # fc2 has to be full matrix to compute delta-fc2 # p2s_map elements are extracted if is_compact_fc=True at the last part. - fc2 = get_fc2(supercell, symmetry, disp_dataset) + fc2 = get_fc2( + supercell, + disp_dataset, + primitive=primitive, + is_compact_fc=False, + symmetry=symmetry, + ) fc3 = _get_fc3_least_atoms( supercell, primitive, diff --git a/phono3py/version.py b/phono3py/version.py index 6076aa7f..cef8984d 100644 --- a/phono3py/version.py +++ b/phono3py/version.py @@ -34,4 +34,4 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -__version__ = "3.14.0" +__version__ = "3.14.1" diff --git a/pyproject.toml b/pyproject.toml index e8f7b0d4..6a79247e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ "matplotlib", "h5py", "spglib", - "phonopy>=2.37,<2.38", + "phonopy>=2.37.1,<2.38", ] license = { file = "LICENSE" } From 88469e0a83acfd6d1d306a7aed8d0ed8c2ab317b Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Sat, 1 Mar 2025 17:50:22 +0900 Subject: [PATCH 6/6] Restrict pypolymlp<0.9 in github action tests --- .github/workflows/phono3py-pytest-conda-mkl-phphmtblas.yml | 2 +- .github/workflows/phono3py-pytest-conda-mkl-v2.yml | 2 +- .github/workflows/phono3py-pytest-conda-mkl.yml | 2 +- .github/workflows/phono3py-pytest-conda-phphmtblas.yml | 2 +- .github/workflows/phono3py-pytest-conda.yml | 2 +- doc/pypolymlp.md | 5 ++++- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/phono3py-pytest-conda-mkl-phphmtblas.yml b/.github/workflows/phono3py-pytest-conda-mkl-phphmtblas.yml index 7a276266..b1e4494f 100644 --- a/.github/workflows/phono3py-pytest-conda-mkl-phphmtblas.yml +++ b/.github/workflows/phono3py-pytest-conda-mkl-phphmtblas.yml @@ -24,7 +24,7 @@ jobs: run: | conda activate test conda install --yes python=${{ matrix.python-version }} - conda install --yes matplotlib-base pyyaml "libblas=*=*mkl" mkl-include h5py scipy pytest spglib alm cmake c-compiler cxx-compiler pypolymlp + conda install --yes matplotlib-base pyyaml "libblas=*=*mkl" mkl-include h5py scipy pytest spglib alm cmake c-compiler cxx-compiler "pypolymlp<0.9" - name: Install symfc develop branch run: | conda activate test diff --git a/.github/workflows/phono3py-pytest-conda-mkl-v2.yml b/.github/workflows/phono3py-pytest-conda-mkl-v2.yml index 2ff17580..8128f53f 100644 --- a/.github/workflows/phono3py-pytest-conda-mkl-v2.yml +++ b/.github/workflows/phono3py-pytest-conda-mkl-v2.yml @@ -24,7 +24,7 @@ jobs: run: | conda activate test conda install --yes python=${{ matrix.python-version }} - conda install --yes matplotlib-base pyyaml "libblas=*=*mkl" mkl-include h5py scipy pytest spglib alm cmake c-compiler cxx-compiler pypolymlp + conda install --yes matplotlib-base pyyaml "libblas=*=*mkl" mkl-include h5py scipy pytest spglib alm cmake c-compiler cxx-compiler "pypolymlp<0.9" - name: Install symfc develop branch run: | conda activate test diff --git a/.github/workflows/phono3py-pytest-conda-mkl.yml b/.github/workflows/phono3py-pytest-conda-mkl.yml index 15df9803..7720247c 100644 --- a/.github/workflows/phono3py-pytest-conda-mkl.yml +++ b/.github/workflows/phono3py-pytest-conda-mkl.yml @@ -24,7 +24,7 @@ jobs: run: | conda activate test conda install --yes python=${{ matrix.python-version }} - conda install --yes matplotlib-base pyyaml "libblas=*=*mkl" mkl-include h5py scipy pytest codecov pytest-cov spglib alm cmake c-compiler cxx-compiler pypolymlp + conda install --yes matplotlib-base pyyaml "libblas=*=*mkl" mkl-include h5py scipy pytest codecov pytest-cov spglib alm cmake c-compiler cxx-compiler "pypolymlp<0.9" - name: Install symfc develop branch run: | conda activate test diff --git a/.github/workflows/phono3py-pytest-conda-phphmtblas.yml b/.github/workflows/phono3py-pytest-conda-phphmtblas.yml index d7fde199..d80622ec 100644 --- a/.github/workflows/phono3py-pytest-conda-phphmtblas.yml +++ b/.github/workflows/phono3py-pytest-conda-phphmtblas.yml @@ -24,7 +24,7 @@ jobs: run: | conda activate test conda install --yes python=${{ matrix.python-version }} - conda install --yes matplotlib-base pyyaml "libblas=*=*openblas" openblas h5py scipy pytest spglib alm cmake c-compiler cxx-compiler pypolymlp + conda install --yes matplotlib-base pyyaml "libblas=*=*openblas" openblas h5py scipy pytest spglib alm cmake c-compiler cxx-compiler "pypolymlp<0.9" - name: Install symfc develop branch run: | conda activate test diff --git a/.github/workflows/phono3py-pytest-conda.yml b/.github/workflows/phono3py-pytest-conda.yml index bc6e8e8d..cf1e96e3 100644 --- a/.github/workflows/phono3py-pytest-conda.yml +++ b/.github/workflows/phono3py-pytest-conda.yml @@ -25,7 +25,7 @@ jobs: run: | conda activate test conda install --yes python=${{ matrix.python-version }} - conda install --yes matplotlib-base pyyaml h5py "numpy>=2.1" scipy pytest spglib alm cmake c-compiler cxx-compiler pypolymlp + conda install --yes matplotlib-base pyyaml h5py "numpy>=2.1" scipy pytest spglib alm cmake c-compiler cxx-compiler "pypolymlp<0.9" - name: Install dependent packages for python == 3.9 if: ${{ matrix.python-version == 3.9 }} run: | diff --git a/doc/pypolymlp.md b/doc/pypolymlp.md index 239239bf..8fe07988 100644 --- a/doc/pypolymlp.md +++ b/doc/pypolymlp.md @@ -42,12 +42,15 @@ in the distribution from GitHub or PyPI. ## Requirements -- [pypolymlp](https://github.com/sekocha/pypolymlp) +- [pypolymlp](https://github.com/sekocha/pypolymlp) < 0.9 For linux (x86-64), a compiled package of pypolymlp can be installed via conda-forge (recommended). Otherwise, pypolymlp can be installed from source-code. + From pypolymlp 0.9, its file format was changed. This will be taken care of + by the future version of phonopy and phono3py. + ## How to calculate ### Workflow