From 471a07b07567d6ad88597fbe8b4354798c681c65 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Thu, 24 Sep 2026 01:05:09 -0700 Subject: [PATCH 01/43] Fix pheasy anharmonic fitting and add fit options --- docs/user/codes/vasp.md | 18 +- pyproject.toml | 5 +- src/atomate2/common/flows/hiphive.py | 12 +- src/atomate2/common/flows/pheasy.py | 141 ++++-- src/atomate2/common/jobs/hiphive.py | 76 +-- src/atomate2/common/jobs/pheasy.py | 665 +++++++++++++++++---------- src/atomate2/common/jobs/phonons.py | 111 +++++ src/atomate2/vasp/flows/pheasy.py | 93 ++-- tests/common/jobs/test_pheasy.py | 304 ++++++++++++ tests/vasp/flows/test_pheasy.py | 65 +++ tutorials/pheasy_workflow.ipynb | 10 +- 11 files changed, 1131 insertions(+), 369 deletions(-) create mode 100644 tests/common/jobs/test_pheasy.py diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index edd4f46cc3..ee9e9ba3a7 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -345,12 +345,14 @@ phonon_flow = PhononMaker(min_length=15.0, store_force_constants=False).make( #### Pheasy Alternatively, users can accelerate the calculation of interatomic force constants using the machine-learning-based [Pheasy code](https://doi.org/10.48550/arXiv.2508.01020). -`Pheasy` can be installed with `pip install pheasy`. +The `pheasy` extra, `pip install "atomate2[pheasy]"`, installs the pheasy version this workflow needs, together with phonopy and ALM. +ALM is compiled from source. If that build fails, see the ALM instructions below. By design, these workflows have the same basic structure as the harmonic forcefield workflows and use [Phonopy](https://doi.org/10.7566/JPSJ.92.012001) in part to compute the phonon spectrum. To use `Pheasy` in the previous example, we would replace the import string to `from atomate2.vasp.flows.pheasy import PhononMaker`. This workflow was used to build the Materials Project's Harmonic Phonon Database, described in [this preprint](https://chemrxiv.org/doi/full/10.26434/chemrxiv.15004632/v1). -By default, this workflow does not compute anharmonic force constants, but can be extended to using the `cal_anhar_fcs` kwarg and the `ALAMODE` code. +By default, this workflow does not compute anharmonic force constants, but can be extended to using the `cal_anhar_fcs` kwarg. +ALM, from the ALAMODE package, counts the free force constants used to size the random displacement sets. To install ALAMODE, see their [installation guidelines](https://alamode.readthedocs.io/en/latest/install.html#). Linux and MacOS x86-64 users can try to install using conda forge: @@ -366,6 +368,7 @@ cd ALM/python python setup.py build pip install -e . ``` +The `pheasy` extra pins ALM to commit `f1d668f`. When building ALM by hand, check out that commit. NB: MacOS users will need to ensure that `gcc` and `g++` are used rather than `clang` - both can be installed with `homebrew`. Note also that `boost` and `eigen` can be installed via `homebrew`. For example, using `gcc-15` from `homebrew`, one might set: @@ -373,6 +376,17 @@ For example, using `gcc-15` from `homebrew`, one might set: export CC=gcc-15 ; CXX=g++-15 ; CXX_FLAGS=-DOPENMP ``` +With `cal_anhar_fcs=True`, the anharmonic force constants are fitted with LASSO to a second set of randomly displaced supercells. +The number of these supercells is set from the number of free force constants, so that the fit has 100 force equations per free force constant. +Unless `num_disp_anhar` is set, at least 20 supercells are used, and above 600 the job stops and asks for a shorter cutoff, a larger supercell or an explicit `num_disp_anhar`. An explicit `num_disp_anhar` is used as given. +`anhar_max_order` selects third-order force constants (3, the default) or third- and fourth-order force constants (4). +`anhar_fit_methods` selects how the second-order force constants are treated. +`"cocktail"` (the default) keeps them fixed to the harmonic fit, and `"one-shot"` fits them together with the higher orders and writes the results to a `one_shot` folder. +Both can be requested in one run. +If the cross-validated LASSO penalty lands on either end of the search, `10**anhar_alpha_min` or pheasy's `1e-2`, a warning is raised. +The harmonic and anharmonic LASSO fits are seeded, so that repeated runs give the same force constants. +The anharmonic force constants are written to files in the job folder and are not stored in the output document. + #### hiPhive The same force constants can instead be fitted with [hiPhive](https://hiphive.materialsmodeling.org/), which builds a cluster expansion of the force constant potential and fits it by regression. diff --git a/pyproject.toml b/pyproject.toml index db6701c909..75d5a4cbcc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,8 +52,9 @@ mp = ["mp-api>=0.37.5"] # phonon.save -> phonopy.load round-trip used by the Grüneisen workflow # ("Force constants shape disagrees with crystal structure setting"). phonons = ["phonopy>=2.43,<5", "seekpath>=2.0.0"] -pheasy = ["hiphive==1.3.1", "numpy<=2.2", "pheasy @ git+https://gitlab.com/hpsahasrabuddhe/pheasy.git@support-disp-force-matrix-input"] -alamode = ["alm @ git+https://github.com/ttadano/ALM.git@develop#subdirectory=python"] +# the pheasy fork adds the --disp_matrix_file and --force_matrix_file options +pheasy = ["atomate2[phonons,alamode]", "hiphive==1.3.1", "numpy<=2.2", "pheasy @ git+https://gitlab.com/hpsahasrabuddhe/pheasy.git@e67a777ecfde5ab368d71167837b099df75cfd4c"] +alamode = ["alm @ git+https://github.com/ttadano/ALM.git@f1d668fdee66e7e7218a04c88daf19d0e14fce0c#subdirectory=python"] hiphive = ["hiphive==1.3.1", "trainstation>=1.0", "atomate2[phonons,alamode]"] lobster = ["ijson>=3.2.2", "lobsterpy>=0.6.0"] defects = [ diff --git a/src/atomate2/common/flows/hiphive.py b/src/atomate2/common/flows/hiphive.py index 7fb63172fb..37bbd9a543 100644 --- a/src/atomate2/common/flows/hiphive.py +++ b/src/atomate2/common/flows/hiphive.py @@ -1,4 +1,4 @@ -"""Flow for calculating (an)harmonic FCs and phonon renormalisation with hiPhive.""" +"""Flow for calculating harmonic FCs with hiPhive.""" from __future__ import annotations @@ -6,6 +6,8 @@ from dataclasses import dataclass, field from typing import TYPE_CHECKING, Literal +from pymatgen.util.due import Doi, due + from atomate2.common.flows.phonons import BasePhononMaker as PurePhonopyMaker from atomate2.common.jobs.hiphive import ( generate_frequencies_eigenvectors, @@ -28,6 +30,14 @@ SUPPORTED_CODES = frozenset(("vasp", "aims", "forcefields")) +@due.dcite( + Doi("10.1002/adts.201800184"), + description="hiPhive, force constant potentials by regression.", +) +@due.dcite( + Doi("10.1088/0953-8984/26/22/225402"), + description="ALM, used to count the free force constants.", +) @dataclass class BasePhononMaker(PurePhonopyMaker, ABC): """Maker to calculate harmonic phonons with the cluster-expansion code hiPhive. diff --git a/src/atomate2/common/flows/pheasy.py b/src/atomate2/common/flows/pheasy.py index 12ed008b71..158c90efab 100644 --- a/src/atomate2/common/flows/pheasy.py +++ b/src/atomate2/common/flows/pheasy.py @@ -1,4 +1,4 @@ -"""Flow for calculating (an)harmonic FCs and phonon renormalisation with pheasy.""" +"""Flow for calculating harmonic and anharmonic FCs with pheasy.""" from __future__ import annotations @@ -10,6 +10,7 @@ from atomate2.common.flows.phonons import BasePhononMaker as PurePhonopyMaker from atomate2.common.jobs.pheasy import ( + _check_anharmonic_settings, generate_frequencies_eigenvectors, generate_phonon_displacements, get_supercell_size, @@ -17,6 +18,7 @@ from atomate2.common.jobs.phonons import run_phonon_displacements if TYPE_CHECKING: + from collections.abc import Sequence from pathlib import Path from emmet.core.math import Matrix3D @@ -34,24 +36,34 @@ Doi("10.26434/chemrxiv.15004632/v1"), description="Materials Project's Harmonic Phonon Database.", ) +@due.dcite( + Doi("10.48550/arXiv.2508.01020"), + description="Pheasy code for (an)harmonic force constants.", +) +@due.dcite( + Doi("10.1088/0953-8984/26/22/225402"), + description="ALM, used to count the free force constants.", +) @dataclass class BasePhononMaker(PurePhonopyMaker, ABC): - """Maker to calculate harmonic phonons with LASSO-based ML code Pheasy. - - Calculate the zero-K harmonic phonons of a material and higher-order FCs. - Initially, a tight structural relaxation is performed to obtain a structure - without forces on the atoms. Subsequently, supercells with all atoms displaced - by a small amplitude (generally using 0.01 A) are generated and accurate forces - are computed for these structures for the second order force constants. With the - help of pheasy (LASSO technique), these forces are then converted into a dynamical - matrix. In this Workflow, we separate the harmonic phonon calculations and - anharmonic force constants calculations. To correct for polarization effects, a + """Maker to calculate harmonic phonons and anharmonic FCs with Pheasy. + + Calculate the zero-K harmonic phonons of a material and, optionally, its + anharmonic FCs. Initially, a tight structural relaxation is performed to obtain + a structure without forces on the atoms. Subsequently, displaced supercells + (generally using 0.01 A) are generated and accurate forces are computed for + them. If phonopy needs more than three finite displacements, all atoms are + displaced randomly and pheasy fits the second order force constants with LASSO. + Otherwise, the finite displacements are used with a least-squares fit. These + force constants are then converted into a dynamical matrix. In this Workflow, + we separate the harmonic phonon calculations and anharmonic force constants + calculations. To correct for polarization effects, a correction of the dynamical matrix based on BORN charges can be performed. Finally, phonon densities of states, phonon band structures and thermodynamic properties are computed. For the anharmonic force constants, the supercells with all atoms displaced by a larger amplitude (generally using 0.08 A) are generated and accurate forces are computed for these structures. With the help of pheasy (LASSO technique), - the third- and fourth-order force constants are extracted at once. + the third-order (and optionally fourth-order) force constants are extracted. .. Note:: It is heavily recommended to symmetrize the structure before passing it to @@ -59,10 +71,8 @@ class BasePhononMaker(PurePhonopyMaker, ABC): displacement calculations will be required for pheasy phonon calculation. It is recommended to check the convergence parameters here and adjust them if necessary. The default might not be strict enough for your specific case. - Additionally, for high-throughoput calculations, it is recommended to calculate - the residual forces on the atoms in the supercell after the relaxation. Then the - forces on displaced supercells can deduct the residual forces to reduce the - error in the dynamical matrix. + The residual forces of the undisplaced supercell are always subtracted from + the forces of the displaced supercells. Parameters ---------- @@ -83,35 +93,62 @@ class BasePhononMaker(PurePhonopyMaker, ABC): number of displacements to be generated using a random-displacement approach for harmonic phonon calculations. The default value is 0 and the number of displacements is automatically determined by the number of atoms in the - supercell and its space group. + supercell and its space group. Not used when phonopy needs at most three + finite displacements. cal_anhar_fcs: bool - if set to True, anharmonic force constants(FCs) up to fourth-order FCs will - be calculated. The default value is False, and only harmonic phonons will - be calculated. + if set to True, anharmonic force constants(FCs) up to order + anhar_max_order will be calculated. The default value is False, and only + harmonic phonons will be calculated. displacement_anhar: float - displacement distance for anharmonic force constants(FCs) up to fourth-order - FCs, for most cases 0.08 A is a good choice, but it can be increased to 0.1 A. + displacement distance for the anharmonic force constants(FCs). The default + is 0.08 A. num_disp_anhar: int number of displacements to be generated using a random-displacement approach - for anharmonic phonon calculations. The default value is 0 and the number of - displacements is automatically determined by the number of atoms in the - supercell, cutoff distance for anharmonic FCs its space group. generally, - 50 large-distance displacements are enough for most cases. + for anharmonic phonon calculations. A non-zero value is used as given. The + default value is 0, and then the number is set so that the fit has 100 force + equations per free force constant, with at least 20 displaced supercells. + Above 600 the job stops. The free force constants are counted with ALM, which + uses its own symmetry search, for this supercell and fcs_cutoff_radius. The + second-order FCs are included when "one-shot" is requested. + anhar_max_order: int + highest order of the anharmonic FCs, 3 or 4. The default of 3 fits the + third-order FCs. 4 also fits fourth-order FCs. + anhar_fit_methods: Sequence[Literal["cocktail", "one-shot"]] + how the anharmonic FCs are fitted to the large-distance dataset. + "cocktail" keeps the second-order FCs fixed to the harmonic fit and fits + only the higher orders. "one-shot" fits the second- and higher-order FCs + together from the same dataset and writes them to the "one_shot" folder. + Both can be requested. The default is ("cocktail",). The cocktail FCs are + written to the job folder, and the one-shot FCs, including fc2.hdf5, to its + one_shot subfolder: FORCE_CONSTANTS_3RD and fc3.hdf5, plus + FORCE_CONSTANTS_4TH and fc4.hdf5 at fourth order. They are not stored in the + output document. The LASSO fits are seeded, so a run is reproducible. With + few displaced supercells, the one-shot result depends on that seed. + anhar_alpha_min: int + base-10 exponent of the smallest LASSO penalty tried by cross-validation + in the anharmonic fits. It must be an integer below -2. The default of -12 + is below pheasy's own default of -6. If the chosen penalty lands on either + end of the search, 10**anhar_alpha_min or pheasy's 1e-2, a warning is + raised. fcs_cutoff_radius: list - cutoff distance for anharmonic force constants(FCs) up to fourth-order FCs. - The default value is [-1, 12, 10], which means that the cutoff distance for - second-order FCs is the Wigner-Seitz cell boundary and the cutoff distance - for third-order FCs is 12 Borh, and the cutoff distance for fourth-order FCs - is 10 Bohr. Generally, the default value is good enough. + cutoff distance in Bohr for each FC order, starting at second order. The + default value is [-1, 12, 10]. The first entry is not used, since pheasy + fits the second-order FCs without a cutoff. The second and third entries + are the cutoffs for third- and fourth-order FCs. The cutoff of each fitted + order, up to anhar_max_order, must be positive. Longer cutoffs increase + the number of free FCs, and with it the number of displaced supercells. min_length: float minimum length of lattice constants will be used to create the supercell, - the default value is 14.0 A. In most cases, the default value is good - enough, but it can be increased for larger supercells. - prefer_90_degrees: bool - if set to True, supercell algorithm will first try to find a supercell - with 3 90 degree angles. + the default value is 8.0 A. It can be increased for larger supercells. + max_atoms: float | None + maximum number of atoms in the supercell. + force_90_degrees: bool + if set to True, only supercells with three 90 degree angles are allowed. + force_diagonal: bool + if set to True, only diagonal supercell matrices are allowed. The pheasy + commands take the diagonal of the supercell matrix. get_supercell_size_kwargs: dict - kwargs that will be passed to get_supercell_size to determine supercell size + not used by this workflow. use_symmetrized_structure: str allowed strings: "primitive", "conventional", None @@ -174,14 +211,12 @@ class BasePhononMaker(PurePhonopyMaker, ABC): cal_anhar_fcs: bool = False displacement_anhar: float = 0.08 num_disp_anhar: int = 0 + anhar_max_order: int = 3 + anhar_fit_methods: Sequence[Literal["cocktail", "one-shot"]] = ("cocktail",) + anhar_alpha_min: int = -12 fcs_cutoff_radius: list = field( default_factory=lambda: [-1, 12, 10] ) # units in Bohr - renorm_phonon: bool = False - renorm_temp: list = field(default_factory=lambda: [100, 700, 100]) - cal_ther_cond: bool = False - ther_cond_mesh: list = field(default_factory=lambda: [20, 20, 20]) - ther_cond_temp: list = field(default_factory=lambda: [100, 700, 100]) min_length: float | None = 8.0 max_atoms: float | None = 200 force_90_degrees: bool = True @@ -203,6 +238,17 @@ class BasePhononMaker(PurePhonopyMaker, ABC): store_force_constants: bool = True socket: bool = False + def __post_init__(self) -> None: + """Check the anharmonic settings before any calculation is run.""" + _check_anharmonic_settings( + self.anhar_max_order, + self.anhar_fit_methods, + self.cal_anhar_fcs, + self.fcs_cutoff_radius, + self.anhar_alpha_min, + self.num_disp_anhar, + ) + def get_displacements( self, structure: Structure, supercell_matrix: Matrix3D ) -> Job | Flow: @@ -232,6 +278,8 @@ def get_displacements( use_symmetrized_structure=self.use_symmetrized_structure, kpath_scheme=self.kpath_scheme, code=self.code, + anhar_max_order=self.anhar_max_order, + anhar_fit_methods=self.anhar_fit_methods, ) def run_displacements( @@ -309,11 +357,6 @@ def get_results( displacement=self.displacement, cal_anhar_fcs=self.cal_anhar_fcs, fcs_cutoff_radius=self.fcs_cutoff_radius, - renorm_phonon=self.renorm_phonon, - renorm_temp=self.renorm_temp, - cal_ther_cond=self.cal_ther_cond, - ther_cond_mesh=self.ther_cond_mesh, - ther_cond_temp=self.ther_cond_temp, sym_reduce=self.sym_reduce, symprec=self.symprec, use_symmetrized_structure=self.use_symmetrized_structure, @@ -332,6 +375,10 @@ def get_results( optimization_run_uuid=optimization_run_uuid, create_thermal_displacements=self.create_thermal_displacements, store_force_constants=self.store_force_constants, + num_displaced_supercells=self.num_displaced_supercells, + anhar_max_order=self.anhar_max_order, + anhar_fit_methods=self.anhar_fit_methods, + anhar_alpha_min=self.anhar_alpha_min, **self.generate_frequencies_eigenvectors_kwargs, ) diff --git a/src/atomate2/common/jobs/hiphive.py b/src/atomate2/common/jobs/hiphive.py index da27fb44c3..f1b073707e 100644 --- a/src/atomate2/common/jobs/hiphive.py +++ b/src/atomate2/common/jobs/hiphive.py @@ -38,6 +38,8 @@ from atomate2.common.jobs.phonons import ( _generate_phonon_object, _get_kpath, + _get_num_harmonic_supercells, + _get_num_irreducible_fcs, _run_band_structure_and_plot, _run_total_dos_and_plot, ) @@ -48,20 +50,14 @@ logger = logging.getLogger(__name__) -try: - from alm import ALM -except ImportError: - ALM = None - -# Safety margin below hiPhive's maximum allowed cutoff, in Angstrom. -# Configurations per suggested displacement set. ALM sizes num_disp_sc so the -# equation count reaches its own free-parameter tally, and this scales from -# there. pheasy uses 1.8. hiPhive's cluster space has a different, smaller -# parameter count, and the ratio between the two varies by a factor of three -# across materials, so 1.8 leaves a low-symmetry cell with too little data for -# a LASSO fit and the modes come out soft. +# Configurations per suggested displacement set. The minimum set is sized from +# ALM's free-parameter tally so the equation count reaches it (see +# _get_num_harmonic_supercells), and this scales from there. pheasy uses the +# same 1.8. hiPhive's own cluster space has a smaller parameter count than +# ALM's tally, and the ratio between the two differs between materials. _N_CONFIG_MULTIPLIER = 1.8 +# Safety margin below hiPhive's maximum allowed cutoff, in Angstrom. _CUTOFF_MARGIN = 0.1 # hiPhive refuses a cutoff that clears a neighbour shell by less than its @@ -290,11 +286,12 @@ def generate_phonon_displacements( random_seed: int | None = 103, verbose: bool = False, ) -> list[Structure]: - """Generate small-distance perturbed structures with phonopy based on two ways. + """Generate the displaced supercells with phonopy. - 1. finite-displacment method (one displaced atom) when the displacement number - is less than 3. 2. random-displacement method (all-displaced atoms) when the - displacement number is more than 3. + The finite-displacement method (one displaced atom) is used when phonopy + needs at most three displacements, and the random-displacement method (all + atoms displaced) otherwise. The undisplaced supercell is added last, for + the residual forces. Parameters ---------- @@ -322,11 +319,6 @@ def generate_phonon_displacements( Whether to log warnings. """ - # TODO: remove ALMODE dependence for 2nd order force constants - if not ALM: - raise ImportError( - "Error importing ALM. Please ensure the 'alm' library is installed." - ) phonon = _generate_phonon_object( structure, supercell_matrix, @@ -353,46 +345,28 @@ def generate_phonon_displacements( # of the matrix can not always guarantee accurate results, you # may need to displace more random configurations. Use at least one or # two more configurations based on the suggested number of displacements. - supercell_ph = phonon.supercell - lattice = supercell_ph.cell - positions = supercell_ph.scaled_positions - numbers = supercell_ph.numbers - natom = len(numbers) - - # get the number of free parameters of 2ND FCs from ALM, labeled as n_fp - with ALM(lattice, positions, numbers) as alm: - alm.define(1) - alm.suggest() - n_fp = alm._get_number_of_irred_fc_elements(1) # noqa: SLF001 - - # get the number of displaced supercells based on the number of free parameters - num_disp_sc = int(np.ceil(n_fp / (3.0 * natom))) + num_har = _get_num_harmonic_supercells( + phonon, num_displaced_supercells, multiplier=_N_CONFIG_MULTIPLIER + ) if verbose: + (n_fp,) = _get_num_irreducible_fcs(phonon.supercell, 2) logger.info( - f"There are {n_fp} free parameters for the second-order " - "force constants (FCs)." - f"There are {3 * natom * num_disp_sc} equations used to " - "obtain the second-order FCs." - "CAUTION: you may need to increase the number of " - "displacements in some cases." - "If the number of atoms in the supercell are less than 100 and " + f"There are {n_fp} free parameters for the second-order force " + f"constants (FCs), and {num_har} displaced supercells are used to " + "fit them. CAUTION: you may need to increase the number of " + "displacements in some cases. " + "If the number of atoms in the supercell is less than 100 and " "all lattice constants are less than 10 Å, the user is advised " "to use 1-2 more randomly-displaced configurations." ) - # get the number of displaced supercells from phonopy to compared with the number - # of 3, if the number of displaced supercells is less than 3, we will use the finite - # displacement method to generate the supercells. Otherwise, we will use the random - # displacement method to generate the supercells. + # if phonopy needs more than three finite displacements, we use the random + # displacement method instead if len(phonon.displacements) > 3: phonon.generate_displacements( distance=displacement, - number_of_snapshots=( - num_displaced_supercells - if num_displaced_supercells != 0 - else int(np.ceil(num_disp_sc * _N_CONFIG_MULTIPLIER)) + 1 - ), + number_of_snapshots=num_har, random_seed=random_seed, ) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 29c80cfb58..eb2648b817 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -3,8 +3,12 @@ from __future__ import annotations import logging +import numbers +import re import shlex +import shutil import subprocess +import warnings from pathlib import Path from typing import TYPE_CHECKING @@ -18,7 +22,7 @@ from hiphive.utilities import extract_parameters from jobflow import job from packaging.version import parse as parse_version -from phonopy.file_IO import parse_FORCE_CONSTANTS, write_force_constants_to_hdf5 +from phonopy.file_IO import parse_FORCE_CONSTANTS from phonopy.interface.vasp import write_vasp from phonopy.structure.symmetry import symmetrize_borns_and_epsilon from pymatgen.core import Structure @@ -31,25 +35,23 @@ ) from atomate2.common.jobs.phonons import ( + ANGSTROM_TO_BOHR, _generate_phonon_object, _get_kpath, + _get_num_harmonic_supercells, + _get_num_irreducible_fcs, _run_band_structure_and_plot, _run_total_dos_and_plot, ) if TYPE_CHECKING: + from collections.abc import Sequence + from emmet.core.math import Matrix3D + from phonopy.structure.atoms import PhonopyAtoms logger = logging.getLogger(__name__) -try: - from alm import ALM -except ImportError: - ALM = None - -# CODATA 2018: 1 Angstrom = 1 / 0.529177210903 Bohr -ANGSTROM_TO_BOHR = 1.8897261246257702 - _DEFAULT_FILE_PATHS = { "force_displacements": "dataset_forces.npy", "displacements": "dataset_disps.npy", @@ -65,8 +67,283 @@ "harmonic_force_matrix": "force_matrix.npy", "anharmonic_force_matrix": "force_matrix_anhar.npy", "website": "phonon_website.json", + "one_shot_dir": "one_shot", + "anharmonic_fit_log": "pheasy_anharmonic_fit.log", } +# The anharmonic training set is sized so that the fit has this many force +# equations per free force constant. The floor keeps the set from becoming +# very small. Above the ceiling the job stops instead of requesting more +# displaced supercells. +_EQUATIONS_PER_FREE_FC = 100 +_MIN_NUM_DISP_ANHAR = 20 +_MAX_NUM_DISP_ANHAR = 600 + +_ANHARMONIC_FIT_METHODS = ("cocktail", "one-shot") + +# many-body terms kept in the anharmonic fit for each maximum order, as passed +# to pheasy with --nbody and to ALM when counting the free force constants +_NBODY = {3: [2, 3], 4: [2, 3, 3]} + + +def _get_num_anharmonic_supercells( + supercell: PhonopyAtoms, + num_disp_anhar: int, + anhar_max_order: int, + fcs_cutoff_radius: Sequence[float], + anhar_fit_methods: Sequence[str], +) -> int: + """ + Get the number of randomly displaced supercells for the anharmonic fit. + + A non-zero num_disp_anhar is returned as given. Otherwise, each supercell + gives 3 * natom force equations, and the number of supercells is set so + that there are _EQUATIONS_PER_FREE_FC equations per free force constant, + with at least _MIN_NUM_DISP_ANHAR supercells. Above _MAX_NUM_DISP_ANHAR a + ValueError is raised. The free force constants are those of third (and + fourth) order, plus those of second order when the one-shot fit is + requested, since it fits all orders together. Second-order force constants + are counted without a cutoff, as pheasy fits them. ALM counts the + irreducible force constants before the acoustic sum rules are applied, with + its own symmetry search, so the count is expected to be at least the number + pheasy fits. + + Parameters + ---------- + supercell: PhonopyAtoms + Supercell used for the force constant fit. + num_disp_anhar: int + Number of displaced supercells requested by the user, 0 for automatic. + anhar_max_order: int + Highest force constant order in the anharmonic fit, 3 or 4. + fcs_cutoff_radius: Sequence[float] + Cutoff radius in Bohr for each order, starting at second order. + anhar_fit_methods: Sequence[str] + Anharmonic fit methods that will use this dataset. + + Returns + ------- + int + Number of anharmonic displaced supercells. + """ + if num_disp_anhar != 0: + return num_disp_anhar + # pheasy fits the second-order force constants without a cutoff + cutoffs = [-1, *fcs_cutoff_radius[1:]] + n_irred = _get_num_irreducible_fcs( + supercell, anhar_max_order, cutoffs, nbody=_NBODY[anhar_max_order] + ) + n_free = sum(n_irred[1:]) + if "one-shot" in anhar_fit_methods: + n_free += n_irred[0] + natom = len(supercell.numbers) + num = int(np.ceil(_EQUATIONS_PER_FREE_FC * n_free / (3.0 * natom))) + num = max(num, _MIN_NUM_DISP_ANHAR) + if num > _MAX_NUM_DISP_ANHAR: + raise ValueError( + f"{num} displaced supercells are needed for {n_free} free force " + f"constants, more than the limit of {_MAX_NUM_DISP_ANHAR}. Reduce " + "fcs_cutoff_radius, use a larger supercell, or set num_disp_anhar " + "to accept the cost." + ) + return num + + +def _check_anharmonic_settings( + anhar_max_order: int, + anhar_fit_methods: Sequence[str], + cal_anhar_fcs: bool = True, + fcs_cutoff_radius: Sequence[float] | None = None, + anhar_alpha_min: int | None = None, + num_disp_anhar: int = 0, +) -> None: + """ + Check the settings of the anharmonic force constant fit. + + Parameters + ---------- + anhar_max_order: int + Highest force constant order in the anharmonic fit. + anhar_fit_methods: Sequence[str] + Anharmonic fit methods. + cal_anhar_fcs: bool + Whether the anharmonic force constants are calculated. + fcs_cutoff_radius: Sequence[float] | None + Cutoff radius in Bohr for each order, starting at second order. + anhar_alpha_min: int | None + Base-10 exponent of the smallest LASSO penalty. pheasy only accepts an + integer, below its largest penalty of 1e-2. + num_disp_anhar: int + Number of anharmonic displaced supercells requested by the user. + """ + if anhar_max_order not in (3, 4): + raise ValueError(f"anhar_max_order must be 3 or 4, not {anhar_max_order}.") + unknown = set(anhar_fit_methods) - set(_ANHARMONIC_FIT_METHODS) + if ( + unknown + or len(anhar_fit_methods) == 0 + or len(set(anhar_fit_methods)) != len(anhar_fit_methods) + ): + raise ValueError( + f"anhar_fit_methods must be a non-empty subset of " + f"{_ANHARMONIC_FIT_METHODS} without repeats, not {list(anhar_fit_methods)}." + ) + if ( + isinstance(num_disp_anhar, bool) + or not isinstance(num_disp_anhar, numbers.Integral) + or num_disp_anhar < 0 + ): + raise ValueError( + f"num_disp_anhar must be a non-negative integer, not {num_disp_anhar!r}." + ) + if cal_anhar_fcs and fcs_cutoff_radius is not None: + # one cutoff per order from 3 to anhar_max_order, after the fc2 entry + anhar_radii = list(fcs_cutoff_radius[1 : anhar_max_order - 1]) + # pheasy reads a negative cutoff as a neighbour shell, ALM as no cutoff + if len(anhar_radii) != anhar_max_order - 2 or min(anhar_radii) <= 0: + raise ValueError( + f"fcs_cutoff_radius needs a positive cutoff in Bohr for each order " + f"from 3 to {anhar_max_order}, not {list(fcs_cutoff_radius)}." + ) + if anhar_alpha_min is not None and ( + isinstance(anhar_alpha_min, bool) + or not isinstance(anhar_alpha_min, numbers.Integral) + or anhar_alpha_min >= -2 + ): + raise ValueError( + f"anhar_alpha_min must be an integer below -2, not {anhar_alpha_min!r}." + ) + + +def _check_lasso_alpha(log_file: Path, alpha_min: int) -> None: + """ + Warn if the cross-validated LASSO penalty is on either bound of the search. + + On the lower bound, the search wanted an even weaker penalty than it was + allowed to try, so the fitted force constants depend on that bound. On the + upper bound, the penalty is the strongest one tried. Raises an error if + pheasy wrote no log or no penalty. + + Parameters + ---------- + log_file: Path + Log file written by pheasy during the fit. + alpha_min: int + Base-10 exponent of the smallest penalty in the search. + """ + if not log_file.exists(): + raise FileNotFoundError( + f"pheasy exited without writing {log_file}, so the result of the " + "anharmonic fit is unknown." + ) + match = re.search(r"alpha_opt:\s*([-+0-9.eE]+)", log_file.read_text()) + if match is None: + raise RuntimeError(f"No LASSO alpha found in {log_file}, the fit failed.") + alpha_opt = float(match.group(1)) + match_max = re.search(r"alpha_max:\s*1e([-+0-9]+)", log_file.read_text()) + if match_max is not None and alpha_opt >= 10.0 ** int(match_max.group(1)) * ( + 1 - 1e-6 + ): + warnings.warn( + f"The LASSO penalty chosen by cross-validation ({alpha_opt:e}) is on " + f"the upper bound in {log_file}. The fitted force constants may be " + "heavily penalized. Check them.", + stacklevel=2, + ) + if alpha_opt <= 10.0**alpha_min * (1 + 1e-6): + warnings.warn( + f"The LASSO penalty chosen by cross-validation ({alpha_opt:e}) is on " + f"the lower bound 1e{alpha_min} in {log_file}. The anharmonic force " + "constants depend on this bound and may be wrong. Lower " + "anhar_alpha_min and refit.", + stacklevel=2, + ) + + +def _run_anharmonic_fit( + method: str, + supercell_matrix: np.ndarray, + symprec: float, + anhar_max_order: int, + fcs_cutoff_radius: Sequence[float], + num_anhar: int, + anhar_alpha_min: int, + work_dir: Path, + random_seed: int | None = 103, +) -> None: + """ + Fit the anharmonic force constants with pheasy using LASSO. + + Both methods use the same randomly displaced supercells. + + - "cocktail" keeps the second-order force constants fixed to the harmonic + fit (FORCE_CONSTANTS in work_dir) and fits only the higher orders. + - "one-shot" fits the second- and higher-order force constants together. + + pheasy writes FORCE_CONSTANTS_3RD and fc3.hdf5 to work_dir, and + FORCE_CONSTANTS_4TH and fc4.hdf5 for fourth order. The one-shot fit also + writes its second-order force constants, fc2.hdf5. + + Parameters + ---------- + method: str + "cocktail" or "one-shot". + supercell_matrix: np.ndarray + Diagonal supercell matrix. + symprec: float + Symmetry precision, the same one used for the displacements. + anhar_max_order: int + Highest force constant order, 3 or 4. + fcs_cutoff_radius: Sequence[float] + Cutoff radius in Bohr for each order, starting at second order. + num_anhar: int + Number of anharmonic displaced supercells. + anhar_alpha_min: int + Base-10 exponent of the smallest LASSO penalty in the search. + work_dir: Path + Folder holding POSCAR and the anharmonic displacement and force + matrices. + random_seed: int | None + Seed for the random coordinate descent in pheasy's LASSO fit. Without + it, the cross-validated penalty and the fitted force constants change + from run to run on the same forces. + """ + dim = " ".join(str(int(supercell_matrix[i][i])) for i in range(3)) + base = f"pheasy --dim {dim} -w {anhar_max_order} --symprec {float(symprec)}" + cutoffs = f"--c3 {float(fcs_cutoff_radius[1] / ANGSTROM_TO_BOHR)}" + if anhar_max_order == 4: + cutoffs += f" --c4 {float(fcs_cutoff_radius[2] / ANGSTROM_TO_BOHR)}" + nbody = "--nbody " + " ".join(str(n) for n in _NBODY[anhar_max_order]) + fix_fc2 = "--fix_fc2 --fc2_fmt PHONOPY " if method == "cocktail" else "" + log_file = _DEFAULT_FILE_PATHS["anharmonic_fit_log"] + seed = f"--seed {int(random_seed)} " if random_seed is not None else "" + + commands = [ + # clusters and orbits + f"{base} -s {nbody} {cutoffs}", + # null space + f"{base} -c", + # sensing matrix from the displacement matrix + ( + f"{base} -d --ndata {int(num_anhar)} --disp_file " + f"--disp_matrix_file {_DEFAULT_FILE_PATHS['anharmonic_displacements']}" + ), + # LASSO fit. OLS, pheasy's default, gives dense force constants. + # --std and --rasr are not passed to the anharmonic fit. + ( + f"{base} -f {fix_fc2}-l LASSO --alpha_min {anhar_alpha_min} {seed}" + f"--ndata {int(num_anhar)} --hdf5 " + f"--force_matrix_file {_DEFAULT_FILE_PATHS['anharmonic_force_matrix']} " + f"-o {log_file}" + ), + ] + # pheasy appends to its log, so remove the log of an earlier fit + (work_dir / log_file).unlink(missing_ok=True) + for cmd in commands: + subprocess.run(shlex.split(cmd), cwd=work_dir, check=True) + + _check_lasso_alpha(work_dir / log_file, anhar_alpha_min) + @job def get_supercell_size( @@ -77,7 +354,7 @@ def get_supercell_size( force_diagonal: bool, ) -> list[list[float]]: """ - Determine supercell size with given min_length and max_length. + Determine the supercell matrix with pymatgen's CubicSupercellTransformation. Parameters ---------- @@ -85,14 +362,12 @@ def get_supercell_size( Input structure that will be used to determine supercell min_length: float minimum length of cell in Angstrom - max_length: float - maximum length of cell in Angstrom - prefer_90_degrees: bool - if True, the algorithm will try to find a cell with 90 degree angles first - allow_orthorhombic: bool - if True, orthorhombic supercells are allowed - **kwargs: - Additional parameters that can be set. + max_atoms: int + maximum number of atoms in the supercell + force_90_degrees: bool + if True, only supercells with three 90 degree angles are allowed + force_diagonal: bool + if True, only diagonal supercell matrices are allowed """ transformation = CubicSupercellTransformation( min_length=min_length, @@ -115,21 +390,25 @@ def generate_phonon_displacements( cal_anhar_fcs: bool, displacement_anhar: float, num_disp_anhar: int, - fcs_cutoff_radius: list[int], + fcs_cutoff_radius: list[float], sym_reduce: bool, symprec: float, use_symmetrized_structure: str | None, kpath_scheme: str, code: str, + anhar_max_order: int = 3, + anhar_fit_methods: Sequence[str] = ("cocktail",), random_seed: int | None = 103, verbose: bool = False, ) -> list[Structure]: - """Generate small-distance perturbed structures with phonopy based on two ways. + """Generate the displaced supercells with phonopy. - (we will directly use the pheasy to generate the supercell in the near future) - 1. finite-displacment method (one displaced atom) when the displacement number - is less than 3. 2. random-displacement method (all-displaced atoms) when the - displacement number is more than 3. + The small-distance set for the harmonic force constants uses the + finite-displacement method (one displaced atom) when phonopy needs at most + three displacements, and the random-displacement method (all atoms + displaced) otherwise. With cal_anhar_fcs, a large-distance set of randomly + displaced supercells is added for the anharmonic force constants. The + undisplaced supercell is added last, for the residual forces. Parameters ---------- @@ -138,13 +417,20 @@ def generate_phonon_displacements( supercell_matrix: np.array array to describe supercell matrix displacement: float - displacement in Angstrom (default: 0.01) + displacement in Angstrom num_displaced_supercells: int - number of displaced supercells defined by users + number of harmonic random displacements, 0 for automatic. Not used when + phonopy needs at most three finite displacements. cal_anhar_fcs: bool - TODO : docstr + if True, also generate the large-distance displacements used for the + anharmonic force constants displacement_anhar: float - TODO : docstr + displacement in Angstrom for the anharmonic force constants + num_disp_anhar: int + number of anharmonic displaced supercells, 0 to set it from the number + of free force constants + fcs_cutoff_radius: list[float] + cutoff radius in Bohr for each force constant order, from second order sym_reduce: bool if True, symmetry will be used to generate displacements symprec: float @@ -155,17 +441,17 @@ def generate_phonon_displacements( scheme to generate kpath code: str code to perform the computations + anhar_max_order: int + highest anharmonic force constant order, 3 or 4 + anhar_fit_methods: Sequence[str] + anharmonic fit methods, used to size the anharmonic dataset random_seed : int | None = 103 - Random seed to use in generating randomly-displaced structures. + Random seed for the harmonic random displacements. The anharmonic set + uses random_seed + 1. verbose : bool = False - Whether to log warnings. + Whether to log warnings and the numbers of displaced supercells. """ - # TODO: remove ALMODE dependence for 2nd order force constants - if not ALM: - raise ImportError( - "Error importing ALM. Please ensure the 'alm' library is installed." - ) phonon = _generate_phonon_object( structure, supercell_matrix, @@ -178,91 +464,58 @@ def generate_phonon_displacements( verbose=verbose, ) - # 1. the ALM module is used to determine the number of free parameters - # (irreducible force constants) corresponding to the second order - # force constants (FCs) given a supercell. - # 2. Based on the number of free parameters, we can determine how many - # displaced supercells we need to use to extract the second order force - # constants. Generally, the number of free parameters should be less than - # 3 * natom(supercell) * num_displaced_supercells. However, the full rank - # of the matrix can not always guarantee accurate results, you - # may need to displace more random configurations. Use at least one or - # two more configurations based on the suggested number of displacements. supercell_ph = phonon.supercell - lattice = supercell_ph.cell - positions = supercell_ph.scaled_positions - numbers = supercell_ph.numbers - natom = len(numbers) - - # get the number of free parameters of 2ND FCs from ALM, labeled as n_fp - with ALM(lattice, positions, numbers) as alm: - alm.define(1) - alm.suggest() - n_fp = alm._get_number_of_irred_fc_elements(1) # noqa: SLF001 - - # get the number of displaced supercells based on the number of free parameters - num_disp_sc = int(np.ceil(n_fp / (3.0 * natom))) + num_har = _get_num_harmonic_supercells(phonon, num_displaced_supercells) if verbose: + (n_fp,) = _get_num_irreducible_fcs(supercell_ph, 2) logger.info( - f"There are {n_fp} free parameters for the second-order " - "force constants (FCs)." - f"There are {3 * natom * num_disp_sc} equations used to " - "obtain the second-order FCs." - "CAUTION: you may need to increase the number of " - "displacements in some cases." - "If the number of atoms in the supercell are less than 100 and " - "all lattice constants are less than 10 Å, the user is advised " - "to use 1-2 more randomly-displaced configurations." + f"There are {n_fp} free parameters for the second-order force " + f"constants (FCs), and {num_har} displaced supercells are used to " + "fit them. CAUTION: you may need to increase the number " + "of displacements in some cases. If the number of atoms in the " + "supercell is less than 100 and all lattice constants are less than " + "10 Å, the user is advised to use 1-2 more randomly-displaced " + "configurations." ) - # get the number of displaced supercells from phonopy to compared with the number - # of 3, if the number of displaced supercells is less than 3, we will use the finite - # displacement method to generate the supercells. Otherwise, we will use the random - # displacement method to generate the supercells. + # if phonopy needs more than three finite displacements, we use the random + # displacement method instead if len(phonon.displacements) > 3: phonon.generate_displacements( distance=displacement, - number_of_snapshots=( - num_displaced_supercells - if num_displaced_supercells != 0 - else int(np.ceil(num_disp_sc * 1.8)) + 1 - ), + number_of_snapshots=num_har, random_seed=random_seed, ) supercells = phonon.supercells_with_displacements displacements = [get_pmg_structure(cell) for cell in supercells] - # Here, the ALAMODE code is used to determine the number of - # third and fourth-order FCs are needed for the supercell if cal_anhar_fcs: - # Due to the cutoff radius of the force constants use the unit of Bohr in ALM, - # we need to convert the cutoff radius from Angstrom to Bohr. - with ALM(lattice * ANGSTROM_TO_BOHR, positions, numbers) as alm: - # Define the force constants up to fourth order with a list of - # cutoff radius - alm.define(3, fcs_cutoff_radius) - # Perform symmetry analysis and suggest irreducible force constants. - alm.suggest() - # Get the number of irreducible elements for both 3RD- and 4TH-order - # force constants - n_rd_anh = alm._get_number_of_irred_fc_elements( # noqa: SLF001 - 2 - ) + alm._get_number_of_irred_fc_elements(3) # noqa: SLF001 - # we can determine how many displaced supercells we need to use to extract - # the 3rd and 4th order force constants, and we can add a scaling factor - # to reduce the number of displaced supercells due to we use the lasso - # technique. - num_d_anh = int(np.ceil(n_rd_anh / (3.0 * natom))) - num_dis_cells_anhar = num_disp_anhar if num_disp_anhar != 0 else num_d_anh - - num_dis_cells_anhar = 20 - # generate the supercells for anharmonic force constants + _check_anharmonic_settings( + anhar_max_order, + anhar_fit_methods, + fcs_cutoff_radius=fcs_cutoff_radius, + num_disp_anhar=num_disp_anhar, + ) + num_dis_cells_anhar = _get_num_anharmonic_supercells( + supercell_ph, + num_disp_anhar, + anhar_max_order, + fcs_cutoff_radius, + anhar_fit_methods, + ) + if verbose: + logger.info( + f"{num_dis_cells_anhar} displaced supercells are used for the " + "anharmonic force constants." + ) + # generate the supercells for anharmonic force constants. A different + # seed keeps them from repeating the directions of a random harmonic set. phonon.generate_displacements( distance=displacement_anhar, number_of_snapshots=num_dis_cells_anhar, - random_seed=random_seed, + random_seed=None if random_seed is None else random_seed + 1, ) supercells = phonon.supercells_with_displacements displacements += [get_pmg_structure(cell) for cell in supercells] @@ -282,11 +535,7 @@ def generate_frequencies_eigenvectors( supercell_matrix: np.array, displacement: float, cal_anhar_fcs: bool, - fcs_cutoff_radius: list[int], - renorm_phonon: bool, - cal_ther_cond: bool, - ther_cond_mesh: list[int], - ther_cond_temp: list[int], + fcs_cutoff_radius: list[float], sym_reduce: bool, symprec: float, use_symmetrized_structure: str | None, @@ -296,10 +545,20 @@ def generate_frequencies_eigenvectors( total_dft_energy: float, epsilon_static: Matrix3D = None, born: Matrix3D = None, + num_displaced_supercells: int = 0, + anhar_max_order: int = 3, + anhar_fit_methods: Sequence[str] = ("cocktail",), + anhar_alpha_min: int = -12, + random_seed: int | None = 103, **kwargs, ) -> PhononBSDOSDoc: """ - Analyze the phonon runs and summarize the results. + Fit the force constants with pheasy and summarize the phonon results. + + The harmonic force constants give the band structure, density of states + and thermodynamic properties in the output document. With cal_anhar_fcs, + the anharmonic force constants are also fitted and written to files in + the job folder. They are not stored in the output document. Parameters ---------- @@ -309,6 +568,10 @@ def generate_frequencies_eigenvectors( array to describe supercell displacement: float displacement in Angstrom used for supercell computation + cal_anhar_fcs: bool + if True, the anharmonic force constants are fitted as well + fcs_cutoff_radius: list[float] + cutoff radius in Bohr for each force constant order, from second order sym_reduce: bool if True, symmetry will be used in phonopy symprec: float @@ -327,11 +590,30 @@ def generate_frequencies_eigenvectors( The high-frequency dielectric constant born: Matrix3D Born charges - verbose : bool = False - Whether to log error messages. + num_displaced_supercells: int + number of harmonic random displacements requested by the user, + 0 for automatic. Must match the value used to generate them. + anhar_max_order: int + highest anharmonic force constant order, 3 or 4 + anhar_fit_methods: Sequence[str] + "cocktail" (fixed second-order FCs), "one-shot" (all orders fitted + together, written to the one_shot folder), or both + anhar_alpha_min: int + base-10 exponent of the smallest LASSO penalty in the anharmonic fits + random_seed : int | None = 103 + Seed for the harmonic and anharmonic LASSO fits, so that they are + reproducible. kwargs: dict - Additional parameters that are passed to PhononBSDOSDoc.from_forces_born + Further options read by this job, such as npoints_band, filename_bs, + filename_dos, kpoint_density_dos and store_force_constants. """ + _check_anharmonic_settings( + anhar_max_order, + anhar_fit_methods, + cal_anhar_fcs, + fcs_cutoff_radius, + anhar_alpha_min, + ) phonon = _generate_phonon_object( structure, supercell_matrix, @@ -405,34 +687,7 @@ def generate_frequencies_eigenvectors( # separate the dataset into harmonic and anharmonic parts num_har = dataset_disps_array_use.shape[0] if cal_anhar_fcs: - if not ALM: - raise ImportError( - "Error importing ALM. Please ensure the 'alm' library is installed." - ) - - supercell_ph = phonon.supercell - lattice = supercell_ph.cell - positions = supercell_ph.scaled_positions - numbers = supercell_ph.numbers - natom = len(numbers) - - # get the number of free parameters of 2ND FCs from ALM, labeled as n_fp - with ALM(lattice, positions, numbers) as alm: - alm.define(1) - alm.suggest() - n_fp = alm._get_number_of_irred_fc_elements(1) # noqa: SLF001 - - # get the number of displaced supercells based on the - # number of free parameters - num = int(np.ceil(n_fp / (3.0 * natom))) - - # get the number of displaced supercells from phonopy to compared - # with the number of 3, if the number of displaced supercells is - # less than 3, we will use the finite displacement method to generate - # the supercells. Otherwise, we will use the random displacement - # method to generate the supercells. - num_disp_f = len(phonon.displacements) - num_har = int(np.ceil(num * 1.8)) if num_disp_f > 3 else num_disp_f + num_har = _get_num_harmonic_supercells(phonon, num_displaced_supercells) np.save( _DEFAULT_FILE_PATHS["harmonic_displacements"], @@ -475,11 +730,8 @@ def generate_frequencies_eigenvectors( prim = ase_read("POSCAR") supercell = ase_read("SPOSCAR") - # Create the clusters and orbitals for second order force constants - # For the variables: --w, --nbody, they are used to specify the order of the - # force constants. in the near future, we will add the option to specify the - # order of the force constants. And these two variables can be defined by the - # users. + # Create the clusters and orbitals for second order force constants. + # The harmonic fit is always second order (-w 2, --nbody 2). pheasy_cmd_1 = ( f"pheasy --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " @@ -523,6 +775,7 @@ def generate_frequencies_eigenvectors( f"-w 2 --symprec {float(symprec)} " f"-l LASSO --std --rasr BHH --ndata {int(num_har)} " f"--force_matrix_file {_DEFAULT_FILE_PATHS['harmonic_force_matrix']}" + + (f" --seed {int(random_seed)}" if random_seed is not None else "") ) else: @@ -543,12 +796,14 @@ def generate_frequencies_eigenvectors( subprocess.call(shlex.split(pheasy_cmd_3)) subprocess.call(shlex.split(pheasy_cmd_4)) - # When this code is run on Github tests, it is failing because it is - # not able to find the FORCE_CONSTANTS file. This is because the file is - # somehow getting generated in some temp directory. Can you fix the bug? fc_file = Path(_DEFAULT_FILE_PATHS["force_constants"]) + if cal_anhar_fcs and not fc_file.exists(): + raise RuntimeError( + "The harmonic pheasy fit did not write FORCE_CONSTANTS, so the " + "anharmonic force constants cannot be fitted." + ) - if cal_anhar_fcs and fc_file.exists(): + if cal_anhar_fcs: np.save( _DEFAULT_FILE_PATHS["anharmonic_displacements"], dataset_disps_array_use[num_har:, :, :], @@ -559,85 +814,31 @@ def generate_frequencies_eigenvectors( ) num_anhar = dataset_forces_array_disp.shape[0] - num_har - # We next begin to generate the anharmonic force constants up to fourth - # order using the LASSO method - pheasy_cmd_5 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -s -w 4 --symprec " - f"{float(symprec)} " - f"--nbody 2 3 3 --c3 {float(fcs_cutoff_radius[1] / ANGSTROM_TO_BOHR)} " - f"--c4 {float(fcs_cutoff_radius[2] / ANGSTROM_TO_BOHR)}" - ) - - pheasy_cmd_6 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -c --symprec " - f"{float(symprec)} -w 4" - ) - pheasy_cmd_7 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -w 4 -d --symprec " - f"{float(symprec)} " - f"--ndata {int(num_anhar)} --disp_file " - f"--disp_matrix_file {_DEFAULT_FILE_PATHS['anharmonic_displacements']}" - ) - pheasy_cmd_8 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -f -w 4 --fix_fc2 " - f"--symprec {float(symprec)} " - f"--ndata {int(num_anhar)} " - f"--force_matrix_file {_DEFAULT_FILE_PATHS['anharmonic_force_matrix']}" - ) - - subprocess.call(shlex.split(pheasy_cmd_5)) - subprocess.call(shlex.split(pheasy_cmd_6)) - subprocess.call(shlex.split(pheasy_cmd_7)) - subprocess.call(shlex.split(pheasy_cmd_8)) - - # begin to renormzlize the phonon energies - if renorm_phonon: - pheasy_cmd_9 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -f -w 4 --fix_fc2 " - f"--hdf5 --symprec {float(symprec)} " - f"--ndata {int(num_anhar)}" - ) - - subprocess.call(shlex.split(pheasy_cmd_9)) - - # write the born charges and dielectric constant to the pheasy format - - # begin to convert the force constants to the phonopy and phono3py format - # for the further lattice thermal conductivity calculations - if cal_ther_cond and fc_file.exists(): - # convert the 2ND order force constants to the phonopy format - fc_phonopy_text = parse_FORCE_CONSTANTS(filename=fc_file) - write_force_constants_to_hdf5(fc_phonopy_text, filename="fc2.hdf5") - - # convert the 3RD order force constants to the phonopy format - - prim_hiphive = ase_read("POSCAR") - supercell_hiphive = ase_read("SPOSCAR") - fcs = HiPhiveForceConstants.read_shengBTE( - supercell_hiphive, "FORCE_CONSTANTS_3RD", prim_hiphive - ) - fcs.write_to_phono3py("fc3.hdf5") - - phono3py_cmd = ( - f"phono3py --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} {int(supercell_matrix[2][2])} " - f"--fc2 --fc3 --br --isotope --wigner " - f"--mesh {ther_cond_mesh[0]} {ther_cond_mesh[1]} {ther_cond_mesh[2]} " - f"--tmin {ther_cond_temp[0]} --tmax {ther_cond_temp[1]} " - f"--tstep {ther_cond_temp[2]}" - ) - - subprocess.call(shlex.split(phono3py_cmd)) + # The cocktail fit runs here, next to the harmonic FORCE_CONSTANTS it + # keeps fixed. The one-shot fit runs in its own folder, because both + # fits write FORCE_CONSTANTS_3RD and fc3.hdf5. + for method in anhar_fit_methods: + work_dir = Path.cwd() + if method == "one-shot": + work_dir = Path(_DEFAULT_FILE_PATHS["one_shot_dir"]).resolve() + work_dir.mkdir(exist_ok=True) + for filename in ( + "POSCAR", + _DEFAULT_FILE_PATHS["anharmonic_displacements"], + _DEFAULT_FILE_PATHS["anharmonic_force_matrix"], + ): + shutil.copy(filename, work_dir / filename) + _run_anharmonic_fit( + method=method, + supercell_matrix=supercell_matrix, + symprec=symprec, + anhar_max_order=anhar_max_order, + fcs_cutoff_radius=fcs_cutoff_radius, + num_anhar=num_anhar, + anhar_alpha_min=anhar_alpha_min, + work_dir=work_dir, + random_seed=random_seed, + ) if fc_file.exists(): # Read the force constants from the output file of pheasy code @@ -678,10 +879,8 @@ def generate_frequencies_eigenvectors( # If imaginary modes are present, we first use the hiphive code to enforce # some symmetry constraints to eliminate the imaginary modes (generally work # for small imaginary modes near Gamma point). If the imaginary modes are - # still present, we will use the pheasy code to generate the force constants - # using a shorter cutoff (10 A) to eliminate the imaginary modes, also we - # just want to remove the imaginary modes near Gamma point. In the future, - # we will only use the pheasy code to do the job. + # still present, a pheasy refit with a shorter cutoff (10 A) follows, but + # its result is currently not used (see the NOTE below). if imaginary_modes: # Define a cluster space using the largest cutoff you can @@ -727,7 +926,11 @@ def generate_frequencies_eigenvectors( ) # Using a shorter cutoff (10 A) to generate the force constants to - # eliminate the imaginary modes near Gamma point in pheasy code + # eliminate the imaginary modes near Gamma point in pheasy code. + # NOTE: the force constants are read back below from + # FORCE_CONSTANTS_short_cutoff, the file the hiPhive step above wrote, so + # the result of this pheasy refit is not used. If the refit succeeds, it + # overwrites FORCE_CONSTANTS in the job folder. if imaginary_modes: pheasy_cmd_11 = ( f"pheasy --dim {int(supercell_matrix[0][0])} " diff --git a/src/atomate2/common/jobs/phonons.py b/src/atomate2/common/jobs/phonons.py index d013269ba7..a148f047d0 100644 --- a/src/atomate2/common/jobs/phonons.py +++ b/src/atomate2/common/jobs/phonons.py @@ -44,7 +44,10 @@ from atomate2.vasp.jobs.base import BaseVaspMaker if TYPE_CHECKING: + from collections.abc import Sequence + from emmet.core.math import Matrix3D + from phonopy.structure.atoms import PhonopyAtoms from atomate2.aims.jobs.base import BaseAimsMaker from atomate2.ase.jobs import AseRelaxMaker @@ -52,6 +55,114 @@ logger = logging.getLogger(__name__) +# CODATA 2018: 1 Angstrom = 1 / 0.529177210903 Bohr +ANGSTROM_TO_BOHR = 1.8897261246257702 + + +def _get_num_irreducible_fcs( + supercell: PhonopyAtoms, + max_order: int, + fcs_cutoff_radius: Sequence[float] | None = None, + nbody: Sequence[int] | None = None, +) -> list[int]: + """ + Count the symmetry-irreducible force constants of each order with ALM. + + Used by the pheasy and hiPhive workflows to size their displacement sets. + + Parameters + ---------- + supercell: PhonopyAtoms + Supercell used for the force constant fit. + max_order: int + Highest force constant order to count, 2, 3 or 4. + fcs_cutoff_radius: Sequence[float] | None + Cutoff radius in Bohr for each order, starting at second order. + Only needed when max_order is larger than 2. + nbody: Sequence[int] | None + Largest number of atoms in a cluster for each order, starting at second + order, as in ALM's define. None keeps all clusters. + + Returns + ------- + list[int] + Number of irreducible force constants for each order, starting at + second order. + """ + try: + from alm import ALM + except ImportError as exc: + raise ImportError( + "Error importing ALM. Please ensure the 'alm' library is installed." + ) from exc + + positions = supercell.scaled_positions + numbers = supercell.numbers + + if max_order == 2: + # TODO: remove ALMODE dependence for 2nd order force constants + # the harmonic count uses no cutoff, so the lattice stays in Angstrom + with ALM(supercell.cell, positions, numbers) as alm: + alm.define(1) + alm.suggest() + return [alm._get_number_of_irred_fc_elements(1)] # noqa: SLF001 + + # ALM expects the lattice in Bohr when cutoff radii in Bohr are given, and + # one cutoff per order and per pair of elements + n_elements = len(set(numbers)) + cutoff_radii = [ + np.full((n_elements, n_elements), radius) + for radius in fcs_cutoff_radius[: max_order - 1] + ] + with ALM(supercell.cell * ANGSTROM_TO_BOHR, positions, numbers) as alm: + alm.define(max_order - 1, cutoff_radii=cutoff_radii, nbody=nbody) + alm.suggest() + return [ + alm._get_number_of_irred_fc_elements(order) # noqa: SLF001 + for order in range(1, max_order) + ] + + +def _get_num_harmonic_supercells( + phonon: Phonopy, num_displaced_supercells: int, multiplier: float = 1.8 +) -> int: + """ + Get the number of displaced supercells used for the harmonic force constants. + + Used by the pheasy and hiPhive workflows. In pheasy, both the displacement + generation and the fit call this function, so the dataset is always split + into its harmonic and anharmonic parts at the same place. + + If phonopy needs three or fewer finite displacements, these are used as + they are. Otherwise random displacements are used. Their number is either + given by the user or set from the number of free second-order force + constants, n_fp. The minimum is ceil(n_fp / (3 * natom)). Because the full + rank of the matrix does not guarantee an accurate fit, multiplier times + this minimum plus one configuration is used. + + Parameters + ---------- + phonon: Phonopy + Phonopy object holding the finite displacements. + num_displaced_supercells: int + Number of random displacements requested by the user, 0 for automatic. + multiplier: float + Number of configurations per minimum configuration set. + + Returns + ------- + int + Number of harmonic displaced supercells. + """ + if len(phonon.displacements) <= 3: + return len(phonon.displacements) + if num_displaced_supercells != 0: + return num_displaced_supercells + (n_fp,) = _get_num_irreducible_fcs(phonon.supercell, 2) + natom = len(phonon.supercell.numbers) + num_disp_sc = int(np.ceil(n_fp / (3.0 * natom))) + return int(np.ceil(num_disp_sc * multiplier)) + 1 + def _get_kpath( structure: Structure, kpath_scheme: str, symprec: float, **kpath_kwargs diff --git a/src/atomate2/vasp/flows/pheasy.py b/src/atomate2/vasp/flows/pheasy.py index fca5039a00..14a4368c4a 100644 --- a/src/atomate2/vasp/flows/pheasy.py +++ b/src/atomate2/vasp/flows/pheasy.py @@ -18,22 +18,24 @@ @dataclass class PhononMaker(BasePhononMaker): - """Maker to calculate harmonic phonons with LASSO-based ML code Pheasy. + """Maker to calculate harmonic phonons and anharmonic FCs with Pheasy. - Calculate the zero-K harmonic phonons of a material and higher-order FCs. - Initially, a tight structural relaxation is performed to obtain a structure - without forces on the atoms. Subsequently, supercells with all atoms displaced - by a small amplitude (generally using 0.01 A) are generated and accurate forces - are computed for these structures for the second order force constants. With the - help of pheasy (LASSO technique), these forces are then converted into a dynamical - matrix. In this Workflow, we separate the harmonic phonon calculations and - anharmonic force constants calculations. To correct for polarization effects, a + Calculate the zero-K harmonic phonons of a material and, optionally, its + anharmonic FCs. Initially, a tight structural relaxation is performed to obtain + a structure without forces on the atoms. Subsequently, displaced supercells + (generally using 0.01 A) are generated and accurate forces are computed for + them. If phonopy needs more than three finite displacements, all atoms are + displaced randomly and pheasy fits the second order force constants with LASSO. + Otherwise, the finite displacements are used with a least-squares fit. These + force constants are then converted into a dynamical matrix. In this Workflow, + we separate the harmonic phonon calculations and anharmonic force constants + calculations. To correct for polarization effects, a correction of the dynamical matrix based on BORN charges can be performed. Finally, phonon densities of states, phonon band structures and thermodynamic properties are computed. For the anharmonic force constants, the supercells with all atoms displaced by a larger amplitude (generally using 0.08 A) are generated and accurate forces are computed for these structures. With the help of pheasy (LASSO technique), - the third- and fourth-order force constants are extracted at once. + the third-order (and optionally fourth-order) force constants are extracted. .. Note:: It is heavily recommended to symmetrize the structure before passing it to @@ -62,35 +64,66 @@ class PhononMaker(BasePhononMaker): number of displacements to be generated using a random-displacement approach for harmonic phonon calculations. The default value is 0 and the number of displacements is automatically determined by the number of atoms in the - supercell and its space group. + supercell and its space group. Not used when phonopy needs at most three + finite displacements. cal_anhar_fcs: bool - if set to True, anharmonic force constants(FCs) up to fourth-order FCs will - be calculated. The default value is False, and only harmonic phonons will - be calculated. + if set to True, anharmonic force constants(FCs) up to order + anhar_max_order will be calculated. The default value is False, and only + harmonic phonons will be calculated. displacement_anhar: float - displacement distance for anharmonic force constants(FCs) up to fourth-order - FCs, for most cases 0.08 A is a good choice, but it can be increased to 0.1 A. + displacement distance for the anharmonic force constants(FCs). The default + is 0.08 A. num_disp_anhar: int number of displacements to be generated using a random-displacement approach - for anharmonic phonon calculations. The default value is 0 and the number of - displacements is automatically determined by the number of atoms in the - supercell, cutoff distance for anharmonic FCs its space group. generally, - 50 large-distance displacements are enough for most cases. + for anharmonic phonon calculations. A non-zero value is used as given. The + default value is 0, and then the number is set so that the fit has 100 force + equations per free force constant, with at least 20 displaced supercells. + Above 600 the job stops. The free force constants are counted with ALM, which + uses its own symmetry search, for this supercell and fcs_cutoff_radius. The + second-order FCs are included when "one-shot" is requested. + anhar_max_order: int + highest order of the anharmonic FCs, 3 or 4. The default of 3 fits the + third-order FCs. 4 also fits fourth-order FCs. + anhar_fit_methods: Sequence[Literal["cocktail", "one-shot"]] + how the anharmonic FCs are fitted to the large-distance dataset. + "cocktail" keeps the second-order FCs fixed to the harmonic fit and fits + only the higher orders. "one-shot" fits the second- and higher-order FCs + together from the same dataset and writes them to the "one_shot" folder. + Both can be requested. The default is ("cocktail",). The cocktail FCs are + written to the job folder, and the one-shot FCs, including fc2.hdf5, to its + one_shot subfolder: FORCE_CONSTANTS_3RD and fc3.hdf5, plus + FORCE_CONSTANTS_4TH and fc4.hdf5 at fourth order. They are not stored in the + output document. The LASSO fits are seeded, so a run is reproducible. With + few displaced supercells, the one-shot result depends on that seed. + anhar_alpha_min: int + base-10 exponent of the smallest LASSO penalty tried by cross-validation + in the anharmonic fits. It must be an integer below -2. The default of -12 + is below pheasy's own default of -6. If the chosen penalty lands on either + end of the search, 10**anhar_alpha_min or pheasy's 1e-2, a warning is + raised. fcs_cutoff_radius: list - cutoff distance for anharmonic force constants(FCs) up to fourth-order FCs. - The default value is [-1, 12, 10], which means that the cutoff distance for - second-order FCs is the Wigner-Seitz cell boundary and the cutoff distance - for third-order FCs is 12 Borh, and the cutoff distance for fourth-order FCs - is 10 Bohr. Generally, the default value is good enough. + cutoff distance in Bohr for each FC order, starting at second order. The + default value is [-1, 12, 10]. The first entry is not used, since pheasy + fits the second-order FCs without a cutoff. The second and third entries + are the cutoffs for third- and fourth-order FCs. The cutoff of each fitted + order, up to anhar_max_order, must be positive. Longer cutoffs increase + the number of free FCs, and with it the number of displaced supercells. min_length: float minimum length of lattice constants will be used to create the supercell, - the default value is 14.0 A. In most cases, the default value is good - enough, but it can be increased for larger supercells. + the default value is 8.0 A. It can be increased for larger supercells. + max_atoms: float | None + maximum number of atoms in the supercell. + force_90_degrees: bool + if set to True, only supercells with three 90 degree angles are allowed. + force_diagonal: bool + if set to True, only diagonal supercell matrices are allowed. The pheasy + commands take the diagonal of the supercell matrix. prefer_90_degrees: bool - if set to True, supercell algorithm will first try to find a supercell - with 3 90 degree angles. + not used by this workflow, which uses force_90_degrees instead. + allow_orthorhombic: bool + not used by this workflow. get_supercell_size_kwargs: dict - kwargs that will be passed to get_supercell_size to determine supercell size + not used by this workflow. use_symmetrized_structure: str allowed strings: "primitive", "conventional", None diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py new file mode 100644 index 0000000000..3bf0bb7067 --- /dev/null +++ b/tests/common/jobs/test_pheasy.py @@ -0,0 +1,304 @@ +"""Tests for the anharmonic force constant fit of the pheasy workflow. + +Forces come from ASE's EMT potential, so the jobs run end to end without any +DFT reference data. +""" + +import warnings +from pathlib import Path + +import h5py +import numpy as np +import pytest +from ase.build import bulk +from ase.calculators.emt import EMT +from jobflow import run_locally +from phonopy.file_IO import parse_FORCE_CONSTANTS +from pymatgen.core import Lattice, Structure +from pymatgen.io.ase import AseAtomsAdaptor + +import atomate2.common.jobs.pheasy as pheasy_jobs +from atomate2.common.jobs.pheasy import ( + _check_lasso_alpha, + _get_num_anharmonic_supercells, + generate_frequencies_eigenvectors, + generate_phonon_displacements, +) +from atomate2.common.jobs.phonons import ( + _generate_phonon_object, + _get_num_irreducible_fcs, +) + +# fcs_cutoff_radius in Bohr. 8 Bohr (4.2 A) covers the first two neighbour +# shells of fcc Cu (2.55 and 3.61 A) and stays inside the 10.8 A supercell. +FCS_CUTOFF_RADIUS = [-1, 8, 8] + +COMMON_KWARGS = { + "supercell_matrix": [[3, 0, 0], [0, 3, 0], [0, 0, 3]], + "displacement": 0.01, + "sym_reduce": True, + "symprec": 1e-3, + "use_symmetrized_structure": None, + "kpath_scheme": "seekpath", + "code": "vasp", +} + +FIT_KWARGS = { + "total_dft_energy": None, + "static_run_job_dir": None, + "static_run_uuid": None, + "born_run_job_dir": None, + "born_run_uuid": None, + "optimization_run_job_dir": None, + "optimization_run_uuid": None, +} + + +def _emt_displacement_data(structures: list[Structure]) -> dict: + forces = [] + for structure in structures: + atoms = AseAtomsAdaptor.get_atoms(structure) + atoms.calc = EMT() + forces.append(atoms.get_forces().tolist()) + return { + "forces": forces, + "displaced_structures": structures, + "dirs": [None] * len(structures), + "uuids": [None] * len(structures), + } + + +def _max_abs_fc(filename: Path, key: str) -> float: + with h5py.File(filename) as f: + return float(np.abs(f[key][:]).max()) + + +def _cu_structure() -> Structure: + return AseAtomsAdaptor.get_structure(bulk("Cu", "fcc", a=3.61, cubic=True)) + + +@pytest.mark.parametrize("num_displaced_supercells", [0, 3]) +def test_harmonic_and_anharmonic_split(tmp_dir, num_displaced_supercells): + """The fit job must split the forces where the displacement job did. + + Before this was fixed, the fit job used one harmonic supercell fewer than + the displacement job made, and it ignored num_displaced_supercells. + """ + # a distorted Cu cell needs more than three finite displacements, so the + # random-displacement path is used for the harmonic force constants + structure = Structure( + Lattice.orthorhombic(3.6, 3.7, 3.8), + ["Cu"] * 4, + [[0, 0, 0], [0.5, 0.5, 0.02], [0.5, 0.03, 0.5], [0.01, 0.5, 0.5]], + ) + kwargs = {**COMMON_KWARGS, "supercell_matrix": [[2, 0, 0], [0, 2, 0], [0, 0, 2]]} + assert len(_generate_phonon_object(structure, **kwargs).displacements) > 3 + anhar_kwargs = { + "cal_anhar_fcs": True, + "fcs_cutoff_radius": [-1, 6, 6], + "num_displaced_supercells": num_displaced_supercells, + } + + job = generate_phonon_displacements( + structure=structure, + displacement_anhar=0.03, + num_disp_anhar=20, + **anhar_kwargs, + **kwargs, + ) + responses = run_locally(job, create_folders=True, ensure_success=True) + displacements = responses[job.uuid][1].output + # the harmonic set, 20 anharmonic supercells, then the undisplaced supercell + num_har = len(displacements) - 20 - 1 + assert num_har == (num_displaced_supercells or 14) + + job = generate_frequencies_eigenvectors( + structure=structure, + displacement_data=_emt_displacement_data(displacements), + **anhar_kwargs, + **FIT_KWARGS, + **kwargs, + ) + run_locally(job, create_folders=True, ensure_success=True) + + (fit_dir,) = (path.parent for path in Path.cwd().glob("job_*/disp_matrix.npy")) + harmonic = np.load(fit_dir / "disp_matrix.npy") + anharmonic = np.load(fit_dir / "disp_matrix_anhar.npy") + assert harmonic.shape[0] == num_har + assert anharmonic.shape[0] == 20 + + # the anharmonic set is drawn with its own seed, so its directions differ + # from those of the random harmonic set + assert not np.allclose(harmonic[0] / 0.01, anharmonic[0] / 0.03) + + +def test_get_num_anharmonic_supercells(monkeypatch): + phonon = _generate_phonon_object(_cu_structure(), **COMMON_KWARGS) + kwargs = { + "supercell": phonon.supercell, + "anhar_max_order": 3, + "fcs_cutoff_radius": [-1, 12, 10], + "anhar_fit_methods": ["one-shot"], + } + + # a value set by the user is used as it is + assert _get_num_anharmonic_supercells(num_disp_anhar=7, **kwargs) == 7 + + # sized from the free force constants, above the floor of 20 + assert _get_num_irreducible_fcs(phonon.supercell, 3, [-1, 12]) == [25, 324] + assert _get_num_anharmonic_supercells(num_disp_anhar=0, **kwargs) == 108 + + # the first cutoff is not used, since pheasy fits fc2 without a cutoff + fc2_cutoff = {**kwargs, "fcs_cutoff_radius": [5, 12, 10]} + assert _get_num_anharmonic_supercells(num_disp_anhar=0, **fc2_cutoff) == 108 + + # fourth order, with the three-body limit this workflow passes to pheasy + order_4 = {**kwargs, "anhar_max_order": 4, "anhar_fit_methods": ["cocktail"]} + assert _get_num_anharmonic_supercells(num_disp_anhar=0, **order_4) == 224 + + # a binary compound, L1_2 Cu3Au, needs one cutoff per pair of elements + cu3au = Structure( + Lattice.cubic(3.75), + ["Au", "Cu", "Cu", "Cu"], + [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], + ) + binary = { + **kwargs, + "supercell": _generate_phonon_object(cu3au, **COMMON_KWARGS).supercell, + } + assert _get_num_anharmonic_supercells(num_disp_anhar=0, **binary) == 337 + + # above the ceiling the job stops + monkeypatch.setattr(pheasy_jobs, "_MAX_NUM_DISP_ANHAR", 30) + with pytest.raises(ValueError, match="more than the limit of 30"): + _get_num_anharmonic_supercells(num_disp_anhar=0, **kwargs) + + +def test_check_lasso_alpha(tmp_dir): + log_file = Path("pheasy_anharmonic_fit.log") + + log_file.write_text("- alpha_min: 1e-12\n- alpha_opt: 2.947052e-09\n") + with warnings.catch_warnings(): + warnings.simplefilter("error") + _check_lasso_alpha(log_file, alpha_min=-12) + + log_file.write_text("- alpha_min: 1e-12\n- alpha_opt: 1.000000e-12\n") + with pytest.warns(UserWarning, match="on the lower bound"): + _check_lasso_alpha(log_file, alpha_min=-12) + + log_file.write_text("- alpha_max: 1e-2\n- alpha_opt: 1.000000e-02\n") + with pytest.warns(UserWarning, match="on the upper bound"): + _check_lasso_alpha(log_file, alpha_min=-12) + + log_file.write_text("Fitting force constants via the ordinary least-square.\n") + with pytest.raises(RuntimeError, match="No LASSO alpha"): + _check_lasso_alpha(log_file, alpha_min=-12) + + log_file.unlink() + with pytest.raises(FileNotFoundError, match="exited without writing"): + _check_lasso_alpha(log_file, alpha_min=-12) + + +def test_anharmonic_fit_cocktail_and_one_shot(tmp_dir): + structure = _cu_structure() + anhar_kwargs = { + "cal_anhar_fcs": True, + "fcs_cutoff_radius": FCS_CUTOFF_RADIUS, + "anhar_fit_methods": ["cocktail", "one-shot"], + } + + job = generate_phonon_displacements( + structure=structure, + num_displaced_supercells=0, + displacement_anhar=0.03, + num_disp_anhar=0, + **anhar_kwargs, + **COMMON_KWARGS, + ) + responses = run_locally(job, create_folders=True, ensure_success=True) + displacements = responses[job.uuid][1].output + # one finite displacement for fcc Cu, the anharmonic set at its floor of + # 20, then the undisplaced supercell + assert len(displacements) == 1 + 20 + 1 + + job = generate_frequencies_eigenvectors( + structure=structure, + displacement_data=_emt_displacement_data(displacements), + **anhar_kwargs, + **FIT_KWARGS, + **COMMON_KWARGS, + ) + # a LASSO penalty on either bound of the search fails the test + with warnings.catch_warnings(): + warnings.filterwarnings("error", message="The LASSO penalty") + run_locally(job, create_folders=True, ensure_success=True) + + (fit_dir,) = (path.parent for path in Path.cwd().glob("job_*/fc3.hdf5")) + one_shot_dir = fit_dir / "one_shot" + + # both fits used LASSO + for folder in (fit_dir, one_shot_dir): + log = (folder / "pheasy_anharmonic_fit.log").read_text() + assert "coordinate descent LASSO" in log + + # the one-shot fc2 agrees with the harmonic fc2, which it does not overwrite + harmonic_fc2 = np.abs(parse_FORCE_CONSTANTS(fit_dir / "FORCE_CONSTANTS")).max() + assert _max_abs_fc(one_shot_dir / "fc2.hdf5", "fc2") == pytest.approx( + harmonic_fc2, rel=0.05 + ) + + # third-order force constants in eV/A^3. With 20 supercells, the one-shot + # value changed by about 10 percent with the LASSO seed in local runs, + # while the cocktail value did not, so only the cocktail value is pinned. + cocktail_fc3 = _max_abs_fc(fit_dir / "fc3.hdf5", "fc3") + assert cocktail_fc3 == pytest.approx(4.551, rel=0.02) + assert _max_abs_fc(one_shot_dir / "fc3.hdf5", "fc3") == pytest.approx( + cocktail_fc3, rel=0.15 + ) + + +def test_anharmonic_fit_fourth_order(tmp_dir): + """The fourth-order fit runs and writes fc4.""" + structure = _cu_structure() + anhar_kwargs = { + "cal_anhar_fcs": True, + "fcs_cutoff_radius": FCS_CUTOFF_RADIUS, + "anhar_max_order": 4, + "anhar_fit_methods": ["cocktail"], + } + + job = generate_phonon_displacements( + structure=structure, + num_displaced_supercells=0, + # the workflow default. At 0.03 A, cross-validation chose the lowest + # penalty, 1e-12. + displacement_anhar=0.08, + num_disp_anhar=20, + **anhar_kwargs, + **COMMON_KWARGS, + ) + responses = run_locally(job, create_folders=True, ensure_success=True) + displacements = responses[job.uuid][1].output + + job = generate_frequencies_eigenvectors( + structure=structure, + displacement_data=_emt_displacement_data(displacements), + **anhar_kwargs, + **FIT_KWARGS, + **COMMON_KWARGS, + ) + # a LASSO penalty on either bound of the search fails the test + with warnings.catch_warnings(): + warnings.filterwarnings("error", message="The LASSO penalty") + run_locally(job, create_folders=True, ensure_success=True) + + (fit_dir,) = (path.parent for path in Path.cwd().glob("job_*/fc4.hdf5")) + assert (fit_dir / "FORCE_CONSTANTS_4TH").exists() + assert ( + "coordinate descent LASSO" + in (fit_dir / "pheasy_anharmonic_fit.log").read_text() + ) + + # force constants in eV/A^3 and eV/A^4 + assert _max_abs_fc(fit_dir / "fc3.hdf5", "fc3") == pytest.approx(4.601, rel=0.02) + assert _max_abs_fc(fit_dir / "fc4.hdf5", "fc4") == pytest.approx(48.92, rel=0.05) diff --git a/tests/vasp/flows/test_pheasy.py b/tests/vasp/flows/test_pheasy.py index 81effe8249..d057def21f 100644 --- a/tests/vasp/flows/test_pheasy.py +++ b/tests/vasp/flows/test_pheasy.py @@ -154,3 +154,68 @@ def test_pheasy_wf_vasp(mock_vasp, clean_dir, si_structure: Structure, test_dir) assert thermo_props["heat_capacity"][1] == pytest.approx(20.0, abs=2.5) # the high-T limit must approach (but not exceed) Dulong-Petit (3R per atom) assert 23.0 < thermo_props["heat_capacity"][2] < 3 * 8.3145 + + +@pytest.mark.parametrize( + ("settings", "match"), + [ + ({"cal_anhar_fcs": True, "anhar_max_order": 5}, "anhar_max_order"), + ({"cal_anhar_fcs": True, "anhar_fit_methods": ["joint"]}, "anhar_fit_methods"), + ({"cal_anhar_fcs": True, "anhar_fit_methods": []}, "anhar_fit_methods"), + ({"cal_anhar_fcs": True, "fcs_cutoff_radius": [-1, -2, 10]}, "positive"), + ({"anhar_alpha_min": -12.0}, "integer below -2"), + ({"cal_anhar_fcs": True, "num_disp_anhar": -1}, "non-negative integer"), + ( + {"cal_anhar_fcs": True, "anhar_fit_methods": ["cocktail", "cocktail"]}, + "without repeats", + ), + ({"anhar_alpha_min": -1}, "integer below -2"), + ( + { + "cal_anhar_fcs": True, + "anhar_max_order": 4, + "fcs_cutoff_radius": [-1, 12], + }, + "positive", + ), + ], +) +def test_pheasy_anharmonic_settings_are_checked(settings, match): + with pytest.raises(ValueError, match=match): + PhononMaker(**settings) + + +def test_pheasy_maker_passes_anharmonic_settings(si_structure: Structure): + """Both pheasy jobs must get the same settings, or the dataset is split wrong.""" + # every value differs from its default, so a dropped keyword is caught + settings = { + "cal_anhar_fcs": True, + "num_displaced_supercells": 5, + "num_disp_anhar": 30, + "displacement_anhar": 0.05, + "anhar_max_order": 4, + "anhar_fit_methods": ["cocktail", "one-shot"], + "anhar_alpha_min": -10, + "fcs_cutoff_radius": [-1, 11, 9], + "displacement": 0.02, + "symprec": 1e-4, + "sym_reduce": False, + } + flow = PhononMaker(**settings).make(structure=si_structure) + jobs = {job.name: job for job in flow.jobs} + displacements = jobs["generate_phonon_displacements"].function_kwargs + fit = jobs["generate_frequencies_eigenvectors"].function_kwargs + for key in ( + "cal_anhar_fcs", + "num_displaced_supercells", + "anhar_max_order", + "anhar_fit_methods", + "fcs_cutoff_radius", + "displacement", + "symprec", + "sym_reduce", + ): + assert displacements[key] == fit[key] == settings[key] + assert displacements["num_disp_anhar"] == 30 + assert displacements["displacement_anhar"] == 0.05 + assert fit["anhar_alpha_min"] == -10 diff --git a/tutorials/pheasy_workflow.ipynb b/tutorials/pheasy_workflow.ipynb index 1a27755a5b..6f6742b043 100644 --- a/tutorials/pheasy_workflow.ipynb +++ b/tutorials/pheasy_workflow.ipynb @@ -46,7 +46,7 @@ "\n", "The workflow has the same basic structure as the phonopy-based phonon workflow and uses [Phonopy](https://doi.org/10.7566/JPSJ.92.012001) to post-process the force constants into band structures, densities of states, and thermodynamic properties.\n", "\n", - "To run this tutorial, the `pheasy` extra must be installed: `pip install 'atomate2[phonons,pheasy]'`. Anharmonic force-constant extraction (`cal_anhar_fcs=True`) additionally requires the `alamode` extra — see the atomate2 VASP documentation for installation hints." + "To run this tutorial, the `pheasy` extra must be installed: `pip install 'atomate2[pheasy]'`. It includes phonopy and ALM. ALM is compiled from source. See the atomate2 VASP documentation if that build fails." ] }, { @@ -83,7 +83,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Then we use the pheasy `PhononMaker` to generate a `Flow`. The maker mirrors the phonopy-based `PhononMaker`; the most important additional switches are `cal_anhar_fcs` (extract anharmonic force constants up to fourth order and renormalize the phonon energies) and `fcs_cutoff_radius` (cutoff radii for the second-, third- and fourth-order force constants). Here we only extract harmonic force constants for silicon. As always, a tight structural relaxation is performed first — make sure it is converged very accurately for production runs." + "Then we use the pheasy `PhononMaker` to generate a `Flow`. The maker mirrors the phonopy-based `PhononMaker`; the most important additional switches are `cal_anhar_fcs` (extract anharmonic force constants, third order by default, set by `anhar_max_order`) and `fcs_cutoff_radius` (cutoff radii in Bohr for the third- and fourth-order force constants, the first entry is not used). Here we only extract harmonic force constants for silicon. As always, a tight structural relaxation is performed first — make sure it is converged very accurately for production runs." ] }, { @@ -117,7 +117,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The flow relaxes the bulk structure, generates a set of randomly displaced supercells, computes their forces with VASP, and then fits the force constants with pheasy. We can visualize the flow first." + "The flow relaxes the bulk structure, generates the displaced supercells (a single finite displacement for silicon), computes their forces with VASP, and then fits the force constants with pheasy. We can visualize the flow first." ] }, { @@ -209,9 +209,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Anharmonic force constants and phonon renormalization\n", + "## Anharmonic force constants\n", "\n", - "To go beyond the harmonic approximation, set `cal_anhar_fcs=True`. Pheasy will then extract third- and fourth-order force constants with LASSO regression (the cutoff radii are controlled by `fcs_cutoff_radius`). With `renorm_phonon=True`, the phonon energies are additionally renormalized at the temperatures given by `renorm_temp`. The lattice thermal conductivity can additionally be computed with `cal_ther_cond=True` (requires phono3py). Both options need more displaced supercells than the harmonic run shown here — pheasy will tell you how many it generated.\n", + "To go beyond the harmonic approximation, set `cal_anhar_fcs=True`. Pheasy will then extract third-order force constants with LASSO regression, and fourth-order ones too with `anhar_max_order=4` (the cutoff radii are controlled by `fcs_cutoff_radius`). The number of anharmonic displaced supercells is set from the number of free force constants, with at least 20. Above 600 the job stops unless `num_disp_anhar` is set.\n", "\n", "The same workflow is also available for forcefields via `from atomate2.forcefields.flows.pheasy import PhononMaker`, which is a cheap way to try it out without DFT." ] From db70c81c014bb7fd9b25808ffad1931c45bf1918 Mon Sep 17 00:00:00 2001 From: Jiongzhi ZHENG Date: Tue, 29 Sep 2026 20:17:01 +0800 Subject: [PATCH 02/43] Update pheasy.py --- src/atomate2/common/jobs/pheasy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index eb2648b817..1bedf0183a 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -1,4 +1,5 @@ -"""Jobs for running phonon calculations with phonopy and pheasy.""" +"""Jobs for running phonon,Higher-order FCs calculations with phonopy and pheasy. +and lattice thermal conductivity calculations using SHENGBTE and FOURPHONON.""" from __future__ import annotations From e0e191b9b16ab55a485db7a3ee78faf9a8e6f351 Mon Sep 17 00:00:00 2001 From: Jiongzhi ZHENG Date: Tue, 29 Sep 2026 20:24:40 +0800 Subject: [PATCH 03/43] Update pheasy.py --- src/atomate2/common/jobs/pheasy.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 1bedf0183a..3bca46db70 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -840,6 +840,12 @@ def generate_frequencies_eigenvectors( work_dir=work_dir, random_seed=random_seed, ) + + # End of anharmonic fit section + # and begin to calculate the anharmonic phonon priopoerties + # (e.g., phonon lifetimes, linewidths, etc.) using SHENGBTE and FOURPHONON. + # maybe we also need to do the phonon renormalization here. + # TODO: Implement the calculation of anharmonic phonon properties and phonon renormalization here. if fc_file.exists(): # Read the force constants from the output file of pheasy code From 537609c4f15ae035a49cc8807bb65a85e5ce6729 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 29 Sep 2026 22:27:02 -0700 Subject: [PATCH 04/43] Fix lint in pheasy job comments --- src/atomate2/common/jobs/pheasy.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 3bca46db70..578ab1e492 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -1,5 +1,8 @@ -"""Jobs for running phonon,Higher-order FCs calculations with phonopy and pheasy. -and lattice thermal conductivity calculations using SHENGBTE and FOURPHONON.""" +"""Jobs for running phonon and higher-order FC calculations with phonopy and pheasy. + +Lattice thermal conductivity calculations using ShengBTE and FourPhonon are +planned. +""" from __future__ import annotations @@ -840,12 +843,13 @@ def generate_frequencies_eigenvectors( work_dir=work_dir, random_seed=random_seed, ) - + # End of anharmonic fit section - # and begin to calculate the anharmonic phonon priopoerties - # (e.g., phonon lifetimes, linewidths, etc.) using SHENGBTE and FOURPHONON. - # maybe we also need to do the phonon renormalization here. - # TODO: Implement the calculation of anharmonic phonon properties and phonon renormalization here. + # and begin to calculate the anharmonic phonon properties + # (e.g., phonon lifetimes, linewidths, etc.) using ShengBTE and FourPhonon. + # maybe we also need to do the phonon renormalization here. + # TODO: Implement the calculation of anharmonic phonon properties and + # phonon renormalization here. if fc_file.exists(): # Read the force constants from the output file of pheasy code From ac4d511342ba8e2e7cbd10619c50c341f1e2821b Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Wed, 30 Sep 2026 09:09:03 -0700 Subject: [PATCH 05/43] Run the pheasy short-cutoff refit in its own folder with the matrix files --- docs/user/codes/vasp.md | 2 ++ src/atomate2/common/jobs/pheasy.py | 40 +++++++++++++++++++----------- tests/common/jobs/test_pheasy.py | 40 ++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 15 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index ee9e9ba3a7..7edc691cfc 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -350,6 +350,8 @@ ALM is compiled from source. If that build fails, see the ALM instructions below By design, these workflows have the same basic structure as the harmonic forcefield workflows and use [Phonopy](https://doi.org/10.7566/JPSJ.92.012001) in part to compute the phonon spectrum. To use `Pheasy` in the previous example, we would replace the import string to `from atomate2.vasp.flows.pheasy import PhononMaker`. This workflow was used to build the Materials Project's Harmonic Phonon Database, described in [this preprint](https://chemrxiv.org/doi/full/10.26434/chemrxiv.15004632/v1). +The pheasy fits can fail for a cell that is not in a standard setting, for example the primitive cell of MgO (mp-1265) as the Materials Project serves it. +For such a structure, set `use_symmetrized_structure="primitive"`, as was done for the database. By default, this workflow does not compute anharmonic force constants, but can be extended to using the `cal_anhar_fcs` kwarg. ALM, from the ALAMODE package, counts the free force constants used to size the random displacement sets. diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 578ab1e492..da3aaac57e 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -72,6 +72,7 @@ "anharmonic_force_matrix": "force_matrix_anhar.npy", "website": "phonon_website.json", "one_shot_dir": "one_shot", + "refit_dir": "short_cutoff_refit", "anharmonic_fit_log": "pheasy_anharmonic_fit.log", } @@ -890,8 +891,7 @@ def generate_frequencies_eigenvectors( # If imaginary modes are present, we first use the hiphive code to enforce # some symmetry constraints to eliminate the imaginary modes (generally work # for small imaginary modes near Gamma point). If the imaginary modes are - # still present, a pheasy refit with a shorter cutoff (10 A) follows, but - # its result is currently not used (see the NOTE below). + # still present, a pheasy refit with a shorter cutoff (10 A) follows. if imaginary_modes: # Define a cluster space using the largest cutoff you can @@ -937,12 +937,19 @@ def generate_frequencies_eigenvectors( ) # Using a shorter cutoff (10 A) to generate the force constants to - # eliminate the imaginary modes near Gamma point in pheasy code. - # NOTE: the force constants are read back below from - # FORCE_CONSTANTS_short_cutoff, the file the hiPhive step above wrote, so - # the result of this pheasy refit is not used. If the refit succeeds, it - # overwrites FORCE_CONSTANTS in the job folder. + # eliminate the imaginary modes near Gamma point in pheasy code. The refit + # runs in its own folder, so FORCE_CONSTANTS of the harmonic fit, which the + # cocktail fit kept fixed, stays unchanged. if imaginary_modes: + refit_dir = Path(_DEFAULT_FILE_PATHS["refit_dir"]).resolve() + refit_dir.mkdir(exist_ok=True) + for filename in ( + "POSCAR", + _DEFAULT_FILE_PATHS["harmonic_displacements"], + _DEFAULT_FILE_PATHS["harmonic_force_matrix"], + ): + shutil.copy(filename, refit_dir / filename) + pheasy_cmd_11 = ( f"pheasy --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " @@ -963,7 +970,8 @@ def generate_frequencies_eigenvectors( f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -w 2 -d --symprec " f"{float(symprec)} --c2 10.0 " - f"--ndata {int(num_har)} --disp_file" + f"--ndata {int(num_har)} --disp_file " + f"--disp_matrix_file {_DEFAULT_FILE_PATHS['harmonic_displacements']}" ) phonon.generate_displacements(distance=displacement) @@ -974,7 +982,8 @@ def generate_frequencies_eigenvectors( f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --c2 10.0 " f"--full_ifc -w 2 --symprec {float(symprec)} " - f"-l LASSO --std --rasr BHH --ndata {int(num_har)}" + f"-l LASSO --std --rasr BHH --ndata {int(num_har)} " + f"--force_matrix_file {_DEFAULT_FILE_PATHS['harmonic_force_matrix']}" ) else: @@ -983,15 +992,16 @@ def generate_frequencies_eigenvectors( f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --full_ifc " f"--c2 10.0 -w 2 --symprec {float(symprec)} " - f"--rasr BHH --ndata {int(num_har)}" + f"--rasr BHH --ndata {int(num_har)} " + f"--force_matrix_file {_DEFAULT_FILE_PATHS['harmonic_force_matrix']}" ) - subprocess.call(shlex.split(pheasy_cmd_11)) - subprocess.call(shlex.split(pheasy_cmd_12)) - subprocess.call(shlex.split(pheasy_cmd_13)) - subprocess.call(shlex.split(pheasy_cmd_14)) + for cmd in (pheasy_cmd_11, pheasy_cmd_12, pheasy_cmd_13, pheasy_cmd_14): + subprocess.run(shlex.split(cmd), cwd=refit_dir, check=True) - force_constants = parse_FORCE_CONSTANTS(filename=new_fc_file) + force_constants = parse_FORCE_CONSTANTS( + filename=refit_dir / _DEFAULT_FILE_PATHS["force_constants"] + ) phonon.force_constants = force_constants phonon.symmetrize_force_constants() diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py index 3bf0bb7067..16d749e82b 100644 --- a/tests/common/jobs/test_pheasy.py +++ b/tests/common/jobs/test_pheasy.py @@ -27,6 +27,7 @@ from atomate2.common.jobs.phonons import ( _generate_phonon_object, _get_num_irreducible_fcs, + _run_band_structure_and_plot, ) # fcs_cutoff_radius in Bohr. 8 Bohr (4.2 A) covers the first two neighbour @@ -132,6 +133,45 @@ def test_harmonic_and_anharmonic_split(tmp_dir, num_displaced_supercells): assert not np.allclose(harmonic[0] / 0.01, anharmonic[0] / 0.03) +def test_imaginary_mode_refit(tmp_dir, monkeypatch): + """The short-cutoff refit reads the matrix files and runs in its own folder.""" + + def _report_imaginary_modes(*args, **kwargs): + bs_symm_line, _ = _run_band_structure_and_plot(*args, **kwargs) + return bs_symm_line, True + + monkeypatch.setattr( + pheasy_jobs, "_run_band_structure_and_plot", _report_imaginary_modes + ) + structure = _cu_structure() + kwargs = { + **COMMON_KWARGS, + "supercell_matrix": [[2, 0, 0], [0, 2, 0], [0, 0, 2]], + "cal_anhar_fcs": False, + "fcs_cutoff_radius": FCS_CUTOFF_RADIUS, + } + + job = generate_phonon_displacements( + structure=structure, + num_displaced_supercells=0, + displacement_anhar=0.03, + num_disp_anhar=0, + **kwargs, + ) + responses = run_locally(job, create_folders=True, ensure_success=True) + job = generate_frequencies_eigenvectors( + structure=structure, + displacement_data=_emt_displacement_data(responses[job.uuid][1].output), + **FIT_KWARGS, + **kwargs, + ) + run_locally(job, create_folders=True, ensure_success=True) + + (fit_dir,) = (path.parent for path in Path.cwd().glob("job_*/disp_matrix.npy")) + refit = fit_dir / "short_cutoff_refit" / "FORCE_CONSTANTS" + assert parse_FORCE_CONSTANTS(str(refit)).shape == (32, 32, 3, 3) + + def test_get_num_anharmonic_supercells(monkeypatch): phonon = _generate_phonon_object(_cu_structure(), **COMMON_KWARGS) kwargs = { From c48688747fef88974fe9bc706066e2486e0d2d50 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Wed, 30 Sep 2026 15:46:12 -0700 Subject: [PATCH 06/43] Make pheasy read the supercell of the force data --- pyproject.toml | 3 +- src/atomate2/common/jobs/pheasy.py | 32 +++++++++++++-------- tests/common/jobs/test_pheasy.py | 46 ++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index affab73559..7d9110d588 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,8 @@ mp = ["mp-api>=0.37.5"] # ("Force constants shape disagrees with crystal structure setting"). phonons = ["phonopy>=2.43,<5", "seekpath>=2.0.0"] # the pheasy fork adds the --disp_matrix_file and --force_matrix_file options -pheasy = ["atomate2[phonons,alamode]", "hiphive==1.5", "numpy<=2.2", "pheasy @ git+https://gitlab.com/hpsahasrabuddhe/pheasy.git@e67a777ecfde5ab368d71167837b099df75cfd4c"] +# and fixes the --scell option +pheasy = ["atomate2[phonons,alamode]", "hiphive==1.5", "numpy<=2.2", "pheasy @ git+https://gitlab.com/hpsahasrabuddhe/pheasy.git@1728f16642d5f2763f27695cd29ffada0f755d7f"] alamode = ["alm @ git+https://github.com/ttadano/ALM.git@f1d668fdee66e7e7218a04c88daf19d0e14fce0c#subdirectory=python"] hiphive = ["hiphive==1.5", "trainstation>=1.0", "atomate2[phonons,alamode]"] lobster = ["ijson>=3.2.2", "lobsterpy>=0.6.0"] diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index da3aaac57e..f882e3580e 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -314,7 +314,10 @@ def _run_anharmonic_fit( from run to run on the same forces. """ dim = " ".join(str(int(supercell_matrix[i][i])) for i in range(3)) - base = f"pheasy --dim {dim} -w {anhar_max_order} --symprec {float(symprec)}" + base = ( + f"pheasy --scell SPOSCAR --dim {dim} -w {anhar_max_order} " + f"--symprec {float(symprec)}" + ) cutoffs = f"--c3 {float(fcs_cutoff_radius[1] / ANGSTROM_TO_BOHR)}" if anhar_max_order == 4: cutoffs += f" --c4 {float(fcs_cutoff_radius[2] / ANGSTROM_TO_BOHR)}" @@ -631,7 +634,10 @@ def generate_frequencies_eigenvectors( verbose=False, ) - # Write the POSCAR and SPOSCAR files for the input of pheasy code + # Write the POSCAR and SPOSCAR files for the input of pheasy code. pheasy + # reads SPOSCAR (--scell SPOSCAR), so its atoms are in the order of the + # displacement and force matrices. The supercell pheasy builds itself from + # POSCAR can put an atom on a cell face one lattice vector away. supercell = phonon._supercell # noqa: SLF001 write_vasp("POSCAR", get_phonopy_structure(structure)) write_vasp("SPOSCAR", supercell) @@ -738,7 +744,7 @@ def generate_frequencies_eigenvectors( # Create the clusters and orbitals for second order force constants. # The harmonic fit is always second order (-w 2, --nbody 2). pheasy_cmd_1 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} " f"-s -w 2 --symprec {float(symprec)} --nbody 2" @@ -747,7 +753,7 @@ def generate_frequencies_eigenvectors( # Create the null space to further reduce the free parameters for # specific force constants and make them physically correct. pheasy_cmd_2 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -c --symprec " f"{float(symprec)} -w 2" @@ -756,7 +762,7 @@ def generate_frequencies_eigenvectors( # Generate the Compressive Sensing matrix,i.e., displacement matrix # for the input of machine leaning method.i.e., LASSO, pheasy_cmd_3 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -w 2 -d " f"--symprec {float(symprec)} " @@ -774,7 +780,7 @@ def generate_frequencies_eigenvectors( # constraint, i.e., tag: --rasr BHH, is enforced during the # fitting process. pheasy_cmd_4 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --full_ifc " f"-w 2 --symprec {float(symprec)} " @@ -786,7 +792,7 @@ def generate_frequencies_eigenvectors( else: # Calculate the force constants using the least-squred method pheasy_cmd_4 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --full_ifc " f"-w 2 --symprec {float(symprec)} " @@ -829,6 +835,7 @@ def generate_frequencies_eigenvectors( work_dir.mkdir(exist_ok=True) for filename in ( "POSCAR", + "SPOSCAR", _DEFAULT_FILE_PATHS["anharmonic_displacements"], _DEFAULT_FILE_PATHS["anharmonic_force_matrix"], ): @@ -945,13 +952,14 @@ def generate_frequencies_eigenvectors( refit_dir.mkdir(exist_ok=True) for filename in ( "POSCAR", + "SPOSCAR", _DEFAULT_FILE_PATHS["harmonic_displacements"], _DEFAULT_FILE_PATHS["harmonic_force_matrix"], ): shutil.copy(filename, refit_dir / filename) pheasy_cmd_11 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -s -w 2 --c2 " f"10.0 --symprec {float(symprec)} " @@ -959,14 +967,14 @@ def generate_frequencies_eigenvectors( ) pheasy_cmd_12 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -c --symprec " f"{float(symprec)} --c2 10.0 -w 2" ) pheasy_cmd_13 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -w 2 -d --symprec " f"{float(symprec)} --c2 10.0 " @@ -978,7 +986,7 @@ def generate_frequencies_eigenvectors( if len(phonon.displacements) > 3: pheasy_cmd_14 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --c2 10.0 " f"--full_ifc -w 2 --symprec {float(symprec)} " @@ -988,7 +996,7 @@ def generate_frequencies_eigenvectors( else: pheasy_cmd_14 = ( - f"pheasy --dim {int(supercell_matrix[0][0])} " + f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --full_ifc " f"--c2 10.0 -w 2 --symprec {float(symprec)} " diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py index 16d749e82b..6bb45d0b0f 100644 --- a/tests/common/jobs/test_pheasy.py +++ b/tests/common/jobs/test_pheasy.py @@ -172,6 +172,52 @@ def _report_imaginary_modes(*args, **kwargs): assert parse_FORCE_CONSTANTS(str(refit)).shape == (32, 32, 3, 3) +def test_atom_on_cell_face(tmp_dir): + """An atom on a cell face must not spoil the harmonic fit. + + pheasy used to build its own supercell from POSCAR. Reading POSCAR can move + an atom on a cell face by one lattice vector, and the atoms of that supercell + then no longer matched the order of the force data. + """ + # Cu on the diamond sites of an fcc primitive cell, with the second atom + # just below x = 1 instead of at x = 0, as in a relaxed Si cell. For this + # lattice, reading POSCAR moves that atom by one lattice vector. + structure = Structure( + Lattice([[0, 2.725, 2.725], [2.725, 0, 2.725], [2.725, 2.725, 0]]), + ["Cu", "Cu"], + [[0.25, 0.25, 0.25], [1 - 1e-16, 0, 0]], + ) + kwargs = { + **COMMON_KWARGS, + "supercell_matrix": [[4, 0, 0], [0, 4, 0], [0, 0, 4]], + "cal_anhar_fcs": False, + "fcs_cutoff_radius": FCS_CUTOFF_RADIUS, + } + + job = generate_phonon_displacements( + structure=structure, + num_displaced_supercells=0, + displacement_anhar=0.03, + num_disp_anhar=0, + **kwargs, + ) + responses = run_locally(job, create_folders=True, ensure_success=True) + job = generate_frequencies_eigenvectors( + structure=structure, + displacement_data=_emt_displacement_data(responses[job.uuid][1].output), + **FIT_KWARGS, + **kwargs, + ) + run_locally(job, create_folders=True, ensure_success=True) + + (fit_dir,) = (path.parent for path in Path.cwd().glob("job_*/disp_matrix.npy")) + fc = parse_FORCE_CONSTANTS(str(fit_dir / "FORCE_CONSTANTS")) + disps = np.load(fit_dir / "disp_matrix.npy") + forces = np.load(fit_dir / "force_matrix.npy") + residual = forces + np.einsum("ijab,njb->nia", fc, disps) + assert np.linalg.norm(residual) < 0.05 * np.linalg.norm(forces) + + def test_get_num_anharmonic_supercells(monkeypatch): phonon = _generate_phonon_object(_cu_structure(), **COMMON_KWARGS) kwargs = { From 6782ea69c5cd4f416f93735a6ed71c7f9c8955b2 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Thu, 24 Sep 2026 14:55:14 -0700 Subject: [PATCH 07/43] Add finite-temperature phonon workflow from MD snapshots and pheasy --- docs/user/codes/vasp.md | 48 ++ src/atomate2/ase/md.py | 12 +- .../flows/finite_temperature_phonons.py | 437 ++++++++++ .../common/jobs/finite_temperature_phonons.py | 765 ++++++++++++++++++ src/atomate2/common/jobs/pheasy.py | 168 ++-- .../schemas/finite_temperature_phonons.py | 234 ++++++ .../flows/finite_temperature_phonons.py | 415 ++++++++++ .../vasp/flows/finite_temperature_phonons.py | 225 ++++++ src/atomate2/vasp/sets/core.py | 37 + tests/ase/test_md.py | 23 + .../jobs/test_finite_temperature_phonons.py | 663 +++++++++++++++ tests/common/jobs/test_pheasy.py | 45 +- .../flows/test_finite_temperature_phonons.py | 248 ++++++ tests/vasp/test_sets.py | 22 + 14 files changed, 3270 insertions(+), 72 deletions(-) create mode 100644 src/atomate2/common/flows/finite_temperature_phonons.py create mode 100644 src/atomate2/common/jobs/finite_temperature_phonons.py create mode 100644 src/atomate2/common/schemas/finite_temperature_phonons.py create mode 100644 src/atomate2/forcefields/flows/finite_temperature_phonons.py create mode 100644 src/atomate2/vasp/flows/finite_temperature_phonons.py create mode 100644 tests/common/jobs/test_finite_temperature_phonons.py create mode 100644 tests/vasp/flows/test_finite_temperature_phonons.py diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index 7edc691cfc..1e4dcfac0d 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -402,6 +402,54 @@ The notebook `tutorials/hiphive_workflow.ipynb` reproduces it. Results on low-symmetry cells should be checked against the phonopy workflow before being trusted. The cluster space grows faster there than the number of displacements the workflow generates, and the fit can return spurious soft modes. +#### Finite-temperature phonons + +`FiniteTemperaturePhononMaker` fits effective harmonic force constants at a finite temperature, as in the temperature-dependent effective potential ([TDEP](https://doi.org/10.1103/PhysRevB.84.180301)) method. +They include the anharmonic effects at that temperature, at the volume of the relaxed structure. +Thermal expansion is not included. +The structure is relaxed first. +An NVT MD run then samples the displacements at the temperature. +By default, it runs for 8 ps at 300 K with a time step of 1 fs and a Nosé-Hoover thermostat. +The first 1 ps is left out, and 50 snapshots are picked evenly spread over the rest. +Static calculations give the forces on the snapshots and on the undisplaced supercell. +The displacements are measured from the relaxed positions. +Pheasy then fits the second-order force constants to them with LASSO. +As in the pheasy phonon workflow, a `DielectricMaker` computes the Born charges and the dielectric tensor for the non-analytical correction. +It needs the `pheasy` extra, like the pheasy phonon workflow above. + +```python +from atomate2.vasp.flows.finite_temperature_phonons import ( + FiniteTemperaturePhononMaker, +) + +flow = FiniteTemperaturePhononMaker(temperature=300).make(structure) +``` + +The MD uses looser settings than the statics, for example ENCUT = 500 eV instead of 600 eV. +Only the forces of the statics enter the fit. +The relaxation, the MD and the statics use the same functional, +U, smearing and k-point settings. +The MD and the statics start from the magnetic moments of the relaxed structure, if it has any. +Both set ISPIN from the relaxation directory with `auto_ispin`. +`md_runs` splits the MD into consecutive jobs, for example to stay within the walltime of a queue. +Each job continues from the positions and velocities of the previous one. +The thermostat variables start again from zero in each job. + +The trajectory is also checked before the fit. +The check looks for melting and for a move away from the reference structure. +It also looks at the drift of the potential energy late in the run. +The result is stored in `trajectory_health` of the output `FiniteTemperaturePhononDoc`, and a warning is raised when the check fails. +Imaginary modes are counted at the q-points commensurate with the supercell. +They are reported and not removed. + +The MD and the statics can also come from different codes. +Three more makers are in `atomate2.forcefields.flows.finite_temperature_phonons`. +`VaspMDMLFFStaticFiniteTemperaturePhononMaker` runs the MD with VASP and the statics with a force field. +`MLFFMDVaspStaticFiniteTemperaturePhononMaker` runs the MD with a force field and the statics with VASP. +`ForceFieldFiniteTemperaturePhononMaker` uses a force field for all steps. +Each has a `from_force_field_name` method to choose the force field. +They need the package of the force field, for example `mace-torch` for MACE. +All of them use the same fit. + ### Grüneisen parameter workflow Calculates mode-dependent Grüneisen parameters with the help of [Phonopy](https://doi.org/10.7566/JPSJ.92.012001). diff --git a/src/atomate2/ase/md.py b/src/atomate2/ase/md.py index 4a52c29e2d..d7a574b9cf 100644 --- a/src/atomate2/ase/md.py +++ b/src/atomate2/ase/md.py @@ -62,6 +62,7 @@ class DynamicsPresets(Enum): nvt_berendsen = "ase.md.nvtberendsen.NVTBerendsen" nvt_langevin = "ase.md.langevin.Langevin" nvt_nose_hoover = "ase.md.npt.NPT" + nvt_nose_hoover_chain = "ase.md.nose_hoover_chain.NoseHooverChainNVT" npt_berendsen = "ase.md.nptberendsen.NPTBerendsen" npt_nose_hoover = "ase.md.npt.NPT" # noqa: PIE796 npt_nose_hoover_chain = "ase.md.nose_hoover_chain.MTKNPT" @@ -403,13 +404,22 @@ def run_ase( md_runner.attach(md_observer, interval=self.traj_interval) + can_set_temperature = hasattr(md_runner, "_temperature_K") or hasattr( + md_runner, "set_temperature" + ) + if not can_set_temperature and np.ptp(self.t_schedule) > 0: + raise ValueError( + f"{type(md_runner).__name__} cannot follow a temperature schedule." + ) + def _callback(dyn: MolecularDynamics = md_runner) -> None: if self.ensemble == MDEnsemble.nve: return if hasattr(dyn, "_temperature_K"): dyn._temperature_K = self.t_schedule[dyn.nsteps] # noqa: SLF001 - else: + elif hasattr(dyn, "set_temperature"): dyn.set_temperature(temperature_K=self.t_schedule[dyn.nsteps]) + # NoseHooverChainNVT has neither and keeps its initial temperature if self.ensemble == MDEnsemble.nvt: return diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py new file mode 100644 index 0000000000..332332409a --- /dev/null +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -0,0 +1,437 @@ +"""Flow for effective harmonic phonons at a finite temperature.""" + +from __future__ import annotations + +import numbers +from abc import ABC, abstractmethod +from dataclasses import dataclass +from enum import Enum +from typing import TYPE_CHECKING, Literal + +import numpy as np +from jobflow import Flow, Maker, OutputReference +from pymatgen.util.due import Doi, due + +from atomate2 import SETTINGS +from atomate2.common.jobs.finite_temperature_phonons import ( + fit_finite_temperature_phonons, + get_md_restart_structure, + get_md_supercell, + select_md_snapshots, +) +from atomate2.common.jobs.pheasy import get_supercell_size +from atomate2.common.jobs.phonons import run_phonon_displacements + +if TYPE_CHECKING: + from pathlib import Path + + from emmet.core.math import Matrix3D + from jobflow import Job + from pymatgen.core import Structure + +SUPPORTED_CODES = frozenset(("vasp", "forcefields")) +_THERMOSTATS = ("nose-hoover", "langevin") +_ROTATIONAL_SUM_RULES = ("BH", "H", "BHH") + + +def _get_force_field(maker: Maker, code: str) -> tuple[str | None, dict | None]: + """Get the calculator name and keyword arguments of a force field maker.""" + if code != "forcefields": + return None, None + name = maker.calculator_meta + return str(name.value if isinstance(name, Enum) else name), dict( + maker.calculator_kwargs + ) + + +@due.dcite( + Doi("10.48550/arXiv.2508.01020"), + description="Pheasy code for (an)harmonic force constants.", +) +@due.dcite( + Doi("10.1103/PhysRevB.84.180301"), + description="Effective harmonic force constants fitted to MD, as in TDEP.", +) +@dataclass +class BaseFiniteTemperaturePhononMaker(Maker, ABC): + """ + Maker for effective harmonic phonons at a finite temperature. + + The structure is relaxed first. An NVT MD run at the temperature then starts + from the undisplaced supercell. The frames of the first equilibration_time + are left out, and n_snapshots snapshots are picked evenly spread over the + rest of the trajectory. The phonon displacement maker computes the forces on + these snapshots and on the undisplaced supercell. The displacements of the + snapshots are measured from the relaxed positions. pheasy fits one set of + second-order force constants to the displacements and forces with LASSO, as + in the temperature-dependent effective potential method. These force + constants contain the anharmonic effects at the temperature and at the + volume of the relaxed structure. Thermal expansion is not included. They + give the phonon band structure and density of states. Imaginary modes are + reported, not removed. + + The MD maker and the phonon displacement maker are independent. Either can + be a VASP or a force field maker, so the forces can come from a different + level of theory than the trajectory. The residual forces of the undisplaced + supercell always come from the phonon displacement maker. + + The trajectory is also checked. The check looks for melting and for a move + away from the reference structure. It also looks at the drift of the + potential energy late in the run. The result is stored in the output + document. A warning is raised if the check fails, but the fit is still done. + + .. Note:: + The atoms of the relaxed structure are sorted by electronegativity + before the supercell is built, as the VASP input sets do. The atoms are + then in the same order in every calculation. The magnetic moments of the + relaxed structure, if any, are carried over to the supercell, the + snapshots and every MD job. phonopy and pheasy find the symmetry + without the magnetic moments, as in the atomate2 phonon workflows. The + band structure uses the seekpath k-path. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + temperature: float + MD temperature in K. + md_time: float + Length of the MD trajectory in ps. + md_time_step: float + MD time step in fs. + equilibration_time: float + Time at the start of the trajectory that is left out, in ps. + n_snapshots: int + Number of MD snapshots in the fit. + thermostat: Literal["nose-hoover", "langevin"] + Thermostat of the NVT MD. + md_runs: int + Number of consecutive MD jobs that make up the trajectory. Each job + continues from the positions and velocities of the previous one. The + thermostat variables start again from zero in each job. + min_length: float + Each lattice vector of the diagonal supercell is at least min_length + long, in Angstrom. + symprec: float + Symmetry precision for phonopy and pheasy. + rotational_sum_rule: Literal["BH", "H", "BHH"] | None + Rotational sum rule passed to pheasy with --rasr. None imposes none. + alpha_min: int + Base-10 exponent of the smallest LASSO penalty in the cross-validation, + passed to pheasy with --alpha_min. The default of -6 is pheasy's own + default. A warning is raised if the chosen penalty is on either bound of + the search. + random_seed: int | None + Seed of the LASSO fit, and of the initial velocities of a force field + MD. + tol_imaginary_modes: float + Frequencies below -tol_imaginary_modes in THz are imaginary. + store_force_constants: bool + Whether to store the force constants in the output document. + code: str + Code of the phonon displacement calculations, 'vasp' or 'forcefields'. + md_code: str + Code of the MD, 'vasp' or 'forcefields'. + socket: bool + If True, the phonon displacement calculations run as a single batched + calculation. This is not supported by VASP. + bulk_relax_maker: Maker | None + Maker for the relaxation of the unit cell. None skips the relaxation. + born_maker: Maker | None + VASP maker for the Born effective charges and the dielectric tensor, + used for the non-analytical correction. None skips it. + md_maker: Maker + Maker for the MD. The flow sets its temperature, time step, number of + steps and thermostat. + phonon_displacement_maker: Maker + Maker for the static calculations on the snapshots and the undisplaced + supercell. + """ + + name: str = "finite temperature phonon" + temperature: float = 300.0 + md_time: float = 8.0 + md_time_step: float = 1.0 + equilibration_time: float = 1.0 + n_snapshots: int = 50 + thermostat: Literal["nose-hoover", "langevin"] = "nose-hoover" + md_runs: int = 1 + min_length: float = 12.0 + symprec: float = SETTINGS.PHONON_SYMPREC + rotational_sum_rule: Literal["BH", "H", "BHH"] | None = "BHH" + alpha_min: int = -6 + random_seed: int | None = 103 + tol_imaginary_modes: float = 0.1 + store_force_constants: bool = True + code: str | None = None + md_code: str | None = None + socket: bool = False + bulk_relax_maker: Maker | None = None + born_maker: Maker | None = None + md_maker: Maker | None = None + phonon_displacement_maker: Maker | None = None + + def __post_init__(self) -> None: + """Check the settings before any calculation is run.""" + if self.md_maker is None or self.phonon_displacement_maker is None: + raise ValueError("md_maker and phonon_displacement_maker must be set.") + for key in ("code", "md_code"): + if getattr(self, key) not in SUPPORTED_CODES: + raise ValueError( + f"{key} must be one of {sorted(SUPPORTED_CODES)}, not " + f"{getattr(self, key)!r}." + ) + if self.thermostat not in _THERMOSTATS: + raise ValueError( + f"thermostat must be one of {_THERMOSTATS}, not {self.thermostat!r}." + ) + if self.rotational_sum_rule not in (*_ROTATIONAL_SUM_RULES, None): + raise ValueError( + f"rotational_sum_rule must be one of {_ROTATIONAL_SUM_RULES} or " + f"None, not {self.rotational_sum_rule!r}." + ) + for key in ("md_runs", "n_snapshots"): + value = getattr(self, key) + if ( + isinstance(value, bool) + or not isinstance(value, numbers.Integral) + or value < 1 + ): + raise ValueError(f"{key} must be a positive integer, not {value!r}.") + if ( + isinstance(self.alpha_min, bool) + or not isinstance(self.alpha_min, numbers.Integral) + or self.alpha_min >= -2 + ): + raise ValueError( + f"alpha_min must be an integer below -2, not {self.alpha_min!r}." + ) + if min(self.temperature, self.md_time, self.md_time_step) <= 0: + raise ValueError("temperature, md_time and md_time_step must be positive.") + n_steps = round(self.md_time * 1000 / self.md_time_step) + n_equil = round(self.equilibration_time * 1000 / self.md_time_step) + if self.equilibration_time < 0 or n_steps - n_equil < self.n_snapshots: + raise ValueError( + f"The MD has {n_steps} steps. After leaving out equilibration_time, " + f"fewer than the {self.n_snapshots} snapshots are left." + ) + if self.md_runs > n_steps: + raise ValueError( + f"md_runs ({self.md_runs}) is larger than the {n_steps} MD steps." + ) + + def get_md_steps(self) -> list[int]: + """Get the number of MD steps of each MD job.""" + n_steps = round(self.md_time * 1000 / self.md_time_step) + base, extra = divmod(n_steps, self.md_runs) + return [base + (idx < extra) for idx in range(self.md_runs)] + + def make( + self, + structure: Structure, + prev_dir: str | Path | None = None, + supercell_matrix: Matrix3D | None = None, + born: list[Matrix3D] | None = None, + epsilon_static: Matrix3D | None = None, + ) -> Flow: + """ + Make a flow to calculate effective harmonic phonons at a temperature. + + Parameters + ---------- + structure: Structure + The unit cell. + prev_dir: str | Path | None + A previous calculation directory. It is passed to the relaxation. + The born job, the MD jobs and the phonon displacement calculations + get the relaxation directory, or this directory if there is no + relaxation. + supercell_matrix: Matrix3D | None + Diagonal supercell matrix. If None, it is chosen from min_length. + born: list[Matrix3D] | None + Born effective charges of the relaxed structure with its atoms + sorted by electronegativity. If given with epsilon_static, the + born_maker is not run. + epsilon_static: Matrix3D | None + High-frequency dielectric tensor. + + Returns + ------- + Flow + """ + if supercell_matrix is not None and not isinstance( + supercell_matrix, OutputReference + ): + matrix = np.array(supercell_matrix) + if not np.allclose(matrix, np.diag(np.diag(matrix))): + raise ValueError("pheasy needs a diagonal supercell matrix.") + + jobs: list[Job | Flow] = [] + optimization_run_job_dir = optimization_run_uuid = None + born_run_job_dir = born_run_uuid = None + + if self.bulk_relax_maker is not None: + relax = self.bulk_relax_maker.make(structure, prev_dir=prev_dir) + jobs.append(relax) + structure = relax.output.structure + prev_dir = relax.output.dir_name + optimization_run_job_dir = relax.output.dir_name + optimization_run_uuid = relax.output.uuid + + if supercell_matrix is None: + # pheasy needs a diagonal supercell matrix. With force_diagonal, + # the size only depends on min_length. + supercell_job = get_supercell_size( + structure, + self.min_length, + None, + force_90_degrees=True, + force_diagonal=True, + ) + jobs.append(supercell_job) + supercell_matrix = supercell_job.output + + if self.born_maker is not None and (born is None or epsilon_static is None): + born_job = self.born_maker.make(structure, prev_dir=prev_dir) + jobs.append(born_job) + born = born_job.output.calcs_reversed[0].output.outcar["born"] + epsilon_static = born_job.output.calcs_reversed[0].output.epsilon_static + born_run_job_dir = born_job.output.dir_name + born_run_uuid = born_job.output.uuid + + reference_job = get_md_supercell( + structure, supercell_matrix, self.symprec, self.code + ) + jobs.append(reference_job) + reference = reference_job.output + + all_md_jobs, md_jobs = self.make_md(reference, prev_dir) + jobs.extend(all_md_jobs) + md_dirs = [md_job.output.dir_name for md_job in md_jobs] + + snapshot_job = select_md_snapshots( + md_dirs, + self.md_code, + reference, + self.temperature, + self.md_time_step, + self.equilibration_time, + self.n_snapshots, + ) + jobs.append(snapshot_job) + + displacement_calcs = run_phonon_displacements( + displacements=snapshot_job.output["structures"], + structure=structure, + supercell_matrix=supercell_matrix, + phonon_maker=self.phonon_displacement_maker, + socket=self.socket, + prev_dir_argname=self.prev_calc_dir_argname, + prev_dir=prev_dir, + store_displaced_structures=True, + ) + jobs.append(displacement_calcs) + + force_field_name, force_field_kwargs = _get_force_field( + self.phonon_displacement_maker, self.code + ) + md_force_field_name, md_force_field_kwargs = _get_force_field( + self.md_maker, self.md_code + ) + fit_job = fit_finite_temperature_phonons( + structure=structure, + supercell_matrix=supercell_matrix, + snapshot_data=snapshot_job.output, + displacement_data=displacement_calcs.output, + temperature=self.temperature, + thermostat=self.thermostat, + md_time_step=self.md_time_step, + equilibration_time=self.equilibration_time, + code=self.code, + md_code=self.md_code, + symprec=self.symprec, + force_field_name=force_field_name, + force_field_kwargs=force_field_kwargs, + md_force_field_name=md_force_field_name, + md_force_field_kwargs=md_force_field_kwargs, + md_uuids=[md_job.uuid for md_job in md_jobs], + md_dirs=md_dirs, + optimization_run_uuid=optimization_run_uuid, + optimization_run_job_dir=optimization_run_job_dir, + born_run_uuid=born_run_uuid, + born_run_job_dir=born_run_job_dir, + rotational_sum_rule=self.rotational_sum_rule, + alpha_min=self.alpha_min, + random_seed=self.random_seed, + tol_imaginary_modes=self.tol_imaginary_modes, + born=born, + epsilon_static=epsilon_static, + store_force_constants=self.store_force_constants, + ) + jobs.append(fit_job) + return Flow(jobs, fit_job.output, name=self.name) + + def make_md( + self, + reference: Structure | OutputReference, + prev_dir: str | Path | None, + ) -> tuple[list[Job | Flow], list[Job]]: + """ + Make the MD jobs, starting from the undisplaced supercell. + + The first MD job starts from the undisplaced supercell. Each later one + continues from the final positions and velocities of the previous one. + + Parameters + ---------- + reference: Structure | OutputReference + The undisplaced supercell. + prev_dir: str | Path | None + A previous calculation directory, passed to each MD job. + + Returns + ------- + tuple[list[Job | Flow], list[Job]] + All jobs to add to the flow, and the MD jobs in the order of the + trajectory. + """ + jobs: list[Job | Flow] = [] + md_jobs: list[Job] = [] + structure = reference + md_steps = self.get_md_steps() + for idx, n_steps in enumerate(md_steps, start=1): + md_job = self.get_md_maker(n_steps).make(structure, prev_dir=prev_dir) + if len(md_steps) > 1: + md_job.append_name(f" {idx}/{len(md_steps)}") + jobs.append(md_job) + md_jobs.append(md_job) + if idx < len(md_steps): + restart = get_md_restart_structure( + md_job.output.dir_name, self.md_code, reference + ) + jobs.append(restart) + structure = restart.output + return jobs, md_jobs + + @property + @abstractmethod + def prev_calc_dir_argname(self) -> str | None: + """Name of the argument that passes prev_dir to the phonon displacement maker. + + As this differs between codes, it is implemented by the inheriting class. + """ + + @abstractmethod + def get_md_maker(self, n_steps: int) -> Maker: + """ + Get the maker of one MD job, with the settings of this flow. + + Parameters + ---------- + n_steps: int + Number of MD steps of the job. + + Returns + ------- + Maker + """ diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py new file mode 100644 index 0000000000..7999e1add0 --- /dev/null +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -0,0 +1,765 @@ +"""Jobs for effective harmonic phonons from MD snapshots and pheasy.""" + +from __future__ import annotations + +import logging +import warnings +from pathlib import Path +from typing import TYPE_CHECKING + +import numpy as np +from ase.io import read as ase_read +from ase.units import kB +from jobflow import job +from monty.io import zopen +from monty.os.path import zpath +from phonopy.file_IO import parse_FORCE_CONSTANTS +from phonopy.harmonic.dynmat_to_fc import get_commensurate_points +from phonopy.interface.vasp import write_vasp +from phonopy.structure.symmetry import symmetrize_borns_and_epsilon +from pymatgen.core import Structure +from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure +from pymatgen.io.vasp import Incar, Kpoints, Poscar, Xdatcar +from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine +from pymatgen.phonon.dos import PhononDos + +from atomate2.common.jobs.pheasy import ( + _DEFAULT_FILE_PATHS, + _check_lasso_alpha, + _run_harmonic_fit, +) +from atomate2.common.jobs.phonons import ( + _generate_phonon_object, + _get_kpath, + _run_band_structure_and_plot, + _run_total_dos_and_plot, +) +from atomate2.common.schemas.finite_temperature_phonons import ( + FiniteTemperaturePhononDoc, + TrajectoryHealth, +) +from atomate2.common.schemas.phonons import ( + ForceConstants, + PhononJobDirs, + PhononUUIDs, + get_factor, +) +from atomate2.utils.path import strip_hostname + +if TYPE_CHECKING: + from collections.abc import Sequence + + from emmet.core.math import Matrix3D + from phonopy import Phonopy + +logger = logging.getLogger(__name__) + +# file of the force field MD trajectory, written in the ASE format +ASE_TRAJECTORY_FILE = "md_trajectory.traj" +_KPATH_SCHEME = "seekpath" + +# Thresholds of the trajectory check. The MD starts from the reference structure, +# so a large displacement in the first frames means the atom order does not match. +_START_LIMIT = 0.5 # Angstrom +_RMS_LIMIT = 1.0 # Angstrom +_LINDEMANN_LIMIT = 0.12 +_SHIFT_RATIO_LIMIT = 1.5 +_DRIFT_SIGMA = 3.0 +_N_START_FRAMES = 10 + + +def _get_phonopy( + structure: Structure, supercell_matrix: Matrix3D, symprec: float, code: str +) -> Phonopy: + """Get the phonopy object of the sorted structure and the supercell.""" + return _generate_phonon_object( + structure.get_sorted_structure(), + supercell_matrix, + displacement=0.01, + sym_reduce=True, + symprec=symprec, + use_symmetrized_structure=None, + kpath_scheme=_KPATH_SCHEME, + code=code, + ) + + +def _get_site_properties(reference: Structure) -> dict: + """Get the magnetic moments of the reference, the only site property kept.""" + if "magmom" in reference.site_properties: + return {"magmom": reference.site_properties["magmom"]} + return {} + + +@job +def get_md_supercell( + structure: Structure, supercell_matrix: Matrix3D, symprec: float, code: str +) -> Structure: + """ + Build the supercell used as the reference structure of the MD and the fit. + + The atoms of the structure are sorted by electronegativity, as the VASP + input sets do. The supercell is then the one phonopy builds, so that its + atoms are in the order of the force constant fit. Each atom of the + supercell gets the magnetic moment of its atom in the unit cell, if the + structure has magnetic moments. + + Parameters + ---------- + structure: Structure + Relaxed unit cell. + supercell_matrix: Matrix3D + Supercell matrix. + symprec: float + Symmetry precision for phonopy. + code: str + Code of the phonon displacement calculations. + + Returns + ------- + Structure + The undisplaced supercell. + """ + structure = structure.get_sorted_structure() + supercell = _get_phonopy(structure, supercell_matrix, symprec, code).supercell + site_properties = {} + if "magmom" in structure.site_properties: + unit_index = [supercell.u2u_map[idx] for idx in supercell.s2u_map] + magmoms = structure.site_properties["magmom"] + site_properties["magmom"] = [magmoms[idx] for idx in unit_index] + return Structure( + supercell.cell, + supercell.symbols, + supercell.scaled_positions, + site_properties=site_properties, + ) + + +@job +def get_md_restart_structure( + md_dir: str, md_code: str, reference: Structure +) -> Structure: + """ + Get the final positions and velocities of an MD run. + + For VASP, they are read from CONTCAR, with the velocities in Angstrom/fs. + For force fields, they are read from the last frame of the ASE trajectory + file, with the velocities in ASE units. In both cases, the velocities are a + site property that the next MD run starts from. The thermostat variables + are not carried over, so they start again from zero in the next run. The + magnetic moments of the reference, if any, are added as a site property. + + Parameters + ---------- + md_dir: str + Directory of the MD run. + md_code: str + Code of the MD, "vasp" or "forcefields". + reference: Structure + The undisplaced supercell the MD started from. + + Returns + ------- + Structure + The final structure, with a "velocities" site property. + """ + directory = Path(strip_hostname(md_dir)) + if md_code == "vasp": + structure = Poscar.from_file(zpath(str(directory / "CONTCAR"))).structure + elif md_code == "forcefields": + atoms = ase_read(directory / ASE_TRAJECTORY_FILE, index=-1) + structure = Structure( + atoms.cell[:], + atoms.get_chemical_symbols(), + atoms.get_positions(), + coords_are_cartesian=True, + site_properties={"velocities": atoms.get_velocities().tolist()}, + ) + else: + raise ValueError(f"MD code must be 'vasp' or 'forcefields', not {md_code}.") + for key, values in _get_site_properties(reference).items(): + structure.add_site_property(key, values) + return structure + + +def _read_vasp_md(directory: Path) -> tuple[np.ndarray, np.ndarray, list[str], float]: + """Read the frames, energies and time step of a VASP MD run.""" + incar = Incar.from_file(zpath(str(directory / "INCAR"))) + xdatcar = Xdatcar(zpath(str(directory / "XDATCAR"))) + frac_coords = np.array([frame.frac_coords for frame in xdatcar.structures]) + species = [str(site.specie) for site in xdatcar.structures[0]] + + # the free energy F of each ionic step + with zopen(zpath(str(directory / "OSZICAR")), mode="rt") as file: + energies = [ + float(line.split(" F= ")[1].split()[0]) + for line in file + if " T= " in line and " F= " in line + ] + if len(energies) != len(frac_coords): + raise ValueError( + f"{directory} has {len(frac_coords)} frames in XDATCAR but " + f"{len(energies)} MD steps in OSZICAR. XDATCAR must have a frame at " + "every step, with NBLOCK = 1." + ) + return frac_coords, np.array(energies), species, float(incar["POTIM"]) + + +def _read_ase_md( + directory: Path, time_step: float, skip_first: bool +) -> tuple[np.ndarray, np.ndarray, list[str], float]: + """Read the frames and energies of a force field MD run.""" + frames = ase_read(directory / ASE_TRAJECTORY_FILE, index=":") + if skip_first: + # the starting structure is the last frame of the previous MD run + frames = frames[1:] + frac_coords = np.array([atoms.get_scaled_positions() for atoms in frames]) + energies = np.array([atoms.get_potential_energy() for atoms in frames]) + return frac_coords, energies, frames[0].get_chemical_symbols(), time_step + + +def _get_displacements(frac_coords: np.ndarray, reference: Structure) -> np.ndarray: + """Cartesian displacements from the reference with the minimum image.""" + diff = frac_coords - reference.frac_coords + diff -= np.round(diff) + return diff @ reference.lattice.matrix + + +def _remove_center_of_mass(disps: np.ndarray, reference: Structure) -> np.ndarray: + """Remove the displacement of the center of mass from each frame.""" + masses = np.array([site.specie.atomic_mass for site in reference]) + center = np.einsum("i,fia->fa", masses, disps) / masses.sum() + return disps - center[:, None, :] + + +def _assess_trajectory( + frac_coords: np.ndarray, + energies: np.ndarray, + reference: Structure, + temperature: float, +) -> TrajectoryHealth: + """ + Check whether the MD trajectory stayed at the reference structure. + + The displacement of the center of mass of each frame is removed from its + displacements. The checks are applied in this order. + + - A root mean square displacement above 0.5 Angstrom in the first 10 + frames means the atoms are not in the order of the reference. + - A root mean square vibration u_vib above 0.12 of the nearest-neighbor + distance means the structure melted. + - A total displacement u_ref above 1.5 times u_vib means the mean + positions moved away from the reference. + - A change of the mean potential energy from the second to the last + quarter of the frames above 3 times the standard deviation of the + energy in the last fifth means the structure transformed (falling energy) + or is disordering (rising energy). + - A root mean square displacement above 1 Angstrom in the last fifth of the + frames points at diffusion or very soft motion. + + The energy drift is measured late in the trajectory, because a run that + starts from the reference must gain 3/2 k_B T of potential energy to reach + equipartition. + + Parameters + ---------- + frac_coords: np.ndarray + Fractional coordinates of each frame, with shape (n_frames, n_atoms, 3). + energies: np.ndarray + Potential energy of each frame in eV. + reference: Structure + The undisplaced supercell. + temperature: float + MD temperature in K. + + Returns + ------- + TrajectoryHealth + """ + n_frames, n_atoms = frac_coords.shape[:2] + disps = _remove_center_of_mass( + np.array([_get_displacements(frame, reference) for frame in frac_coords]), + reference, + ) + rms = np.sqrt(np.mean(np.sum(disps**2, axis=2), axis=1)) + rms_start = float(rms[:_N_START_FRAMES].mean()) + rms_end = float(rms[-max(1, n_frames // 5) :].mean()) + + # split the displacement in the second half into a static and a vibrational + # part, u_ref**2 = u_shift**2 + u_vib**2 + tail = disps[n_frames // 2 :] + msd_ref = float(np.mean(np.sum(tail**2, axis=2))) + msd_shift = float(np.mean(np.sum(tail.mean(axis=0) ** 2, axis=1))) + u_ref = np.sqrt(msd_ref) + u_shift = np.sqrt(msd_shift) + u_vib = np.sqrt(max(msd_ref - msd_shift, 0.0)) + + distances = reference.distance_matrix.copy() + np.fill_diagonal(distances, np.inf) + d_nn = float(distances.min(axis=1).mean()) + lindemann_ratio = u_vib / d_nn + shift_ratio = u_ref / max(u_vib, 1e-9) + + energy = energies / n_atoms + quarter = len(energy) // 4 + drift = ( + float(energy[3 * quarter :].mean() - energy[quarter : 2 * quarter].mean()) + if quarter >= 5 + else None + ) + fluctuation = float(energy[-max(1, len(energy) // 5) :].std()) + big_drift = drift is not None and abs(drift) > _DRIFT_SIGMA * max(fluctuation, 1e-9) + + if rms_start > _START_LIMIT: + verdict = "reference_mismatch" + elif lindemann_ratio > _LINDEMANN_LIMIT: + verdict = "melted" + elif shift_ratio > _SHIFT_RATIO_LIMIT: + verdict = "transformed" if big_drift and drift < 0 else "shifted_or_diffusing" + elif big_drift: + verdict = "transformed" if drift < 0 else "disordering" + elif rms_end > _RMS_LIMIT: + verdict = "diffusing_or_soft" + else: + verdict = "stable" + + return TrajectoryHealth( + verdict=verdict, + is_stable=verdict == "stable", + n_frames=n_frames, + rms_displacement_start=rms_start, + rms_displacement_end=rms_end, + u_ref=u_ref, + u_shift=u_shift, + u_vib=u_vib, + nearest_neighbor_distance=d_nn, + lindemann_ratio=lindemann_ratio, + shift_ratio=shift_ratio, + energy_drift=drift, + energy_fluctuation=fluctuation, + equipartition_rise=1.5 * kB * temperature, + ) + + +@job(data=["structures"]) +def select_md_snapshots( + md_dirs: Sequence[str], + md_code: str, + reference: Structure, + temperature: float, + md_time_step: float, + equilibration_time: float, + n_snapshots: int, +) -> dict: + """ + Pick snapshots from the MD trajectory and check the trajectory. + + The trajectories of all MD runs are joined in order, with a frame at every + time step. The time of a frame is its index in the joined trajectory times + the time step, so the first frame is at time zero. The frames of the first + equilibration_time are left out, and n_snapshots frames are picked evenly + spread over the rest. For VASP, XDATCAR, OSZICAR and the POTIM of INCAR are + read from each run directory. For force fields, the ASE trajectory file is + read. The run directories must be readable from where this job runs. + + Parameters + ---------- + md_dirs: Sequence[str] + Directories of the MD runs, in order. + md_code: str + Code of the MD, "vasp" or "forcefields". + reference: Structure + The undisplaced supercell the MD started from. + temperature: float + MD temperature in K. + md_time_step: float + MD time step in fs. Only used for force field trajectories. + equilibration_time: float + Time at the start of the trajectory that is left out, in ps. + n_snapshots: int + Number of snapshots. + + Returns + ------- + dict + The structures for the phonon displacement calculations, the + snapshots followed by the undisplaced supercell. The MD time of each + snapshot in ps. The number of frames times the time step in ps. The + root mean square displacement of the snapshots in Angstrom, with the + displacement of the center of mass removed. The trajectory check. + """ + directories = [Path(strip_hostname(md_dir)) for md_dir in md_dirs] + if len(set(directories)) != len(directories): + raise ValueError( + f"Each MD run must have its own directory, but the directories are " + f"{md_dirs}." + ) + frac_coords, energies, time_steps = [], [], set() + for idx, directory in enumerate(directories): + if md_code == "vasp": + coords, energy, species, time_step = _read_vasp_md(directory) + elif md_code == "forcefields": + coords, energy, species, time_step = _read_ase_md( + directory, md_time_step, skip_first=idx > 0 + ) + else: + raise ValueError(f"MD code must be 'vasp' or 'forcefields', not {md_code}.") + if species != [str(site.specie) for site in reference]: + raise ValueError( + f"The atoms of the MD in {directory} are not in the order of the " + "reference supercell." + ) + frac_coords.append(coords) + energies.append(energy) + time_steps.add(time_step) + if len(time_steps) != 1: + raise ValueError(f"The MD runs have different time steps: {time_steps} fs.") + time_step = time_steps.pop() + all_coords = np.concatenate(frac_coords) + all_energies = np.concatenate(energies) + n_frames = len(all_coords) + + n_equil = round(equilibration_time * 1000 / time_step) + n_left = n_frames - n_equil + if n_left < n_snapshots: + raise ValueError( + f"The trajectory has {n_frames} frames of {time_step} fs. After " + f"leaving out {equilibration_time} ps, {max(n_left, 0)} frames are " + f"left, fewer than the {n_snapshots} snapshots." + ) + stride = n_left // n_snapshots + indices = list(range(n_equil, n_frames, stride))[:n_snapshots] + + site_properties = _get_site_properties(reference) + snapshots = [ + Structure( + reference.lattice, + reference.species, + all_coords[idx], + site_properties=site_properties, + ) + for idx in indices + ] + disps = _remove_center_of_mass( + np.array([_get_displacements(all_coords[idx], reference) for idx in indices]), + reference, + ) + health = _assess_trajectory(all_coords, all_energies, reference, temperature) + if not health.is_stable: + warnings.warn( + f"The MD trajectory did not stay at the reference structure (verdict: " + f"{health.verdict}). The fitted force constants may not describe it.", + stacklevel=2, + ) + return { + "structures": [*snapshots, reference], + "snapshot_times": [idx * time_step / 1000 for idx in indices], + "md_time": n_frames * time_step / 1000, + "rms_displacement": float(np.sqrt(np.mean(np.sum(disps**2, axis=2)))), + "trajectory_health": health.model_dump(), + } + + +def _get_rms_displacement(phonon: Phonopy, temperature: float, tol: float) -> float: + """ + Get the classical root mean square displacement from the force constants. + + The modes are those of the supercell at the Gamma point. A mode with a + frequency above tol in THz adds k_B T divided by its eigenvalue of the + dynamical matrix, times the sum over the atoms and Cartesian components of + its squared eigenvector component divided by the atomic mass. The sum over + the modes is divided by the number of atoms. The modes at or below tol are + left out. They include the three acoustic modes at the Gamma point, which + move the center of mass. + """ + masses = np.repeat(np.array(phonon.supercell.masses), 3) + n_dof = len(masses) + force_constants = phonon.force_constants.transpose(0, 2, 1, 3).reshape(n_dof, n_dof) + inv_sqrt_mass = 1 / np.sqrt(masses) + dynmat = force_constants * np.outer(inv_sqrt_mass, inv_sqrt_mass) + eigvals, eigvecs = np.linalg.eigh((dynmat + dynmat.T) / 2) + frequencies = np.sign(eigvals) * np.sqrt(np.abs(eigvals)) * get_factor("vasp") + keep = frequencies > tol + weights = np.sum(eigvecs[:, keep] ** 2 / masses[:, None], axis=0) + msd = kB * temperature * np.sum(weights / eigvals[keep]) + return float(np.sqrt(msd / len(phonon.supercell.masses))) + + +@job( + output_schema=FiniteTemperaturePhononDoc, + data=[PhononDos, PhononBandStructureSymmLine, ForceConstants], +) +def fit_finite_temperature_phonons( + structure: Structure, + supercell_matrix: Matrix3D, + snapshot_data: dict, + displacement_data: dict, + temperature: float, + thermostat: str, + md_time_step: float, + equilibration_time: float, + code: str, + md_code: str, + symprec: float, + force_field_name: str | None = None, + force_field_kwargs: dict | None = None, + md_force_field_name: str | None = None, + md_force_field_kwargs: dict | None = None, + md_uuids: list[str] | None = None, + md_dirs: list[str] | None = None, + optimization_run_uuid: str | None = None, + optimization_run_job_dir: str | None = None, + born_run_uuid: str | None = None, + born_run_job_dir: str | None = None, + rotational_sum_rule: str | None = "BHH", + alpha_min: int = -6, + random_seed: int | None = 103, + tol_imaginary_modes: float = 0.1, + born: list[Matrix3D] | None = None, + epsilon_static: Matrix3D | None = None, + store_force_constants: bool = True, + npoints_band: int = 101, + kpoint_density_dos: int = 7_000, +) -> FiniteTemperaturePhononDoc: + """ + Fit effective second-order force constants to MD snapshots with pheasy. + + The forces on the undisplaced supercell, the last phonon displacement + calculation, are subtracted from the forces on the snapshots. pheasy then + fits the second-order force constants with LASSO, with standardized data + and without a cutoff. phonopy imposes translational and permutation + symmetry on them. They give the phonon band structure along the seekpath + k-path and the density of states. Imaginary modes are reported, not + removed. + + Parameters + ---------- + structure: Structure + Relaxed unit cell. This job sorts its atoms by electronegativity. + supercell_matrix: Matrix3D + Diagonal supercell matrix. + snapshot_data: dict + Output of :obj:`select_md_snapshots`. + displacement_data: dict + Output of the phonon displacement calculations on the snapshots and on + the undisplaced supercell, which comes last. + temperature: float + MD temperature in K. + thermostat: str + Thermostat of the MD. + md_time_step: float + MD time step in fs. + equilibration_time: float + Time at the start of the trajectory that was left out, in ps. + code: str + Code of the phonon displacement calculations. + md_code: str + Code of the MD. + symprec: float + Symmetry precision for phonopy and pheasy. + force_field_name: str | None + Force field of the phonon displacement calculations, if any. + force_field_kwargs: dict | None + Keyword arguments of the force field calculator of the phonon + displacement calculations. + md_force_field_name: str | None + Force field of the MD, if any. + md_force_field_kwargs: dict | None + Keyword arguments of the force field calculator of the MD. + md_uuids: list[str] | None + UUIDs of the MD jobs. + md_dirs: list[str] | None + Directories of the MD jobs. + optimization_run_uuid: str | None + UUID of the relaxation. + optimization_run_job_dir: str | None + Directory of the relaxation. + born_run_uuid: str | None + UUID of the Born charge calculation. + born_run_job_dir: str | None + Directory of the Born charge calculation. + rotational_sum_rule: str | None + Rotational sum rule passed to pheasy with --rasr, or None for none. + alpha_min: int + Base-10 exponent of the smallest LASSO penalty in the cross-validation. + random_seed: int | None + Seed of the LASSO fit in pheasy. + tol_imaginary_modes: float + Frequencies below -tol_imaginary_modes in THz are imaginary. + born: list[Matrix3D] | None + Born effective charges of the sorted unit cell, for the non-analytical + correction of the dynamical matrix. + epsilon_static: Matrix3D | None + High-frequency dielectric tensor, needed together with born. + store_force_constants: bool + Whether to store the force constants in the output document. + npoints_band: int + Number of q-points per band structure segment. + kpoint_density_dos: int + Number of q-points per reciprocal atom of the density of states mesh. + + Returns + ------- + FiniteTemperaturePhononDoc + """ + supercell_matrix = np.array(supercell_matrix) + if not np.allclose(supercell_matrix, np.diag(np.diag(supercell_matrix))): + raise ValueError("pheasy needs a diagonal supercell matrix.") + + structure = structure.get_sorted_structure() + if born is not None and len(born) != len(structure): + raise ValueError("The number of Born charges is not the number of atoms.") + phonon = _get_phonopy(structure, supercell_matrix, symprec, code) + supercell = get_pmg_structure(phonon.supercell) + + forces = np.array(displacement_data["forces"]) + structures = displacement_data["displaced_structures"] + if len(structures) != len(snapshot_data["snapshot_times"]) + 1: + raise ValueError( + "The phonon displacement calculations must be the snapshots followed " + "by the undisplaced supercell." + ) + if not np.allclose(structures[-1].frac_coords, supercell.frac_coords, atol=1e-6): + raise ValueError( + "The last phonon displacement calculation is not the undisplaced supercell." + ) + residual_forces = forces[-1] + fit_forces = forces[:-1] - residual_forces + disps = np.array( + [_get_displacements(s.frac_coords, supercell) for s in structures[:-1]] + ) + n_data = len(disps) + + write_vasp("POSCAR", get_phonopy_structure(structure)) + write_vasp("SPOSCAR", phonon.supercell) + np.save(_DEFAULT_FILE_PATHS["harmonic_displacements"], disps) + np.save(_DEFAULT_FILE_PATHS["harmonic_force_matrix"], fit_forces) + + # Remove the files of an earlier fit. pheasy appends to its log, and a failed + # fit would leave the old force constants behind. + log_file = Path(_DEFAULT_FILE_PATHS["harmonic_fit_log"]) + log_file.unlink(missing_ok=True) + fc_file = Path(_DEFAULT_FILE_PATHS["force_constants"]) + fc_file.unlink(missing_ok=True) + _run_harmonic_fit( + supercell_matrix, + symprec, + n_data, + rotational_sum_rule=rotational_sum_rule, + alpha_min=alpha_min, + random_seed=random_seed, + log_file=str(log_file), + ) + + if not fc_file.exists(): + raise RuntimeError(f"pheasy did not write {fc_file}.") + lasso_alpha = _check_lasso_alpha(log_file, alpha_min, alpha_min_name="alpha_min") + phonon.force_constants = parse_FORCE_CONSTANTS(filename=str(fc_file)) + phonon.symmetrize_force_constants() + + # the fitted forces are F = -Phi u + predicted = -np.einsum("ijab,mjb->mia", phonon.force_constants, disps) + force_rmse = float(np.sqrt(np.mean((fit_forces - predicted) ** 2))) + + borns = epsilon = None + if born is not None and epsilon_static is not None: + borns, epsilon = symmetrize_borns_and_epsilon( + ucell=phonon.unitcell, + borns=np.array(born), + epsilon=np.array(epsilon_static), + symprec=symprec, + primitive_matrix=phonon.primitive_matrix, + supercell_matrix=phonon.supercell_matrix, + ) + if not np.all(np.isclose(borns, 0.0)): + phonon.nac_params = { + "born": borns, + "dielectric": epsilon, + "factor": 14.399652, + } + + # frequencies at the q-points commensurate with the supercell + matrix = np.linalg.inv(phonon.primitive_matrix) @ phonon.supercell_matrix + phonon.run_qpoints(get_commensurate_points(np.rint(matrix).astype(int))) + frequencies = phonon.qpoints.frequencies + + kpath_dict, kpath_concrete = _get_kpath( + structure=get_pmg_structure(phonon.primitive), + kpath_scheme=_KPATH_SCHEME, + symprec=symprec, + ) + bs_symm_line, has_imaginary_modes = _run_band_structure_and_plot( + phonon, + kpath_dict, + kpath_concrete, + _DEFAULT_FILE_PATHS["band_structure"], + has_nac=phonon.nac_params is not None, + npoints_band=npoints_band, + filename_bs=_DEFAULT_FILE_PATHS["band_structure_plot"], + tol_imaginary_modes=tol_imaginary_modes, + ) + kpoint = Kpoints.automatic_density( + structure=get_pmg_structure(phonon.primitive), + kppa=kpoint_density_dos, + force_gamma=True, + ) + dos = _run_total_dos_and_plot( + phonon, + kpoint, + _DEFAULT_FILE_PATHS["dos"], + filename_dos=_DEFAULT_FILE_PATHS["dos_plot"], + ) + phonon.save(_DEFAULT_FILE_PATHS["phonopy"]) + + return FiniteTemperaturePhononDoc.from_structure( + meta_structure=structure, + structure=structure, + temperature=temperature, + code=code, + md_code=md_code, + force_field_name=force_field_name, + force_field_kwargs=force_field_kwargs, + md_force_field_name=md_force_field_name, + md_force_field_kwargs=md_force_field_kwargs, + thermostat=thermostat, + md_time_step=md_time_step, + md_time=snapshot_data["md_time"], + equilibration_time=equilibration_time, + n_snapshots=n_data, + snapshot_times=snapshot_data["snapshot_times"], + supercell_matrix=phonon.supercell_matrix.tolist(), + primitive_matrix=phonon.primitive_matrix.tolist(), + rotational_sum_rule=rotational_sum_rule, + lasso_alpha=lasso_alpha, + force_rmse=force_rmse, + max_residual_force=float(np.abs(residual_forces).max()), + rms_displacement=snapshot_data["rms_displacement"], + rms_displacement_from_force_constants=_get_rms_displacement( + phonon, temperature, tol_imaginary_modes + ), + trajectory_health=snapshot_data["trajectory_health"], + tol_imaginary_modes=tol_imaginary_modes, + has_imaginary_modes=has_imaginary_modes, + n_imaginary_modes=int(np.sum(frequencies < -tol_imaginary_modes)), + min_frequency=float(frequencies.min()), + phonon_bandstructure=bs_symm_line, + phonon_dos=dos, + force_constants=ForceConstants(phonon.force_constants.tolist()) + if store_force_constants + else None, + born=borns.tolist() if borns is not None else None, + epsilon_static=epsilon.tolist() if epsilon is not None else None, + md_uuids=md_uuids, + md_dirs=md_dirs, + uuids=PhononUUIDs( + optimization_run_uuid=optimization_run_uuid, + displacements_uuids=displacement_data["uuids"], + born_run_uuid=born_run_uuid, + ), + jobdirs=PhononJobDirs( + displacements_job_dirs=displacement_data["dirs"], + born_run_job_dir=born_run_job_dir, + optimization_run_job_dir=optimization_run_job_dir, + taskdoc_run_job_dir=str(Path.cwd()), + ), + ) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index f882e3580e..c9f588f78a 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -74,6 +74,7 @@ "one_shot_dir": "one_shot", "refit_dir": "short_cutoff_refit", "anharmonic_fit_log": "pheasy_anharmonic_fit.log", + "harmonic_fit_log": "pheasy_harmonic_fit.log", } # The anharmonic training set is sized so that the fit has this many force @@ -220,7 +221,9 @@ def _check_anharmonic_settings( ) -def _check_lasso_alpha(log_file: Path, alpha_min: int) -> None: +def _check_lasso_alpha( + log_file: Path, alpha_min: int, alpha_min_name: str = "anhar_alpha_min" +) -> float: """ Warn if the cross-validated LASSO penalty is on either bound of the search. @@ -235,11 +238,18 @@ def _check_lasso_alpha(log_file: Path, alpha_min: int) -> None: Log file written by pheasy during the fit. alpha_min: int Base-10 exponent of the smallest penalty in the search. + alpha_min_name: str + Name of the setting that gives alpha_min, used in the warning. + + Returns + ------- + float + The penalty chosen by cross-validation. """ if not log_file.exists(): raise FileNotFoundError( f"pheasy exited without writing {log_file}, so the result of the " - "anharmonic fit is unknown." + "fit is unknown." ) match = re.search(r"alpha_opt:\s*([-+0-9.eE]+)", log_file.read_text()) if match is None: @@ -258,11 +268,85 @@ def _check_lasso_alpha(log_file: Path, alpha_min: int) -> None: if alpha_opt <= 10.0**alpha_min * (1 + 1e-6): warnings.warn( f"The LASSO penalty chosen by cross-validation ({alpha_opt:e}) is on " - f"the lower bound 1e{alpha_min} in {log_file}. The anharmonic force " - "constants depend on this bound and may be wrong. Lower " - "anhar_alpha_min and refit.", + f"the lower bound 1e{alpha_min} in {log_file}. The force constants " + f"depend on this bound and may be wrong. Lower {alpha_min_name} and " + "refit.", stacklevel=2, ) + return alpha_opt + + +def _run_harmonic_fit( + supercell_matrix: np.ndarray, + symprec: float, + num_har: int, + use_lasso: bool = True, + rotational_sum_rule: str | None = "BHH", + alpha_min: int | None = None, + random_seed: int | None = 103, + log_file: str | None = None, +) -> None: + """ + Fit the second-order force constants with pheasy in the current folder. + + pheasy reads POSCAR, SPOSCAR and the harmonic displacement and force + matrices, and writes FORCE_CONSTANTS. The caller removes the files of an + earlier fit and checks the result, since the pheasy phonon workflow and + the finite-temperature workflow check different things. + + Parameters + ---------- + supercell_matrix: np.ndarray + Diagonal supercell matrix. + symprec: float + Symmetry precision. + num_har: int + Number of displaced supercells in the fit. + use_lasso: bool + If True, fit with LASSO on standardized data. If False, fit with + pheasy's default least squares. + rotational_sum_rule: str | None + Rotational sum rule passed to pheasy with --rasr, or None for none. + alpha_min: int | None + Base-10 exponent of the smallest LASSO penalty in the search. None + keeps pheasy's default. Ignored without LASSO. + random_seed: int | None + Seed for the LASSO fit. Ignored without LASSO. + log_file: str | None + Log file of the fit. None keeps pheasy's default. + """ + dim = " ".join(str(int(supercell_matrix[i][i])) for i in range(3)) + base = f"pheasy --scell SPOSCAR --dim {dim} -w 2 --symprec {float(symprec)}" + fit = f"{base} -f --full_ifc" + if use_lasso: + fit += " -l LASSO --std" + if alpha_min is not None: + fit += f" --alpha_min {int(alpha_min)}" + if random_seed is not None: + fit += f" --seed {int(random_seed)}" + if rotational_sum_rule is not None: + fit += f" --rasr {rotational_sum_rule}" + fit += ( + f" --ndata {int(num_har)} " + f"--force_matrix_file {_DEFAULT_FILE_PATHS['harmonic_force_matrix']}" + ) + if log_file is not None: + fit += f" -o {log_file}" + + commands = [ + # clusters and orbits of the second-order force constants + f"{base} -s --nbody 2", + # null space + f"{base} -c", + # sensing matrix from the displacement matrix + ( + f"{base} -d --ndata {int(num_har)} --disp_file " + f"--disp_matrix_file {_DEFAULT_FILE_PATHS['harmonic_displacements']}" + ), + fit, + ] + for cmd in commands: + subprocess.run(shlex.split(cmd), check=True) def _run_anharmonic_fit( @@ -741,71 +825,17 @@ def generate_frequencies_eigenvectors( prim = ase_read("POSCAR") supercell = ase_read("SPOSCAR") - # Create the clusters and orbitals for second order force constants. - # The harmonic fit is always second order (-w 2, --nbody 2). - pheasy_cmd_1 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} " - f"-s -w 2 --symprec {float(symprec)} --nbody 2" - ) - - # Create the null space to further reduce the free parameters for - # specific force constants and make them physically correct. - pheasy_cmd_2 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -c --symprec " - f"{float(symprec)} -w 2" - ) - - # Generate the Compressive Sensing matrix,i.e., displacement matrix - # for the input of machine leaning method.i.e., LASSO, - pheasy_cmd_3 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -w 2 -d " - f"--symprec {float(symprec)} " - f"--ndata {int(num_har)} --disp_file " - f"--disp_matrix_file {_DEFAULT_FILE_PATHS['harmonic_displacements']}" - ) - - # Here we set a criteria to determine which method to use to generate the - # force constants. If the number of displacements is larger than 3, we - # will use the LASSO method to generate the force constants. Otherwise, - # we will use the least-squred method to generate the force constants. - if len(phonon.displacements) > 3: - # Calculate the force constants using the LASSO method due to the - # random-displacement method Obviously, the rotaional invariance - # constraint, i.e., tag: --rasr BHH, is enforced during the - # fitting process. - pheasy_cmd_4 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -f --full_ifc " - f"-w 2 --symprec {float(symprec)} " - f"-l LASSO --std --rasr BHH --ndata {int(num_har)} " - f"--force_matrix_file {_DEFAULT_FILE_PATHS['harmonic_force_matrix']}" - + (f" --seed {int(random_seed)}" if random_seed is not None else "") - ) - - else: - # Calculate the force constants using the least-squred method - pheasy_cmd_4 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " - f"{int(supercell_matrix[1][1])} " - f"{int(supercell_matrix[2][2])} -f --full_ifc " - f"-w 2 --symprec {float(symprec)} " - f"--rasr BHH --ndata {int(num_har)} " - f"--force_matrix_file {_DEFAULT_FILE_PATHS['harmonic_force_matrix']}" - ) - + # With more than 3 displacements, the random-displacement data are fitted + # with LASSO. Otherwise, least squares is used. The rotational sum rule + # BHH is enforced in both. logger.info("Start running pheasy in cluster") - - subprocess.call(shlex.split(pheasy_cmd_1)) - subprocess.call(shlex.split(pheasy_cmd_2)) - subprocess.call(shlex.split(pheasy_cmd_3)) - subprocess.call(shlex.split(pheasy_cmd_4)) + _run_harmonic_fit( + supercell_matrix, + symprec, + num_har, + use_lasso=len(phonon.displacements) > 3, + random_seed=random_seed, + ) fc_file = Path(_DEFAULT_FILE_PATHS["force_constants"]) if cal_anhar_fcs and not fc_file.exists(): diff --git a/src/atomate2/common/schemas/finite_temperature_phonons.py b/src/atomate2/common/schemas/finite_temperature_phonons.py new file mode 100644 index 0000000000..eae1e3f6c6 --- /dev/null +++ b/src/atomate2/common/schemas/finite_temperature_phonons.py @@ -0,0 +1,234 @@ +"""Schemas for the finite-temperature phonon workflow.""" + +from typing import Literal + +from emmet.core.math import Matrix3D +from emmet.core.structure import StructureMetadata +from pydantic import BaseModel, Field +from pymatgen.core import Structure +from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine +from pymatgen.phonon.dos import PhononDos + +from atomate2.common.schemas.phonons import ForceConstants, PhononJobDirs, PhononUUIDs + + +class TrajectoryHealth(BaseModel): + """Check whether the MD trajectory stayed at the reference structure. + + A second-order fit describes small vibrations around the reference + structure. If the atoms melt, move to another structure or diffuse, the + fitted force constants may not describe small vibrations around the + reference. The fit error does not show this, so it is measured on the + trajectory. The displacement of the center of mass of each frame is + removed from its displacements. + """ + + verdict: ( + Literal[ + "stable", + "melted", + "transformed", + "shifted_or_diffusing", + "disordering", + "diffusing_or_soft", + "reference_mismatch", + ] + | None + ) = Field( + None, + description="Result of the check. 'reference_mismatch' means the atoms of " + "the MD are not in the order of the reference. Every other verdict except " + "'stable' means the trajectory left the reference structure.", + ) + is_stable: bool | None = Field(None, description="True if the verdict is 'stable'.") + n_frames: int | None = Field(None, description="Number of MD frames analysed.") + rms_displacement_start: float | None = Field( + None, + description="Root mean square displacement from the reference structure in " + "the first 10 frames, in Angstrom. The MD starts from the reference, so a " + "large value points at a mismatch in atom order.", + ) + rms_displacement_end: float | None = Field( + None, + description="Root mean square displacement from the reference structure in " + "the last fifth of the frames, in Angstrom.", + ) + u_ref: float | None = Field( + None, + description="Root mean square displacement from the reference structure in " + "the second half of the frames, in Angstrom.", + ) + u_shift: float | None = Field( + None, + description="Root mean square displacement of the mean atomic positions from " + "the reference structure in the second half of the frames, in Angstrom.", + ) + u_vib: float | None = Field( + None, + description="Root mean square vibration around the mean atomic positions in " + "the second half of the frames, in Angstrom. u_ref**2 = u_shift**2 + " + "u_vib**2.", + ) + nearest_neighbor_distance: float | None = Field( + None, + description="Nearest-neighbor distance of each atom in the reference " + "structure, averaged over the atoms, in Angstrom.", + ) + lindemann_ratio: float | None = Field( + None, description="u_vib divided by the nearest-neighbor distance." + ) + shift_ratio: float | None = Field(None, description="u_ref divided by u_vib.") + energy_drift: float | None = Field( + None, + description="Mean potential energy in the last quarter of the frames minus " + "that in the second quarter, in eV/atom. None for fewer than 20 frames.", + ) + energy_fluctuation: float | None = Field( + None, + description="Standard deviation of the potential energy in the last fifth of " + "the frames, in eV/atom.", + ) + equipartition_rise: float | None = Field( + None, + description="Potential energy per atom that a harmonic MD run gains when " + "it starts from the reference structure, 3/2 k_B T, in eV/atom.", + ) + + +class FiniteTemperaturePhononDoc(StructureMetadata): + """Effective harmonic phonons at a finite temperature.""" + + structure: Structure | None = Field( + None, + description="Relaxed unit cell, with its atoms sorted by electronegativity.", + ) + temperature: float | None = Field(None, description="MD temperature in K.") + code: str | None = Field( + None, + description="Code of the phonon displacement calculations that give the " + "forces, 'vasp' or 'forcefields'.", + ) + md_code: str | None = Field( + None, description="Code of the MD, 'vasp' or 'forcefields'." + ) + force_field_name: str | None = Field( + None, + description="Force field of the phonon displacement calculations, if a " + "force field was used.", + ) + force_field_kwargs: dict | None = Field( + None, + description="Keyword arguments of the force field calculator of the phonon " + "displacement calculations.", + ) + md_force_field_name: str | None = Field( + None, description="Force field of the MD, if a force field was used." + ) + md_force_field_kwargs: dict | None = Field( + None, description="Keyword arguments of the force field calculator of the MD." + ) + thermostat: str | None = Field(None, description="Thermostat of the NVT MD.") + md_time_step: float | None = Field(None, description="MD time step in fs.") + md_time: float | None = Field( + None, + description="Number of MD frames read from disk times the time step, in ps.", + ) + equilibration_time: float | None = Field( + None, description="Time at the start of the trajectory left out, in ps." + ) + n_snapshots: int | None = Field( + None, description="Number of MD snapshots in the force constant fit." + ) + snapshot_times: list[float] | None = Field( + None, + description="MD time of each snapshot in ps, with the first frame of the " + "trajectory at time zero.", + ) + supercell_matrix: Matrix3D | None = Field( + None, description="Supercell matrix of the MD and the statics." + ) + primitive_matrix: Matrix3D | None = Field( + None, description="Primitive matrix used by phonopy." + ) + rotational_sum_rule: str | None = Field( + None, description="Rotational sum rule passed to pheasy with --rasr." + ) + lasso_alpha: float | None = Field( + None, description="LASSO penalty chosen by cross-validation in pheasy." + ) + force_rmse: float | None = Field( + None, + description="Root mean square error of the symmetrized force constants on " + "the snapshot forces used in the fit, in eV/Angstrom.", + ) + max_residual_force: float | None = Field( + None, + description="Largest force component on the undisplaced supercell, in " + "eV/Angstrom. The residual forces of this supercell are subtracted from the " + "snapshot forces before the fit.", + ) + rms_displacement: float | None = Field( + None, + description="Root mean square displacement of the snapshots from the " + "reference structure, with the displacement of the center of mass of each " + "snapshot removed, in Angstrom.", + ) + rms_displacement_from_force_constants: float | None = Field( + None, + description="Classical root mean square displacement at the temperature from " + "the fitted force constants, in Angstrom. It sums the modes of the " + "supercell at the Gamma point with a frequency above tol_imaginary_modes.", + ) + trajectory_health: TrajectoryHealth | None = Field( + None, description="Check of the MD trajectory." + ) + tol_imaginary_modes: float | None = Field( + None, description="Frequencies below -tol_imaginary_modes in THz are imaginary." + ) + has_imaginary_modes: bool | None = Field( + None, description="True if the band structure has imaginary modes." + ) + n_imaginary_modes: int | None = Field( + None, + description="Number of imaginary modes at the q-points commensurate with the " + "supercell.", + ) + min_frequency: float | None = Field( + None, + description="Lowest frequency at the q-points commensurate with the " + "supercell, in THz. Imaginary frequencies are negative.", + ) + phonon_bandstructure: PhononBandStructureSymmLine | None = Field( + None, description="Phonon band structure of the effective force constants." + ) + phonon_dos: PhononDos | None = Field( + None, description="Phonon density of states of the effective force constants." + ) + force_constants: ForceConstants | None = Field( + None, + description="Effective second-order force constants of the supercell in " + "eV/Angstrom^2.", + ) + born: list[Matrix3D] | None = Field( + None, + description="Symmetrized Born effective charges. They are used for the " + "non-analytical correction unless they are all zero.", + ) + epsilon_static: Matrix3D | None = Field( + None, + description="Symmetrized high-frequency dielectric tensor, used for the " + "non-analytical correction together with born.", + ) + md_uuids: list[str] | None = Field(None, description="UUIDs of the MD jobs.") + md_dirs: list[str] | None = Field(None, description="Directories of the MD jobs.") + uuids: PhononUUIDs | None = Field( + None, + description="UUIDs of the relaxation, the phonon displacement calculations " + "and the Born charge calculation. The undisplaced supercell is the last " + "phonon displacement calculation.", + ) + jobdirs: PhononJobDirs | None = Field( + None, + description="Directories of the relaxation, the phonon displacement " + "calculations, the Born charge calculation and the fit.", + ) diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py new file mode 100644 index 0000000000..354c7494c8 --- /dev/null +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -0,0 +1,415 @@ +"""Define the force field makers for finite-temperature phonons.""" + +from __future__ import annotations + +import math +from dataclasses import dataclass, field, replace +from typing import TYPE_CHECKING + +from ase import units + +from atomate2.ase.md import MDEnsemble +from atomate2.common.flows.finite_temperature_phonons import ( + BaseFiniteTemperaturePhononMaker, +) +from atomate2.common.jobs.finite_temperature_phonons import ASE_TRAJECTORY_FILE +from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.md import ForceFieldMDMaker +from atomate2.vasp.flows.finite_temperature_phonons import FiniteTemperaturePhononMaker + +if TYPE_CHECKING: + from jobflow import Maker + from typing_extensions import Self + + from atomate2.forcefields import MLFF + +_DEFAULT_FORCE_FIELD = "MACE-MP-0" + +# VASP sets the Nose mass for SMASS = 0 so that the temperature oscillates with a +# period of about 40 time steps. With ASE's thermostat mass Q = 3 N k_B T tdamp**2, the +# linearised Nose-Hoover period is close to pi * sqrt(2) * tdamp. +_NOSE_HOOVER_TDAMP_STEPS = 40 / (math.pi * math.sqrt(2)) + + +def _get_md_maker( + force_field_name: str | MLFF | dict, calculator_kwargs: dict | None = None +) -> ForceFieldMDMaker: + """Get the force field MD maker, whose settings the flow sets.""" + return ForceFieldMDMaker( + force_field_name=force_field_name, + calculator_kwargs=calculator_kwargs or {}, + store_trajectory="no", + ionic_step_data=("energy",), + ) + + +def _get_force_field_md_maker( + maker: BaseFiniteTemperaturePhononMaker, n_steps: int +) -> ForceFieldMDMaker: + """ + Get the force field MD maker of one MD job of a finite-temperature flow. + + See :obj:`ForceFieldFiniteTemperaturePhononMaker` for the MD settings. + + Parameters + ---------- + maker: .BaseFiniteTemperaturePhononMaker + The finite-temperature phonon maker. + n_steps: int + Number of MD steps of the job. + + Returns + ------- + ForceFieldMDMaker + """ + md_maker = maker.md_maker + if not isinstance(md_maker, ForceFieldMDMaker): + raise TypeError( + f"The MD maker must be a ForceFieldMDMaker, not {type(md_maker).__name__}." + ) + if md_maker.dynamics is not None or md_maker.ase_md_kwargs: + raise ValueError( + "The flow sets the thermostat. The MD maker must not set dynamics or " + "ase_md_kwargs." + ) + if maker.thermostat == "nose-hoover": + dynamics = "nose-hoover-chain" + md_kwargs = { + "tdamp": _NOSE_HOOVER_TDAMP_STEPS * maker.md_time_step * units.fs, + "tchain": 1, + } + else: + # AseMDMaker sets its default friction of 10 ps^-1 + dynamics = "langevin" + md_kwargs = {} + return replace( + md_maker, + ensemble=MDEnsemble.nvt, + temperature=maker.temperature, + n_steps=n_steps, + time_step=maker.md_time_step, + dynamics=dynamics, + ase_md_kwargs=md_kwargs, + traj_file=ASE_TRAJECTORY_FILE, + traj_file_fmt="ase", + traj_interval=1, + mb_velocity_seed=maker.random_seed, + zero_linear_momentum=True, + ) + + +@dataclass +class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): + """ + Maker for effective harmonic phonons at a finite temperature with a force field. + + The relaxation, the MD and the phonon displacement calculations all use one + force field, MACE-MP-0 by default. Use :obj:`from_force_field_name` to use + another one. The MD writes an ASE trajectory file with a frame at every + time step. The snapshots are read from this file, and the trajectory is not + stored in the output document of the MD job. The Nose-Hoover thermostat is + ASE's NoseHooverChainNVT with one thermostat variable, like MDALGO = 2 in + VASP. Its time constant gives a period of about 40 time steps, like SMASS = + 0 in VASP. The Langevin thermostat has the default friction of + :obj:`.AseMDMaker`, 10 ps^-1. The initial velocities of the first MD job + follow the Maxwell-Boltzmann distribution, seeded with random_seed, with + zero total momentum. + + See :obj:`.BaseFiniteTemperaturePhononMaker` for the workflow. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + bulk_relax_maker: .ForceFieldRelaxMaker | None + Maker for the relaxation of the unit cell. It keeps the symmetry of + the structure. None skips the relaxation. + born_maker: .Maker | None + Maker for the Born effective charges and the dielectric tensor. It is + None by default, as in the force field pheasy phonon workflow. + md_maker: .ForceFieldMDMaker + Maker for the MD. It must not set dynamics or ase_md_kwargs, since the + flow sets the thermostat. + phonon_displacement_maker: .ForceFieldStaticMaker + Maker for the static calculations on the snapshots and the undisplaced + supercell. + code: str + Code of the phonon displacement calculations. + md_code: str + Code of the MD. + """ + + name: str = "force field finite temperature phonon" + bulk_relax_maker: ForceFieldRelaxMaker | None = field( + default_factory=lambda: ForceFieldRelaxMaker( + force_field_name=_DEFAULT_FORCE_FIELD, + relax_kwargs={"fmax": 1e-5}, + fix_symmetry=True, + ) + ) + md_maker: ForceFieldMDMaker = field( + default_factory=lambda: _get_md_maker(_DEFAULT_FORCE_FIELD) + ) + phonon_displacement_maker: ForceFieldStaticMaker = field( + default_factory=lambda: ForceFieldStaticMaker( + force_field_name=_DEFAULT_FORCE_FIELD + ) + ) + code: str = "forcefields" + md_code: str = "forcefields" + + @property + def prev_calc_dir_argname(self) -> None: + """Name of the argument that passes prev_dir to the phonon displacement maker. + + Force field makers take no previous directory. + """ + return + + def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: + """ + Get the force field MD maker of one MD job. + + Parameters + ---------- + n_steps: int + Number of MD steps of the job. + + Returns + ------- + ForceFieldMDMaker + """ + return _get_force_field_md_maker(self, n_steps) + + @classmethod + def from_force_field_name( + cls, + force_field_name: str | MLFF | dict, + calculator_kwargs: dict | None = None, + relax_initial_structure: bool = True, + **kwargs, + ) -> Self: + """ + Create a finite-temperature phonon flow from a force field name. + + The relaxation, the MD and the phonon displacement calculations use the + force field, and born_maker is None. These makers replace any given in + kwargs. + + Parameters + ---------- + force_field_name : str or .MLFF or dict + The name of the force field. + calculator_kwargs : dict | None + The keyword arguments to pass to the calculator. + relax_initial_structure: bool = True + Whether to relax the initial structure. + **kwargs + Additional kwargs to pass to ForceFieldFiniteTemperaturePhononMaker. + + Returns + ------- + ForceFieldFiniteTemperaturePhononMaker + """ + calculator_kwargs = calculator_kwargs or {} + phonon_displacement_maker = ForceFieldStaticMaker( + force_field_name=force_field_name, + calculator_kwargs=calculator_kwargs, + ) + kwargs.update( + bulk_relax_maker=( + ForceFieldRelaxMaker( + force_field_name=force_field_name, + calculator_kwargs=calculator_kwargs, + relax_kwargs={"fmax": 1e-5}, + fix_symmetry=True, + ) + if relax_initial_structure + else None + ), + md_maker=_get_md_maker(force_field_name, calculator_kwargs), + phonon_displacement_maker=phonon_displacement_maker, + born_maker=None, + ) + return cls( + name=( + f"{phonon_displacement_maker.mlff.name} Finite Temperature Phonon Maker" + ), + **kwargs, + ) + + +@dataclass +class VaspMDMLFFStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker): + """ + Maker for finite-temperature phonons from VASP MD and force field statics. + + The relaxation and the MD are those of + :obj:`.FiniteTemperaturePhononMaker`. The forces on the snapshots and on + the undisplaced supercell come from a force field, MACE-MP-0 by default. + Use :obj:`from_force_field_name` to use another one. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + bulk_relax_maker: .Maker | None + Maker for the relaxation of the unit cell. None skips the relaxation. + born_maker: .Maker | None + Maker for the Born effective charges and the dielectric tensor. It is + None by default, as in the force field pheasy phonon workflow, since + the force constants come from the force field. + md_maker: .MDMaker + Maker for the MD, see :obj:`.FiniteTemperaturePhononMaker`. + phonon_displacement_maker: .ForceFieldStaticMaker + Maker for the static calculations on the snapshots and the undisplaced + supercell. + code: str + Code of the phonon displacement calculations. + """ + + name: str = "vasp md mlff static finite temperature phonon" + born_maker: Maker | None = None + phonon_displacement_maker: Maker = field( + default_factory=lambda: ForceFieldStaticMaker( + force_field_name=_DEFAULT_FORCE_FIELD + ) + ) + code: str = "forcefields" + + @property + def prev_calc_dir_argname(self) -> None: + """Name of the argument that passes prev_dir to the phonon displacement maker. + + Force field makers take no previous directory. + """ + return + + @classmethod + def from_force_field_name( + cls, + force_field_name: str | MLFF | dict, + calculator_kwargs: dict | None = None, + **kwargs, + ) -> Self: + """ + Create a finite-temperature phonon flow whose statics use a force field. + + The phonon displacement calculations use the force field, and born_maker + is None. These makers replace any given in kwargs. + + Parameters + ---------- + force_field_name : str or .MLFF or dict + The name of the force field. + calculator_kwargs : dict | None + The keyword arguments to pass to the calculator. + **kwargs + Additional kwargs to pass to + VaspMDMLFFStaticFiniteTemperaturePhononMaker. + + Returns + ------- + VaspMDMLFFStaticFiniteTemperaturePhononMaker + """ + phonon_displacement_maker = ForceFieldStaticMaker( + force_field_name=force_field_name, + calculator_kwargs=calculator_kwargs or {}, + ) + kwargs.update( + phonon_displacement_maker=phonon_displacement_maker, born_maker=None + ) + return cls( + name=( + f"VASP MD {phonon_displacement_maker.mlff.name} Static Finite " + "Temperature Phonon Maker" + ), + **kwargs, + ) + + +@dataclass +class MLFFMDVaspStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker): + """ + Maker for finite-temperature phonons from force field MD and VASP statics. + + The relaxation, the Born charges and the phonon displacement calculations + are those of :obj:`.FiniteTemperaturePhononMaker`. The MD uses a force + field, MACE-MP-0 by default, and starts from the supercell of the + VASP-relaxed structure. Use :obj:`from_force_field_name` to use another + force field. The MD settings are those of + :obj:`ForceFieldFiniteTemperaturePhononMaker`. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + bulk_relax_maker: .Maker | None + Maker for the relaxation of the unit cell. None skips the relaxation. + born_maker: .BaseVaspMaker | None + Maker for the Born effective charges and the dielectric tensor, used + for the non-analytical correction. It is a DielectricMaker by default, + as in the VASP pheasy phonon workflow. None skips it. + md_maker: .ForceFieldMDMaker + Maker for the MD. It must not set dynamics or ase_md_kwargs, since the + flow sets the thermostat. + phonon_displacement_maker: .BaseVaspMaker + Maker for the static calculations on the snapshots and the undisplaced + supercell. + md_code: str + Code of the MD. + """ + + name: str = "mlff md vasp static finite temperature phonon" + md_maker: Maker = field(default_factory=lambda: _get_md_maker(_DEFAULT_FORCE_FIELD)) + md_code: str = "forcefields" + + def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: + """ + Get the force field MD maker of one MD job. + + Parameters + ---------- + n_steps: int + Number of MD steps of the job. + + Returns + ------- + ForceFieldMDMaker + """ + return _get_force_field_md_maker(self, n_steps) + + @classmethod + def from_force_field_name( + cls, + force_field_name: str | MLFF | dict, + calculator_kwargs: dict | None = None, + **kwargs, + ) -> Self: + """ + Create a finite-temperature phonon flow whose MD uses a force field. + + The MD maker built for the force field replaces any given in kwargs. + + Parameters + ---------- + force_field_name : str or .MLFF or dict + The name of the force field. + calculator_kwargs : dict | None + The keyword arguments to pass to the calculator. + **kwargs + Additional kwargs to pass to + MLFFMDVaspStaticFiniteTemperaturePhononMaker. + + Returns + ------- + MLFFMDVaspStaticFiniteTemperaturePhononMaker + """ + md_maker = _get_md_maker(force_field_name, calculator_kwargs) + kwargs.update(md_maker=md_maker) + return cls( + name=( + f"{md_maker.mlff.name} MD VASP Static Finite Temperature Phonon Maker" + ), + **kwargs, + ) diff --git a/src/atomate2/vasp/flows/finite_temperature_phonons.py b/src/atomate2/vasp/flows/finite_temperature_phonons.py new file mode 100644 index 0000000000..a82e3335ba --- /dev/null +++ b/src/atomate2/vasp/flows/finite_temperature_phonons.py @@ -0,0 +1,225 @@ +"""Define the VASP maker for finite-temperature phonons.""" + +from __future__ import annotations + +from dataclasses import dataclass, field, fields, replace +from typing import TYPE_CHECKING + +from atomate2.common.flows.finite_temperature_phonons import ( + BaseFiniteTemperaturePhononMaker, +) +from atomate2.vasp.flows.core import DoubleRelaxMaker +from atomate2.vasp.jobs.core import DielectricMaker, TightRelaxMaker +from atomate2.vasp.jobs.md import MDMaker +from atomate2.vasp.jobs.phonons import PhononDisplacementMaker +from atomate2.vasp.sets.core import ( + LangevinMDSetGenerator, + MDSetGenerator, + StaticSetGenerator, + TightRelaxSetGenerator, +) + +if TYPE_CHECKING: + from jobflow import Maker + + from atomate2.vasp.jobs.base import BaseVaspMaker + +# The relaxation, the MD and the phonon displacement calculations use the same +# smearing and k-point density. +_ELECTRONIC_INCAR = {"ISMEAR": 0, "SIGMA": 0.05} +_KPOINTS = {"reciprocal_density": 100} + +# The MD only samples the displacements. The forces of the fit come from the +# phonon displacement calculations, which use tighter settings. +_MD_INCAR = { + "ENCUT": 500, + "EDIFF": 1e-5, + "PREC": "Normal", + "ALGO": "Normal", + "LREAL": "Auto", + "NBLOCK": 1, + "LWAVE": False, + "LCHARG": False, + **_ELECTRONIC_INCAR, +} +_STATIC_INCAR = { + "IBRION": 2, + "ISIF": 3, + "NSW": 0, + "ENCUT": 600, + "ENAUG": 1360, + "EDIFF": 1e-7, + "PREC": "Accurate", + "ALGO": "Normal", + "LASPH": True, + "NELM": 200, + "LREAL": False, + "LAECHG": False, + "LCHARG": False, + "LWAVE": False, + **_ELECTRONIC_INCAR, +} +_RELAX_INCAR = { + key: _STATIC_INCAR[key] for key in ("ENCUT", "ENAUG", "PREC", "LASPH") +} | _ELECTRONIC_INCAR + +# INCAR tags of the MD that the flow sets +_MD_FLOW_TAGS = ( + "IBRION", + "ISIF", + "LANGEVIN_GAMMA", + "MDALGO", + "NSW", + "POTIM", + "SMASS", + "TEBEG", + "TEEND", +) + + +def _get_relax_maker() -> DoubleRelaxMaker: + """Get a tight relaxation with the basis set and smearing of the statics.""" + return DoubleRelaxMaker.from_relax_maker( + TightRelaxMaker( + input_set_generator=TightRelaxSetGenerator( + user_incar_settings=dict(_RELAX_INCAR), + user_kpoints_settings=dict(_KPOINTS), + ) + ) + ) + + +def _get_md_maker() -> MDMaker: + """Get the MD maker, whose temperature, steps and thermostat the flow sets.""" + return MDMaker( + input_set_generator=MDSetGenerator( + user_incar_settings=dict(_MD_INCAR), + user_kpoints_settings=dict(_KPOINTS), + ) + ) + + +def _get_phonon_displacement_maker() -> PhononDisplacementMaker: + """Get the static maker for the forces on the snapshots.""" + return PhononDisplacementMaker( + input_set_generator=StaticSetGenerator( + user_incar_settings=dict(_STATIC_INCAR), + user_kpoints_settings=dict(_KPOINTS), + auto_ispin=True, + ) + ) + + +@dataclass +class FiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): + """ + Maker for effective harmonic phonons at a finite temperature with VASP. + + The relaxation, the MD and the phonon displacement calculations use VASP. + The functional, the spin settings and +U follow the atomate2 VASP defaults. + All three use ISMEAR = 0 with SIGMA = 0.05 and the same reciprocal_density + setting of 100. The relaxation is a double tight relaxation with ENCUT = + 600 eV, ENAUG = 1360 eV and PREC = Accurate, as in the phonon displacement + calculations. These also use EDIFF = 1e-7. The MD uses ENCUT = 500 eV, + EDIFF = 1e-5 and PREC = Normal, and writes every step to XDATCAR with + NBLOCK = 1. The Nose-Hoover thermostat uses MDALGO = 2 and SMASS = 0. The + Langevin thermostat uses MDALGO = 3 with LANGEVIN_GAMMA = 10 ps^-1 for each + species. VASP draws the initial velocities of the first MD job. The MD and + the phonon displacement calculations start from the magnetic moments of the + relaxed structure, if it has any. They all get the same prev_dir, the + relaxation directory by default. auto_ispin of the MD and of the phonon + displacement calculations sets ISPIN from it. + + See :obj:`.BaseFiniteTemperaturePhononMaker` for the workflow. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + bulk_relax_maker: .Maker | None + Maker for the relaxation of the unit cell. None skips the relaxation. + born_maker: .BaseVaspMaker | None + Maker for the Born effective charges and the dielectric tensor, used + for the non-analytical correction. It is a DielectricMaker by default, + as in the VASP pheasy phonon workflow. None skips it. + md_maker: .MDMaker + Maker for the MD, with an :obj:`.MDSetGenerator`. Its + user_incar_settings must not contain IBRION, ISIF, LANGEVIN_GAMMA, + MDALGO, NSW, POTIM, SMASS, TEBEG or TEEND, since the flow sets them. + NBLOCK must be 1 if it is set. + phonon_displacement_maker: .BaseVaspMaker + Maker for the static calculations on the snapshots and the undisplaced + supercell. + code: str + Code of the phonon displacement calculations. + md_code: str + Code of the MD. + """ + + bulk_relax_maker: Maker | None = field(default_factory=_get_relax_maker) + born_maker: BaseVaspMaker | None = field(default_factory=DielectricMaker) + md_maker: Maker = field(default_factory=_get_md_maker) + phonon_displacement_maker: Maker = field( + default_factory=_get_phonon_displacement_maker + ) + code: str = "vasp" + md_code: str = "vasp" + + @property + def prev_calc_dir_argname(self) -> str | None: + """Name of the argument that passes prev_dir to the phonon displacement maker. + + Returns + ------- + str + """ + return "prev_dir" + + def get_md_maker(self, n_steps: int) -> MDMaker: + """ + Get the VASP MD maker of one MD job. + + Parameters + ---------- + n_steps: int + Number of MD steps of the job. + + Returns + ------- + MDMaker + """ + md_maker = self.md_maker + if not isinstance(md_maker, MDMaker) or not isinstance( + md_maker.input_set_generator, MDSetGenerator + ): + raise TypeError( + "The MD maker must be a VASP MDMaker with an MDSetGenerator." + ) + generator = md_maker.input_set_generator + user_incar = generator.user_incar_settings + if tags := sorted(set(_MD_FLOW_TAGS) & set(user_incar)): + raise ValueError(f"The flow sets {tags}. Remove them from the MD maker.") + if int(user_incar.get("NBLOCK", 1)) != 1: + raise ValueError( + "The MD must write every step to XDATCAR, so NBLOCK must be 1." + ) + if isinstance(generator, LangevinMDSetGenerator): + if self.thermostat != "langevin": + raise ValueError( + "The MD maker has a Langevin thermostat. Set thermostat to " + "'langevin'." + ) + elif self.thermostat == "langevin": + init_fields = [f.name for f in fields(generator) if f.init] + generator = LangevinMDSetGenerator( + **{name: getattr(generator, name) for name in init_fields} + ) + generator = replace( + generator, + ensemble="nvt", + start_temp=self.temperature, + end_temp=self.temperature, + nsteps=n_steps, + time_step=self.md_time_step, + ) + return replace(md_maker, input_set_generator=generator) diff --git a/src/atomate2/vasp/sets/core.py b/src/atomate2/vasp/sets/core.py index a56e943e10..19a50ba702 100644 --- a/src/atomate2/vasp/sets/core.py +++ b/src/atomate2/vasp/sets/core.py @@ -10,6 +10,7 @@ import numpy as np from pymatgen.core.periodic_table import Element +from pymatgen.io.vasp import Poscar try: from pymatgen.io.vasp.sets import LobsterSet # type: ignore[attr-defined] @@ -723,6 +724,42 @@ def _get_ensemble_defaults(structure: Structure, ensemble: str) -> dict[str, Any raise ValueError(f"Expect {ensemble=} to be one of {supported}") from err +@dataclass +class LangevinMDSetGenerator(MDSetGenerator): + """ + Class to generate VASP input sets for NVT MD with a Langevin thermostat. + + Parameters + ---------- + langevin_gamma + Friction coefficient in ps^-1, the same for each species. The VASP + ``LANGEVIN_GAMMA`` parameter. + **kwargs + Other keyword arguments that will be passed to :obj:`MDSetGenerator`. + """ + + langevin_gamma: float = 10.0 + + @property + def incar_updates(self) -> dict: + """Get updates to the INCAR for a Langevin NVT MD job. + + Returns + ------- + dict + A dictionary of updates to apply. + """ + if self.ensemble.lower() != "nvt": + raise ValueError(f"Expect ensemble='nvt', not {self.ensemble!r}.") + updates = super().incar_updates + # the Nose mass is only used by the Nose-Hoover thermostat + updates.pop("SMASS", None) + # one value for each species block of the POSCAR + n_species = len(Poscar(self.structure).site_symbols) + updates.update(MDALGO=3, LANGEVIN_GAMMA=[self.langevin_gamma] * n_species) + return updates + + @dataclass class LobsterTightStaticSetGenerator(LobsterSet): """ diff --git a/tests/ase/test_md.py b/tests/ase/test_md.py index f764908555..77178680a8 100644 --- a/tests/ase/test_md.py +++ b/tests/ase/test_md.py @@ -74,6 +74,29 @@ def test_npt_init_kwargs(si_structure, clean_dir, caplog): assert "The `NPT` module in ASE is no longer recommended" in caplog.text +def test_nvt_nose_hoover_chain(si_structure, clean_dir): + """NoseHooverChainNVT runs at a constant temperature only.""" + maker = LennardJonesMDMaker( + ensemble="nvt", + dynamics="nose-hoover-chain", + temperature=300, + n_steps=5, + ase_md_kwargs={"tdamp": 10, "tchain": 1}, + ) + result = maker.run_ase(si_structure) + assert len(result.trajectory) == 6 + + maker = LennardJonesMDMaker( + ensemble="nvt", + dynamics="nose-hoover-chain", + temperature=[300, 600], + n_steps=5, + ase_md_kwargs={"tdamp": 10}, + ) + with pytest.raises(ValueError, match="cannot follow a temperature schedule"): + maker.run_ase(si_structure) + + @pytest.mark.parametrize("calculator_name", list(name_to_maker)) def test_ase_nvt_maker(calculator_name, lj_fcc_ne_pars, fcc_ne_structure, clean_dir): # Langevin thermostat no longer works with single atom structures in ase>3.24.x diff --git a/tests/common/jobs/test_finite_temperature_phonons.py b/tests/common/jobs/test_finite_temperature_phonons.py new file mode 100644 index 0000000000..699bbf4a7f --- /dev/null +++ b/tests/common/jobs/test_finite_temperature_phonons.py @@ -0,0 +1,663 @@ +"""Tests of the finite-temperature phonon workflow. + +The end-to-end test runs the force field workflow with ASE's EMT potential, so +it needs no reference data. It lives here and not under tests/forcefields, +because pheasy is only installed in the test-non-ase CI job. +""" + +import gzip +from pathlib import Path + +import numpy as np +import pytest +from ase import units +from ase.build import bulk +from ase.calculators import emt +from ase.calculators.singlepoint import SinglePointCalculator +from ase.io import write as ase_write +from jobflow import run_locally +from phonopy import Phonopy +from phonopy.harmonic.dynmat_to_fc import get_commensurate_points +from pymatgen.core import Lattice, Structure +from pymatgen.io.ase import AseAtomsAdaptor +from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure + +from atomate2.common.jobs.finite_temperature_phonons import ( + ASE_TRAJECTORY_FILE, + _assess_trajectory, + _get_rms_displacement, + _remove_center_of_mass, + fit_finite_temperature_phonons, + get_md_restart_structure, + get_md_supercell, + select_md_snapshots, +) +from atomate2.forcefields.flows.finite_temperature_phonons import ( + ForceFieldFiniteTemperaturePhononMaker, + _get_force_field_md_maker, +) +from atomate2.forcefields.jobs import ForceFieldStaticMaker +from atomate2.forcefields.md import ForceFieldMDMaker + +EMT_CALCULATOR = {"@module": "ase.calculators.emt", "@callable": "EMT"} +TEMPERATURE = 300.0 +TEST_DIR = Path(__file__).resolve().parents[2] / "test_data" + + +@pytest.fixture +def cu_supercell(): + """A 2x2x2 supercell of the cubic cell of fcc Cu, 32 atoms.""" + atoms = bulk("Cu", "fcc", a=3.61, cubic=True) * (2, 2, 2) + return AseAtomsAdaptor.get_structure(atoms) + + +def _frames(reference, n_frames, sigma, rng, shift=None): + """Fractional coordinates of frames with Gaussian displacements in Angstrom.""" + disps = rng.normal(0, sigma, size=(n_frames, len(reference), 3)) + if shift is not None: + disps += shift + cart = reference.cart_coords + disps + return np.array([reference.lattice.get_fractional_coords(c) for c in cart]) + + +def _trajectory(reference, rng, sigma=0.05, shift=None, energies=None): + """A trajectory of 400 frames that starts at the reference, and its energies.""" + frac = _frames(reference, 400, sigma, rng) + frac[:10] = _frames(reference, 10, 0.01, rng) + if shift is not None: + frac[200:] = _frames(reference, 200, sigma, rng, shift=shift) + if energies is None: + energies = rng.normal(0, 1e-3, 400) * len(reference) + return frac, energies + + +def _verdict(reference, frac, energies): + return _assess_trajectory(frac, energies, reference, TEMPERATURE).verdict + + +def test_assess_trajectory(cu_supercell): + rng = np.random.default_rng(1) + n_atoms = len(cu_supercell) + + frac, energies = _trajectory(cu_supercell, rng) + health = _assess_trajectory(frac, energies, cu_supercell, TEMPERATURE) + assert health.verdict == "stable" + assert health.is_stable + assert health.n_frames == 400 + # u_vib is sqrt(3) sigma for Gaussian displacements + assert health.u_vib == pytest.approx(np.sqrt(3) * 0.05, rel=0.05) + assert health.u_ref**2 == pytest.approx(health.u_shift**2 + health.u_vib**2) + assert health.nearest_neighbor_distance == pytest.approx(3.61 / np.sqrt(2)) + assert health.equipartition_rise == pytest.approx(1.5 * units.kB * TEMPERATURE) + + # a translation of the whole cell is not a displacement + moved = frac + np.array([0.1, 0.05, 0]) + health_moved = _assess_trajectory(moved, energies, cu_supercell, TEMPERATURE) + assert health_moved.verdict == "stable" + assert health_moved.u_ref == pytest.approx(health.u_ref) + + # a vibration of 0.2 A per direction is above the Lindemann limit + frac, energies = _trajectory(cu_supercell, rng, sigma=0.2) + assert _verdict(cu_supercell, frac, energies) == "melted" + + # the mean positions move in the second half, with a flat energy + shift = rng.normal(0, 0.4, size=(n_atoms, 3)) + frac, energies = _trajectory(cu_supercell, rng, shift=shift) + health = _assess_trajectory(frac, energies, cu_supercell, TEMPERATURE) + assert health.verdict == "shifted_or_diffusing" + assert health.shift_ratio > 1.5 + + # the same move with a falling energy is a transformation + falling = np.concatenate([np.zeros(200), np.linspace(0, -0.1, 200)]) * n_atoms + frac, energies = _trajectory(cu_supercell, rng, shift=shift, energies=falling) + assert _verdict(cu_supercell, frac, energies) == "transformed" + + # a falling energy without a move is a transformation too + frac, energies = _trajectory(cu_supercell, rng, energies=falling) + assert _verdict(cu_supercell, frac, energies) == "transformed" + + # a rising energy at the reference is disordering + rising = np.linspace(0, 0.1, 400) * n_atoms + frac, energies = _trajectory(cu_supercell, rng, energies=rising) + health = _assess_trajectory(frac, energies, cu_supercell, TEMPERATURE) + assert health.verdict == "disordering" + assert health.energy_drift == pytest.approx(0.05, rel=0.05) + + # a large move at the very end, in a structure with long bonds, stays below + # the other limits + sparse = Structure(Lattice.cubic(8.0), ["Cu"], [[0, 0, 0]]) * (3, 3, 3) + frac, energies = _trajectory(sparse, rng) + move = rng.choice([-2.2, 2.2], size=(len(sparse), 3)) / np.sqrt(3) + frac[360:] = _frames(sparse, 40, 0.05, rng, shift=move) + health = _assess_trajectory(frac, energies, sparse, TEMPERATURE) + assert health.verdict == "diffusing_or_soft" + assert health.rms_displacement_end > 1.0 + + # large displacements in the first frames mean the atom order is wrong + frac, energies = _trajectory(cu_supercell, rng) + frac[:10] = frac[:10][:, rng.permutation(n_atoms)] + assert _verdict(cu_supercell, frac, energies) == "reference_mismatch" + + # too few frames to compare the quarters + health = _assess_trajectory(frac[:15], energies[:15], cu_supercell, TEMPERATURE) + assert health.energy_drift is None + + +def _write_vasp_md(directory, reference, frac, energies, gz=False): + """Write the INCAR, XDATCAR and OSZICAR of a VASP MD run with POTIM = 2.""" + directory.mkdir() + lat = reference.lattice.matrix + lines = ["Cu", "1.0", *[" ".join(f"{x:.10f}" for x in row) for row in lat]] + lines += ["Cu", str(len(reference))] + oszicar = [] + for idx, (coords, energy) in enumerate(zip(frac, energies, strict=True), 1): + lines.append(f"Direct configuration= {idx:5d}") + lines += [" ".join(f"{x:.10f}" for x in row) for row in coords] + oszicar += [ + "DAV: 1 -0.1E+02 -0.1E+02 -0.1E+02 100 0.1E+00", + ( + f"{idx:6d} T= 300. E= -.1E+02 F= {energy:.8E} " + f"E0= {energy:.8E} EK= 0.1E+00 SP= 0.0E+00 SK= 0.0E+00" + ), + ] + files = { + "INCAR": "IBRION = 0\nPOTIM = 2.0\n", + "XDATCAR": "\n".join(lines) + "\n", + "OSZICAR": "\n".join(oszicar) + "\n", + } + for name, text in files.items(): + if gz: + with gzip.open(directory / f"{name}.gz", "wt") as file: + file.write(text) + else: + (directory / name).write_text(text) + + +def test_select_md_snapshots_vasp(cu_supercell): + rng = np.random.default_rng(2) + frac = _frames(cu_supercell, 300, 0.05, rng) + energies = rng.normal(-100, 0.01, 300) + # two runs with POTIM = 2 fs, the second one gzipped + _write_vasp_md(Path("md1"), cu_supercell, frac[:150], energies[:150]) + _write_vasp_md(Path("md2"), cu_supercell, frac[150:], energies[150:], gz=True) + md_dirs = ["host:" + str(Path("md1").resolve()), str(Path("md2").resolve())] + + # 0.1 ps is 50 frames of 2 fs, so 250 frames are left for 10 snapshots + output = select_md_snapshots.original( + md_dirs, "vasp", cu_supercell, TEMPERATURE, 1.0, 0.1, 10 + ) + structures = output["structures"] + assert len(structures) == 11 + assert structures[-1] == cu_supercell + indices = range(50, 300, 25) + for structure, idx in zip(structures[:-1], indices, strict=True): + diff = structure.frac_coords - frac[idx] + assert np.allclose(diff - np.round(diff), 0, atol=1e-8) + assert output["snapshot_times"] == pytest.approx([idx * 0.002 for idx in indices]) + assert output["md_time"] == pytest.approx(0.6) + assert output["rms_displacement"] == pytest.approx(np.sqrt(3) * 0.05, rel=0.1) + assert output["trajectory_health"]["n_frames"] == 300 + + with pytest.raises(ValueError, match="fewer than the 300 snapshots"): + select_md_snapshots.original( + md_dirs[:1], "vasp", cu_supercell, 300, 1, 0.1, 300 + ) + + # atoms of another species at the same positions + other = cu_supercell.copy() + other.replace_species({"Cu": "Ag"}) + with pytest.raises(ValueError, match="not in the order of the reference"): + select_md_snapshots.original(md_dirs[:1], "vasp", other, 300, 1, 0.1, 10) + + # the same run twice, once with a host name + with pytest.raises(ValueError, match="its own directory"): + select_md_snapshots.original( + [md_dirs[0], str(Path("md1").resolve())], + "vasp", + cu_supercell, + 300, + 1, + 0.1, + 10, + ) + + Path("md4").mkdir() + for name in ("INCAR", "XDATCAR"): + (Path("md4") / name).write_text((Path("md1") / name).read_text()) + (Path("md4") / "OSZICAR").write_text("") + with pytest.raises(ValueError, match=r"0 MD steps in OSZICAR\..*NBLOCK = 1"): + select_md_snapshots.original( + [str(Path("md4").resolve())], "vasp", cu_supercell, 300, 1, 0.1, 10 + ) + + +def _write_ase_md(directory, reference, frac, energies): + frames = [] + for coords, energy in zip(frac, energies, strict=True): + atoms = AseAtomsAdaptor.get_atoms(reference) + atoms.set_scaled_positions(coords) + atoms.calc = SinglePointCalculator(atoms, energy=energy) + frames.append(atoms) + directory.mkdir() + ase_write(directory / ASE_TRAJECTORY_FILE, frames) + + +def test_select_md_snapshots_forcefields(cu_supercell): + rng = np.random.default_rng(3) + frac = _frames(cu_supercell, 151, 0.05, rng) + energies = rng.normal(0, 0.01, 151) + # the second run starts from the last frame of the first one + _write_ase_md(Path("md1"), cu_supercell, frac[:101], energies[:101]) + _write_ase_md(Path("md2"), cu_supercell, frac[100:], energies[100:]) + + output = select_md_snapshots.original( + [str(Path(name).resolve()) for name in ("md1", "md2")], + "forcefields", + cu_supercell, + 300, + 2.0, + 0.02, + 14, + ) + assert output["trajectory_health"]["n_frames"] == 151 + # 10 frames of 2 fs are left out, and 141 frames are left for 14 snapshots + indices = range(10, 150, 10) + assert output["snapshot_times"] == pytest.approx([idx * 0.002 for idx in indices]) + for structure, idx in zip(output["structures"][:-1], indices, strict=True): + diff = structure.frac_coords - frac[idx] + assert np.allclose(diff - np.round(diff), 0, atol=1e-8) + + # the snapshots keep the magnetic moments of the reference + magmoms = [1.0] * len(cu_supercell) + magnetic = cu_supercell.copy(site_properties={"magmom": magmoms}) + output = select_md_snapshots.original( + [str(Path("md1").resolve())], "forcefields", magnetic, 300, 2.0, 0.02, 14 + ) + for structure in output["structures"]: + assert structure.site_properties == {"magmom": magmoms} + + # a trajectory that leaves the reference gives a warning + melted = _frames(cu_supercell, 101, 0.3, rng) + melted[:10] = cu_supercell.frac_coords + _write_ase_md(Path("md3"), cu_supercell, melted, energies[:101]) + with pytest.warns(UserWarning, match="verdict: melted"): + output = select_md_snapshots.original( + [str(Path("md3").resolve())], + "forcefields", + cu_supercell, + 300, + 2.0, + 0.02, + 14, + ) + assert output["trajectory_health"]["verdict"] == "melted" + + +def test_get_md_supercell(): + """The supercell has the atom order of phonopy and the magnetic moments.""" + structure = Structure( + Lattice.cubic(4.17), + ["O", "Ni", "O", "Ni"], + [[0.5, 0, 0], [0, 0, 0], [0, 0.5, 0], [0.5, 0.5, 0]], + site_properties={"magmom": [0.0, 2.0, 0.0, -2.0]}, + ) + matrix = np.diag([2, 2, 1]) + supercell = get_md_supercell.original(structure, matrix, 1e-3, "vasp") + assert len(supercell) == 16 + assert [str(site.specie) for site in supercell] == ["Ni"] * 8 + ["O"] * 8 + # each atom of the sorted unit cell has four images in a row + assert supercell.site_properties["magmom"] == [2.0] * 4 + [-2.0] * 4 + [0.0] * 8 + + supercell = get_md_supercell.original( + structure.copy().remove_site_property("magmom"), + np.diag([2, 2, 1]), + 1e-3, + "vasp", + ) + assert supercell.site_properties == {} + + +def test_get_md_restart_structure(cu_supercell): + rng = np.random.default_rng(4) + velocities = rng.normal(0, 0.01, size=(len(cu_supercell), 3)) + reference = cu_supercell.copy(site_properties={"magmom": [1.0] * 32}) + + # a CONTCAR of a VASP MD, with the predictor-corrector block after the + # velocities + md_dir = TEST_DIR / "vasp/Si_multi_md/molecular_dynamics_1/outputs" + si_reference = Structure( + np.eye(3) * 3.87, ["Si", "Si"], [[0, 0, 0], [0.25, 0.25, 0.25]] + ) + restart = get_md_restart_structure.original(str(md_dir), "vasp", si_reference) + assert restart.site_properties["velocities"][0] == pytest.approx( + [0.40252568e-03, -0.31480439e-02, -0.16045943e-02] + ) + assert "magmom" not in restart.site_properties + + Path("vasp").mkdir() + structure = cu_supercell.copy(site_properties={"velocities": velocities}) + structure.to(filename="vasp/CONTCAR", fmt="poscar") + restart = get_md_restart_structure.original( + str(Path("vasp").resolve()), "vasp", reference + ) + assert np.allclose(restart.site_properties["velocities"], velocities, atol=1e-8) + assert restart.site_properties["magmom"] == [1.0] * 32 + + Path("ase").mkdir() + atoms = AseAtomsAdaptor.get_atoms(cu_supercell) + atoms.set_velocities(velocities) + ase_write(Path("ase") / ASE_TRAJECTORY_FILE, [atoms.copy(), atoms]) + restart = get_md_restart_structure.original( + str(Path("ase").resolve()), "forcefields", reference + ) + assert np.allclose(restart.site_properties["velocities"], velocities) + assert np.allclose(restart.cart_coords, cu_supercell.cart_coords) + assert restart.site_properties["magmom"] == [1.0] * 32 + + with pytest.raises(ValueError, match="MD code must be"): + get_md_restart_structure.original("ase", "lammps", reference) + + +def test_get_rms_displacement(): + """An Einstein crystal has = 3 k_B T / k per atom.""" + structure = AseAtomsAdaptor.get_structure(bulk("Cu", "fcc", a=3.61, cubic=True)) + phonon = Phonopy(get_phonopy_structure(structure), np.diag([2, 2, 2])) + n_atoms = len(phonon.supercell) + spring = 2.0 # eV/A^2 + force_constants = np.zeros((n_atoms, n_atoms, 3, 3)) + force_constants[np.arange(n_atoms), np.arange(n_atoms)] = spring * np.eye(3) + phonon.force_constants = force_constants + rms = _get_rms_displacement(phonon, TEMPERATURE, 0.1) + assert rms == pytest.approx(np.sqrt(3 * units.kB * TEMPERATURE / spring)) + + +def test_rms_displacement_matches_mode_sampling(): + """Canonical mode sampling of Cu3Au gives the rms of the force constants. + + Each sample gets a random translation. Removing the displacement of the + center of mass takes it out again. The unweighted mean of the displacements + is not zero for two species, so it would not. + """ + structure = Structure( + Lattice.cubic(3.75), + ["Cu", "Cu", "Cu", "Au"], + [[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0], [0, 0, 0]], + ) + phonon = _emt_phonon(structure, np.diag([2, 2, 2])) + masses = np.repeat(phonon.supercell.masses, 3) + n_atoms = len(phonon.supercell) + dynmat = phonon.force_constants.transpose(0, 2, 1, 3).reshape( + 3 * n_atoms, 3 * n_atoms + ) / np.sqrt(np.outer(masses, masses)) + eigvals, eigvecs = np.linalg.eigh((dynmat + dynmat.T) / 2) + keep = eigvals > 1e-6 + + rng = np.random.default_rng(6) + n_samples = 4000 + amplitudes = rng.normal(size=(n_samples, keep.sum())) * np.sqrt( + units.kB * TEMPERATURE / eigvals[keep] + ) + disps = (amplitudes @ eigvecs[:, keep].T / np.sqrt(masses)).reshape( + n_samples, n_atoms, 3 + ) + disps += rng.normal(0, 0.1, size=(n_samples, 1, 3)) + + reference = get_pmg_structure(phonon.supercell) + removed = _remove_center_of_mass(disps, reference) + rms = np.sqrt(np.mean(np.sum(removed**2, axis=2))) + assert rms == pytest.approx( + _get_rms_displacement(phonon, TEMPERATURE, 0.1), rel=0.02 + ) + unweighted = disps - disps.mean(axis=1, keepdims=True) + assert not np.allclose(unweighted, removed, atol=1e-3) + + +@pytest.mark.parametrize( + ("kwargs", "match"), + [ + ({"thermostat": "berendsen"}, "thermostat must be one of"), + ({"rotational_sum_rule": "X"}, "rotational_sum_rule must be one of"), + ({"md_runs": 0}, "md_runs must be a positive integer"), + ({"n_snapshots": 2.5}, "n_snapshots must be a positive integer"), + ({"alpha_min": -2}, "alpha_min must be an integer below -2"), + ({"alpha_min": -6.0}, "alpha_min must be an integer below -2"), + ({"md_time_step": 0}, "must be positive"), + ({"equilibration_time": 8.0}, "fewer than the 50 snapshots"), + ({"equilibration_time": -1.0}, "fewer than the 50 snapshots"), + ( + {"md_time": 0.01, "equilibration_time": 0, "n_snapshots": 5, "md_runs": 20}, + "larger than the 10", + ), + ({"md_maker": None}, "md_maker and phonon_displacement_maker must be set"), + ({"code": "aims"}, "code must be one of"), + ({"md_code": None}, "md_code must be one of"), + ], +) +def test_maker_checks(kwargs, match): + with pytest.raises(ValueError, match=match): + ForceFieldFiniteTemperaturePhononMaker(**kwargs) + + +def test_force_field_md_maker(cu_supercell): + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT_CALCULATOR, + md_time=1.0, + md_time_step=2.0, + equilibration_time=0.5, + md_runs=3, + random_seed=5, + ) + assert maker.get_md_steps() == [167, 167, 166] + md_maker = maker.get_md_maker(167) + assert md_maker.n_steps == 167 + assert md_maker.time_step == 2.0 + assert md_maker.temperature == TEMPERATURE + assert md_maker.mb_velocity_seed == 5 + assert md_maker.dynamics == "nose-hoover-chain" + assert md_maker.ase_md_kwargs["tchain"] == 1 + # a thermostat period of 40 steps, 80 fs + period = np.pi * np.sqrt(2) * md_maker.ase_md_kwargs["tdamp"] / units.fs + assert period == pytest.approx(80.0) + # the maker of the flow is not changed + assert maker.md_maker.n_steps == 1000 + assert maker.md_maker.dynamics is None + # the force field relaxation keeps the symmetry + assert maker.bulk_relax_maker.fix_symmetry + assert ForceFieldFiniteTemperaturePhononMaker().bulk_relax_maker.fix_symmetry + + # the MD jobs have a number only when there are several + flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) + md_names = [job.name for job in flow.jobs if "MD" in job.name] + assert md_names == ["ASE MD 1/3", "ASE MD 2/3", "ASE MD 3/3"] + maker = ForceFieldFiniteTemperaturePhononMaker(md_time=2.0) + flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) + assert [job.name for job in flow.jobs if "MD" in job.name] == ["ASE MD"] + + langevin = ForceFieldFiniteTemperaturePhononMaker( + thermostat="langevin" + ).get_md_maker(10) + # AseMDMaker sets its default friction when the job runs + assert langevin.dynamics == "langevin" + assert langevin.ase_md_kwargs == {} + + maker = ForceFieldFiniteTemperaturePhononMaker( + md_maker=ForceFieldMDMaker(ase_md_kwargs={"tdamp": 10}) + ) + with pytest.raises(ValueError, match="must not set dynamics or ase_md_kwargs"): + maker.get_md_maker(10) + with pytest.raises(TypeError, match="must be a ForceFieldMDMaker"): + _get_force_field_md_maker( + ForceFieldFiniteTemperaturePhononMaker(md_maker=ForceFieldStaticMaker()), 10 + ) + + +def _commensurate_frequencies(phonon): + matrix = np.linalg.inv(phonon.primitive_matrix) @ phonon.supercell_matrix + phonon.run_qpoints(get_commensurate_points(np.rint(matrix).astype(int))) + return np.sort(phonon.qpoints.frequencies.ravel()) + + +def _emt_phonon(structure, supercell_matrix): + """0 K phonopy object of EMT, with its force constants.""" + phonon = Phonopy( + get_phonopy_structure(structure), supercell_matrix, primitive_matrix="auto" + ) + phonon.generate_displacements(distance=0.01) + forces = [] + for cell in phonon.supercells_with_displacements: + atoms = AseAtomsAdaptor.get_atoms(get_pmg_structure(cell)) + atoms.calc = emt.EMT() + forces.append(atoms.get_forces()) + phonon.forces = forces + phonon.produce_force_constants() + return phonon + + +def test_fit_recovers_harmonic_force_constants(): + """Forces from known force constants give them back, with the NAC applied.""" + structure = Structure( + Lattice.cubic(3.75), + ["Cu", "Cu", "Cu", "Au"], + [[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0], [0, 0, 0]], + ) + supercell_matrix = np.diag([2, 2, 2]).tolist() + phonon = _emt_phonon(structure, supercell_matrix) + supercell = get_pmg_structure(phonon.supercell) + disps = np.random.default_rng(0).normal(0, 0.03, (20, len(supercell), 3)) + forces = -np.einsum("ijab,mjb->mia", phonon.force_constants, disps) + snapshots = [ + Structure( + supercell.lattice, + supercell.species, + supercell.cart_coords + disp, + coords_are_cartesian=True, + ) + for disp in disps + ] + displacement_data = { + "forces": [*forces, np.zeros((len(supercell), 3))], + "displaced_structures": [*snapshots, supercell], + "uuids": ["uuid"] * 21, + "dirs": ["dir"] * 21, + } + snapshot_data = { + "snapshot_times": [0.0] * 20, + "md_time": 1.0, + "rms_displacement": 0.05, + "trajectory_health": {}, + } + born = [np.eye(3).tolist()] * 3 + [(-3 * np.eye(3)).tolist()] + fit_kwargs = { + "structure": structure, + "supercell_matrix": supercell_matrix, + "snapshot_data": snapshot_data, + "displacement_data": displacement_data, + "temperature": TEMPERATURE, + "thermostat": "nose-hoover", + "md_time_step": 1.0, + "equilibration_time": 0.5, + "code": "forcefields", + "md_code": "forcefields", + "symprec": 1e-3, + "rotational_sum_rule": None, + "epsilon_static": (10 * np.eye(3)).tolist(), + "npoints_band": 11, + } + doc = fit_finite_temperature_phonons.original(born=born, **fit_kwargs) + assert doc.force_rmse < 0.01 * np.sqrt(np.mean(forces**2)) + force_constants = np.array(doc.force_constants.force_constants) + assert np.abs(force_constants - phonon.force_constants).max() < 0.05 + assert np.array(doc.born).shape == (4, 3, 3) + assert doc.phonon_bandstructure.has_nac + assert not doc.has_imaginary_modes + assert doc.uuids.displacements_uuids == ["uuid"] * 21 + assert doc.jobdirs.displacements_job_dirs == ["dir"] * 21 + + # the Born charges are checked before pheasy runs + fc_time = Path("FORCE_CONSTANTS").stat().st_mtime_ns + with pytest.raises(ValueError, match="number of Born charges"): + fit_finite_temperature_phonons.original(born=born[:3], **fit_kwargs) + assert Path("FORCE_CONSTANTS").stat().st_mtime_ns == fc_time + + with pytest.raises(ValueError, match="diagonal supercell matrix"): + fit_finite_temperature_phonons.original( + **{**fit_kwargs, "supercell_matrix": [[1, 1, 0], [0, 1, 0], [0, 0, 1]]} + ) + with pytest.raises(ValueError, match="snapshots followed by the undisplaced"): + fit_finite_temperature_phonons.original( + **{**fit_kwargs, "snapshot_data": {"snapshot_times": [0.0] * 19}} + ) + shuffled = { + **displacement_data, + "displaced_structures": [supercell, *snapshots], + } + with pytest.raises(ValueError, match="not the undisplaced supercell"): + fit_finite_temperature_phonons.original( + **{**fit_kwargs, "displacement_data": shuffled} + ) + + +def test_finite_temperature_phonon_maker_emt(clean_dir): + """Run the whole force field workflow with EMT on L1_2 Cu3Au at 300 K.""" + # Au first, so that sorting the atoms by electronegativity reorders them + structure = Structure( + Lattice.cubic(3.75), + ["Au", "Cu", "Cu", "Cu"], + [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], + ) + # a 2x2x2 supercell of the cubic cell, 32 atoms, and 2 ps of MD at 2 fs in + # two MD jobs + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT_CALCULATOR, + min_length=7.0, + md_time=2.0, + md_time_step=2.0, + md_runs=2, + equilibration_time=0.5, + n_snapshots=12, + ) + flow = maker.make(structure) + responses = run_locally(flow, create_folders=True, ensure_success=True) + doc = responses[flow.output.uuid][1].output + + assert [str(site.specie) for site in doc.structure] == ["Cu", "Cu", "Cu", "Au"] + assert doc.temperature == TEMPERATURE + assert doc.thermostat == "nose-hoover" + assert doc.md_code == doc.code == "forcefields" + assert doc.md_force_field_name == doc.force_field_name == "ase.calculators.emt.EMT" + assert doc.force_field_kwargs == {} + # 1000 steps and the starting structure + assert doc.md_time == pytest.approx(2.002) + assert doc.n_snapshots == 12 + assert len(doc.snapshot_times) == 12 + assert min(doc.snapshot_times) == pytest.approx(0.5) + assert len(doc.md_uuids) == len(doc.md_dirs) == 2 + assert len(doc.uuids.displacements_uuids) == 13 + assert doc.uuids.optimization_run_uuid is not None + assert doc.uuids.born_run_uuid is None + assert doc.supercell_matrix == ((2, 0, 0), (0, 2, 0), (0, 0, 2)) + assert doc.trajectory_health.verdict == "stable" + assert doc.max_residual_force < 1e-8 + assert 0 < doc.force_rmse < 0.2 + assert doc.lasso_alpha > 0 + # Cu3Au is stable at 300 K + assert not doc.has_imaginary_modes + assert doc.n_imaginary_modes == 0 + assert doc.min_frequency > -0.1 + # the snapshot amplitude agrees with the one of the fitted force constants + assert doc.rms_displacement == pytest.approx( + doc.rms_displacement_from_force_constants, rel=0.25 + ) + force_constants = np.array(doc.force_constants.force_constants) + assert force_constants.shape == (32, 32, 3, 3) + fit_dir = Path(doc.jobdirs.taskdoc_run_job_dir) + for name in ("FORCE_CONSTANTS", "phonopy.yaml", "pheasy_harmonic_fit.log"): + assert (fit_dir / name).exists() + + # at a fixed volume, the frequencies stay close to the 0 K ones of EMT + phonon = _emt_phonon(doc.structure, np.array(doc.supercell_matrix)) + freqs_0k = _commensurate_frequencies(phonon) + phonon.force_constants = force_constants + freqs = _commensurate_frequencies(phonon) + top = len(freqs) // 3 + assert freqs[-top:].mean() == pytest.approx(freqs_0k[-top:].mean(), rel=0.15) diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py index 6bb45d0b0f..4a5cecb565 100644 --- a/tests/common/jobs/test_pheasy.py +++ b/tests/common/jobs/test_pheasy.py @@ -21,6 +21,7 @@ from atomate2.common.jobs.pheasy import ( _check_lasso_alpha, _get_num_anharmonic_supercells, + _run_harmonic_fit, generate_frequencies_eigenvectors, generate_phonon_displacements, ) @@ -260,17 +261,57 @@ def test_get_num_anharmonic_supercells(monkeypatch): _get_num_anharmonic_supercells(num_disp_anhar=0, **kwargs) +def test_run_harmonic_fit(monkeypatch): + """The fit flags of the pheasy workflow and the finite-temperature fit.""" + calls = [] + + def fake_run(args, check): + calls.append((args, check)) + + monkeypatch.setattr(pheasy_jobs.subprocess, "run", fake_run) + matrix = np.diag([2, 3, 4]) + + _run_harmonic_fit(matrix, 1e-3, 5) + assert [args[:4] for args, _ in calls] == [["pheasy", "--dim", "2", "3"]] * 4 + assert all(check for _, check in calls) + assert [args[9] for args, _ in calls] == ["-s", "-c", "-d", "-f"] + fit = " ".join(calls[-1][0]) + assert "-l LASSO --std --seed 103 --rasr BHH --ndata 5" in fit + assert "--alpha_min" not in fit + assert " -o " not in fit + + calls.clear() + _run_harmonic_fit(matrix, 1e-3, 3, use_lasso=False) + fit = " ".join(calls[-1][0]) + assert "-f --full_ifc --rasr BHH --ndata 3" in fit + for flag in ("-l", "--std", "--seed"): + assert flag not in calls[-1][0] + + calls.clear() + _run_harmonic_fit( + matrix, 1e-3, 5, rotational_sum_rule=None, alpha_min=-8, log_file="x.log" + ) + fit = " ".join(calls[-1][0]) + assert "--alpha_min -8 --seed 103 --ndata 5" in fit + assert fit.endswith("-o x.log") + assert "--rasr" not in fit + + def test_check_lasso_alpha(tmp_dir): log_file = Path("pheasy_anharmonic_fit.log") log_file.write_text("- alpha_min: 1e-12\n- alpha_opt: 2.947052e-09\n") with warnings.catch_warnings(): warnings.simplefilter("error") - _check_lasso_alpha(log_file, alpha_min=-12) + assert _check_lasso_alpha(log_file, alpha_min=-12) == pytest.approx( + 2.947052e-09 + ) log_file.write_text("- alpha_min: 1e-12\n- alpha_opt: 1.000000e-12\n") - with pytest.warns(UserWarning, match="on the lower bound"): + with pytest.warns(UserWarning, match="on the lower bound.*anhar_alpha_min"): _check_lasso_alpha(log_file, alpha_min=-12) + with pytest.warns(UserWarning, match="Lower alpha_min and refit"): + _check_lasso_alpha(log_file, alpha_min=-12, alpha_min_name="alpha_min") log_file.write_text("- alpha_max: 1e-2\n- alpha_opt: 1.000000e-02\n") with pytest.warns(UserWarning, match="on the upper bound"): diff --git a/tests/vasp/flows/test_finite_temperature_phonons.py b/tests/vasp/flows/test_finite_temperature_phonons.py new file mode 100644 index 0000000000..b29e691af6 --- /dev/null +++ b/tests/vasp/flows/test_finite_temperature_phonons.py @@ -0,0 +1,248 @@ +import pytest +from jobflow import Flow, OutputReference +from pymatgen.core import Lattice, Structure + +from atomate2.forcefields.flows.finite_temperature_phonons import ( + MLFFMDVaspStaticFiniteTemperaturePhononMaker, + VaspMDMLFFStaticFiniteTemperaturePhononMaker, +) +from atomate2.forcefields.jobs import ForceFieldStaticMaker +from atomate2.forcefields.md import ForceFieldMDMaker +from atomate2.vasp.flows.finite_temperature_phonons import FiniteTemperaturePhononMaker +from atomate2.vasp.jobs.core import StaticMaker +from atomate2.vasp.jobs.md import MDMaker +from atomate2.vasp.sets.core import LangevinMDSetGenerator, MDSetGenerator + + +@pytest.fixture +def nio_supercell(): + """A 3x3x3 supercell of rock-salt NiO, which gets +U in VASP.""" + structure = Structure( + Lattice.cubic(4.17), ["Ni", "O"], [[0, 0, 0], [0.5, 0.5, 0.5]] + ) + return structure * (3, 3, 3) + + +@pytest.mark.parametrize( + ("maker_cls", "md_code", "code"), + [ + (FiniteTemperaturePhononMaker, "vasp", "vasp"), + (VaspMDMLFFStaticFiniteTemperaturePhononMaker, "vasp", "forcefields"), + (MLFFMDVaspStaticFiniteTemperaturePhononMaker, "forcefields", "vasp"), + ], +) +def test_vasp_flows(si_structure, maker_cls, md_code, code): + maker = maker_cls(md_runs=2) + assert (maker.md_code, maker.code) == (md_code, code) + flow = maker.make(si_structure) + names = [job.name for job in flow.jobs] + # the Born charges are computed when the statics use VASP, as in the + # pheasy phonon workflows + born_names = ["dielectric"] if code == "vasp" else [] + md_names = ["molecular dynamics" if md_code == "vasp" else "ASE MD"] * 2 + assert names == [ + "double relax", + "get_supercell_size", + *born_names, + "get_md_supercell", + f"{md_names[0]} 1/2", + "get_md_restart_structure", + f"{md_names[1]} 2/2", + "select_md_snapshots", + "run_phonon_displacements", + "fit_finite_temperature_phonons", + ] + relax = flow.jobs[0] + reference, md_1, restart, md_2, snapshots, statics, fit = flow.jobs[-7:] + assert isinstance(relax, Flow) + + # a diagonal supercell + supercell = flow.jobs[1] + assert supercell.function_args[1:] == (12.0, None) + assert supercell.function_kwargs["force_diagonal"] + + # the first MD starts from the undisplaced supercell, the second from the + # end of the first, and both get the relaxation directory + assert md_1.function_args[0].uuid == reference.uuid + assert md_2.function_args[0].uuid == restart.uuid + assert restart.function_args == (md_1.output.dir_name, md_code, reference.output) + for md_job in (md_1, md_2): + assert md_job.function_kwargs["prev_dir"].uuid == relax.output.uuid + assert maker.get_md_steps() == [4000, 4000] + + args = snapshots.function_args + assert [ref.uuid for ref in args[0]] == [md_1.uuid, md_2.uuid] + assert args[1:] == (md_code, reference.output, 300.0, 1.0, 1.0, 50) + + # the statics get the snapshots followed by the undisplaced supercell, and + # only VASP statics get the relaxation directory + static_kwargs = statics.function_kwargs + assert static_kwargs["displacements"].uuid == snapshots.uuid + assert static_kwargs["prev_dir"].uuid == relax.output.uuid + assert static_kwargs["prev_dir_argname"] == ("prev_dir" if code == "vasp" else None) + assert static_kwargs["phonon_maker"] == maker.phonon_displacement_maker + + fit_kwargs = fit.function_kwargs + assert fit_kwargs["md_code"] == md_code + assert fit_kwargs["code"] == code + assert fit_kwargs["md_uuids"] == [md_1.uuid, md_2.uuid] + assert fit_kwargs["displacement_data"].uuid == statics.uuid + assert fit_kwargs["optimization_run_uuid"] == relax.output.uuid + assert fit_kwargs["rotational_sum_rule"] == "BHH" + assert fit_kwargs["alpha_min"] == -6 + if code == "forcefields": + assert fit_kwargs["force_field_name"] == "MACE-MP-0" + assert fit_kwargs["force_field_kwargs"] == {"model": "medium"} + assert fit_kwargs["md_force_field_name"] is None + else: + assert fit_kwargs["force_field_name"] is None + if md_code == "forcefields": + assert fit_kwargs["md_force_field_name"] == "MACE-MP-0" + if code == "vasp": + born = flow.jobs[2] + assert fit_kwargs["born"].uuid == born.uuid + assert fit_kwargs["epsilon_static"].uuid == born.uuid + assert fit_kwargs["born_run_uuid"] == born.uuid + assert born.function_kwargs["prev_dir"].uuid == relax.output.uuid + else: + assert fit_kwargs["born"] is None + assert fit_kwargs["born_run_uuid"] is None + assert fit.output.uuid == flow.output.uuid + + +def test_flow_from_output_reference(): + """The structure can be the output of an earlier job.""" + structure = OutputReference("1234", attributes=(("a", "structure"),)) + flow = FiniteTemperaturePhononMaker().make(structure) + assert flow.jobs[0].name == "double relax" + assert [job.name for job in flow.jobs][4] == "molecular dynamics" + + +def test_non_diagonal_supercell_matrix(si_structure): + with pytest.raises(ValueError, match="diagonal supercell matrix"): + FiniteTemperaturePhononMaker().make( + si_structure, supercell_matrix=[[1, 1, 0], [0, 1, 0], [0, 0, 1]] + ) + + +def test_relax_md_and_static_settings_match(nio_supercell, test_dir): + """The relaxation, the MD and the statics must see the same Hamiltonian.""" + maker = FiniteTemperaturePhononMaker(md_time=4.0, md_time_step=0.5) + md_generator = maker.get_md_maker(maker.get_md_steps()[0]).input_set_generator + static_generator = maker.phonon_displacement_maker.input_set_generator + relax_generator = maker.bulk_relax_maker.relax_maker1.input_set_generator + # alternating magnetic moments on Ni, as carried over from a relaxation + magmoms = [2.0, -2.0] * 13 + [2.0] + [0.0] * 27 + magnetic = nio_supercell.copy(site_properties={"magmom": magmoms}) + sets = { + "md": md_generator.get_input_set(magnetic, potcar_spec=True), + "static": static_generator.get_input_set(magnetic, potcar_spec=True), + "relax": relax_generator.get_input_set(magnetic, potcar_spec=True), + } + for key in ("GGA", "ISPIN", "MAGMOM", "LDAU", "LDAUU", "LDAUL", "ISMEAR", "SIGMA"): + values = {name: input_set.incar.get(key) for name, input_set in sets.items()} + assert values["md"] == values["static"] == values["relax"], key + assert sets["md"].incar["GGA"] == "Ps" + assert sets["md"].incar["LDAUU"] == [6.2, 0] + assert sets["md"].incar["MAGMOM"] == magmoms + assert sets["md"].kpoints.kpts == sets["static"].kpoints.kpts + assert sets["relax"].kpoints.kpts == sets["static"].kpoints.kpts + for key in ("ENCUT", "ENAUG", "PREC"): + assert sets["relax"].incar[key] == sets["static"].incar[key], key + + # 4 ps at 0.5 fs, every step written to XDATCAR + md_incar, static_incar = sets["md"].incar, sets["static"].incar + assert md_incar["NSW"] == 8000 + assert md_incar["POTIM"] == 0.5 + assert md_incar["NBLOCK"] == 1 + assert md_incar["TEBEG"] == md_incar["TEEND"] == 300 + assert (md_incar["IBRION"], md_incar["ISIF"]) == (0, 2) + assert (md_incar["MDALGO"], md_incar["SMASS"]) == (2, 0) + assert md_incar["ENCUT"] == 500 + assert static_incar["ENCUT"] == 600 + assert static_incar["EDIFF"] == 1e-7 + assert static_incar["NSW"] == 0 + + # the same holds after a previous calculation sets the spin + si = Structure.from_file(test_dir / "structures" / "Si.cif") * (3, 3, 3) + prev_dir = test_dir / "vasp" / "Si_pheasy" / "tight_relax_2" / "outputs" + prev_sets = { + name: generator.get_input_set(si, prev_dir=prev_dir, potcar_spec=True) + for name, generator in ( + ("md", md_generator), + ("static", static_generator), + ("relax", relax_generator), + ) + } + for key in ("ISPIN", "MAGMOM", "ISMEAR", "SIGMA"): + assert prev_sets["md"].incar.get(key) == prev_sets["static"].incar.get(key) + assert prev_sets["md"].kpoints.kpts == prev_sets["static"].kpoints.kpts + assert prev_sets["relax"].kpoints.kpts == prev_sets["static"].kpoints.kpts + + +def test_langevin_thermostat(nio_supercell): + maker = FiniteTemperaturePhononMaker(thermostat="langevin", temperature=600) + md_maker = maker.get_md_maker(100) + assert isinstance(md_maker.input_set_generator, LangevinMDSetGenerator) + incar = md_maker.input_set_generator.get_input_set( + nio_supercell, potcar_spec=True + ).incar + assert incar["MDALGO"] == 3 + assert incar["LANGEVIN_GAMMA"] == [10.0, 10.0] + assert incar["TEBEG"] == incar["TEEND"] == 600 + assert incar["ENCUT"] == 500 + # the maker of the flow is not changed + assert type(maker.md_maker.input_set_generator) is MDSetGenerator + + # a Langevin MD maker needs the Langevin thermostat + maker = FiniteTemperaturePhononMaker(md_maker=md_maker) + with pytest.raises(ValueError, match="Set thermostat to 'langevin'"): + maker.get_md_maker(100) + maker = FiniteTemperaturePhononMaker(md_maker=md_maker, thermostat="langevin") + assert maker.get_md_maker(100).input_set_generator.nsteps == 100 + + +def test_md_maker_checks(): + maker = FiniteTemperaturePhononMaker( + md_maker=MDMaker( + input_set_generator=MDSetGenerator(user_incar_settings={"POTIM": 2}) + ) + ) + with pytest.raises(ValueError, match=r"The flow sets \['POTIM'\]"): + maker.get_md_maker(10) + + maker = FiniteTemperaturePhononMaker( + md_maker=MDMaker( + input_set_generator=MDSetGenerator(user_incar_settings={"NBLOCK": 10}) + ) + ) + with pytest.raises(ValueError, match="NBLOCK must be 1"): + maker.get_md_maker(10) + + with pytest.raises(TypeError, match="VASP MDMaker with an MDSetGenerator"): + FiniteTemperaturePhononMaker(md_maker=StaticMaker()).get_md_maker(10) + + +def test_from_force_field_name(): + maker = VaspMDMLFFStaticFiniteTemperaturePhononMaker.from_force_field_name( + "MACE-MP-0", + calculator_kwargs={"model": "medium-omat-0"}, + temperature=500.0, + phonon_displacement_maker=StaticMaker(), + ) + assert maker.name == ("VASP MD MACE_MP_0 Static Finite Temperature Phonon Maker") + assert maker.temperature == 500.0 + assert isinstance(maker.md_maker, MDMaker) + # the maker built for the force field replaces the one given + displacement_maker = maker.phonon_displacement_maker + assert isinstance(displacement_maker, ForceFieldStaticMaker) + assert displacement_maker.calculator_kwargs["model"] == "medium-omat-0" + assert maker.born_maker is None + + maker = MLFFMDVaspStaticFiniteTemperaturePhononMaker.from_force_field_name( + "MACE-MP-0" + ) + assert maker.name == "MACE_MP_0 MD VASP Static Finite Temperature Phonon Maker" + assert isinstance(maker.md_maker, ForceFieldMDMaker) + assert (maker.md_code, maker.code) == ("forcefields", "vasp") + assert type(maker.born_maker).__name__ == "DielectricMaker" diff --git a/tests/vasp/test_sets.py b/tests/vasp/test_sets.py index 483ee027c6..bce3610021 100644 --- a/tests/vasp/test_sets.py +++ b/tests/vasp/test_sets.py @@ -9,6 +9,7 @@ HSERelaxSetGenerator, HSEStaticSetGenerator, HSETightRelaxSetGenerator, + LangevinMDSetGenerator, LobsterTightStaticSetGenerator, MDSetGenerator, NonSCFSetGenerator, @@ -337,3 +338,24 @@ def test_md_set_generator_sorts_structure(): n_types_in_poscar = len(vasp_input["POSCAR"].natoms) n_langevin_gamma = len(vasp_input["INCAR"]["LANGEVIN_GAMMA"]) assert n_types_in_poscar == n_langevin_gamma + + +def test_langevin_md_set_generator(): + """LANGEVIN_GAMMA has one value for each species block of the POSCAR.""" + structure = Structure( + lattice=Lattice.cubic(10), + species=["Al", "Cl", "Al", "Cl", "O", "Li"], + coords=[[0.1 * i, 0.1 * i, 0.1 * i] for i in range(6)], + ) + input_gen = LangevinMDSetGenerator(start_temp=600, end_temp=600, langevin_gamma=5) + vasp_input = input_gen.get_input_set(structure, potcar_spec=True) + incar = vasp_input["INCAR"] + assert incar["MDALGO"] == 3 + assert incar["LANGEVIN_GAMMA"] == [5] * len(vasp_input["POSCAR"].natoms) + assert incar["TEBEG"] == incar["TEEND"] == 600 + assert "SMASS" not in incar + + with pytest.raises(ValueError, match="Expect ensemble='nvt'"): + LangevinMDSetGenerator(ensemble="npt").get_input_set( + structure, potcar_spec=True + ) From caa65ef0cb568e5e0bac700944b01bf2e281c870 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Wed, 30 Sep 2026 09:52:29 -0700 Subject: [PATCH 08/43] Allow force field jobs without torch installed --- src/atomate2/forcefields/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/atomate2/forcefields/utils.py b/src/atomate2/forcefields/utils.py index d6388d845a..2cd486e43e 100644 --- a/src/atomate2/forcefields/utils.py +++ b/src/atomate2/forcefields/utils.py @@ -496,7 +496,12 @@ def revert_default_dtype() -> Generator[None]: Originally added for use with MACE(Relax|Static)Maker. https://github.com/ACEsuit/mace/issues/328 """ - import torch + try: + import torch + except ImportError: + # force fields that do not use torch, such as EMT, have no dtype to revert + yield + return orig = torch.get_default_dtype() yield From 50d1eec372f1a57d4ca2a8e7b67f9d39e77a8f6f Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:17:08 -0700 Subject: [PATCH 09/43] Update the harmonic fit test for the --scell option --- tests/common/jobs/test_pheasy.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py index 4a5cecb565..0dc02c8a66 100644 --- a/tests/common/jobs/test_pheasy.py +++ b/tests/common/jobs/test_pheasy.py @@ -272,9 +272,11 @@ def fake_run(args, check): matrix = np.diag([2, 3, 4]) _run_harmonic_fit(matrix, 1e-3, 5) - assert [args[:4] for args, _ in calls] == [["pheasy", "--dim", "2", "3"]] * 4 + assert [args[:6] for args, _ in calls] == [ + ["pheasy", "--scell", "SPOSCAR", "--dim", "2", "3"] + ] * 4 assert all(check for _, check in calls) - assert [args[9] for args, _ in calls] == ["-s", "-c", "-d", "-f"] + assert [args[11] for args, _ in calls] == ["-s", "-c", "-d", "-f"] fit = " ".join(calls[-1][0]) assert "-l LASSO --std --seed 103 --rasr BHH --ndata 5" in fit assert "--alpha_min" not in fit From 5420d29a2a6dcc7bf311974a72883c25f43fae12 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Thu, 1 Oct 2026 06:14:22 -0700 Subject: [PATCH 10/43] Pin pheasy to the commit with the faster sensing matrix --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7d9110d588..8cfc833508 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ mp = ["mp-api>=0.37.5"] phonons = ["phonopy>=2.43,<5", "seekpath>=2.0.0"] # the pheasy fork adds the --disp_matrix_file and --force_matrix_file options # and fixes the --scell option -pheasy = ["atomate2[phonons,alamode]", "hiphive==1.5", "numpy<=2.2", "pheasy @ git+https://gitlab.com/hpsahasrabuddhe/pheasy.git@1728f16642d5f2763f27695cd29ffada0f755d7f"] +pheasy = ["atomate2[phonons,alamode]", "hiphive==1.5", "numpy<=2.2", "pheasy @ git+https://gitlab.com/hpsahasrabuddhe/pheasy.git@9f24162a4ed0f0ab8911d382fd2617944aade55d"] alamode = ["alm @ git+https://github.com/ttadano/ALM.git@f1d668fdee66e7e7218a04c88daf19d0e14fce0c#subdirectory=python"] hiphive = ["hiphive==1.5", "trainstation>=1.0", "atomate2[phonons,alamode]"] lobster = ["ijson>=3.2.2", "lobsterpy>=0.6.0"] From f7d7c5281bacd56e3cbdcaa5a4f0a1631fb5ef63 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:09:13 -0700 Subject: [PATCH 11/43] Converge the anharmonic LASSO fit with --tol 1e-8 --- src/atomate2/common/jobs/pheasy.py | 6 ++++-- tests/common/jobs/test_pheasy.py | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index c9f588f78a..e55be1c781 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -421,10 +421,12 @@ def _run_anharmonic_fit( f"--disp_matrix_file {_DEFAULT_FILE_PATHS['anharmonic_displacements']}" ), # LASSO fit. OLS, pheasy's default, gives dense force constants. - # --std and --rasr are not passed to the anharmonic fit. + # --std and --rasr are not passed to the anharmonic fit. With pheasy's + # default --tol of 1e-4 the fits at small penalties do not converge, and + # the penalty chosen by cross-validation can change between machines. ( f"{base} -f {fix_fc2}-l LASSO --alpha_min {anhar_alpha_min} {seed}" - f"--ndata {int(num_anhar)} --hdf5 " + f"--tol 1e-8 --ndata {int(num_anhar)} --hdf5 " f"--force_matrix_file {_DEFAULT_FILE_PATHS['anharmonic_force_matrix']} " f"-o {log_file}" ), diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py index 0dc02c8a66..e91fad382e 100644 --- a/tests/common/jobs/test_pheasy.py +++ b/tests/common/jobs/test_pheasy.py @@ -350,9 +350,13 @@ def test_anharmonic_fit_cocktail_and_one_shot(tmp_dir): # 20, then the undisplaced supercell assert len(displacements) == 1 + 20 + 1 + # the converged cocktail fit picks a penalty of about 1e-12, the default + # lower bound, so the bound is lowered to keep the penalty inside the + # search. In local runs the force constants did not change with the bound. job = generate_frequencies_eigenvectors( structure=structure, displacement_data=_emt_displacement_data(displacements), + anhar_alpha_min=-14, **anhar_kwargs, **FIT_KWARGS, **COMMON_KWARGS, From e7a677cdf79489705319fa83bd7161d3cc97cb94 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Fri, 2 Oct 2026 07:29:02 -0700 Subject: [PATCH 12/43] Link the phonon database and pass get_supercell_size_kwargs to the pheasy supercell job --- docs/user/codes/vasp.md | 2 +- src/atomate2/common/flows/pheasy.py | 11 ++++++++--- src/atomate2/common/jobs/pheasy.py | 8 ++++++-- src/atomate2/vasp/flows/pheasy.py | 2 +- tests/common/jobs/test_pheasy.py | 23 +++++++++++++++++++++++ tutorials/pheasy_workflow.ipynb | 2 +- 6 files changed, 40 insertions(+), 8 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index 1e4dcfac0d..b8eddcb9c4 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -349,7 +349,7 @@ The `pheasy` extra, `pip install "atomate2[pheasy]"`, installs the pheasy versio ALM is compiled from source. If that build fails, see the ALM instructions below. By design, these workflows have the same basic structure as the harmonic forcefield workflows and use [Phonopy](https://doi.org/10.7566/JPSJ.92.012001) in part to compute the phonon spectrum. To use `Pheasy` in the previous example, we would replace the import string to `from atomate2.vasp.flows.pheasy import PhononMaker`. -This workflow was used to build the Materials Project's Harmonic Phonon Database, described in [this preprint](https://chemrxiv.org/doi/full/10.26434/chemrxiv.15004632/v1). +This workflow was used to build the [Materials Project's Harmonic Phonon Database](https://next-gen.materialsproject.org/materials?has_props=phonon), described in [this preprint](https://chemrxiv.org/doi/full/10.26434/chemrxiv.15004632/v1). The pheasy fits can fail for a cell that is not in a standard setting, for example the primitive cell of MgO (mp-1265) as the Materials Project serves it. For such a structure, set `use_symmetrized_structure="primitive"`, as was done for the database. diff --git a/src/atomate2/common/flows/pheasy.py b/src/atomate2/common/flows/pheasy.py index 158c90efab..8e3d5f64a9 100644 --- a/src/atomate2/common/flows/pheasy.py +++ b/src/atomate2/common/flows/pheasy.py @@ -6,7 +6,7 @@ from dataclasses import dataclass, field from typing import TYPE_CHECKING, Literal -from pymatgen.util.due import Doi, due +from pymatgen.util.due import Doi, Url, due from atomate2.common.flows.phonons import BasePhononMaker as PurePhonopyMaker from atomate2.common.jobs.pheasy import ( @@ -33,9 +33,13 @@ @due.dcite( - Doi("10.26434/chemrxiv.15004632/v1"), + Url("https://next-gen.materialsproject.org/materials?has_props=phonon"), description="Materials Project's Harmonic Phonon Database.", ) +@due.dcite( + Doi("10.26434/chemrxiv.15004632/v1"), + description="Preprint on the Materials Project's Harmonic Phonon Database.", +) @due.dcite( Doi("10.48550/arXiv.2508.01020"), description="Pheasy code for (an)harmonic force constants.", @@ -148,7 +152,7 @@ class BasePhononMaker(PurePhonopyMaker, ABC): if set to True, only diagonal supercell matrices are allowed. The pheasy commands take the diagonal of the supercell matrix. get_supercell_size_kwargs: dict - not used by this workflow. + kwargs that will be passed to get_supercell_size to determine supercell size use_symmetrized_structure: str allowed strings: "primitive", "conventional", None @@ -400,6 +404,7 @@ def get_supercell_matrix(self, structure: Structure) -> Job | Flow: self.max_atoms, self.force_90_degrees, self.force_diagonal, + **self.get_supercell_size_kwargs, ) @property diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index e55be1c781..580567bb2b 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -446,6 +446,7 @@ def get_supercell_size( max_atoms: int, force_90_degrees: bool, force_diagonal: bool, + **kwargs, ) -> list[list[float]]: """ Determine the supercell matrix with pymatgen's CubicSupercellTransformation. @@ -462,14 +463,17 @@ def get_supercell_size( if True, only supercells with three 90 degree angles are allowed force_diagonal: bool if True, only diagonal supercell matrices are allowed + **kwargs: + Additional parameters passed to CubicSupercellTransformation. They + override the defaults angle_tolerance=1e-2 and allow_orthorhombic=False. """ + kwargs = {"angle_tolerance": 1e-2, "allow_orthorhombic": False} | kwargs transformation = CubicSupercellTransformation( min_length=min_length, max_atoms=max_atoms, force_90_degrees=force_90_degrees, force_diagonal=force_diagonal, - angle_tolerance=1e-2, - allow_orthorhombic=False, + **kwargs, ) transformation.apply_transformation(structure=structure) return transformation.transformation_matrix.transpose().tolist() diff --git a/src/atomate2/vasp/flows/pheasy.py b/src/atomate2/vasp/flows/pheasy.py index 14a4368c4a..d934c538dd 100644 --- a/src/atomate2/vasp/flows/pheasy.py +++ b/src/atomate2/vasp/flows/pheasy.py @@ -123,7 +123,7 @@ class PhononMaker(BasePhononMaker): allow_orthorhombic: bool not used by this workflow. get_supercell_size_kwargs: dict - not used by this workflow. + kwargs that will be passed to get_supercell_size to determine supercell size use_symmetrized_structure: str allowed strings: "primitive", "conventional", None diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py index e91fad382e..f9ae158bd8 100644 --- a/tests/common/jobs/test_pheasy.py +++ b/tests/common/jobs/test_pheasy.py @@ -30,6 +30,7 @@ _get_num_irreducible_fcs, _run_band_structure_and_plot, ) +from atomate2.forcefields.flows.pheasy import PhononMaker # fcs_cutoff_radius in Bohr. 8 Bohr (4.2 A) covers the first two neighbour # shells of fcc Cu (2.55 and 3.61 A) and stays inside the 10.8 A supercell. @@ -299,6 +300,28 @@ def fake_run(args, check): assert "--rasr" not in fit +def test_get_supercell_size_kwargs(monkeypatch): + received = {} + transformation = pheasy_jobs.CubicSupercellTransformation + + def record_kwargs(**kwargs): + received.update(kwargs) + return transformation(**kwargs) + + monkeypatch.setattr(pheasy_jobs, "CubicSupercellTransformation", record_kwargs) + + # the maker passes get_supercell_size_kwargs on to the job + maker = PhononMaker(get_supercell_size_kwargs={"angle_tolerance": 0.1}) + job = maker.get_supercell_matrix(_cu_structure()) + assert job.function_kwargs == {"angle_tolerance": 0.1} + + # the job passes them to CubicSupercellTransformation. The other default + # is kept. + job.function(*job.function_args, **job.function_kwargs) + assert received["angle_tolerance"] == 0.1 + assert received["allow_orthorhombic"] is False + + def test_check_lasso_alpha(tmp_dir): log_file = Path("pheasy_anharmonic_fit.log") diff --git a/tutorials/pheasy_workflow.ipynb b/tutorials/pheasy_workflow.ipynb index 6f6742b043..91f318cd21 100644 --- a/tutorials/pheasy_workflow.ipynb +++ b/tutorials/pheasy_workflow.ipynb @@ -42,7 +42,7 @@ "\n", "The [Pheasy code](https://doi.org/10.48550/arXiv.2508.01020) extracts (an)harmonic interatomic force constants from a set of displaced supercell calculations using machine-learning (LASSO) regression. Compared to the finite-displacement approach in the standard phonon workflow, far fewer (randomly displaced) supercells are needed, which substantially reduces the number of DFT calculations.\n", "\n", - "This workflow was used to build the Materials Project's Harmonic Phonon Database, described in [this preprint](https://chemrxiv.org/doi/full/10.26434/chemrxiv.15004632/v1).\n", + "This workflow was used to build the [Materials Project's Harmonic Phonon Database](https://next-gen.materialsproject.org/materials?has_props=phonon), described in [this preprint](https://chemrxiv.org/doi/full/10.26434/chemrxiv.15004632/v1).\n", "\n", "The workflow has the same basic structure as the phonopy-based phonon workflow and uses [Phonopy](https://doi.org/10.7566/JPSJ.92.012001) to post-process the force constants into band structures, densities of states, and thermodynamic properties.\n", "\n", From d8db2f17e55cd0295de6d79a1dfae5067c434b3b Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Fri, 2 Oct 2026 08:41:34 -0700 Subject: [PATCH 13/43] Note in the docs that the anharmonic pheasy workflow is less tested --- docs/user/codes/vasp.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index b8eddcb9c4..a1944938b9 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -354,6 +354,12 @@ The pheasy fits can fail for a cell that is not in a standard setting, for examp For such a structure, set `use_symmetrized_structure="primitive"`, as was done for the database. By default, this workflow does not compute anharmonic force constants, but can be extended to using the `cal_anhar_fcs` kwarg. + +```{warning} +The anharmonic part of this workflow has not been tested as widely as the harmonic part. +It might still change in future versions. +``` + ALM, from the ALAMODE package, counts the free force constants used to size the random displacement sets. To install ALAMODE, see their [installation guidelines](https://alamode.readthedocs.io/en/latest/install.html#). From 660506fed80afb4ed81e2b8cba3464b26e9826b8 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sat, 3 Oct 2026 12:50:29 -0700 Subject: [PATCH 14/43] Converge the harmonic LASSO fit with --tol 1e-8 pheasy's default --tol of 1e-4 leaves the fit unconverged. Refits of the same data then give different force constants on different machines. --- src/atomate2/common/jobs/pheasy.py | 10 ++++++---- tests/common/jobs/test_pheasy.py | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 580567bb2b..3dcc46e6dc 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -303,8 +303,8 @@ def _run_harmonic_fit( num_har: int Number of displaced supercells in the fit. use_lasso: bool - If True, fit with LASSO on standardized data. If False, fit with - pheasy's default least squares. + If True, fit with LASSO on standardized data, converged to --tol 1e-8. + If False, fit with pheasy's default least squares. rotational_sum_rule: str | None Rotational sum rule passed to pheasy with --rasr, or None for none. alpha_min: int | None @@ -319,7 +319,9 @@ def _run_harmonic_fit( base = f"pheasy --scell SPOSCAR --dim {dim} -w 2 --symprec {float(symprec)}" fit = f"{base} -f --full_ifc" if use_lasso: - fit += " -l LASSO --std" + # pheasy's default --tol of 1e-4 leaves the fit unconverged, so the force + # constants change between machines and package versions + fit += " -l LASSO --std --tol 1e-8" if alpha_min is not None: fit += f" --alpha_min {int(alpha_min)}" if random_seed is not None: @@ -1026,7 +1028,7 @@ def generate_frequencies_eigenvectors( f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --c2 10.0 " f"--full_ifc -w 2 --symprec {float(symprec)} " - f"-l LASSO --std --rasr BHH --ndata {int(num_har)} " + f"-l LASSO --std --tol 1e-8 --rasr BHH --ndata {int(num_har)} " f"--force_matrix_file {_DEFAULT_FILE_PATHS['harmonic_force_matrix']}" ) diff --git a/tests/common/jobs/test_pheasy.py b/tests/common/jobs/test_pheasy.py index e91fad382e..056b1e47a7 100644 --- a/tests/common/jobs/test_pheasy.py +++ b/tests/common/jobs/test_pheasy.py @@ -278,7 +278,7 @@ def fake_run(args, check): assert all(check for _, check in calls) assert [args[11] for args, _ in calls] == ["-s", "-c", "-d", "-f"] fit = " ".join(calls[-1][0]) - assert "-l LASSO --std --seed 103 --rasr BHH --ndata 5" in fit + assert "-l LASSO --std --tol 1e-8 --seed 103 --rasr BHH --ndata 5" in fit assert "--alpha_min" not in fit assert " -o " not in fit @@ -286,7 +286,7 @@ def fake_run(args, check): _run_harmonic_fit(matrix, 1e-3, 3, use_lasso=False) fit = " ".join(calls[-1][0]) assert "-f --full_ifc --rasr BHH --ndata 3" in fit - for flag in ("-l", "--std", "--seed"): + for flag in ("-l", "--std", "--tol", "--seed"): assert flag not in calls[-1][0] calls.clear() From 165584427d946c2bbef239a74cc15dcf57ad7dfb Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sat, 3 Oct 2026 16:49:20 -0700 Subject: [PATCH 15/43] Add a tutorial for the finite-temperature phonon workflow --- .github/workflows/testing.yml | 2 +- tutorials/finite_temperature_phonons.ipynb | 940 +++++++++++++++++++++ tutorials/tutorials.md | 1 + 3 files changed, 942 insertions(+), 1 deletion(-) create mode 100644 tutorials/finite_temperature_phonons.ipynb diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 7405467740..7175d33825 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -303,7 +303,7 @@ jobs: MP_API_KEY: ${{ secrets.MP_API_KEY }} run: | micromamba activate a2 - pytest --durations=5 -n auto --nbmake ./tutorials --ignore=./tutorials/openmm_tutorial.ipynb --ignore=./tutorials/force_fields --ignore=./tutorials/torchsim_tutorial.ipynb --ignore=./tutorials/lammps_workflow.ipynb --ignore=./tutorials/pheasy_workflow.ipynb --ignore=./tutorials/hiphive_workflow.ipynb --ignore=./tutorials/cte_workflow.ipynb + pytest --durations=5 -n auto --nbmake ./tutorials --ignore=./tutorials/openmm_tutorial.ipynb --ignore=./tutorials/force_fields --ignore=./tutorials/torchsim_tutorial.ipynb --ignore=./tutorials/lammps_workflow.ipynb --ignore=./tutorials/pheasy_workflow.ipynb --ignore=./tutorials/hiphive_workflow.ipynb --ignore=./tutorials/cte_workflow.ipynb --ignore=./tutorials/finite_temperature_phonons.ipynb - name: Test ASE env: diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb new file mode 100644 index 0000000000..8bccb3558e --- /dev/null +++ b/tutorials/finite_temperature_phonons.ipynb @@ -0,0 +1,940 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# Finite-temperature phonons with pheasy and machine-learned potentials\n", + "\n", + "This notebook computes phonons at a finite temperature with the\n", + "`ForceFieldFiniteTemperaturePhononMaker` workflow. The forces come from three\n", + "MACE potentials, so no DFT is needed.\n", + "\n", + "Section 1 runs five materials at 100, 300, 500, 700 and 900 K. Ca3Ir4Sn13 is\n", + "worked through step by step. Section 2 tests the length of the MD and the number\n", + "of snapshots for KNaICl.\n", + "\n", + "This workflow is new. It is less tested than the other phonon workflows in\n", + "atomate2, and its defaults and output may still change." + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "## Background\n", + "\n", + "Harmonic phonons from finite displacements describe the crystal at 0 K. Many\n", + "materials have imaginary modes at 0 K. The anharmonic motion of the atoms can\n", + "stabilize these modes at higher temperature. This workflow fits effective\n", + "harmonic force constants to an MD trajectory at the temperature of interest, as\n", + "in the temperature-dependent effective potential (TDEP) method of Hellman et\n", + "al., Phys. Rev. B 84, 180301 (2011). These force constants include the\n", + "anharmonic effects at that temperature.\n", + "\n", + "The flow has these steps:\n", + "\n", + "1. The structure is relaxed. The relaxation can be switched off, as done below.\n", + "2. A diagonal supercell is built. Its lattice vectors are at least `min_length`\n", + " long, 12 Å by default. A supercell matrix can also be given.\n", + "3. An NVT MD run of the supercell at the temperature. The defaults are 8 ps with\n", + " a 1 fs time step and a Nose-Hoover thermostat.\n", + "4. The first 1 ps of the MD is left out. 50 snapshots are picked, evenly spread\n", + " over the rest of the trajectory.\n", + "5. The forces on the snapshots and on the undisplaced supercell are computed.\n", + "6. pheasy fits the second-order force constants with LASSO. The displacements\n", + " are measured from the undisplaced supercell. The forces of the undisplaced\n", + " supercell are subtracted from the forces of each snapshot.\n", + "7. The band structure and the density of states (DOS) follow from the force\n", + " constants. Imaginary modes are reported. They are not removed.\n", + "\n", + "The MD trajectory is also checked. The check looks for melting and for a move\n", + "away from the starting structure. It also looks at the drift of the potential\n", + "energy late in the run. The result is stored in the output. A warning is raised\n", + "if the check fails, but the fit is still done.\n", + "\n", + "The volume stays that of the starting structure, so thermal expansion is not\n", + "included. The same workflow runs with VASP as\n", + "`atomate2.vasp.flows.finite_temperature_phonons.FiniteTemperaturePhononMaker`.\n", + "`atomate2.forcefields.flows.finite_temperature_phonons` also has two mixed\n", + "versions. One runs the MD with VASP and the force calculations with a force\n", + "field. The other one does the reverse." + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "## Installation\n", + "\n", + "The `pheasy` and `ase` extras are needed, plus MACE and the Materials Project\n", + "client:\n", + "\n", + "```\n", + "pip install 'atomate2[pheasy,ase]'\n", + "pip install 'mace-torch>=0.3.16' mp-api\n", + "```\n", + "\n", + "The `pheasy` extra pulls in pheasy and ALM. ALM is compiled from source. The\n", + "hiPhive tutorial and the atomate2 VASP documentation list what the build needs." + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "## The potentials\n", + "\n", + "The notebook uses three MACE foundation models. All three are released under the\n", + "Academic Software License.\n", + "\n", + "- **MACE-OMAT-0-medium.** `mace_mp(model=\"medium-omat-0\")` downloads it once and\n", + " caches it under `~/.cache/mace`.\n", + "- **MACE-MATPES-PBE-0** and **MACE-MATPES-r2SCAN-0.** These are MACE-OMAT-0\n", + " fine-tuned on the MatPES data set at the PBE and r2SCAN levels. They need\n", + " `mace-torch>=0.3.10`. Download the two files from the `mace_matpes_0` release of\n", + " [mace-foundations](https://github.com/ACEsuit/mace-foundations/releases/tag/mace_matpes_0):\n", + " - [MACE-matpes-pbe-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-pbe-omat-ft.model)\n", + " - [MACE-matpes-r2scan-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-r2scan-omat-ft.model)\n", + "\n", + "Set the paths to the two downloaded files in the next cell. The Ca3Ir4Sn13\n", + "example below only needs MACE-OMAT-0-medium.\n", + "\n", + "The MD takes most of the time, so a GPU helps a lot. The next cell uses one if\n", + "PyTorch finds it. All our runs used `float64` on one NVIDIA A100 GPU of a\n", + "Perlmutter node." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import warnings\n", + "\n", + "# macOS: conda's llvm-openmp and torch's bundled libomp both load and the\n", + "# duplicate aborts the process. This must be set before torch is imported.\n", + "os.environ.setdefault(\"KMP_DUPLICATE_LIB_OK\", \"TRUE\")\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "import torch # noqa: E402\n", + "from mace.calculators import mace_mp # noqa: E402\n", + "\n", + "# Replace the two paths with the files you downloaded.\n", + "MODEL_FILES = {\n", + " \"OMAT-0-medium\": \"medium-omat-0\",\n", + " \"MATPES-PBE-0\": \"/path/to/MACE-matpes-pbe-omat-ft.model\",\n", + " \"MATPES-r2SCAN-0\": \"/path/to/MACE-matpes-r2scan-omat-ft.model\",\n", + "}\n", + "DEVICE = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "\n", + "\n", + "def calc_kwargs(model: str) -> dict:\n", + " \"\"\"Return the calculator settings for one of the models above.\"\"\"\n", + " return {\"model\": MODEL_FILES[model], \"device\": DEVICE, \"default_dtype\": \"float64\"}\n", + "\n", + "\n", + "_ = mace_mp(**calc_kwargs(\"OMAT-0-medium\")) # downloads and caches on first use" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "## One calculator for all jobs\n", + "\n", + "Every force field job builds its own calculator. `run_locally` runs all of\n", + "them in this one Python process, and the workflow has a little over 50 jobs.\n", + "Loading MACE for each of them grows the memory by about 150 MB per job. This\n", + "cell makes the jobs share one calculator. It is only needed when many jobs run\n", + "in one process, not with a workflow manager." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "from ase.calculators.calculator import Calculator\n", + "\n", + "import atomate2.forcefields.utils as ff_utils\n", + "\n", + "_ase_calculator = ff_utils.ase_calculator\n", + "_calculators: dict[str, Calculator] = {}\n", + "\n", + "\n", + "def shared_ase_calculator(calculator_meta: object, **kwargs: object) -> Calculator:\n", + " \"\"\"Build each calculator once and reuse it for every job.\"\"\"\n", + " key = repr((calculator_meta, sorted(kwargs.items())))\n", + " if key not in _calculators:\n", + " _calculators[key] = _ase_calculator(calculator_meta, **kwargs)\n", + " _calculators[key].reset()\n", + " return _calculators[key]\n", + "\n", + "\n", + "ff_utils.ase_calculator = shared_ase_calculator" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "## 1. Five materials from 100 K to 900 K\n", + "\n", + "The first part runs Ca3Ir4Sn13 at 300 K with MACE-OMAT-0-medium step by step.\n", + "The other temperatures, potentials and materials follow with the same code." + ] + }, + { + "cell_type": "markdown", + "id": "8", + "metadata": {}, + "source": [ + "## The structure\n", + "\n", + "Ca3Ir4Sn13 (mp-1200211) is cubic, with 40 atoms in the primitive cell. We start\n", + "from its PBEsol cell in the Materials Project's Harmonic Phonon Database. The\n", + "phonon documents of the Materials Project hold this cell. Set your key first with\n", + "`export MP_API_KEY=...`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9", + "metadata": {}, + "outputs": [], + "source": [ + "from mp_api.client import MPRester\n", + "from pymatgen.core import Structure\n", + "\n", + "if not os.environ.get(\"MP_API_KEY\"):\n", + " raise OSError(\"export MP_API_KEY before running this cell\")\n", + "\n", + "\n", + "def get_pheasy_structure(mp_id: str) -> Structure:\n", + " \"\"\"Get the PBEsol cell of a material in the Harmonic Phonon Database.\"\"\"\n", + " with MPRester() as mpr:\n", + " (doc,) = mpr.materials.phonon.search(\n", + " material_ids=[mp_id],\n", + " phonon_method=\"pheasy\",\n", + " fields=[\"structure\"],\n", + " num_chunks=1,\n", + " chunk_size=10,\n", + " )\n", + " return doc.structure\n", + "\n", + "\n", + "structure = get_pheasy_structure(\"mp-1200211\")\n", + "structure.lattice" + ] + }, + { + "cell_type": "markdown", + "id": "10", + "metadata": {}, + "source": [ + "## Building the workflow\n", + "\n", + "`ForceFieldFiniteTemperaturePhononMaker.from_force_field_name` sets one force\n", + "field for the relaxation, the MD and the force calculations. Any MACE model\n", + "routes through `mace_mp`, and the model name in `calculator_kwargs` selects the\n", + "weights.\n", + "\n", + "We skip the relaxation with `relax_initial_structure=False`. The cell is\n", + "already relaxed with PBEsol, and our AIMD reference below uses the same cell. If\n", + "your input cell is not properly relaxed, keep the default\n", + "`relax_initial_structure=True`. The force field then relaxes the cell before\n", + "the MD.\n", + "\n", + "We give the supercell matrix of our AIMD reference, 2x2x2 with 320 atoms.\n", + "Everything else stays at the workflow defaults." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11", + "metadata": {}, + "outputs": [], + "source": [ + "from atomate2.forcefields.flows.finite_temperature_phonons import (\n", + " ForceFieldFiniteTemperaturePhononMaker,\n", + ")\n", + "\n", + "maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(\n", + " \"MACE-MP-0\",\n", + " calculator_kwargs=calc_kwargs(\"OMAT-0-medium\"),\n", + " relax_initial_structure=False,\n", + " temperature=300,\n", + ")\n", + "flow = maker.make(structure, supercell_matrix=[[2, 0, 0], [0, 2, 0], [0, 0, 2]])\n", + "flow.draw_graph().show()" + ] + }, + { + "cell_type": "markdown", + "id": "12", + "metadata": {}, + "source": [ + "## Running the workflow\n", + "\n", + "The flow has one MD job and 51 force calculations, 50 snapshots and the\n", + "undisplaced supercell. On one A100 GPU the whole run took 11 minutes. The MD\n", + "took 9 minutes, the force calculations 11 seconds and the fit 2 minutes.\n", + "\n", + "`create_folders=True` is needed, because the snapshots are read from the\n", + "trajectory file in the folder of the MD job." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13", + "metadata": {}, + "outputs": [], + "source": [ + "from jobflow import JobStore, run_locally\n", + "from maggma.stores import MemoryStore\n", + "\n", + "job_store = JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()})\n", + "responses = run_locally(flow, store=job_store, create_folders=True, ensure_success=True)\n", + "doc = responses[flow.output.uuid][1].output" + ] + }, + { + "cell_type": "markdown", + "id": "14", + "metadata": {}, + "source": [ + "## Results\n", + "\n", + "The output is a `FiniteTemperaturePhononDoc`. It holds the band structure, the\n", + "DOS, the force constants, the fit and the trajectory check." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "health = doc.trajectory_health\n", + "{\n", + " \"highest frequency in THz\": float(np.max(doc.phonon_bandstructure.bands)),\n", + " \"imaginary modes on the band path\": doc.has_imaginary_modes,\n", + " \"lowest frequency at the commensurate q-points in THz\": doc.min_frequency,\n", + " \"LASSO penalty\": doc.lasso_alpha,\n", + " \"force RMSE in eV/A\": doc.force_rmse,\n", + " \"trajectory check\": health.verdict,\n", + " \"Lindemann ratio\": health.lindemann_ratio,\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "16", + "metadata": {}, + "source": [ + "Our run gave a highest frequency of 5.97 THz, no imaginary modes and a stable\n", + "trajectory.\n", + "\n", + "- `has_imaginary_modes` checks the whole band path. `min_frequency` only covers\n", + " the q-points commensurate with the supercell. The fit sets the frequencies at\n", + " these points directly. Everywhere else they are interpolated. Section 2 shows\n", + " why the difference matters.\n", + "- The force RMSE is the part of the forces that the force constants do not\n", + " describe. It grows with temperature, from 0.05 eV/Å at 100 K to 0.29 eV/Å at\n", + " 900 K for Ca3Ir4Sn13.\n", + "- The Lindemann ratio is the root mean square vibration of the atoms around\n", + " their mean positions, divided by the nearest-neighbor distance. Above 0.12 the check reports the trajectory as\n", + " melted." + ] + }, + { + "cell_type": "markdown", + "id": "17", + "metadata": {}, + "source": [ + "## Comparing with 0 K\n", + "\n", + "The Materials Project's Harmonic Phonon Database has the 0 K phonons of the same\n", + "cell, computed with PBEsol (Sahasrabuddhe et al., ChemRxiv (2026),\n", + "doi:10.26434/chemrxiv.15004632/v1). The next cell plots them next to ours. The\n", + "two band structures use different paths through the Brillouin zone, so they are\n", + "drawn side by side." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine\n", + "from pymatgen.phonon.dos import PhononDos\n", + "\n", + "\n", + "def plot_bands(\n", + " ax: plt.Axes, bs: PhononBandStructureSymmLine, label: str | None = None, **style\n", + ") -> None:\n", + " \"\"\"Plot a phonon band structure, one segment of the path at a time.\"\"\"\n", + " distance = np.array(bs.distance)\n", + " positions, names = [], []\n", + " for idx, branch in enumerate(bs.branches):\n", + " part = slice(branch[\"start_index\"], branch[\"end_index\"] + 1)\n", + " lines = ax.plot(distance[part], bs.bands[:, part].T, **style)\n", + " if idx == 0 and label:\n", + " lines[0].set_label(label)\n", + " start, end = branch[\"name\"].split(\"-\")\n", + " if positions and np.isclose(positions[-1], distance[part.start]):\n", + " if names[-1] != start:\n", + " names[-1] += \"|\" + start\n", + " else:\n", + " positions.append(distance[part.start])\n", + " names.append(start)\n", + " positions.append(distance[branch[\"end_index\"]])\n", + " names.append(end)\n", + " names = [name.replace(\"\\\\Gamma\", \"Γ\").replace(\"GAMMA\", \"Γ\") for name in names]\n", + " ax.set_xticks(positions, names)\n", + " ax.set_xlim(distance[0], distance[-1])\n", + " ax.axhline(0, color=\"gray\", lw=0.5)\n", + "\n", + "\n", + "def plot_dos(ax: plt.Axes, dos: PhononDos, label: str | None = None, **style) -> None:\n", + " \"\"\"Plot a phonon DOS sideways, to sit next to a band structure.\"\"\"\n", + " ax.plot(dos.densities, dos.frequencies, label=label, **style)\n", + " ax.set_xlabel(\"DOS\")\n", + "\n", + "\n", + "with MPRester() as mpr:\n", + " bs_0k = mpr.materials.phonon.get_bandstructure_from_material_id(\n", + " \"mp-1200211\", phonon_method=\"pheasy\"\n", + " ).to_pmg\n", + " dos_0k = mpr.materials.phonon.get_dos_from_material_id(\n", + " \"mp-1200211\", phonon_method=\"pheasy\"\n", + " ).to_pmg\n", + "\n", + "fig, axes = plt.subplots(\n", + " 1, 3, figsize=(13, 4), sharey=True, gridspec_kw={\"width_ratios\": [3, 3, 1]}\n", + ")\n", + "plot_bands(axes[0], bs_0k, color=\"gray\", lw=0.8)\n", + "plot_bands(axes[1], doc.phonon_bandstructure, color=\"C0\", lw=0.8)\n", + "plot_dos(axes[2], dos_0k, label=\"0 K\", color=\"gray\")\n", + "plot_dos(axes[2], doc.phonon_dos, label=\"300 K\", color=\"C0\")\n", + "axes[0].set_title(\"0 K, PBEsol\")\n", + "axes[1].set_title(\"300 K, MACE-OMAT-0-medium\")\n", + "axes[0].set_ylabel(\"Frequency (THz)\")\n", + "axes[2].legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "19", + "metadata": {}, + "source": [ + "At 0 K, Ca3Ir4Sn13 has imaginary modes down to about -0.75 THz. At 300 K they\n", + "are gone. The motion of the atoms at 300 K stabilizes them.\n", + "\n", + "To check the force field, we compare with effective harmonic force constants\n", + "fitted to ab initio MD at 300 K. These were computed with PBEsol in the same\n", + "cell and supercell. Their highest frequency is 6.03 THz, against 5.97 THz from\n", + "MACE-OMAT-0-medium. Over the whole band path the frequencies differ by 0.07 THz\n", + "on average." + ] + }, + { + "cell_type": "markdown", + "id": "20", + "metadata": {}, + "source": [ + "## The other temperatures, potentials and materials\n", + "\n", + "The same workflow runs at five temperatures, with all three potentials and for\n", + "four more materials. AlAsPt5, Zn3P2 and Er5Tl3 also have imaginary modes at 0 K.\n", + "Bi4S3N2 is polar. The function below builds and runs one workflow in its own\n", + "folder. Section 2 uses it as well.\n", + "\n", + "The loop runs 75 workflows, so it is off by default. Set `RUN_ALL = True` to\n", + "run it. Each of our runs took 6 to 36 minutes on one A100 GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21", + "metadata": {}, + "outputs": [], + "source": [ + "from atomate2.common.schemas.finite_temperature_phonons import (\n", + " FiniteTemperaturePhononDoc,\n", + ")\n", + "\n", + "# mp-id and the diagonal of the supercell matrix of our AIMD reference\n", + "MATERIALS = {\n", + " \"Ca3Ir4Sn13\": (\"mp-1200211\", (2, 2, 2)),\n", + " \"AlAsPt5\": (\"mp-1025306\", (4, 4, 2)),\n", + " \"Zn3P2\": (\"mp-2071\", (2, 2, 2)),\n", + " \"Bi4S3N2\": (\"mp-1245549\", (2, 2, 2)),\n", + " \"Er5Tl3\": (\"mp-1105965\", (2, 2, 2)),\n", + " \"KNaICl\": (\"mp-1002081\", (3, 3, 2)),\n", + "}\n", + "TEMPERATURES = (100, 300, 500, 700, 900)\n", + "\n", + "\n", + "def run_ft(\n", + " structure: Structure,\n", + " supercell: tuple[int, int, int],\n", + " model: str,\n", + " root_dir: str,\n", + " temperature: float,\n", + " md_time: float = 8.0,\n", + " n_snapshots: int = 50,\n", + ") -> FiniteTemperaturePhononDoc:\n", + " \"\"\"Run the finite-temperature phonon workflow and return its output.\"\"\"\n", + " maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(\n", + " \"MACE-MP-0\",\n", + " calculator_kwargs=calc_kwargs(model),\n", + " relax_initial_structure=False,\n", + " temperature=temperature,\n", + " md_time=md_time,\n", + " n_snapshots=n_snapshots,\n", + " )\n", + " flow = maker.make(structure, supercell_matrix=np.diag(supercell).tolist())\n", + " os.makedirs(root_dir, exist_ok=True)\n", + " responses = run_locally(\n", + " flow,\n", + " store=JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()}),\n", + " create_folders=True,\n", + " root_dir=root_dir,\n", + " ensure_success=True,\n", + " )\n", + " return responses[flow.output.uuid][1].output\n", + "\n", + "\n", + "RUN_ALL = False\n", + "docs = {}\n", + "if RUN_ALL:\n", + " for name in (\"Ca3Ir4Sn13\", \"AlAsPt5\", \"Zn3P2\", \"Bi4S3N2\", \"Er5Tl3\"):\n", + " mp_id, supercell = MATERIALS[name]\n", + " unit_cell = get_pheasy_structure(mp_id)\n", + " for model in MODEL_FILES:\n", + " for temperature in TEMPERATURES:\n", + " docs[name, model, temperature] = run_ft(\n", + " unit_cell,\n", + " supercell,\n", + " model,\n", + " f\"runs/{name}_{model}_{temperature}K\",\n", + " temperature,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "22", + "metadata": {}, + "source": [ + "The next cell plots the results of the loop. For each potential it shows the\n", + "band structure at 100, 500 and 900 K. Ca3Ir4Sn13 and Zn3P2 have 40 atoms in the\n", + "primitive cell, so their 120 branches are hard to follow. For these two the DOS\n", + "at all five temperatures is shown as well." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "23", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_temperatures(name: str, with_dos: bool) -> None:\n", + " \"\"\"Plot the band structures of one material at 100, 500 and 900 K.\"\"\"\n", + " ratios = [3, 1] * len(MODEL_FILES) if with_dos else [3] * len(MODEL_FILES)\n", + " fig, axes = plt.subplots(\n", + " 1,\n", + " len(ratios),\n", + " figsize=(4.5 * len(MODEL_FILES), 4),\n", + " sharey=True,\n", + " gridspec_kw={\"width_ratios\": ratios},\n", + " )\n", + " colors = dict(\n", + " zip(TEMPERATURES, plt.cm.plasma(np.linspace(0, 0.85, 5)), strict=True)\n", + " )\n", + " step = 2 if with_dos else 1\n", + " for idx, model in enumerate(MODEL_FILES):\n", + " ax = axes[step * idx]\n", + " for temperature in (100, 500, 900):\n", + " plot_bands(\n", + " ax,\n", + " docs[name, model, temperature].phonon_bandstructure,\n", + " label=f\"{temperature} K\",\n", + " color=colors[temperature],\n", + " lw=0.6,\n", + " )\n", + " ax.set_title(model)\n", + " if with_dos:\n", + " for temperature in TEMPERATURES:\n", + " plot_dos(\n", + " axes[step * idx + 1],\n", + " docs[name, model, temperature].phonon_dos,\n", + " label=f\"{temperature} K\",\n", + " color=colors[temperature],\n", + " )\n", + " axes[0].set_ylabel(\"Frequency (THz)\")\n", + " axes[-1].legend(fontsize=8)\n", + " fig.suptitle(name)\n", + " plt.show()\n", + "\n", + "\n", + "if RUN_ALL:\n", + " for name in (\"Ca3Ir4Sn13\", \"AlAsPt5\", \"Zn3P2\", \"Bi4S3N2\", \"Er5Tl3\"):\n", + " plot_temperatures(name, with_dos=name in (\"Ca3Ir4Sn13\", \"Zn3P2\"))" + ] + }, + { + "cell_type": "markdown", + "id": "24", + "metadata": {}, + "source": [ + "## Our results\n", + "\n", + "The next cell holds the results of our runs. For each material it gives the\n", + "highest frequency on the band path at each temperature. The dashed line is the\n", + "highest frequency of the AIMD reference at 300 K." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "# highest frequency on the band path in THz, at 100, 300, 500, 700 and 900 K\n", + "MAX_FREQUENCY = {\n", + " \"Ca3Ir4Sn13\": {\n", + " \"OMAT-0-medium\": (5.98, 5.97, 5.93, 5.90, 5.83),\n", + " \"MATPES-PBE-0\": (5.80, 5.75, 5.67, 5.63, 5.65),\n", + " \"MATPES-r2SCAN-0\": (5.95, 5.98, 5.92, 5.88, 5.78),\n", + " },\n", + " \"AlAsPt5\": {\n", + " \"OMAT-0-medium\": (7.75, 7.73, 7.81, 7.76, 7.71),\n", + " \"MATPES-PBE-0\": (7.65, 7.57, 7.48, 7.59, 7.47),\n", + " \"MATPES-r2SCAN-0\": (7.66, 7.62, 7.77, 7.53, 7.43),\n", + " },\n", + " \"Zn3P2\": {\n", + " \"OMAT-0-medium\": (10.59, 10.36, 10.13, 9.67, 9.17),\n", + " \"MATPES-PBE-0\": (10.33, 10.03, 9.86, 9.53, 8.73),\n", + " \"MATPES-r2SCAN-0\": (11.19, 10.85, 10.66, 10.41, 9.97),\n", + " },\n", + " \"Bi4S3N2\": {\n", + " \"OMAT-0-medium\": (17.15, 16.88, 16.05, 16.26, 15.47),\n", + " \"MATPES-PBE-0\": (15.97, 15.64, 15.40, 14.75, 14.31),\n", + " \"MATPES-r2SCAN-0\": (17.62, 16.94, 17.23, 16.87, 15.54),\n", + " },\n", + " \"Er5Tl3\": {\n", + " \"OMAT-0-medium\": (4.23, 4.22, 4.19, 4.22, 4.23),\n", + " \"MATPES-PBE-0\": (4.11, 4.07, 4.01, 3.93, 3.99),\n", + " \"MATPES-r2SCAN-0\": (4.18, 4.09, 4.08, 3.99, 3.96),\n", + " },\n", + "}\n", + "# AIMD reference at 300 K: highest frequency in THz, and the mean absolute\n", + "# difference of each potential from it over all branches of the band path\n", + "AIMD_MAX_300K = {\n", + " \"Ca3Ir4Sn13\": 6.03,\n", + " \"AlAsPt5\": 7.79,\n", + " \"Zn3P2\": 10.09,\n", + " \"Bi4S3N2\": 17.03,\n", + " \"Er5Tl3\": 3.97,\n", + "}\n", + "MAE_300K = {\n", + " \"Ca3Ir4Sn13\": {\n", + " \"OMAT-0-medium\": 0.07,\n", + " \"MATPES-PBE-0\": 0.17,\n", + " \"MATPES-r2SCAN-0\": 0.10,\n", + " },\n", + " \"AlAsPt5\": {\"OMAT-0-medium\": 0.11, \"MATPES-PBE-0\": 0.21, \"MATPES-r2SCAN-0\": 0.18},\n", + " \"Zn3P2\": {\"OMAT-0-medium\": 0.19, \"MATPES-PBE-0\": 0.09, \"MATPES-r2SCAN-0\": 0.42},\n", + " \"Bi4S3N2\": {\"OMAT-0-medium\": 0.16, \"MATPES-PBE-0\": 0.43, \"MATPES-r2SCAN-0\": 0.17},\n", + " \"Er5Tl3\": {\"OMAT-0-medium\": 0.17, \"MATPES-PBE-0\": 0.16, \"MATPES-r2SCAN-0\": 0.12},\n", + "}\n", + "# runs with imaginary modes on the band path, and runs whose trajectory check\n", + "# was not \"stable\"\n", + "IMAGINARY = {\n", + " (\"Bi4S3N2\", \"OMAT-0-medium\"): (100, 300, 700),\n", + " (\"Bi4S3N2\", \"MATPES-PBE-0\"): (300, 700, 900),\n", + " (\"Bi4S3N2\", \"MATPES-r2SCAN-0\"): (100, 300, 500, 700, 900),\n", + " (\"Zn3P2\", \"MATPES-PBE-0\"): (900,),\n", + "}\n", + "NOT_STABLE = {\n", + " (\"Ca3Ir4Sn13\", \"OMAT-0-medium\", 100): \"shifted_or_diffusing\",\n", + " (\"Ca3Ir4Sn13\", \"MATPES-r2SCAN-0\", 100): \"shifted_or_diffusing\",\n", + " (\"Zn3P2\", \"OMAT-0-medium\", 700): \"melted\",\n", + " (\"Zn3P2\", \"OMAT-0-medium\", 900): \"melted\",\n", + " (\"Zn3P2\", \"MATPES-PBE-0\", 700): \"melted\",\n", + " (\"Zn3P2\", \"MATPES-PBE-0\", 900): \"melted\",\n", + " (\"Zn3P2\", \"MATPES-r2SCAN-0\", 700): \"melted\",\n", + " (\"Zn3P2\", \"MATPES-r2SCAN-0\", 900): \"melted\",\n", + " (\"Bi4S3N2\", \"OMAT-0-medium\", 700): \"melted\",\n", + " (\"Bi4S3N2\", \"OMAT-0-medium\", 900): \"melted\",\n", + " (\"Bi4S3N2\", \"MATPES-PBE-0\", 900): \"melted\",\n", + " (\"Bi4S3N2\", \"MATPES-r2SCAN-0\", 900): \"melted\",\n", + "}\n", + "\n", + "fig, axes = plt.subplots(1, 5, figsize=(16, 3.4))\n", + "for ax, (name, by_model) in zip(axes, MAX_FREQUENCY.items(), strict=True):\n", + " for model, values in by_model.items():\n", + " ax.plot(TEMPERATURES, values, \"o-\", label=model)\n", + " ax.axhline(AIMD_MAX_300K[name], color=\"black\", ls=\"--\", lw=0.8)\n", + " ax.set_title(name)\n", + " ax.set_xlabel(\"Temperature (K)\")\n", + "axes[0].set_ylabel(\"Highest frequency (THz)\")\n", + "axes[0].legend(fontsize=8)\n", + "fig.tight_layout()\n", + "plt.show()\n", + "\n", + "pd.DataFrame(MAE_300K).T.assign(**{\"AIMD highest frequency\": pd.Series(AIMD_MAX_300K)})" + ] + }, + { + "cell_type": "markdown", + "id": "26", + "metadata": {}, + "source": [ + "The table gives the mean absolute difference from the AIMD reference at 300 K\n", + "in THz, over all branches and q-points of the band path.\n", + "\n", + "- No potential is closest to AIMD for all five materials. MACE-OMAT-0-medium is\n", + " closest for Ca3Ir4Sn13, AlAsPt5 and Bi4S3N2, within 0.07 to 0.16 THz.\n", + " MACE-MATPES-r2SCAN-0 is closest for Er5Tl3 and MACE-MATPES-PBE-0 for Zn3P2.\n", + "- MACE-MATPES-PBE-0 gives the lowest frequencies for most materials. For Bi4S3N2 its highest branches lie about\n", + " 1.4 THz below AIMD.\n", + "- Most frequencies soften with temperature. The highest frequency of Bi4S3N2\n", + " drops by 1.7 THz from 100 K to 900 K with MACE-OMAT-0-medium. Er5Tl3 barely\n", + " changes.\n", + "- The imaginary modes at 0 K are gone at every temperature for Ca3Ir4Sn13,\n", + " AlAsPt5, Zn3P2 and Er5Tl3. The one exception is Zn3P2 with MACE-MATPES-PBE-0\n", + " at 900 K, a run that the trajectory check reports as melted. Bi4S3N2 keeps imaginary modes down to -0.7 THz in\n", + " 11 of 15 runs. Its AIMD reference has a small one as well, at -0.12 THz.\n", + " Bi4S3N2 is polar, so these runs and the AIMD reference are compared without\n", + " the non-analytical correction. The force fields give no Born charges.\n", + "\n", + "The trajectory check did not report \"stable\" for 12 runs:\n", + "\n", + "- Zn3P2 and Bi4S3N2 are reported as melted at 700 K or 900 K. The Lindemann\n", + " ratio is above 0.12 there. Zn3P2 melts well above 900 K. The limit of 0.12 is\n", + " a rule of thumb, and we did not check whether these trajectories are liquid.\n", + " Treat these runs with care.\n", + "- Ca3Ir4Sn13 at 100 K is reported as shifted or diffusing with two of the\n", + " potentials. With MACE-OMAT-0-medium the mean positions of the atoms moved\n", + " 0.13 Å away from the starting structure. This is a little more than 1.5\n", + " times their vibration of 0.11 Å. At 300 K the shift is only 0.05 Å, so it\n", + " does not come from the small difference between the PBEsol and the force\n", + " field positions. In experiment, Ca3Ir4Sn13 has a structural transition near\n", + " 40 K, with soft phonons above it (arXiv:1503.08102). The shift at 100 K may\n", + " be the start of this distortion. We did not check this further." + ] + }, + { + "cell_type": "markdown", + "id": "27", + "metadata": {}, + "source": [ + "## 2. MD length and number of snapshots for KNaICl\n", + "\n", + "Two settings control how well the MD samples the temperature:\n", + "\n", + "- `md_time` sets the length of the MD in ps. The default is 8 ps, of which the\n", + " first 1 ps is left out.\n", + "- `n_snapshots` sets the number of snapshots used in the fit. The default is 50.\n", + "\n", + "We tested 4, 8 and 16 ps with 25, 50 and 100 snapshots at 300 K for KNaICl\n", + "(mp-1002081). It has 4 atoms in the primitive cell and 72 in the 3x3x2\n", + "supercell. KNaICl is polar, so it is compared with the AIMD reference without\n", + "the non-analytical correction. The highest frequency of that reference is\n", + "5.51 THz.\n", + "\n", + "The grid runs 27 workflows, so it is off by default." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_GRID = False\n", + "if RUN_GRID:\n", + " mp_id, supercell = MATERIALS[\"KNaICl\"]\n", + " knaicl = get_pheasy_structure(mp_id)\n", + " for model in MODEL_FILES:\n", + " for md_time in (4, 8, 16):\n", + " for n_snapshots in (25, 50, 100):\n", + " docs[\"KNaICl\", model, md_time, n_snapshots] = run_ft(\n", + " knaicl,\n", + " supercell,\n", + " model,\n", + " f\"runs/KNaICl_{model}_{md_time}ps_{n_snapshots}\",\n", + " 300,\n", + " md_time,\n", + " n_snapshots,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29", + "metadata": {}, + "outputs": [], + "source": [ + "MD_TIMES = (4, 8, 16)\n", + "N_SNAPSHOTS = (25, 50, 100)\n", + "# by potential, rows 4, 8 and 16 ps, columns 25, 50 and 100 snapshots\n", + "MAE_GRID = { # mean absolute difference from AIMD at 300 K in THz\n", + " \"OMAT-0-medium\": (\n", + " (0.146, 0.149, 0.150),\n", + " (0.159, 0.145, 0.144),\n", + " (0.156, 0.155, 0.149),\n", + " ),\n", + " \"MATPES-PBE-0\": (\n", + " (0.138, 0.121, 0.121),\n", + " (0.124, 0.129, 0.127),\n", + " (0.127, 0.135, 0.117),\n", + " ),\n", + " \"MATPES-r2SCAN-0\": (\n", + " (0.137, 0.123, 0.123),\n", + " (0.138, 0.131, 0.128),\n", + " (0.147, 0.128, 0.128),\n", + " ),\n", + "}\n", + "MAX_GRID = { # highest frequency on the band path in THz\n", + " \"OMAT-0-medium\": ((5.63, 5.65, 5.63), (5.63, 5.73, 5.70), (5.32, 5.43, 5.44)),\n", + " \"MATPES-PBE-0\": ((5.03, 5.23, 5.26), (5.25, 5.22, 5.33), (5.12, 5.13, 5.27)),\n", + " \"MATPES-r2SCAN-0\": ((5.23, 5.40, 5.40), (5.39, 5.66, 5.56), (5.27, 5.60, 5.54)),\n", + "}\n", + "IMAGINARY_GRID = { # True if the band path has imaginary modes\n", + " \"OMAT-0-medium\": ((False, True, True), (False, False, False), (True, True, False)),\n", + " \"MATPES-PBE-0\": ((True, False, False), (True, True, True), (False, True, False)),\n", + " \"MATPES-r2SCAN-0\": (\n", + " (False, False, False),\n", + " (True, True, False),\n", + " (True, False, False),\n", + " ),\n", + "}\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(13, 3.6))\n", + "for ax, model in zip(axes, MODEL_FILES, strict=True):\n", + " grid = np.array(MAE_GRID[model])\n", + " image = ax.imshow(grid, cmap=\"viridis\", vmin=0.11, vmax=0.16)\n", + " for i in range(3):\n", + " for j in range(3):\n", + " mark = \" *\" if IMAGINARY_GRID[model][i][j] else \"\"\n", + " ax.text(\n", + " j, i, f\"{grid[i, j]:.3f}{mark}\", ha=\"center\", va=\"center\", color=\"w\"\n", + " )\n", + " ax.set_xticks(range(3), N_SNAPSHOTS)\n", + " ax.set_yticks(range(3), [f\"{t} ps\" for t in MD_TIMES])\n", + " ax.set_xlabel(\"Number of snapshots\")\n", + " ax.set_title(model)\n", + "fig.colorbar(image, ax=axes, label=\"Mean absolute difference from AIMD (THz)\")\n", + "plt.show()\n", + "\n", + "pd.concat(\n", + " {\n", + " model: pd.DataFrame(\n", + " MAX_GRID[model], index=[f\"{t} ps\" for t in MD_TIMES], columns=N_SNAPSHOTS\n", + " )\n", + " for model in MODEL_FILES\n", + " },\n", + " axis=1,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "30", + "metadata": {}, + "source": [ + "In the plot, a star marks a run with imaginary modes on the band path. The\n", + "table gives the highest frequency in THz.\n", + "\n", + "- The mean absolute difference from AIMD lies between 0.12 and 0.16 THz in every\n", + " run. It shows no trend with the MD length or the number of snapshots. Each\n", + " run is one MD trajectory, so these differences are the noise of a single run.\n", + "- The highest frequency changes by up to 0.4 THz between runs, also without a\n", + " trend.\n", + "- 12 of the 27 runs have imaginary modes on the band path, down to -0.9 THz.\n", + " They sit at q-points that are not commensurate with the supercell, such as\n", + " (1/2, 1/2, 0). There the frequencies are interpolated from the fitted force\n", + " constants. The AIMD reference has no imaginary modes in the same supercell. So\n", + " they come from the noise of the fit. They appear in 5 of 9 runs with 25\n", + " snapshots, 5 of 9 with 50 and 2 of 9 with 100.\n", + "- The MD takes most of the time. With MACE-OMAT-0-medium a run took 3.8, 6.0\n", + " and 10.6 minutes for 4, 8 and 16 ps. Going from 50 to 100 snapshots added a\n", + " few seconds of force calculations and fitting.\n", + "\n", + "We also ran Bi4S3N2 and Zn3P2 at 300 K with 100 snapshots. The mean absolute\n", + "difference from AIMD changed by 0.03 THz or less. The fit of Zn3P2 did not take\n", + "longer. Bi4S3N2 kept its imaginary modes with all three potentials, so these are\n", + "unlikely to be noise of the fit.\n", + "\n", + "With a force field the force calculations cost little next to the MD, so 100\n", + "snapshots are worth using. The default stays at 50, because with VASP each\n", + "snapshot is a DFT calculation of the whole supercell. For the MD length, 4 ps\n", + "already gave the same agreement with AIMD for KNaICl. We kept the default of\n", + "8 ps for the other materials." + ] + }, + { + "cell_type": "markdown", + "id": "31", + "metadata": {}, + "source": [ + "## Known limitations\n", + "\n", + "The force constants are those of the starting volume. Thermal expansion is not\n", + "included, so the result is least reliable at high temperature.\n", + "\n", + "A machine-learned potential gives no Born charges, so the non-analytical\n", + "correction is not applied here. With VASP, the `born_maker` computes them.\n", + "\n", + "The trajectory check uses fixed limits. A Lindemann ratio above 0.12 is reported\n", + "as melting. A displacement from the reference of more than 1.5 times the\n", + "vibration around the mean positions is reported as a shift. These are rules of thumb. A warning is raised and\n", + "the fit is still done.\n", + "\n", + "Every result above comes from one MD trajectory. Section 2 shows that two runs\n", + "with different settings can differ by about 0.04 THz on average and by up to\n", + "0.4 THz in the highest frequency." + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/tutorials.md b/tutorials/tutorials.md index 487c6da5e9..c530f277bc 100644 --- a/tutorials/tutorials.md +++ b/tutorials/tutorials.md @@ -19,6 +19,7 @@ hiphive_workflow force_fields/phonon_workflow grueneisen_workflow cte_workflow +finite_temperature_phonons qha_workflow torchsim_tutorial ``` From 7470fb4b645c79bdcc62ecd7dfde3f6f794eb769 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sun, 4 Oct 2026 10:07:35 -0700 Subject: [PATCH 16/43] Raise the Lindemann limit of the trajectory check to 0.15 and update the tutorial --- .../common/jobs/finite_temperature_phonons.py | 6 +- .../jobs/test_finite_temperature_phonons.py | 4 +- tutorials/finite_temperature_phonons.ipynb | 76 ++++++++++++------- 3 files changed, 55 insertions(+), 31 deletions(-) diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index 7999e1add0..22a6228f41 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -62,7 +62,9 @@ # so a large displacement in the first frames means the atom order does not match. _START_LIMIT = 0.5 # Angstrom _RMS_LIMIT = 1.0 # Angstrom -_LINDEMANN_LIMIT = 0.12 +# Lindemann ratio at melting of an fcc solid, Saija et al., J. Chem. Phys. 124, +# 244504 (2006) +_LINDEMANN_LIMIT = 0.15 _SHIFT_RATIO_LIMIT = 1.5 _DRIFT_SIGMA = 3.0 _N_START_FRAMES = 10 @@ -246,7 +248,7 @@ def _assess_trajectory( - A root mean square displacement above 0.5 Angstrom in the first 10 frames means the atoms are not in the order of the reference. - - A root mean square vibration u_vib above 0.12 of the nearest-neighbor + - A root mean square vibration u_vib above 0.15 of the nearest-neighbor distance means the structure melted. - A total displacement u_ref above 1.5 times u_vib means the mean positions moved away from the reference. diff --git a/tests/common/jobs/test_finite_temperature_phonons.py b/tests/common/jobs/test_finite_temperature_phonons.py index 699bbf4a7f..d8f755dd30 100644 --- a/tests/common/jobs/test_finite_temperature_phonons.py +++ b/tests/common/jobs/test_finite_temperature_phonons.py @@ -96,8 +96,8 @@ def test_assess_trajectory(cu_supercell): assert health_moved.verdict == "stable" assert health_moved.u_ref == pytest.approx(health.u_ref) - # a vibration of 0.2 A per direction is above the Lindemann limit - frac, energies = _trajectory(cu_supercell, rng, sigma=0.2) + # a vibration of 0.25 A per direction is above the Lindemann limit + frac, energies = _trajectory(cu_supercell, rng, sigma=0.25) assert _verdict(cu_supercell, frac, energies) == "melted" # the mean positions move in the second half, with a flat energy diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 8bccb3558e..4e7f977520 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -55,8 +55,8 @@ "energy late in the run. The result is stored in the output. A warning is raised\n", "if the check fails, but the fit is still done.\n", "\n", - "The volume stays that of the starting structure, so thermal expansion is not\n", - "included. The same workflow runs with VASP as\n", + "The MD runs at constant volume (NVT), at the volume of the starting structure,\n", + "so thermal expansion is not included. The same workflow runs with VASP as\n", "`atomate2.vasp.flows.finite_temperature_phonons.FiniteTemperaturePhononMaker`.\n", "`atomate2.forcefields.flows.finite_temperature_phonons` also has two mixed\n", "versions. One runs the MD with VASP and the force calculations with a force\n", @@ -361,8 +361,12 @@ " describe. It grows with temperature, from 0.05 eV/Å at 100 K to 0.29 eV/Å at\n", " 900 K for Ca3Ir4Sn13.\n", "- The Lindemann ratio is the root mean square vibration of the atoms around\n", - " their mean positions, divided by the nearest-neighbor distance. Above 0.12 the check reports the trajectory as\n", - " melted." + " their mean positions, divided by the nearest-neighbor distance. By the\n", + " Lindemann criterion, a solid melts when this ratio reaches a fixed value\n", + " (Lindemann, Phys. Z. 11, 609 (1910); Gilvarry, Phys. Rev. 102, 308 (1956)).\n", + " The check reports the trajectory as melted above 0.15. This is the ratio at\n", + " melting of fcc solids, defined the same way (Saija et al., J. Chem. Phys. 124,\n", + " 244504 (2006))." ] }, { @@ -386,6 +390,8 @@ "metadata": {}, "outputs": [], "source": [ + "import re\n", + "\n", "import matplotlib.pyplot as plt\n", "from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine\n", "from pymatgen.phonon.dos import PhononDos\n", @@ -412,6 +418,7 @@ " positions.append(distance[branch[\"end_index\"]])\n", " names.append(end)\n", " names = [name.replace(\"\\\\Gamma\", \"Γ\").replace(\"GAMMA\", \"Γ\") for name in names]\n", + " names = [re.sub(r\"_(\\w+)\", r\"$_{\\1}$\", name) for name in names]\n", " ax.set_xticks(positions, names)\n", " ax.set_xlim(distance[0], distance[-1])\n", " ax.axhline(0, color=\"gray\", lw=0.5)\n", @@ -469,8 +476,10 @@ "\n", "The same workflow runs at five temperatures, with all three potentials and for\n", "four more materials. AlAsPt5, Zn3P2 and Er5Tl3 also have imaginary modes at 0 K.\n", - "Bi4S3N2 is polar. The function below builds and runs one workflow in its own\n", - "folder. Section 2 uses it as well.\n", + "Bi4S3N2 is polar. The Materials Project lists AlAsPt5 and Bi4S3N2 as\n", + "theoretical. They are predicted compounds with no known experimental structure.\n", + "\n", + "The function below builds and runs one workflow in its own folder. Section 2 uses it as well.\n", "\n", "The loop runs 75 workflows, so it is off by default. Set `RUN_ALL = True` to\n", "run it. Each of our runs took 6 to 36 minutes on one A100 GPU." @@ -599,7 +608,7 @@ " )\n", " axes[0].set_ylabel(\"Frequency (THz)\")\n", " axes[-1].legend(fontsize=8)\n", - " fig.suptitle(name)\n", + " fig.suptitle(name, y=1.02)\n", " plt.show()\n", "\n", "\n", @@ -688,16 +697,8 @@ "NOT_STABLE = {\n", " (\"Ca3Ir4Sn13\", \"OMAT-0-medium\", 100): \"shifted_or_diffusing\",\n", " (\"Ca3Ir4Sn13\", \"MATPES-r2SCAN-0\", 100): \"shifted_or_diffusing\",\n", - " (\"Zn3P2\", \"OMAT-0-medium\", 700): \"melted\",\n", " (\"Zn3P2\", \"OMAT-0-medium\", 900): \"melted\",\n", - " (\"Zn3P2\", \"MATPES-PBE-0\", 700): \"melted\",\n", " (\"Zn3P2\", \"MATPES-PBE-0\", 900): \"melted\",\n", - " (\"Zn3P2\", \"MATPES-r2SCAN-0\", 700): \"melted\",\n", - " (\"Zn3P2\", \"MATPES-r2SCAN-0\", 900): \"melted\",\n", - " (\"Bi4S3N2\", \"OMAT-0-medium\", 700): \"melted\",\n", - " (\"Bi4S3N2\", \"OMAT-0-medium\", 900): \"melted\",\n", - " (\"Bi4S3N2\", \"MATPES-PBE-0\", 900): \"melted\",\n", - " (\"Bi4S3N2\", \"MATPES-r2SCAN-0\", 900): \"melted\",\n", "}\n", "\n", "fig, axes = plt.subplots(1, 5, figsize=(16, 3.4))\n", @@ -708,8 +709,13 @@ " ax.set_title(name)\n", " ax.set_xlabel(\"Temperature (K)\")\n", "axes[0].set_ylabel(\"Highest frequency (THz)\")\n", - "axes[0].legend(fontsize=8)\n", "fig.tight_layout()\n", + "fig.legend(\n", + " *axes[0].get_legend_handles_labels(),\n", + " loc=\"upper center\",\n", + " ncol=3,\n", + " bbox_to_anchor=(0.5, 0),\n", + ")\n", "plt.show()\n", "\n", "pd.DataFrame(MAE_300K).T.assign(**{\"AIMD highest frequency\": pd.Series(AIMD_MAX_300K)})" @@ -738,12 +744,14 @@ " Bi4S3N2 is polar, so these runs and the AIMD reference are compared without\n", " the non-analytical correction. The force fields give no Born charges.\n", "\n", - "The trajectory check did not report \"stable\" for 12 runs:\n", + "The trajectory check did not report \"stable\" for four runs:\n", "\n", - "- Zn3P2 and Bi4S3N2 are reported as melted at 700 K or 900 K. The Lindemann\n", - " ratio is above 0.12 there. Zn3P2 melts well above 900 K. The limit of 0.12 is\n", - " a rule of thumb, and we did not check whether these trajectories are liquid.\n", - " Treat these runs with care.\n", + "- By the Lindemann criterion, Zn3P2 melts at 900 K with MACE-OMAT-0-medium and\n", + " MACE-MATPES-PBE-0. Its Lindemann ratio there is 0.165 and 0.171. With\n", + " MACE-MATPES-r2SCAN-0 it reaches 0.148 at 900 K, just below the limit of 0.15.\n", + " No other material reaches the limit up to 900 K. The highest ratio among them\n", + " is 0.136, for Bi4S3N2. Every run keeps the volume of the 0 K cell, see the\n", + " known limitations below.\n", "- Ca3Ir4Sn13 at 100 K is reported as shifted or diffusing with two of the\n", " potentials. With MACE-OMAT-0-medium the mean positions of the atoms moved\n", " 0.13 Å away from the starting structure. This is a little more than 1.5\n", @@ -769,7 +777,7 @@ "\n", "We tested 4, 8 and 16 ps with 25, 50 and 100 snapshots at 300 K for KNaICl\n", "(mp-1002081). It has 4 atoms in the primitive cell and 72 in the 3x3x2\n", - "supercell. KNaICl is polar, so it is compared with the AIMD reference without\n", + "supercell. Like AlAsPt5 and Bi4S3N2, KNaICl is a predicted compound. KNaICl is polar, so it is compared with the AIMD reference without\n", "the non-analytical correction. The highest frequency of that reference is\n", "5.51 THz.\n", "\n", @@ -890,6 +898,14 @@ " constants. The AIMD reference has no imaginary modes in the same supercell. So\n", " they come from the noise of the fit. They appear in 5 of 9 runs with 25\n", " snapshots, 5 of 9 with 50 and 2 of 9 with 100.\n", + "- We ran the whole grid a second time. The 4 and 8 ps runs gave the same\n", + " numbers to the third decimal. The 16 ps runs did not. Their highest frequency\n", + " changed by up to 0.2 THz, and imaginary modes appeared or went away in three\n", + " of them. With 100 snapshots, 2 of 9 runs had imaginary modes the first time\n", + " and 3 of 9 the second time. Runs with the same potential and MD length share\n", + " one trajectory. At 16 ps their Lindemann ratios already differed in the first\n", + " round, so the trajectory itself changed. Most likely, tiny numerical\n", + " differences on the GPU grow over a long MD run.\n", "- The MD takes most of the time. With MACE-OMAT-0-medium a run took 3.8, 6.0\n", " and 10.6 minutes for 4, 8 and 16 ps. Going from 50 to 100 snapshots added a\n", " few seconds of force calculations and fitting.\n", @@ -913,16 +929,22 @@ "source": [ "## Known limitations\n", "\n", - "The force constants are those of the starting volume. Thermal expansion is not\n", - "included, so the result is least reliable at high temperature.\n", + "The MD runs at constant volume (NVT). At every temperature it keeps the volume\n", + "of the starting structure, here the 0 K PBEsol cell. A real crystal expands as\n", + "it heats up, and the expansion changes the phonons. At high temperature, the\n", + "volume at each temperature should first be found with an NPT run, and the NVT\n", + "run done at that volume. Without this, thermal expansion is missing from the\n", + "force constants and from the trajectory check.\n", "\n", "A machine-learned potential gives no Born charges, so the non-analytical\n", "correction is not applied here. With VASP, the `born_maker` computes them.\n", "\n", - "The trajectory check uses fixed limits. A Lindemann ratio above 0.12 is reported\n", + "The trajectory check uses fixed limits. A Lindemann ratio above 0.15 is reported\n", "as melting. A displacement from the reference of more than 1.5 times the\n", - "vibration around the mean positions is reported as a shift. These are rules of thumb. A warning is raised and\n", - "the fit is still done.\n", + "vibration around the mean positions is reported as a shift. These are rules of\n", + "thumb, and the Lindemann ratio at melting differs between materials. We did not\n", + "check whether any of the trajectories reported as melted is a liquid. A warning\n", + "is raised and the fit is still done.\n", "\n", "Every result above comes from one MD trajectory. Section 2 shows that two runs\n", "with different settings can differ by about 0.04 THz on average and by up to\n", From 06b10cfb420dd6e67d577e0e6e4ae2f828fdb6f2 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sun, 4 Oct 2026 10:51:45 -0700 Subject: [PATCH 17/43] Add an optional NPT MD that includes thermal expansion in the finite-temperature phonons --- docs/user/codes/vasp.md | 9 +- .../flows/finite_temperature_phonons.py | 92 ++++++++ .../common/jobs/finite_temperature_phonons.py | 222 +++++++++++++++--- .../schemas/finite_temperature_phonons.py | 30 ++- .../flows/finite_temperature_phonons.py | 83 ++++++- .../vasp/flows/finite_temperature_phonons.py | 67 +++++- .../jobs/test_finite_temperature_phonons.py | 119 +++++++++- .../flows/test_finite_temperature_phonons.py | 39 +++ 8 files changed, 606 insertions(+), 55 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index 5f3269e240..da73ce9fe1 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -412,7 +412,7 @@ The cluster space grows faster there than the number of displacements the workfl `FiniteTemperaturePhononMaker` fits effective harmonic force constants at a finite temperature, as in the temperature-dependent effective potential ([TDEP](https://doi.org/10.1103/PhysRevB.84.180301)) method. They include the anharmonic effects at that temperature, at the volume of the relaxed structure. -Thermal expansion is not included. +By default, thermal expansion is not included. The structure is relaxed first. An NVT MD run then samples the displacements at the temperature. By default, it runs for 8 ps at 300 K with a time step of 1 fs and a Nosé-Hoover thermostat. @@ -440,6 +440,13 @@ Both set ISPIN from the relaxation directory with `auto_ispin`. Each job continues from the positions and velocities of the previous one. The thermostat variables start again from zero in each job. +An NPT MD can be run first to include thermal expansion. +Set `npt_maker` to a VASP `MDMaker` with an `MDSetGenerator`, and use a larger ENCUT than for the NVT MD, since the cell changes. +The flow runs it at the temperature and at `pressure`, 0 kbar by default, with MDALGO = 3 and ISIF = 3. +Its cell is averaged over the frames after `npt_equilibration_time`, given the symmetry of the relaxed structure, and used for the NVT MD, the statics and the fit. +`fixed_cell_relax_maker` can relax the atoms in this cell, for example with ISIF = 2. +With a force field, `from_force_field_name(..., run_npt=True)` sets both makers. + The trajectory is also checked before the fit. The check looks for melting and for a move away from the reference structure. It also looks at the drift of the potential energy late in the run. diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 332332409a..70db6e1001 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -17,6 +17,7 @@ fit_finite_temperature_phonons, get_md_restart_structure, get_md_supercell, + get_npt_structure, select_md_snapshots, ) from atomate2.common.jobs.pheasy import get_supercell_size @@ -70,6 +71,14 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): give the phonon band structure and density of states. Imaginary modes are reported, not removed. + If npt_maker is set, thermal expansion is included. An NPT MD run at the + temperature and pressure first starts from the undisplaced supercell of the + relaxed structure. Its cell, averaged over the frames after + npt_equilibration_time, gives the unit cell at the temperature, see + :obj:`.get_npt_structure`. If fixed_cell_relax_maker is set, it relaxes the + atoms in this cell. The NVT MD, the phonon displacement calculations and the + fit then use this cell. + The MD maker and the phonon displacement maker are independent. Either can be a VASP or a force field maker, so the forces can come from a different level of theory than the trajectory. The residual forces of the undisplaced @@ -109,6 +118,13 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): Number of consecutive MD jobs that make up the trajectory. Each job continues from the positions and velocities of the previous one. The thermostat variables start again from zero in each job. + npt_time: float + Length of the NPT MD in ps, if there is one. + npt_equilibration_time: float + Time at the start of the NPT trajectory that is left out of the average + cell, in ps. + pressure: float + Pressure of the NPT MD in kbar. min_length: float Each lattice vector of the diagonal supercell is at least min_length long, in Angstrom. @@ -140,6 +156,13 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): born_maker: Maker | None VASP maker for the Born effective charges and the dielectric tensor, used for the non-analytical correction. None skips it. + npt_maker: Maker | None + Maker for the NPT MD. The flow sets its temperature, pressure, time + step and number of steps. None skips the NPT MD. + fixed_cell_relax_maker: Maker | None + Maker for the relaxation of the atoms in the cell from the NPT MD. It + must keep the cell. None keeps the fractional coordinates of the relaxed + structure. Only used with npt_maker. md_maker: Maker Maker for the MD. The flow sets its temperature, time step, number of steps and thermostat. @@ -156,6 +179,9 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): n_snapshots: int = 50 thermostat: Literal["nose-hoover", "langevin"] = "nose-hoover" md_runs: int = 1 + npt_time: float = 8.0 + npt_equilibration_time: float = 2.0 + pressure: float = 0.0 min_length: float = 12.0 symprec: float = SETTINGS.PHONON_SYMPREC rotational_sum_rule: Literal["BH", "H", "BHH"] | None = "BHH" @@ -168,6 +194,8 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): socket: bool = False bulk_relax_maker: Maker | None = None born_maker: Maker | None = None + npt_maker: Maker | None = None + fixed_cell_relax_maker: Maker | None = None md_maker: Maker | None = None phonon_displacement_maker: Maker | None = None @@ -219,6 +247,15 @@ def __post_init__(self) -> None: raise ValueError( f"md_runs ({self.md_runs}) is larger than the {n_steps} MD steps." ) + if self.npt_maker is not None and not ( + 0 <= self.npt_equilibration_time < self.npt_time + ): + raise ValueError( + "npt_equilibration_time must be at least zero and shorter than " + "npt_time." + ) + if self.fixed_cell_relax_maker is not None and self.npt_maker is None: + raise ValueError("fixed_cell_relax_maker is only used with npt_maker.") def get_md_steps(self) -> list[int]: """Get the number of MD steps of each MD job.""" @@ -269,6 +306,7 @@ def make( jobs: list[Job | Flow] = [] optimization_run_job_dir = optimization_run_uuid = None born_run_job_dir = born_run_uuid = None + npt_kwargs: dict = {} if self.bulk_relax_maker is not None: relax = self.bulk_relax_maker.make(structure, prev_dir=prev_dir) @@ -291,6 +329,44 @@ def make( jobs.append(supercell_job) supercell_matrix = supercell_job.output + if self.npt_maker is not None: + start_job = get_md_supercell( + structure, supercell_matrix, self.symprec, self.code + ) + n_steps = round(self.npt_time * 1000 / self.md_time_step) + npt_job = self.get_npt_maker(n_steps).make( + start_job.output, prev_dir=prev_dir + ) + npt_job.append_name(" NPT") + npt_cell_job = get_npt_structure( + npt_job.output.dir_name, + self.md_code, + structure, + supercell_matrix, + start_job.output, + self.temperature, + self.md_time_step, + self.npt_equilibration_time, + self.symprec, + ) + jobs.extend([start_job, npt_job, npt_cell_job]) + npt_kwargs = { + "npt_input_structure": structure, + "pressure": self.pressure, + "npt_time": self.npt_time, + "npt_equilibration_time": self.npt_equilibration_time, + "npt_trajectory_health": npt_cell_job.output["trajectory_health"], + "npt_uuid": npt_job.uuid, + "npt_dir": npt_job.output.dir_name, + } + structure = npt_cell_job.output["structure"] + if self.fixed_cell_relax_maker is not None: + relax = self.fixed_cell_relax_maker.make(structure, prev_dir=prev_dir) + jobs.append(relax) + npt_kwargs["fixed_cell_relax_uuid"] = relax.uuid + npt_kwargs["fixed_cell_relax_job_dir"] = relax.output.dir_name + structure = relax.output.structure + if self.born_maker is not None and (born is None or epsilon_static is None): born_job = self.born_maker.make(structure, prev_dir=prev_dir) jobs.append(born_job) @@ -367,6 +443,7 @@ def make( born=born, epsilon_static=epsilon_static, store_force_constants=self.store_force_constants, + **npt_kwargs, ) jobs.append(fit_job) return Flow(jobs, fit_job.output, name=self.name) @@ -421,6 +498,21 @@ def prev_calc_dir_argname(self) -> str | None: As this differs between codes, it is implemented by the inheriting class. """ + @abstractmethod + def get_npt_maker(self, n_steps: int) -> Maker: + """ + Get the maker of the NPT MD job, with the settings of this flow. + + Parameters + ---------- + n_steps: int + Number of MD steps. + + Returns + ------- + Maker + """ + @abstractmethod def get_md_maker(self, n_steps: int) -> Maker: """ diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index 22a6228f41..9e1b2a24f4 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -22,6 +22,7 @@ from pymatgen.io.vasp import Incar, Kpoints, Poscar, Xdatcar from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine from pymatgen.phonon.dos import PhononDos +from pymatgen.symmetry.analyzer import SpacegroupAnalyzer from atomate2.common.jobs.pheasy import ( _DEFAULT_FILE_PATHS, @@ -184,11 +185,14 @@ def get_md_restart_structure( return structure -def _read_vasp_md(directory: Path) -> tuple[np.ndarray, np.ndarray, list[str], float]: - """Read the frames, energies and time step of a VASP MD run.""" +def _read_vasp_md( + directory: Path, +) -> tuple[np.ndarray, np.ndarray, np.ndarray, list[str], float]: + """Read the frames, cells, energies and time step of a VASP MD run.""" incar = Incar.from_file(zpath(str(directory / "INCAR"))) xdatcar = Xdatcar(zpath(str(directory / "XDATCAR"))) frac_coords = np.array([frame.frac_coords for frame in xdatcar.structures]) + cells = np.array([frame.lattice.matrix for frame in xdatcar.structures]) species = [str(site.specie) for site in xdatcar.structures[0]] # the free energy F of each ionic step @@ -204,20 +208,67 @@ def _read_vasp_md(directory: Path) -> tuple[np.ndarray, np.ndarray, list[str], f f"{len(energies)} MD steps in OSZICAR. XDATCAR must have a frame at " "every step, with NBLOCK = 1." ) - return frac_coords, np.array(energies), species, float(incar["POTIM"]) + return frac_coords, cells, np.array(energies), species, float(incar["POTIM"]) def _read_ase_md( directory: Path, time_step: float, skip_first: bool -) -> tuple[np.ndarray, np.ndarray, list[str], float]: - """Read the frames and energies of a force field MD run.""" +) -> tuple[np.ndarray, np.ndarray, np.ndarray, list[str], float]: + """Read the frames, cells and energies of a force field MD run.""" frames = ase_read(directory / ASE_TRAJECTORY_FILE, index=":") if skip_first: # the starting structure is the last frame of the previous MD run frames = frames[1:] frac_coords = np.array([atoms.get_scaled_positions() for atoms in frames]) + cells = np.array([atoms.cell[:] for atoms in frames]) energies = np.array([atoms.get_potential_energy() for atoms in frames]) - return frac_coords, energies, frames[0].get_chemical_symbols(), time_step + return frac_coords, cells, energies, frames[0].get_chemical_symbols(), time_step + + +def _read_md( + md_dirs: Sequence[str], md_code: str, reference: Structure, md_time_step: float +) -> tuple[np.ndarray, np.ndarray, np.ndarray, float]: + """ + Read and join the trajectories of MD runs, in order. + + For VASP, XDATCAR, OSZICAR and the POTIM of INCAR are read from each run + directory. For force fields, the ASE trajectory file is read, and + md_time_step is the time step. Returns the fractional coordinates, the cell + and the potential energy of each frame, and the time step in fs. + """ + directories = [Path(strip_hostname(md_dir)) for md_dir in md_dirs] + if len(set(directories)) != len(directories): + raise ValueError( + f"Each MD run must have its own directory, but the directories are " + f"{md_dirs}." + ) + frac_coords, cells, energies, time_steps = [], [], [], set() + for idx, directory in enumerate(directories): + if md_code == "vasp": + coords, cell, energy, species, time_step = _read_vasp_md(directory) + elif md_code == "forcefields": + coords, cell, energy, species, time_step = _read_ase_md( + directory, md_time_step, skip_first=idx > 0 + ) + else: + raise ValueError(f"MD code must be 'vasp' or 'forcefields', not {md_code}.") + if species != [str(site.specie) for site in reference]: + raise ValueError( + f"The atoms of the MD in {directory} are not in the order of the " + "reference supercell." + ) + frac_coords.append(coords) + cells.append(cell) + energies.append(energy) + time_steps.add(time_step) + if len(time_steps) != 1: + raise ValueError(f"The MD runs have different time steps: {time_steps} fs.") + return ( + np.concatenate(frac_coords), + np.concatenate(cells), + np.concatenate(energies), + time_steps.pop(), + ) def _get_displacements(frac_coords: np.ndarray, reference: Structure) -> np.ndarray: @@ -343,6 +394,94 @@ def _assess_trajectory( ) +@job +def get_npt_structure( + npt_dir: str, + md_code: str, + structure: Structure, + supercell_matrix: Matrix3D, + reference: Structure, + temperature: float, + md_time_step: float, + equilibration_time: float, + symprec: float, +) -> dict: + """ + Get the unit cell at the temperature from an NPT MD run. + + The metric tensor L L^T of the supercell, with the lattice vectors as the + rows of L, is averaged over the frames after equilibration_time. Unlike the + lattice vectors, it does not change when the cell rotates. It is converted + to the metric tensor of the unit cell with the supercell matrix and averaged + over the point group of the structure, so that the cell keeps its symmetry. + The new lattice is the stretch of the lattice of the structure, without a + rotation, that has this metric tensor. The atoms keep their fractional + coordinates. The NPT trajectory is checked as in :obj:`select_md_snapshots`. + + Parameters + ---------- + npt_dir: str + Directory of the NPT MD run. + md_code: str + Code of the MD, "vasp" or "forcefields". + structure: Structure + Unit cell whose supercell the NPT MD started from. + supercell_matrix: Matrix3D + Supercell matrix. + reference: Structure + The undisplaced supercell the NPT MD started from. + temperature: float + MD temperature in K. + md_time_step: float + MD time step in fs. Only used for force field trajectories. + equilibration_time: float + Time at the start of the trajectory that is left out, in ps. + symprec: float + Symmetry precision for the point group of the structure. + + Returns + ------- + dict + The unit cell at the temperature and the check of the NPT trajectory. + """ + frac_coords, cells, energies, time_step = _read_md( + [npt_dir], md_code, reference, md_time_step + ) + n_equil = round(equilibration_time * 1000 / time_step) + if n_equil >= len(cells): + raise ValueError( + f"The NPT trajectory has {len(cells)} frames of {time_step} fs, none " + f"of them after the {equilibration_time} ps that are left out." + ) + metric = np.mean([cell @ cell.T for cell in cells[n_equil:]], axis=0) + inv_matrix = np.linalg.inv(np.array(supercell_matrix, dtype=float)) + metric = inv_matrix @ metric @ inv_matrix.T + # a rotation W of fractional coordinates leaves the metric tensor of the + # symmetric cell unchanged, W^T G W = G + analyzer = SpacegroupAnalyzer(structure, symprec=symprec) + rotations = [op.rotation_matrix for op in analyzer.get_symmetry_operations()] + metric = np.mean([rot.T @ metric @ rot for rot in rotations], axis=0) + lattice = structure.lattice.matrix + inv_lattice = np.linalg.inv(lattice) + eigvals, eigvecs = np.linalg.eigh(inv_lattice @ metric @ inv_lattice.T) + stretch = eigvecs @ np.diag(np.sqrt(eigvals)) @ eigvecs.T + npt_structure = Structure( + lattice @ stretch, + structure.species, + structure.frac_coords, + site_properties=structure.site_properties, + ) + + health = _assess_trajectory(frac_coords, energies, reference, temperature) + if not health.is_stable: + warnings.warn( + f"The NPT trajectory did not stay at the reference structure (verdict: " + f"{health.verdict}). The averaged cell may not describe it.", + stacklevel=2, + ) + return {"structure": npt_structure, "trajectory_health": health.model_dump()} + + @job(data=["structures"]) def select_md_snapshots( md_dirs: Sequence[str], @@ -390,35 +529,9 @@ def select_md_snapshots( root mean square displacement of the snapshots in Angstrom, with the displacement of the center of mass removed. The trajectory check. """ - directories = [Path(strip_hostname(md_dir)) for md_dir in md_dirs] - if len(set(directories)) != len(directories): - raise ValueError( - f"Each MD run must have its own directory, but the directories are " - f"{md_dirs}." - ) - frac_coords, energies, time_steps = [], [], set() - for idx, directory in enumerate(directories): - if md_code == "vasp": - coords, energy, species, time_step = _read_vasp_md(directory) - elif md_code == "forcefields": - coords, energy, species, time_step = _read_ase_md( - directory, md_time_step, skip_first=idx > 0 - ) - else: - raise ValueError(f"MD code must be 'vasp' or 'forcefields', not {md_code}.") - if species != [str(site.specie) for site in reference]: - raise ValueError( - f"The atoms of the MD in {directory} are not in the order of the " - "reference supercell." - ) - frac_coords.append(coords) - energies.append(energy) - time_steps.add(time_step) - if len(time_steps) != 1: - raise ValueError(f"The MD runs have different time steps: {time_steps} fs.") - time_step = time_steps.pop() - all_coords = np.concatenate(frac_coords) - all_energies = np.concatenate(energies) + all_coords, _, all_energies, time_step = _read_md( + md_dirs, md_code, reference, md_time_step + ) n_frames = len(all_coords) n_equil = round(equilibration_time * 1000 / time_step) @@ -513,6 +626,15 @@ def fit_finite_temperature_phonons( optimization_run_job_dir: str | None = None, born_run_uuid: str | None = None, born_run_job_dir: str | None = None, + npt_input_structure: Structure | None = None, + pressure: float | None = None, + npt_time: float | None = None, + npt_equilibration_time: float | None = None, + npt_trajectory_health: dict | None = None, + npt_uuid: str | None = None, + npt_dir: str | None = None, + fixed_cell_relax_uuid: str | None = None, + fixed_cell_relax_job_dir: str | None = None, rotational_sum_rule: str | None = "BHH", alpha_min: int = -6, random_seed: int | None = 103, @@ -537,7 +659,8 @@ def fit_finite_temperature_phonons( Parameters ---------- structure: Structure - Relaxed unit cell. This job sorts its atoms by electronegativity. + Unit cell of the NVT MD, the relaxed unit cell or the cell from the NPT + MD. This job sorts its atoms by electronegativity. supercell_matrix: Matrix3D Diagonal supercell matrix. snapshot_data: dict @@ -580,6 +703,24 @@ def fit_finite_temperature_phonons( UUID of the Born charge calculation. born_run_job_dir: str | None Directory of the Born charge calculation. + npt_input_structure: Structure | None + Unit cell whose supercell the NPT MD started from, if there was one. + pressure: float | None + Pressure of the NPT MD in kbar. + npt_time: float | None + Length of the NPT MD in ps. + npt_equilibration_time: float | None + Time at the start of the NPT trajectory that was left out, in ps. + npt_trajectory_health: dict | None + Check of the NPT trajectory. + npt_uuid: str | None + UUID of the NPT MD job. + npt_dir: str | None + Directory of the NPT MD job. + fixed_cell_relax_uuid: str | None + UUID of the relaxation of the atoms in the cell from the NPT MD. + fixed_cell_relax_job_dir: str | None + Directory of the relaxation of the atoms in the cell from the NPT MD. rotational_sum_rule: str | None Rotational sum rule passed to pheasy with --rasr, or None for none. alpha_min: int @@ -753,6 +894,15 @@ def fit_finite_temperature_phonons( epsilon_static=epsilon.tolist() if epsilon is not None else None, md_uuids=md_uuids, md_dirs=md_dirs, + npt_input_structure=npt_input_structure, + pressure=pressure, + npt_time=npt_time, + npt_equilibration_time=npt_equilibration_time, + npt_trajectory_health=npt_trajectory_health, + npt_uuid=npt_uuid, + npt_dir=npt_dir, + fixed_cell_relax_uuid=fixed_cell_relax_uuid, + fixed_cell_relax_job_dir=fixed_cell_relax_job_dir, uuids=PhononUUIDs( optimization_run_uuid=optimization_run_uuid, displacements_uuids=displacement_data["uuids"], diff --git a/src/atomate2/common/schemas/finite_temperature_phonons.py b/src/atomate2/common/schemas/finite_temperature_phonons.py index eae1e3f6c6..e46ea52490 100644 --- a/src/atomate2/common/schemas/finite_temperature_phonons.py +++ b/src/atomate2/common/schemas/finite_temperature_phonons.py @@ -100,7 +100,9 @@ class FiniteTemperaturePhononDoc(StructureMetadata): structure: Structure | None = Field( None, - description="Relaxed unit cell, with its atoms sorted by electronegativity.", + description="Unit cell of the NVT MD and the fit, with its atoms sorted by " + "electronegativity. It is the relaxed unit cell, or the cell from the NPT MD " + "if there was one.", ) temperature: float | None = Field(None, description="MD temperature in K.") code: str | None = Field( @@ -221,6 +223,32 @@ class FiniteTemperaturePhononDoc(StructureMetadata): ) md_uuids: list[str] | None = Field(None, description="UUIDs of the MD jobs.") md_dirs: list[str] | None = Field(None, description="Directories of the MD jobs.") + npt_input_structure: Structure | None = Field( + None, + description="Unit cell whose supercell the NPT MD started from. None without " + "an NPT MD.", + ) + pressure: float | None = Field(None, description="Pressure of the NPT MD in kbar.") + npt_time: float | None = Field(None, description="Length of the NPT MD in ps.") + npt_equilibration_time: float | None = Field( + None, + description="Time at the start of the NPT trajectory left out of the " + "average cell, in ps.", + ) + npt_trajectory_health: TrajectoryHealth | None = Field( + None, description="Check of the NPT trajectory." + ) + npt_uuid: str | None = Field(None, description="UUID of the NPT MD job.") + npt_dir: str | None = Field(None, description="Directory of the NPT MD job.") + fixed_cell_relax_uuid: str | None = Field( + None, + description="UUID of the relaxation of the atoms in the cell from the NPT MD.", + ) + fixed_cell_relax_job_dir: str | None = Field( + None, + description="Directory of the relaxation of the atoms in the cell from the " + "NPT MD.", + ) uuids: PhononUUIDs | None = Field( None, description="UUIDs of the relaxation, the phonon displacement calculations " diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py index 354c7494c8..32e41b3182 100644 --- a/src/atomate2/forcefields/flows/finite_temperature_phonons.py +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -29,6 +29,8 @@ # period of about 40 time steps. With ASE's thermostat mass Q = 3 N k_B T tdamp**2, the # linearised Nose-Hoover period is close to pi * sqrt(2) * tdamp. _NOSE_HOOVER_TDAMP_STEPS = 40 / (math.pi * math.sqrt(2)) +# time constant of the barostat of the NPT MD +_BAROSTAT_PDAMP_STEPS = 1000 def _get_md_maker( @@ -44,7 +46,7 @@ def _get_md_maker( def _get_force_field_md_maker( - maker: BaseFiniteTemperaturePhononMaker, n_steps: int + maker: BaseFiniteTemperaturePhononMaker, n_steps: int, npt: bool = False ) -> ForceFieldMDMaker: """ Get the force field MD maker of one MD job of a finite-temperature flow. @@ -57,35 +59,42 @@ def _get_force_field_md_maker( The finite-temperature phonon maker. n_steps: int Number of MD steps of the job. + npt: bool + If True, get the NPT MD maker from maker.npt_maker. If False, get the + NVT MD maker from maker.md_maker. Returns ------- ForceFieldMDMaker """ - md_maker = maker.md_maker + md_maker = maker.npt_maker if npt else maker.md_maker + name = "NPT maker" if npt else "MD maker" if not isinstance(md_maker, ForceFieldMDMaker): raise TypeError( - f"The MD maker must be a ForceFieldMDMaker, not {type(md_maker).__name__}." + f"The {name} must be a ForceFieldMDMaker, not {type(md_maker).__name__}." ) if md_maker.dynamics is not None or md_maker.ase_md_kwargs: raise ValueError( - "The flow sets the thermostat. The MD maker must not set dynamics or " + f"The flow sets the thermostat. The {name} must not set dynamics or " "ase_md_kwargs." ) - if maker.thermostat == "nose-hoover": + if npt or maker.thermostat == "nose-hoover": dynamics = "nose-hoover-chain" md_kwargs = { "tdamp": _NOSE_HOOVER_TDAMP_STEPS * maker.md_time_step * units.fs, "tchain": 1, } + if npt: + md_kwargs["pdamp"] = _BAROSTAT_PDAMP_STEPS * maker.md_time_step * units.fs else: # AseMDMaker sets its default friction of 10 ps^-1 dynamics = "langevin" md_kwargs = {} return replace( md_maker, - ensemble=MDEnsemble.nvt, + ensemble=MDEnsemble.npt if npt else MDEnsemble.nvt, temperature=maker.temperature, + pressure=maker.pressure if npt else md_maker.pressure, n_steps=n_steps, time_step=maker.md_time_step, dynamics=dynamics, @@ -113,7 +122,11 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): 0 in VASP. The Langevin thermostat has the default friction of :obj:`.AseMDMaker`, 10 ps^-1. The initial velocities of the first MD job follow the Maxwell-Boltzmann distribution, seeded with random_seed, with - zero total momentum. + zero total momentum. The NPT MD, if any, uses ASE's MTKNPT, a Nose-Hoover + chain thermostat and barostat that change the whole cell, whatever the + thermostat setting. Its thermostat time constant is that of the + Nose-Hoover thermostat above, and its barostat time constant is 1000 time + steps. See :obj:`.BaseFiniteTemperaturePhononMaker` for the workflow. @@ -127,6 +140,12 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): born_maker: .Maker | None Maker for the Born effective charges and the dielectric tensor. It is None by default, as in the force field pheasy phonon workflow. + npt_maker: .ForceFieldMDMaker | None + Maker for the NPT MD. It must not set dynamics or ase_md_kwargs. None + skips the NPT MD. + fixed_cell_relax_maker: .ForceFieldRelaxMaker | None + Maker for the relaxation of the atoms in the cell from the NPT MD. It + must keep the cell. md_maker: .ForceFieldMDMaker Maker for the MD. It must not set dynamics or ase_md_kwargs, since the flow sets the thermostat. @@ -181,12 +200,28 @@ def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: """ return _get_force_field_md_maker(self, n_steps) + def get_npt_maker(self, n_steps: int) -> ForceFieldMDMaker: + """ + Get the force field maker of the NPT MD job. + + Parameters + ---------- + n_steps: int + Number of MD steps. + + Returns + ------- + ForceFieldMDMaker + """ + return _get_force_field_md_maker(self, n_steps, npt=True) + @classmethod def from_force_field_name( cls, force_field_name: str | MLFF | dict, calculator_kwargs: dict | None = None, relax_initial_structure: bool = True, + run_npt: bool = False, **kwargs, ) -> Self: """ @@ -204,6 +239,9 @@ def from_force_field_name( The keyword arguments to pass to the calculator. relax_initial_structure: bool = True Whether to relax the initial structure. + run_npt: bool = False + Whether to run an NPT MD with the force field first. The NVT MD then + uses its average cell, with the atoms relaxed in that cell. **kwargs Additional kwargs to pass to ForceFieldFiniteTemperaturePhononMaker. @@ -216,7 +254,20 @@ def from_force_field_name( force_field_name=force_field_name, calculator_kwargs=calculator_kwargs, ) + npt_maker: ForceFieldMDMaker | None = None + fixed_cell_relax_maker: ForceFieldRelaxMaker | None = None + if run_npt: + npt_maker = _get_md_maker(force_field_name, calculator_kwargs) + fixed_cell_relax_maker = ForceFieldRelaxMaker( + force_field_name=force_field_name, + calculator_kwargs=calculator_kwargs, + relax_cell=False, + relax_kwargs={"fmax": 1e-5}, + fix_symmetry=True, + ) kwargs.update( + npt_maker=npt_maker, + fixed_cell_relax_maker=fixed_cell_relax_maker, bulk_relax_maker=( ForceFieldRelaxMaker( force_field_name=force_field_name, @@ -353,6 +404,9 @@ class MLFFMDVaspStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker) md_maker: .ForceFieldMDMaker Maker for the MD. It must not set dynamics or ase_md_kwargs, since the flow sets the thermostat. + npt_maker: .ForceFieldMDMaker | None + Maker for the NPT MD, under the same conditions as md_maker. None skips + the NPT MD. phonon_displacement_maker: .BaseVaspMaker Maker for the static calculations on the snapshots and the undisplaced supercell. @@ -379,6 +433,21 @@ def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: """ return _get_force_field_md_maker(self, n_steps) + def get_npt_maker(self, n_steps: int) -> ForceFieldMDMaker: + """ + Get the force field maker of the NPT MD job. + + Parameters + ---------- + n_steps: int + Number of MD steps. + + Returns + ------- + ForceFieldMDMaker + """ + return _get_force_field_md_maker(self, n_steps, npt=True) + @classmethod def from_force_field_name( cls, diff --git a/src/atomate2/vasp/flows/finite_temperature_phonons.py b/src/atomate2/vasp/flows/finite_temperature_phonons.py index a82e3335ba..97e89f1ac2 100644 --- a/src/atomate2/vasp/flows/finite_temperature_phonons.py +++ b/src/atomate2/vasp/flows/finite_temperature_phonons.py @@ -77,6 +77,16 @@ ) +def _check_md_incar(user_incar: dict, name: str) -> None: + """Check that an MD maker leaves the INCAR tags that the flow sets alone.""" + if tags := sorted(set(_MD_FLOW_TAGS) & set(user_incar)): + raise ValueError(f"The flow sets {tags}. Remove them from the {name}.") + if int(user_incar.get("NBLOCK", 1)) != 1: + raise ValueError( + "The MD must write every step to XDATCAR, so NBLOCK must be 1." + ) + + def _get_relax_maker() -> DoubleRelaxMaker: """Get a tight relaxation with the basis set and smearing of the statics.""" return DoubleRelaxMaker.from_relax_maker( @@ -147,6 +157,14 @@ class FiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): user_incar_settings must not contain IBRION, ISIF, LANGEVIN_GAMMA, MDALGO, NSW, POTIM, SMASS, TEBEG or TEEND, since the flow sets them. NBLOCK must be 1 if it is set. + npt_maker: .MDMaker | None + Maker for the NPT MD, with an :obj:`.MDSetGenerator`, under the same + conditions as md_maker. It must not set PSTRESS either. Its ENCUT should + be larger than that of the NVT MD, since the cell changes. None skips + the NPT MD. + fixed_cell_relax_maker: .Maker | None + Maker for the relaxation of the atoms in the cell from the NPT MD, for + example with ISIF = 2. phonon_displacement_maker: .BaseVaspMaker Maker for the static calculations on the snapshots and the undisplaced supercell. @@ -196,13 +214,7 @@ def get_md_maker(self, n_steps: int) -> MDMaker: "The MD maker must be a VASP MDMaker with an MDSetGenerator." ) generator = md_maker.input_set_generator - user_incar = generator.user_incar_settings - if tags := sorted(set(_MD_FLOW_TAGS) & set(user_incar)): - raise ValueError(f"The flow sets {tags}. Remove them from the MD maker.") - if int(user_incar.get("NBLOCK", 1)) != 1: - raise ValueError( - "The MD must write every step to XDATCAR, so NBLOCK must be 1." - ) + _check_md_incar(generator.user_incar_settings, "MD maker") if isinstance(generator, LangevinMDSetGenerator): if self.thermostat != "langevin": raise ValueError( @@ -223,3 +235,44 @@ def get_md_maker(self, n_steps: int) -> MDMaker: time_step=self.md_time_step, ) return replace(md_maker, input_set_generator=generator) + + def get_npt_maker(self, n_steps: int) -> MDMaker: + """ + Get the VASP maker of the NPT MD job. + + The NPT MD uses the Langevin thermostat with the Parrinello-Rahman + barostat of VASP, MDALGO = 3 with ISIF = 3, as MDSetGenerator sets them + for ensemble="npt". PSTRESS is the pressure of the flow. + + Parameters + ---------- + n_steps: int + Number of MD steps. + + Returns + ------- + MDMaker + """ + md_maker = self.npt_maker + if ( + not isinstance(md_maker, MDMaker) + or type(md_maker.input_set_generator) is not MDSetGenerator + ): + raise TypeError( + "The NPT maker must be a VASP MDMaker with an MDSetGenerator." + ) + generator = md_maker.input_set_generator + user_incar = generator.user_incar_settings + _check_md_incar(user_incar, "NPT maker") + if "PSTRESS" in user_incar: + raise ValueError("The flow sets PSTRESS. Remove it from the NPT maker.") + generator = replace( + generator, + ensemble="npt", + start_temp=self.temperature, + end_temp=self.temperature, + nsteps=n_steps, + time_step=self.md_time_step, + user_incar_settings={**user_incar, "PSTRESS": self.pressure}, + ) + return replace(md_maker, input_set_generator=generator) diff --git a/tests/common/jobs/test_finite_temperature_phonons.py b/tests/common/jobs/test_finite_temperature_phonons.py index d8f755dd30..8bc2833929 100644 --- a/tests/common/jobs/test_finite_temperature_phonons.py +++ b/tests/common/jobs/test_finite_temperature_phonons.py @@ -22,6 +22,7 @@ from pymatgen.io.ase import AseAtomsAdaptor from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure +from atomate2.ase.md import MDEnsemble from atomate2.common.jobs.finite_temperature_phonons import ( ASE_TRAJECTORY_FILE, _assess_trajectory, @@ -30,13 +31,14 @@ fit_finite_temperature_phonons, get_md_restart_structure, get_md_supercell, + get_npt_structure, select_md_snapshots, ) from atomate2.forcefields.flows.finite_temperature_phonons import ( ForceFieldFiniteTemperaturePhononMaker, _get_force_field_md_maker, ) -from atomate2.forcefields.jobs import ForceFieldStaticMaker +from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker from atomate2.forcefields.md import ForceFieldMDMaker EMT_CALCULATOR = {"@module": "ase.calculators.emt", "@callable": "EMT"} @@ -231,10 +233,12 @@ def test_select_md_snapshots_vasp(cu_supercell): ) -def _write_ase_md(directory, reference, frac, energies): +def _write_ase_md(directory, reference, frac, energies, cells=None): frames = [] - for coords, energy in zip(frac, energies, strict=True): + for idx, (coords, energy) in enumerate(zip(frac, energies, strict=True)): atoms = AseAtomsAdaptor.get_atoms(reference) + if cells is not None: + atoms.set_cell(cells[idx]) atoms.set_scaled_positions(coords) atoms.calc = SinglePointCalculator(atoms, energy=energy) frames.append(atoms) @@ -293,6 +297,39 @@ def test_select_md_snapshots_forcefields(cu_supercell): assert output["trajectory_health"]["verdict"] == "melted" +def test_get_npt_structure(cu_supercell): + unit_cell = AseAtomsAdaptor.get_structure(bulk("Cu", "fcc", a=3.61, cubic=True)) + rng = np.random.default_rng(4) + n_frames = 201 + frac = _frames(cu_supercell, n_frames, 0.05, rng) + # the cell is 2% longer in each direction, with random strains, and it + # rotates about the z axis + cells = [] + for angle in rng.uniform(0, 2 * np.pi, n_frames): + strain = np.eye(3) + rng.normal(0, 0.005, (3, 3)) + cos, sin = np.cos(angle), np.sin(angle) + rotation = np.array([[cos, -sin, 0], [sin, cos, 0], [0, 0, 1]]) + cells.append(1.02 * cu_supercell.lattice.matrix @ strain @ rotation.T) + energies = rng.normal(0, 0.01, n_frames) + _write_ase_md(Path("npt"), cu_supercell, frac, energies, cells=cells) + + args = ("forcefields", unit_cell, (2 * np.eye(3)).tolist(), cu_supercell, 300) + output = get_npt_structure.original( + str(Path("npt").resolve()), *args, 2.0, 0.02, 1e-4 + ) + structure = output["structure"] + # the cell stays cubic and keeps the orientation of the unit cell + assert np.allclose( + structure.lattice.matrix, 1.02 * unit_cell.lattice.matrix, atol=5e-3 + ) + assert structure.lattice.abc == pytest.approx([structure.lattice.a] * 3) + assert np.allclose(structure.frac_coords, unit_cell.frac_coords) + assert output["trajectory_health"]["verdict"] == "stable" + + with pytest.raises(ValueError, match="none of them after"): + get_npt_structure.original(str(Path("npt").resolve()), *args, 2.0, 1.0, 1e-4) + + def test_get_md_supercell(): """The supercell has the atom order of phonopy and the magnetic moments.""" structure = Structure( @@ -431,6 +468,14 @@ def test_rms_displacement_matches_mode_sampling(): ({"md_maker": None}, "md_maker and phonon_displacement_maker must be set"), ({"code": "aims"}, "code must be one of"), ({"md_code": None}, "md_code must be one of"), + ( + {"npt_maker": ForceFieldMDMaker(), "npt_equilibration_time": 8.0}, + "npt_equilibration_time must be", + ), + ( + {"fixed_cell_relax_maker": ForceFieldRelaxMaker()}, + "only used with npt_maker", + ), ], ) def test_maker_checks(kwargs, match): @@ -491,6 +536,35 @@ def test_force_field_md_maker(cu_supercell): ) +def test_force_field_npt_maker(cu_supercell): + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT_CALCULATOR, run_npt=True, md_time_step=2.0, pressure=10.0 + ) + npt_maker = maker.get_npt_maker(100) + assert npt_maker.ensemble == MDEnsemble.npt + assert npt_maker.dynamics == "nose-hoover-chain" + assert npt_maker.n_steps == 100 + assert npt_maker.pressure == 10.0 + # a barostat time constant of 1000 steps + assert npt_maker.ase_md_kwargs["pdamp"] / units.fs == pytest.approx(2000) + assert maker.get_md_maker(100).ensemble == MDEnsemble.nvt + # the atoms are relaxed in the cell from the NPT MD + assert not maker.fixed_cell_relax_maker.relax_cell + assert maker.fixed_cell_relax_maker.fix_symmetry + + flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) + names = [job.name for job in flow.jobs] + assert "ASE MD NPT" in names + assert "get_npt_structure" in names + + # no NPT MD by default + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(EMT_CALCULATOR) + assert maker.npt_maker is None + assert maker.fixed_cell_relax_maker is None + flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) + assert not any("NPT" in job.name for job in flow.jobs) + + def _commensurate_frequencies(phonon): matrix = np.linalg.inv(phonon.primitive_matrix) @ phonon.supercell_matrix phonon.run_qpoints(get_commensurate_points(np.rint(matrix).astype(int))) @@ -661,3 +735,42 @@ def test_finite_temperature_phonon_maker_emt(clean_dir): freqs = _commensurate_frequencies(phonon) top = len(freqs) // 3 assert freqs[-top:].mean() == pytest.approx(freqs_0k[-top:].mean(), rel=0.15) + + +def test_finite_temperature_phonon_maker_emt_npt(clean_dir): + """Run the force field workflow with an NPT MD first, with EMT on Cu3Au.""" + structure = Structure( + Lattice.cubic(3.75), + ["Au", "Cu", "Cu", "Cu"], + [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], + ) + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT_CALCULATOR, + run_npt=True, + min_length=7.0, + npt_time=2.0, + npt_equilibration_time=0.5, + md_time=1.0, + md_time_step=2.0, + equilibration_time=0.2, + n_snapshots=10, + ) + flow = maker.make(structure) + responses = run_locally(flow, create_folders=True, ensure_success=True) + doc = responses[flow.output.uuid][1].output + + assert doc.pressure == 0.0 + assert doc.npt_time == 2.0 + assert doc.npt_equilibration_time == 0.5 + assert doc.npt_trajectory_health.verdict == "stable" + assert doc.npt_uuid is not None + assert doc.npt_dir is not None + assert doc.fixed_cell_relax_uuid is not None + # the NVT MD and the fit use the cubic cell from the NPT MD + assert doc.structure.lattice.abc == pytest.approx([doc.structure.lattice.a] * 3) + assert doc.structure.lattice.angles == pytest.approx((90, 90, 90)) + ratio = doc.structure.volume / doc.npt_input_structure.volume + assert ratio != 1 + assert ratio == pytest.approx(1, abs=0.05) + assert doc.trajectory_health.verdict == "stable" + assert not doc.has_imaginary_modes diff --git a/tests/vasp/flows/test_finite_temperature_phonons.py b/tests/vasp/flows/test_finite_temperature_phonons.py index b29e691af6..df64306ed8 100644 --- a/tests/vasp/flows/test_finite_temperature_phonons.py +++ b/tests/vasp/flows/test_finite_temperature_phonons.py @@ -223,6 +223,45 @@ def test_md_maker_checks(): FiniteTemperaturePhononMaker(md_maker=StaticMaker()).get_md_maker(10) +def test_npt_maker(si_structure, nio_supercell): + npt_maker = MDMaker( + input_set_generator=MDSetGenerator(user_incar_settings={"ENCUT": 700}) + ) + maker = FiniteTemperaturePhononMaker( + temperature=600, pressure=5.0, npt_maker=npt_maker + ) + incar = ( + maker.get_npt_maker(100) + .input_set_generator.get_input_set(nio_supercell, potcar_spec=True) + .incar + ) + assert incar["ISIF"] == 3 + assert incar["MDALGO"] == 3 + assert incar["PSTRESS"] == 5.0 + assert incar["TEBEG"] == incar["TEEND"] == 600 + assert incar["NSW"] == 100 + assert incar["ENCUT"] == 700 + flow = maker.make(si_structure) + assert any(job.name.endswith(" NPT") for job in flow.jobs) + + maker = FiniteTemperaturePhononMaker( + npt_maker=MDMaker( + input_set_generator=MDSetGenerator(user_incar_settings={"PSTRESS": 1}) + ) + ) + with pytest.raises(ValueError, match="The flow sets PSTRESS"): + maker.get_npt_maker(10) + maker = FiniteTemperaturePhononMaker( + npt_maker=MDMaker(input_set_generator=LangevinMDSetGenerator()) + ) + with pytest.raises(TypeError, match="VASP MDMaker with an MDSetGenerator"): + maker.get_npt_maker(10) + + # a force field MD gets a force field NPT MD + maker = MLFFMDVaspStaticFiniteTemperaturePhononMaker(npt_maker=ForceFieldMDMaker()) + assert maker.get_npt_maker(10).pressure == 0.0 + + def test_from_force_field_name(): maker = VaspMDMLFFStaticFiniteTemperaturePhononMaker.from_force_field_name( "MACE-MP-0", From cfa5430086a25e8ffd2a331203740069da265fa4 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sun, 4 Oct 2026 12:17:00 -0700 Subject: [PATCH 18/43] Add the NPT section to the finite-temperature phonon tutorial --- tutorials/finite_temperature_phonons.ipynb | 398 +++++++++++++++++++-- 1 file changed, 366 insertions(+), 32 deletions(-) diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 4e7f977520..77dd110a4a 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -11,9 +11,10 @@ "`ForceFieldFiniteTemperaturePhononMaker` workflow. The forces come from three\n", "MACE potentials, so no DFT is needed.\n", "\n", - "Section 1 runs five materials at 100, 300, 500, 700 and 900 K. Ca3Ir4Sn13 is\n", - "worked through step by step. Section 2 tests the length of the MD and the number\n", - "of snapshots for KNaICl.\n", + "Section 1 runs five materials at 100, 300, 500, 700 and 900 K, in the 0 K cell.\n", + "Ca3Ir4Sn13 is worked through step by step. Section 2 runs the same materials in\n", + "the cell at each temperature, found with an NPT MD. Section 3 tests the length\n", + "of the MD and the number of snapshots for KNaICl.\n", "\n", "This workflow is new. It is less tested than the other phonon workflows in\n", "atomate2, and its defaults and output may still change." @@ -39,15 +40,17 @@ "1. The structure is relaxed. The relaxation can be switched off, as done below.\n", "2. A diagonal supercell is built. Its lattice vectors are at least `min_length`\n", " long, 12 Å by default. A supercell matrix can also be given.\n", - "3. An NVT MD run of the supercell at the temperature. The defaults are 8 ps with\n", + "3. Optional, off by default: an NPT MD gives the cell at the temperature.\n", + " Section 2 explains this step.\n", + "4. An NVT MD run of the supercell at the temperature. The defaults are 8 ps with\n", " a 1 fs time step and a Nose-Hoover thermostat.\n", - "4. The first 1 ps of the MD is left out. 50 snapshots are picked, evenly spread\n", + "5. The first 1 ps of the MD is left out. 50 snapshots are picked, evenly spread\n", " over the rest of the trajectory.\n", - "5. The forces on the snapshots and on the undisplaced supercell are computed.\n", - "6. pheasy fits the second-order force constants with LASSO. The displacements\n", + "6. The forces on the snapshots and on the undisplaced supercell are computed.\n", + "7. pheasy fits the second-order force constants with LASSO. The displacements\n", " are measured from the undisplaced supercell. The forces of the undisplaced\n", " supercell are subtracted from the forces of each snapshot.\n", - "7. The band structure and the density of states (DOS) follow from the force\n", + "8. The band structure and the density of states (DOS) follow from the force\n", " constants. Imaginary modes are reported. They are not removed.\n", "\n", "The MD trajectory is also checked. The check looks for melting and for a move\n", @@ -55,8 +58,8 @@ "energy late in the run. The result is stored in the output. A warning is raised\n", "if the check fails, but the fit is still done.\n", "\n", - "The MD runs at constant volume (NVT), at the volume of the starting structure,\n", - "so thermal expansion is not included. The same workflow runs with VASP as\n", + "Without the NPT step, the MD runs at constant volume (NVT), at the volume of\n", + "the starting structure, so thermal expansion is not included. The same workflow runs with VASP as\n", "`atomate2.vasp.flows.finite_temperature_phonons.FiniteTemperaturePhononMaker`.\n", "`atomate2.forcefields.flows.finite_temperature_phonons` also has two mixed\n", "versions. One runs the MD with VASP and the force calculations with a force\n", @@ -355,7 +358,7 @@ "\n", "- `has_imaginary_modes` checks the whole band path. `min_frequency` only covers\n", " the q-points commensurate with the supercell. The fit sets the frequencies at\n", - " these points directly. Everywhere else they are interpolated. Section 2 shows\n", + " these points directly. Everywhere else they are interpolated. Section 3 shows\n", " why the difference matters.\n", "- The force RMSE is the part of the forces that the force constants do not\n", " describe. It grows with temperature, from 0.05 eV/Å at 100 K to 0.29 eV/Å at\n", @@ -479,7 +482,8 @@ "Bi4S3N2 is polar. The Materials Project lists AlAsPt5 and Bi4S3N2 as\n", "theoretical. They are predicted compounds with no known experimental structure.\n", "\n", - "The function below builds and runs one workflow in its own folder. Section 2 uses it as well.\n", + "The function below builds and runs one workflow in its own folder. Sections 2\n", + "and 3 use it as well.\n", "\n", "The loop runs 75 workflows, so it is off by default. Set `RUN_ALL = True` to\n", "run it. Each of our runs took 6 to 36 minutes on one A100 GPU." @@ -516,12 +520,15 @@ " temperature: float,\n", " md_time: float = 8.0,\n", " n_snapshots: int = 50,\n", + " relax: bool = False,\n", + " run_npt: bool = False,\n", ") -> FiniteTemperaturePhononDoc:\n", " \"\"\"Run the finite-temperature phonon workflow and return its output.\"\"\"\n", " maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(\n", " \"MACE-MP-0\",\n", " calculator_kwargs=calc_kwargs(model),\n", - " relax_initial_structure=False,\n", + " relax_initial_structure=relax,\n", + " run_npt=run_npt,\n", " temperature=temperature,\n", " md_time=md_time,\n", " n_snapshots=n_snapshots,\n", @@ -750,16 +757,16 @@ " MACE-MATPES-PBE-0. Its Lindemann ratio there is 0.165 and 0.171. With\n", " MACE-MATPES-r2SCAN-0 it reaches 0.148 at 900 K, just below the limit of 0.15.\n", " No other material reaches the limit up to 900 K. The highest ratio among them\n", - " is 0.136, for Bi4S3N2. Every run keeps the volume of the 0 K cell, see the\n", - " known limitations below.\n", + " is 0.136, for Bi4S3N2. Every run keeps the volume of the 0 K cell. Section 2\n", + " adds thermal expansion.\n", "- Ca3Ir4Sn13 at 100 K is reported as shifted or diffusing with two of the\n", " potentials. With MACE-OMAT-0-medium the mean positions of the atoms moved\n", " 0.13 Å away from the starting structure. This is a little more than 1.5\n", - " times their vibration of 0.11 Å. At 300 K the shift is only 0.05 Å, so it\n", - " does not come from the small difference between the PBEsol and the force\n", - " field positions. In experiment, Ca3Ir4Sn13 has a structural transition near\n", - " 40 K, with soft phonons above it (arXiv:1503.08102). The shift at 100 K may\n", - " be the start of this distortion. We did not check this further." + " times their vibration of 0.11 Å. At 300 K the shift is only 0.05 Å. In\n", + " Section 2 the force field first relaxes the cell and the atoms, and the runs\n", + " at 100 K are stable. So the shift comes from running the force field in a\n", + " cell, and with positions, that are not its own. We did not check which\n", + " distortion the atoms move to." ] }, { @@ -767,7 +774,335 @@ "id": "27", "metadata": {}, "source": [ - "## 2. MD length and number of snapshots for KNaICl\n", + "## 2. Thermal expansion with an NPT MD\n", + "\n", + "In Section 1 every MD ran in the PBEsol cell at 0 K. Two things change this\n", + "cell. Each force field has its own 0 K cell, a little different from the PBEsol\n", + "one. And the crystal expands as it heats up. With `run_npt=True` the workflow\n", + "includes both:\n", + "\n", + "1. The force field relaxes the structure. Keep the default\n", + " `relax_initial_structure=True`, so that the NPT MD starts from the force\n", + " field's own 0 K cell.\n", + "2. An NPT MD of the supercell runs at the temperature and at `pressure`, 0 kbar\n", + " by default. It runs for `npt_time`, 8 ps by default, with the same\n", + " thermostat as the NVT MD and a Martyna-Tobias-Klein barostat.\n", + "3. The cell is averaged over the NPT MD after `npt_equilibration_time`, 2 ps by\n", + " default. The average keeps the symmetry of the structure. The atoms keep\n", + " their fractional coordinates and are then relaxed in the new cell, with the\n", + " cell fixed.\n", + "4. The NVT MD, the snapshots, the fit and the trajectory check follow as in\n", + " Section 1, in the new cell. The relaxed structure in the new cell is the\n", + " undisplaced supercell of the fit.\n", + "\n", + "The NPT trajectory is checked like the NVT one, and the result is stored as\n", + "`npt_trajectory_health`. `structure` holds the cell of the NVT MD and\n", + "`npt_input_structure` the cell that the NPT MD started from.\n", + "\n", + "We run Ca3Ir4Sn13 at 900 K with MACE-OMAT-0-medium." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28", + "metadata": {}, + "outputs": [], + "source": [ + "maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(\n", + " \"MACE-MP-0\",\n", + " calculator_kwargs=calc_kwargs(\"OMAT-0-medium\"),\n", + " run_npt=True,\n", + " temperature=900,\n", + ")\n", + "flow = maker.make(structure, supercell_matrix=[[2, 0, 0], [0, 2, 0], [0, 0, 2]])\n", + "responses = run_locally(\n", + " flow,\n", + " store=JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()}),\n", + " create_folders=True,\n", + " ensure_success=True,\n", + ")\n", + "doc_npt = responses[flow.output.uuid][1].output\n", + "{\n", + " \"lattice at 0 K in A\": doc_npt.npt_input_structure.lattice.abc,\n", + " \"lattice at 900 K in A\": doc_npt.structure.lattice.abc,\n", + " \"volume ratio\": doc_npt.structure.volume / doc_npt.npt_input_structure.volume,\n", + " \"NPT trajectory check\": doc_npt.npt_trajectory_health.verdict,\n", + " \"highest frequency in THz\": float(np.max(doc_npt.phonon_bandstructure.bands)),\n", + " \"imaginary modes on the band path\": doc_npt.has_imaginary_modes,\n", + " \"trajectory check\": doc_npt.trajectory_health.verdict,\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "29", + "metadata": {}, + "source": [ + "Our run took 20 minutes. The NPT MD and the NVT MD took about 8 minutes each\n", + "and the fit 2 minutes. The 0 K cell of MACE-OMAT-0-medium has a lattice\n", + "parameter of 9.825 Å, and its volume is 3.8% larger than that of the PBEsol\n", + "cell. At 900 K the lattice parameter is 9.964 Å, 4.3% more volume. Both\n", + "trajectories were stable. The highest frequency is 4.95 THz, against 5.83 THz\n", + "in the PBEsol cell in Section 1." + ] + }, + { + "cell_type": "markdown", + "id": "30", + "metadata": {}, + "source": [ + "## The other temperatures, potentials and materials\n", + "\n", + "We ran all 75 settings of Section 1 again with `run_npt=True`. To tell the two\n", + "effects apart, we also ran them with the relaxation but without the NPT MD,\n", + "that is in the force field's own 0 K cell. `run_ft` takes both options. The two\n", + "loops run 150 workflows, so they are off by default. Each of our runs took 6 to\n", + "38 minutes on one A100 GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_NPT = False\n", + "if RUN_NPT:\n", + " for name in (\"Ca3Ir4Sn13\", \"AlAsPt5\", \"Zn3P2\", \"Bi4S3N2\", \"Er5Tl3\"):\n", + " mp_id, supercell = MATERIALS[name]\n", + " unit_cell = get_pheasy_structure(mp_id)\n", + " for model in MODEL_FILES:\n", + " for temperature in TEMPERATURES:\n", + " for label, run_npt in ((\"relaxed\", False), (\"npt\", True)):\n", + " docs[name, model, temperature, label] = run_ft(\n", + " unit_cell,\n", + " supercell,\n", + " model,\n", + " f\"runs/{name}_{model}_{temperature}K_{label}\",\n", + " temperature,\n", + " relax=True,\n", + " run_npt=run_npt,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "32", + "metadata": {}, + "source": [ + "## Our results\n", + "\n", + "The next cell holds the results of our runs. The first plot gives the volume\n", + "relative to the PBEsol cell. The point at 0 K is the force field's relaxed cell.\n", + "The second plot gives the highest frequency for each potential in three cells:\n", + "the PBEsol cell of Section 1, the force field's 0 K cell, and the cell from the\n", + "NPT MD." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "33", + "metadata": {}, + "outputs": [], + "source": [ + "# volume relative to the PBEsol cell: the force field's relaxed 0 K cell, then\n", + "# the NPT cell at 100, 300, 500, 700 and 900 K\n", + "VOLUME = {\n", + " \"Ca3Ir4Sn13\": {\n", + " \"OMAT-0-medium\": (1.0382, 1.0420, 1.0517, 1.0612, 1.0716, 1.0828),\n", + " \"MATPES-PBE-0\": (1.0432, 1.0475, 1.0568, 1.0665, 1.0774, 1.0890),\n", + " \"MATPES-r2SCAN-0\": (1.0192, 1.0227, 1.0311, 1.0398, 1.0491, 1.0591),\n", + " },\n", + " \"AlAsPt5\": {\n", + " \"OMAT-0-medium\": (1.0341, 1.0382, 1.0463, 1.0551, 1.0642, 1.0744),\n", + " \"MATPES-PBE-0\": (1.0175, 1.0229, 1.0313, 1.0400, 1.0501, 1.0501),\n", + " \"MATPES-r2SCAN-0\": (1.0021, 1.0061, 1.0133, 1.0210, 1.0302, 1.0392),\n", + " },\n", + " \"Zn3P2\": {\n", + " \"OMAT-0-medium\": (1.0533, 1.0585, 1.0681, 1.0780, 1.0884, 1.1012),\n", + " \"MATPES-PBE-0\": (1.0510, 1.0551, 1.0636, 1.0723, 1.0813, 1.0934),\n", + " \"MATPES-r2SCAN-0\": (1.0087, 1.0125, 1.0211, 1.0301, 1.0387, 1.0491),\n", + " },\n", + " \"Bi4S3N2\": {\n", + " \"OMAT-0-medium\": (1.1075, 1.1153, 1.1269, 1.1424, 1.1515, 1.1741),\n", + " \"MATPES-PBE-0\": (1.0457, 1.0594, 1.0764, 1.0967, 1.1515, 1.1625),\n", + " \"MATPES-r2SCAN-0\": (1.0292, 1.0381, 1.0502, 1.0656, 1.0807, 1.0861),\n", + " },\n", + " \"Er5Tl3\": {\n", + " \"OMAT-0-medium\": (1.0291, 1.0356, 1.0465, 1.0573, 1.0684, 1.0801),\n", + " \"MATPES-PBE-0\": (1.1224, 1.1283, 1.1431, 1.1589, 1.1744, 1.1939),\n", + " \"MATPES-r2SCAN-0\": (1.0646, 1.0697, 1.0806, 1.0925, 1.1034, 1.1164),\n", + " },\n", + "}\n", + "# highest frequency on the band path in THz, at 100, 300, 500, 700 and 900 K,\n", + "# in the force field's relaxed 0 K cell\n", + "MAX_RELAXED = {\n", + " \"Ca3Ir4Sn13\": {\n", + " \"OMAT-0-medium\": (5.57, 5.55, 5.51, 5.45, 5.37),\n", + " \"MATPES-PBE-0\": (5.38, 5.32, 5.25, 5.20, 5.14),\n", + " \"MATPES-r2SCAN-0\": (5.75, 5.74, 5.68, 5.59, 5.56),\n", + " },\n", + " \"AlAsPt5\": {\n", + " \"OMAT-0-medium\": (6.98, 7.07, 7.08, 7.20, 7.21),\n", + " \"MATPES-PBE-0\": (7.15, 7.30, 7.16, 7.04, 8.46),\n", + " \"MATPES-r2SCAN-0\": (7.52, 7.52, 7.49, 7.52, 7.44),\n", + " },\n", + " \"Zn3P2\": {\n", + " \"OMAT-0-medium\": (10.37, 9.96, 9.74, 9.18, 8.45),\n", + " \"MATPES-PBE-0\": (9.97, 9.65, 9.51, 8.96, 7.97),\n", + " \"MATPES-r2SCAN-0\": (11.14, 10.85, 10.62, 10.18, 9.94),\n", + " },\n", + " \"Bi4S3N2\": {\n", + " \"OMAT-0-medium\": (16.73, 15.92, 15.19, 14.78, 14.15),\n", + " \"MATPES-PBE-0\": (15.48, 15.44, 14.61, 14.41, 14.09),\n", + " \"MATPES-r2SCAN-0\": (17.23, 16.61, 16.17, 16.08, 14.72),\n", + " },\n", + " \"Er5Tl3\": {\n", + " \"OMAT-0-medium\": (4.08, 4.00, 3.94, 3.96, 4.02),\n", + " \"MATPES-PBE-0\": (3.67, 3.61, 3.57, 3.52, 3.52),\n", + " \"MATPES-r2SCAN-0\": (3.83, 3.83, 3.72, 3.68, 3.69),\n", + " },\n", + "}\n", + "# the same in the NPT cell\n", + "MAX_NPT = {\n", + " \"Ca3Ir4Sn13\": {\n", + " \"OMAT-0-medium\": (5.50, 5.44, 5.25, 5.12, 4.95),\n", + " \"MATPES-PBE-0\": (5.32, 5.16, 5.02, 4.84, 4.71),\n", + " \"MATPES-r2SCAN-0\": (5.68, 5.65, 5.45, 5.24, 5.10),\n", + " },\n", + " \"AlAsPt5\": {\n", + " \"OMAT-0-medium\": (6.92, 6.95, 6.65, 6.75, 6.60),\n", + " \"MATPES-PBE-0\": (7.15, 7.13, 7.02, 6.75, 6.55),\n", + " \"MATPES-r2SCAN-0\": (7.42, 7.27, 6.97, 6.90, 6.89),\n", + " },\n", + " \"Zn3P2\": {\n", + " \"OMAT-0-medium\": (10.20, 9.99, 9.52, 8.93, 8.26),\n", + " \"MATPES-PBE-0\": (9.90, 9.53, 9.15, 8.74, 7.85),\n", + " \"MATPES-r2SCAN-0\": (11.11, 10.63, 10.45, 9.95, 9.53),\n", + " },\n", + " \"Bi4S3N2\": {\n", + " \"OMAT-0-medium\": (16.61, 15.66, 14.93, 14.28, 14.05),\n", + " \"MATPES-PBE-0\": (15.26, 15.19, 14.34, 13.64, 12.86),\n", + " \"MATPES-r2SCAN-0\": (17.18, 16.15, 15.71, 15.17, 14.13),\n", + " },\n", + " \"Er5Tl3\": {\n", + " \"OMAT-0-medium\": (4.04, 3.88, 3.83, 3.72, 3.72),\n", + " \"MATPES-PBE-0\": (3.65, 3.55, 3.48, 3.34, 3.13),\n", + " \"MATPES-r2SCAN-0\": (3.75, 3.67, 3.63, 3.50, 3.44),\n", + " },\n", + "}\n", + "\n", + "fig, axes = plt.subplots(1, 5, figsize=(16, 3.4))\n", + "for ax, (name, by_model) in zip(axes, VOLUME.items(), strict=True):\n", + " for model, values in by_model.items():\n", + " ax.plot((0, *TEMPERATURES), values, \"o-\", label=model)\n", + " ax.axhline(1, color=\"black\", ls=\"--\", lw=0.8)\n", + " ax.set_title(name)\n", + " ax.set_xlabel(\"Temperature (K)\")\n", + "axes[0].set_ylabel(\"Volume / PBEsol volume\")\n", + "fig.tight_layout()\n", + "fig.legend(\n", + " *axes[0].get_legend_handles_labels(),\n", + " loc=\"upper center\",\n", + " ncol=3,\n", + " bbox_to_anchor=(0.5, 0),\n", + ")\n", + "plt.show()\n", + "\n", + "fig, axes = plt.subplots(3, 5, figsize=(16, 8.5), sharex=True)\n", + "for col, name in enumerate(VOLUME):\n", + " for row, model in enumerate(MODEL_FILES):\n", + " ax = axes[row, col]\n", + " for label, values, style in (\n", + " (\"PBEsol cell\", MAX_FREQUENCY, \"o-\"),\n", + " (\"relaxed 0 K cell\", MAX_RELAXED, \"s--\"),\n", + " (\"NPT cell\", MAX_NPT, \"^:\"),\n", + " ):\n", + " ax.plot(TEMPERATURES, values[name][model], style, label=label)\n", + " if row == 0:\n", + " ax.set_title(name)\n", + " if col == 0:\n", + " ax.set_ylabel(f\"{model}\\nHighest frequency (THz)\")\n", + " if row == 2:\n", + " ax.set_xlabel(\"Temperature (K)\")\n", + "fig.tight_layout()\n", + "fig.legend(\n", + " *axes[0, 0].get_legend_handles_labels(),\n", + " loc=\"upper center\",\n", + " ncol=3,\n", + " bbox_to_anchor=(0.5, 0),\n", + ")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "34", + "metadata": {}, + "source": [ + "We do not compare these runs with the AIMD reference. It used the PBEsol cell\n", + "at every temperature.\n", + "\n", + "- The 0 K cells of the force fields are larger than the PBEsol cell, by up to\n", + " 12% in volume. MACE-OMAT-0-medium and MACE-MATPES-PBE-0 are trained on PBE\n", + " data, and PBE gives larger cells than PBEsol. MACE-MATPES-r2SCAN-0 gives the\n", + " cell closest to PBEsol for four of the five materials. For AlAsPt5 the two\n", + " differ by 0.2%.\n", + "- From 0 K to 900 K the volume grows by 3 to 6.5%. Bi4S3N2 with\n", + " MACE-MATPES-PBE-0 is the exception, with 11%.\n", + "- The larger 0 K cell alone lowers the frequencies. At 300 K the highest\n", + " frequency of Ca3Ir4Sn13 drops from 5.97 THz in the PBEsol cell to 5.55 THz\n", + " in the cell of MACE-OMAT-0-medium. With MACE-MATPES-PBE-0 the 0 K cell of Er5Tl3 is 12% larger, and its\n", + " highest frequency at 300 K drops from 4.07 to 3.61 THz. With\n", + " MACE-MATPES-r2SCAN-0 the cell of Zn3P2 grows by less than 1%, and its highest\n", + " frequency at 300 K stays at 10.85 THz.\n", + "- Thermal expansion lowers the frequencies further. At 100 K the NPT cell\n", + " changes the highest frequency by about 0.2 THz or less. At 900 K it lowers\n", + " it by 0.1 to 0.6 THz in most runs.\n", + "- At constant volume a frequency can also rise with temperature. In the 0 K\n", + " cell, the highest frequency of AlAsPt5 with MACE-OMAT-0-medium rises from\n", + " 6.98 THz at 100 K to 7.21 THz at 900 K. In the NPT cell it falls from 6.92 to\n", + " 6.60 THz.\n", + "\n", + "The trajectory check did not report \"stable\" for these runs:\n", + "\n", + "- Zn3P2 at 900 K melts with all three potentials, in the NPT MD and in the NVT\n", + " MD that follows. With MACE-MATPES-r2SCAN-0, its Lindemann ratio in Section 1\n", + " stayed just below the limit, at 0.148. In the NPT cell it is 0.153.\n", + "- Bi4S3N2 melts in the larger cells. In the PBEsol cell of Section 1 none of\n", + " its runs melted. With MACE-OMAT-0-medium the NVT MD is reported as melted\n", + " from 700 K, in the 0 K cell and in the NPT cell. With MACE-MATPES-PBE-0 it\n", + " melts at 900 K in both cells. Its NPT MD is also reported as melted at 500 K\n", + " and as shifted at 700 K, and its volume jumps by 5% between these two\n", + " temperatures. With MACE-MATPES-r2SCAN-0 it melts at 900 K in the NPT cell,\n", + " just above the limit.\n", + "- AlAsPt5 at 900 K with MACE-MATPES-PBE-0 is reported as shifted, in the NVT MD\n", + " in the 0 K cell and in the NPT MD. In the 0 K cell its highest frequency\n", + " jumps to 8.46 THz. In the NPT MD its volume does not grow from 700 to 900 K.\n", + " The atoms move away from the starting structure, so the phonons of these two\n", + " runs do not describe it.\n", + "- Ca3Ir4Sn13 at 100 K is stable in both cells, unlike in Section 1.\n", + "\n", + "Bi4S3N2 has imaginary modes on the band path in all 30 runs. Ca3Ir4Sn13 with\n", + "MACE-MATPES-r2SCAN-0 at 100 K has small ones in both cells, and Er5Tl3 with the\n", + "same potential at 100 K in the 0 K cell. So does the run of Zn3P2 with\n", + "MACE-OMAT-0-medium at 900 K in the 0 K cell, which melted.\n", + "\n", + "A run with the NPT MD took 11 to 38 minutes, against 6 to 30 minutes in the\n", + "0 K cell. To compare a force field with DFT phonons in a given cell, run in\n", + "that cell, as in Section 1. To predict the phonons at a temperature with the\n", + "force field alone, use `run_npt=True`." + ] + }, + { + "cell_type": "markdown", + "id": "35", + "metadata": {}, + "source": [ + "## 3. MD length and number of snapshots for KNaICl\n", "\n", "Two settings control how well the MD samples the temperature:\n", "\n", @@ -787,7 +1122,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28", + "id": "36", "metadata": {}, "outputs": [], "source": [ @@ -812,7 +1147,7 @@ { "cell_type": "code", "execution_count": null, - "id": "29", + "id": "37", "metadata": {}, "outputs": [], "source": [ @@ -881,7 +1216,7 @@ }, { "cell_type": "markdown", - "id": "30", + "id": "38", "metadata": {}, "source": [ "In the plot, a star marks a run with imaginary modes on the band path. The\n", @@ -924,17 +1259,16 @@ }, { "cell_type": "markdown", - "id": "31", + "id": "39", "metadata": {}, "source": [ "## Known limitations\n", "\n", - "The MD runs at constant volume (NVT). At every temperature it keeps the volume\n", - "of the starting structure, here the 0 K PBEsol cell. A real crystal expands as\n", - "it heats up, and the expansion changes the phonons. At high temperature, the\n", - "volume at each temperature should first be found with an NPT run, and the NVT\n", - "run done at that volume. Without this, thermal expansion is missing from the\n", - "force constants and from the trajectory check.\n", + "By default the MD runs at constant volume (NVT). At every temperature it keeps\n", + "the volume of the starting structure, as in Section 1. A real crystal expands as\n", + "it heats up, and the expansion changes the phonons. At high temperature, use\n", + "`run_npt=True` as in Section 2. The NPT cell is the average over one MD run, so\n", + "it carries the noise of that run.\n", "\n", "A machine-learned potential gives no Born charges, so the non-analytical\n", "correction is not applied here. With VASP, the `born_maker` computes them.\n", @@ -946,7 +1280,7 @@ "check whether any of the trajectories reported as melted is a liquid. A warning\n", "is raised and the fit is still done.\n", "\n", - "Every result above comes from one MD trajectory. Section 2 shows that two runs\n", + "Every result above comes from one MD trajectory. Section 3 shows that two runs\n", "with different settings can differ by about 0.04 THz on average and by up to\n", "0.4 THz in the highest frequency." ] From d0cb4bc5baccd3ae45f1a775134b439a1a9c75b7 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sun, 4 Oct 2026 23:10:10 -0700 Subject: [PATCH 19/43] Use a Langevin thermostat for the NVT MD --- docs/user/codes/vasp.md | 42 +- .../flows/finite_temperature_phonons.py | 81 ++-- .../common/jobs/finite_temperature_phonons.py | 149 +++--- src/atomate2/common/jobs/pheasy.py | 6 +- .../schemas/finite_temperature_phonons.py | 21 +- .../flows/finite_temperature_phonons.py | 25 +- .../vasp/flows/finite_temperature_phonons.py | 41 +- src/atomate2/vasp/sets/core.py | 7 +- .../jobs/test_finite_temperature_phonons.py | 337 ++----------- .../flows/test_finite_temperature_phonons.py | 238 +++++++++ .../flows/test_finite_temperature_phonons.py | 11 +- tutorials/finite_temperature_phonons.ipynb | 454 ++++++++++-------- 12 files changed, 702 insertions(+), 710 deletions(-) create mode 100644 tests/forcefields/flows/test_finite_temperature_phonons.py diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index da73ce9fe1..da6fae4fe6 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -415,14 +415,19 @@ They include the anharmonic effects at that temperature, at the volume of the re By default, thermal expansion is not included. The structure is relaxed first. An NVT MD run then samples the displacements at the temperature. -By default, it runs for 8 ps at 300 K with a time step of 1 fs and a Nosé-Hoover thermostat. +By default, it runs for 8 ps at 300 K with a time step of 1 fs and a Langevin thermostat. The first 1 ps is left out, and 50 snapshots are picked evenly spread over the rest. Static calculations give the forces on the snapshots and on the undisplaced supercell. -The displacements are measured from the relaxed positions. +The displacements are measured from the undisplaced supercell. Pheasy then fits the second-order force constants to them with LASSO. As in the pheasy phonon workflow, a `DielectricMaker` computes the Born charges and the dielectric tensor for the non-analytical correction. It needs the `pheasy` extra, like the pheasy phonon workflow above. +```{warning} +This workflow is new and has not been tested widely. +It might still change in future versions. +``` + ```python from atomate2.vasp.flows.finite_temperature_phonons import ( FiniteTemperaturePhononMaker, @@ -431,6 +436,12 @@ from atomate2.vasp.flows.finite_temperature_phonons import ( flow = FiniteTemperaturePhononMaker(temperature=300).make(structure) ``` +The fit only uses the positions of the MD, not its dynamics. +What matters is that the MD samples the canonical ensemble. +A Langevin thermostat does this for every mode ([Bussi and Parrinello](https://doi.org/10.1103/PhysRevE.75.056707)). +A Nosé-Hoover thermostat can leave nearly harmonic modes out of equilibrium ([Legoll et al.](https://doi.org/10.1007/s00205-006-0029-1)), most of all at low temperature. +`thermostat="nose-hoover"` switches to it, but this is not recommended. + The MD uses looser settings than the statics, for example ENCUT = 500 eV instead of 600 eV. Only the forces of the statics enter the fit. The relaxation, the MD and the statics use the same functional, +U, smearing and k-point settings. @@ -439,18 +450,20 @@ Both set ISPIN from the relaxation directory with `auto_ispin`. `md_runs` splits the MD into consecutive jobs, for example to stay within the walltime of a queue. Each job continues from the positions and velocities of the previous one. The thermostat variables start again from zero in each job. +The MD files are read by the job that picks the snapshots, so the MD run directories must be on a file system that this job can read. An NPT MD can be run first to include thermal expansion. Set `npt_maker` to a VASP `MDMaker` with an `MDSetGenerator`, and use a larger ENCUT than for the NVT MD, since the cell changes. The flow runs it at the temperature and at `pressure`, 0 kbar by default, with MDALGO = 3 and ISIF = 3. -Its cell is averaged over the frames after `npt_equilibration_time`, given the symmetry of the relaxed structure, and used for the NVT MD, the statics and the fit. +VASP only runs NPT MD with its Langevin thermostat. +The cell is averaged over the frames after `npt_equilibration_time`, given the symmetry of the relaxed structure, and used for the NVT MD, the statics and the fit. `fixed_cell_relax_maker` can relax the atoms in this cell, for example with ISIF = 2. -With a force field, `from_force_field_name(..., run_npt=True)` sets both makers. The trajectory is also checked before the fit. The check looks for melting and for a move away from the reference structure. It also looks at the drift of the potential energy late in the run. The result is stored in `trajectory_health` of the output `FiniteTemperaturePhononDoc`, and a warning is raised when the check fails. +The limits of the check are rules of thumb, except for the Lindemann ratio of 0.15 at melting ([Saija et al.](https://doi.org/10.1063/1.2208357)). Imaginary modes are counted at the q-points commensurate with the supercell. They are reported and not removed. @@ -462,6 +475,27 @@ Three more makers are in `atomate2.forcefields.flows.finite_temperature_phonons` Each has a `from_force_field_name` method to choose the force field. They need the package of the force field, for example `mace-torch` for MACE. All of them use the same fit. +A force field NPT MD uses ASE's `MTKNPT`, a Nosé-Hoover chain thermostat with the barostat of [Martyna et al.](https://doi.org/10.1063/1.467468). + +```python +from atomate2.forcefields.flows.finite_temperature_phonons import ( + ForceFieldFiniteTemperaturePhononMaker, +) + +maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + "MACE-MP-0", temperature=600, run_npt=True +) +flow = maker.make(structure) +``` + +`run_npt=True` sets the NPT MD and the relaxation of the atoms in its cell. + +Known limitations: + +- pheasy needs a diagonal supercell matrix. +- The MD is classical, so there is no zero-point motion. +- Each result comes from one MD trajectory, so it carries the noise of that trajectory. +- With a force field MD and VASP statics, the trajectory and the forces come from different potential energy surfaces. ### Grüneisen parameter workflow diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 70db6e1001..27507812cd 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -2,7 +2,6 @@ from __future__ import annotations -import numbers from abc import ABC, abstractmethod from dataclasses import dataclass from enum import Enum @@ -31,8 +30,6 @@ from pymatgen.core import Structure SUPPORTED_CODES = frozenset(("vasp", "forcefields")) -_THERMOSTATS = ("nose-hoover", "langevin") -_ROTATIONAL_SUM_RULES = ("BH", "H", "BHH") def _get_force_field(maker: Maker, code: str) -> tuple[str | None, dict | None]: @@ -53,6 +50,18 @@ def _get_force_field(maker: Maker, code: str) -> tuple[str | None, dict | None]: Doi("10.1103/PhysRevB.84.180301"), description="Effective harmonic force constants fitted to MD, as in TDEP.", ) +@due.dcite( + Doi("10.1103/PhysRevB.87.104111"), + description="Temperature dependent effective potential method.", +) +@due.dcite( + Doi("10.1088/1361-648X/acd831"), + description="Implementation strategies in phonopy and phono3py.", +) +@due.dcite( + Doi("10.7566/JPSJ.92.012001"), + description="Phonopy and phono3py.", +) @dataclass class BaseFiniteTemperaturePhononMaker(Maker, ABC): """ @@ -89,6 +98,9 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): potential energy late in the run. The result is stored in the output document. A warning is raised if the check fails, but the fit is still done. + This workflow is new and has not been tested widely. It might still change + in future versions. + .. Note:: The atoms of the relaxed structure are sorted by electronegativity before the supercell is built, as the VASP input sets do. The atoms are @@ -113,7 +125,11 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): n_snapshots: int Number of MD snapshots in the fit. thermostat: Literal["nose-hoover", "langevin"] - Thermostat of the NVT MD. + Thermostat of the NVT MD. Langevin, the default, samples the canonical + ensemble also for nearly harmonic modes (Bussi and Parrinello, Phys. Rev. + E 75, 056707 (2007)). A Nose-Hoover thermostat may leave such modes out + of equilibrium (Legoll et al., Arch. Ration. Mech. Anal. 184, 449 + (2007)). The NPT MD does not use this setting. md_runs: int Number of consecutive MD jobs that make up the trajectory. Each job continues from the positions and velocities of the previous one. The @@ -177,7 +193,7 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): md_time_step: float = 1.0 equilibration_time: float = 1.0 n_snapshots: int = 50 - thermostat: Literal["nose-hoover", "langevin"] = "nose-hoover" + thermostat: Literal["nose-hoover", "langevin"] = "langevin" md_runs: int = 1 npt_time: float = 8.0 npt_equilibration_time: float = 2.0 @@ -209,31 +225,12 @@ def __post_init__(self) -> None: f"{key} must be one of {sorted(SUPPORTED_CODES)}, not " f"{getattr(self, key)!r}." ) - if self.thermostat not in _THERMOSTATS: - raise ValueError( - f"thermostat must be one of {_THERMOSTATS}, not {self.thermostat!r}." - ) - if self.rotational_sum_rule not in (*_ROTATIONAL_SUM_RULES, None): - raise ValueError( - f"rotational_sum_rule must be one of {_ROTATIONAL_SUM_RULES} or " - f"None, not {self.rotational_sum_rule!r}." - ) - for key in ("md_runs", "n_snapshots"): - value = getattr(self, key) - if ( - isinstance(value, bool) - or not isinstance(value, numbers.Integral) - or value < 1 - ): - raise ValueError(f"{key} must be a positive integer, not {value!r}.") - if ( - isinstance(self.alpha_min, bool) - or not isinstance(self.alpha_min, numbers.Integral) - or self.alpha_min >= -2 - ): - raise ValueError( - f"alpha_min must be an integer below -2, not {self.alpha_min!r}." - ) + if self.socket and self.code == "vasp": + raise ValueError("socket is not supported by VASP.") + if min(self.md_runs, self.n_snapshots) < 1: + raise ValueError("md_runs and n_snapshots must be at least 1.") + if self.alpha_min >= -2: + raise ValueError(f"alpha_min must be below -2, not {self.alpha_min}.") if min(self.temperature, self.md_time, self.md_time_step) <= 0: raise ValueError("temperature, md_time and md_time_step must be positive.") n_steps = round(self.md_time * 1000 / self.md_time_step) @@ -267,9 +264,9 @@ def make( self, structure: Structure, prev_dir: str | Path | None = None, - supercell_matrix: Matrix3D | None = None, born: list[Matrix3D] | None = None, epsilon_static: Matrix3D | None = None, + supercell_matrix: Matrix3D | None = None, ) -> Flow: """ Make a flow to calculate effective harmonic phonons at a temperature. @@ -280,17 +277,17 @@ def make( The unit cell. prev_dir: str | Path | None A previous calculation directory. It is passed to the relaxation. - The born job, the MD jobs and the phonon displacement calculations - get the relaxation directory, or this directory if there is no - relaxation. - supercell_matrix: Matrix3D | None - Diagonal supercell matrix. If None, it is chosen from min_length. + All later jobs get the relaxation directory, or this directory if + there is no relaxation. born: list[Matrix3D] | None - Born effective charges of the relaxed structure with its atoms - sorted by electronegativity. If given with epsilon_static, the - born_maker is not run. + Born effective charges of the structure the NVT MD runs in, with its + atoms sorted by electronegativity. This is the relaxed structure, or + the structure at the temperature with npt_maker. If given with + epsilon_static, the born_maker is not run. epsilon_static: Matrix3D | None High-frequency dielectric tensor. + supercell_matrix: Matrix3D | None + Diagonal supercell matrix. If None, it is chosen from min_length. Returns ------- @@ -344,7 +341,6 @@ def make( structure, supercell_matrix, start_job.output, - self.temperature, self.md_time_step, self.npt_equilibration_time, self.symprec, @@ -357,7 +353,7 @@ def make( "npt_equilibration_time": self.npt_equilibration_time, "npt_trajectory_health": npt_cell_job.output["trajectory_health"], "npt_uuid": npt_job.uuid, - "npt_dir": npt_job.output.dir_name, + "npt_job_dir": npt_job.output.dir_name, } structure = npt_cell_job.output["structure"] if self.fixed_cell_relax_maker is not None: @@ -389,7 +385,6 @@ def make( md_dirs, self.md_code, reference, - self.temperature, self.md_time_step, self.equilibration_time, self.n_snapshots, @@ -431,7 +426,7 @@ def make( md_force_field_name=md_force_field_name, md_force_field_kwargs=md_force_field_kwargs, md_uuids=[md_job.uuid for md_job in md_jobs], - md_dirs=md_dirs, + md_job_dirs=md_dirs, optimization_run_uuid=optimization_run_uuid, optimization_run_job_dir=optimization_run_job_dir, born_run_uuid=born_run_uuid, diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index 9e1b2a24f4..58eb86448b 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -39,12 +39,7 @@ FiniteTemperaturePhononDoc, TrajectoryHealth, ) -from atomate2.common.schemas.phonons import ( - ForceConstants, - PhononJobDirs, - PhononUUIDs, - get_factor, -) +from atomate2.common.schemas.phonons import ForceConstants, PhononJobDirs, PhononUUIDs from atomate2.utils.path import strip_hostname if TYPE_CHECKING: @@ -59,16 +54,26 @@ ASE_TRAJECTORY_FILE = "md_trajectory.traj" _KPATH_SCHEME = "seekpath" -# Thresholds of the trajectory check. The MD starts from the reference structure, -# so a large displacement in the first frames means the atom order does not match. +# Limits of the trajectory check +# Rule of thumb: in the first 10 steps thermal motion moves an atom by about a +# tenth of an Angstrom or less, while a wrong atom order moves it by a bond length. +_N_START_FRAMES = 10 _START_LIMIT = 0.5 # Angstrom -_RMS_LIMIT = 1.0 # Angstrom -# Lindemann ratio at melting of an fcc solid, Saija et al., J. Chem. Phys. 124, -# 244504 (2006) +# Lindemann ratio at melting of an fcc solid. It is about 0.18 for a bcc solid. +# Saija et al., J. Chem. Phys. 124, 244504 (2006) _LINDEMANN_LIMIT = 0.15 +# Rule of thumb: u_ref / u_vib = 1.5 means the mean positions moved by about as +# much as the atoms vibrate (u_shift = 1.1 u_vib). _SHIFT_RATIO_LIMIT = 1.5 +# Rule of thumb: the mean positions are only checked if the second half of the +# trajectory lasts at least one period of a 1 THz vibration. +_MIN_SHIFT_WINDOW = 1.0 # ps +# Three sigma rule: without a drift, a change this large has a probability below +# 5% for any unimodal distribution. Pukelsheim, Am. Stat. 48, 88 (1994) _DRIFT_SIGMA = 3.0 -_N_START_FRAMES = 10 +# Rule of thumb: a third of a typical nearest-neighbor distance of 3 Angstrom, +# about twice the vibration at the Lindemann limit for that distance. +_RMS_LIMIT = 1.0 # Angstrom def _get_phonopy( @@ -169,7 +174,7 @@ def get_md_restart_structure( directory = Path(strip_hostname(md_dir)) if md_code == "vasp": structure = Poscar.from_file(zpath(str(directory / "CONTCAR"))).structure - elif md_code == "forcefields": + else: atoms = ase_read(directory / ASE_TRAJECTORY_FILE, index=-1) structure = Structure( atoms.cell[:], @@ -178,8 +183,6 @@ def get_md_restart_structure( coords_are_cartesian=True, site_properties={"velocities": atoms.get_velocities().tolist()}, ) - else: - raise ValueError(f"MD code must be 'vasp' or 'forcefields', not {md_code}.") for key, values in _get_site_properties(reference).items(): structure.add_site_property(key, values) return structure @@ -212,13 +215,12 @@ def _read_vasp_md( def _read_ase_md( - directory: Path, time_step: float, skip_first: bool + directory: Path, time_step: float ) -> tuple[np.ndarray, np.ndarray, np.ndarray, list[str], float]: """Read the frames, cells and energies of a force field MD run.""" - frames = ase_read(directory / ASE_TRAJECTORY_FILE, index=":") - if skip_first: - # the starting structure is the last frame of the previous MD run - frames = frames[1:] + # the first frame is the starting structure, before the first step, which + # XDATCAR leaves out as well + frames = ase_read(directory / ASE_TRAJECTORY_FILE, index=":")[1:] frac_coords = np.array([atoms.get_scaled_positions() for atoms in frames]) cells = np.array([atoms.cell[:] for atoms in frames]) energies = np.array([atoms.get_potential_energy() for atoms in frames]) @@ -236,22 +238,15 @@ def _read_md( md_time_step is the time step. Returns the fractional coordinates, the cell and the potential energy of each frame, and the time step in fs. """ - directories = [Path(strip_hostname(md_dir)) for md_dir in md_dirs] - if len(set(directories)) != len(directories): - raise ValueError( - f"Each MD run must have its own directory, but the directories are " - f"{md_dirs}." - ) - frac_coords, cells, energies, time_steps = [], [], [], set() - for idx, directory in enumerate(directories): + frac_coords, cells, energies = [], [], [] + for md_dir in md_dirs: + directory = Path(strip_hostname(md_dir)) if md_code == "vasp": coords, cell, energy, species, time_step = _read_vasp_md(directory) - elif md_code == "forcefields": + else: coords, cell, energy, species, time_step = _read_ase_md( - directory, md_time_step, skip_first=idx > 0 + directory, md_time_step ) - else: - raise ValueError(f"MD code must be 'vasp' or 'forcefields', not {md_code}.") if species != [str(site.specie) for site in reference]: raise ValueError( f"The atoms of the MD in {directory} are not in the order of the " @@ -260,14 +255,11 @@ def _read_md( frac_coords.append(coords) cells.append(cell) energies.append(energy) - time_steps.add(time_step) - if len(time_steps) != 1: - raise ValueError(f"The MD runs have different time steps: {time_steps} fs.") return ( np.concatenate(frac_coords), np.concatenate(cells), np.concatenate(energies), - time_steps.pop(), + time_step, ) @@ -289,20 +281,22 @@ def _assess_trajectory( frac_coords: np.ndarray, energies: np.ndarray, reference: Structure, - temperature: float, + time_step: float, ) -> TrajectoryHealth: """ Check whether the MD trajectory stayed at the reference structure. The displacement of the center of mass of each frame is removed from its - displacements. The checks are applied in this order. + displacements. The checks are applied in this order. The limits are rules + of thumb, except where a source is given next to them in this module. - A root mean square displacement above 0.5 Angstrom in the first 10 frames means the atoms are not in the order of the reference. - A root mean square vibration u_vib above 0.15 of the nearest-neighbor distance means the structure melted. - A total displacement u_ref above 1.5 times u_vib means the mean - positions moved away from the reference. + positions moved away from the reference. This check is skipped if the + second half of the trajectory is shorter than 1 ps. - A change of the mean potential energy from the second to the last quarter of the frames above 3 times the standard deviation of the energy in the last fifth means the structure transformed (falling energy) @@ -322,8 +316,8 @@ def _assess_trajectory( Potential energy of each frame in eV. reference: Structure The undisplaced supercell. - temperature: float - MD temperature in K. + time_step: float + MD time step in fs. Returns ------- @@ -352,6 +346,10 @@ def _assess_trajectory( d_nn = float(distances.min(axis=1).mean()) lindemann_ratio = u_vib / d_nn shift_ratio = u_ref / max(u_vib, 1e-9) + shifted = ( + shift_ratio > _SHIFT_RATIO_LIMIT + and len(tail) * time_step / 1000 >= _MIN_SHIFT_WINDOW + ) energy = energies / n_atoms quarter = len(energy) // 4 @@ -367,7 +365,7 @@ def _assess_trajectory( verdict = "reference_mismatch" elif lindemann_ratio > _LINDEMANN_LIMIT: verdict = "melted" - elif shift_ratio > _SHIFT_RATIO_LIMIT: + elif shifted: verdict = "transformed" if big_drift and drift < 0 else "shifted_or_diffusing" elif big_drift: verdict = "transformed" if drift < 0 else "disordering" @@ -378,7 +376,6 @@ def _assess_trajectory( return TrajectoryHealth( verdict=verdict, - is_stable=verdict == "stable", n_frames=n_frames, rms_displacement_start=rms_start, rms_displacement_end=rms_end, @@ -390,7 +387,6 @@ def _assess_trajectory( shift_ratio=shift_ratio, energy_drift=drift, energy_fluctuation=fluctuation, - equipartition_rise=1.5 * kB * temperature, ) @@ -401,7 +397,6 @@ def get_npt_structure( structure: Structure, supercell_matrix: Matrix3D, reference: Structure, - temperature: float, md_time_step: float, equilibration_time: float, symprec: float, @@ -430,8 +425,6 @@ def get_npt_structure( Supercell matrix. reference: Structure The undisplaced supercell the NPT MD started from. - temperature: float - MD temperature in K. md_time_step: float MD time step in fs. Only used for force field trajectories. equilibration_time: float @@ -472,8 +465,8 @@ def get_npt_structure( site_properties=structure.site_properties, ) - health = _assess_trajectory(frac_coords, energies, reference, temperature) - if not health.is_stable: + health = _assess_trajectory(frac_coords, energies, reference, time_step) + if health.verdict != "stable": warnings.warn( f"The NPT trajectory did not stay at the reference structure (verdict: " f"{health.verdict}). The averaged cell may not describe it.", @@ -487,7 +480,6 @@ def select_md_snapshots( md_dirs: Sequence[str], md_code: str, reference: Structure, - temperature: float, md_time_step: float, equilibration_time: float, n_snapshots: int, @@ -495,11 +487,11 @@ def select_md_snapshots( """ Pick snapshots from the MD trajectory and check the trajectory. - The trajectories of all MD runs are joined in order, with a frame at every - time step. The time of a frame is its index in the joined trajectory times - the time step, so the first frame is at time zero. The frames of the first - equilibration_time are left out, and n_snapshots frames are picked evenly - spread over the rest. For VASP, XDATCAR, OSZICAR and the POTIM of INCAR are + The trajectories of all MD runs are joined in order, with a frame after + every time step. The time of a frame is its step number times the time + step. The frames of the first equilibration_time are left out, and + n_snapshots frames are picked evenly spread over the rest, from the first + to the last. For VASP, XDATCAR, OSZICAR and the POTIM of INCAR are read from each run directory. For force fields, the ASE trajectory file is read. The run directories must be readable from where this job runs. @@ -511,8 +503,6 @@ def select_md_snapshots( Code of the MD, "vasp" or "forcefields". reference: Structure The undisplaced supercell the MD started from. - temperature: float - MD temperature in K. md_time_step: float MD time step in fs. Only used for force field trajectories. equilibration_time: float @@ -542,8 +532,7 @@ def select_md_snapshots( f"leaving out {equilibration_time} ps, {max(n_left, 0)} frames are " f"left, fewer than the {n_snapshots} snapshots." ) - stride = n_left // n_snapshots - indices = list(range(n_equil, n_frames, stride))[:n_snapshots] + indices = np.linspace(n_equil, n_frames - 1, n_snapshots).round().astype(int) site_properties = _get_site_properties(reference) snapshots = [ @@ -559,8 +548,8 @@ def select_md_snapshots( np.array([_get_displacements(all_coords[idx], reference) for idx in indices]), reference, ) - health = _assess_trajectory(all_coords, all_energies, reference, temperature) - if not health.is_stable: + health = _assess_trajectory(all_coords, all_energies, reference, time_step) + if health.verdict != "stable": warnings.warn( f"The MD trajectory did not stay at the reference structure (verdict: " f"{health.verdict}). The fitted force constants may not describe it.", @@ -568,7 +557,7 @@ def select_md_snapshots( ) return { "structures": [*snapshots, reference], - "snapshot_times": [idx * time_step / 1000 for idx in indices], + "snapshot_times": [(idx + 1) * time_step / 1000 for idx in indices], "md_time": n_frames * time_step / 1000, "rms_displacement": float(np.sqrt(np.mean(np.sum(disps**2, axis=2)))), "trajectory_health": health.model_dump(), @@ -593,7 +582,9 @@ def _get_rms_displacement(phonon: Phonopy, temperature: float, tol: float) -> fl inv_sqrt_mass = 1 / np.sqrt(masses) dynmat = force_constants * np.outer(inv_sqrt_mass, inv_sqrt_mass) eigvals, eigvecs = np.linalg.eigh((dynmat + dynmat.T) / 2) - frequencies = np.sign(eigvals) * np.sqrt(np.abs(eigvals)) * get_factor("vasp") + frequencies = ( + np.sign(eigvals) * np.sqrt(np.abs(eigvals)) * phonon.unit_conversion_factor + ) keep = frequencies > tol weights = np.sum(eigvecs[:, keep] ** 2 / masses[:, None], axis=0) msd = kB * temperature * np.sum(weights / eigvals[keep]) @@ -621,7 +612,7 @@ def fit_finite_temperature_phonons( md_force_field_name: str | None = None, md_force_field_kwargs: dict | None = None, md_uuids: list[str] | None = None, - md_dirs: list[str] | None = None, + md_job_dirs: list[str] | None = None, optimization_run_uuid: str | None = None, optimization_run_job_dir: str | None = None, born_run_uuid: str | None = None, @@ -632,7 +623,7 @@ def fit_finite_temperature_phonons( npt_equilibration_time: float | None = None, npt_trajectory_health: dict | None = None, npt_uuid: str | None = None, - npt_dir: str | None = None, + npt_job_dir: str | None = None, fixed_cell_relax_uuid: str | None = None, fixed_cell_relax_job_dir: str | None = None, rotational_sum_rule: str | None = "BHH", @@ -693,7 +684,7 @@ def fit_finite_temperature_phonons( Keyword arguments of the force field calculator of the MD. md_uuids: list[str] | None UUIDs of the MD jobs. - md_dirs: list[str] | None + md_job_dirs: list[str] | None Directories of the MD jobs. optimization_run_uuid: str | None UUID of the relaxation. @@ -715,7 +706,7 @@ def fit_finite_temperature_phonons( Check of the NPT trajectory. npt_uuid: str | None UUID of the NPT MD job. - npt_dir: str | None + npt_job_dir: str | None Directory of the NPT MD job. fixed_cell_relax_uuid: str | None UUID of the relaxation of the atoms in the cell from the NPT MD. @@ -746,9 +737,6 @@ def fit_finite_temperature_phonons( FiniteTemperaturePhononDoc """ supercell_matrix = np.array(supercell_matrix) - if not np.allclose(supercell_matrix, np.diag(np.diag(supercell_matrix))): - raise ValueError("pheasy needs a diagonal supercell matrix.") - structure = structure.get_sorted_structure() if born is not None and len(born) != len(structure): raise ValueError("The number of Born charges is not the number of atoms.") @@ -757,15 +745,6 @@ def fit_finite_temperature_phonons( forces = np.array(displacement_data["forces"]) structures = displacement_data["displaced_structures"] - if len(structures) != len(snapshot_data["snapshot_times"]) + 1: - raise ValueError( - "The phonon displacement calculations must be the snapshots followed " - "by the undisplaced supercell." - ) - if not np.allclose(structures[-1].frac_coords, supercell.frac_coords, atol=1e-6): - raise ValueError( - "The last phonon displacement calculation is not the undisplaced supercell." - ) residual_forces = forces[-1] fit_forces = forces[:-1] - residual_forces disps = np.array( @@ -778,12 +757,8 @@ def fit_finite_temperature_phonons( np.save(_DEFAULT_FILE_PATHS["harmonic_displacements"], disps) np.save(_DEFAULT_FILE_PATHS["harmonic_force_matrix"], fit_forces) - # Remove the files of an earlier fit. pheasy appends to its log, and a failed - # fit would leave the old force constants behind. log_file = Path(_DEFAULT_FILE_PATHS["harmonic_fit_log"]) - log_file.unlink(missing_ok=True) fc_file = Path(_DEFAULT_FILE_PATHS["force_constants"]) - fc_file.unlink(missing_ok=True) _run_harmonic_fit( supercell_matrix, symprec, @@ -815,6 +790,8 @@ def fit_finite_temperature_phonons( supercell_matrix=phonon.supercell_matrix, ) if not np.all(np.isclose(borns, 0.0)): + # the factor is for forces in eV/Angstrom, as from VASP and the force + # fields phonon.nac_params = { "born": borns, "dielectric": epsilon, @@ -884,7 +861,7 @@ def fit_finite_temperature_phonons( tol_imaginary_modes=tol_imaginary_modes, has_imaginary_modes=has_imaginary_modes, n_imaginary_modes=int(np.sum(frequencies < -tol_imaginary_modes)), - min_frequency=float(frequencies.min()), + lowest_frequency=float(frequencies.min()), phonon_bandstructure=bs_symm_line, phonon_dos=dos, force_constants=ForceConstants(phonon.force_constants.tolist()) @@ -893,14 +870,14 @@ def fit_finite_temperature_phonons( born=borns.tolist() if borns is not None else None, epsilon_static=epsilon.tolist() if epsilon is not None else None, md_uuids=md_uuids, - md_dirs=md_dirs, + md_job_dirs=md_job_dirs, npt_input_structure=npt_input_structure, pressure=pressure, npt_time=npt_time, npt_equilibration_time=npt_equilibration_time, npt_trajectory_health=npt_trajectory_health, npt_uuid=npt_uuid, - npt_dir=npt_dir, + npt_job_dir=npt_job_dir, fixed_cell_relax_uuid=fixed_cell_relax_uuid, fixed_cell_relax_job_dir=fixed_cell_relax_job_dir, uuids=PhononUUIDs( diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 3dcc46e6dc..f64d380b76 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -290,9 +290,9 @@ def _run_harmonic_fit( Fit the second-order force constants with pheasy in the current folder. pheasy reads POSCAR, SPOSCAR and the harmonic displacement and force - matrices, and writes FORCE_CONSTANTS. The caller removes the files of an - earlier fit and checks the result, since the pheasy phonon workflow and - the finite-temperature workflow check different things. + matrices, and writes FORCE_CONSTANTS. The caller checks the result, since + the pheasy phonon workflow and the finite-temperature workflow check + different things. Parameters ---------- diff --git a/src/atomate2/common/schemas/finite_temperature_phonons.py b/src/atomate2/common/schemas/finite_temperature_phonons.py index e46ea52490..db1614a58c 100644 --- a/src/atomate2/common/schemas/finite_temperature_phonons.py +++ b/src/atomate2/common/schemas/finite_temperature_phonons.py @@ -40,7 +40,6 @@ class TrajectoryHealth(BaseModel): "the MD are not in the order of the reference. Every other verdict except " "'stable' means the trajectory left the reference structure.", ) - is_stable: bool | None = Field(None, description="True if the verdict is 'stable'.") n_frames: int | None = Field(None, description="Number of MD frames analysed.") rms_displacement_start: float | None = Field( None, @@ -88,11 +87,6 @@ class TrajectoryHealth(BaseModel): description="Standard deviation of the potential energy in the last fifth of " "the frames, in eV/atom.", ) - equipartition_rise: float | None = Field( - None, - description="Potential energy per atom that a harmonic MD run gains when " - "it starts from the reference structure, 3/2 k_B T, in eV/atom.", - ) class FiniteTemperaturePhononDoc(StructureMetadata): @@ -133,7 +127,8 @@ class FiniteTemperaturePhononDoc(StructureMetadata): md_time_step: float | None = Field(None, description="MD time step in fs.") md_time: float | None = Field( None, - description="Number of MD frames read from disk times the time step, in ps.", + description="Length of the joined MD trajectory, the number of frames times " + "the time step, in ps.", ) equilibration_time: float | None = Field( None, description="Time at the start of the trajectory left out, in ps." @@ -143,8 +138,8 @@ class FiniteTemperaturePhononDoc(StructureMetadata): ) snapshot_times: list[float] | None = Field( None, - description="MD time of each snapshot in ps, with the first frame of the " - "trajectory at time zero.", + description="MD time of each snapshot in ps, its step number times the time " + "step.", ) supercell_matrix: Matrix3D | None = Field( None, description="Supercell matrix of the MD and the statics." @@ -195,7 +190,7 @@ class FiniteTemperaturePhononDoc(StructureMetadata): description="Number of imaginary modes at the q-points commensurate with the " "supercell.", ) - min_frequency: float | None = Field( + lowest_frequency: float | None = Field( None, description="Lowest frequency at the q-points commensurate with the " "supercell, in THz. Imaginary frequencies are negative.", @@ -222,7 +217,9 @@ class FiniteTemperaturePhononDoc(StructureMetadata): "non-analytical correction together with born.", ) md_uuids: list[str] | None = Field(None, description="UUIDs of the MD jobs.") - md_dirs: list[str] | None = Field(None, description="Directories of the MD jobs.") + md_job_dirs: list[str] | None = Field( + None, description="Directories of the MD jobs." + ) npt_input_structure: Structure | None = Field( None, description="Unit cell whose supercell the NPT MD started from. None without " @@ -239,7 +236,7 @@ class FiniteTemperaturePhononDoc(StructureMetadata): None, description="Check of the NPT trajectory." ) npt_uuid: str | None = Field(None, description="UUID of the NPT MD job.") - npt_dir: str | None = Field(None, description="Directory of the NPT MD job.") + npt_job_dir: str | None = Field(None, description="Directory of the NPT MD job.") fixed_cell_relax_uuid: str | None = Field( None, description="UUID of the relaxation of the atoms in the cell from the NPT MD.", diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py index 32e41b3182..704d6522a3 100644 --- a/src/atomate2/forcefields/flows/finite_temperature_phonons.py +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -102,6 +102,7 @@ def _get_force_field_md_maker( traj_file=ASE_TRAJECTORY_FILE, traj_file_fmt="ase", traj_interval=1, + store_trajectory="no", mb_velocity_seed=maker.random_seed, zero_linear_momentum=True, ) @@ -116,17 +117,19 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): force field, MACE-MP-0 by default. Use :obj:`from_force_field_name` to use another one. The MD writes an ASE trajectory file with a frame at every time step. The snapshots are read from this file, and the trajectory is not - stored in the output document of the MD job. The Nose-Hoover thermostat is - ASE's NoseHooverChainNVT with one thermostat variable, like MDALGO = 2 in - VASP. Its time constant gives a period of about 40 time steps, like SMASS = - 0 in VASP. The Langevin thermostat has the default friction of - :obj:`.AseMDMaker`, 10 ps^-1. The initial velocities of the first MD job - follow the Maxwell-Boltzmann distribution, seeded with random_seed, with - zero total momentum. The NPT MD, if any, uses ASE's MTKNPT, a Nose-Hoover - chain thermostat and barostat that change the whole cell, whatever the - thermostat setting. Its thermostat time constant is that of the - Nose-Hoover thermostat above, and its barostat time constant is 1000 time - steps. + stored in the output document of the MD job. The Langevin thermostat has + the default friction of :obj:`.AseMDMaker`, 10 ps^-1. Its random forces + come from numpy's global random number generator, so two runs give + different trajectories. The Nose-Hoover thermostat is ASE's + NoseHooverChainNVT with one thermostat variable, like MDALGO = 2 in VASP. + Its time constant gives a period of about 40 time steps, like SMASS = 0 in + VASP. The initial velocities of the first MD job follow the + Maxwell-Boltzmann distribution, seeded with random_seed, with zero total + momentum. The NPT MD, if any, uses ASE's MTKNPT, a Nose-Hoover chain + thermostat and barostat that change the whole cell, whatever the + thermostat setting (Martyna et al., J. Chem. Phys. 101, 4177 (1994)). Its + thermostat time constant is that of the Nose-Hoover thermostat above, and + its barostat time constant is 1000 time steps. See :obj:`.BaseFiniteTemperaturePhononMaker` for the workflow. diff --git a/src/atomate2/vasp/flows/finite_temperature_phonons.py b/src/atomate2/vasp/flows/finite_temperature_phonons.py index 97e89f1ac2..725da4ea83 100644 --- a/src/atomate2/vasp/flows/finite_temperature_phonons.py +++ b/src/atomate2/vasp/flows/finite_temperature_phonons.py @@ -15,7 +15,6 @@ from atomate2.vasp.sets.core import ( LangevinMDSetGenerator, MDSetGenerator, - StaticSetGenerator, TightRelaxSetGenerator, ) @@ -34,28 +33,19 @@ _MD_INCAR = { "ENCUT": 500, "EDIFF": 1e-5, - "PREC": "Normal", "ALGO": "Normal", "LREAL": "Auto", "NBLOCK": 1, "LWAVE": False, - "LCHARG": False, **_ELECTRONIC_INCAR, } +# changes to the INCAR of PhononDisplacementMaker _STATIC_INCAR = { - "IBRION": 2, - "ISIF": 3, - "NSW": 0, "ENCUT": 600, "ENAUG": 1360, - "EDIFF": 1e-7, "PREC": "Accurate", - "ALGO": "Normal", "LASPH": True, "NELM": 200, - "LREAL": False, - "LAECHG": False, - "LCHARG": False, "LWAVE": False, **_ELECTRONIC_INCAR, } @@ -111,13 +101,9 @@ def _get_md_maker() -> MDMaker: def _get_phonon_displacement_maker() -> PhononDisplacementMaker: """Get the static maker for the forces on the snapshots.""" - return PhononDisplacementMaker( - input_set_generator=StaticSetGenerator( - user_incar_settings=dict(_STATIC_INCAR), - user_kpoints_settings=dict(_KPOINTS), - auto_ispin=True, - ) - ) + maker = PhononDisplacementMaker() + maker.input_set_generator.user_incar_settings.update(_STATIC_INCAR) + return maker @dataclass @@ -130,15 +116,16 @@ class FiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): All three use ISMEAR = 0 with SIGMA = 0.05 and the same reciprocal_density setting of 100. The relaxation is a double tight relaxation with ENCUT = 600 eV, ENAUG = 1360 eV and PREC = Accurate, as in the phonon displacement - calculations. These also use EDIFF = 1e-7. The MD uses ENCUT = 500 eV, - EDIFF = 1e-5 and PREC = Normal, and writes every step to XDATCAR with - NBLOCK = 1. The Nose-Hoover thermostat uses MDALGO = 2 and SMASS = 0. The - Langevin thermostat uses MDALGO = 3 with LANGEVIN_GAMMA = 10 ps^-1 for each - species. VASP draws the initial velocities of the first MD job. The MD and - the phonon displacement calculations start from the magnetic moments of the - relaxed structure, if it has any. They all get the same prev_dir, the - relaxation directory by default. auto_ispin of the MD and of the phonon - displacement calculations sets ISPIN from it. + calculations. These otherwise keep the settings of PhononDisplacementMaker, + such as EDIFF = 1e-7. The MD uses ENCUT = 500 eV, EDIFF = 1e-5 and PREC = + Normal, and writes every step to XDATCAR with NBLOCK = 1. The Langevin + thermostat uses MDALGO = 3 with LANGEVIN_GAMMA = 10 ps^-1 for each species. + The Nose-Hoover thermostat uses MDALGO = 2 and SMASS = 0. VASP draws the + initial velocities of the first MD job. The MD and the phonon displacement + calculations start from the magnetic moments of the relaxed structure, if + it has any. They all get the same prev_dir, the relaxation directory by + default. auto_ispin of the MD and of the phonon displacement calculations + sets ISPIN from it. See :obj:`.BaseFiniteTemperaturePhononMaker` for the workflow. diff --git a/src/atomate2/vasp/sets/core.py b/src/atomate2/vasp/sets/core.py index 19a50ba702..5594d35a89 100644 --- a/src/atomate2/vasp/sets/core.py +++ b/src/atomate2/vasp/sets/core.py @@ -10,7 +10,6 @@ import numpy as np from pymatgen.core.periodic_table import Element -from pymatgen.io.vasp import Poscar try: from pymatgen.io.vasp.sets import LobsterSet # type: ignore[attr-defined] @@ -754,9 +753,9 @@ def incar_updates(self) -> dict: updates = super().incar_updates # the Nose mass is only used by the Nose-Hoover thermostat updates.pop("SMASS", None) - # one value for each species block of the POSCAR - n_species = len(Poscar(self.structure).site_symbols) - updates.update(MDALGO=3, LANGEVIN_GAMMA=[self.langevin_gamma] * n_species) + # one value for each element, as for ensemble="npt" + n_elements = len(self.structure.composition) + updates.update(MDALGO=3, LANGEVIN_GAMMA=[self.langevin_gamma] * n_elements) return updates diff --git a/tests/common/jobs/test_finite_temperature_phonons.py b/tests/common/jobs/test_finite_temperature_phonons.py index 8bc2833929..262dbddabd 100644 --- a/tests/common/jobs/test_finite_temperature_phonons.py +++ b/tests/common/jobs/test_finite_temperature_phonons.py @@ -1,8 +1,6 @@ -"""Tests of the finite-temperature phonon workflow. +"""Tests of the jobs of the finite-temperature phonon workflow. -The end-to-end test runs the force field workflow with ASE's EMT potential, so -it needs no reference data. It lives here and not under tests/forcefields, -because pheasy is only installed in the test-non-ase CI job. +The tests of the whole force field workflow are in tests/forcefields/flows. """ import gzip @@ -15,14 +13,11 @@ from ase.calculators import emt from ase.calculators.singlepoint import SinglePointCalculator from ase.io import write as ase_write -from jobflow import run_locally from phonopy import Phonopy -from phonopy.harmonic.dynmat_to_fc import get_commensurate_points from pymatgen.core import Lattice, Structure from pymatgen.io.ase import AseAtomsAdaptor from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure -from atomate2.ase.md import MDEnsemble from atomate2.common.jobs.finite_temperature_phonons import ( ASE_TRAJECTORY_FILE, _assess_trajectory, @@ -34,15 +29,11 @@ get_npt_structure, select_md_snapshots, ) -from atomate2.forcefields.flows.finite_temperature_phonons import ( - ForceFieldFiniteTemperaturePhononMaker, - _get_force_field_md_maker, -) -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker -from atomate2.forcefields.md import ForceFieldMDMaker -EMT_CALCULATOR = {"@module": "ase.calculators.emt", "@callable": "EMT"} TEMPERATURE = 300.0 +# a long time step, so that the second half of the synthetic trajectories of 400 +# frames lasts 2 ps and the mean positions are checked +TIME_STEP = 10.0 TEST_DIR = Path(__file__).resolve().parents[2] / "test_data" @@ -73,8 +64,8 @@ def _trajectory(reference, rng, sigma=0.05, shift=None, energies=None): return frac, energies -def _verdict(reference, frac, energies): - return _assess_trajectory(frac, energies, reference, TEMPERATURE).verdict +def _verdict(reference, frac, energies, time_step=TIME_STEP): + return _assess_trajectory(frac, energies, reference, time_step).verdict def test_assess_trajectory(cu_supercell): @@ -82,19 +73,17 @@ def test_assess_trajectory(cu_supercell): n_atoms = len(cu_supercell) frac, energies = _trajectory(cu_supercell, rng) - health = _assess_trajectory(frac, energies, cu_supercell, TEMPERATURE) + health = _assess_trajectory(frac, energies, cu_supercell, TIME_STEP) assert health.verdict == "stable" - assert health.is_stable assert health.n_frames == 400 # u_vib is sqrt(3) sigma for Gaussian displacements assert health.u_vib == pytest.approx(np.sqrt(3) * 0.05, rel=0.05) assert health.u_ref**2 == pytest.approx(health.u_shift**2 + health.u_vib**2) assert health.nearest_neighbor_distance == pytest.approx(3.61 / np.sqrt(2)) - assert health.equipartition_rise == pytest.approx(1.5 * units.kB * TEMPERATURE) # a translation of the whole cell is not a displacement moved = frac + np.array([0.1, 0.05, 0]) - health_moved = _assess_trajectory(moved, energies, cu_supercell, TEMPERATURE) + health_moved = _assess_trajectory(moved, energies, cu_supercell, TIME_STEP) assert health_moved.verdict == "stable" assert health_moved.u_ref == pytest.approx(health.u_ref) @@ -105,9 +94,11 @@ def test_assess_trajectory(cu_supercell): # the mean positions move in the second half, with a flat energy shift = rng.normal(0, 0.4, size=(n_atoms, 3)) frac, energies = _trajectory(cu_supercell, rng, shift=shift) - health = _assess_trajectory(frac, energies, cu_supercell, TEMPERATURE) + health = _assess_trajectory(frac, energies, cu_supercell, TIME_STEP) assert health.verdict == "shifted_or_diffusing" assert health.shift_ratio > 1.5 + # in a second half shorter than 1 ps the mean positions are not checked + assert _verdict(cu_supercell, frac, energies, time_step=1.0) == "stable" # the same move with a falling energy is a transformation falling = np.concatenate([np.zeros(200), np.linspace(0, -0.1, 200)]) * n_atoms @@ -121,7 +112,7 @@ def test_assess_trajectory(cu_supercell): # a rising energy at the reference is disordering rising = np.linspace(0, 0.1, 400) * n_atoms frac, energies = _trajectory(cu_supercell, rng, energies=rising) - health = _assess_trajectory(frac, energies, cu_supercell, TEMPERATURE) + health = _assess_trajectory(frac, energies, cu_supercell, TIME_STEP) assert health.verdict == "disordering" assert health.energy_drift == pytest.approx(0.05, rel=0.05) @@ -131,7 +122,7 @@ def test_assess_trajectory(cu_supercell): frac, energies = _trajectory(sparse, rng) move = rng.choice([-2.2, 2.2], size=(len(sparse), 3)) / np.sqrt(3) frac[360:] = _frames(sparse, 40, 0.05, rng, shift=move) - health = _assess_trajectory(frac, energies, sparse, TEMPERATURE) + health = _assess_trajectory(frac, energies, sparse, TIME_STEP) assert health.verdict == "diffusing_or_soft" assert health.rms_displacement_end > 1.0 @@ -141,7 +132,7 @@ def test_assess_trajectory(cu_supercell): assert _verdict(cu_supercell, frac, energies) == "reference_mismatch" # too few frames to compare the quarters - health = _assess_trajectory(frac[:15], energies[:15], cu_supercell, TEMPERATURE) + health = _assess_trajectory(frac[:15], energies[:15], cu_supercell, TIME_STEP) assert health.energy_drift is None @@ -185,43 +176,31 @@ def test_select_md_snapshots_vasp(cu_supercell): md_dirs = ["host:" + str(Path("md1").resolve()), str(Path("md2").resolve())] # 0.1 ps is 50 frames of 2 fs, so 250 frames are left for 10 snapshots - output = select_md_snapshots.original( - md_dirs, "vasp", cu_supercell, TEMPERATURE, 1.0, 0.1, 10 - ) + output = select_md_snapshots.original(md_dirs, "vasp", cu_supercell, 1.0, 0.1, 10) structures = output["structures"] assert len(structures) == 11 assert structures[-1] == cu_supercell - indices = range(50, 300, 25) + # from the first to the last frame after 0.1 ps + indices = [50, 78, 105, 133, 161, 188, 216, 244, 271, 299] for structure, idx in zip(structures[:-1], indices, strict=True): diff = structure.frac_coords - frac[idx] assert np.allclose(diff - np.round(diff), 0, atol=1e-8) - assert output["snapshot_times"] == pytest.approx([idx * 0.002 for idx in indices]) + # XDATCAR has the frames after steps 1 to 300 + assert output["snapshot_times"] == pytest.approx( + [(idx + 1) * 0.002 for idx in indices] + ) assert output["md_time"] == pytest.approx(0.6) assert output["rms_displacement"] == pytest.approx(np.sqrt(3) * 0.05, rel=0.1) assert output["trajectory_health"]["n_frames"] == 300 with pytest.raises(ValueError, match="fewer than the 300 snapshots"): - select_md_snapshots.original( - md_dirs[:1], "vasp", cu_supercell, 300, 1, 0.1, 300 - ) + select_md_snapshots.original(md_dirs[:1], "vasp", cu_supercell, 1, 0.1, 300) # atoms of another species at the same positions other = cu_supercell.copy() other.replace_species({"Cu": "Ag"}) with pytest.raises(ValueError, match="not in the order of the reference"): - select_md_snapshots.original(md_dirs[:1], "vasp", other, 300, 1, 0.1, 10) - - # the same run twice, once with a host name - with pytest.raises(ValueError, match="its own directory"): - select_md_snapshots.original( - [md_dirs[0], str(Path("md1").resolve())], - "vasp", - cu_supercell, - 300, - 1, - 0.1, - 10, - ) + select_md_snapshots.original(md_dirs[:1], "vasp", other, 1, 0.1, 10) Path("md4").mkdir() for name in ("INCAR", "XDATCAR"): @@ -229,7 +208,7 @@ def test_select_md_snapshots_vasp(cu_supercell): (Path("md4") / "OSZICAR").write_text("") with pytest.raises(ValueError, match=r"0 MD steps in OSZICAR\..*NBLOCK = 1"): select_md_snapshots.original( - [str(Path("md4").resolve())], "vasp", cu_supercell, 300, 1, 0.1, 10 + [str(Path("md4").resolve())], "vasp", cu_supercell, 1, 0.1, 10 ) @@ -258,24 +237,24 @@ def test_select_md_snapshots_forcefields(cu_supercell): [str(Path(name).resolve()) for name in ("md1", "md2")], "forcefields", cu_supercell, - 300, 2.0, 0.02, 14, ) - assert output["trajectory_health"]["n_frames"] == 151 - # 10 frames of 2 fs are left out, and 141 frames are left for 14 snapshots - indices = range(10, 150, 10) - assert output["snapshot_times"] == pytest.approx([idx * 0.002 for idx in indices]) + # the starting structure of each run is left out, so frame 0 is step 1 + assert output["trajectory_health"]["n_frames"] == 150 + # 10 frames of 2 fs are left out, and 140 frames are left for 14 snapshots + indices = np.linspace(10, 149, 14).round().astype(int) + assert output["snapshot_times"] == pytest.approx((indices + 1) * 0.002) for structure, idx in zip(output["structures"][:-1], indices, strict=True): - diff = structure.frac_coords - frac[idx] + diff = structure.frac_coords - frac[idx + 1] assert np.allclose(diff - np.round(diff), 0, atol=1e-8) # the snapshots keep the magnetic moments of the reference magmoms = [1.0] * len(cu_supercell) magnetic = cu_supercell.copy(site_properties={"magmom": magmoms}) output = select_md_snapshots.original( - [str(Path("md1").resolve())], "forcefields", magnetic, 300, 2.0, 0.02, 14 + [str(Path("md1").resolve())], "forcefields", magnetic, 2.0, 0.02, 14 ) for structure in output["structures"]: assert structure.site_properties == {"magmom": magmoms} @@ -289,7 +268,6 @@ def test_select_md_snapshots_forcefields(cu_supercell): [str(Path("md3").resolve())], "forcefields", cu_supercell, - 300, 2.0, 0.02, 14, @@ -313,7 +291,7 @@ def test_get_npt_structure(cu_supercell): energies = rng.normal(0, 0.01, n_frames) _write_ase_md(Path("npt"), cu_supercell, frac, energies, cells=cells) - args = ("forcefields", unit_cell, (2 * np.eye(3)).tolist(), cu_supercell, 300) + args = ("forcefields", unit_cell, (2 * np.eye(3)).tolist(), cu_supercell) output = get_npt_structure.original( str(Path("npt").resolve()), *args, 2.0, 0.02, 1e-4 ) @@ -391,9 +369,6 @@ def test_get_md_restart_structure(cu_supercell): assert np.allclose(restart.cart_coords, cu_supercell.cart_coords) assert restart.site_properties["magmom"] == [1.0] * 32 - with pytest.raises(ValueError, match="MD code must be"): - get_md_restart_structure.original("ase", "lammps", reference) - def test_get_rms_displacement(): """An Einstein crystal has = 3 k_B T / k per atom.""" @@ -449,128 +424,6 @@ def test_rms_displacement_matches_mode_sampling(): assert not np.allclose(unweighted, removed, atol=1e-3) -@pytest.mark.parametrize( - ("kwargs", "match"), - [ - ({"thermostat": "berendsen"}, "thermostat must be one of"), - ({"rotational_sum_rule": "X"}, "rotational_sum_rule must be one of"), - ({"md_runs": 0}, "md_runs must be a positive integer"), - ({"n_snapshots": 2.5}, "n_snapshots must be a positive integer"), - ({"alpha_min": -2}, "alpha_min must be an integer below -2"), - ({"alpha_min": -6.0}, "alpha_min must be an integer below -2"), - ({"md_time_step": 0}, "must be positive"), - ({"equilibration_time": 8.0}, "fewer than the 50 snapshots"), - ({"equilibration_time": -1.0}, "fewer than the 50 snapshots"), - ( - {"md_time": 0.01, "equilibration_time": 0, "n_snapshots": 5, "md_runs": 20}, - "larger than the 10", - ), - ({"md_maker": None}, "md_maker and phonon_displacement_maker must be set"), - ({"code": "aims"}, "code must be one of"), - ({"md_code": None}, "md_code must be one of"), - ( - {"npt_maker": ForceFieldMDMaker(), "npt_equilibration_time": 8.0}, - "npt_equilibration_time must be", - ), - ( - {"fixed_cell_relax_maker": ForceFieldRelaxMaker()}, - "only used with npt_maker", - ), - ], -) -def test_maker_checks(kwargs, match): - with pytest.raises(ValueError, match=match): - ForceFieldFiniteTemperaturePhononMaker(**kwargs) - - -def test_force_field_md_maker(cu_supercell): - maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( - EMT_CALCULATOR, - md_time=1.0, - md_time_step=2.0, - equilibration_time=0.5, - md_runs=3, - random_seed=5, - ) - assert maker.get_md_steps() == [167, 167, 166] - md_maker = maker.get_md_maker(167) - assert md_maker.n_steps == 167 - assert md_maker.time_step == 2.0 - assert md_maker.temperature == TEMPERATURE - assert md_maker.mb_velocity_seed == 5 - assert md_maker.dynamics == "nose-hoover-chain" - assert md_maker.ase_md_kwargs["tchain"] == 1 - # a thermostat period of 40 steps, 80 fs - period = np.pi * np.sqrt(2) * md_maker.ase_md_kwargs["tdamp"] / units.fs - assert period == pytest.approx(80.0) - # the maker of the flow is not changed - assert maker.md_maker.n_steps == 1000 - assert maker.md_maker.dynamics is None - # the force field relaxation keeps the symmetry - assert maker.bulk_relax_maker.fix_symmetry - assert ForceFieldFiniteTemperaturePhononMaker().bulk_relax_maker.fix_symmetry - - # the MD jobs have a number only when there are several - flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) - md_names = [job.name for job in flow.jobs if "MD" in job.name] - assert md_names == ["ASE MD 1/3", "ASE MD 2/3", "ASE MD 3/3"] - maker = ForceFieldFiniteTemperaturePhononMaker(md_time=2.0) - flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) - assert [job.name for job in flow.jobs if "MD" in job.name] == ["ASE MD"] - - langevin = ForceFieldFiniteTemperaturePhononMaker( - thermostat="langevin" - ).get_md_maker(10) - # AseMDMaker sets its default friction when the job runs - assert langevin.dynamics == "langevin" - assert langevin.ase_md_kwargs == {} - - maker = ForceFieldFiniteTemperaturePhononMaker( - md_maker=ForceFieldMDMaker(ase_md_kwargs={"tdamp": 10}) - ) - with pytest.raises(ValueError, match="must not set dynamics or ase_md_kwargs"): - maker.get_md_maker(10) - with pytest.raises(TypeError, match="must be a ForceFieldMDMaker"): - _get_force_field_md_maker( - ForceFieldFiniteTemperaturePhononMaker(md_maker=ForceFieldStaticMaker()), 10 - ) - - -def test_force_field_npt_maker(cu_supercell): - maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( - EMT_CALCULATOR, run_npt=True, md_time_step=2.0, pressure=10.0 - ) - npt_maker = maker.get_npt_maker(100) - assert npt_maker.ensemble == MDEnsemble.npt - assert npt_maker.dynamics == "nose-hoover-chain" - assert npt_maker.n_steps == 100 - assert npt_maker.pressure == 10.0 - # a barostat time constant of 1000 steps - assert npt_maker.ase_md_kwargs["pdamp"] / units.fs == pytest.approx(2000) - assert maker.get_md_maker(100).ensemble == MDEnsemble.nvt - # the atoms are relaxed in the cell from the NPT MD - assert not maker.fixed_cell_relax_maker.relax_cell - assert maker.fixed_cell_relax_maker.fix_symmetry - - flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) - names = [job.name for job in flow.jobs] - assert "ASE MD NPT" in names - assert "get_npt_structure" in names - - # no NPT MD by default - maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(EMT_CALCULATOR) - assert maker.npt_maker is None - assert maker.fixed_cell_relax_maker is None - flow = maker.make(cu_supercell, supercell_matrix=np.eye(3).tolist()) - assert not any("NPT" in job.name for job in flow.jobs) - - -def _commensurate_frequencies(phonon): - matrix = np.linalg.inv(phonon.primitive_matrix) @ phonon.supercell_matrix - phonon.run_qpoints(get_commensurate_points(np.rint(matrix).astype(int))) - return np.sort(phonon.qpoints.frequencies.ravel()) - - def _emt_phonon(structure, supercell_matrix): """0 K phonopy object of EMT, with its force constants.""" phonon = Phonopy( @@ -627,7 +480,7 @@ def test_fit_recovers_harmonic_force_constants(): "snapshot_data": snapshot_data, "displacement_data": displacement_data, "temperature": TEMPERATURE, - "thermostat": "nose-hoover", + "thermostat": "langevin", "md_time_step": 1.0, "equilibration_time": 0.5, "code": "forcefields", @@ -652,125 +505,3 @@ def test_fit_recovers_harmonic_force_constants(): with pytest.raises(ValueError, match="number of Born charges"): fit_finite_temperature_phonons.original(born=born[:3], **fit_kwargs) assert Path("FORCE_CONSTANTS").stat().st_mtime_ns == fc_time - - with pytest.raises(ValueError, match="diagonal supercell matrix"): - fit_finite_temperature_phonons.original( - **{**fit_kwargs, "supercell_matrix": [[1, 1, 0], [0, 1, 0], [0, 0, 1]]} - ) - with pytest.raises(ValueError, match="snapshots followed by the undisplaced"): - fit_finite_temperature_phonons.original( - **{**fit_kwargs, "snapshot_data": {"snapshot_times": [0.0] * 19}} - ) - shuffled = { - **displacement_data, - "displaced_structures": [supercell, *snapshots], - } - with pytest.raises(ValueError, match="not the undisplaced supercell"): - fit_finite_temperature_phonons.original( - **{**fit_kwargs, "displacement_data": shuffled} - ) - - -def test_finite_temperature_phonon_maker_emt(clean_dir): - """Run the whole force field workflow with EMT on L1_2 Cu3Au at 300 K.""" - # Au first, so that sorting the atoms by electronegativity reorders them - structure = Structure( - Lattice.cubic(3.75), - ["Au", "Cu", "Cu", "Cu"], - [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], - ) - # a 2x2x2 supercell of the cubic cell, 32 atoms, and 2 ps of MD at 2 fs in - # two MD jobs - maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( - EMT_CALCULATOR, - min_length=7.0, - md_time=2.0, - md_time_step=2.0, - md_runs=2, - equilibration_time=0.5, - n_snapshots=12, - ) - flow = maker.make(structure) - responses = run_locally(flow, create_folders=True, ensure_success=True) - doc = responses[flow.output.uuid][1].output - - assert [str(site.specie) for site in doc.structure] == ["Cu", "Cu", "Cu", "Au"] - assert doc.temperature == TEMPERATURE - assert doc.thermostat == "nose-hoover" - assert doc.md_code == doc.code == "forcefields" - assert doc.md_force_field_name == doc.force_field_name == "ase.calculators.emt.EMT" - assert doc.force_field_kwargs == {} - # 1000 steps and the starting structure - assert doc.md_time == pytest.approx(2.002) - assert doc.n_snapshots == 12 - assert len(doc.snapshot_times) == 12 - assert min(doc.snapshot_times) == pytest.approx(0.5) - assert len(doc.md_uuids) == len(doc.md_dirs) == 2 - assert len(doc.uuids.displacements_uuids) == 13 - assert doc.uuids.optimization_run_uuid is not None - assert doc.uuids.born_run_uuid is None - assert doc.supercell_matrix == ((2, 0, 0), (0, 2, 0), (0, 0, 2)) - assert doc.trajectory_health.verdict == "stable" - assert doc.max_residual_force < 1e-8 - assert 0 < doc.force_rmse < 0.2 - assert doc.lasso_alpha > 0 - # Cu3Au is stable at 300 K - assert not doc.has_imaginary_modes - assert doc.n_imaginary_modes == 0 - assert doc.min_frequency > -0.1 - # the snapshot amplitude agrees with the one of the fitted force constants - assert doc.rms_displacement == pytest.approx( - doc.rms_displacement_from_force_constants, rel=0.25 - ) - force_constants = np.array(doc.force_constants.force_constants) - assert force_constants.shape == (32, 32, 3, 3) - fit_dir = Path(doc.jobdirs.taskdoc_run_job_dir) - for name in ("FORCE_CONSTANTS", "phonopy.yaml", "pheasy_harmonic_fit.log"): - assert (fit_dir / name).exists() - - # at a fixed volume, the frequencies stay close to the 0 K ones of EMT - phonon = _emt_phonon(doc.structure, np.array(doc.supercell_matrix)) - freqs_0k = _commensurate_frequencies(phonon) - phonon.force_constants = force_constants - freqs = _commensurate_frequencies(phonon) - top = len(freqs) // 3 - assert freqs[-top:].mean() == pytest.approx(freqs_0k[-top:].mean(), rel=0.15) - - -def test_finite_temperature_phonon_maker_emt_npt(clean_dir): - """Run the force field workflow with an NPT MD first, with EMT on Cu3Au.""" - structure = Structure( - Lattice.cubic(3.75), - ["Au", "Cu", "Cu", "Cu"], - [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], - ) - maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( - EMT_CALCULATOR, - run_npt=True, - min_length=7.0, - npt_time=2.0, - npt_equilibration_time=0.5, - md_time=1.0, - md_time_step=2.0, - equilibration_time=0.2, - n_snapshots=10, - ) - flow = maker.make(structure) - responses = run_locally(flow, create_folders=True, ensure_success=True) - doc = responses[flow.output.uuid][1].output - - assert doc.pressure == 0.0 - assert doc.npt_time == 2.0 - assert doc.npt_equilibration_time == 0.5 - assert doc.npt_trajectory_health.verdict == "stable" - assert doc.npt_uuid is not None - assert doc.npt_dir is not None - assert doc.fixed_cell_relax_uuid is not None - # the NVT MD and the fit use the cubic cell from the NPT MD - assert doc.structure.lattice.abc == pytest.approx([doc.structure.lattice.a] * 3) - assert doc.structure.lattice.angles == pytest.approx((90, 90, 90)) - ratio = doc.structure.volume / doc.npt_input_structure.volume - assert ratio != 1 - assert ratio == pytest.approx(1, abs=0.05) - assert doc.trajectory_health.verdict == "stable" - assert not doc.has_imaginary_modes diff --git a/tests/forcefields/flows/test_finite_temperature_phonons.py b/tests/forcefields/flows/test_finite_temperature_phonons.py new file mode 100644 index 0000000000..4540b24150 --- /dev/null +++ b/tests/forcefields/flows/test_finite_temperature_phonons.py @@ -0,0 +1,238 @@ +"""Tests for the force field finite-temperature phonon workflow. + +The tests run the workflow with ASE's EMT potential, so they need no reference +data and no machine-learned force field. pheasy is only installed in the +numpy-limited forcefield CI job, so the tests are skipped in the other +forcefield jobs. +""" + +import pytest + +pytest.importorskip("pheasy") + +import numpy as np +from ase import units +from jobflow import run_locally +from pymatgen.core import Lattice, Structure + +from atomate2.ase.md import MDEnsemble +from atomate2.forcefields.flows.finite_temperature_phonons import ( + ForceFieldFiniteTemperaturePhononMaker, + _get_force_field_md_maker, +) +from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.md import ForceFieldMDMaker + +EMT = {"@module": "ase.calculators.emt", "@callable": "EMT"} + + +@pytest.fixture +def cu3au(): + """L1_2 Cu3Au with Au first, so that sorting by electronegativity reorders it.""" + return Structure( + Lattice.cubic(3.75), + ["Au", "Cu", "Cu", "Cu"], + [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], + ) + + +def run_emt_flow(structure, **kwargs): + """Run the force field workflow with EMT and return its output document.""" + # the Langevin thermostat of ASE draws from numpy's global generator + np.random.seed(103) # noqa: NPY002 + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT, min_length=7.0, md_time_step=2.0, **kwargs + ) + flow = maker.make(structure) + responses = run_locally(flow, create_folders=True, ensure_success=True) + return responses[flow.output.uuid][1].output + + +@pytest.mark.parametrize( + ("kwargs", "match"), + [ + ({"md_runs": 0}, "md_runs and n_snapshots must be at least 1"), + ({"alpha_min": -2}, "alpha_min must be below -2"), + ({"md_time_step": 0}, "must be positive"), + ({"equilibration_time": 8.0}, "fewer than the 50 snapshots"), + ({"equilibration_time": -1.0}, "fewer than the 50 snapshots"), + ( + {"md_time": 0.01, "equilibration_time": 0, "n_snapshots": 5, "md_runs": 20}, + "larger than the 10", + ), + ({"md_maker": None}, "md_maker and phonon_displacement_maker must be set"), + ({"code": "aims"}, "code must be one of"), + ({"md_code": None}, "md_code must be one of"), + ({"code": "vasp", "socket": True}, "socket is not supported by VASP"), + ( + {"npt_maker": ForceFieldMDMaker(), "npt_equilibration_time": 8.0}, + "npt_equilibration_time must be", + ), + ( + {"fixed_cell_relax_maker": ForceFieldRelaxMaker()}, + "only used with npt_maker", + ), + ], +) +def test_maker_checks(kwargs, match): + with pytest.raises(ValueError, match=match): + ForceFieldFiniteTemperaturePhononMaker(**kwargs) + + +def test_force_field_md_maker(cu3au): + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT, + md_time=1.0, + md_time_step=2.0, + equilibration_time=0.5, + md_runs=3, + random_seed=5, + ) + assert maker.get_md_steps() == [167, 167, 166] + md_maker = maker.get_md_maker(167) + assert md_maker.n_steps == 167 + assert md_maker.time_step == 2.0 + assert md_maker.temperature == 300 + assert md_maker.mb_velocity_seed == 5 + assert md_maker.store_trajectory == "no" + # Langevin by default, with the default friction of AseMDMaker + assert md_maker.dynamics == "langevin" + assert md_maker.ase_md_kwargs == {} + # the maker of the flow is not changed + assert maker.md_maker.n_steps == 1000 + assert maker.md_maker.dynamics is None + # the force field relaxation keeps the symmetry + assert maker.bulk_relax_maker.fix_symmetry + assert ForceFieldFiniteTemperaturePhononMaker().bulk_relax_maker.fix_symmetry + + # the MD jobs have a number only when there are several + flow = maker.make(cu3au, supercell_matrix=np.eye(3).tolist()) + md_names = [job.name for job in flow.jobs if "MD" in job.name] + assert md_names == ["ASE MD 1/3", "ASE MD 2/3", "ASE MD 3/3"] + maker = ForceFieldFiniteTemperaturePhononMaker(md_time=2.0) + flow = maker.make(cu3au, supercell_matrix=np.eye(3).tolist()) + assert [job.name for job in flow.jobs if "MD" in job.name] == ["ASE MD"] + + nose_hoover = ForceFieldFiniteTemperaturePhononMaker( + thermostat="nose-hoover", md_time_step=2.0 + ).get_md_maker(10) + assert nose_hoover.dynamics == "nose-hoover-chain" + assert nose_hoover.ase_md_kwargs["tchain"] == 1 + # a thermostat period of 40 steps, 80 fs + period = np.pi * np.sqrt(2) * nose_hoover.ase_md_kwargs["tdamp"] / units.fs + assert period == pytest.approx(80.0) + + maker = ForceFieldFiniteTemperaturePhononMaker( + md_maker=ForceFieldMDMaker(ase_md_kwargs={"tdamp": 10}) + ) + with pytest.raises(ValueError, match="must not set dynamics or ase_md_kwargs"): + maker.get_md_maker(10) + with pytest.raises(TypeError, match="must be a ForceFieldMDMaker"): + _get_force_field_md_maker( + ForceFieldFiniteTemperaturePhononMaker(md_maker=ForceFieldStaticMaker()), 10 + ) + + with pytest.raises(ValueError, match="diagonal supercell matrix"): + maker.make(cu3au, supercell_matrix=[[1, 1, 0], [0, 1, 0], [0, 0, 1]]) + + +def test_force_field_npt_maker(cu3au): + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT, run_npt=True, md_time_step=2.0, pressure=10.0 + ) + npt_maker = maker.get_npt_maker(100) + assert npt_maker.ensemble == MDEnsemble.npt + assert npt_maker.dynamics == "nose-hoover-chain" + assert npt_maker.n_steps == 100 + assert npt_maker.pressure == 10.0 + # a barostat time constant of 1000 steps + assert npt_maker.ase_md_kwargs["pdamp"] / units.fs == pytest.approx(2000) + assert maker.get_md_maker(100).ensemble == MDEnsemble.nvt + # the atoms are relaxed in the cell from the NPT MD + assert not maker.fixed_cell_relax_maker.relax_cell + assert maker.fixed_cell_relax_maker.fix_symmetry + + flow = maker.make(cu3au, supercell_matrix=np.eye(3).tolist()) + names = [job.name for job in flow.jobs] + assert "ASE MD NPT" in names + assert "get_npt_structure" in names + + # no NPT MD by default + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(EMT) + assert maker.npt_maker is None + assert maker.fixed_cell_relax_maker is None + flow = maker.make(cu3au, supercell_matrix=np.eye(3).tolist()) + assert not any("NPT" in job.name for job in flow.jobs) + + +def test_finite_temperature_phonon_maker_emt(clean_dir, cu3au): + """Run the whole workflow with EMT on Cu3Au at 300 K.""" + # a 2x2x2 supercell of the cubic cell, 32 atoms, and 2 ps of MD at 2 fs in + # two MD jobs + doc = run_emt_flow( + cu3au, md_time=2.0, md_runs=2, equilibration_time=0.5, n_snapshots=12 + ) + + assert [str(site.specie) for site in doc.structure] == ["Cu", "Cu", "Cu", "Au"] + assert doc.temperature == 300 + assert doc.thermostat == "langevin" + assert doc.md_code == doc.code == "forcefields" + assert doc.md_force_field_name == doc.force_field_name == "ase.calculators.emt.EMT" + assert doc.force_field_kwargs == {} + assert doc.md_time == pytest.approx(2.0) + assert doc.n_snapshots == 12 + # 250 steps of 2 fs are left out + assert doc.snapshot_times[0] == pytest.approx(0.502) + assert doc.snapshot_times[-1] == pytest.approx(2.0) + assert len(doc.md_uuids) == len(doc.md_job_dirs) == 2 + assert len(doc.uuids.displacements_uuids) == 13 + assert doc.uuids.optimization_run_uuid is not None + assert doc.uuids.born_run_uuid is None + assert doc.supercell_matrix == ((2, 0, 0), (0, 2, 0), (0, 0, 2)) + assert doc.trajectory_health.verdict == "stable" + assert doc.max_residual_force < 1e-8 + assert np.array(doc.force_constants.force_constants).shape == (32, 32, 3, 3) + # Cu3Au is stable at 300 K + assert not doc.has_imaginary_modes + assert doc.n_imaginary_modes == 0 + # the snapshot amplitude agrees with the one of the fitted force constants + assert doc.rms_displacement == pytest.approx( + doc.rms_displacement_from_force_constants, rel=0.25 + ) + # values of this run, to catch changes of the results + assert np.max(doc.phonon_bandstructure.bands) == pytest.approx(6.815, rel=0.05) + # the acoustic modes at Gamma + assert doc.lowest_frequency == pytest.approx(0, abs=1e-3) + assert doc.rms_displacement == pytest.approx(0.1235, rel=0.05) + assert doc.force_rmse == pytest.approx(0.1045, rel=0.15) + + +def test_finite_temperature_phonon_maker_emt_npt(clean_dir, cu3au): + """Run the workflow with an NPT MD first, with EMT on Cu3Au at 300 K.""" + doc = run_emt_flow( + cu3au, + run_npt=True, + npt_time=2.0, + npt_equilibration_time=0.5, + md_time=1.0, + equilibration_time=0.2, + n_snapshots=10, + ) + + assert doc.pressure == 0.0 + assert doc.npt_time == 2.0 + assert doc.npt_equilibration_time == 0.5 + assert doc.npt_trajectory_health.verdict == "stable" + assert doc.npt_uuid is not None + assert doc.npt_job_dir is not None + assert doc.fixed_cell_relax_uuid is not None + # the atoms are relaxed in the cell from the NPT MD + assert doc.max_residual_force < 1e-3 + # the NVT MD and the fit use the cubic cell from the NPT MD, which expanded + assert doc.structure.lattice.abc == pytest.approx([doc.structure.lattice.a] * 3) + assert doc.structure.lattice.angles == pytest.approx((90, 90, 90)) + assert doc.structure.volume > doc.npt_input_structure.volume + assert doc.structure.lattice.a == pytest.approx(3.7328, rel=2e-3) + assert doc.trajectory_health.verdict == "stable" + assert not doc.has_imaginary_modes + assert np.max(doc.phonon_bandstructure.bands) == pytest.approx(6.554, rel=0.05) diff --git a/tests/vasp/flows/test_finite_temperature_phonons.py b/tests/vasp/flows/test_finite_temperature_phonons.py index df64306ed8..8bc48c7c9e 100644 --- a/tests/vasp/flows/test_finite_temperature_phonons.py +++ b/tests/vasp/flows/test_finite_temperature_phonons.py @@ -72,7 +72,7 @@ def test_vasp_flows(si_structure, maker_cls, md_code, code): args = snapshots.function_args assert [ref.uuid for ref in args[0]] == [md_1.uuid, md_2.uuid] - assert args[1:] == (md_code, reference.output, 300.0, 1.0, 1.0, 50) + assert args[1:] == (md_code, reference.output, 1.0, 1.0, 50) # the statics get the snapshots followed by the undisplaced supercell, and # only VASP statics get the relaxation directory @@ -127,7 +127,9 @@ def test_non_diagonal_supercell_matrix(si_structure): def test_relax_md_and_static_settings_match(nio_supercell, test_dir): """The relaxation, the MD and the statics must see the same Hamiltonian.""" - maker = FiniteTemperaturePhononMaker(md_time=4.0, md_time_step=0.5) + maker = FiniteTemperaturePhononMaker( + md_time=4.0, md_time_step=0.5, thermostat="nose-hoover" + ) md_generator = maker.get_md_maker(maker.get_md_steps()[0]).input_set_generator static_generator = maker.phonon_displacement_maker.input_set_generator relax_generator = maker.bulk_relax_maker.relax_maker1.input_set_generator @@ -181,7 +183,8 @@ def test_relax_md_and_static_settings_match(nio_supercell, test_dir): def test_langevin_thermostat(nio_supercell): - maker = FiniteTemperaturePhononMaker(thermostat="langevin", temperature=600) + # Langevin by default + maker = FiniteTemperaturePhononMaker(temperature=600) md_maker = maker.get_md_maker(100) assert isinstance(md_maker.input_set_generator, LangevinMDSetGenerator) incar = md_maker.input_set_generator.get_input_set( @@ -195,7 +198,7 @@ def test_langevin_thermostat(nio_supercell): assert type(maker.md_maker.input_set_generator) is MDSetGenerator # a Langevin MD maker needs the Langevin thermostat - maker = FiniteTemperaturePhononMaker(md_maker=md_maker) + maker = FiniteTemperaturePhononMaker(md_maker=md_maker, thermostat="nose-hoover") with pytest.raises(ValueError, match="Set thermostat to 'langevin'"): maker.get_md_maker(100) maker = FiniteTemperaturePhononMaker(md_maker=md_maker, thermostat="langevin") diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 77dd110a4a..02876f9844 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -43,7 +43,7 @@ "3. Optional, off by default: an NPT MD gives the cell at the temperature.\n", " Section 2 explains this step.\n", "4. An NVT MD run of the supercell at the temperature. The defaults are 8 ps with\n", - " a 1 fs time step and a Nose-Hoover thermostat.\n", + " a 1 fs time step and a Langevin thermostat.\n", "5. The first 1 ps of the MD is left out. 50 snapshots are picked, evenly spread\n", " over the rest of the trajectory.\n", "6. The forces on the snapshots and on the undisplaced supercell are computed.\n", @@ -70,6 +70,40 @@ "cell_type": "markdown", "id": "2", "metadata": {}, + "source": [ + "## Thermostats\n", + "\n", + "The fit only uses the positions of the atoms in the MD, not how they move. What\n", + "matters is that the snapshots follow the canonical distribution, so that every\n", + "phonon mode holds its share of the thermal energy.\n", + "\n", + "The NVT MD uses a Langevin thermostat. It adds a friction and a random force to\n", + "every atom, and it samples the canonical distribution (Bussi and Parrinello,\n", + "Phys. Rev. E 75, 056707 (2007)). The friction is 10 ps^-1. A Nose-Hoover\n", + "thermostat acts on the whole crystal through one extra variable. It changes the\n", + "motion of the atoms less, which matters for vibrational spectra or diffusion.\n", + "But in a nearly harmonic crystal the modes barely exchange energy, and a\n", + "Nose-Hoover thermostat can leave them out of equilibrium. This is proven for a\n", + "harmonic oscillator (Legoll et al., Arch. Ration. Mech. Anal. 184, 449 (2007)).\n", + "The problem is worst at low temperature, where the crystal is closest to\n", + "harmonic.\n", + "\n", + "The NPT MD of Section 2 uses ASE's `MTKNPT`. It combines a Nose-Hoover\n", + "thermostat with the barostat of Martyna, Tobias and Klein, which samples the\n", + "isothermal-isobaric ensemble (J. Chem. Phys. 101, 4177 (1994)). Only its\n", + "average cell is used. With VASP, the NPT MD uses VASP's Langevin thermostat\n", + "and Parrinello-Rahman barostat, since VASP only runs NPT MD with these.\n", + "\n", + "`thermostat=\"nose-hoover\"` switches the NVT MD to a Nose-Hoover thermostat. We\n", + "do not recommend it. The random forces of the Langevin thermostat come from\n", + "numpy's random number generator, so two runs with the same settings give\n", + "different trajectories." + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, "source": [ "## Installation\n", "\n", @@ -87,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "3", + "id": "4", "metadata": {}, "source": [ "## The potentials\n", @@ -115,7 +149,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -149,7 +183,7 @@ }, { "cell_type": "markdown", - "id": "5", + "id": "6", "metadata": {}, "source": [ "## One calculator for all jobs\n", @@ -164,7 +198,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -190,7 +224,7 @@ }, { "cell_type": "markdown", - "id": "7", + "id": "8", "metadata": {}, "source": [ "## 1. Five materials from 100 K to 900 K\n", @@ -201,7 +235,7 @@ }, { "cell_type": "markdown", - "id": "8", + "id": "9", "metadata": {}, "source": [ "## The structure\n", @@ -215,7 +249,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -245,7 +279,7 @@ }, { "cell_type": "markdown", - "id": "10", + "id": "11", "metadata": {}, "source": [ "## Building the workflow\n", @@ -268,7 +302,7 @@ { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -288,14 +322,14 @@ }, { "cell_type": "markdown", - "id": "12", + "id": "13", "metadata": {}, "source": [ "## Running the workflow\n", "\n", "The flow has one MD job and 51 force calculations, 50 snapshots and the\n", - "undisplaced supercell. On one A100 GPU the whole run took 11 minutes. The MD\n", - "took 9 minutes, the force calculations 11 seconds and the fit 2 minutes.\n", + "undisplaced supercell. On one A100 GPU the whole run took 12 minutes. The MD\n", + "took 9 minutes, the force calculations 12 seconds and the fit 2 minutes.\n", "\n", "`create_folders=True` is needed, because the snapshots are read from the\n", "trajectory file in the folder of the MD job." @@ -304,7 +338,7 @@ { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -318,7 +352,7 @@ }, { "cell_type": "markdown", - "id": "14", + "id": "15", "metadata": {}, "source": [ "## Results\n", @@ -330,7 +364,7 @@ { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -340,7 +374,7 @@ "{\n", " \"highest frequency in THz\": float(np.max(doc.phonon_bandstructure.bands)),\n", " \"imaginary modes on the band path\": doc.has_imaginary_modes,\n", - " \"lowest frequency at the commensurate q-points in THz\": doc.min_frequency,\n", + " \"lowest frequency at the commensurate q-points in THz\": doc.lowest_frequency,\n", " \"LASSO penalty\": doc.lasso_alpha,\n", " \"force RMSE in eV/A\": doc.force_rmse,\n", " \"trajectory check\": health.verdict,\n", @@ -350,13 +384,13 @@ }, { "cell_type": "markdown", - "id": "16", + "id": "17", "metadata": {}, "source": [ "Our run gave a highest frequency of 5.97 THz, no imaginary modes and a stable\n", "trajectory.\n", "\n", - "- `has_imaginary_modes` checks the whole band path. `min_frequency` only covers\n", + "- `has_imaginary_modes` checks the whole band path. `lowest_frequency` only covers\n", " the q-points commensurate with the supercell. The fit sets the frequencies at\n", " these points directly. Everywhere else they are interpolated. Section 3 shows\n", " why the difference matters.\n", @@ -374,7 +408,7 @@ }, { "cell_type": "markdown", - "id": "17", + "id": "18", "metadata": {}, "source": [ "## Comparing with 0 K\n", @@ -389,7 +423,7 @@ { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -457,7 +491,7 @@ }, { "cell_type": "markdown", - "id": "19", + "id": "20", "metadata": {}, "source": [ "At 0 K, Ca3Ir4Sn13 has imaginary modes down to about -0.75 THz. At 300 K they\n", @@ -472,7 +506,7 @@ }, { "cell_type": "markdown", - "id": "20", + "id": "21", "metadata": {}, "source": [ "## The other temperatures, potentials and materials\n", @@ -486,13 +520,13 @@ "and 3 use it as well.\n", "\n", "The loop runs 75 workflows, so it is off by default. Set `RUN_ALL = True` to\n", - "run it. Each of our runs took 6 to 36 minutes on one A100 GPU." + "run it. Each of our runs took 6 to 22 minutes on one A100 GPU." ] }, { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -564,7 +598,7 @@ }, { "cell_type": "markdown", - "id": "22", + "id": "23", "metadata": {}, "source": [ "The next cell plots the results of the loop. For each potential it shows the\n", @@ -576,7 +610,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -626,7 +660,7 @@ }, { "cell_type": "markdown", - "id": "24", + "id": "25", "metadata": {}, "source": [ "## Our results\n", @@ -639,7 +673,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25", + "id": "26", "metadata": {}, "outputs": [], "source": [ @@ -648,29 +682,29 @@ "# highest frequency on the band path in THz, at 100, 300, 500, 700 and 900 K\n", "MAX_FREQUENCY = {\n", " \"Ca3Ir4Sn13\": {\n", - " \"OMAT-0-medium\": (5.98, 5.97, 5.93, 5.90, 5.83),\n", - " \"MATPES-PBE-0\": (5.80, 5.75, 5.67, 5.63, 5.65),\n", - " \"MATPES-r2SCAN-0\": (5.95, 5.98, 5.92, 5.88, 5.78),\n", + " \"OMAT-0-medium\": (6.03, 5.97, 5.94, 5.89, 5.78),\n", + " \"MATPES-PBE-0\": (5.80, 5.75, 5.74, 5.66, 5.64),\n", + " \"MATPES-r2SCAN-0\": (6.03, 5.95, 5.91, 5.89, 5.78),\n", " },\n", " \"AlAsPt5\": {\n", - " \"OMAT-0-medium\": (7.75, 7.73, 7.81, 7.76, 7.71),\n", - " \"MATPES-PBE-0\": (7.65, 7.57, 7.48, 7.59, 7.47),\n", - " \"MATPES-r2SCAN-0\": (7.66, 7.62, 7.77, 7.53, 7.43),\n", + " \"OMAT-0-medium\": (7.80, 7.76, 7.70, 7.77, 7.78),\n", + " \"MATPES-PBE-0\": (7.58, 7.66, 7.68, 7.67, 7.80),\n", + " \"MATPES-r2SCAN-0\": (7.65, 7.58, 7.54, 7.68, 7.58),\n", " },\n", " \"Zn3P2\": {\n", - " \"OMAT-0-medium\": (10.59, 10.36, 10.13, 9.67, 9.17),\n", - " \"MATPES-PBE-0\": (10.33, 10.03, 9.86, 9.53, 8.73),\n", - " \"MATPES-r2SCAN-0\": (11.19, 10.85, 10.66, 10.41, 9.97),\n", + " \"OMAT-0-medium\": (10.73, 10.44, 10.05, 9.80, 9.42),\n", + " \"MATPES-PBE-0\": (10.42, 10.08, 9.91, 9.63, 9.27),\n", + " \"MATPES-r2SCAN-0\": (11.26, 10.91, 10.69, 10.33, 10.14),\n", " },\n", " \"Bi4S3N2\": {\n", - " \"OMAT-0-medium\": (17.15, 16.88, 16.05, 16.26, 15.47),\n", - " \"MATPES-PBE-0\": (15.97, 15.64, 15.40, 14.75, 14.31),\n", - " \"MATPES-r2SCAN-0\": (17.62, 16.94, 17.23, 16.87, 15.54),\n", + " \"OMAT-0-medium\": (17.35, 16.93, 15.98, 15.85, 15.12),\n", + " \"MATPES-PBE-0\": (15.64, 15.21, 15.28, 14.56, 14.53),\n", + " \"MATPES-r2SCAN-0\": (17.60, 17.23, 16.52, 16.00, 15.73),\n", " },\n", " \"Er5Tl3\": {\n", - " \"OMAT-0-medium\": (4.23, 4.22, 4.19, 4.22, 4.23),\n", - " \"MATPES-PBE-0\": (4.11, 4.07, 4.01, 3.93, 3.99),\n", - " \"MATPES-r2SCAN-0\": (4.18, 4.09, 4.08, 3.99, 3.96),\n", + " \"OMAT-0-medium\": (4.36, 4.25, 4.28, 4.24, 4.19),\n", + " \"MATPES-PBE-0\": (4.15, 4.12, 4.05, 3.91, 3.86),\n", + " \"MATPES-r2SCAN-0\": (4.18, 4.14, 4.15, 4.11, 3.98),\n", " },\n", "}\n", "# AIMD reference at 300 K: highest frequency in THz, and the mean absolute\n", @@ -688,22 +722,23 @@ " \"MATPES-PBE-0\": 0.17,\n", " \"MATPES-r2SCAN-0\": 0.10,\n", " },\n", - " \"AlAsPt5\": {\"OMAT-0-medium\": 0.11, \"MATPES-PBE-0\": 0.21, \"MATPES-r2SCAN-0\": 0.18},\n", - " \"Zn3P2\": {\"OMAT-0-medium\": 0.19, \"MATPES-PBE-0\": 0.09, \"MATPES-r2SCAN-0\": 0.42},\n", - " \"Bi4S3N2\": {\"OMAT-0-medium\": 0.16, \"MATPES-PBE-0\": 0.43, \"MATPES-r2SCAN-0\": 0.17},\n", - " \"Er5Tl3\": {\"OMAT-0-medium\": 0.17, \"MATPES-PBE-0\": 0.16, \"MATPES-r2SCAN-0\": 0.12},\n", + " \"AlAsPt5\": {\"OMAT-0-medium\": 0.11, \"MATPES-PBE-0\": 0.19, \"MATPES-r2SCAN-0\": 0.17},\n", + " \"Zn3P2\": {\"OMAT-0-medium\": 0.21, \"MATPES-PBE-0\": 0.10, \"MATPES-r2SCAN-0\": 0.44},\n", + " \"Bi4S3N2\": {\"OMAT-0-medium\": 0.15, \"MATPES-PBE-0\": 0.46, \"MATPES-r2SCAN-0\": 0.16},\n", + " \"Er5Tl3\": {\"OMAT-0-medium\": 0.18, \"MATPES-PBE-0\": 0.17, \"MATPES-r2SCAN-0\": 0.13},\n", "}\n", "# runs with imaginary modes on the band path, and runs whose trajectory check\n", "# was not \"stable\"\n", "IMAGINARY = {\n", - " (\"Bi4S3N2\", \"OMAT-0-medium\"): (100, 300, 700),\n", - " (\"Bi4S3N2\", \"MATPES-PBE-0\"): (300, 700, 900),\n", + " (\"AlAsPt5\", \"MATPES-PBE-0\"): (100,),\n", + " (\"Bi4S3N2\", \"OMAT-0-medium\"): (100, 300, 500),\n", + " (\"Bi4S3N2\", \"MATPES-PBE-0\"): (300, 500, 700, 900),\n", " (\"Bi4S3N2\", \"MATPES-r2SCAN-0\"): (100, 300, 500, 700, 900),\n", - " (\"Zn3P2\", \"MATPES-PBE-0\"): (900,),\n", "}\n", "NOT_STABLE = {\n", " (\"Ca3Ir4Sn13\", \"OMAT-0-medium\", 100): \"shifted_or_diffusing\",\n", " (\"Ca3Ir4Sn13\", \"MATPES-r2SCAN-0\", 100): \"shifted_or_diffusing\",\n", + " (\"Er5Tl3\", \"MATPES-r2SCAN-0\", 100): \"shifted_or_diffusing\",\n", " (\"Zn3P2\", \"OMAT-0-medium\", 900): \"melted\",\n", " (\"Zn3P2\", \"MATPES-PBE-0\", 900): \"melted\",\n", "}\n", @@ -730,48 +765,50 @@ }, { "cell_type": "markdown", - "id": "26", + "id": "27", "metadata": {}, "source": [ "The table gives the mean absolute difference from the AIMD reference at 300 K\n", "in THz, over all branches and q-points of the band path.\n", "\n", "- No potential is closest to AIMD for all five materials. MACE-OMAT-0-medium is\n", - " closest for Ca3Ir4Sn13, AlAsPt5 and Bi4S3N2, within 0.07 to 0.16 THz.\n", + " closest for Ca3Ir4Sn13, AlAsPt5 and Bi4S3N2, within 0.07 to 0.15 THz.\n", " MACE-MATPES-r2SCAN-0 is closest for Er5Tl3 and MACE-MATPES-PBE-0 for Zn3P2.\n", - "- MACE-MATPES-PBE-0 gives the lowest frequencies for most materials. For Bi4S3N2 its highest branches lie about\n", - " 1.4 THz below AIMD.\n", + "- MACE-MATPES-PBE-0 gives the lowest frequencies for most materials. For\n", + " Bi4S3N2 its highest branches lie about 1.8 THz below AIMD.\n", "- Most frequencies soften with temperature. The highest frequency of Bi4S3N2\n", - " drops by 1.7 THz from 100 K to 900 K with MACE-OMAT-0-medium. Er5Tl3 barely\n", + " drops by 2.2 THz from 100 K to 900 K with MACE-OMAT-0-medium. AlAsPt5 barely\n", " changes.\n", - "- The imaginary modes at 0 K are gone at every temperature for Ca3Ir4Sn13,\n", - " AlAsPt5, Zn3P2 and Er5Tl3. The one exception is Zn3P2 with MACE-MATPES-PBE-0\n", - " at 900 K, a run that the trajectory check reports as melted. Bi4S3N2 keeps imaginary modes down to -0.7 THz in\n", - " 11 of 15 runs. Its AIMD reference has a small one as well, at -0.12 THz.\n", - " Bi4S3N2 is polar, so these runs and the AIMD reference are compared without\n", - " the non-analytical correction. The force fields give no Born charges.\n", + "- The imaginary modes at 0 K are gone at every temperature for Ca3Ir4Sn13, Zn3P2\n", + " and Er5Tl3. AlAsPt5 keeps a small one, -0.12 THz, with MACE-MATPES-PBE-0 at\n", + " 100 K. Bi4S3N2 keeps imaginary modes down to -0.8 THz in 12 of 15 runs. Its\n", + " AIMD reference has a small one as well, at -0.12 THz. Bi4S3N2 is polar, so\n", + " these runs and the AIMD reference are compared without the non-analytical\n", + " correction. The force fields give no Born charges.\n", "\n", - "The trajectory check did not report \"stable\" for four runs:\n", + "The trajectory check did not report \"stable\" for five runs:\n", "\n", "- By the Lindemann criterion, Zn3P2 melts at 900 K with MACE-OMAT-0-medium and\n", - " MACE-MATPES-PBE-0. Its Lindemann ratio there is 0.165 and 0.171. With\n", - " MACE-MATPES-r2SCAN-0 it reaches 0.148 at 900 K, just below the limit of 0.15.\n", - " No other material reaches the limit up to 900 K. The highest ratio among them\n", - " is 0.136, for Bi4S3N2. Every run keeps the volume of the 0 K cell. Section 2\n", - " adds thermal expansion.\n", - "- Ca3Ir4Sn13 at 100 K is reported as shifted or diffusing with two of the\n", - " potentials. With MACE-OMAT-0-medium the mean positions of the atoms moved\n", - " 0.13 Å away from the starting structure. This is a little more than 1.5\n", - " times their vibration of 0.11 Å. At 300 K the shift is only 0.05 Å. In\n", - " Section 2 the force field first relaxes the cell and the atoms, and the runs\n", - " at 100 K are stable. So the shift comes from running the force field in a\n", - " cell, and with positions, that are not its own. We did not check which\n", - " distortion the atoms move to." + " MACE-MATPES-PBE-0. Its Lindemann ratio there is 0.161 and 0.157. With\n", + " MACE-MATPES-r2SCAN-0 it reaches 0.144 at 900 K, below the limit of 0.15. No\n", + " other material reaches the limit up to 900 K. The highest ratio among them is\n", + " 0.127, for Bi4S3N2. Every run keeps the volume of the 0 K cell. Section 2 adds\n", + " thermal expansion.\n", + "- At 100 K three runs are reported as shifted or diffusing: Ca3Ir4Sn13 with\n", + " MACE-OMAT-0-medium and MACE-MATPES-r2SCAN-0, and Er5Tl3 with\n", + " MACE-MATPES-r2SCAN-0. The mean positions of the atoms moved away from the\n", + " starting structure by more than they vibrate. Both materials have imaginary\n", + " modes at 0 K. Section 2 shows the same at 100 K in the force field's own cell,\n", + " for Ca3Ir4Sn13 and AlAsPt5. From 300 K on, their NVT runs are stable.\n", + " Most likely the atoms stay in a slightly distorted structure at 100 K and\n", + " move between such structures at higher temperature. We did not check which\n", + " distortion it is. The force constants of these runs describe vibrations\n", + " around the symmetric structure, so use them with care." ] }, { "cell_type": "markdown", - "id": "27", + "id": "28", "metadata": {}, "source": [ "## 2. Thermal expansion with an NPT MD\n", @@ -785,8 +822,8 @@ " `relax_initial_structure=True`, so that the NPT MD starts from the force\n", " field's own 0 K cell.\n", "2. An NPT MD of the supercell runs at the temperature and at `pressure`, 0 kbar\n", - " by default. It runs for `npt_time`, 8 ps by default, with the same\n", - " thermostat as the NVT MD and a Martyna-Tobias-Klein barostat.\n", + " by default. It runs for `npt_time`, 8 ps by default, with a Nose-Hoover\n", + " thermostat and a Martyna-Tobias-Klein barostat.\n", "3. The cell is averaged over the NPT MD after `npt_equilibration_time`, 2 ps by\n", " default. The average keeps the symmetry of the structure. The atoms keep\n", " their fractional coordinates and are then relaxed in the new cell, with the\n", @@ -805,7 +842,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28", + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -836,20 +873,20 @@ }, { "cell_type": "markdown", - "id": "29", + "id": "30", "metadata": {}, "source": [ - "Our run took 20 minutes. The NPT MD and the NVT MD took about 8 minutes each\n", + "Our run took 19 minutes. The NPT MD and the NVT MD took about 8 minutes each\n", "and the fit 2 minutes. The 0 K cell of MACE-OMAT-0-medium has a lattice\n", "parameter of 9.825 Å, and its volume is 3.8% larger than that of the PBEsol\n", "cell. At 900 K the lattice parameter is 9.964 Å, 4.3% more volume. Both\n", - "trajectories were stable. The highest frequency is 4.95 THz, against 5.83 THz\n", + "trajectories were stable. The highest frequency is 4.91 THz, against 5.78 THz\n", "in the PBEsol cell in Section 1." ] }, { "cell_type": "markdown", - "id": "30", + "id": "31", "metadata": {}, "source": [ "## The other temperatures, potentials and materials\n", @@ -858,13 +895,13 @@ "effects apart, we also ran them with the relaxation but without the NPT MD,\n", "that is in the force field's own 0 K cell. `run_ft` takes both options. The two\n", "loops run 150 workflows, so they are off by default. Each of our runs took 6 to\n", - "38 minutes on one A100 GPU." + "29 minutes on one A100 GPU." ] }, { "cell_type": "code", "execution_count": null, - "id": "31", + "id": "32", "metadata": {}, "outputs": [], "source": [ @@ -889,7 +926,7 @@ }, { "cell_type": "markdown", - "id": "32", + "id": "33", "metadata": {}, "source": [ "## Our results\n", @@ -904,7 +941,7 @@ { "cell_type": "code", "execution_count": null, - "id": "33", + "id": "34", "metadata": {}, "outputs": [], "source": [ @@ -941,57 +978,57 @@ "# in the force field's relaxed 0 K cell\n", "MAX_RELAXED = {\n", " \"Ca3Ir4Sn13\": {\n", - " \"OMAT-0-medium\": (5.57, 5.55, 5.51, 5.45, 5.37),\n", - " \"MATPES-PBE-0\": (5.38, 5.32, 5.25, 5.20, 5.14),\n", - " \"MATPES-r2SCAN-0\": (5.75, 5.74, 5.68, 5.59, 5.56),\n", + " \"OMAT-0-medium\": (5.58, 5.58, 5.51, 5.47, 5.40),\n", + " \"MATPES-PBE-0\": (5.37, 5.31, 5.26, 5.19, 5.17),\n", + " \"MATPES-r2SCAN-0\": (5.78, 5.76, 5.69, 5.59, 5.54),\n", " },\n", " \"AlAsPt5\": {\n", - " \"OMAT-0-medium\": (6.98, 7.07, 7.08, 7.20, 7.21),\n", - " \"MATPES-PBE-0\": (7.15, 7.30, 7.16, 7.04, 8.46),\n", - " \"MATPES-r2SCAN-0\": (7.52, 7.52, 7.49, 7.52, 7.44),\n", + " \"OMAT-0-medium\": (7.19, 7.07, 7.09, 7.20, 7.17),\n", + " \"MATPES-PBE-0\": (7.23, 7.24, 7.11, 7.09, 7.30),\n", + " \"MATPES-r2SCAN-0\": (7.52, 7.43, 7.42, 7.49, 7.45),\n", " },\n", " \"Zn3P2\": {\n", - " \"OMAT-0-medium\": (10.37, 9.96, 9.74, 9.18, 8.45),\n", - " \"MATPES-PBE-0\": (9.97, 9.65, 9.51, 8.96, 7.97),\n", - " \"MATPES-r2SCAN-0\": (11.14, 10.85, 10.62, 10.18, 9.94),\n", + " \"OMAT-0-medium\": (10.25, 9.82, 9.67, 9.39, 8.91),\n", + " \"MATPES-PBE-0\": (9.99, 9.73, 9.35, 9.06, 8.70),\n", + " \"MATPES-r2SCAN-0\": (11.19, 10.92, 10.46, 10.40, 9.84),\n", " },\n", " \"Bi4S3N2\": {\n", - " \"OMAT-0-medium\": (16.73, 15.92, 15.19, 14.78, 14.15),\n", - " \"MATPES-PBE-0\": (15.48, 15.44, 14.61, 14.41, 14.09),\n", - " \"MATPES-r2SCAN-0\": (17.23, 16.61, 16.17, 16.08, 14.72),\n", + " \"OMAT-0-medium\": (16.74, 15.80, 15.47, 14.80, 14.41),\n", + " \"MATPES-PBE-0\": (15.40, 15.02, 14.32, 14.55, 14.42),\n", + " \"MATPES-r2SCAN-0\": (17.27, 16.95, 16.22, 15.74, 15.42),\n", " },\n", " \"Er5Tl3\": {\n", - " \"OMAT-0-medium\": (4.08, 4.00, 3.94, 3.96, 4.02),\n", - " \"MATPES-PBE-0\": (3.67, 3.61, 3.57, 3.52, 3.52),\n", - " \"MATPES-r2SCAN-0\": (3.83, 3.83, 3.72, 3.68, 3.69),\n", + " \"OMAT-0-medium\": (4.10, 4.07, 4.06, 4.00, 4.01),\n", + " \"MATPES-PBE-0\": (3.70, 3.62, 3.56, 3.57, 3.40),\n", + " \"MATPES-r2SCAN-0\": (3.83, 3.83, 3.77, 3.78, 3.72),\n", " },\n", "}\n", "# the same in the NPT cell\n", "MAX_NPT = {\n", " \"Ca3Ir4Sn13\": {\n", - " \"OMAT-0-medium\": (5.50, 5.44, 5.25, 5.12, 4.95),\n", - " \"MATPES-PBE-0\": (5.32, 5.16, 5.02, 4.84, 4.71),\n", - " \"MATPES-r2SCAN-0\": (5.68, 5.65, 5.45, 5.24, 5.10),\n", + " \"OMAT-0-medium\": (5.56, 5.39, 5.26, 5.11, 4.91),\n", + " \"MATPES-PBE-0\": (5.33, 5.19, 5.03, 4.89, 4.71),\n", + " \"MATPES-r2SCAN-0\": (5.72, 5.59, 5.44, 5.26, 5.06),\n", " },\n", " \"AlAsPt5\": {\n", - " \"OMAT-0-medium\": (6.92, 6.95, 6.65, 6.75, 6.60),\n", - " \"MATPES-PBE-0\": (7.15, 7.13, 7.02, 6.75, 6.55),\n", - " \"MATPES-r2SCAN-0\": (7.42, 7.27, 6.97, 6.90, 6.89),\n", + " \"OMAT-0-medium\": (7.18, 6.90, 6.90, 6.51, 6.88),\n", + " \"MATPES-PBE-0\": (7.15, 6.94, 6.90, 6.63, 6.64),\n", + " \"MATPES-r2SCAN-0\": (7.39, 7.27, 7.26, 7.11, 6.77),\n", " },\n", " \"Zn3P2\": {\n", - " \"OMAT-0-medium\": (10.20, 9.99, 9.52, 8.93, 8.26),\n", - " \"MATPES-PBE-0\": (9.90, 9.53, 9.15, 8.74, 7.85),\n", - " \"MATPES-r2SCAN-0\": (11.11, 10.63, 10.45, 9.95, 9.53),\n", + " \"OMAT-0-medium\": (10.23, 9.82, 9.31, 8.91, 8.42),\n", + " \"MATPES-PBE-0\": (9.97, 9.68, 9.19, 8.86, 8.19),\n", + " \"MATPES-r2SCAN-0\": (11.16, 10.72, 10.39, 9.87, 9.66),\n", " },\n", " \"Bi4S3N2\": {\n", - " \"OMAT-0-medium\": (16.61, 15.66, 14.93, 14.28, 14.05),\n", - " \"MATPES-PBE-0\": (15.26, 15.19, 14.34, 13.64, 12.86),\n", - " \"MATPES-r2SCAN-0\": (17.18, 16.15, 15.71, 15.17, 14.13),\n", + " \"OMAT-0-medium\": (16.39, 15.58, 15.15, 13.75, 13.63),\n", + " \"MATPES-PBE-0\": (15.50, 15.04, 14.74, 13.39, 12.34),\n", + " \"MATPES-r2SCAN-0\": (17.38, 16.63, 16.28, 15.33, 14.67),\n", " },\n", " \"Er5Tl3\": {\n", - " \"OMAT-0-medium\": (4.04, 3.88, 3.83, 3.72, 3.72),\n", - " \"MATPES-PBE-0\": (3.65, 3.55, 3.48, 3.34, 3.13),\n", - " \"MATPES-r2SCAN-0\": (3.75, 3.67, 3.63, 3.50, 3.44),\n", + " \"OMAT-0-medium\": (4.04, 3.99, 3.79, 3.77, 3.66),\n", + " \"MATPES-PBE-0\": (3.67, 3.56, 3.46, 3.32, 3.25),\n", + " \"MATPES-r2SCAN-0\": (3.78, 3.72, 3.64, 3.56, 3.44),\n", " },\n", "}\n", "\n", @@ -1040,7 +1077,7 @@ }, { "cell_type": "markdown", - "id": "34", + "id": "35", "metadata": {}, "source": [ "We do not compare these runs with the AIMD reference. It used the PBEsol cell\n", @@ -1054,44 +1091,47 @@ "- From 0 K to 900 K the volume grows by 3 to 6.5%. Bi4S3N2 with\n", " MACE-MATPES-PBE-0 is the exception, with 11%.\n", "- The larger 0 K cell alone lowers the frequencies. At 300 K the highest\n", - " frequency of Ca3Ir4Sn13 drops from 5.97 THz in the PBEsol cell to 5.55 THz\n", - " in the cell of MACE-OMAT-0-medium. With MACE-MATPES-PBE-0 the 0 K cell of Er5Tl3 is 12% larger, and its\n", - " highest frequency at 300 K drops from 4.07 to 3.61 THz. With\n", - " MACE-MATPES-r2SCAN-0 the cell of Zn3P2 grows by less than 1%, and its highest\n", - " frequency at 300 K stays at 10.85 THz.\n", + " frequency of Ca3Ir4Sn13 drops from 5.97 THz in the PBEsol cell to 5.58 THz\n", + " in the cell of MACE-OMAT-0-medium. With MACE-MATPES-PBE-0 the 0 K cell of\n", + " Er5Tl3 is 12% larger, and its highest frequency at 300 K drops from 4.12 to\n", + " 3.62 THz. With MACE-MATPES-r2SCAN-0 the cell of Zn3P2 grows by less than 1%,\n", + " and its highest frequency at 300 K stays at 10.9 THz.\n", "- Thermal expansion lowers the frequencies further. At 100 K the NPT cell\n", - " changes the highest frequency by about 0.2 THz or less. At 900 K it lowers\n", - " it by 0.1 to 0.6 THz in most runs.\n", - "- At constant volume a frequency can also rise with temperature. In the 0 K\n", - " cell, the highest frequency of AlAsPt5 with MACE-OMAT-0-medium rises from\n", - " 6.98 THz at 100 K to 7.21 THz at 900 K. In the NPT cell it falls from 6.92 to\n", - " 6.60 THz.\n", + " changes the highest frequency by 0.15 THz or less, except for Bi4S3N2. At\n", + " 900 K it lowers it by 0.15 to 0.8 THz. For Bi4S3N2 with MACE-MATPES-PBE-0,\n", + " whose cell grows by 11%, it lowers it by 2.1 THz.\n", + "- At constant volume a frequency can also rise with temperature. In the PBEsol\n", + " cell, the highest frequency of AlAsPt5 with MACE-MATPES-PBE-0 rises from\n", + " 7.58 THz at 100 K to 7.80 THz at 900 K. In the NPT cell it falls from 7.15 to\n", + " 6.64 THz.\n", "\n", "The trajectory check did not report \"stable\" for these runs:\n", "\n", - "- Zn3P2 at 900 K melts with all three potentials, in the NPT MD and in the NVT\n", - " MD that follows. With MACE-MATPES-r2SCAN-0, its Lindemann ratio in Section 1\n", - " stayed just below the limit, at 0.148. In the NPT cell it is 0.153.\n", - "- Bi4S3N2 melts in the larger cells. In the PBEsol cell of Section 1 none of\n", - " its runs melted. With MACE-OMAT-0-medium the NVT MD is reported as melted\n", - " from 700 K, in the 0 K cell and in the NPT cell. With MACE-MATPES-PBE-0 it\n", - " melts at 900 K in both cells. Its NPT MD is also reported as melted at 500 K\n", - " and as shifted at 700 K, and its volume jumps by 5% between these two\n", - " temperatures. With MACE-MATPES-r2SCAN-0 it melts at 900 K in the NPT cell,\n", - " just above the limit.\n", - "- AlAsPt5 at 900 K with MACE-MATPES-PBE-0 is reported as shifted, in the NVT MD\n", - " in the 0 K cell and in the NPT MD. In the 0 K cell its highest frequency\n", - " jumps to 8.46 THz. In the NPT MD its volume does not grow from 700 to 900 K.\n", - " The atoms move away from the starting structure, so the phonons of these two\n", - " runs do not describe it.\n", - "- Ca3Ir4Sn13 at 100 K is stable in both cells, unlike in Section 1.\n", - "\n", - "Bi4S3N2 has imaginary modes on the band path in all 30 runs. Ca3Ir4Sn13 with\n", - "MACE-MATPES-r2SCAN-0 at 100 K has small ones in both cells, and Er5Tl3 with the\n", - "same potential at 100 K in the 0 K cell. So does the run of Zn3P2 with\n", - "MACE-OMAT-0-medium at 900 K in the 0 K cell, which melted.\n", - "\n", - "A run with the NPT MD took 11 to 38 minutes, against 6 to 30 minutes in the\n", + "- Zn3P2 at 900 K melts with all three potentials in the NPT MD and in the NVT MD\n", + " that follows. With MACE-MATPES-r2SCAN-0, its Lindemann ratio in Section 1\n", + " stayed below the limit, at 0.144. In the NVT MD in the NPT cell it is 0.150,\n", + " just above the limit. In the 0 K cell it melts at 900 K with MACE-OMAT-0-medium and\n", + " MACE-MATPES-PBE-0.\n", + "- Bi4S3N2 melts at 900 K in the NPT cell. The NPT MD is reported as melted with\n", + " all three potentials, and the NVT MD that follows with MACE-OMAT-0-medium and\n", + " MACE-MATPES-PBE-0. With MACE-MATPES-PBE-0 the NPT MD is also reported as\n", + " melted at 500 K and as shifted at 700 K, and the volume jumps by 5% between\n", + " these two temperatures. In the PBEsol cell and in the 0 K cell none of its\n", + " runs melted.\n", + "- AlAsPt5 at 900 K with MACE-MATPES-PBE-0: the NPT MD is reported as shifted,\n", + " and its volume does not grow from 700 to 900 K. The cell of this run is not\n", + " reliable, even though the NVT MD that follows is stable.\n", + "- At 100 K, the shift check fires for Ca3Ir4Sn13 and AlAsPt5. In the 0 K cell\n", + " this happens with MACE-OMAT-0-medium and MACE-MATPES-r2SCAN-0 for both. In the\n", + " NPT cell it happens for Ca3Ir4Sn13 with MACE-MATPES-r2SCAN-0 and for AlAsPt5\n", + " with all three potentials. Section 1 discusses this.\n", + "\n", + "Bi4S3N2 has imaginary modes on the band path in all 30 runs. A few runs at\n", + "100 K have small ones too: Ca3Ir4Sn13 with MACE-MATPES-r2SCAN-0 in both cells,\n", + "and AlAsPt5 in the NPT cell with MACE-OMAT-0-medium and MACE-MATPES-PBE-0. The\n", + "check reports all of these runs as shifted.\n", + "\n", + "A run with the NPT MD took 12 to 29 minutes, against 6 to 21 minutes in the\n", "0 K cell. To compare a force field with DFT phonons in a given cell, run in\n", "that cell, as in Section 1. To predict the phonons at a temperature with the\n", "force field alone, use `run_npt=True`." @@ -1099,7 +1139,7 @@ }, { "cell_type": "markdown", - "id": "35", + "id": "36", "metadata": {}, "source": [ "## 3. MD length and number of snapshots for KNaICl\n", @@ -1122,7 +1162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "36", + "id": "37", "metadata": {}, "outputs": [], "source": [ @@ -1147,7 +1187,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37", + "id": "38", "metadata": {}, "outputs": [], "source": [ @@ -1156,40 +1196,36 @@ "# by potential, rows 4, 8 and 16 ps, columns 25, 50 and 100 snapshots\n", "MAE_GRID = { # mean absolute difference from AIMD at 300 K in THz\n", " \"OMAT-0-medium\": (\n", - " (0.146, 0.149, 0.150),\n", - " (0.159, 0.145, 0.144),\n", - " (0.156, 0.155, 0.149),\n", + " (0.179, 0.181, 0.147),\n", + " (0.167, 0.170, 0.148),\n", + " (0.162, 0.171, 0.158),\n", " ),\n", " \"MATPES-PBE-0\": (\n", - " (0.138, 0.121, 0.121),\n", - " (0.124, 0.129, 0.127),\n", - " (0.127, 0.135, 0.117),\n", + " (0.158, 0.137, 0.133),\n", + " (0.129, 0.108, 0.120),\n", + " (0.142, 0.089, 0.105),\n", " ),\n", " \"MATPES-r2SCAN-0\": (\n", - " (0.137, 0.123, 0.123),\n", - " (0.138, 0.131, 0.128),\n", - " (0.147, 0.128, 0.128),\n", + " (0.188, 0.161, 0.162),\n", + " (0.191, 0.184, 0.136),\n", + " (0.152, 0.154, 0.169),\n", " ),\n", "}\n", "MAX_GRID = { # highest frequency on the band path in THz\n", - " \"OMAT-0-medium\": ((5.63, 5.65, 5.63), (5.63, 5.73, 5.70), (5.32, 5.43, 5.44)),\n", - " \"MATPES-PBE-0\": ((5.03, 5.23, 5.26), (5.25, 5.22, 5.33), (5.12, 5.13, 5.27)),\n", - " \"MATPES-r2SCAN-0\": ((5.23, 5.40, 5.40), (5.39, 5.66, 5.56), (5.27, 5.60, 5.54)),\n", + " \"OMAT-0-medium\": ((5.48, 5.52, 5.66), (5.35, 5.56, 5.63), (5.57, 5.62, 5.61)),\n", + " \"MATPES-PBE-0\": ((5.20, 5.18, 5.13), (5.07, 5.22, 5.33), (5.05, 5.31, 5.24)),\n", + " \"MATPES-r2SCAN-0\": ((5.64, 5.51, 5.57), (5.32, 5.58, 5.42), (5.42, 5.53, 5.53)),\n", "}\n", "IMAGINARY_GRID = { # True if the band path has imaginary modes\n", - " \"OMAT-0-medium\": ((False, True, True), (False, False, False), (True, True, False)),\n", - " \"MATPES-PBE-0\": ((True, False, False), (True, True, True), (False, True, False)),\n", - " \"MATPES-r2SCAN-0\": (\n", - " (False, False, False),\n", - " (True, True, False),\n", - " (True, False, False),\n", - " ),\n", + " \"OMAT-0-medium\": ((False, True, True), (True, True, False), (True, True, False)),\n", + " \"MATPES-PBE-0\": ((True, True, True), (False, True, False), (False, False, True)),\n", + " \"MATPES-r2SCAN-0\": ((True, True, True), (True, True, False), (True, True, True)),\n", "}\n", "\n", "fig, axes = plt.subplots(1, 3, figsize=(13, 3.6))\n", "for ax, model in zip(axes, MODEL_FILES, strict=True):\n", " grid = np.array(MAE_GRID[model])\n", - " image = ax.imshow(grid, cmap=\"viridis\", vmin=0.11, vmax=0.16)\n", + " image = ax.imshow(grid, cmap=\"viridis\", vmin=0.08, vmax=0.20)\n", " for i in range(3):\n", " for j in range(3):\n", " mark = \" *\" if IMAGINARY_GRID[model][i][j] else \"\"\n", @@ -1216,50 +1252,41 @@ }, { "cell_type": "markdown", - "id": "38", + "id": "39", "metadata": {}, "source": [ "In the plot, a star marks a run with imaginary modes on the band path. The\n", "table gives the highest frequency in THz.\n", "\n", - "- The mean absolute difference from AIMD lies between 0.12 and 0.16 THz in every\n", - " run. It shows no trend with the MD length or the number of snapshots. Each\n", - " run is one MD trajectory, so these differences are the noise of a single run.\n", - "- The highest frequency changes by up to 0.4 THz between runs, also without a\n", + "- The mean absolute difference from AIMD lies between 0.09 and 0.19 THz. It\n", + " shows no trend with the MD length or the number of snapshots. Each run is one\n", + " MD trajectory, so these differences are the noise of a single run.\n", + "- The highest frequency changes by up to 0.3 THz between runs, also without a\n", " trend.\n", - "- 12 of the 27 runs have imaginary modes on the band path, down to -0.9 THz.\n", - " They sit at q-points that are not commensurate with the supercell, such as\n", - " (1/2, 1/2, 0). There the frequencies are interpolated from the fitted force\n", - " constants. The AIMD reference has no imaginary modes in the same supercell. So\n", - " they come from the noise of the fit. They appear in 5 of 9 runs with 25\n", - " snapshots, 5 of 9 with 50 and 2 of 9 with 100.\n", - "- We ran the whole grid a second time. The 4 and 8 ps runs gave the same\n", - " numbers to the third decimal. The 16 ps runs did not. Their highest frequency\n", - " changed by up to 0.2 THz, and imaginary modes appeared or went away in three\n", - " of them. With 100 snapshots, 2 of 9 runs had imaginary modes the first time\n", - " and 3 of 9 the second time. Runs with the same potential and MD length share\n", - " one trajectory. At 16 ps their Lindemann ratios already differed in the first\n", - " round, so the trajectory itself changed. Most likely, tiny numerical\n", - " differences on the GPU grow over a long MD run.\n", - "- The MD takes most of the time. With MACE-OMAT-0-medium a run took 3.8, 6.0\n", - " and 10.6 minutes for 4, 8 and 16 ps. Going from 50 to 100 snapshots added a\n", - " few seconds of force calculations and fitting.\n", - "\n", - "We also ran Bi4S3N2 and Zn3P2 at 300 K with 100 snapshots. The mean absolute\n", - "difference from AIMD changed by 0.03 THz or less. The fit of Zn3P2 did not take\n", - "longer. Bi4S3N2 kept its imaginary modes with all three potentials, so these are\n", - "unlikely to be noise of the fit.\n", - "\n", - "With a force field the force calculations cost little next to the MD, so 100\n", - "snapshots are worth using. The default stays at 50, because with VASP each\n", - "snapshot is a DFT calculation of the whole supercell. For the MD length, 4 ps\n", - "already gave the same agreement with AIMD for KNaICl. We kept the default of\n", - "8 ps for the other materials." + "- 19 of the 27 runs have imaginary modes on the band path, down to -1.5 THz. In\n", + " all but two of them they only appear at q-points that are not commensurate\n", + " with the supercell, where the frequencies are interpolated from the fitted\n", + " force constants. The AIMD reference has no imaginary modes in the same\n", + " supercell. They appear in 6 of 9 runs with 25 snapshots, 8 of 9 with 50 and\n", + " 5 of 9 with 100. In an earlier round of the same grid with a Nose-Hoover\n", + " thermostat, 12 of the 27 runs had them.\n", + "- The random forces of the Langevin thermostat are not seeded, so a second run\n", + " of the grid would not give the same numbers.\n", + "- The MD takes most of the time. With MACE-OMAT-0-medium a run with 50\n", + " snapshots took 3.5, 6.1 and 10.8 minutes for 4, 8 and 16 ps. Going from 50 to\n", + " 100 snapshots added a few seconds of force calculations and fitting.\n", + "\n", + "With a force field the force calculations cost little next to the MD, so more\n", + "snapshots are cheap. In this test they did not remove the imaginary modes,\n", + "though. The default stays at 50, because with VASP each snapshot is a DFT\n", + "calculation of the whole supercell. For the MD length, 4 ps gave about the same\n", + "agreement with AIMD as 8 and 16 ps for KNaICl. We kept the default of 8 ps for\n", + "the other materials." ] }, { "cell_type": "markdown", - "id": "39", + "id": "40", "metadata": {}, "source": [ "## Known limitations\n", @@ -1280,9 +1307,10 @@ "check whether any of the trajectories reported as melted is a liquid. A warning\n", "is raised and the fit is still done.\n", "\n", - "Every result above comes from one MD trajectory. Section 3 shows that two runs\n", - "with different settings can differ by about 0.04 THz on average and by up to\n", - "0.4 THz in the highest frequency." + "Every result above comes from one MD trajectory. Section 3 shows that runs with\n", + "different settings differ by up to 0.1 THz on average and by up to 0.3 THz in\n", + "the highest frequency. The Langevin thermostat is not seeded, so a second run\n", + "gives somewhat different numbers." ] } ], From c84d02980ee42fae8a9aeb61438765f818d4ae23 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sun, 4 Oct 2026 23:15:43 -0700 Subject: [PATCH 20/43] Say in the docs how to include thermal expansion in the finite-temperature workflow --- docs/user/codes/vasp.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index da6fae4fe6..5b966d87b9 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -411,8 +411,9 @@ The cluster space grows faster there than the number of displacements the workfl #### Finite-temperature phonons `FiniteTemperaturePhononMaker` fits effective harmonic force constants at a finite temperature, as in the temperature-dependent effective potential ([TDEP](https://doi.org/10.1103/PhysRevB.84.180301)) method. -They include the anharmonic effects at that temperature, at the volume of the relaxed structure. -By default, thermal expansion is not included. +They include the anharmonic effects at that temperature. +By default, the MD runs at the volume of the relaxed structure, so thermal expansion is not included. +It can be switched on with an NPT MD before the NVT MD, see below. The structure is relaxed first. An NVT MD run then samples the displacements at the temperature. By default, it runs for 8 ps at 300 K with a time step of 1 fs and a Langevin thermostat. From 0faae0249903ab7359d9f21811dfd5cca456f3fa Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Sun, 4 Oct 2026 23:42:58 -0700 Subject: [PATCH 21/43] inline the VASP defaults, share the NAC setup, add PHEASY_CMD --- docs/user/codes/vasp.md | 14 +- .../flows/finite_temperature_phonons.py | 9 +- .../common/jobs/finite_temperature_phonons.py | 103 +++++++++------ src/atomate2/common/jobs/pheasy.py | 23 +++- src/atomate2/common/jobs/phonons.py | 45 +++++++ .../flows/finite_temperature_phonons.py | 2 +- src/atomate2/settings.py | 2 + .../vasp/flows/finite_temperature_phonons.py | 121 +++++++++--------- .../jobs/test_finite_temperature_phonons.py | 18 +++ .../flows/test_finite_temperature_phonons.py | 10 ++ 10 files changed, 232 insertions(+), 115 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index 5b966d87b9..3bfb713367 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -346,6 +346,8 @@ phonon_flow = PhononMaker(min_length=15.0, store_force_constants=False).make( Alternatively, users can accelerate the calculation of interatomic force constants using the machine-learning-based [Pheasy code](https://doi.org/10.48550/arXiv.2508.01020). The `pheasy` extra, `pip install "atomate2[pheasy]"`, installs the pheasy version this workflow needs, together with phonopy and ALM. +The workflows call the `pheasy` command. +A different command can be set with `PHEASY_CMD` in the atomate2 settings. ALM is compiled from source. If that build fails, see the ALM instructions below. By design, these workflows have the same basic structure as the harmonic forcefield workflows and use [Phonopy](https://doi.org/10.7566/JPSJ.92.012001) in part to compute the phonon spectrum. To use `Pheasy` in the previous example, we would replace the import string to `from atomate2.vasp.flows.pheasy import PhononMaker`. @@ -476,7 +478,7 @@ Three more makers are in `atomate2.forcefields.flows.finite_temperature_phonons` Each has a `from_force_field_name` method to choose the force field. They need the package of the force field, for example `mace-torch` for MACE. All of them use the same fit. -A force field NPT MD uses ASE's `MTKNPT`, a Nosé-Hoover chain thermostat with the barostat of [Martyna et al.](https://doi.org/10.1063/1.467468). +A force field NPT MD uses ASE's `MTKNPT`, a Nosé-Hoover thermostat with the barostat of [Martyna et al.](https://doi.org/10.1063/1.467468). ```python from atomate2.forcefields.flows.finite_temperature_phonons import ( @@ -491,6 +493,16 @@ flow = maker.make(structure) `run_npt=True` sets the NPT MD and the relaxation of the atoms in its cell. +A force field gives no Born charges, so the force field makers skip the non-analytical correction by default. +The Born charges and the dielectric tensor can still come from VASP. +Either pass `born` and `epsilon_static` to `make`, or set a VASP `born_maker`: + +```python +from atomate2.vasp.jobs.core import DielectricMaker + +maker.born_maker = DielectricMaker() +``` + Known limitations: - pheasy needs a diagonal supercell matrix. diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 27507812cd..3d53f9d8d6 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -364,7 +364,12 @@ def make( structure = relax.output.structure if self.born_maker is not None and (born is None or epsilon_static is None): - born_job = self.born_maker.make(structure, prev_dir=prev_dir) + # as in the phonon workflow, so that a VASP born_maker can run after a + # force field relaxation, whose folder has no VASP files + born_kwargs = {} + if self.prev_calc_dir_argname is not None: + born_kwargs[self.prev_calc_dir_argname] = prev_dir + born_job = self.born_maker.make(structure, **born_kwargs) jobs.append(born_job) born = born_job.output.calcs_reversed[0].output.outcar["born"] epsilon_static = born_job.output.calcs_reversed[0].output.epsilon_static @@ -488,7 +493,7 @@ def make_md( @property @abstractmethod def prev_calc_dir_argname(self) -> str | None: - """Name of the argument that passes prev_dir to the phonon displacement maker. + """Name of the prev_dir argument of the phonon displacement and Born makers. As this differs between codes, it is implemented by the inheriting class. """ diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index 58eb86448b..2e8413289a 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -16,7 +16,6 @@ from phonopy.file_IO import parse_FORCE_CONSTANTS from phonopy.harmonic.dynmat_to_fc import get_commensurate_points from phonopy.interface.vasp import write_vasp -from phonopy.structure.symmetry import symmetrize_borns_and_epsilon from pymatgen.core import Structure from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure from pymatgen.io.vasp import Incar, Kpoints, Poscar, Xdatcar @@ -34,6 +33,7 @@ _get_kpath, _run_band_structure_and_plot, _run_total_dos_and_plot, + _set_nac_params, ) from atomate2.common.schemas.finite_temperature_phonons import ( FiniteTemperaturePhononDoc, @@ -390,6 +390,60 @@ def _assess_trajectory( ) +def average_npt_structure( + cells: np.ndarray, + structure: Structure, + supercell_matrix: Matrix3D, + symprec: float, +) -> Structure: + """ + Average the supercell lattices of an NPT MD into a unit cell. + + The metric tensor L L^T of the supercell, with the lattice vectors as the + rows of L, is averaged over the cells. Unlike the lattice vectors, it does + not change when the cell rotates. It is converted to the metric tensor of + the unit cell with the supercell matrix and averaged over the point group of + the structure, so that the cell keeps its symmetry. The new lattice is the + stretch of the lattice of the structure, without a rotation, that has this + metric tensor. The atoms keep their fractional coordinates. + + Parameters + ---------- + cells: np.ndarray + Supercell lattices of the frames to average, with the lattice vectors + as rows, in Angstrom. + structure: Structure + Unit cell whose supercell the NPT MD started from. + supercell_matrix: Matrix3D + Supercell matrix. + symprec: float + Symmetry precision for the point group of the structure. + + Returns + ------- + Structure + The unit cell with the averaged lattice. + """ + metric = np.mean([cell @ cell.T for cell in cells], axis=0) + inv_matrix = np.linalg.inv(np.array(supercell_matrix, dtype=float)) + metric = inv_matrix @ metric @ inv_matrix.T + # a rotation W of fractional coordinates leaves the metric tensor of the + # symmetric cell unchanged, W^T G W = G + analyzer = SpacegroupAnalyzer(structure, symprec=symprec) + rotations = [op.rotation_matrix for op in analyzer.get_symmetry_operations()] + metric = np.mean([rot.T @ metric @ rot for rot in rotations], axis=0) + lattice = structure.lattice.matrix + inv_lattice = np.linalg.inv(lattice) + eigvals, eigvecs = np.linalg.eigh(inv_lattice @ metric @ inv_lattice.T) + stretch = eigvecs @ np.diag(np.sqrt(eigvals)) @ eigvecs.T + return Structure( + lattice @ stretch, + structure.species, + structure.frac_coords, + site_properties=structure.site_properties, + ) + + @job def get_npt_structure( npt_dir: str, @@ -404,14 +458,9 @@ def get_npt_structure( """ Get the unit cell at the temperature from an NPT MD run. - The metric tensor L L^T of the supercell, with the lattice vectors as the - rows of L, is averaged over the frames after equilibration_time. Unlike the - lattice vectors, it does not change when the cell rotates. It is converted - to the metric tensor of the unit cell with the supercell matrix and averaged - over the point group of the structure, so that the cell keeps its symmetry. - The new lattice is the stretch of the lattice of the structure, without a - rotation, that has this metric tensor. The atoms keep their fractional - coordinates. The NPT trajectory is checked as in :obj:`select_md_snapshots`. + The cells after equilibration_time are averaged with + :obj:`average_npt_structure`. The NPT trajectory is checked as in + :obj:`select_md_snapshots`. Parameters ---------- @@ -446,23 +495,8 @@ def get_npt_structure( f"The NPT trajectory has {len(cells)} frames of {time_step} fs, none " f"of them after the {equilibration_time} ps that are left out." ) - metric = np.mean([cell @ cell.T for cell in cells[n_equil:]], axis=0) - inv_matrix = np.linalg.inv(np.array(supercell_matrix, dtype=float)) - metric = inv_matrix @ metric @ inv_matrix.T - # a rotation W of fractional coordinates leaves the metric tensor of the - # symmetric cell unchanged, W^T G W = G - analyzer = SpacegroupAnalyzer(structure, symprec=symprec) - rotations = [op.rotation_matrix for op in analyzer.get_symmetry_operations()] - metric = np.mean([rot.T @ metric @ rot for rot in rotations], axis=0) - lattice = structure.lattice.matrix - inv_lattice = np.linalg.inv(lattice) - eigvals, eigvecs = np.linalg.eigh(inv_lattice @ metric @ inv_lattice.T) - stretch = eigvecs @ np.diag(np.sqrt(eigvals)) @ eigvecs.T - npt_structure = Structure( - lattice @ stretch, - structure.species, - structure.frac_coords, - site_properties=structure.site_properties, + npt_structure = average_npt_structure( + cells[n_equil:], structure, supercell_matrix, symprec ) health = _assess_trajectory(frac_coords, energies, reference, time_step) @@ -781,22 +815,7 @@ def fit_finite_temperature_phonons( borns = epsilon = None if born is not None and epsilon_static is not None: - borns, epsilon = symmetrize_borns_and_epsilon( - ucell=phonon.unitcell, - borns=np.array(born), - epsilon=np.array(epsilon_static), - symprec=symprec, - primitive_matrix=phonon.primitive_matrix, - supercell_matrix=phonon.supercell_matrix, - ) - if not np.all(np.isclose(borns, 0.0)): - # the factor is for forces in eV/Angstrom, as from VASP and the force - # fields - phonon.nac_params = { - "born": borns, - "dielectric": epsilon, - "factor": 14.399652, - } + borns, epsilon = _set_nac_params(phonon, born, epsilon_static, symprec) # frequencies at the q-points commensurate with the supercell matrix = np.linalg.inv(phonon.primitive_matrix) @ phonon.supercell_matrix diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index f64d380b76..7096f997e5 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -38,6 +38,7 @@ CubicSupercellTransformation, ) +from atomate2 import SETTINGS from atomate2.common.jobs.phonons import ( ANGSTROM_TO_BOHR, _generate_phonon_object, @@ -316,7 +317,10 @@ def _run_harmonic_fit( Log file of the fit. None keeps pheasy's default. """ dim = " ".join(str(int(supercell_matrix[i][i])) for i in range(3)) - base = f"pheasy --scell SPOSCAR --dim {dim} -w 2 --symprec {float(symprec)}" + base = ( + f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR --dim {dim} -w 2 " + f"--symprec {float(symprec)}" + ) fit = f"{base} -f --full_ifc" if use_lasso: # pheasy's default --tol of 1e-4 leaves the fit unconverged, so the force @@ -401,7 +405,7 @@ def _run_anharmonic_fit( """ dim = " ".join(str(int(supercell_matrix[i][i])) for i in range(3)) base = ( - f"pheasy --scell SPOSCAR --dim {dim} -w {anhar_max_order} " + f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR --dim {dim} -w {anhar_max_order} " f"--symprec {float(symprec)}" ) cutoffs = f"--c3 {float(fcs_cutoff_radius[1] / ANGSTROM_TO_BOHR)}" @@ -997,7 +1001,8 @@ def generate_frequencies_eigenvectors( shutil.copy(filename, refit_dir / filename) pheasy_cmd_11 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " + f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR " + f"--dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -s -w 2 --c2 " f"10.0 --symprec {float(symprec)} " @@ -1005,14 +1010,16 @@ def generate_frequencies_eigenvectors( ) pheasy_cmd_12 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " + f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR " + f"--dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -c --symprec " f"{float(symprec)} --c2 10.0 -w 2" ) pheasy_cmd_13 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " + f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR " + f"--dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -w 2 -d --symprec " f"{float(symprec)} --c2 10.0 " @@ -1024,7 +1031,8 @@ def generate_frequencies_eigenvectors( if len(phonon.displacements) > 3: pheasy_cmd_14 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " + f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR " + f"--dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --c2 10.0 " f"--full_ifc -w 2 --symprec {float(symprec)} " @@ -1034,7 +1042,8 @@ def generate_frequencies_eigenvectors( else: pheasy_cmd_14 = ( - f"pheasy --scell SPOSCAR --dim {int(supercell_matrix[0][0])} " + f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR " + f"--dim {int(supercell_matrix[0][0])} " f"{int(supercell_matrix[1][1])} " f"{int(supercell_matrix[2][2])} -f --full_ifc " f"--c2 10.0 -w 2 --symprec {float(symprec)} " diff --git a/src/atomate2/common/jobs/phonons.py b/src/atomate2/common/jobs/phonons.py index a148f047d0..3935d2f840 100644 --- a/src/atomate2/common/jobs/phonons.py +++ b/src/atomate2/common/jobs/phonons.py @@ -164,6 +164,51 @@ def _get_num_harmonic_supercells( return int(np.ceil(num_disp_sc * multiplier)) + 1 +def _set_nac_params( + phonon: Phonopy, + born: Sequence[Matrix3D], + epsilon_static: Matrix3D, + symprec: float, + is_symmetry: bool = True, +) -> tuple[np.ndarray, np.ndarray]: + """ + Symmetrize the Born charges and the dielectric tensor and set the NAC. + + The non-analytical correction is only set if a Born charge is not zero. + + Parameters + ---------- + phonon: Phonopy + Phonopy object whose unit cell the Born charges belong to. + born: Sequence[Matrix3D] + Born effective charges, one per atom of the unit cell. + epsilon_static: Matrix3D + High-frequency dielectric tensor. + symprec: float + Symmetry precision. + is_symmetry: bool + Whether to symmetrize the Born charges and the dielectric tensor. + + Returns + ------- + tuple[np.ndarray, np.ndarray] + The Born charges and the dielectric tensor. + """ + borns, epsilon = symmetrize_borns_and_epsilon( + ucell=phonon.unitcell, + borns=np.array(born), + epsilon=np.array(epsilon_static), + symprec=symprec, + primitive_matrix=phonon.primitive_matrix, + supercell_matrix=phonon.supercell_matrix, + is_symmetry=is_symmetry, + ) + if not np.all(np.isclose(borns, 0.0)): + # e^2 / (4 pi epsilon_0) in eV Angstrom, for forces in eV/Angstrom + phonon.nac_params = {"born": borns, "dielectric": epsilon, "factor": 14.399652} + return borns, epsilon + + def _get_kpath( structure: Structure, kpath_scheme: str, symprec: float, **kpath_kwargs ) -> tuple: diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py index 704d6522a3..ff395ac975 100644 --- a/src/atomate2/forcefields/flows/finite_temperature_phonons.py +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -125,7 +125,7 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): Its time constant gives a period of about 40 time steps, like SMASS = 0 in VASP. The initial velocities of the first MD job follow the Maxwell-Boltzmann distribution, seeded with random_seed, with zero total - momentum. The NPT MD, if any, uses ASE's MTKNPT, a Nose-Hoover chain + momentum. The NPT MD, if any, uses ASE's MTKNPT, a Nose-Hoover thermostat and barostat that change the whole cell, whatever the thermostat setting (Martyna et al., J. Chem. Phys. 101, 4177 (1994)). Its thermostat time constant is that of the Nose-Hoover thermostat above, and diff --git a/src/atomate2/settings.py b/src/atomate2/settings.py index 32bcbf2da2..99c21f13c1 100644 --- a/src/atomate2/settings.py +++ b/src/atomate2/settings.py @@ -258,6 +258,8 @@ class Atomate2Settings(BaseSettings): "GBRV_v1.5", description="location of JDFTX pseudopotentials." ) + PHEASY_CMD: str = Field("pheasy", description="The command to run pheasy.") + LAMMPS_CMD: str = Field("lmp", description="The command to run LAMMPS.") LAMMPS_MPICMD: str | None = Field( diff --git a/src/atomate2/vasp/flows/finite_temperature_phonons.py b/src/atomate2/vasp/flows/finite_temperature_phonons.py index 725da4ea83..1c22f2fc98 100644 --- a/src/atomate2/vasp/flows/finite_temperature_phonons.py +++ b/src/atomate2/vasp/flows/finite_temperature_phonons.py @@ -15,6 +15,7 @@ from atomate2.vasp.sets.core import ( LangevinMDSetGenerator, MDSetGenerator, + StaticSetGenerator, TightRelaxSetGenerator, ) @@ -23,36 +24,6 @@ from atomate2.vasp.jobs.base import BaseVaspMaker -# The relaxation, the MD and the phonon displacement calculations use the same -# smearing and k-point density. -_ELECTRONIC_INCAR = {"ISMEAR": 0, "SIGMA": 0.05} -_KPOINTS = {"reciprocal_density": 100} - -# The MD only samples the displacements. The forces of the fit come from the -# phonon displacement calculations, which use tighter settings. -_MD_INCAR = { - "ENCUT": 500, - "EDIFF": 1e-5, - "ALGO": "Normal", - "LREAL": "Auto", - "NBLOCK": 1, - "LWAVE": False, - **_ELECTRONIC_INCAR, -} -# changes to the INCAR of PhononDisplacementMaker -_STATIC_INCAR = { - "ENCUT": 600, - "ENAUG": 1360, - "PREC": "Accurate", - "LASPH": True, - "NELM": 200, - "LWAVE": False, - **_ELECTRONIC_INCAR, -} -_RELAX_INCAR = { - key: _STATIC_INCAR[key] for key in ("ENCUT", "ENAUG", "PREC", "LASPH") -} | _ELECTRONIC_INCAR - # INCAR tags of the MD that the flow sets _MD_FLOW_TAGS = ( "IBRION", @@ -77,35 +48,6 @@ def _check_md_incar(user_incar: dict, name: str) -> None: ) -def _get_relax_maker() -> DoubleRelaxMaker: - """Get a tight relaxation with the basis set and smearing of the statics.""" - return DoubleRelaxMaker.from_relax_maker( - TightRelaxMaker( - input_set_generator=TightRelaxSetGenerator( - user_incar_settings=dict(_RELAX_INCAR), - user_kpoints_settings=dict(_KPOINTS), - ) - ) - ) - - -def _get_md_maker() -> MDMaker: - """Get the MD maker, whose temperature, steps and thermostat the flow sets.""" - return MDMaker( - input_set_generator=MDSetGenerator( - user_incar_settings=dict(_MD_INCAR), - user_kpoints_settings=dict(_KPOINTS), - ) - ) - - -def _get_phonon_displacement_maker() -> PhononDisplacementMaker: - """Get the static maker for the forces on the snapshots.""" - maker = PhononDisplacementMaker() - maker.input_set_generator.user_incar_settings.update(_STATIC_INCAR) - return maker - - @dataclass class FiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): """ @@ -161,11 +103,66 @@ class FiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): Code of the MD. """ - bulk_relax_maker: Maker | None = field(default_factory=_get_relax_maker) + bulk_relax_maker: Maker | None = field( + default_factory=lambda: DoubleRelaxMaker.from_relax_maker( + TightRelaxMaker( + input_set_generator=TightRelaxSetGenerator( + user_incar_settings={ + "ENCUT": 600, + "ENAUG": 1360, + "PREC": "Accurate", + "LASPH": True, + "ISMEAR": 0, + "SIGMA": 0.05, + }, + user_kpoints_settings={"reciprocal_density": 100}, + ) + ) + ) + ) born_maker: BaseVaspMaker | None = field(default_factory=DielectricMaker) - md_maker: Maker = field(default_factory=_get_md_maker) + md_maker: Maker = field( + default_factory=lambda: MDMaker( + input_set_generator=MDSetGenerator( + user_incar_settings={ + "ENCUT": 500, + "EDIFF": 1e-5, + "ALGO": "Normal", + "LREAL": "Auto", + "NBLOCK": 1, + "LWAVE": False, + "ISMEAR": 0, + "SIGMA": 0.05, + }, + user_kpoints_settings={"reciprocal_density": 100}, + ) + ) + ) phonon_displacement_maker: Maker = field( - default_factory=_get_phonon_displacement_maker + default_factory=lambda: PhononDisplacementMaker( + input_set_generator=StaticSetGenerator( + user_incar_settings={ + "IBRION": 2, + "ISIF": 3, + "NSW": 0, + "ENCUT": 600, + "ENAUG": 1360, + "EDIFF": 1e-7, + "PREC": "Accurate", + "ALGO": "Normal", + "LASPH": True, + "NELM": 200, + "LREAL": False, + "LAECHG": False, + "LCHARG": False, + "LWAVE": False, + "ISMEAR": 0, + "SIGMA": 0.05, + }, + user_kpoints_settings={"reciprocal_density": 100}, + auto_ispin=True, + ) + ) ) code: str = "vasp" md_code: str = "vasp" diff --git a/tests/common/jobs/test_finite_temperature_phonons.py b/tests/common/jobs/test_finite_temperature_phonons.py index 262dbddabd..d241f28ee3 100644 --- a/tests/common/jobs/test_finite_temperature_phonons.py +++ b/tests/common/jobs/test_finite_temperature_phonons.py @@ -23,6 +23,7 @@ _assess_trajectory, _get_rms_displacement, _remove_center_of_mass, + average_npt_structure, fit_finite_temperature_phonons, get_md_restart_structure, get_md_supercell, @@ -275,6 +276,23 @@ def test_select_md_snapshots_forcefields(cu_supercell): assert output["trajectory_health"]["verdict"] == "melted" +def test_average_npt_structure(): + """Rotated cells of an expanded tetragonal supercell average to its unit cell.""" + structure = Structure( + Lattice.tetragonal(3.0, 5.0), ["Si", "Si"], [[0, 0, 0], [0.5, 0.5, 0.5]] + ) + matrix = np.diag([2, 2, 1]) + supercell = np.diag([1.01, 1.01, 1.03]) @ matrix @ structure.lattice.matrix + rng = np.random.default_rng(7) + cells = [] + for _ in range(5): + rotation, _ = np.linalg.qr(rng.normal(size=(3, 3))) + cells.append(supercell @ rotation.T) + averaged = average_npt_structure(np.array(cells), structure, matrix, 1e-3) + assert np.allclose(averaged.lattice.matrix, np.diag([3.03, 3.03, 5.15])) + assert np.allclose(averaged.frac_coords, structure.frac_coords) + + def test_get_npt_structure(cu_supercell): unit_cell = AseAtomsAdaptor.get_structure(bulk("Cu", "fcc", a=3.61, cubic=True)) rng = np.random.default_rng(4) diff --git a/tests/forcefields/flows/test_finite_temperature_phonons.py b/tests/forcefields/flows/test_finite_temperature_phonons.py index 4540b24150..6e2895357b 100644 --- a/tests/forcefields/flows/test_finite_temperature_phonons.py +++ b/tests/forcefields/flows/test_finite_temperature_phonons.py @@ -22,6 +22,7 @@ ) from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker from atomate2.forcefields.md import ForceFieldMDMaker +from atomate2.vasp.jobs.core import DielectricMaker EMT = {"@module": "ase.calculators.emt", "@callable": "EMT"} @@ -165,6 +166,15 @@ def test_force_field_npt_maker(cu3au): assert not any("NPT" in job.name for job in flow.jobs) +def test_force_field_with_vasp_born_charges(cu3au): + """A VASP born_maker after a force field relaxation gets no prev_dir.""" + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name(EMT) + maker.born_maker = DielectricMaker() + flow = maker.make(cu3au, supercell_matrix=np.eye(3).tolist()) + born_job = next(job for job in flow.jobs if job.name == "dielectric") + assert born_job.function_kwargs.get("prev_dir") is None + + def test_finite_temperature_phonon_maker_emt(clean_dir, cu3au): """Run the whole workflow with EMT on Cu3Au at 300 K.""" # a 2x2x2 supercell of the cubic cell, 32 atoms, and 2 ps of MD at 2 fs in From 42e6b4818e95bbf65a9ad4fe9037de2b00f82a6d Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 11:07:18 -0700 Subject: [PATCH 22/43] Add force field Born charges and dielectric tensors with MACE-Field --- .github/workflows/testing.yml | 6 +- docs/user/codes/forcefields.md | 32 +++++++++ pyproject.toml | 5 ++ src/atomate2/common/flows/hiphive.py | 10 ++- src/atomate2/common/flows/pheasy.py | 10 ++- src/atomate2/common/flows/phonons.py | 33 +++++---- src/atomate2/common/jobs/hiphive.py | 33 +++------ src/atomate2/common/jobs/pheasy.py | 33 +++------ src/atomate2/common/jobs/phonons.py | 32 +++------ src/atomate2/common/schemas/phonons.py | 81 ++++++++++++++++------ src/atomate2/forcefields/flows/hiphive.py | 12 ++-- src/atomate2/forcefields/flows/pheasy.py | 12 ++-- src/atomate2/forcefields/flows/phonons.py | 12 ++-- src/atomate2/forcefields/jobs.py | 84 +++++++++++++++++++++-- src/atomate2/forcefields/schemas.py | 22 +++++- src/atomate2/forcefields/utils.py | 21 +++++- tests/forcefields/conftest.py | 36 ++++++++++ tests/forcefields/flows/test_phonon.py | 32 ++++++++- tests/forcefields/test_jobs.py | 24 ++++++- tests/forcefields/test_mace_field.py | 55 +++++++++++++++ 20 files changed, 452 insertions(+), 133 deletions(-) create mode 100644 tests/forcefields/test_mace_field.py diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 7405467740..2f8a35a073 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -41,7 +41,7 @@ jobs: fail-fast: false matrix: python-version: ["3.12"] - dep-group: ["generic", "torch-limited", "e3nn-limited", "numpy-limited"] + dep-group: ["generic", "torch-limited", "e3nn-limited", "numpy-limited", "mace-field"] steps: - name: Check out repo @@ -91,9 +91,11 @@ jobs: # torch-limited loads the heaviest MLIP stack (matgl + nequip + torch); # running it single-process avoids the OOM that kills the runner when # xdist spawns multiple workers each holding a copy of the models. + # The MACE-Field fork replaces mace-torch, so its group only runs the + # MACE-Field tests. run: | micromamba activate a2 - pytest -v --durations=5 -n ${{ matrix.dep-group == 'torch-limited' && '1' || 'auto' }} --cov=atomate2 --cov-report=xml tests/forcefields + pytest -v --durations=5 -n ${{ matrix.dep-group == 'torch-limited' && '1' || 'auto' }} --cov=atomate2 --cov-report=xml ${{ matrix.dep-group == 'mace-field' && 'tests/forcefields/test_mace_field.py' || 'tests/forcefields' }} - name: Forcefield tutorial if: matrix.dep-group == 'torch-limited' diff --git a/docs/user/codes/forcefields.md b/docs/user/codes/forcefields.md index c926c04b37..dbd04b8783 100644 --- a/docs/user/codes/forcefields.md +++ b/docs/user/codes/forcefields.md @@ -38,6 +38,7 @@ Support is provided for the following models, which can be selected using `atoma | MACE-MP-0 | `MACE` or `MACE_MP_0` (recommended) | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | | MACE-MP-0b3 | `MACE_MP_0B3` | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | | MACE-MPA-0 | `MACE_MPA_0` | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | +| MACE-Field | `MACE_Field` | [10.1103/b116-xy8k](https://doi.org/10.1103/b116-xy8k) | Born effective charges and dielectric tensor only, via `ForceFieldDielectricMaker`. Needs the MACE-Field fork of `mace_torch` and a model file. [See notes below.](#mace-field-notes) | | MatPES-PBE | `MATPES_PBE` | [10.48550/arXiv.2503.04070](https://doi.org/10.48550/arXiv.2503.04070) | Relies on `matgl`. Defaults to TensorNet architecture, but can also use M3GNet or CHGNet architectures via kwargs. See `atomate2.forcefields.utils._DEFAULT_CALCULATOR_KWARGS` for more options. | | MatPES-r2SCAN | `MATPES_R2SCAN`| [10.48550/arXiv.2503.04070](https://doi.org/10.48550/arXiv.2503.04070) | Relies on `matgl`. Defaults to TensorNet architecture, but can also use M3GNet or CHGNet architectures via kwargs. See `atomate2.forcefields.utils._DEFAULT_CALCULATOR_KWARGS` for more options. | | MatterSim | `MatterSim` | [arXiv:2405.04967](https://arxiv.org/abs/2405.04967) | Requires the `mattersim` package | @@ -73,6 +74,37 @@ However, this may not be preserved in future versions, and `calculator_meta` is [^calculator-meta-type-annotation]: In this context, the type annotation of the decoded dict should be either `Type[Calculator]` or `Callable[..., Calculator]`, where `Calculator` is from `ase.calculators.calculator`. +## Notes on MACE-Field {#mace-field-notes} + +[MACE-Field](https://doi.org/10.1103/b116-xy8k) gives the Born effective charges and the high-frequency dielectric tensor of inorganic crystals. +`ForceFieldDielectricMaker` computes them, and the phonon workflows use them for the non-analytical correction when it is set as `born_maker`. +MACE-Field is a fork of MACE that installs as `mace_torch`, so it cannot be installed together with MACE. +It is in the `strict-forcefields-mace-field` extra. +The model file has to be downloaded from the [MACE-Field releases](https://github.com/mdi-group/mace-field/releases) and passed as `model`: + +```py +from atomate2.forcefields.flows.phonons import PhononMaker +from atomate2.forcefields.jobs import ForceFieldDielectricMaker + +born_maker = ForceFieldDielectricMaker( + calculator_kwargs={"model": "MACEField-MH-0-omat-dielectric.model"} +) +flow = PhononMaker(born_maker=born_maker).make(structure) +``` + +The model head "mp-dielectric" is used by default. +The dielectric tensor is 1 + chi, with chi the electronic susceptibility of the model. + +```{warning} +This feature is new and has not been tested widely. +It might still change in future versions. +``` + +We compared it with the DFPT results in the Materials Project's Harmonic Phonon Database for NaCl, KCl, MgO and Bi4S3N2. +For NaCl, KCl and MgO, which are likely in its training data, the Born charges agree to 0.02 e and the dielectric constants to about 5%. +For Bi4S3N2, the Born charges are about 15% too small and the dielectric tensor is off by up to 10%. +The authors report a dielectric constant about 10% too large for alpha-quartz. + ## Notes on FairChem (Meta) models {#fairchem-notes} The FAIRChem models provided by Meta require extra authentication via HuggingFace: diff --git a/pyproject.toml b/pyproject.toml index 179e3ed325..74987aee39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -138,6 +138,11 @@ strict-forcefields-e3nn-limited = [ strict-forcefields-numpy-limited = [ "nequip-allegro==0.8.3", ] +# MACE-Field is a fork of MACE that installs as mace-torch, so it cannot share +# a group with mace-torch. Remove this group once ACEsuit/mace#1177 is released. +strict-forcefields-mace-field = [ + "mace-torch @ git+https://github.com/mdi-group/mace-field.git@45d5c5fa7b40a155855b3d155df1760e36849e64", +] strict = [ "atomate2[cclib, phonons, lobster, openmm, mp, defects, ase, ase-ext]", diff --git a/src/atomate2/common/flows/hiphive.py b/src/atomate2/common/flows/hiphive.py index 37bbd9a543..c8f84bf643 100644 --- a/src/atomate2/common/flows/hiphive.py +++ b/src/atomate2/common/flows/hiphive.py @@ -24,7 +24,11 @@ from pymatgen.core.structure import Structure from atomate2.aims.jobs.base import BaseAimsMaker - from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker + from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, + ) from atomate2.vasp.jobs.base import BaseVaspMaker SUPPORTED_CODES = frozenset(("vasp", "aims", "forcefields")) @@ -138,7 +142,7 @@ class BasePhononMaker(PurePhonopyMaker, ABC): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldStaticMaker, .BaseAsimsMaker, .BaseVaspMaker, or None + born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None Maker to compute the BORN charges. phonon_displacement_maker: .ForceFieldStaticMaker, .BaseAimsMaker, .BaseVaspMaker Maker used to compute the forces for a supercell. @@ -182,7 +186,7 @@ class BasePhononMaker(PurePhonopyMaker, ABC): static_energy_maker: ForceFieldRelaxMaker | BaseVaspMaker | BaseAimsMaker | None = ( None ) - born_maker: ForceFieldStaticMaker | BaseVaspMaker | None = None + born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None phonon_displacement_maker: ForceFieldStaticMaker | BaseVaspMaker | BaseAimsMaker = ( None ) diff --git a/src/atomate2/common/flows/pheasy.py b/src/atomate2/common/flows/pheasy.py index 8e3d5f64a9..910b606866 100644 --- a/src/atomate2/common/flows/pheasy.py +++ b/src/atomate2/common/flows/pheasy.py @@ -26,7 +26,11 @@ from pymatgen.core.structure import Structure from atomate2.aims.jobs.base import BaseAimsMaker - from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker + from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, + ) from atomate2.vasp.jobs.base import BaseVaspMaker SUPPORTED_CODES = frozenset(("vasp", "aims", "forcefields")) @@ -180,7 +184,7 @@ class BasePhononMaker(PurePhonopyMaker, ABC): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldStaticMaker, .BaseAsimsMaker, .BaseVaspMaker, or None + born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None Maker to compute the BORN charges. phonon_displacement_maker: .ForceFieldStaticMaker, .BaseAimsMaker, .BaseVaspMaker Maker used to compute the forces for a supercell. @@ -231,7 +235,7 @@ class BasePhononMaker(PurePhonopyMaker, ABC): static_energy_maker: ForceFieldRelaxMaker | BaseVaspMaker | BaseAimsMaker | None = ( None ) - born_maker: ForceFieldStaticMaker | BaseVaspMaker | None = None + born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None phonon_displacement_maker: ForceFieldStaticMaker | BaseVaspMaker | BaseAimsMaker = ( None ) diff --git a/src/atomate2/common/flows/phonons.py b/src/atomate2/common/flows/phonons.py index 9f30cc8c80..557c162b98 100644 --- a/src/atomate2/common/flows/phonons.py +++ b/src/atomate2/common/flows/phonons.py @@ -27,7 +27,11 @@ from pymatgen.core.structure import Structure from atomate2.aims.jobs.base import BaseAimsMaker - from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker + from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, + ) from atomate2.torchsim.core import TorchSimOptimizeMaker, TorchSimStaticMaker from atomate2.vasp.jobs.base import BaseVaspMaker @@ -106,8 +110,8 @@ class BasePhononMaker(Maker, ABC): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldStaticMaker, .BaseAsimsMaker, .BaseVaspMaker, - .TorchSimStaticMaker, or None + born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, .TorchSimStaticMaker, + or None Maker to compute the BORN charges. phonon_displacement_maker: .ForceFieldStaticMaker, .BaseAimsMaker, .BaseVaspMaker, .TorchSimStaticMaker @@ -167,9 +171,9 @@ class BasePhononMaker(Maker, ABC): | TorchSimStaticMaker | None ) = None - born_maker: ForceFieldStaticMaker | BaseVaspMaker | TorchSimStaticMaker | None = ( - None - ) + born_maker: ( + ForceFieldDielectricMaker | BaseVaspMaker | TorchSimStaticMaker | None + ) = None phonon_displacement_maker: ( ForceFieldStaticMaker | BaseVaspMaker | BaseAimsMaker | TorchSimStaticMaker ) = None @@ -339,12 +343,17 @@ def make( born_job = self.born_maker.make(structure, **born_kwargs) jobs.append(born_job) - # I am not happy how we currently access "born" charges - # This is very vasp specific code aims and forcefields - # do not support this at the moment, if this changes we have - # to update this section - epsilon_static = born_job.output.calcs_reversed[0].output.epsilon_static - born = born_job.output.calcs_reversed[0].output.outcar["born"] + # a force field dielectric document has the Born charges and the + # dielectric tensor as fields, a VASP task document has them in its + # last calculation + schema = born_job.output_schema + if schema is not None and "born" in schema.model_fields: + epsilon_static = born_job.output.epsilon_static + born = born_job.output.born + else: + calc_output = born_job.output.calcs_reversed[0].output + epsilon_static = calc_output.epsilon_static + born = calc_output.outcar["born"] born_run_job_dir = born_job.output.dir_name born_run_uuid = born_job.output.uuid diff --git a/src/atomate2/common/jobs/hiphive.py b/src/atomate2/common/jobs/hiphive.py index f1b073707e..8d5791d03e 100644 --- a/src/atomate2/common/jobs/hiphive.py +++ b/src/atomate2/common/jobs/hiphive.py @@ -22,7 +22,6 @@ from packaging.version import parse as parse_version from phonopy.file_IO import parse_FORCE_CONSTANTS from phonopy.interface.vasp import write_vasp -from phonopy.structure.symmetry import symmetrize_borns_and_epsilon from pymatgen.core import Structure from pymatgen.io.ase import AseAtomsAdaptor from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure @@ -43,6 +42,7 @@ _run_band_structure_and_plot, _run_total_dos_and_plot, ) +from atomate2.common.schemas.phonons import _set_nac_params if TYPE_CHECKING: from ase.atoms import Atoms @@ -525,29 +525,14 @@ def generate_frequencies_eigenvectors( # get the born charges and dielectric constant if born is not None and epsilon_static is not None: - if len(structure) == len(born): - borns, epsilon = symmetrize_borns_and_epsilon( - ucell=phonon.unitcell, - borns=np.array(born), - epsilon=np.array(epsilon_static), - symprec=symprec, - primitive_matrix=phonon.primitive_matrix, - supercell_matrix=phonon.supercell_matrix, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - raise ValueError( - "Number of born charges does not agree with number of atoms" - ) - - if code == "vasp" and not np.all(np.isclose(borns, 0.0)): - phonon.nac_params = { - "born": borns, - "dielectric": epsilon, - "factor": 14.399652, - } - # Other codes could be added here - + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) else: borns = None epsilon = None diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 6c69ca1176..4564e1ea57 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -28,7 +28,6 @@ from packaging.version import parse as parse_version from phonopy.file_IO import parse_FORCE_CONSTANTS from phonopy.interface.vasp import write_vasp -from phonopy.structure.symmetry import symmetrize_borns_and_epsilon from pymatgen.core import Structure from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure from pymatgen.io.vasp import Kpoints @@ -47,6 +46,7 @@ _run_band_structure_and_plot, _run_total_dos_and_plot, ) +from atomate2.common.schemas.phonons import _set_nac_params if TYPE_CHECKING: from collections.abc import Sequence @@ -717,29 +717,14 @@ def generate_frequencies_eigenvectors( # get the born charges and dielectric constant if born is not None and epsilon_static is not None: - if len(structure) == len(born): - borns, epsilon = symmetrize_borns_and_epsilon( - ucell=phonon.unitcell, - borns=np.array(born), - epsilon=np.array(epsilon_static), - symprec=symprec, - primitive_matrix=phonon.primitive_matrix, - supercell_matrix=phonon.supercell_matrix, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - raise ValueError( - "Number of born charges does not agree with number of atoms" - ) - - if code == "vasp" and not np.all(np.isclose(borns, 0.0)): - phonon.nac_params = { - "born": borns, - "dielectric": epsilon, - "factor": 14.399652, - } - # Other codes could be added here - + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) else: borns = None epsilon = None diff --git a/src/atomate2/common/jobs/phonons.py b/src/atomate2/common/jobs/phonons.py index a148f047d0..7130f10279 100644 --- a/src/atomate2/common/jobs/phonons.py +++ b/src/atomate2/common/jobs/phonons.py @@ -23,7 +23,6 @@ from packaging.version import parse as parse_version from phonopy import Phonopy from phonopy.phonon.band_structure import get_band_qpoints_and_path_connections -from phonopy.structure.symmetry import symmetrize_borns_and_epsilon from pymatgen.core import Structure from pymatgen.io.phonopy import ( get_ph_bs_symm_line, @@ -39,7 +38,7 @@ from pymatgen.symmetry.kpath import KPathSeek from atomate2.common.schemas.phonons import PhononBSDOSDoc as Atomate2PhononBSDOSDoc -from atomate2.common.schemas.phonons import get_factor +from atomate2.common.schemas.phonons import _set_nac_params, get_factor from atomate2.common.utils import check_class_name, get_supercell_matrix from atomate2.vasp.jobs.base import BaseVaspMaker @@ -544,27 +543,14 @@ def generate_frequencies_eigenvectors( set_of_forces = [np.array(forces) for forces in displacement_data["forces"]] if born is not None and epsilon_static is not None: - if len(structure) == len(born): - borns, epsilon = symmetrize_borns_and_epsilon( - ucell=phonon.unitcell, - borns=np.array(born), - epsilon=np.array(epsilon_static), - symprec=symprec, - primitive_matrix=phonon.primitive_matrix, - supercell_matrix=phonon.supercell_matrix, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - raise ValueError( - "Number of Born charges does not agree with number of atoms" - ) - if code == "vasp" and not np.all(np.isclose(borns, 0.0)): - phonon.nac_params = { - "born": borns, - "dielectric": epsilon, - "factor": 14.399652, # TODO: where is this magic number coming from? - } - # Other codes could be added here + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) else: borns = None epsilon = None diff --git a/src/atomate2/common/schemas/phonons.py b/src/atomate2/common/schemas/phonons.py index 30d4a645d0..5d728fa238 100644 --- a/src/atomate2/common/schemas/phonons.py +++ b/src/atomate2/common/schemas/phonons.py @@ -62,6 +62,58 @@ def get_factor(code: str) -> float: raise ValueError(f"Frequency conversion factor for code ({code}) not defined.") +def _set_nac_params( + phonon: Phonopy, + born: Sequence[Matrix3D], + epsilon_static: Matrix3D, + symprec: float, + code: str, + is_symmetry: bool = True, +) -> tuple[np.ndarray, np.ndarray]: + """ + Symmetrize the Born charges and the dielectric tensor and set the NAC. + + The non-analytical correction is only set for VASP and force field + calculations, whose forces are in eV/Angstrom, and only if a Born charge + is not zero. + + Parameters + ---------- + phonon: Phonopy + Phonopy object whose unit cell the Born charges belong to. + born: Sequence[Matrix3D] + Born effective charges, one per atom of the unit cell. + epsilon_static: Matrix3D + High-frequency dielectric tensor. + symprec: float + Symmetry precision. + code: str + Code of the force calculations. + is_symmetry: bool + Whether to symmetrize the Born charges and the dielectric tensor. + + Returns + ------- + tuple[np.ndarray, np.ndarray] + The Born charges and the dielectric tensor. + """ + if len(born) != len(phonon.unitcell): + raise ValueError("Number of Born charges does not agree with number of atoms") + borns, epsilon = symmetrize_borns_and_epsilon( + ucell=phonon.unitcell, + borns=np.array(born), + epsilon=np.array(epsilon_static), + symprec=symprec, + primitive_matrix=phonon.primitive_matrix, + supercell_matrix=phonon.supercell_matrix, + is_symmetry=is_symmetry, + ) + if code in ("vasp", "forcefields") and not np.all(np.isclose(borns, 0.0)): + # e^2 / (4 pi epsilon_0) in eV Angstrom, for forces in eV/Angstrom + phonon.nac_params = {"born": borns, "dielectric": epsilon, "factor": 14.399652} + return borns, epsilon + + class PhononComputationalSettings(BaseModel): """Collection to store computational settings for the phonon computation.""" @@ -360,27 +412,14 @@ def from_forces_born( set_of_forces = [np.array(forces) for forces in displacement_data["forces"]] if born is not None and epsilon_static is not None: - if len(structure) == len(born): - borns, epsilon = symmetrize_borns_and_epsilon( - ucell=phonon.unitcell, - borns=np.array(born), - epsilon=np.array(epsilon_static), - symprec=symprec, - primitive_matrix=phonon.primitive_matrix, - supercell_matrix=phonon.supercell_matrix, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - raise ValueError( - "Number of Born charges does not agree with number of atoms" - ) - if code == "vasp" and not np.all(np.isclose(borns, 0.0)): - phonon.nac_params = { - "born": borns, - "dielectric": epsilon, - "factor": 14.399652, - } - # Other codes could be added here + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) else: borns = None epsilon = None diff --git a/src/atomate2/forcefields/flows/hiphive.py b/src/atomate2/forcefields/flows/hiphive.py index f074f2a172..21ad8b60e3 100644 --- a/src/atomate2/forcefields/flows/hiphive.py +++ b/src/atomate2/forcefields/flows/hiphive.py @@ -7,7 +7,11 @@ from atomate2 import SETTINGS from atomate2.common.flows.hiphive import BasePhononMaker -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, +) @dataclass @@ -80,8 +84,8 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldStaticMaker or None - Maker to compute the BORN charges. + born_maker: .ForceFieldDielectricMaker or None + Maker to compute the BORN charges, for example with MACE-Field. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. generate_frequencies_eigenvectors_kwargs : dict @@ -130,7 +134,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldStaticMaker | None = None + born_maker: ForceFieldDielectricMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/flows/pheasy.py b/src/atomate2/forcefields/flows/pheasy.py index d9db491809..03e46f0f5a 100644 --- a/src/atomate2/forcefields/flows/pheasy.py +++ b/src/atomate2/forcefields/flows/pheasy.py @@ -7,7 +7,11 @@ from atomate2 import SETTINGS from atomate2.common.flows.pheasy import BasePhononMaker -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, +) @dataclass @@ -80,8 +84,8 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldStaticMaker or None - Maker to compute the BORN charges. + born_maker: .ForceFieldDielectricMaker or None + Maker to compute the BORN charges, for example with MACE-Field. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. generate_frequencies_eigenvectors_kwargs : dict @@ -130,7 +134,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldStaticMaker | None = None + born_maker: ForceFieldDielectricMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/flows/phonons.py b/src/atomate2/forcefields/flows/phonons.py index dfc428a5cb..b55b0bee0b 100644 --- a/src/atomate2/forcefields/flows/phonons.py +++ b/src/atomate2/forcefields/flows/phonons.py @@ -7,7 +7,11 @@ from atomate2 import SETTINGS from atomate2.common.flows.phonons import BasePhononMaker -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, +) from atomate2.forcefields.utils import MLFF if TYPE_CHECKING: @@ -88,8 +92,8 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldStaticMaker or None - Maker to compute the BORN charges. + born_maker: .ForceFieldDielectricMaker or None + Maker to compute the BORN charges, for example with MACE-Field. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. generate_frequencies_eigenvectors_kwargs : dict @@ -139,7 +143,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldStaticMaker | None = None + born_maker: ForceFieldDielectricMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/jobs.py b/src/atomate2/forcefields/jobs.py index 6ac7295b39..b617089c20 100644 --- a/src/atomate2/forcefields/jobs.py +++ b/src/atomate2/forcefields/jobs.py @@ -5,17 +5,29 @@ import logging import warnings from dataclasses import dataclass, field +from pathlib import Path from typing import TYPE_CHECKING -from jobflow import job +import numpy as np +from jobflow import Maker, job +from pymatgen.io.ase import AseAtomsAdaptor +from pymatgen.util.due import Doi, due from atomate2.ase.jobs import AseRelaxMaker -from atomate2.forcefields.schemas import ForceFieldTaskDocument -from atomate2.forcefields.utils import _FORCEFIELD_DATA_OBJECTS, MLFF, ForceFieldMixin +from atomate2.forcefields.schemas import ( + ForceFieldDielectricDocument, + ForceFieldTaskDocument, +) +from atomate2.forcefields.utils import ( + _FORCEFIELD_DATA_OBJECTS, + MLFF, + ForceFieldMixin, + _get_pkg_version, + revert_default_dtype, +) if TYPE_CHECKING: from collections.abc import Callable - from pathlib import Path from pymatgen.core.structure import Molecule, Structure @@ -213,3 +225,67 @@ class ForceFieldStaticMaker(ForceFieldRelaxMaker): optimizer_kwargs: dict = field(default_factory=dict) calculator_kwargs: dict = field(default_factory=dict) task_document_kwargs: dict = field(default_factory=dict) + + +@due.dcite( + Doi("10.1103/b116-xy8k"), + description="MACE-Field: Born effective charges and dielectric tensor", +) +@dataclass +class ForceFieldDielectricMaker(ForceFieldMixin, Maker): + """ + Maker for the Born effective charges and the dielectric tensor from a force field. + + The force field must give the Born effective charges and the electronic + susceptibility chi as the results "becs" and "polarizability", as MACE-Field + does. The high-frequency dielectric tensor is 1 + chi. Unless an electric + field is set in calculator_kwargs, both are computed at zero field. + + Parameters + ---------- + name : str + The job name. + force_field_name : str or .MLFF or dict + The name of the force field. + calculator_kwargs : dict + Keyword arguments that will get passed to the ASE calculator. For + MACE-Field, "model" is the path of the model file. + """ + + name: str = "Force field dielectric" + force_field_name: str | MLFF | dict = MLFF.MACE_Field + calculator_kwargs: dict = field(default_factory=dict) + + @job(output_schema=ForceFieldDielectricDocument) + def make( + self, structure: Structure, prev_dir: str | Path | None = None + ) -> ForceFieldDielectricDocument: + """ + Compute the Born effective charges and the dielectric tensor. + + Parameters + ---------- + structure: .Structure + A pymatgen structure. + prev_dir : str or Path or None + A previous calculation directory. Unused, just added to match the + method signature of other makers. + + Returns + ------- + ForceFieldDielectricDocument + """ + atoms = AseAtomsAdaptor.get_atoms(structure) + with revert_default_dtype(): + atoms.calc = self._get_calculator() + atoms.get_potential_energy() + return ForceFieldDielectricDocument( + structure=structure, + born=atoms.calc.results["becs"].tolist(), + epsilon_static=( + np.eye(3) + atoms.calc.results["polarizability"].reshape(3, 3) + ).tolist(), + forcefield_name=self.force_field_name, + forcefield_version=_get_pkg_version(self.calculator_meta), + dir_name=str(Path.cwd()), + ) diff --git a/src/atomate2/forcefields/schemas.py b/src/atomate2/forcefields/schemas.py index 51a0e67308..2283112883 100644 --- a/src/atomate2/forcefields/schemas.py +++ b/src/atomate2/forcefields/schemas.py @@ -5,9 +5,10 @@ import warnings from typing import TYPE_CHECKING, Any +from emmet.core.math import Matrix3D from emmet.core.types.enums import StoreTrajectoryOption from pydantic import BaseModel, Field -from pymatgen.core import Molecule +from pymatgen.core import Molecule, Structure from atomate2.ase.schemas import ( AseMoleculeTaskDoc, @@ -178,3 +179,22 @@ def from_ase_compatible_result( if isinstance(result.final_mol_or_struct, Molecule) else cls ).from_ase_task_doc(ase_task_doc, **ff_kwargs) + + +class ForceFieldDielectricDocument(BaseModel): + """Born effective charges and dielectric tensor from a force field.""" + + structure: Structure = Field(description="The structure of the calculation.") + born: list[Matrix3D] = Field( + description="Born effective charges, one per site, in units of e." + ) + epsilon_static: Matrix3D = Field( + description="The high-frequency dielectric tensor." + ) + forcefield_name: str | None = Field(None, description="Name of the force field.") + forcefield_version: str | None = Field( + None, description="Version of the force field package." + ) + dir_name: str | None = Field( + None, description="Directory where the calculation was performed." + ) diff --git a/src/atomate2/forcefields/utils.py b/src/atomate2/forcefields/utils.py index 2cd486e43e..19636fe628 100644 --- a/src/atomate2/forcefields/utils.py +++ b/src/atomate2/forcefields/utils.py @@ -40,6 +40,7 @@ class MLFF(Enum): # TODO inherit from StrEnum when 3.11+ MACE_MP_0 = "MACE-MP-0" MACE_MPA_0 = "MACE-MPA-0" MACE_MP_0B3 = "MACE-MP-0b3" + MACE_Field = "MACE-Field" GAP = "GAP" M3GNet = "M3GNet" CHGNet = "CHGNet" @@ -78,6 +79,7 @@ def _missing_(cls, value: Any) -> Any: MLFF.MACE_MP_0: {"model": "medium"}, MLFF.MACE_MP_0B3: {"model": "medium-0b3"}, MLFF.MACE_MPA_0: {"model": "medium-mpa-0"}, + MLFF.MACE_Field: {"head": "mp-dielectric", "default_dtype": "float64"}, MLFF.MATPES_PBE: { "architecture": "TensorNet", "version": "2025.2", @@ -428,6 +430,17 @@ def ase_calculator( else: calculator = mace_mp(default_dtype=default_dtype or "", **kwargs) + case MLFF.MACE_Field: + # needs the MACE-Field fork of mace and the path of a model file + from mace.calculators import MACECalculator + + calculator = MACECalculator( + model_paths=kwargs.pop("model"), + model_type="MACEField", + default_dtype=default_dtype or "", + **kwargs, + ) + case MLFF.Nequip | MLFF.Allegro: from nequip.integrations.ase import NequIPCalculator @@ -541,7 +554,13 @@ def _get_pkg_name(calculator_meta: MLFF | str | dict[str, Any]) -> str | None: ff_pkg = "fairchem.core" case MLFF.GAP: ff_pkg = "quippy-ase" - case MLFF.MACE | MLFF.MACE_MP_0 | MLFF.MACE_MPA_0 | MLFF.MACE_MP_0B3: + case ( + MLFF.MACE + | MLFF.MACE_MP_0 + | MLFF.MACE_MPA_0 + | MLFF.MACE_MP_0B3 + | MLFF.MACE_Field + ): ff_pkg = "mace-torch" case MLFF.MatterSim: ff_pkg = "mattersim" diff --git a/tests/forcefields/conftest.py b/tests/forcefields/conftest.py index 5646bc08e1..dd1dd901fd 100644 --- a/tests/forcefields/conftest.py +++ b/tests/forcefields/conftest.py @@ -3,13 +3,18 @@ import hashlib import tempfile import urllib.request +from importlib import import_module +from importlib.util import find_spec from pathlib import Path from typing import TYPE_CHECKING +import numpy as np import pytest import torch +from ase.calculators.calculator import Calculator, all_changes from emmet.core.utils import get_hash_blocked +from atomate2.forcefields.jobs import ForceFieldDielectricMaker from atomate2.forcefields.utils import MLFF, _get_pkg_version if TYPE_CHECKING: @@ -21,6 +26,10 @@ ) for mlff in MLFF } +# the MACE-Field fork installs as mace-torch, so only its model class tells them apart +_INSTALLED_MLFF["MACE_Field"] = find_spec("mace") is not None and hasattr( + import_module("mace.modules.extensions"), "MACEField" +) def mlff_is_installed(mlff: str | MLFF) -> bool: @@ -53,3 +62,30 @@ def get_deepmd_pretrained_model_path(test_dir: Path) -> Path: raise RuntimeError(f"MD5 mismatch: {file_md5} != {ref_md5}") yield Path(local_path.name) local_path.close() + + +class FakeDielectricCalculator(Calculator): + """Born charges of +2 and -2 and a susceptibility of 3, as MACE-Field gives them. + + The atoms of the first species get +2, all others -2. + """ + + implemented_properties = ("energy", "becs", "polarizability") + + def calculate(self, atoms=None, properties=None, system_changes=all_changes): + super().calculate(atoms, properties, system_changes) + sign = np.where(self.atoms.numbers == self.atoms.numbers[0], 1.0, -1.0) + self.results = { + "energy": 0.0, + "becs": 2 * sign[:, None, None] * np.eye(3), + "polarizability": 3 * np.eye(3), + } + + +@pytest.fixture +def fake_dielectric_calculator(monkeypatch): + monkeypatch.setattr( + ForceFieldDielectricMaker, + "_get_calculator", + lambda _self: FakeDielectricCalculator(), + ) diff --git a/tests/forcefields/flows/test_phonon.py b/tests/forcefields/flows/test_phonon.py index 71765c4fdb..708ac1d0ee 100644 --- a/tests/forcefields/flows/test_phonon.py +++ b/tests/forcefields/flows/test_phonon.py @@ -16,10 +16,15 @@ ) from jobflow import Flow, JobStore, run_locally from numpy.testing import assert_allclose +from pymatgen.core import Lattice from pymatgen.core.structure import Structure from atomate2.forcefields.flows.phonons import PhononMaker -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, +) from atomate2.forcefields.utils import MLFF from ..conftest import mlff_is_installed # noqa: TID252 @@ -286,3 +291,28 @@ def test_ext_load_phonon_initialization(): assert maker.bulk_relax_maker.ase_calculator_name == "mace_mp" assert maker.static_energy_maker.ase_calculator_name == "mace_mp" assert maker.phonon_displacement_maker.ase_calculator_name == "mace_mp" + + +def test_phonon_wf_force_field_born_charges(clean_dir, fake_dielectric_calculator): + """Born charges from a force field dielectric job enter the NAC.""" + structure = Structure.from_spacegroup( + "Fm-3m", Lattice.cubic(4.17), ["Ni", "O"], [[0, 0, 0], [0.5, 0.5, 0.5]] + ).get_primitive_structure() + emt = {"@module": "ase.calculators.emt", "@callable": "EMT"} + flow = PhononMaker( + bulk_relax_maker=None, + static_energy_maker=None, + phonon_displacement_maker=ForceFieldStaticMaker(force_field_name=emt), + born_maker=ForceFieldDielectricMaker(), + min_length=8, + create_thermal_displacements=False, + store_force_constants=False, + ).make(structure) + responses = run_locally(flow, create_folders=True, ensure_success=True) + doc = responses[flow[-1].uuid][1].output + + assert np.array(doc.born) == pytest.approx( + np.array([2, -2])[:, None, None] * np.eye(3) + ) + assert np.array(doc.epsilon_static) == pytest.approx(4 * np.eye(3)) + assert doc.phonon_bandstructure.has_nac diff --git a/tests/forcefields/test_jobs.py b/tests/forcefields/test_jobs.py index 92accf3033..2591070d7b 100644 --- a/tests/forcefields/test_jobs.py +++ b/tests/forcefields/test_jobs.py @@ -6,13 +6,18 @@ import numpy as np import pytest from jobflow import run_locally -from pymatgen.core import Molecule, Structure +from pymatgen.core import Lattice, Molecule, Structure from pymatgen.symmetry.analyzer import SpacegroupAnalyzer from pytest import approx from atomate2.forcefields import MLFF -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, +) from atomate2.forcefields.schemas import ( + ForceFieldDielectricDocument, ForceFieldMoleculeTaskDocument, ForceFieldTaskDocument, ) @@ -909,3 +914,18 @@ def test_roundtrip_legacy(si_structure: Structure, import_str: str): assert deser.maker.mlff == MLFF.Forcefield assert isinstance(deser.maker.calculator, MACECalculator) assert isinstance(deser.maker.calculator, Calculator) + + +def test_dielectric_maker(fake_dielectric_calculator, clean_dir): + structure = Structure.from_spacegroup( + "Fm-3m", Lattice.cubic(5.6), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] + ).get_primitive_structure() + job = ForceFieldDielectricMaker(force_field_name="MACE-Field").make(structure) + output = run_locally(job, ensure_success=True)[job.uuid][1].output + + assert isinstance(output, ForceFieldDielectricDocument) + assert output.structure == structure + assert np.array(output.born) == approx(np.array([2, -2])[:, None, None] * np.eye(3)) + # eps_inf = 1 + chi + assert np.array(output.epsilon_static) == approx(4 * np.eye(3)) + assert output.forcefield_name == "MLFF.MACE_Field" diff --git a/tests/forcefields/test_mace_field.py b/tests/forcefields/test_mace_field.py new file mode 100644 index 0000000000..0e734c81e4 --- /dev/null +++ b/tests/forcefields/test_mace_field.py @@ -0,0 +1,55 @@ +"""Test the Born charges and the dielectric tensor of the MACE-Field model. + +The MACE-Field fork of mace installs as mace-torch, so these tests only run in +the mace-field CI group. +""" + +import hashlib +import urllib.request + +import numpy as np +import pytest +from emmet.core.utils import get_hash_blocked +from jobflow import run_locally +from pymatgen.core import Lattice, Structure + +from atomate2.forcefields.jobs import ForceFieldDielectricMaker + +from .conftest import mlff_is_installed + +pytestmark = pytest.mark.skipif( + not mlff_is_installed("MACE_Field"), reason="MACE-Field is not installed" +) + +MODEL_URL = ( + "https://github.com/mdi-group/mace-field/releases/download/1.0.2/" + "MACEField-MH-0-omat-dielectric.model" +) +MODEL_MD5 = "1dac204204e368d94b2b8a597c9fdf8d" + + +@pytest.fixture(scope="module") +def mace_field_model(tmp_path_factory): + path = tmp_path_factory.mktemp("mace_field") / MODEL_URL.rsplit("/", 1)[-1] + urllib.request.urlretrieve(MODEL_URL, path) + assert get_hash_blocked(str(path), hasher=hashlib.md5()) == MODEL_MD5 + return path + + +def test_mace_field_dielectric_maker(mace_field_model, clean_dir): + structure = Structure.from_spacegroup( + "Fm-3m", Lattice.cubic(5.64), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] + ).get_primitive_structure() + job = ForceFieldDielectricMaker( + calculator_kwargs={"model": str(mace_field_model)} + ).make(structure) + output = run_locally(job, ensure_success=True)[job.uuid][1].output + + born = np.array(output.born) + # the acoustic sum rule holds by construction + assert born.sum(axis=0) == pytest.approx(np.zeros((3, 3)), abs=1e-6) + # cubic, so the tensors are isotropic. DFPT gives about 1.09 and 2.5. + species = [str(site.specie) for site in output.structure] + assert born[species.index("Na")] == pytest.approx(1.0898 * np.eye(3), abs=1e-3) + epsilon = np.array(output.epsilon_static) + assert epsilon == pytest.approx(2.5845 * np.eye(3), abs=1e-3) From ac2d733a01794725657c22c937729c7e4c2af378 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 11:26:26 -0700 Subject: [PATCH 23/43] Reshape the flattened MACE-Field Born charges to 3x3 tensors --- src/atomate2/forcefields/jobs.py | 3 ++- tests/forcefields/conftest.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/atomate2/forcefields/jobs.py b/src/atomate2/forcefields/jobs.py index b617089c20..ba767b9862 100644 --- a/src/atomate2/forcefields/jobs.py +++ b/src/atomate2/forcefields/jobs.py @@ -281,7 +281,8 @@ def make( atoms.get_potential_energy() return ForceFieldDielectricDocument( structure=structure, - born=atoms.calc.results["becs"].tolist(), + # MACE-Field returns the Born charges flattened, one row of 9 per atom + born=atoms.calc.results["becs"].reshape(-1, 3, 3).tolist(), epsilon_static=( np.eye(3) + atoms.calc.results["polarizability"].reshape(3, 3) ).tolist(), diff --git a/tests/forcefields/conftest.py b/tests/forcefields/conftest.py index dd1dd901fd..532cbd383a 100644 --- a/tests/forcefields/conftest.py +++ b/tests/forcefields/conftest.py @@ -77,7 +77,7 @@ def calculate(self, atoms=None, properties=None, system_changes=all_changes): sign = np.where(self.atoms.numbers == self.atoms.numbers[0], 1.0, -1.0) self.results = { "energy": 0.0, - "becs": 2 * sign[:, None, None] * np.eye(3), + "becs": (2 * sign[:, None, None] * np.eye(3)).reshape(-1, 9), "polarizability": 3 * np.eye(3), } From 81067e90f9d6542182fb51eb478e63bd25b5c1c2 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 11:38:17 -0700 Subject: [PATCH 24/43] Use the force field Born charges of #1573 in the finite-temperature workflow --- docs/user/codes/vasp.md | 12 +++-- .../flows/finite_temperature_phonons.py | 17 ++++++- .../common/jobs/finite_temperature_phonons.py | 10 +++-- src/atomate2/common/jobs/phonons.py | 45 ------------------- .../flows/finite_temperature_phonons.py | 6 ++- .../flows/test_finite_temperature_phonons.py | 34 +++++++++++++- 6 files changed, 68 insertions(+), 56 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index 3bfb713367..881c089397 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -493,13 +493,19 @@ flow = maker.make(structure) `run_npt=True` sets the NPT MD and the relaxation of the atoms in its cell. -A force field gives no Born charges, so the force field makers skip the non-analytical correction by default. -The Born charges and the dielectric tensor can still come from VASP. -Either pass `born` and `epsilon_static` to `make`, or set a VASP `born_maker`: +Most force fields give no Born charges, so the force field makers skip the non-analytical correction by default. +The Born charges and the dielectric tensor can come from MACE-Field, see the [force field notes](forcefields.md#mace-field-notes), or from VASP. +Either pass `born` and `epsilon_static` to `make`, or set a `born_maker`: ```python +from atomate2.forcefields.jobs import ForceFieldDielectricMaker from atomate2.vasp.jobs.core import DielectricMaker +# with MACE-Field +maker.born_maker = ForceFieldDielectricMaker( + calculator_kwargs={"model": "MACEField-MH-0-omat-dielectric.model"} +) +# or with VASP maker.born_maker = DielectricMaker() ``` diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 3d53f9d8d6..45dbc88b95 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -300,6 +300,11 @@ def make( if not np.allclose(matrix, np.diag(np.diag(matrix))): raise ValueError("pheasy needs a diagonal supercell matrix.") + # VASP sorts the atoms by electronegativity. Sorting here as well keeps + # the Born charges of a force field born_maker in the order of the fit. + if not isinstance(structure, OutputReference): + structure = structure.get_sorted_structure() + jobs: list[Job | Flow] = [] optimization_run_job_dir = optimization_run_uuid = None born_run_job_dir = born_run_uuid = None @@ -371,8 +376,16 @@ def make( born_kwargs[self.prev_calc_dir_argname] = prev_dir born_job = self.born_maker.make(structure, **born_kwargs) jobs.append(born_job) - born = born_job.output.calcs_reversed[0].output.outcar["born"] - epsilon_static = born_job.output.calcs_reversed[0].output.epsilon_static + # as in the phonon workflow, a force field dielectric document has the + # Born charges as fields, a VASP task document in its last calculation + schema = born_job.output_schema + if schema is not None and "born" in schema.model_fields: + born = born_job.output.born + epsilon_static = born_job.output.epsilon_static + else: + calc_output = born_job.output.calcs_reversed[0].output + born = calc_output.outcar["born"] + epsilon_static = calc_output.epsilon_static born_run_job_dir = born_job.output.dir_name born_run_uuid = born_job.output.uuid diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index 2e8413289a..4dc39e4f09 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -33,13 +33,17 @@ _get_kpath, _run_band_structure_and_plot, _run_total_dos_and_plot, - _set_nac_params, ) from atomate2.common.schemas.finite_temperature_phonons import ( FiniteTemperaturePhononDoc, TrajectoryHealth, ) -from atomate2.common.schemas.phonons import ForceConstants, PhononJobDirs, PhononUUIDs +from atomate2.common.schemas.phonons import ( + ForceConstants, + PhononJobDirs, + PhononUUIDs, + _set_nac_params, +) from atomate2.utils.path import strip_hostname if TYPE_CHECKING: @@ -815,7 +819,7 @@ def fit_finite_temperature_phonons( borns = epsilon = None if born is not None and epsilon_static is not None: - borns, epsilon = _set_nac_params(phonon, born, epsilon_static, symprec) + borns, epsilon = _set_nac_params(phonon, born, epsilon_static, symprec, code) # frequencies at the q-points commensurate with the supercell matrix = np.linalg.inv(phonon.primitive_matrix) @ phonon.supercell_matrix diff --git a/src/atomate2/common/jobs/phonons.py b/src/atomate2/common/jobs/phonons.py index 67d8207579..7130f10279 100644 --- a/src/atomate2/common/jobs/phonons.py +++ b/src/atomate2/common/jobs/phonons.py @@ -163,51 +163,6 @@ def _get_num_harmonic_supercells( return int(np.ceil(num_disp_sc * multiplier)) + 1 -def _set_nac_params( - phonon: Phonopy, - born: Sequence[Matrix3D], - epsilon_static: Matrix3D, - symprec: float, - is_symmetry: bool = True, -) -> tuple[np.ndarray, np.ndarray]: - """ - Symmetrize the Born charges and the dielectric tensor and set the NAC. - - The non-analytical correction is only set if a Born charge is not zero. - - Parameters - ---------- - phonon: Phonopy - Phonopy object whose unit cell the Born charges belong to. - born: Sequence[Matrix3D] - Born effective charges, one per atom of the unit cell. - epsilon_static: Matrix3D - High-frequency dielectric tensor. - symprec: float - Symmetry precision. - is_symmetry: bool - Whether to symmetrize the Born charges and the dielectric tensor. - - Returns - ------- - tuple[np.ndarray, np.ndarray] - The Born charges and the dielectric tensor. - """ - borns, epsilon = symmetrize_borns_and_epsilon( - ucell=phonon.unitcell, - borns=np.array(born), - epsilon=np.array(epsilon_static), - symprec=symprec, - primitive_matrix=phonon.primitive_matrix, - supercell_matrix=phonon.supercell_matrix, - is_symmetry=is_symmetry, - ) - if not np.all(np.isclose(borns, 0.0)): - # e^2 / (4 pi epsilon_0) in eV Angstrom, for forces in eV/Angstrom - phonon.nac_params = {"born": borns, "dielectric": epsilon, "factor": 14.399652} - return borns, epsilon - - def _get_kpath( structure: Structure, kpath_scheme: str, symprec: float, **kpath_kwargs ) -> tuple: diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py index ff395ac975..d36ca047a3 100644 --- a/src/atomate2/forcefields/flows/finite_temperature_phonons.py +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -141,8 +141,10 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): Maker for the relaxation of the unit cell. It keeps the symmetry of the structure. None skips the relaxation. born_maker: .Maker | None - Maker for the Born effective charges and the dielectric tensor. It is - None by default, as in the force field pheasy phonon workflow. + Maker for the Born effective charges and the dielectric tensor, for + example a ForceFieldDielectricMaker with MACE-Field or a VASP + DielectricMaker. It is None by default, as in the force field pheasy + phonon workflow. npt_maker: .ForceFieldMDMaker | None Maker for the NPT MD. It must not set dynamics or ase_md_kwargs. None skips the NPT MD. diff --git a/tests/forcefields/flows/test_finite_temperature_phonons.py b/tests/forcefields/flows/test_finite_temperature_phonons.py index 6e2895357b..0ae2877705 100644 --- a/tests/forcefields/flows/test_finite_temperature_phonons.py +++ b/tests/forcefields/flows/test_finite_temperature_phonons.py @@ -20,7 +20,11 @@ ForceFieldFiniteTemperaturePhononMaker, _get_force_field_md_maker, ) -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, +) from atomate2.forcefields.md import ForceFieldMDMaker from atomate2.vasp.jobs.core import DielectricMaker @@ -246,3 +250,31 @@ def test_finite_temperature_phonon_maker_emt_npt(clean_dir, cu3au): assert doc.trajectory_health.verdict == "stable" assert not doc.has_imaginary_modes assert np.max(doc.phonon_bandstructure.bands) == pytest.approx(6.554, rel=0.05) + + +def test_finite_temperature_phonon_maker_emt_born_charges( + clean_dir, cu3au, fake_dielectric_calculator +): + """Born charges from a force field dielectric job enter the NAC.""" + np.random.seed(103) # noqa: NPY002 + maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( + EMT, + min_length=7.0, + md_time_step=2.0, + md_time=1.0, + equilibration_time=0.2, + n_snapshots=10, + ) + maker.born_maker = ForceFieldDielectricMaker() + flow = maker.make(cu3au) + responses = run_locally(flow, create_folders=True, ensure_success=True) + doc = responses[flow.output.uuid][1].output + + # the fake calculator gives +2 to the first species of the sorted cell, Cu + born = np.array(doc.born) + assert born.shape == (4, 3, 3) + assert np.all(np.diagonal(born[:3], axis1=1, axis2=2) > 0) + assert np.all(np.diagonal(born[3:], axis1=1, axis2=2) < 0) + assert np.array(doc.epsilon_static) == pytest.approx(4 * np.eye(3)) + assert doc.uuids.born_run_uuid is not None + assert doc.phonon_bandstructure.has_nac From 79b5d4ff341d6b89cd7770daf991d58e5e5ffeed Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 12:12:31 -0700 Subject: [PATCH 25/43] some more force field Born charges --- .github/workflows/testing.yml | 9 +++- docs/user/codes/forcefields.md | 49 ++++++++++++++++------ pyproject.toml | 10 ++--- src/atomate2/common/flows/phonons.py | 15 +++---- src/atomate2/common/jobs/hiphive.py | 20 ++++----- src/atomate2/common/jobs/pheasy.py | 20 ++++----- src/atomate2/common/jobs/phonons.py | 20 ++++----- src/atomate2/common/schemas/phonons.py | 51 ++++++++++++----------- src/atomate2/forcefields/flows/hiphive.py | 11 +++-- src/atomate2/forcefields/flows/pheasy.py | 11 +++-- src/atomate2/forcefields/flows/phonons.py | 7 ++-- src/atomate2/forcefields/jobs.py | 6 +-- src/atomate2/forcefields/schemas.py | 9 +--- tests/common/schemas/test_phonons.py | 40 ++++++++++++++++++ tests/forcefields/conftest.py | 17 ++++---- tests/forcefields/flows/test_phonon.py | 28 +++++++++---- tests/forcefields/test_jobs.py | 2 +- tests/forcefields/test_mace_field.py | 3 +- tests/forcefields/test_md.py | 3 +- 19 files changed, 201 insertions(+), 130 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 2f8a35a073..12207d1b93 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -78,6 +78,11 @@ jobs: micromamba activate a2 uv pip install .[strict,strict-forcefields-${{ matrix.dep-group }},abinit,approxneb,aims,pheasy,phono3py] --group tests + # without the fork, the MACE-Field tests would be skipped + - name: Check that the MACE-Field fork is installed + if: matrix.dep-group == 'mace-field' + run: micromamba run -n a2 python -c "from mace.modules.extensions import MACEField" + - name: Install pymatgen from master if triggered by pymatgen repo dispatch if: github.event_name == 'repository_dispatch' && github.event.action == 'pymatgen-ci-trigger' run: | @@ -92,10 +97,10 @@ jobs: # running it single-process avoids the OOM that kills the runner when # xdist spawns multiple workers each holding a copy of the models. # The MACE-Field fork replaces mace-torch, so its group only runs the - # MACE-Field tests. + # MACE-Field tests, in one process. run: | micromamba activate a2 - pytest -v --durations=5 -n ${{ matrix.dep-group == 'torch-limited' && '1' || 'auto' }} --cov=atomate2 --cov-report=xml ${{ matrix.dep-group == 'mace-field' && 'tests/forcefields/test_mace_field.py' || 'tests/forcefields' }} + pytest -v --durations=5 -n ${{ (matrix.dep-group == 'torch-limited' || matrix.dep-group == 'mace-field') && '1' || 'auto' }} --cov=atomate2 --cov-report=xml ${{ matrix.dep-group == 'mace-field' && 'tests/forcefields/test_mace_field.py' || 'tests/forcefields' }} - name: Forcefield tutorial if: matrix.dep-group == 'torch-limited' diff --git a/docs/user/codes/forcefields.md b/docs/user/codes/forcefields.md index dbd04b8783..e9fefde698 100644 --- a/docs/user/codes/forcefields.md +++ b/docs/user/codes/forcefields.md @@ -35,10 +35,10 @@ Support is provided for the following models, which can be selected using `atoma | FAIRChem | `FAIRChem` | [Meta's FAIRChem Github](https://github.com/facebookresearch/fairchem) | Proprietary, requires extra authentication. [See notes below.](#fairchem-notes) | | Gaussian Approximation Potential (GAP) | `GAP` | [10.1103/PhysRevLett.104.136403](https://doi.org/10.1103/PhysRevLett.104.136403) | Relies on `quippy-ase` package | | M3GNet | `M3GNet` | [10.1038/s43588-022-00349-3](https://doi.org/10.1038/s43588-022-00349-3) | Relies on `matgl` package | +| MACE-Field | `MACE_Field` | [10.1103/b116-xy8k](https://doi.org/10.1103/b116-xy8k) | Born effective charges and dielectric tensor only, via `ForceFieldDielectricMaker`. Needs the MACE-Field fork of `mace_torch` and a model file. [See notes below.](#mace-field-notes) | | MACE-MP-0 | `MACE` or `MACE_MP_0` (recommended) | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | | MACE-MP-0b3 | `MACE_MP_0B3` | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | | MACE-MPA-0 | `MACE_MPA_0` | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | -| MACE-Field | `MACE_Field` | [10.1103/b116-xy8k](https://doi.org/10.1103/b116-xy8k) | Born effective charges and dielectric tensor only, via `ForceFieldDielectricMaker`. Needs the MACE-Field fork of `mace_torch` and a model file. [See notes below.](#mace-field-notes) | | MatPES-PBE | `MATPES_PBE` | [10.48550/arXiv.2503.04070](https://doi.org/10.48550/arXiv.2503.04070) | Relies on `matgl`. Defaults to TensorNet architecture, but can also use M3GNet or CHGNet architectures via kwargs. See `atomate2.forcefields.utils._DEFAULT_CALCULATOR_KWARGS` for more options. | | MatPES-r2SCAN | `MATPES_R2SCAN`| [10.48550/arXiv.2503.04070](https://doi.org/10.48550/arXiv.2503.04070) | Relies on `matgl`. Defaults to TensorNet architecture, but can also use M3GNet or CHGNet architectures via kwargs. See `atomate2.forcefields.utils._DEFAULT_CALCULATOR_KWARGS` for more options. | | MatterSim | `MatterSim` | [arXiv:2405.04967](https://arxiv.org/abs/2405.04967) | Requires the `mattersim` package | @@ -77,33 +77,56 @@ However, this may not be preserved in future versions, and `calculator_meta` is ## Notes on MACE-Field {#mace-field-notes} [MACE-Field](https://doi.org/10.1103/b116-xy8k) gives the Born effective charges and the high-frequency dielectric tensor of inorganic crystals. -`ForceFieldDielectricMaker` computes them, and the phonon workflows use them for the non-analytical correction when it is set as `born_maker`. -MACE-Field is a fork of MACE that installs as `mace_torch`, so it cannot be installed together with MACE. -It is in the `strict-forcefields-mace-field` extra. -The model file has to be downloaded from the [MACE-Field releases](https://github.com/mdi-group/mace-field/releases) and passed as `model`: +`ForceFieldDielectricMaker` computes them. +The phonon workflows use them for the non-analytical correction when it is set as `born_maker`. + +MACE-Field is a fork of MACE that installs as `mace_torch`, so it replaces MACE. +Install it with `pip install 'atomate2[mace-field]'`. +The fork still runs the MACE foundation models, so the forces can come from MACE in the same environment. +The model file has to be downloaded from the [MACE-Field releases](https://github.com/mdi-group/mace-field/releases). +There is no default model, so `model` must be set. +Give its absolute path, since each job runs in its own folder: ```py +from pymatgen.core import Lattice, Structure + from atomate2.forcefields.flows.phonons import PhononMaker from atomate2.forcefields.jobs import ForceFieldDielectricMaker -born_maker = ForceFieldDielectricMaker( - calculator_kwargs={"model": "MACEField-MH-0-omat-dielectric.model"} +structure = Structure.from_spacegroup( + "Fm-3m", Lattice.cubic(5.64), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] +).get_primitive_structure() + +maker = PhononMaker.from_force_field_name( + "MACE_MP_0", calculator_kwargs={"model": "medium-omat-0"} +) +# from_force_field_name sets born_maker to None +maker.born_maker = ForceFieldDielectricMaker( + calculator_kwargs={"model": "/path/to/MACEField-MH-0-omat-dielectric.model"} ) -flow = PhononMaker(born_maker=born_maker).make(structure) +flow = maker.make(structure) ``` -The model head "mp-dielectric" is used by default. -The dielectric tensor is 1 + chi, with chi the electronic susceptibility of the model. +The Born charges can also come from VASP. +Pass them to `make` as `born` and `epsilon_static`, or set a VASP maker such as `atomate2.vasp.jobs.core.DielectricMaker` as `born_maker`. + +Limitations: + +- Both tensors are computed at zero electric field. The dielectric tensor is the clamped-ion one, 1 + chi, with chi the electronic susceptibility of the model. +- The model has the heads "mp-dielectric", "mp-ferroelectric" and "pt_head". "mp-dielectric" is used by default. +- The model runs on the CPU unless `device` is set in `calculator_kwargs`. +- The fork reports itself as `mace-torch` 0.3.15, so this is the `forcefield_version` in the output. ```{warning} This feature is new and has not been tested widely. It might still change in future versions. ``` -We compared it with the DFPT results in the Materials Project's Harmonic Phonon Database for NaCl, KCl, MgO and Bi4S3N2. -For NaCl, KCl and MgO, which are likely in its training data, the Born charges agree to 0.02 e and the dielectric constants to about 5%. +As a spot check, we compared the "mp-dielectric" head with the DFPT results in the Materials Project's Harmonic Phonon Database for NaCl, KCl, MgO and Bi4S3N2. +NaCl, KCl and MgO are in the training data of MACE-Field. +For them, the Born charges agree to 0.02 e and the high-frequency dielectric constants to 5%. For Bi4S3N2, the Born charges are about 15% too small and the dielectric tensor is off by up to 10%. -The authors report a dielectric constant about 10% too large for alpha-quartz. +For alpha-quartz, the authors report a high-frequency dielectric constant of 2.64 along the c axis, against 2.41 from PBE DFPT. ## Notes on FairChem (Meta) models {#fairchem-notes} diff --git a/pyproject.toml b/pyproject.toml index 74987aee39..0afabfc6e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,6 +70,8 @@ defects = [ ase = ["ase>=3.26.0"] ase-ext = ["tblite>=0.3.0; platform_system=='Linux'"] forcefields-demo = ["chgnet>=0.3.8","atomate2[ase]"] +# the MACE-Field fork of MACE replaces mace-torch +mace-field = ["atomate2[ase]", "mace-torch @ git+https://github.com/mdi-group/mace-field.git@45d5c5fa7b40a155855b3d155df1760e36849e64"] torchsim = [ "torch-sim-atomistic[symmetry]==0.6.1; python_version >= '3.12'" @@ -138,11 +140,9 @@ strict-forcefields-e3nn-limited = [ strict-forcefields-numpy-limited = [ "nequip-allegro==0.8.3", ] -# MACE-Field is a fork of MACE that installs as mace-torch, so it cannot share -# a group with mace-torch. Remove this group once ACEsuit/mace#1177 is released. -strict-forcefields-mace-field = [ - "mace-torch @ git+https://github.com/mdi-group/mace-field.git@45d5c5fa7b40a155855b3d155df1760e36849e64", -] +# MACE-Field installs as mace-torch, so it cannot share a group with mace-torch. +# Remove this group once MACE-Field is in a mace-torch release (ACEsuit/mace#1177). +strict-forcefields-mace-field = ["atomate2[mace-field]"] strict = [ "atomate2[cclib, phonons, lobster, openmm, mp, defects, ase, ase-ext]", diff --git a/src/atomate2/common/flows/phonons.py b/src/atomate2/common/flows/phonons.py index 557c162b98..6a4861cac7 100644 --- a/src/atomate2/common/flows/phonons.py +++ b/src/atomate2/common/flows/phonons.py @@ -110,8 +110,7 @@ class BasePhononMaker(Maker, ABC): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, .TorchSimStaticMaker, - or None + born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None Maker to compute the BORN charges. phonon_displacement_maker: .ForceFieldStaticMaker, .BaseAimsMaker, .BaseVaspMaker, .TorchSimStaticMaker @@ -171,9 +170,7 @@ class BasePhononMaker(Maker, ABC): | TorchSimStaticMaker | None ) = None - born_maker: ( - ForceFieldDielectricMaker | BaseVaspMaker | TorchSimStaticMaker | None - ) = None + born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None phonon_displacement_maker: ( ForceFieldStaticMaker | BaseVaspMaker | BaseAimsMaker | TorchSimStaticMaker ) = None @@ -343,10 +340,10 @@ def make( born_job = self.born_maker.make(structure, **born_kwargs) jobs.append(born_job) - # a force field dielectric document has the Born charges and the - # dielectric tensor as fields, a VASP task document has them in its - # last calculation - schema = born_job.output_schema + # A force field dielectric document has the Born charges and the + # dielectric tensor as fields. A VASP task document has them in its + # last calculation. + schema = getattr(born_job, "output_schema", None) if schema is not None and "born" in schema.model_fields: epsilon_static = born_job.output.epsilon_static born = born_job.output.born diff --git a/src/atomate2/common/jobs/hiphive.py b/src/atomate2/common/jobs/hiphive.py index 8d5791d03e..3d56b1125b 100644 --- a/src/atomate2/common/jobs/hiphive.py +++ b/src/atomate2/common/jobs/hiphive.py @@ -524,18 +524,14 @@ def generate_frequencies_eigenvectors( ) # get the born charges and dielectric constant - if born is not None and epsilon_static is not None: - borns, epsilon = _set_nac_params( - phonon, - born, - epsilon_static, - symprec, - code, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - borns = None - epsilon = None + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) prim = ase_read("POSCAR") supercell = ase_read("SPOSCAR") diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 4564e1ea57..3389d8f689 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -716,18 +716,14 @@ def generate_frequencies_eigenvectors( ) # get the born charges and dielectric constant - if born is not None and epsilon_static is not None: - borns, epsilon = _set_nac_params( - phonon, - born, - epsilon_static, - symprec, - code, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - borns = None - epsilon = None + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) prim = ase_read("POSCAR") supercell = ase_read("SPOSCAR") diff --git a/src/atomate2/common/jobs/phonons.py b/src/atomate2/common/jobs/phonons.py index 7130f10279..332b3aace9 100644 --- a/src/atomate2/common/jobs/phonons.py +++ b/src/atomate2/common/jobs/phonons.py @@ -542,18 +542,14 @@ def generate_frequencies_eigenvectors( ) set_of_forces = [np.array(forces) for forces in displacement_data["forces"]] - if born is not None and epsilon_static is not None: - borns, epsilon = _set_nac_params( - phonon, - born, - epsilon_static, - symprec, - code, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - borns = None - epsilon = None + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) # Produces all force constants phonon.produce_force_constants(forces=set_of_forces) diff --git a/src/atomate2/common/schemas/phonons.py b/src/atomate2/common/schemas/phonons.py index 5d728fa238..ccb955c5b6 100644 --- a/src/atomate2/common/schemas/phonons.py +++ b/src/atomate2/common/schemas/phonons.py @@ -35,6 +35,9 @@ logger = logging.getLogger(__name__) +# codes whose forces are in eV/Angstrom +_EV_ANGSTROM_CODES = ("ase", "forcefields", "vasp", "torchsim") + def get_factor(code: str) -> float: """ @@ -55,7 +58,7 @@ def get_factor(code: str) -> float: ValueError If code is not defined """ - if code in ["ase", "forcefields", "vasp", "torchsim"]: + if code in _EV_ANGSTROM_CODES: return VaspToTHz if code == "aims": return omegaToTHz # Based on CODATA 2002 @@ -64,26 +67,25 @@ def get_factor(code: str) -> float: def _set_nac_params( phonon: Phonopy, - born: Sequence[Matrix3D], - epsilon_static: Matrix3D, + born: Sequence[Matrix3D] | None, + epsilon_static: Matrix3D | None, symprec: float, code: str, is_symmetry: bool = True, -) -> tuple[np.ndarray, np.ndarray]: +) -> tuple[np.ndarray | None, np.ndarray | None]: """ Symmetrize the Born charges and the dielectric tensor and set the NAC. - The non-analytical correction is only set for VASP and force field - calculations, whose forces are in eV/Angstrom, and only if a Born charge - is not zero. + The non-analytical correction is set unless all Born charges are zero. Its + factor assumes forces in eV/Angstrom, so it is only set for those codes. Parameters ---------- phonon: Phonopy Phonopy object whose unit cell the Born charges belong to. - born: Sequence[Matrix3D] + born: Sequence[Matrix3D] | None Born effective charges, one per atom of the unit cell. - epsilon_static: Matrix3D + epsilon_static: Matrix3D | None High-frequency dielectric tensor. symprec: float Symmetry precision. @@ -94,9 +96,12 @@ def _set_nac_params( Returns ------- - tuple[np.ndarray, np.ndarray] - The Born charges and the dielectric tensor. + tuple[np.ndarray | None, np.ndarray | None] + The Born charges and the dielectric tensor, or None if either was not + given. """ + if born is None or epsilon_static is None: + return None, None if len(born) != len(phonon.unitcell): raise ValueError("Number of Born charges does not agree with number of atoms") borns, epsilon = symmetrize_borns_and_epsilon( @@ -108,8 +113,8 @@ def _set_nac_params( supercell_matrix=phonon.supercell_matrix, is_symmetry=is_symmetry, ) - if code in ("vasp", "forcefields") and not np.all(np.isclose(borns, 0.0)): - # e^2 / (4 pi epsilon_0) in eV Angstrom, for forces in eV/Angstrom + if code in _EV_ANGSTROM_CODES and not np.all(np.isclose(borns, 0.0)): + # e^2 / (4 pi epsilon_0) in eV Angstrom phonon.nac_params = {"born": borns, "dielectric": epsilon, "factor": 14.399652} return borns, epsilon @@ -411,18 +416,14 @@ def from_forces_born( phonon.generate_displacements(distance=displacement) set_of_forces = [np.array(forces) for forces in displacement_data["forces"]] - if born is not None and epsilon_static is not None: - borns, epsilon = _set_nac_params( - phonon, - born, - epsilon_static, - symprec, - code, - is_symmetry=kwargs.get("symmetrize_born", True), - ) - else: - borns = None - epsilon = None + borns, epsilon = _set_nac_params( + phonon, + born, + epsilon_static, + symprec, + code, + is_symmetry=kwargs.get("symmetrize_born", True), + ) # Produces all force constants phonon.produce_force_constants(forces=set_of_forces) diff --git a/src/atomate2/forcefields/flows/hiphive.py b/src/atomate2/forcefields/flows/hiphive.py index 21ad8b60e3..4aa00353fd 100644 --- a/src/atomate2/forcefields/flows/hiphive.py +++ b/src/atomate2/forcefields/flows/hiphive.py @@ -3,7 +3,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import Literal +from typing import TYPE_CHECKING, Literal from atomate2 import SETTINGS from atomate2.common.flows.hiphive import BasePhononMaker @@ -13,6 +13,9 @@ ForceFieldStaticMaker, ) +if TYPE_CHECKING: + from atomate2.vasp.jobs.base import BaseVaspMaker + @dataclass class PhononMaker(BasePhononMaker): @@ -84,8 +87,8 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldDielectricMaker or None - Maker to compute the BORN charges, for example with MACE-Field. + born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None + Maker to compute the BORN charges. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. generate_frequencies_eigenvectors_kwargs : dict @@ -134,7 +137,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldDielectricMaker | None = None + born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/flows/pheasy.py b/src/atomate2/forcefields/flows/pheasy.py index 03e46f0f5a..227dfe0045 100644 --- a/src/atomate2/forcefields/flows/pheasy.py +++ b/src/atomate2/forcefields/flows/pheasy.py @@ -3,7 +3,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import Literal +from typing import TYPE_CHECKING, Literal from atomate2 import SETTINGS from atomate2.common.flows.pheasy import BasePhononMaker @@ -13,6 +13,9 @@ ForceFieldStaticMaker, ) +if TYPE_CHECKING: + from atomate2.vasp.jobs.base import BaseVaspMaker + @dataclass class PhononMaker(BasePhononMaker): @@ -84,8 +87,8 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldDielectricMaker or None - Maker to compute the BORN charges, for example with MACE-Field. + born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None + Maker to compute the BORN charges. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. generate_frequencies_eigenvectors_kwargs : dict @@ -134,7 +137,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldDielectricMaker | None = None + born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/flows/phonons.py b/src/atomate2/forcefields/flows/phonons.py index b55b0bee0b..a912629fb8 100644 --- a/src/atomate2/forcefields/flows/phonons.py +++ b/src/atomate2/forcefields/flows/phonons.py @@ -18,6 +18,7 @@ from typing_extensions import Self from atomate2.forcefields import MLFF + from atomate2.vasp.jobs.base import BaseVaspMaker @dataclass @@ -92,8 +93,8 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldDielectricMaker or None - Maker to compute the BORN charges, for example with MACE-Field. + born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None + Maker to compute the BORN charges. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. generate_frequencies_eigenvectors_kwargs : dict @@ -143,7 +144,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldDielectricMaker | None = None + born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/jobs.py b/src/atomate2/forcefields/jobs.py index ba767b9862..4e9be27bc4 100644 --- a/src/atomate2/forcefields/jobs.py +++ b/src/atomate2/forcefields/jobs.py @@ -238,8 +238,8 @@ class ForceFieldDielectricMaker(ForceFieldMixin, Maker): The force field must give the Born effective charges and the electronic susceptibility chi as the results "becs" and "polarizability", as MACE-Field - does. The high-frequency dielectric tensor is 1 + chi. Unless an electric - field is set in calculator_kwargs, both are computed at zero field. + does. The high-frequency dielectric tensor is 1 + chi. Both are computed at + zero electric field by default. Parameters ---------- @@ -286,7 +286,7 @@ def make( epsilon_static=( np.eye(3) + atoms.calc.results["polarizability"].reshape(3, 3) ).tolist(), - forcefield_name=self.force_field_name, + forcefield_name=self.ase_calculator_name, forcefield_version=_get_pkg_version(self.calculator_meta), dir_name=str(Path.cwd()), ) diff --git a/src/atomate2/forcefields/schemas.py b/src/atomate2/forcefields/schemas.py index 2283112883..1a47531303 100644 --- a/src/atomate2/forcefields/schemas.py +++ b/src/atomate2/forcefields/schemas.py @@ -181,7 +181,7 @@ def from_ase_compatible_result( ).from_ase_task_doc(ase_task_doc, **ff_kwargs) -class ForceFieldDielectricDocument(BaseModel): +class ForceFieldDielectricDocument(ForceFieldMeta): """Born effective charges and dielectric tensor from a force field.""" structure: Structure = Field(description="The structure of the calculation.") @@ -191,10 +191,3 @@ class ForceFieldDielectricDocument(BaseModel): epsilon_static: Matrix3D = Field( description="The high-frequency dielectric tensor." ) - forcefield_name: str | None = Field(None, description="Name of the force field.") - forcefield_version: str | None = Field( - None, description="Version of the force field package." - ) - dir_name: str | None = Field( - None, description="Directory where the calculation was performed." - ) diff --git a/tests/common/schemas/test_phonons.py b/tests/common/schemas/test_phonons.py index f0ddd9315f..38884f933d 100644 --- a/tests/common/schemas/test_phonons.py +++ b/tests/common/schemas/test_phonons.py @@ -3,7 +3,10 @@ import numpy as np import pytest from monty.json import MontyEncoder +from phonopy import Phonopy from pydantic import ValidationError +from pymatgen.core import Lattice, Structure +from pymatgen.io.phonopy import get_phonopy_structure from atomate2.common.schemas.phonons import ( PhononBSDOSDoc, @@ -11,6 +14,7 @@ PhononJobDirs, PhononUUIDs, ThermalDisplacementData, + _set_nac_params, ) @@ -58,3 +62,39 @@ def test_phonon_bs_dos_doc(): def test_model_validate(model_cls): validated = model_cls.model_validate_json(json.dumps(model_cls(), cls=MontyEncoder)) assert isinstance(validated, model_cls) + + +def get_nacl_phonon(): + structure = Structure.from_spacegroup( + "Fm-3m", Lattice.cubic(5.6), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] + ).get_primitive_structure() + return Phonopy(get_phonopy_structure(structure), supercell_matrix=np.eye(3)) + + +@pytest.mark.parametrize( + ("code", "charge", "has_nac"), + [ + ("vasp", 1, True), + ("forcefields", 1, True), + ("aims", 1, False), + ("vasp", 0, False), + ], +) +def test_set_nac_params(code, charge, has_nac): + phonon = get_nacl_phonon() + born = charge * np.array([1, -1])[:, None, None] * np.eye(3) + borns, epsilon = _set_nac_params( + phonon, born.tolist(), (2 * np.eye(3)).tolist(), 1e-4, code + ) + + assert borns == pytest.approx(born) + assert epsilon == pytest.approx(2 * np.eye(3)) + assert (phonon.nac_params is not None) == has_nac + + +def test_set_nac_params_without_born(): + phonon = get_nacl_phonon() + assert _set_nac_params(phonon, None, None, 1e-4, "vasp") == (None, None) + assert phonon.nac_params is None + with pytest.raises(ValueError, match="Number of Born charges"): + _set_nac_params(phonon, [np.eye(3).tolist()], np.eye(3).tolist(), 1e-4, "vasp") diff --git a/tests/forcefields/conftest.py b/tests/forcefields/conftest.py index 532cbd383a..3a77b5bdaa 100644 --- a/tests/forcefields/conftest.py +++ b/tests/forcefields/conftest.py @@ -4,7 +4,6 @@ import tempfile import urllib.request from importlib import import_module -from importlib.util import find_spec from pathlib import Path from typing import TYPE_CHECKING @@ -27,9 +26,12 @@ for mlff in MLFF } # the MACE-Field fork installs as mace-torch, so only its model class tells them apart -_INSTALLED_MLFF["MACE_Field"] = find_spec("mace") is not None and hasattr( - import_module("mace.modules.extensions"), "MACEField" -) +try: + _INSTALLED_MLFF["MACE_Field"] = hasattr( + import_module("mace.modules.extensions"), "MACEField" + ) +except ImportError: + _INSTALLED_MLFF["MACE_Field"] = False def mlff_is_installed(mlff: str | MLFF) -> bool: @@ -65,9 +67,10 @@ def get_deepmd_pretrained_model_path(test_dir: Path) -> Path: class FakeDielectricCalculator(Calculator): - """Born charges of +2 and -2 and a susceptibility of 3, as MACE-Field gives them. + """Born charges of +2 and -2 and a susceptibility of 3. - The atoms of the first species get +2, all others -2. + The atoms of the first species get +2, all others -2. Both results are + flattened, as MACE-Field returns them. """ implemented_properties = ("energy", "becs", "polarizability") @@ -78,7 +81,7 @@ def calculate(self, atoms=None, properties=None, system_changes=all_changes): self.results = { "energy": 0.0, "becs": (2 * sign[:, None, None] * np.eye(3)).reshape(-1, 9), - "polarizability": 3 * np.eye(3), + "polarizability": (3 * np.eye(3)).reshape(9), } diff --git a/tests/forcefields/flows/test_phonon.py b/tests/forcefields/flows/test_phonon.py index 708ac1d0ee..83c8fda584 100644 --- a/tests/forcefields/flows/test_phonon.py +++ b/tests/forcefields/flows/test_phonon.py @@ -35,6 +35,7 @@ # skip m3gnet and matpes models due to matcalc requiring # DGL which is PyTorch 2.4 incompatible, raises # "FileNotFoundError: Cannot find DGL C++ libgraphbolt_pytorch_2.4.1.so" +# skip MACE-Field, which needs the path of its model file skip_mlff = set( map( MLFF, @@ -46,6 +47,7 @@ "MATPES_PBE", "Allegro", "FAIRChem", + "MACE_Field", ], ) ) @@ -293,26 +295,36 @@ def test_ext_load_phonon_initialization(): assert maker.phonon_displacement_maker.ase_calculator_name == "mace_mp" -def test_phonon_wf_force_field_born_charges(clean_dir, fake_dielectric_calculator): - """Born charges from a force field dielectric job enter the NAC.""" +@pytest.mark.parametrize("born_by_hand", [False, True]) +def test_phonon_wf_force_field_born_charges( + clean_dir, fake_dielectric_calculator, born_by_hand +): + """Born charges from a force field dielectric job or given by hand enter the NAC.""" structure = Structure.from_spacegroup( "Fm-3m", Lattice.cubic(4.17), ["Ni", "O"], [[0, 0, 0], [0.5, 0.5, 0.5]] ).get_primitive_structure() + born = np.array([2, -2])[:, None, None] * np.eye(3) emt = {"@module": "ase.calculators.emt", "@callable": "EMT"} - flow = PhononMaker( + maker = PhononMaker( bulk_relax_maker=None, static_energy_maker=None, phonon_displacement_maker=ForceFieldStaticMaker(force_field_name=emt), - born_maker=ForceFieldDielectricMaker(), + born_maker=None if born_by_hand else ForceFieldDielectricMaker(), min_length=8, create_thermal_displacements=False, store_force_constants=False, - ).make(structure) + ) + if born_by_hand: + flow = maker.make( + structure, born=born.tolist(), epsilon_static=(4 * np.eye(3)).tolist() + ) + else: + flow = maker.make(structure) responses = run_locally(flow, create_folders=True, ensure_success=True) doc = responses[flow[-1].uuid][1].output - assert np.array(doc.born) == pytest.approx( - np.array([2, -2])[:, None, None] * np.eye(3) - ) + assert np.array(doc.born) == pytest.approx(born) assert np.array(doc.epsilon_static) == pytest.approx(4 * np.eye(3)) assert doc.phonon_bandstructure.has_nac + # the LO-TO splitting raises the highest frequency from about 12.6 THz + assert np.max(doc.phonon_bandstructure.bands) == pytest.approx(17.976, abs=1e-2) diff --git a/tests/forcefields/test_jobs.py b/tests/forcefields/test_jobs.py index 2591070d7b..386b88e73a 100644 --- a/tests/forcefields/test_jobs.py +++ b/tests/forcefields/test_jobs.py @@ -920,7 +920,7 @@ def test_dielectric_maker(fake_dielectric_calculator, clean_dir): structure = Structure.from_spacegroup( "Fm-3m", Lattice.cubic(5.6), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] ).get_primitive_structure() - job = ForceFieldDielectricMaker(force_field_name="MACE-Field").make(structure) + job = ForceFieldDielectricMaker().make(structure) output = run_locally(job, ensure_success=True)[job.uuid][1].output assert isinstance(output, ForceFieldDielectricDocument) diff --git a/tests/forcefields/test_mace_field.py b/tests/forcefields/test_mace_field.py index 0e734c81e4..48cca063fe 100644 --- a/tests/forcefields/test_mace_field.py +++ b/tests/forcefields/test_mace_field.py @@ -48,7 +48,8 @@ def test_mace_field_dielectric_maker(mace_field_model, clean_dir): born = np.array(output.born) # the acoustic sum rule holds by construction assert born.sum(axis=0) == pytest.approx(np.zeros((3, 3)), abs=1e-6) - # cubic, so the tensors are isotropic. DFPT gives about 1.09 and 2.5. + # cubic, so the tensors are isotropic. The Materials Project's Harmonic Phonon + # Database has 1.09 and 2.56 from DFPT. species = [str(site.specie) for site in output.structure] assert born[species.index("Na")] == pytest.approx(1.0898 * np.eye(3), abs=1e-3) epsilon = np.array(output.epsilon_static) diff --git a/tests/forcefields/test_md.py b/tests/forcefields/test_md.py index 4217896cf8..2aaef9f90f 100644 --- a/tests/forcefields/test_md.py +++ b/tests/forcefields/test_md.py @@ -45,8 +45,9 @@ def test_maker_initialization(mlff): ) +# MACE-Field needs the path of its model file _mlffs_for_test = set(INSTALLED_MLFF).difference( - map(MLFF, ("Forcefield", "Allegro", "M3GNet", "MACE", "Nequip")) + map(MLFF, ("Forcefield", "Allegro", "M3GNet", "MACE", "Nequip", "MACE_Field")) ) _md_test_params = sorted(product(_mlffs_for_test, [True, False]), key=str) From fdb084b65b2d693b4a4d080be273ed0b02a79f0f Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 12:16:20 -0700 Subject: [PATCH 26/43] Use the simplified NAC helper in the finite-temperature workflow --- docs/user/codes/vasp.md | 2 +- .../common/flows/finite_temperature_phonons.py | 12 +++++++----- .../common/jobs/finite_temperature_phonons.py | 4 +--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index 881c089397..c1755413d2 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -503,7 +503,7 @@ from atomate2.vasp.jobs.core import DielectricMaker # with MACE-Field maker.born_maker = ForceFieldDielectricMaker( - calculator_kwargs={"model": "MACEField-MH-0-omat-dielectric.model"} + calculator_kwargs={"model": "/path/to/MACEField-MH-0-omat-dielectric.model"} ) # or with VASP maker.born_maker = DielectricMaker() diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 45dbc88b95..819ca1eb3d 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -170,8 +170,9 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): bulk_relax_maker: Maker | None Maker for the relaxation of the unit cell. None skips the relaxation. born_maker: Maker | None - VASP maker for the Born effective charges and the dielectric tensor, - used for the non-analytical correction. None skips it. + Maker for the Born effective charges and the dielectric tensor, used + for the non-analytical correction, for example a + ForceFieldDielectricMaker or a VASP DielectricMaker. None skips it. npt_maker: Maker | None Maker for the NPT MD. The flow sets its temperature, pressure, time step and number of steps. None skips the NPT MD. @@ -376,9 +377,10 @@ def make( born_kwargs[self.prev_calc_dir_argname] = prev_dir born_job = self.born_maker.make(structure, **born_kwargs) jobs.append(born_job) - # as in the phonon workflow, a force field dielectric document has the - # Born charges as fields, a VASP task document in its last calculation - schema = born_job.output_schema + # As in the phonon workflow, a force field dielectric document has the + # Born charges as fields. A VASP task document has them in its last + # calculation. + schema = getattr(born_job, "output_schema", None) if schema is not None and "born" in schema.model_fields: born = born_job.output.born epsilon_static = born_job.output.epsilon_static diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index 4dc39e4f09..9fca439b4a 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -817,9 +817,7 @@ def fit_finite_temperature_phonons( predicted = -np.einsum("ijab,mjb->mia", phonon.force_constants, disps) force_rmse = float(np.sqrt(np.mean((fit_forces - predicted) ** 2))) - borns = epsilon = None - if born is not None and epsilon_static is not None: - borns, epsilon = _set_nac_params(phonon, born, epsilon_static, symprec, code) + borns, epsilon = _set_nac_params(phonon, born, epsilon_static, symprec, code) # frequencies at the q-points commensurate with the supercell matrix = np.linalg.inv(phonon.primitive_matrix) @ phonon.supercell_matrix From ea89a2f5199e090889d12604b4f87a043955e5c7 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 13:17:37 -0700 Subject: [PATCH 27/43] more edits to the force field Born charges --- .github/workflows/testing.yml | 3 +- docs/user/codes/forcefields.md | 96 +++++++++++------------ pyproject.toml | 1 - src/atomate2/common/flows/phonons.py | 12 +-- src/atomate2/common/schemas/phonons.py | 24 +++--- src/atomate2/forcefields/flows/hiphive.py | 12 ++- src/atomate2/forcefields/flows/pheasy.py | 12 ++- src/atomate2/forcefields/flows/phonons.py | 9 +-- src/atomate2/forcefields/jobs.py | 21 ++++- src/atomate2/forcefields/utils.py | 8 +- src/atomate2/torchsim/flows/phonons.py | 8 +- tests/common/schemas/test_phonons.py | 2 + tests/forcefields/conftest.py | 4 +- tests/forcefields/flows/test_pheasy.py | 35 ++++++++- tests/forcefields/flows/test_phonon.py | 4 +- tests/forcefields/test_jobs.py | 5 +- tests/forcefields/test_mace_field.py | 52 ++++++++---- tests/forcefields/test_md.py | 2 +- 18 files changed, 183 insertions(+), 127 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 12207d1b93..c2bf5e05f0 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -96,8 +96,7 @@ jobs: # torch-limited loads the heaviest MLIP stack (matgl + nequip + torch); # running it single-process avoids the OOM that kills the runner when # xdist spawns multiple workers each holding a copy of the models. - # The MACE-Field fork replaces mace-torch, so its group only runs the - # MACE-Field tests, in one process. + # The mace-field group only runs the MACE-Field tests, in one process. run: | micromamba activate a2 pytest -v --durations=5 -n ${{ (matrix.dep-group == 'torch-limited' || matrix.dep-group == 'mace-field') && '1' || 'auto' }} --cov=atomate2 --cov-report=xml ${{ matrix.dep-group == 'mace-field' && 'tests/forcefields/test_mace_field.py' || 'tests/forcefields' }} diff --git a/docs/user/codes/forcefields.md b/docs/user/codes/forcefields.md index e9fefde698..0737695c1b 100644 --- a/docs/user/codes/forcefields.md +++ b/docs/user/codes/forcefields.md @@ -35,7 +35,7 @@ Support is provided for the following models, which can be selected using `atoma | FAIRChem | `FAIRChem` | [Meta's FAIRChem Github](https://github.com/facebookresearch/fairchem) | Proprietary, requires extra authentication. [See notes below.](#fairchem-notes) | | Gaussian Approximation Potential (GAP) | `GAP` | [10.1103/PhysRevLett.104.136403](https://doi.org/10.1103/PhysRevLett.104.136403) | Relies on `quippy-ase` package | | M3GNet | `M3GNet` | [10.1038/s43588-022-00349-3](https://doi.org/10.1038/s43588-022-00349-3) | Relies on `matgl` package | -| MACE-Field | `MACE_Field` | [10.1103/b116-xy8k](https://doi.org/10.1103/b116-xy8k) | Born effective charges and dielectric tensor only, via `ForceFieldDielectricMaker`. Needs the MACE-Field fork of `mace_torch` and a model file. [See notes below.](#mace-field-notes) | +| MACE-Field | `MACE_FIELD` | [10.1103/b116-xy8k](https://doi.org/10.1103/b116-xy8k) | Born effective charges and dielectric tensor only, via `ForceFieldDielectricMaker`. Relies on the MACE-Field fork of `mace_torch` and a model file. [See notes below.](#mace-field-notes) | | MACE-MP-0 | `MACE` or `MACE_MP_0` (recommended) | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | | MACE-MP-0b3 | `MACE_MP_0B3` | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | | MACE-MPA-0 | `MACE_MPA_0` | [10.1063/5.0297006](https://doi.org/10.1063/5.0297006) | Relies on `mace_torch` and optionally `torch_dftd` packages | @@ -74,15 +74,45 @@ However, this may not be preserved in future versions, and `calculator_meta` is [^calculator-meta-type-annotation]: In this context, the type annotation of the decoded dict should be either `Type[Calculator]` or `Callable[..., Calculator]`, where `Calculator` is from `ase.calculators.calculator`. +## Notes on FairChem (Meta) models {#fairchem-notes} + +The FAIRChem models provided by Meta require extra authentication via HuggingFace: +1. Request access to the UMA models [via HuggingFace](https://huggingface.co/facebook/UMA). You will need to set up a HuggingFace account. You will need to receive approval for the UMA models to proceed. +2. Install the HuggingFace CLI with `pip install 'huggingface_hub'`. +3. Run `huggingface-cli login` from a shell to authenticate your session. You will need to set up an access token. +4. You can now use the FAIRChem calculators. The general syntax for setting up a FAIRChem calculator in `atomate2` is: +```py +calculator_kwargs = { + "predict_unit": {"model_name": "uma-s-1p1"}, + "task_name": "omat", +} +``` + +`atomate2` will then set up a `FAIRChemCalculator`: +```py +from atomate2.forcefields.utils import MLFF, _DEFAULT_CALCULATOR_KWARGS +from fairchem.core import FAIRChemCalculator, pretrained_mlip + +predict_unit_kwargs = calculator_kwargs.pop( + "predict_unit", _DEFAULT_CALCULATOR_KWARGS[MLFF.FAIRChem]["predict_unit"] +) +calculator = FAIRChemCalculator( + pretrained_mlip.get_predict_unit(predict_unit_kwargs), + **{k: v for k, v in calculator_kwargs.items() if k != "predict_unit"}, +) +``` + +The default in `atomate2` is the OMat24 model with `uma-s-1p1`. + ## Notes on MACE-Field {#mace-field-notes} [MACE-Field](https://doi.org/10.1103/b116-xy8k) gives the Born effective charges and the high-frequency dielectric tensor of inorganic crystals. `ForceFieldDielectricMaker` computes them. -The phonon workflows use them for the non-analytical correction when it is set as `born_maker`. +The phonon workflows use them for the non-analytical correction when `ForceFieldDielectricMaker` is set as `born_maker`. MACE-Field is a fork of MACE that installs as `mace_torch`, so it replaces MACE. Install it with `pip install 'atomate2[mace-field]'`. -The fork still runs the MACE foundation models, so the forces can come from MACE in the same environment. +The fork also runs the MACE foundation models, so the forces can come from MACE-OMAT in the same environment. The model file has to be downloaded from the [MACE-Field releases](https://github.com/mdi-group/mace-field/releases). There is no default model, so `model` must be set. Give its absolute path, since each job runs in its own folder: @@ -97,22 +127,21 @@ structure = Structure.from_spacegroup( "Fm-3m", Lattice.cubic(5.64), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] ).get_primitive_structure() -maker = PhononMaker.from_force_field_name( - "MACE_MP_0", calculator_kwargs={"model": "medium-omat-0"} -) -# from_force_field_name sets born_maker to None -maker.born_maker = ForceFieldDielectricMaker( - calculator_kwargs={"model": "/path/to/MACEField-MH-0-omat-dielectric.model"} -) -flow = maker.make(structure) +flow = PhononMaker.from_force_field_name( + "MACE_MP_0", + calculator_kwargs={"model": "medium-omat-0"}, + born_maker=ForceFieldDielectricMaker( + calculator_kwargs={"model": "/path/to/MACEField-MH-0-omat-dielectric.model"} + ), +).make(structure) ``` -The Born charges can also come from VASP. -Pass them to `make` as `born` and `epsilon_static`, or set a VASP maker such as `atomate2.vasp.jobs.core.DielectricMaker` as `born_maker`. +Born charges from VASP can be passed to `make` as `born` and `epsilon_static`. +They must be in the same order as the sites of the structure. Limitations: -- Both tensors are computed at zero electric field. The dielectric tensor is the clamped-ion one, 1 + chi, with chi the electronic susceptibility of the model. +- Both tensors are computed at zero electric field by default. The dielectric tensor is the clamped-ion one, 1 + chi, with chi the electronic susceptibility of the model. - The model has the heads "mp-dielectric", "mp-ferroelectric" and "pt_head". "mp-dielectric" is used by default. - The model runs on the CPU unless `device` is set in `calculator_kwargs`. - The fork reports itself as `mace-torch` 0.3.15, so this is the `forcefield_version` in the output. @@ -122,38 +151,7 @@ This feature is new and has not been tested widely. It might still change in future versions. ``` -As a spot check, we compared the "mp-dielectric" head with the DFPT results in the Materials Project's Harmonic Phonon Database for NaCl, KCl, MgO and Bi4S3N2. -NaCl, KCl and MgO are in the training data of MACE-Field. -For them, the Born charges agree to 0.02 e and the high-frequency dielectric constants to 5%. -For Bi4S3N2, the Born charges are about 15% too small and the dielectric tensor is off by up to 10%. -For alpha-quartz, the authors report a high-frequency dielectric constant of 2.64 along the c axis, against 2.41 from PBE DFPT. - -## Notes on FairChem (Meta) models {#fairchem-notes} - -The FAIRChem models provided by Meta require extra authentication via HuggingFace: -1. Request access to the UMA models [via HuggingFace](https://huggingface.co/facebook/UMA). You will need to set up a HuggingFace account. You will need to receive approval for the UMA models to proceed. -2. Install the HuggingFace CLI with `pip install 'huggingface_hub'`. -3. Run `huggingface-cli login` from a shell to authenticate your session. You will need to set up an access token. -4. You can now use the FAIRChem calculators. The general syntax for setting up a FAIRChem calculator in `atomate2` is: -```py -calculator_kwargs = { - "predict_unit": {"model_name": "uma-s-1p1"}, - "task_name": "omat", -} -``` - -`atomate2` will then set up a `FAIRChemCalculator`: -```py -from atomate2.forcefields.utils import MLFF, _DEFAULT_CALCULATOR_KWARGS -from fairchem.core import FAIRChemCalculator, pretrained_mlip - -predict_unit_kwargs = calculator_kwargs.pop( - "predict_unit", _DEFAULT_CALCULATOR_KWARGS[MLFF.FAIRChem]["predict_unit"] -) -calculator = FAIRChemCalculator( - pretrained_mlip.get_predict_unit(predict_unit_kwargs), - **{k: v for k, v in calculator_kwargs.items() if k != "predict_unit"}, -) -``` - -The default in `atomate2` is the OMat24 model with `uma-s-1p1`. +We compared the "mp-dielectric" head with the DFPT results in the Materials Project's Harmonic Phonon Database. +The 50 materials have no Materials Project dielectric data, so they are likely not in the training data of MACE-Field. +The Born charges are off by 0.26 e on average, about 11%. +The high-frequency dielectric constants are off by 8% on average, and by more than 20% for 2 of the 50 materials. diff --git a/pyproject.toml b/pyproject.toml index 0afabfc6e7..eff3fd4516 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,7 +70,6 @@ defects = [ ase = ["ase>=3.26.0"] ase-ext = ["tblite>=0.3.0; platform_system=='Linux'"] forcefields-demo = ["chgnet>=0.3.8","atomate2[ase]"] -# the MACE-Field fork of MACE replaces mace-torch mace-field = ["atomate2[ase]", "mace-torch @ git+https://github.com/mdi-group/mace-field.git@45d5c5fa7b40a155855b3d155df1760e36849e64"] torchsim = [ diff --git a/src/atomate2/common/flows/phonons.py b/src/atomate2/common/flows/phonons.py index 6a4861cac7..0846cdfcae 100644 --- a/src/atomate2/common/flows/phonons.py +++ b/src/atomate2/common/flows/phonons.py @@ -17,6 +17,7 @@ run_phonon_displacements, ) from atomate2.common.jobs.utils import structure_to_conventional, structure_to_primitive +from atomate2.common.utils import check_class_name if TYPE_CHECKING: from pathlib import Path @@ -340,17 +341,12 @@ def make( born_job = self.born_maker.make(structure, **born_kwargs) jobs.append(born_job) - # A force field dielectric document has the Born charges and the - # dielectric tensor as fields. A VASP task document has them in its - # last calculation. - schema = getattr(born_job, "output_schema", None) - if schema is not None and "born" in schema.model_fields: + if check_class_name(self.born_maker, "ForceFieldDielectricMaker"): epsilon_static = born_job.output.epsilon_static born = born_job.output.born else: - calc_output = born_job.output.calcs_reversed[0].output - epsilon_static = calc_output.epsilon_static - born = calc_output.outcar["born"] + epsilon_static = born_job.output.calcs_reversed[0].output.epsilon_static + born = born_job.output.calcs_reversed[0].output.outcar["born"] born_run_job_dir = born_job.output.dir_name born_run_uuid = born_job.output.uuid diff --git a/src/atomate2/common/schemas/phonons.py b/src/atomate2/common/schemas/phonons.py index ccb955c5b6..d9a30e5f67 100644 --- a/src/atomate2/common/schemas/phonons.py +++ b/src/atomate2/common/schemas/phonons.py @@ -13,7 +13,7 @@ from phonopy import Phonopy from phonopy.phonon.band_structure import get_band_qpoints_and_path_connections from phonopy.structure.symmetry import symmetrize_borns_and_epsilon -from phonopy.units import VaspToTHz +from phonopy.units import Bohr, Hartree, VaspToTHz from pydantic import BaseModel, Field from pymatgen.core import Structure from pymatgen.io.phonopy import ( @@ -35,9 +35,6 @@ logger = logging.getLogger(__name__) -# codes whose forces are in eV/Angstrom -_EV_ANGSTROM_CODES = ("ase", "forcefields", "vasp", "torchsim") - def get_factor(code: str) -> float: """ @@ -58,7 +55,7 @@ def get_factor(code: str) -> float: ValueError If code is not defined """ - if code in _EV_ANGSTROM_CODES: + if code in ["ase", "forcefields", "vasp", "torchsim"]: return VaspToTHz if code == "aims": return omegaToTHz # Based on CODATA 2002 @@ -76,8 +73,8 @@ def _set_nac_params( """ Symmetrize the Born charges and the dielectric tensor and set the NAC. - The non-analytical correction is set unless all Born charges are zero. Its - factor assumes forces in eV/Angstrom, so it is only set for those codes. + The non-analytical correction is set unless all Born charges are zero or + the code is FHI-aims. Parameters ---------- @@ -97,8 +94,8 @@ def _set_nac_params( Returns ------- tuple[np.ndarray | None, np.ndarray | None] - The Born charges and the dielectric tensor, or None if either was not - given. + The symmetrized Born charges and dielectric tensor, or None if either + was not given. """ if born is None or epsilon_static is None: return None, None @@ -113,9 +110,12 @@ def _set_nac_params( supercell_matrix=phonon.supercell_matrix, is_symmetry=is_symmetry, ) - if code in _EV_ANGSTROM_CODES and not np.all(np.isclose(borns, 0.0)): - # e^2 / (4 pi epsilon_0) in eV Angstrom - phonon.nac_params = {"born": borns, "dielectric": epsilon, "factor": 14.399652} + if code != "aims" and not np.all(np.isclose(borns, 0.0)): + phonon.nac_params = { + "born": borns, + "dielectric": epsilon, + "factor": Hartree * Bohr, + } return borns, epsilon diff --git a/src/atomate2/forcefields/flows/hiphive.py b/src/atomate2/forcefields/flows/hiphive.py index 4aa00353fd..c99eda7603 100644 --- a/src/atomate2/forcefields/flows/hiphive.py +++ b/src/atomate2/forcefields/flows/hiphive.py @@ -3,7 +3,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import TYPE_CHECKING, Literal +from typing import Literal from atomate2 import SETTINGS from atomate2.common.flows.hiphive import BasePhononMaker @@ -13,9 +13,6 @@ ForceFieldStaticMaker, ) -if TYPE_CHECKING: - from atomate2.vasp.jobs.base import BaseVaspMaker - @dataclass class PhononMaker(BasePhononMaker): @@ -28,7 +25,8 @@ class PhononMaker(BasePhononMaker): forces are computed for these structures. With the help of phonopy, these forces are then converted into a dynamical matrix. To correct for polarization effects, a correction of the dynamical matrix based on BORN charges can - be performed. The BORN charges can be supplied manually. + be performed. The BORN charges can be supplied manually or computed + with ``born_maker``. Finally, phonon densities of states, phonon band structures and thermodynamic properties are computed. @@ -87,7 +85,7 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None + born_maker: .ForceFieldDielectricMaker or None Maker to compute the BORN charges. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. @@ -137,7 +135,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None + born_maker: ForceFieldDielectricMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/flows/pheasy.py b/src/atomate2/forcefields/flows/pheasy.py index 227dfe0045..44b284acd9 100644 --- a/src/atomate2/forcefields/flows/pheasy.py +++ b/src/atomate2/forcefields/flows/pheasy.py @@ -3,7 +3,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import TYPE_CHECKING, Literal +from typing import Literal from atomate2 import SETTINGS from atomate2.common.flows.pheasy import BasePhononMaker @@ -13,9 +13,6 @@ ForceFieldStaticMaker, ) -if TYPE_CHECKING: - from atomate2.vasp.jobs.base import BaseVaspMaker - @dataclass class PhononMaker(BasePhononMaker): @@ -28,7 +25,8 @@ class PhononMaker(BasePhononMaker): forces are computed for these structures. With the help of phonopy, these forces are then converted into a dynamical matrix. To correct for polarization effects, a correction of the dynamical matrix based on BORN charges can - be performed. The BORN charges can be supplied manually. + be performed. The BORN charges can be supplied manually or computed + with ``born_maker``. Finally, phonon densities of states, phonon band structures and thermodynamic properties are computed. @@ -87,7 +85,7 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None + born_maker: .ForceFieldDielectricMaker or None Maker to compute the BORN charges. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. @@ -137,7 +135,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None + born_maker: ForceFieldDielectricMaker | None = None @property def prev_calc_dir_argname(self) -> None: diff --git a/src/atomate2/forcefields/flows/phonons.py b/src/atomate2/forcefields/flows/phonons.py index a912629fb8..0014320b17 100644 --- a/src/atomate2/forcefields/flows/phonons.py +++ b/src/atomate2/forcefields/flows/phonons.py @@ -18,7 +18,6 @@ from typing_extensions import Self from atomate2.forcefields import MLFF - from atomate2.vasp.jobs.base import BaseVaspMaker @dataclass @@ -32,7 +31,8 @@ class PhononMaker(BasePhononMaker): forces are computed for these structures. With the help of phonopy, these forces are then converted into a dynamical matrix. To correct for polarization effects, a correction of the dynamical matrix based on BORN charges can - be performed. The BORN charges can be supplied manually. + be performed. The BORN charges can be supplied manually or computed + with ``born_maker``. Finally, phonon densities of states, phonon band structures and thermodynamic properties are computed. @@ -93,7 +93,7 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .ForceFieldDielectricMaker, .BaseVaspMaker, or None + born_maker: .ForceFieldDielectricMaker or None Maker to compute the BORN charges. phonon_displacement_maker : .ForceFieldStaticMaker or None Maker used to compute the forces for a supercell. @@ -144,7 +144,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" store_force_constants: bool = True code: str = "forcefields" - born_maker: ForceFieldDielectricMaker | BaseVaspMaker | None = None + born_maker: ForceFieldDielectricMaker | None = None @property def prev_calc_dir_argname(self) -> None: @@ -214,7 +214,6 @@ def from_force_field_name( force_field_name=force_field_name, calculator_kwargs=calculator_kwargs, ), - born_maker=None, ) return cls( name=(f"{static_energy_maker.mlff.name} Phonon Maker"), diff --git a/src/atomate2/forcefields/jobs.py b/src/atomate2/forcefields/jobs.py index 4e9be27bc4..b4f49cc5e5 100644 --- a/src/atomate2/forcefields/jobs.py +++ b/src/atomate2/forcefields/jobs.py @@ -3,9 +3,9 @@ from __future__ import annotations import logging +import os import warnings from dataclasses import dataclass, field -from pathlib import Path from typing import TYPE_CHECKING import numpy as np @@ -28,6 +28,7 @@ if TYPE_CHECKING: from collections.abc import Callable + from pathlib import Path from pymatgen.core.structure import Molecule, Structure @@ -231,6 +232,14 @@ class ForceFieldStaticMaker(ForceFieldRelaxMaker): Doi("10.1103/b116-xy8k"), description="MACE-Field: Born effective charges and dielectric tensor", ) +@due.dcite( + Doi("10.1038/sdata.2016.134"), + description="MACE-Field training data: Materials Project dielectric data", +) +@due.dcite( + Doi("10.1038/s41597-020-0407-9"), + description="MACE-Field training data: Materials Project ferroelectric data", +) @dataclass class ForceFieldDielectricMaker(ForceFieldMixin, Maker): """ @@ -241,6 +250,10 @@ class ForceFieldDielectricMaker(ForceFieldMixin, Maker): does. The high-frequency dielectric tensor is 1 + chi. Both are computed at zero electric field by default. + MACE-Field needs the MACE-Field fork of mace-torch and a model file, see the + force field docs. This maker is new and less tested than the other force + field makers. It might still change in future versions. + Parameters ---------- name : str @@ -249,11 +262,11 @@ class ForceFieldDielectricMaker(ForceFieldMixin, Maker): The name of the force field. calculator_kwargs : dict Keyword arguments that will get passed to the ASE calculator. For - MACE-Field, "model" is the path of the model file. + MACE-Field, "model" must be set to the path of the model file. """ name: str = "Force field dielectric" - force_field_name: str | MLFF | dict = MLFF.MACE_Field + force_field_name: str | MLFF | dict = MLFF.MACE_FIELD calculator_kwargs: dict = field(default_factory=dict) @job(output_schema=ForceFieldDielectricDocument) @@ -288,5 +301,5 @@ def make( ).tolist(), forcefield_name=self.ase_calculator_name, forcefield_version=_get_pkg_version(self.calculator_meta), - dir_name=str(Path.cwd()), + dir_name=os.getcwd(), ) diff --git a/src/atomate2/forcefields/utils.py b/src/atomate2/forcefields/utils.py index 19636fe628..9c516e4e26 100644 --- a/src/atomate2/forcefields/utils.py +++ b/src/atomate2/forcefields/utils.py @@ -40,7 +40,7 @@ class MLFF(Enum): # TODO inherit from StrEnum when 3.11+ MACE_MP_0 = "MACE-MP-0" MACE_MPA_0 = "MACE-MPA-0" MACE_MP_0B3 = "MACE-MP-0b3" - MACE_Field = "MACE-Field" + MACE_FIELD = "MACE-Field" GAP = "GAP" M3GNet = "M3GNet" CHGNet = "CHGNet" @@ -79,7 +79,7 @@ def _missing_(cls, value: Any) -> Any: MLFF.MACE_MP_0: {"model": "medium"}, MLFF.MACE_MP_0B3: {"model": "medium-0b3"}, MLFF.MACE_MPA_0: {"model": "medium-mpa-0"}, - MLFF.MACE_Field: {"head": "mp-dielectric", "default_dtype": "float64"}, + MLFF.MACE_FIELD: {"head": "mp-dielectric", "default_dtype": "float64"}, MLFF.MATPES_PBE: { "architecture": "TensorNet", "version": "2025.2", @@ -430,7 +430,7 @@ def ase_calculator( else: calculator = mace_mp(default_dtype=default_dtype or "", **kwargs) - case MLFF.MACE_Field: + case MLFF.MACE_FIELD: # needs the MACE-Field fork of mace and the path of a model file from mace.calculators import MACECalculator @@ -559,7 +559,7 @@ def _get_pkg_name(calculator_meta: MLFF | str | dict[str, Any]) -> str | None: | MLFF.MACE_MP_0 | MLFF.MACE_MPA_0 | MLFF.MACE_MP_0B3 - | MLFF.MACE_Field + | MLFF.MACE_FIELD ): ff_pkg = "mace-torch" case MLFF.MatterSim: diff --git a/src/atomate2/torchsim/flows/phonons.py b/src/atomate2/torchsim/flows/phonons.py index bb17c17288..4da39e5566 100644 --- a/src/atomate2/torchsim/flows/phonons.py +++ b/src/atomate2/torchsim/flows/phonons.py @@ -9,6 +9,7 @@ from atomate2.common.flows.phonons import BasePhononMaker if TYPE_CHECKING: + from atomate2.forcefields.jobs import ForceFieldDielectricMaker from atomate2.torchsim.core import TorchSimOptimizeMaker, TorchSimStaticMaker @@ -23,7 +24,8 @@ class PhononMaker(BasePhononMaker): forces are computed for these structures. With the help of phonopy, these forces are then converted into a dynamical matrix. To correct for polarization effects, a correction of the dynamical matrix based on BORN charges can - be performed. The BORN charges can be supplied manually. + be performed. The BORN charges can be supplied manually or computed + with ``born_maker``. Finally, phonon densities of states, phonon band structures and thermodynamic properties are computed. @@ -84,7 +86,7 @@ class PhononMaker(BasePhononMaker): A maker to perform the computation of the DFT energy on the bulk. Set to ``None`` to skip the static energy computation - born_maker: .TorchSimStaticMaker or None + born_maker: .ForceFieldDielectricMaker or None Maker to compute the BORN charges. phonon_displacement_maker : .TorchSimStaticMaker or None Maker used to compute the forces for a supercell. @@ -128,7 +130,7 @@ class PhononMaker(BasePhononMaker): kpath_scheme: str = "seekpath" code: str = "torchsim" store_force_constants: bool = True - born_maker: TorchSimStaticMaker | None = None + born_maker: ForceFieldDielectricMaker | None = None socket: bool = True @property diff --git a/tests/common/schemas/test_phonons.py b/tests/common/schemas/test_phonons.py index 38884f933d..681274a763 100644 --- a/tests/common/schemas/test_phonons.py +++ b/tests/common/schemas/test_phonons.py @@ -76,6 +76,8 @@ def get_nacl_phonon(): [ ("vasp", 1, True), ("forcefields", 1, True), + ("ase", 1, True), + ("torchsim", 1, True), ("aims", 1, False), ("vasp", 0, False), ], diff --git a/tests/forcefields/conftest.py b/tests/forcefields/conftest.py index 3a77b5bdaa..8e53e0a832 100644 --- a/tests/forcefields/conftest.py +++ b/tests/forcefields/conftest.py @@ -27,11 +27,11 @@ } # the MACE-Field fork installs as mace-torch, so only its model class tells them apart try: - _INSTALLED_MLFF["MACE_Field"] = hasattr( + _INSTALLED_MLFF["MACE_FIELD"] = hasattr( import_module("mace.modules.extensions"), "MACEField" ) except ImportError: - _INSTALLED_MLFF["MACE_Field"] = False + _INSTALLED_MLFF["MACE_FIELD"] = False def mlff_is_installed(mlff: str | MLFF) -> bool: diff --git a/tests/forcefields/flows/test_pheasy.py b/tests/forcefields/flows/test_pheasy.py index 3315963a1b..a627ff8c19 100644 --- a/tests/forcefields/flows/test_pheasy.py +++ b/tests/forcefields/flows/test_pheasy.py @@ -8,6 +8,7 @@ pytest.importorskip("pheasy") +import numpy as np from ase.build import bulk from emmet.core.phonon import ( PhononBS, @@ -16,12 +17,16 @@ ThermalDisplacementData, ) from jobflow import run_locally -from pymatgen.core import Structure +from pymatgen.core import Lattice, Structure from pymatgen.io.ase import AseAtomsAdaptor import atomate2.common.jobs.pheasy as pheasy_jobs from atomate2.forcefields.flows.pheasy import PhononMaker -from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker +from atomate2.forcefields.jobs import ( + ForceFieldDielectricMaker, + ForceFieldRelaxMaker, + ForceFieldStaticMaker, +) EMT = {"@module": "ase.calculators.emt", "@callable": "EMT"} @@ -76,3 +81,29 @@ def test_pheasy_wf_force_field(clean_dir): assert isinstance(ph_doc.structure, Structure) assert ph_doc.has_imaginary_modes is False assert isinstance(ph_doc.force_constants, list) + + +def test_pheasy_wf_force_field_born_charges(clean_dir, fake_dielectric_calculator): + structure = Structure.from_spacegroup( + "Fm-3m", Lattice.cubic(4.17), ["Ni", "O"], [[0, 0, 0], [0.5, 0.5, 0.5]] + ).get_primitive_structure() + maker = PhononMaker( + bulk_relax_maker=None, + static_energy_maker=None, + phonon_displacement_maker=ForceFieldStaticMaker(force_field_name=EMT), + born_maker=ForceFieldDielectricMaker(), + min_length=8, + create_thermal_displacements=False, + store_force_constants=False, + ) + flow = maker.make(structure) + responses = run_locally(flow, create_folders=True, ensure_success=True) + ph_doc = responses[flow.jobs[-1].uuid][1].output + + assert np.array(ph_doc.born) == pytest.approx( + np.array([2, -2])[:, None, None] * np.eye(3) + ) + # the LO-TO splitting raises the highest frequency + assert np.max(ph_doc.phonon_bandstructure.frequencies) == pytest.approx( + 17.974, abs=1e-2 + ) diff --git a/tests/forcefields/flows/test_phonon.py b/tests/forcefields/flows/test_phonon.py index 83c8fda584..4ff93c80dc 100644 --- a/tests/forcefields/flows/test_phonon.py +++ b/tests/forcefields/flows/test_phonon.py @@ -47,7 +47,7 @@ "MATPES_PBE", "Allegro", "FAIRChem", - "MACE_Field", + "MACE_FIELD", ], ) ) @@ -299,7 +299,6 @@ def test_ext_load_phonon_initialization(): def test_phonon_wf_force_field_born_charges( clean_dir, fake_dielectric_calculator, born_by_hand ): - """Born charges from a force field dielectric job or given by hand enter the NAC.""" structure = Structure.from_spacegroup( "Fm-3m", Lattice.cubic(4.17), ["Ni", "O"], [[0, 0, 0], [0.5, 0.5, 0.5]] ).get_primitive_structure() @@ -325,6 +324,5 @@ def test_phonon_wf_force_field_born_charges( assert np.array(doc.born) == pytest.approx(born) assert np.array(doc.epsilon_static) == pytest.approx(4 * np.eye(3)) - assert doc.phonon_bandstructure.has_nac # the LO-TO splitting raises the highest frequency from about 12.6 THz assert np.max(doc.phonon_bandstructure.bands) == pytest.approx(17.976, abs=1e-2) diff --git a/tests/forcefields/test_jobs.py b/tests/forcefields/test_jobs.py index 386b88e73a..d39264c53f 100644 --- a/tests/forcefields/test_jobs.py +++ b/tests/forcefields/test_jobs.py @@ -916,7 +916,7 @@ def test_roundtrip_legacy(si_structure: Structure, import_str: str): assert isinstance(deser.maker.calculator, Calculator) -def test_dielectric_maker(fake_dielectric_calculator, clean_dir): +def test_dielectric_maker(fake_dielectric_calculator): structure = Structure.from_spacegroup( "Fm-3m", Lattice.cubic(5.6), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] ).get_primitive_structure() @@ -926,6 +926,5 @@ def test_dielectric_maker(fake_dielectric_calculator, clean_dir): assert isinstance(output, ForceFieldDielectricDocument) assert output.structure == structure assert np.array(output.born) == approx(np.array([2, -2])[:, None, None] * np.eye(3)) - # eps_inf = 1 + chi assert np.array(output.epsilon_static) == approx(4 * np.eye(3)) - assert output.forcefield_name == "MLFF.MACE_Field" + assert output.forcefield_name == "MLFF.MACE_FIELD" diff --git a/tests/forcefields/test_mace_field.py b/tests/forcefields/test_mace_field.py index 48cca063fe..35ae441ba1 100644 --- a/tests/forcefields/test_mace_field.py +++ b/tests/forcefields/test_mace_field.py @@ -1,11 +1,8 @@ -"""Test the Born charges and the dielectric tensor of the MACE-Field model. - -The MACE-Field fork of mace installs as mace-torch, so these tests only run in -the mace-field CI group. -""" +"""Test the Born charges and the dielectric tensor of the MACE-Field model.""" import hashlib import urllib.request +from importlib.metadata import version as get_imported_version import numpy as np import pytest @@ -13,14 +10,11 @@ from jobflow import run_locally from pymatgen.core import Lattice, Structure +from atomate2.forcefields.flows.phonons import PhononMaker from atomate2.forcefields.jobs import ForceFieldDielectricMaker from .conftest import mlff_is_installed -pytestmark = pytest.mark.skipif( - not mlff_is_installed("MACE_Field"), reason="MACE-Field is not installed" -) - MODEL_URL = ( "https://github.com/mdi-group/mace-field/releases/download/1.0.2/" "MACEField-MH-0-omat-dielectric.model" @@ -36,21 +30,51 @@ def mace_field_model(tmp_path_factory): return path -def test_mace_field_dielectric_maker(mace_field_model, clean_dir): - structure = Structure.from_spacegroup( +@pytest.fixture +def nacl_structure(): + return Structure.from_spacegroup( "Fm-3m", Lattice.cubic(5.64), ["Na", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]] ).get_primitive_structure() + + +@pytest.mark.skipif( + not mlff_is_installed("MACE_FIELD"), reason="MACE-Field is not installed" +) +def test_mace_field_dielectric_maker(mace_field_model, nacl_structure): job = ForceFieldDielectricMaker( calculator_kwargs={"model": str(mace_field_model)} - ).make(structure) + ).make(nacl_structure) output = run_locally(job, ensure_success=True)[job.uuid][1].output born = np.array(output.born) # the acoustic sum rule holds by construction assert born.sum(axis=0) == pytest.approx(np.zeros((3, 3)), abs=1e-6) - # cubic, so the tensors are isotropic. The Materials Project's Harmonic Phonon - # Database has 1.09 and 2.56 from DFPT. + # cubic, so the tensors are isotropic species = [str(site.specie) for site in output.structure] assert born[species.index("Na")] == pytest.approx(1.0898 * np.eye(3), abs=1e-3) epsilon = np.array(output.epsilon_static) assert epsilon == pytest.approx(2.5845 * np.eye(3), abs=1e-3) + assert output.forcefield_version == get_imported_version("mace-torch") + + +@pytest.mark.skipif( + not mlff_is_installed("MACE_FIELD"), reason="MACE-Field is not installed" +) +def test_mace_field_phonon_nac(mace_field_model, nacl_structure): + maker = PhononMaker.from_force_field_name( + "MACE_MP_0", + calculator_kwargs={"model": "medium-omat-0"}, + relax_initial_structure=False, + born_maker=ForceFieldDielectricMaker( + calculator_kwargs={"model": str(mace_field_model)} + ), + min_length=10, + create_thermal_displacements=False, + store_force_constants=False, + ) + flow = maker.make(nacl_structure) + responses = run_locally(flow, create_folders=True, ensure_success=True) + doc = responses[flow[-1].uuid][1].output + + # 6.486 THz without the MACE-Field Born charges + assert np.max(doc.phonon_bandstructure.bands) == pytest.approx(7.505, abs=1e-2) diff --git a/tests/forcefields/test_md.py b/tests/forcefields/test_md.py index 2aaef9f90f..09afaf3b68 100644 --- a/tests/forcefields/test_md.py +++ b/tests/forcefields/test_md.py @@ -47,7 +47,7 @@ def test_maker_initialization(mlff): # MACE-Field needs the path of its model file _mlffs_for_test = set(INSTALLED_MLFF).difference( - map(MLFF, ("Forcefield", "Allegro", "M3GNet", "MACE", "Nequip", "MACE_Field")) + map(MLFF, ("Forcefield", "Allegro", "M3GNet", "MACE", "Nequip", "MACE_FIELD")) ) _md_test_params = sorted(product(_mlffs_for_test, [True, False]), key=str) From 0b9ff919272bcec0615ca3d6bb5ca69933e3f311 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 13:27:18 -0700 Subject: [PATCH 28/43] Move the MACE-Field fork to a dependency group --- .github/workflows/testing.yml | 4 +++- docs/user/codes/forcefields.md | 2 +- pyproject.toml | 10 ++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index c2bf5e05f0..12670dcfab 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -68,7 +68,9 @@ jobs: python -m pip install --upgrade pip mkdir -p ~/.abinit/pseudos cp -r tests/test_data/abinit/pseudos/ONCVPSP-PBE-SR-PDv0.4 ~/.abinit/pseudos - uv pip install .[strict,strict-forcefields-${{ matrix.dep-group }},abinit,approxneb,aims] --group tests + # the MACE-Field fork is the mace-field dependency group, not an extra + uv pip install .[strict,abinit,approxneb,aims${{ matrix.dep-group != 'mace-field' && format(',strict-forcefields-{0}', matrix.dep-group) || '' }}] \ + --group tests ${{ matrix.dep-group == 'mace-field' && '--group mace-field' || '' }} # the thermal expansion tests use EMT, so one group is enough to run them - name: Install pheasy, ALM and phono3py for the thermal expansion tests diff --git a/docs/user/codes/forcefields.md b/docs/user/codes/forcefields.md index 0737695c1b..a8ddcedd9f 100644 --- a/docs/user/codes/forcefields.md +++ b/docs/user/codes/forcefields.md @@ -111,7 +111,7 @@ The default in `atomate2` is the OMat24 model with `uma-s-1p1`. The phonon workflows use them for the non-analytical correction when `ForceFieldDielectricMaker` is set as `born_maker`. MACE-Field is a fork of MACE that installs as `mace_torch`, so it replaces MACE. -Install it with `pip install 'atomate2[mace-field]'`. +Install it with `pip install git+https://github.com/mdi-group/mace-field.git@45d5c5fa7b40a155855b3d155df1760e36849e64`, the commit atomate2 is tested with. The fork also runs the MACE foundation models, so the forces can come from MACE-OMAT in the same environment. The model file has to be downloaded from the [MACE-Field releases](https://github.com/mdi-group/mace-field/releases). There is no default model, so `model` must be set. diff --git a/pyproject.toml b/pyproject.toml index eff3fd4516..1ccc834dee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,7 +70,6 @@ defects = [ ase = ["ase>=3.26.0"] ase-ext = ["tblite>=0.3.0; platform_system=='Linux'"] forcefields-demo = ["chgnet>=0.3.8","atomate2[ase]"] -mace-field = ["atomate2[ase]", "mace-torch @ git+https://github.com/mdi-group/mace-field.git@45d5c5fa7b40a155855b3d155df1760e36849e64"] torchsim = [ "torch-sim-atomistic[symmetry]==0.6.1; python_version >= '3.12'" @@ -139,9 +138,6 @@ strict-forcefields-e3nn-limited = [ strict-forcefields-numpy-limited = [ "nequip-allegro==0.8.3", ] -# MACE-Field installs as mace-torch, so it cannot share a group with mace-torch. -# Remove this group once MACE-Field is in a mace-torch release (ACEsuit/mace#1177). -strict-forcefields-mace-field = ["atomate2[mace-field]"] strict = [ "atomate2[cclib, phonons, lobster, openmm, mp, defects, ase, ase-ext]", @@ -162,6 +158,12 @@ changelog = "https://github.com/materialsproject/atomate2/blob/main/CHANGELOG.md [dependency-groups] dev = ["pre-commit>=4.5.1"] +# MACE-Field installs as mace-torch, so it cannot share a group with mace-torch. +# It is a dependency group, since PyPI does not accept git URLs in extras. +# Remove it once MACE-Field is in a mace-torch release (ACEsuit/mace#1177). +mace-field = [ + "mace-torch @ git+https://github.com/mdi-group/mace-field.git@45d5c5fa7b40a155855b3d155df1760e36849e64", +] tests = [ "fireworks==2.1.4", "nbmake==1.5.5", From bb3218a98c9cb90960980d6a99fffeaab1aabadd Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 13:33:19 -0700 Subject: [PATCH 29/43] Use check_class_name for the Born charges in the finite-temperature flow --- .../common/flows/finite_temperature_phonons.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 819ca1eb3d..362343e71e 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -21,6 +21,7 @@ ) from atomate2.common.jobs.pheasy import get_supercell_size from atomate2.common.jobs.phonons import run_phonon_displacements +from atomate2.common.utils import check_class_name if TYPE_CHECKING: from pathlib import Path @@ -377,17 +378,12 @@ def make( born_kwargs[self.prev_calc_dir_argname] = prev_dir born_job = self.born_maker.make(structure, **born_kwargs) jobs.append(born_job) - # As in the phonon workflow, a force field dielectric document has the - # Born charges as fields. A VASP task document has them in its last - # calculation. - schema = getattr(born_job, "output_schema", None) - if schema is not None and "born" in schema.model_fields: + if check_class_name(self.born_maker, "ForceFieldDielectricMaker"): born = born_job.output.born epsilon_static = born_job.output.epsilon_static else: - calc_output = born_job.output.calcs_reversed[0].output - born = calc_output.outcar["born"] - epsilon_static = calc_output.epsilon_static + born = born_job.output.calcs_reversed[0].output.outcar["born"] + epsilon_static = born_job.output.calcs_reversed[0].output.epsilon_static born_run_job_dir = born_job.output.dir_name born_run_uuid = born_job.output.uuid From 56b0668a637bef88cc285b21843ef624ce6e2b35 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 13:46:23 -0700 Subject: [PATCH 30/43] Mention MACE-Field Born charges in the finite-temperature tutorial --- tutorials/finite_temperature_phonons.ipynb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 02876f9844..6f913b613b 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -784,7 +784,7 @@ " 100 K. Bi4S3N2 keeps imaginary modes down to -0.8 THz in 12 of 15 runs. Its\n", " AIMD reference has a small one as well, at -0.12 THz. Bi4S3N2 is polar, so\n", " these runs and the AIMD reference are compared without the non-analytical\n", - " correction. The force fields give no Born charges.\n", + " correction. The three MACE potentials give no Born charges.\n", "\n", "The trajectory check did not report \"stable\" for five runs:\n", "\n", @@ -1297,8 +1297,10 @@ "`run_npt=True` as in Section 2. The NPT cell is the average over one MD run, so\n", "it carries the noise of that run.\n", "\n", - "A machine-learned potential gives no Born charges, so the non-analytical\n", - "correction is not applied here. With VASP, the `born_maker` computes them.\n", + "The three MACE potentials give no Born charges, so the non-analytical\n", + "correction is not applied here. A `born_maker` can add them, either\n", + "`ForceFieldDielectricMaker` with MACE-Field (see the force field docs of\n", + "atomate2) or a VASP `DielectricMaker`.\n", "\n", "The trajectory check uses fixed limits. A Lindemann ratio above 0.15 is reported\n", "as melting. A displacement from the reference of more than 1.5 times the\n", From 14bfe9dda191fe3eba0f835d14f6423e122c2585 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 14:13:43 -0700 Subject: [PATCH 31/43] Point to the MACE-Field notes from the phonon docs --- docs/user/codes/vasp.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index f283cd436d..06e4372bc2 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -342,6 +342,9 @@ phonon_flow = PhononMaker(min_length=15.0, store_force_constants=False).make( ) ``` +The force field phonon, pheasy and hiPhive workflows can take the Born charges from MACE-Field, with `ForceFieldDielectricMaker` as `born_maker`. +See the [notes on MACE-Field](forcefields.md#mace-field-notes). + #### Pheasy Alternatively, users can accelerate the calculation of interatomic force constants using the machine-learning-based [Pheasy code](https://doi.org/10.48550/arXiv.2508.01020). From dccf688a84011229bd08cd8f89cbfd67f121c65f Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 14:55:45 -0700 Subject: [PATCH 32/43] Extract the consecutive MD jobs into ChainedMDMaker --- docs/user/codes/vasp.md | 1 + .../flows/finite_temperature_phonons.py | 118 +++++++++++------- .../flows/test_finite_temperature_phonons.py | 6 +- .../flows/test_finite_temperature_phonons.py | 14 ++- 4 files changed, 85 insertions(+), 54 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index 67d2dc9eaf..cb8ec37f99 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -456,6 +456,7 @@ Both set ISPIN from the relaxation directory with `auto_ispin`. `md_runs` splits the MD into consecutive jobs, for example to stay within the walltime of a queue. Each job continues from the positions and velocities of the previous one. The thermostat variables start again from zero in each job. +`ChainedMDMaker` in `atomate2.common.flows.finite_temperature_phonons` makes these jobs, for VASP and for force fields. The MD files are read by the job that picks the snapshots, so the MD run directories must be on a file system that this job can read. An NPT MD can be run first to include thermal expansion. diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 362343e71e..3553aff9a8 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -3,7 +3,7 @@ from __future__ import annotations from abc import ABC, abstractmethod -from dataclasses import dataclass +from dataclasses import dataclass, field from enum import Enum from typing import TYPE_CHECKING, Literal @@ -43,6 +43,69 @@ def _get_force_field(maker: Maker, code: str) -> tuple[str | None, dict | None]: ) +@dataclass +class ChainedMDMaker(Maker): + """ + Maker to run one MD as several consecutive MD jobs, with VASP or a force field. + + The first MD job starts from the input structure. Each later one starts from + the final positions and velocities of the previous one. The thermostat + variables are not carried over, so they start again from zero in each job. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + md_makers: list[Maker] + Makers of the MD jobs, in the order of the trajectory. + md_code: str + Code of the MD, 'vasp' or 'forcefields'. + """ + + name: str = "chained MD" + md_makers: list[Maker] = field(default_factory=list) + md_code: str = "vasp" + + def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow: + """ + Make a flow of consecutive MD jobs. + + Parameters + ---------- + structure: Structure + The structure the first MD job starts from. Its magnetic moments, if + any, are also given to the later MD jobs. + prev_dir: str | Path | None + A previous calculation directory, passed to each MD job. + + Returns + ------- + Flow + Its output holds the directories and the uuids of the MD jobs, in + the order of the trajectory. + """ + jobs: list[Job] = [] + md_jobs: list[Job] = [] + md_structure = structure + for idx, maker in enumerate(self.md_makers, start=1): + md_job = maker.make(md_structure, prev_dir=prev_dir) + if len(self.md_makers) > 1: + md_job.append_name(f" {idx}/{len(self.md_makers)}") + jobs.append(md_job) + md_jobs.append(md_job) + if idx < len(self.md_makers): + restart = get_md_restart_structure( + md_job.output.dir_name, self.md_code, structure + ) + jobs.append(restart) + md_structure = restart.output + output = { + "dir_names": [md_job.output.dir_name for md_job in md_jobs], + "uuids": [md_job.uuid for md_job in md_jobs], + } + return Flow(jobs, output, name=self.name) + + @due.dcite( Doi("10.48550/arXiv.2508.01020"), description="Pheasy code for (an)harmonic force constants.", @@ -393,9 +456,12 @@ def make( jobs.append(reference_job) reference = reference_job.output - all_md_jobs, md_jobs = self.make_md(reference, prev_dir) - jobs.extend(all_md_jobs) - md_dirs = [md_job.output.dir_name for md_job in md_jobs] + md_flow = ChainedMDMaker( + md_makers=[self.get_md_maker(n_steps) for n_steps in self.get_md_steps()], + md_code=self.md_code, + ).make(reference, prev_dir=prev_dir) + jobs.append(md_flow) + md_dirs = md_flow.output["dir_names"] snapshot_job = select_md_snapshots( md_dirs, @@ -441,7 +507,7 @@ def make( force_field_kwargs=force_field_kwargs, md_force_field_name=md_force_field_name, md_force_field_kwargs=md_force_field_kwargs, - md_uuids=[md_job.uuid for md_job in md_jobs], + md_uuids=md_flow.output["uuids"], md_job_dirs=md_dirs, optimization_run_uuid=optimization_run_uuid, optimization_run_job_dir=optimization_run_job_dir, @@ -459,48 +525,6 @@ def make( jobs.append(fit_job) return Flow(jobs, fit_job.output, name=self.name) - def make_md( - self, - reference: Structure | OutputReference, - prev_dir: str | Path | None, - ) -> tuple[list[Job | Flow], list[Job]]: - """ - Make the MD jobs, starting from the undisplaced supercell. - - The first MD job starts from the undisplaced supercell. Each later one - continues from the final positions and velocities of the previous one. - - Parameters - ---------- - reference: Structure | OutputReference - The undisplaced supercell. - prev_dir: str | Path | None - A previous calculation directory, passed to each MD job. - - Returns - ------- - tuple[list[Job | Flow], list[Job]] - All jobs to add to the flow, and the MD jobs in the order of the - trajectory. - """ - jobs: list[Job | Flow] = [] - md_jobs: list[Job] = [] - structure = reference - md_steps = self.get_md_steps() - for idx, n_steps in enumerate(md_steps, start=1): - md_job = self.get_md_maker(n_steps).make(structure, prev_dir=prev_dir) - if len(md_steps) > 1: - md_job.append_name(f" {idx}/{len(md_steps)}") - jobs.append(md_job) - md_jobs.append(md_job) - if idx < len(md_steps): - restart = get_md_restart_structure( - md_job.output.dir_name, self.md_code, reference - ) - jobs.append(restart) - structure = restart.output - return jobs, md_jobs - @property @abstractmethod def prev_calc_dir_argname(self) -> str | None: diff --git a/tests/forcefields/flows/test_finite_temperature_phonons.py b/tests/forcefields/flows/test_finite_temperature_phonons.py index 0ae2877705..4708548806 100644 --- a/tests/forcefields/flows/test_finite_temperature_phonons.py +++ b/tests/forcefields/flows/test_finite_temperature_phonons.py @@ -112,11 +112,13 @@ def test_force_field_md_maker(cu3au): # the MD jobs have a number only when there are several flow = maker.make(cu3au, supercell_matrix=np.eye(3).tolist()) - md_names = [job.name for job in flow.jobs if "MD" in job.name] + md_flow = next(job for job in flow.jobs if job.name == "chained MD") + md_names = [job.name for job in md_flow.jobs if "MD" in job.name] assert md_names == ["ASE MD 1/3", "ASE MD 2/3", "ASE MD 3/3"] maker = ForceFieldFiniteTemperaturePhononMaker(md_time=2.0) flow = maker.make(cu3au, supercell_matrix=np.eye(3).tolist()) - assert [job.name for job in flow.jobs if "MD" in job.name] == ["ASE MD"] + md_flow = next(job for job in flow.jobs if job.name == "chained MD") + assert [job.name for job in md_flow.jobs] == ["ASE MD"] nose_hoover = ForceFieldFiniteTemperaturePhononMaker( thermostat="nose-hoover", md_time_step=2.0 diff --git a/tests/vasp/flows/test_finite_temperature_phonons.py b/tests/vasp/flows/test_finite_temperature_phonons.py index 8bc48c7c9e..4e6ac43c0e 100644 --- a/tests/vasp/flows/test_finite_temperature_phonons.py +++ b/tests/vasp/flows/test_finite_temperature_phonons.py @@ -45,15 +45,19 @@ def test_vasp_flows(si_structure, maker_cls, md_code, code): "get_supercell_size", *born_names, "get_md_supercell", - f"{md_names[0]} 1/2", - "get_md_restart_structure", - f"{md_names[1]} 2/2", + "chained MD", "select_md_snapshots", "run_phonon_displacements", "fit_finite_temperature_phonons", ] relax = flow.jobs[0] - reference, md_1, restart, md_2, snapshots, statics, fit = flow.jobs[-7:] + reference, md_flow, snapshots, statics, fit = flow.jobs[-5:] + md_1, restart, md_2 = md_flow.jobs + assert [job.name for job in md_flow.jobs] == [ + f"{md_names[0]} 1/2", + "get_md_restart_structure", + f"{md_names[1]} 2/2", + ] assert isinstance(relax, Flow) # a diagonal supercell @@ -115,7 +119,7 @@ def test_flow_from_output_reference(): structure = OutputReference("1234", attributes=(("a", "structure"),)) flow = FiniteTemperaturePhononMaker().make(structure) assert flow.jobs[0].name == "double relax" - assert [job.name for job in flow.jobs][4] == "molecular dynamics" + assert [job.name for job in flow.jobs][4] == "chained MD" def test_non_diagonal_supercell_matrix(si_structure): From fb9c90c16b3633875e2e6ca56a13c0a5a27bb8da Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 20:23:08 -0700 Subject: [PATCH 33/43] Move ChainedMDMaker and the MD restart job into common MD modules --- docs/user/codes/vasp.md | 2 +- .../flows/finite_temperature_phonons.py | 67 +--------------- src/atomate2/common/flows/md.py | 79 +++++++++++++++++++ .../common/jobs/finite_temperature_phonons.py | 57 +------------ src/atomate2/common/jobs/md.py | 68 ++++++++++++++++ .../flows/finite_temperature_phonons.py | 2 +- .../jobs/test_finite_temperature_phonons.py | 41 +--------- tests/common/jobs/test_md.py | 55 +++++++++++++ 8 files changed, 209 insertions(+), 162 deletions(-) create mode 100644 src/atomate2/common/flows/md.py create mode 100644 src/atomate2/common/jobs/md.py create mode 100644 tests/common/jobs/test_md.py diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index cb8ec37f99..ceb2c75b6c 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -456,7 +456,7 @@ Both set ISPIN from the relaxation directory with `auto_ispin`. `md_runs` splits the MD into consecutive jobs, for example to stay within the walltime of a queue. Each job continues from the positions and velocities of the previous one. The thermostat variables start again from zero in each job. -`ChainedMDMaker` in `atomate2.common.flows.finite_temperature_phonons` makes these jobs, for VASP and for force fields. +`ChainedMDMaker` in `atomate2.common.flows.md` makes these jobs, for VASP and for force fields. The MD files are read by the job that picks the snapshots, so the MD run directories must be on a file system that this job can read. An NPT MD can be run first to include thermal expansion. diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 3553aff9a8..808eebe431 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -3,7 +3,7 @@ from __future__ import annotations from abc import ABC, abstractmethod -from dataclasses import dataclass, field +from dataclasses import dataclass from enum import Enum from typing import TYPE_CHECKING, Literal @@ -12,9 +12,9 @@ from pymatgen.util.due import Doi, due from atomate2 import SETTINGS +from atomate2.common.flows.md import ChainedMDMaker from atomate2.common.jobs.finite_temperature_phonons import ( fit_finite_temperature_phonons, - get_md_restart_structure, get_md_supercell, get_npt_structure, select_md_snapshots, @@ -43,69 +43,6 @@ def _get_force_field(maker: Maker, code: str) -> tuple[str | None, dict | None]: ) -@dataclass -class ChainedMDMaker(Maker): - """ - Maker to run one MD as several consecutive MD jobs, with VASP or a force field. - - The first MD job starts from the input structure. Each later one starts from - the final positions and velocities of the previous one. The thermostat - variables are not carried over, so they start again from zero in each job. - - Parameters - ---------- - name: str - Name of the flows produced by this maker. - md_makers: list[Maker] - Makers of the MD jobs, in the order of the trajectory. - md_code: str - Code of the MD, 'vasp' or 'forcefields'. - """ - - name: str = "chained MD" - md_makers: list[Maker] = field(default_factory=list) - md_code: str = "vasp" - - def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow: - """ - Make a flow of consecutive MD jobs. - - Parameters - ---------- - structure: Structure - The structure the first MD job starts from. Its magnetic moments, if - any, are also given to the later MD jobs. - prev_dir: str | Path | None - A previous calculation directory, passed to each MD job. - - Returns - ------- - Flow - Its output holds the directories and the uuids of the MD jobs, in - the order of the trajectory. - """ - jobs: list[Job] = [] - md_jobs: list[Job] = [] - md_structure = structure - for idx, maker in enumerate(self.md_makers, start=1): - md_job = maker.make(md_structure, prev_dir=prev_dir) - if len(self.md_makers) > 1: - md_job.append_name(f" {idx}/{len(self.md_makers)}") - jobs.append(md_job) - md_jobs.append(md_job) - if idx < len(self.md_makers): - restart = get_md_restart_structure( - md_job.output.dir_name, self.md_code, structure - ) - jobs.append(restart) - md_structure = restart.output - output = { - "dir_names": [md_job.output.dir_name for md_job in md_jobs], - "uuids": [md_job.uuid for md_job in md_jobs], - } - return Flow(jobs, output, name=self.name) - - @due.dcite( Doi("10.48550/arXiv.2508.01020"), description="Pheasy code for (an)harmonic force constants.", diff --git a/src/atomate2/common/flows/md.py b/src/atomate2/common/flows/md.py new file mode 100644 index 0000000000..4cbb651682 --- /dev/null +++ b/src/atomate2/common/flows/md.py @@ -0,0 +1,79 @@ +"""Flows for molecular dynamics that are shared between codes.""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import TYPE_CHECKING + +from jobflow import Flow, Maker + +from atomate2.common.jobs.md import get_md_restart_structure + +if TYPE_CHECKING: + from pathlib import Path + + from jobflow import Job + from pymatgen.core import Structure + + +@dataclass +class ChainedMDMaker(Maker): + """ + Maker to run one MD as several consecutive MD jobs, with VASP or a force field. + + The first MD job starts from the input structure. Each later one starts from + the final positions and velocities of the previous one. The thermostat + variables are not carried over, so they start again from zero in each job. + + Parameters + ---------- + name: str + Name of the flows produced by this maker. + md_makers: list[Maker] + Makers of the MD jobs, in the order of the trajectory. + md_code: str + Code of the MD, 'vasp' or 'forcefields'. + """ + + name: str = "chained MD" + md_makers: list[Maker] = field(default_factory=list) + md_code: str = "vasp" + + def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow: + """ + Make a flow of consecutive MD jobs. + + Parameters + ---------- + structure: Structure + The structure the first MD job starts from. Its magnetic moments, if + any, are also given to the later MD jobs. + prev_dir: str | Path | None + A previous calculation directory, passed to each MD job. + + Returns + ------- + Flow + Its output holds the directories and the uuids of the MD jobs, in + the order of the trajectory. + """ + jobs: list[Job] = [] + md_jobs: list[Job] = [] + md_structure = structure + for idx, maker in enumerate(self.md_makers, start=1): + md_job = maker.make(md_structure, prev_dir=prev_dir) + if len(self.md_makers) > 1: + md_job.append_name(f" {idx}/{len(self.md_makers)}") + jobs.append(md_job) + md_jobs.append(md_job) + if idx < len(self.md_makers): + restart = get_md_restart_structure( + md_job.output.dir_name, self.md_code, structure + ) + jobs.append(restart) + md_structure = restart.output + output = { + "dir_names": [md_job.output.dir_name for md_job in md_jobs], + "uuids": [md_job.uuid for md_job in md_jobs], + } + return Flow(jobs, output, name=self.name) diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index 9fca439b4a..ee544f48b2 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -18,11 +18,12 @@ from phonopy.interface.vasp import write_vasp from pymatgen.core import Structure from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure -from pymatgen.io.vasp import Incar, Kpoints, Poscar, Xdatcar +from pymatgen.io.vasp import Incar, Kpoints, Xdatcar from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine from pymatgen.phonon.dos import PhononDos from pymatgen.symmetry.analyzer import SpacegroupAnalyzer +from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE, _get_site_properties from atomate2.common.jobs.pheasy import ( _DEFAULT_FILE_PATHS, _check_lasso_alpha, @@ -54,8 +55,6 @@ logger = logging.getLogger(__name__) -# file of the force field MD trajectory, written in the ASE format -ASE_TRAJECTORY_FILE = "md_trajectory.traj" _KPATH_SCHEME = "seekpath" # Limits of the trajectory check @@ -96,13 +95,6 @@ def _get_phonopy( ) -def _get_site_properties(reference: Structure) -> dict: - """Get the magnetic moments of the reference, the only site property kept.""" - if "magmom" in reference.site_properties: - return {"magmom": reference.site_properties["magmom"]} - return {} - - @job def get_md_supercell( structure: Structure, supercell_matrix: Matrix3D, symprec: float, code: str @@ -147,51 +139,6 @@ def get_md_supercell( ) -@job -def get_md_restart_structure( - md_dir: str, md_code: str, reference: Structure -) -> Structure: - """ - Get the final positions and velocities of an MD run. - - For VASP, they are read from CONTCAR, with the velocities in Angstrom/fs. - For force fields, they are read from the last frame of the ASE trajectory - file, with the velocities in ASE units. In both cases, the velocities are a - site property that the next MD run starts from. The thermostat variables - are not carried over, so they start again from zero in the next run. The - magnetic moments of the reference, if any, are added as a site property. - - Parameters - ---------- - md_dir: str - Directory of the MD run. - md_code: str - Code of the MD, "vasp" or "forcefields". - reference: Structure - The undisplaced supercell the MD started from. - - Returns - ------- - Structure - The final structure, with a "velocities" site property. - """ - directory = Path(strip_hostname(md_dir)) - if md_code == "vasp": - structure = Poscar.from_file(zpath(str(directory / "CONTCAR"))).structure - else: - atoms = ase_read(directory / ASE_TRAJECTORY_FILE, index=-1) - structure = Structure( - atoms.cell[:], - atoms.get_chemical_symbols(), - atoms.get_positions(), - coords_are_cartesian=True, - site_properties={"velocities": atoms.get_velocities().tolist()}, - ) - for key, values in _get_site_properties(reference).items(): - structure.add_site_property(key, values) - return structure - - def _read_vasp_md( directory: Path, ) -> tuple[np.ndarray, np.ndarray, np.ndarray, list[str], float]: diff --git a/src/atomate2/common/jobs/md.py b/src/atomate2/common/jobs/md.py new file mode 100644 index 0000000000..e1cca05131 --- /dev/null +++ b/src/atomate2/common/jobs/md.py @@ -0,0 +1,68 @@ +"""Jobs for molecular dynamics that are shared between codes.""" + +from __future__ import annotations + +from pathlib import Path + +from ase.io import read as ase_read +from jobflow import job +from monty.os.path import zpath +from pymatgen.core import Structure +from pymatgen.io.vasp import Poscar + +from atomate2.utils.path import strip_hostname + +# file of the force field MD trajectory, written in the ASE format +ASE_TRAJECTORY_FILE = "md_trajectory.traj" + + +def _get_site_properties(reference: Structure) -> dict: + """Get the magnetic moments of the reference, the only site property kept.""" + if "magmom" in reference.site_properties: + return {"magmom": reference.site_properties["magmom"]} + return {} + + +@job +def get_md_restart_structure( + md_dir: str, md_code: str, reference: Structure +) -> Structure: + """ + Get the final positions and velocities of an MD run. + + For VASP, they are read from CONTCAR, with the velocities in Angstrom/fs. + For force fields, they are read from the last frame of the ASE trajectory + file, with the velocities in ASE units. In both cases, the velocities are a + site property that the next MD run starts from. The thermostat variables + are not carried over, so they start again from zero in the next run. The + magnetic moments of the reference, if any, are added as a site property. + + Parameters + ---------- + md_dir: str + Directory of the MD run. + md_code: str + Code of the MD, "vasp" or "forcefields". + reference: Structure + The undisplaced supercell the MD started from. + + Returns + ------- + Structure + The final structure, with a "velocities" site property. + """ + directory = Path(strip_hostname(md_dir)) + if md_code == "vasp": + structure = Poscar.from_file(zpath(str(directory / "CONTCAR"))).structure + else: + atoms = ase_read(directory / ASE_TRAJECTORY_FILE, index=-1) + structure = Structure( + atoms.cell[:], + atoms.get_chemical_symbols(), + atoms.get_positions(), + coords_are_cartesian=True, + site_properties={"velocities": atoms.get_velocities().tolist()}, + ) + for key, values in _get_site_properties(reference).items(): + structure.add_site_property(key, values) + return structure diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py index d36ca047a3..1b059187b5 100644 --- a/src/atomate2/forcefields/flows/finite_temperature_phonons.py +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -12,7 +12,7 @@ from atomate2.common.flows.finite_temperature_phonons import ( BaseFiniteTemperaturePhononMaker, ) -from atomate2.common.jobs.finite_temperature_phonons import ASE_TRAJECTORY_FILE +from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker from atomate2.forcefields.md import ForceFieldMDMaker from atomate2.vasp.flows.finite_temperature_phonons import FiniteTemperaturePhononMaker diff --git a/tests/common/jobs/test_finite_temperature_phonons.py b/tests/common/jobs/test_finite_temperature_phonons.py index d241f28ee3..699f02ab62 100644 --- a/tests/common/jobs/test_finite_temperature_phonons.py +++ b/tests/common/jobs/test_finite_temperature_phonons.py @@ -19,17 +19,16 @@ from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure from atomate2.common.jobs.finite_temperature_phonons import ( - ASE_TRAJECTORY_FILE, _assess_trajectory, _get_rms_displacement, _remove_center_of_mass, average_npt_structure, fit_finite_temperature_phonons, - get_md_restart_structure, get_md_supercell, get_npt_structure, select_md_snapshots, ) +from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE TEMPERATURE = 300.0 # a long time step, so that the second half of the synthetic trajectories of 400 @@ -350,44 +349,6 @@ def test_get_md_supercell(): assert supercell.site_properties == {} -def test_get_md_restart_structure(cu_supercell): - rng = np.random.default_rng(4) - velocities = rng.normal(0, 0.01, size=(len(cu_supercell), 3)) - reference = cu_supercell.copy(site_properties={"magmom": [1.0] * 32}) - - # a CONTCAR of a VASP MD, with the predictor-corrector block after the - # velocities - md_dir = TEST_DIR / "vasp/Si_multi_md/molecular_dynamics_1/outputs" - si_reference = Structure( - np.eye(3) * 3.87, ["Si", "Si"], [[0, 0, 0], [0.25, 0.25, 0.25]] - ) - restart = get_md_restart_structure.original(str(md_dir), "vasp", si_reference) - assert restart.site_properties["velocities"][0] == pytest.approx( - [0.40252568e-03, -0.31480439e-02, -0.16045943e-02] - ) - assert "magmom" not in restart.site_properties - - Path("vasp").mkdir() - structure = cu_supercell.copy(site_properties={"velocities": velocities}) - structure.to(filename="vasp/CONTCAR", fmt="poscar") - restart = get_md_restart_structure.original( - str(Path("vasp").resolve()), "vasp", reference - ) - assert np.allclose(restart.site_properties["velocities"], velocities, atol=1e-8) - assert restart.site_properties["magmom"] == [1.0] * 32 - - Path("ase").mkdir() - atoms = AseAtomsAdaptor.get_atoms(cu_supercell) - atoms.set_velocities(velocities) - ase_write(Path("ase") / ASE_TRAJECTORY_FILE, [atoms.copy(), atoms]) - restart = get_md_restart_structure.original( - str(Path("ase").resolve()), "forcefields", reference - ) - assert np.allclose(restart.site_properties["velocities"], velocities) - assert np.allclose(restart.cart_coords, cu_supercell.cart_coords) - assert restart.site_properties["magmom"] == [1.0] * 32 - - def test_get_rms_displacement(): """An Einstein crystal has = 3 k_B T / k per atom.""" structure = AseAtomsAdaptor.get_structure(bulk("Cu", "fcc", a=3.61, cubic=True)) diff --git a/tests/common/jobs/test_md.py b/tests/common/jobs/test_md.py new file mode 100644 index 0000000000..06fdfd3f1d --- /dev/null +++ b/tests/common/jobs/test_md.py @@ -0,0 +1,55 @@ +"""Tests of the shared MD jobs.""" + +from pathlib import Path + +import numpy as np +import pytest +from ase.build import bulk +from ase.io import write as ase_write +from pymatgen.core import Structure +from pymatgen.io.ase import AseAtomsAdaptor + +from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE, get_md_restart_structure + +TEST_DIR = Path(__file__).resolve().parents[2] / "test_data" + + +def test_get_md_restart_structure(): + cu_supercell = AseAtomsAdaptor.get_structure( + bulk("Cu", "fcc", a=3.61, cubic=True) * (2, 2, 2) + ) + rng = np.random.default_rng(4) + velocities = rng.normal(0, 0.01, size=(len(cu_supercell), 3)) + reference = cu_supercell.copy(site_properties={"magmom": [1.0] * 32}) + + # a CONTCAR of a VASP MD, with the predictor-corrector block after the + # velocities + md_dir = TEST_DIR / "vasp/Si_multi_md/molecular_dynamics_1/outputs" + si_reference = Structure( + np.eye(3) * 3.87, ["Si", "Si"], [[0, 0, 0], [0.25, 0.25, 0.25]] + ) + restart = get_md_restart_structure.original(str(md_dir), "vasp", si_reference) + assert restart.site_properties["velocities"][0] == pytest.approx( + [0.40252568e-03, -0.31480439e-02, -0.16045943e-02] + ) + assert "magmom" not in restart.site_properties + + Path("vasp").mkdir() + structure = cu_supercell.copy(site_properties={"velocities": velocities}) + structure.to(filename="vasp/CONTCAR", fmt="poscar") + restart = get_md_restart_structure.original( + str(Path("vasp").resolve()), "vasp", reference + ) + assert np.allclose(restart.site_properties["velocities"], velocities, atol=1e-8) + assert restart.site_properties["magmom"] == [1.0] * 32 + + Path("ase").mkdir() + atoms = AseAtomsAdaptor.get_atoms(cu_supercell) + atoms.set_velocities(velocities) + ase_write(Path("ase") / ASE_TRAJECTORY_FILE, [atoms.copy(), atoms]) + restart = get_md_restart_structure.original( + str(Path("ase").resolve()), "forcefields", reference + ) + assert np.allclose(restart.site_properties["velocities"], velocities) + assert np.allclose(restart.cart_coords, cu_supercell.cart_coords) + assert restart.site_properties["magmom"] == [1.0] * 32 From f01795a6db77f8c7bdc933aadc3a0c9a9bae5374 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Mon, 5 Oct 2026 20:50:22 -0700 Subject: [PATCH 34/43] Get the MD code of ChainedMDMaker from its makers --- .../flows/finite_temperature_phonons.py | 1 - src/atomate2/common/flows/md.py | 19 +++++++++++---- .../common/jobs/finite_temperature_phonons.py | 4 +++- src/atomate2/common/jobs/md.py | 20 ++++++++-------- .../flows/finite_temperature_phonons.py | 2 +- .../jobs/test_finite_temperature_phonons.py | 2 +- tests/common/jobs/test_md.py | 23 ++++++++++++------- .../flows/test_finite_temperature_phonons.py | 4 +++- 8 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index 808eebe431..a5f0377453 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -395,7 +395,6 @@ def make( md_flow = ChainedMDMaker( md_makers=[self.get_md_maker(n_steps) for n_steps in self.get_md_steps()], - md_code=self.md_code, ).make(reference, prev_dir=prev_dir) jobs.append(md_flow) md_dirs = md_flow.output["dir_names"] diff --git a/src/atomate2/common/flows/md.py b/src/atomate2/common/flows/md.py index 4cbb651682..1739cdebb4 100644 --- a/src/atomate2/common/flows/md.py +++ b/src/atomate2/common/flows/md.py @@ -7,6 +7,7 @@ from jobflow import Flow, Maker +from atomate2.ase.md import AseMDMaker from atomate2.common.jobs.md import get_md_restart_structure if TYPE_CHECKING: @@ -30,14 +31,14 @@ class ChainedMDMaker(Maker): name: str Name of the flows produced by this maker. md_makers: list[Maker] - Makers of the MD jobs, in the order of the trajectory. - md_code: str - Code of the MD, 'vasp' or 'forcefields'. + Makers of the MD jobs, in the order of the trajectory. VASP makers and + ASE makers, such as the force field ones, are supported. An ASE maker + that is followed by another job must write its trajectory in the ASE + format, with traj_file set. """ name: str = "chained MD" md_makers: list[Maker] = field(default_factory=list) - md_code: str = "vasp" def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow: """ @@ -67,8 +68,16 @@ def make(self, structure: Structure, prev_dir: str | Path | None = None) -> Flow jobs.append(md_job) md_jobs.append(md_job) if idx < len(self.md_makers): + traj_file = None + if isinstance(maker, AseMDMaker): + if maker.traj_file is None or maker.traj_file_fmt != "ase": + raise ValueError( + f"{maker.name} must write its trajectory in the ASE " + "format, so that the next MD job can continue from it." + ) + traj_file = str(maker.traj_file) restart = get_md_restart_structure( - md_job.output.dir_name, self.md_code, structure + md_job.output.dir_name, structure, traj_file ) jobs.append(restart) md_structure = restart.output diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index ee544f48b2..e63d91190e 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -23,7 +23,7 @@ from pymatgen.phonon.dos import PhononDos from pymatgen.symmetry.analyzer import SpacegroupAnalyzer -from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE, _get_site_properties +from atomate2.common.jobs.md import _get_site_properties from atomate2.common.jobs.pheasy import ( _DEFAULT_FILE_PATHS, _check_lasso_alpha, @@ -55,6 +55,8 @@ logger = logging.getLogger(__name__) +# file of the force field MD trajectory, written in the ASE format +ASE_TRAJECTORY_FILE = "md_trajectory.traj" _KPATH_SCHEME = "seekpath" # Limits of the trajectory check diff --git a/src/atomate2/common/jobs/md.py b/src/atomate2/common/jobs/md.py index e1cca05131..dd8a520393 100644 --- a/src/atomate2/common/jobs/md.py +++ b/src/atomate2/common/jobs/md.py @@ -12,9 +12,6 @@ from atomate2.utils.path import strip_hostname -# file of the force field MD trajectory, written in the ASE format -ASE_TRAJECTORY_FILE = "md_trajectory.traj" - def _get_site_properties(reference: Structure) -> dict: """Get the magnetic moments of the reference, the only site property kept.""" @@ -25,14 +22,14 @@ def _get_site_properties(reference: Structure) -> dict: @job def get_md_restart_structure( - md_dir: str, md_code: str, reference: Structure + md_dir: str, reference: Structure, traj_file: str | None = None ) -> Structure: """ Get the final positions and velocities of an MD run. For VASP, they are read from CONTCAR, with the velocities in Angstrom/fs. - For force fields, they are read from the last frame of the ASE trajectory - file, with the velocities in ASE units. In both cases, the velocities are a + For an ASE MD, they are read from the last frame of its trajectory file, + with the velocities in ASE units. In both cases, the velocities are a site property that the next MD run starts from. The thermostat variables are not carried over, so they start again from zero in the next run. The magnetic moments of the reference, if any, are added as a site property. @@ -41,10 +38,11 @@ def get_md_restart_structure( ---------- md_dir: str Directory of the MD run. - md_code: str - Code of the MD, "vasp" or "forcefields". reference: Structure - The undisplaced supercell the MD started from. + The structure the MD started from. + traj_file: str | None + Name of the ASE trajectory file of an ASE MD, written in the ASE format. + None for a VASP MD. Returns ------- @@ -52,10 +50,10 @@ def get_md_restart_structure( The final structure, with a "velocities" site property. """ directory = Path(strip_hostname(md_dir)) - if md_code == "vasp": + if traj_file is None: structure = Poscar.from_file(zpath(str(directory / "CONTCAR"))).structure else: - atoms = ase_read(directory / ASE_TRAJECTORY_FILE, index=-1) + atoms = ase_read(directory / traj_file, index=-1) structure = Structure( atoms.cell[:], atoms.get_chemical_symbols(), diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py index 1b059187b5..d36ca047a3 100644 --- a/src/atomate2/forcefields/flows/finite_temperature_phonons.py +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -12,7 +12,7 @@ from atomate2.common.flows.finite_temperature_phonons import ( BaseFiniteTemperaturePhononMaker, ) -from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE +from atomate2.common.jobs.finite_temperature_phonons import ASE_TRAJECTORY_FILE from atomate2.forcefields.jobs import ForceFieldRelaxMaker, ForceFieldStaticMaker from atomate2.forcefields.md import ForceFieldMDMaker from atomate2.vasp.flows.finite_temperature_phonons import FiniteTemperaturePhononMaker diff --git a/tests/common/jobs/test_finite_temperature_phonons.py b/tests/common/jobs/test_finite_temperature_phonons.py index 699f02ab62..0991b229d8 100644 --- a/tests/common/jobs/test_finite_temperature_phonons.py +++ b/tests/common/jobs/test_finite_temperature_phonons.py @@ -19,6 +19,7 @@ from pymatgen.io.phonopy import get_phonopy_structure, get_pmg_structure from atomate2.common.jobs.finite_temperature_phonons import ( + ASE_TRAJECTORY_FILE, _assess_trajectory, _get_rms_displacement, _remove_center_of_mass, @@ -28,7 +29,6 @@ get_npt_structure, select_md_snapshots, ) -from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE TEMPERATURE = 300.0 # a long time step, so that the second half of the synthetic trajectories of 400 diff --git a/tests/common/jobs/test_md.py b/tests/common/jobs/test_md.py index 06fdfd3f1d..34629d3987 100644 --- a/tests/common/jobs/test_md.py +++ b/tests/common/jobs/test_md.py @@ -1,4 +1,4 @@ -"""Tests of the shared MD jobs.""" +"""Tests of the shared MD jobs and flows.""" from pathlib import Path @@ -9,7 +9,9 @@ from pymatgen.core import Structure from pymatgen.io.ase import AseAtomsAdaptor -from atomate2.common.jobs.md import ASE_TRAJECTORY_FILE, get_md_restart_structure +from atomate2.common.flows.md import ChainedMDMaker +from atomate2.common.jobs.md import get_md_restart_structure +from atomate2.forcefields.md import ForceFieldMDMaker TEST_DIR = Path(__file__).resolve().parents[2] / "test_data" @@ -28,7 +30,7 @@ def test_get_md_restart_structure(): si_reference = Structure( np.eye(3) * 3.87, ["Si", "Si"], [[0, 0, 0], [0.25, 0.25, 0.25]] ) - restart = get_md_restart_structure.original(str(md_dir), "vasp", si_reference) + restart = get_md_restart_structure.original(str(md_dir), si_reference) assert restart.site_properties["velocities"][0] == pytest.approx( [0.40252568e-03, -0.31480439e-02, -0.16045943e-02] ) @@ -37,19 +39,24 @@ def test_get_md_restart_structure(): Path("vasp").mkdir() structure = cu_supercell.copy(site_properties={"velocities": velocities}) structure.to(filename="vasp/CONTCAR", fmt="poscar") - restart = get_md_restart_structure.original( - str(Path("vasp").resolve()), "vasp", reference - ) + restart = get_md_restart_structure.original(str(Path("vasp").resolve()), reference) assert np.allclose(restart.site_properties["velocities"], velocities, atol=1e-8) assert restart.site_properties["magmom"] == [1.0] * 32 Path("ase").mkdir() atoms = AseAtomsAdaptor.get_atoms(cu_supercell) atoms.set_velocities(velocities) - ase_write(Path("ase") / ASE_TRAJECTORY_FILE, [atoms.copy(), atoms]) + ase_write(Path("ase") / "md.traj", [atoms.copy(), atoms]) restart = get_md_restart_structure.original( - str(Path("ase").resolve()), "forcefields", reference + str(Path("ase").resolve()), reference, "md.traj" ) assert np.allclose(restart.site_properties["velocities"], velocities) assert np.allclose(restart.cart_coords, cu_supercell.cart_coords) assert restart.site_properties["magmom"] == [1.0] * 32 + + +def test_chained_md_maker_needs_ase_trajectory(): + structure = Structure(np.eye(3) * 3.61, ["Cu"], [[0, 0, 0]]) + maker = ChainedMDMaker(md_makers=[ForceFieldMDMaker(), ForceFieldMDMaker()]) + with pytest.raises(ValueError, match="trajectory in the ASE format"): + maker.make(structure) diff --git a/tests/vasp/flows/test_finite_temperature_phonons.py b/tests/vasp/flows/test_finite_temperature_phonons.py index 4e6ac43c0e..87dcd5f959 100644 --- a/tests/vasp/flows/test_finite_temperature_phonons.py +++ b/tests/vasp/flows/test_finite_temperature_phonons.py @@ -2,6 +2,7 @@ from jobflow import Flow, OutputReference from pymatgen.core import Lattice, Structure +from atomate2.common.jobs.finite_temperature_phonons import ASE_TRAJECTORY_FILE from atomate2.forcefields.flows.finite_temperature_phonons import ( MLFFMDVaspStaticFiniteTemperaturePhononMaker, VaspMDMLFFStaticFiniteTemperaturePhononMaker, @@ -69,7 +70,8 @@ def test_vasp_flows(si_structure, maker_cls, md_code, code): # end of the first, and both get the relaxation directory assert md_1.function_args[0].uuid == reference.uuid assert md_2.function_args[0].uuid == restart.uuid - assert restart.function_args == (md_1.output.dir_name, md_code, reference.output) + traj_file = ASE_TRAJECTORY_FILE if md_code == "forcefields" else None + assert restart.function_args == (md_1.output.dir_name, reference.output, traj_file) for md_job in (md_1, md_2): assert md_job.function_kwargs["prev_dir"].uuid == relax.output.uuid assert maker.get_md_steps() == [4000, 4000] From dd198efa14781b6f99ec9e6abb9aeef73e8f8a25 Mon Sep 17 00:00:00 2001 From: Jiongzhi ZHENG Date: Tue, 6 Oct 2026 14:36:26 +0800 Subject: [PATCH 35/43] Update pheasy.py --- src/atomate2/common/jobs/pheasy.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index b6984f372b..8f522be503 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -360,7 +360,10 @@ def _run_anharmonic_fit( supercell_matrix: np.ndarray, symprec: float, anhar_max_order: int, - fcs_cutoff_radius: Sequence[float], + # set a defaut value for the cutoff radius of each order, I recommend the default values for third- and fourth order + # are 6.3 and 5.3 angstroms, respectively. Those values are large enough for accurate third- and fourth-order force constant fits. + # and they are more efficient than using larger cutoff radii. + fcs_cutoff_radius: Sequence[float], num_anhar: int, anhar_alpha_min: int, work_dir: Path, From 031a83a98845e2d58b1c22e24630f6cefff25a4d Mon Sep 17 00:00:00 2001 From: Jiongzhi ZHENG Date: Tue, 6 Oct 2026 14:44:47 +0800 Subject: [PATCH 36/43] Update pheasy.py --- src/atomate2/common/jobs/pheasy.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 8f522be503..2be19befec 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -380,7 +380,9 @@ def _run_anharmonic_fit( pheasy writes FORCE_CONSTANTS_3RD and fc3.hdf5 to work_dir, and FORCE_CONSTANTS_4TH and fc4.hdf5 for fourth order. The one-shot fit also - writes its second-order force constants, fc2.hdf5. + writes its second-order force constants, fc2.hdf5. In order to make the FCs can + be read correctly by SHENGBTE and FourPhonon, we force pheasy to write FCs in the + text format. Parameters ---------- @@ -406,6 +408,10 @@ def _run_anharmonic_fit( it, the cross-validated penalty and the fitted force constants change from run to run on the same forces. """ + + # use the default cutoff radii if not provided by the users. In order to make the FCs fitting + # more effcient and accurate, oterwise, the users can not do the high-throughput calculations efficiently. + dim = " ".join(str(int(supercell_matrix[i][i])) for i in range(3)) base = ( f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR --dim {dim} -w {anhar_max_order} " From 35069da11841f3232beb41d8929f16bc3bd8792e Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 6 Oct 2026 00:03:30 -0700 Subject: [PATCH 37/43] Revert the comments added to pheasy.py --- src/atomate2/common/jobs/pheasy.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/atomate2/common/jobs/pheasy.py b/src/atomate2/common/jobs/pheasy.py index 2be19befec..b6984f372b 100644 --- a/src/atomate2/common/jobs/pheasy.py +++ b/src/atomate2/common/jobs/pheasy.py @@ -360,10 +360,7 @@ def _run_anharmonic_fit( supercell_matrix: np.ndarray, symprec: float, anhar_max_order: int, - # set a defaut value for the cutoff radius of each order, I recommend the default values for third- and fourth order - # are 6.3 and 5.3 angstroms, respectively. Those values are large enough for accurate third- and fourth-order force constant fits. - # and they are more efficient than using larger cutoff radii. - fcs_cutoff_radius: Sequence[float], + fcs_cutoff_radius: Sequence[float], num_anhar: int, anhar_alpha_min: int, work_dir: Path, @@ -380,9 +377,7 @@ def _run_anharmonic_fit( pheasy writes FORCE_CONSTANTS_3RD and fc3.hdf5 to work_dir, and FORCE_CONSTANTS_4TH and fc4.hdf5 for fourth order. The one-shot fit also - writes its second-order force constants, fc2.hdf5. In order to make the FCs can - be read correctly by SHENGBTE and FourPhonon, we force pheasy to write FCs in the - text format. + writes its second-order force constants, fc2.hdf5. Parameters ---------- @@ -408,10 +403,6 @@ def _run_anharmonic_fit( it, the cross-validated penalty and the fitted force constants change from run to run on the same forces. """ - - # use the default cutoff radii if not provided by the users. In order to make the FCs fitting - # more effcient and accurate, oterwise, the users can not do the high-throughput calculations efficiently. - dim = " ".join(str(int(supercell_matrix[i][i])) for i in range(3)) base = ( f"{SETTINGS.PHEASY_CMD} --scell SPOSCAR --dim {dim} -w {anhar_max_order} " From 7b4fab489182ad2ef8e546c04045192c3b3d10d1 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 6 Oct 2026 00:06:56 -0700 Subject: [PATCH 38/43] Give the default pheasy cutoffs in Angstrom --- src/atomate2/common/flows/pheasy.py | 7 ++++--- src/atomate2/vasp/flows/pheasy.py | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/atomate2/common/flows/pheasy.py b/src/atomate2/common/flows/pheasy.py index 910b606866..5e3b215254 100644 --- a/src/atomate2/common/flows/pheasy.py +++ b/src/atomate2/common/flows/pheasy.py @@ -142,9 +142,10 @@ class BasePhononMaker(PurePhonopyMaker, ABC): cutoff distance in Bohr for each FC order, starting at second order. The default value is [-1, 12, 10]. The first entry is not used, since pheasy fits the second-order FCs without a cutoff. The second and third entries - are the cutoffs for third- and fourth-order FCs. The cutoff of each fitted - order, up to anhar_max_order, must be positive. Longer cutoffs increase - the number of free FCs, and with it the number of displaced supercells. + are the cutoffs for third- and fourth-order FCs. The defaults of 12 and 10 + Bohr are 6.35 and 5.29 Å. The cutoff of each fitted order, up to + anhar_max_order, must be positive. Longer cutoffs increase the number of + free FCs, and with it the number of displaced supercells. min_length: float minimum length of lattice constants will be used to create the supercell, the default value is 8.0 A. It can be increased for larger supercells. diff --git a/src/atomate2/vasp/flows/pheasy.py b/src/atomate2/vasp/flows/pheasy.py index d934c538dd..1b7bd79a5b 100644 --- a/src/atomate2/vasp/flows/pheasy.py +++ b/src/atomate2/vasp/flows/pheasy.py @@ -105,9 +105,10 @@ class PhononMaker(BasePhononMaker): cutoff distance in Bohr for each FC order, starting at second order. The default value is [-1, 12, 10]. The first entry is not used, since pheasy fits the second-order FCs without a cutoff. The second and third entries - are the cutoffs for third- and fourth-order FCs. The cutoff of each fitted - order, up to anhar_max_order, must be positive. Longer cutoffs increase - the number of free FCs, and with it the number of displaced supercells. + are the cutoffs for third- and fourth-order FCs. The defaults of 12 and 10 + Bohr are 6.35 and 5.29 Å. The cutoff of each fitted order, up to + anhar_max_order, must be positive. Longer cutoffs increase the number of + free FCs, and with it the number of displaced supercells. min_length: float minimum length of lattice constants will be used to create the supercell, the default value is 8.0 A. It can be increased for larger supercells. From 3609f81fb8096ba8bb952b3ef69408618383d077 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 6 Oct 2026 15:57:08 -0700 Subject: [PATCH 39/43] Seed the Langevin forces, reuse PhononBSDOSDoc and fix the docs --- docs/user/codes/vasp.md | 26 ++++-- src/atomate2/ase/md.py | 17 ++-- .../flows/finite_temperature_phonons.py | 52 +++++------ .../common/jobs/finite_temperature_phonons.py | 15 +++- .../schemas/finite_temperature_phonons.py | 79 ++++------------- .../flows/finite_temperature_phonons.py | 86 +++++++++++++------ .../vasp/flows/finite_temperature_phonons.py | 9 +- tests/ase/test_md.py | 18 ++++ .../flows/test_finite_temperature_phonons.py | 22 +---- tutorials/finite_temperature_phonons.ipynb | 63 +++++++------- 10 files changed, 204 insertions(+), 183 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index ceb2c75b6c..a01a78c9da 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -416,7 +416,8 @@ The cluster space grows faster there than the number of displacements the workfl #### Finite-temperature phonons `FiniteTemperaturePhononMaker` fits effective harmonic force constants at a finite temperature, as in the temperature-dependent effective potential ([TDEP](https://doi.org/10.1103/PhysRevB.84.180301)) method. -They include the anharmonic effects at that temperature. +They include the effect of the anharmonic forces on the frequencies at that temperature. +They give no phonon lifetimes. By default, the MD runs at the volume of the relaxed structure, so thermal expansion is not included. It can be switched on with an NPT MD before the NVT MD, see below. The structure is relaxed first. @@ -428,6 +429,7 @@ The displacements are measured from the undisplaced supercell. Pheasy then fits the second-order force constants to them with LASSO. As in the pheasy phonon workflow, a `DielectricMaker` computes the Born charges and the dielectric tensor for the non-analytical correction. It needs the `pheasy` extra, like the pheasy phonon workflow above. +The notebook `tutorials/finite_temperature_phonons.ipynb` runs it for six materials with three MACE potentials. ```{warning} This workflow is new and has not been tested widely. @@ -443,10 +445,11 @@ flow = FiniteTemperaturePhononMaker(temperature=300).make(structure) ``` The fit only uses the positions of the MD, not its dynamics. -What matters is that the MD samples the canonical ensemble. +The MD has to sample the canonical ensemble. A Langevin thermostat does this for every mode ([Bussi and Parrinello](https://doi.org/10.1103/PhysRevE.75.056707)). -A Nosé-Hoover thermostat can leave nearly harmonic modes out of equilibrium ([Legoll et al.](https://doi.org/10.1007/s00205-006-0029-1)), most of all at low temperature. -`thermostat="nose-hoover"` switches to it, but this is not recommended. +For a harmonic oscillator weakly coupled to a Nosé-Hoover thermostat, the dynamics is not ergodic ([Legoll et al.](https://doi.org/10.1007/s00205-006-0029-1)). +`thermostat="nose-hoover"` switches the NVT MD to a Nosé-Hoover thermostat with one thermostat variable. +In the KNaICl test of the notebook, 12 of 27 runs with it had imaginary modes, against 19 of 27 with Langevin. The MD uses looser settings than the statics, for example ENCUT = 500 eV instead of 600 eV. Only the forces of the statics enter the fit. @@ -470,9 +473,11 @@ The trajectory is also checked before the fit. The check looks for melting and for a move away from the reference structure. It also looks at the drift of the potential energy late in the run. The result is stored in `trajectory_health` of the output `FiniteTemperaturePhononDoc`, and a warning is raised when the check fails. -The limits of the check are rules of thumb, except for the Lindemann ratio of 0.15 at melting ([Saija et al.](https://doi.org/10.1063/1.2208357)). -Imaginary modes are counted at the q-points commensurate with the supercell. -They are reported and not removed. +The Lindemann ratio of 0.15 at melting is that of an fcc solid ([Saija et al.](https://doi.org/10.1063/1.2208357)). +The other limits of the check are rules of thumb. +`has_imaginary_modes` checks the band path. +`n_imaginary_modes` and `lowest_frequency` use the q-points commensurate with the supercell. +Imaginary modes are reported and not removed. The MD and the statics can also come from different codes. Three more makers are in `atomate2.forcefields.flows.finite_temperature_phonons`. @@ -482,7 +487,7 @@ Three more makers are in `atomate2.forcefields.flows.finite_temperature_phonons` Each has a `from_force_field_name` method to choose the force field. They need the package of the force field, for example `mace-torch` for MACE. All of them use the same fit. -A force field NPT MD uses ASE's `MTKNPT`, a Nosé-Hoover thermostat with the barostat of [Martyna et al.](https://doi.org/10.1063/1.467468). +A force field NPT MD uses ASE's `MTKNPT`, a Nosé-Hoover thermostat with one thermostat variable and the barostat of [Martyna et al.](https://doi.org/10.1063/1.467468). ```python from atomate2.forcefields.flows.finite_temperature_phonons import ( @@ -497,7 +502,9 @@ flow = maker.make(structure) `run_npt=True` sets the NPT MD and the relaxation of the atoms in its cell. -Most force fields give no Born charges, so the force field makers skip the non-analytical correction by default. +Most force fields give no Born charges. +`ForceFieldFiniteTemperaturePhononMaker` and `VaspMDMLFFStaticFiniteTemperaturePhononMaker` therefore skip the non-analytical correction by default. +`MLFFMDVaspStaticFiniteTemperaturePhononMaker` keeps the VASP `DielectricMaker`. The Born charges and the dielectric tensor can come from MACE-Field, see the [force field notes](forcefields.md#mace-field-notes), or from VASP. Either pass `born` and `epsilon_static` to `make`, or set a `born_maker`: @@ -518,6 +525,7 @@ Known limitations: - pheasy needs a diagonal supercell matrix. - The MD is classical, so there is no zero-point motion. - Each result comes from one MD trajectory, so it carries the noise of that trajectory. +- The Lindemann ratio is averaged over all atoms. It can pass 0.15 when only the light atoms move far, for example Li in a superionic conductor, while the rest of the crystal stays solid. - With a force field MD and VASP statics, the trajectory and the forces come from different potential energy surfaces. ### Grüneisen parameter workflow diff --git a/src/atomate2/ase/md.py b/src/atomate2/ase/md.py index d7a574b9cf..14ea89d751 100644 --- a/src/atomate2/ase/md.py +++ b/src/atomate2/ase/md.py @@ -3,6 +3,7 @@ from __future__ import annotations import contextlib +import inspect import io import logging import os @@ -156,7 +157,8 @@ class AseMDMaker(AseMaker, ABC): The step interval for saving the trajectories. mb_velocity_seed : int or None If an int, a random number seed for generating initial velocities - from a Maxwell-Boltzmann distribution. + from a Maxwell-Boltzmann distribution. It also seeds the random forces + of dynamics that take an rng argument, such as Langevin. zero_linear_momentum : bool = False Whether to initialize the atomic velocities with zero linear momentum zero_angular_momentum : bool = False @@ -381,13 +383,12 @@ def run_ase( # ASE NPT implementation requires upper triangular cell atoms.set_cell(atoms.cell.standard_form(form="upper")[0]) + rng = np.random.default_rng(seed=self.mb_velocity_seed) if initial_velocities: atoms.set_velocities(initial_velocities) elif not np.isnan(self.t_schedule).any(): MaxwellBoltzmannDistribution( - atoms=atoms, - temperature_K=self.t_schedule[0], - rng=np.random.default_rng(seed=self.mb_velocity_seed), + atoms=atoms, temperature_K=self.t_schedule[0], rng=rng ) if self.zero_linear_momentum: Stationary(atoms) @@ -398,8 +399,14 @@ def run_ase( md_observer = TrajectoryObserver(atoms, store_md_outputs=True) + md_kwargs = dict(self.ase_md_kwargs) + if ( + self.mb_velocity_seed is not None + and "rng" in inspect.signature(dynamics).parameters + ): + md_kwargs.setdefault("rng", rng) md_runner = dynamics( - atoms=atoms, timestep=self.time_step * units.fs, **self.ase_md_kwargs + atoms=atoms, timestep=self.time_step * units.fs, **md_kwargs ) md_runner.attach(md_observer, interval=self.traj_interval) diff --git a/src/atomate2/common/flows/finite_temperature_phonons.py b/src/atomate2/common/flows/finite_temperature_phonons.py index a5f0377453..f03a6442a1 100644 --- a/src/atomate2/common/flows/finite_temperature_phonons.py +++ b/src/atomate2/common/flows/finite_temperature_phonons.py @@ -74,12 +74,14 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): rest of the trajectory. The phonon displacement maker computes the forces on these snapshots and on the undisplaced supercell. The displacements of the snapshots are measured from the relaxed positions. pheasy fits one set of - second-order force constants to the displacements and forces with LASSO, as - in the temperature-dependent effective potential method. These force - constants contain the anharmonic effects at the temperature and at the - volume of the relaxed structure. Thermal expansion is not included. They - give the phonon band structure and density of states. Imaginary modes are - reported, not removed. + second-order force constants to the displacements and forces with LASSO. + Fitting effective harmonic force constants to MD is the idea of the + temperature-dependent effective potential method. The force constants + include the effect of the anharmonic forces on the frequencies, at the + temperature and at the volume of the relaxed structure. They give no + phonon lifetimes. The MD is classical. Thermal expansion is not included. + The force constants give the phonon band structure and density of states. + Imaginary modes are reported, not removed. If npt_maker is set, thermal expansion is included. An NPT MD run at the temperature and pressure first starts from the undisplaced supercell of the @@ -128,9 +130,10 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): thermostat: Literal["nose-hoover", "langevin"] Thermostat of the NVT MD. Langevin, the default, samples the canonical ensemble also for nearly harmonic modes (Bussi and Parrinello, Phys. Rev. - E 75, 056707 (2007)). A Nose-Hoover thermostat may leave such modes out - of equilibrium (Legoll et al., Arch. Ration. Mech. Anal. 184, 449 - (2007)). The NPT MD does not use this setting. + E 75, 056707 (2007)). For a harmonic oscillator weakly coupled to a + Nose-Hoover thermostat, the dynamics is not ergodic (Legoll et al., + Arch. Ration. Mech. Anal. 184, 449 (2007)). The NPT MD does not use + this setting. md_runs: int Number of consecutive MD jobs that make up the trajectory. Each job continues from the positions and velocities of the previous one. The @@ -155,8 +158,9 @@ class BaseFiniteTemperaturePhononMaker(Maker, ABC): default. A warning is raised if the chosen penalty is on either bound of the search. random_seed: int | None - Seed of the LASSO fit, and of the initial velocities of a force field - MD. + Seed of the LASSO fit. It also seeds the initial velocities and the + Langevin random forces of a force field MD. MD job i, counted from 0, + uses random_seed + i and the NPT MD uses random_seed + md_runs. tol_imaginary_modes: float Frequencies below -tol_imaginary_modes in THz are imaginary. store_force_constants: bool @@ -227,10 +231,6 @@ def __post_init__(self) -> None: f"{key} must be one of {sorted(SUPPORTED_CODES)}, not " f"{getattr(self, key)!r}." ) - if self.socket and self.code == "vasp": - raise ValueError("socket is not supported by VASP.") - if min(self.md_runs, self.n_snapshots) < 1: - raise ValueError("md_runs and n_snapshots must be at least 1.") if self.alpha_min >= -2: raise ValueError(f"alpha_min must be below -2, not {self.alpha_min}.") if min(self.temperature, self.md_time, self.md_time_step) <= 0: @@ -242,10 +242,6 @@ def __post_init__(self) -> None: f"The MD has {n_steps} steps. After leaving out equilibration_time, " f"fewer than the {self.n_snapshots} snapshots are left." ) - if self.md_runs > n_steps: - raise ValueError( - f"md_runs ({self.md_runs}) is larger than the {n_steps} MD steps." - ) if self.npt_maker is not None and not ( 0 <= self.npt_equilibration_time < self.npt_time ): @@ -253,8 +249,6 @@ def __post_init__(self) -> None: "npt_equilibration_time must be at least zero and shorter than " "npt_time." ) - if self.fixed_cell_relax_maker is not None and self.npt_maker is None: - raise ValueError("fixed_cell_relax_maker is only used with npt_maker.") def get_md_steps(self) -> list[int]: """Get the number of MD steps of each MD job.""" @@ -302,8 +296,9 @@ def make( if not np.allclose(matrix, np.diag(np.diag(matrix))): raise ValueError("pheasy needs a diagonal supercell matrix.") - # VASP sorts the atoms by electronegativity. Sorting here as well keeps - # the Born charges of a force field born_maker in the order of the fit. + # The VASP input sets sort the atoms by electronegativity. Sorting here as + # well keeps the Born charges of a force field born_maker in the order of + # the fit. if not isinstance(structure, OutputReference): structure = structure.get_sorted_structure() @@ -327,7 +322,7 @@ def make( structure, self.min_length, None, - force_90_degrees=True, + force_90_degrees=False, force_diagonal=True, ) jobs.append(supercell_job) @@ -394,7 +389,10 @@ def make( reference = reference_job.output md_flow = ChainedMDMaker( - md_makers=[self.get_md_maker(n_steps) for n_steps in self.get_md_steps()], + md_makers=[ + self.get_md_maker(n_steps, idx) + for idx, n_steps in enumerate(self.get_md_steps()) + ], ).make(reference, prev_dir=prev_dir) jobs.append(md_flow) md_dirs = md_flow.output["dir_names"] @@ -485,7 +483,7 @@ def get_npt_maker(self, n_steps: int) -> Maker: """ @abstractmethod - def get_md_maker(self, n_steps: int) -> Maker: + def get_md_maker(self, n_steps: int, index: int = 0) -> Maker: """ Get the maker of one MD job, with the settings of this flow. @@ -493,6 +491,8 @@ def get_md_maker(self, n_steps: int) -> Maker: ---------- n_steps: int Number of MD steps of the job. + index: int + Position of the job in the MD, counted from 0. Returns ------- diff --git a/src/atomate2/common/jobs/finite_temperature_phonons.py b/src/atomate2/common/jobs/finite_temperature_phonons.py index e63d91190e..ad5483c948 100644 --- a/src/atomate2/common/jobs/finite_temperature_phonons.py +++ b/src/atomate2/common/jobs/finite_temperature_phonons.py @@ -41,6 +41,7 @@ ) from atomate2.common.schemas.phonons import ( ForceConstants, + PhononComputationalSettings, PhononJobDirs, PhononUUIDs, _set_nac_params, @@ -73,8 +74,7 @@ # Rule of thumb: the mean positions are only checked if the second half of the # trajectory lasts at least one period of a 1 THz vibration. _MIN_SHIFT_WINDOW = 1.0 # ps -# Three sigma rule: without a drift, a change this large has a probability below -# 5% for any unimodal distribution. Pukelsheim, Am. Stat. 48, 88 (1994) +# Rule of thumb: three standard deviations of the energy of single frames _DRIFT_SIGMA = 3.0 # Rule of thumb: a third of a typical nearest-neighbor distance of 3 Angstrom, # about twice the vibration at the Lindemann limit for that distance. @@ -246,14 +246,16 @@ def _assess_trajectory( - A root mean square displacement above 0.5 Angstrom in the first 10 frames means the atoms are not in the order of the reference. - A root mean square vibration u_vib above 0.15 of the nearest-neighbor - distance means the structure melted. + distance means the structure melted. u_vib and u_ref are measured in + the second half of the frames. - A total displacement u_ref above 1.5 times u_vib means the mean positions moved away from the reference. This check is skipped if the second half of the trajectory is shorter than 1 ps. - A change of the mean potential energy from the second to the last quarter of the frames above 3 times the standard deviation of the energy in the last fifth means the structure transformed (falling energy) - or is disordering (rising energy). + or is disordering (rising energy). This check is skipped below 20 + frames. - A root mean square displacement above 1 Angstrom in the last fifth of the frames points at diffusion or very soft motion. @@ -834,6 +836,11 @@ def fit_finite_temperature_phonons( lowest_frequency=float(frequencies.min()), phonon_bandstructure=bs_symm_line, phonon_dos=dos, + phonopy_settings=PhononComputationalSettings( + npoints_band=npoints_band, + kpath_scheme=_KPATH_SCHEME, + kpoint_density_dos=kpoint_density_dos, + ), force_constants=ForceConstants(phonon.force_constants.tolist()) if store_force_constants else None, diff --git a/src/atomate2/common/schemas/finite_temperature_phonons.py b/src/atomate2/common/schemas/finite_temperature_phonons.py index db1614a58c..85482155fc 100644 --- a/src/atomate2/common/schemas/finite_temperature_phonons.py +++ b/src/atomate2/common/schemas/finite_temperature_phonons.py @@ -2,14 +2,10 @@ from typing import Literal -from emmet.core.math import Matrix3D -from emmet.core.structure import StructureMetadata from pydantic import BaseModel, Field from pymatgen.core import Structure -from pymatgen.phonon.bandstructure import PhononBandStructureSymmLine -from pymatgen.phonon.dos import PhononDos -from atomate2.common.schemas.phonons import ForceConstants, PhononJobDirs, PhononUUIDs +from atomate2.common.schemas.phonons import PhononBSDOSDoc class TrajectoryHealth(BaseModel): @@ -38,7 +34,7 @@ class TrajectoryHealth(BaseModel): None, description="Result of the check. 'reference_mismatch' means the atoms of " "the MD are not in the order of the reference. Every other verdict except " - "'stable' means the trajectory left the reference structure.", + "'stable' means the trajectory may have left the reference structure.", ) n_frames: int | None = Field(None, description="Number of MD frames analysed.") rms_displacement_start: float | None = Field( @@ -89,21 +85,20 @@ class TrajectoryHealth(BaseModel): ) -class FiniteTemperaturePhononDoc(StructureMetadata): - """Effective harmonic phonons at a finite temperature.""" +class FiniteTemperaturePhononDoc(PhononBSDOSDoc): + """Effective harmonic phonons at a finite temperature. + + structure is the unit cell of the NVT MD and the fit, with its atoms sorted + by electronegativity. It is the relaxed unit cell, or the cell from the NPT + MD if there was one. code is the code of the phonon displacement + calculations. born and epsilon_static are the symmetrized values used for + the non-analytical correction. has_imaginary_modes is True if the band + structure has imaginary modes. The undisplaced supercell is the last + phonon displacement calculation in uuids and jobdirs. The thermodynamic + properties are not computed. + """ - structure: Structure | None = Field( - None, - description="Unit cell of the NVT MD and the fit, with its atoms sorted by " - "electronegativity. It is the relaxed unit cell, or the cell from the NPT MD " - "if there was one.", - ) temperature: float | None = Field(None, description="MD temperature in K.") - code: str | None = Field( - None, - description="Code of the phonon displacement calculations that give the " - "forces, 'vasp' or 'forcefields'.", - ) md_code: str | None = Field( None, description="Code of the MD, 'vasp' or 'forcefields'." ) @@ -141,12 +136,6 @@ class FiniteTemperaturePhononDoc(StructureMetadata): description="MD time of each snapshot in ps, its step number times the time " "step.", ) - supercell_matrix: Matrix3D | None = Field( - None, description="Supercell matrix of the MD and the statics." - ) - primitive_matrix: Matrix3D | None = Field( - None, description="Primitive matrix used by phonopy." - ) rotational_sum_rule: str | None = Field( None, description="Rotational sum rule passed to pheasy with --rasr." ) @@ -182,40 +171,17 @@ class FiniteTemperaturePhononDoc(StructureMetadata): tol_imaginary_modes: float | None = Field( None, description="Frequencies below -tol_imaginary_modes in THz are imaginary." ) - has_imaginary_modes: bool | None = Field( - None, description="True if the band structure has imaginary modes." - ) n_imaginary_modes: int | None = Field( None, - description="Number of imaginary modes at the q-points commensurate with the " - "supercell.", + description="Number of frequencies below -tol_imaginary_modes, summed over " + "all q-points commensurate with the supercell. q-points that are equivalent " + "by symmetry are each counted.", ) lowest_frequency: float | None = Field( None, description="Lowest frequency at the q-points commensurate with the " "supercell, in THz. Imaginary frequencies are negative.", ) - phonon_bandstructure: PhononBandStructureSymmLine | None = Field( - None, description="Phonon band structure of the effective force constants." - ) - phonon_dos: PhononDos | None = Field( - None, description="Phonon density of states of the effective force constants." - ) - force_constants: ForceConstants | None = Field( - None, - description="Effective second-order force constants of the supercell in " - "eV/Angstrom^2.", - ) - born: list[Matrix3D] | None = Field( - None, - description="Symmetrized Born effective charges. They are used for the " - "non-analytical correction unless they are all zero.", - ) - epsilon_static: Matrix3D | None = Field( - None, - description="Symmetrized high-frequency dielectric tensor, used for the " - "non-analytical correction together with born.", - ) md_uuids: list[str] | None = Field(None, description="UUIDs of the MD jobs.") md_job_dirs: list[str] | None = Field( None, description="Directories of the MD jobs." @@ -246,14 +212,3 @@ class FiniteTemperaturePhononDoc(StructureMetadata): description="Directory of the relaxation of the atoms in the cell from the " "NPT MD.", ) - uuids: PhononUUIDs | None = Field( - None, - description="UUIDs of the relaxation, the phonon displacement calculations " - "and the Born charge calculation. The undisplaced supercell is the last " - "phonon displacement calculation.", - ) - jobdirs: PhononJobDirs | None = Field( - None, - description="Directories of the relaxation, the phonon displacement " - "calculations, the Born charge calculation and the fit.", - ) diff --git a/src/atomate2/forcefields/flows/finite_temperature_phonons.py b/src/atomate2/forcefields/flows/finite_temperature_phonons.py index d36ca047a3..8709dc67af 100644 --- a/src/atomate2/forcefields/flows/finite_temperature_phonons.py +++ b/src/atomate2/forcefields/flows/finite_temperature_phonons.py @@ -46,7 +46,10 @@ def _get_md_maker( def _get_force_field_md_maker( - maker: BaseFiniteTemperaturePhononMaker, n_steps: int, npt: bool = False + maker: BaseFiniteTemperaturePhononMaker, + n_steps: int, + index: int = 0, + npt: bool = False, ) -> ForceFieldMDMaker: """ Get the force field MD maker of one MD job of a finite-temperature flow. @@ -59,6 +62,9 @@ def _get_force_field_md_maker( The finite-temperature phonon maker. n_steps: int Number of MD steps of the job. + index: int + Position of the job in the MD, counted from 0. It is added to + maker.random_seed. The NPT MD uses maker.md_runs instead. npt: bool If True, get the NPT MD maker from maker.npt_maker. If False, get the NVT MD maker from maker.md_maker. @@ -103,7 +109,11 @@ def _get_force_field_md_maker( traj_file_fmt="ase", traj_interval=1, store_trajectory="no", - mb_velocity_seed=maker.random_seed, + mb_velocity_seed=( + None + if maker.random_seed is None + else maker.random_seed + (maker.md_runs if npt else index) + ), zero_linear_momentum=True, ) @@ -118,21 +128,24 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): another one. The MD writes an ASE trajectory file with a frame at every time step. The snapshots are read from this file, and the trajectory is not stored in the output document of the MD job. The Langevin thermostat has - the default friction of :obj:`.AseMDMaker`, 10 ps^-1. Its random forces - come from numpy's global random number generator, so two runs give - different trajectories. The Nose-Hoover thermostat is ASE's - NoseHooverChainNVT with one thermostat variable, like MDALGO = 2 in VASP. - Its time constant gives a period of about 40 time steps, like SMASS = 0 in - VASP. The initial velocities of the first MD job follow the - Maxwell-Boltzmann distribution, seeded with random_seed, with zero total - momentum. The NPT MD, if any, uses ASE's MTKNPT, a Nose-Hoover - thermostat and barostat that change the whole cell, whatever the - thermostat setting (Martyna et al., J. Chem. Phys. 101, 4177 (1994)). Its - thermostat time constant is that of the Nose-Hoover thermostat above, and - its barostat time constant is 1000 time steps. + the default friction of :obj:`.AseMDMaker`, 10 ps^-1. The Nose-Hoover + thermostat is ASE's NoseHooverChainNVT with one thermostat variable, like + MDALGO = 2 in VASP. Its time constant gives a period of about 40 time + steps, like SMASS = 0 in VASP. The initial velocities of the first MD job + follow the Maxwell-Boltzmann distribution, with zero total momentum. The + NPT MD, if any, uses ASE's MTKNPT, a Nose-Hoover thermostat and barostat + that change the whole cell, whatever the thermostat setting (Martyna et + al., J. Chem. Phys. 101, 4177 (1994)). Its thermostat time constant is + that of the Nose-Hoover thermostat above, and its barostat time constant + is 1000 time steps. MD job i, counted from 0, seeds its initial velocities + and its Langevin random forces with random_seed + i. The NPT MD uses + random_seed + md_runs. See :obj:`.BaseFiniteTemperaturePhononMaker` for the workflow. + This workflow is new and has not been tested widely. It might still change + in future versions. + Parameters ---------- name: str @@ -146,14 +159,17 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): DielectricMaker. It is None by default, as in the force field pheasy phonon workflow. npt_maker: .ForceFieldMDMaker | None - Maker for the NPT MD. It must not set dynamics or ase_md_kwargs. None - skips the NPT MD. + Maker for the NPT MD. The flow sets the same settings as for md_maker, + and the pressure. It must not set dynamics or ase_md_kwargs. None skips + the NPT MD. fixed_cell_relax_maker: .ForceFieldRelaxMaker | None Maker for the relaxation of the atoms in the cell from the NPT MD. It must keep the cell. md_maker: .ForceFieldMDMaker - Maker for the MD. It must not set dynamics or ase_md_kwargs, since the - flow sets the thermostat. + Maker for the MD. The flow sets its ensemble, temperature, n_steps, + time_step, dynamics, ase_md_kwargs, traj_file, traj_file_fmt, + traj_interval, store_trajectory, mb_velocity_seed and + zero_linear_momentum. It must not set dynamics or ase_md_kwargs. phonon_displacement_maker: .ForceFieldStaticMaker Maker for the static calculations on the snapshots and the undisplaced supercell. @@ -184,13 +200,14 @@ class ForceFieldFiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): @property def prev_calc_dir_argname(self) -> None: - """Name of the argument that passes prev_dir to the phonon displacement maker. + """Name of the prev_dir argument of the phonon displacement and Born makers. - Force field makers take no previous directory. + Force field makers take no previous directory, so it is None. A VASP + born_maker then runs without a previous directory. """ return - def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: + def get_md_maker(self, n_steps: int, index: int = 0) -> ForceFieldMDMaker: """ Get the force field MD maker of one MD job. @@ -198,12 +215,14 @@ def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: ---------- n_steps: int Number of MD steps of the job. + index: int + Position of the job in the MD, counted from 0. Returns ------- ForceFieldMDMaker """ - return _get_force_field_md_maker(self, n_steps) + return _get_force_field_md_maker(self, n_steps, index) def get_npt_maker(self, n_steps: int) -> ForceFieldMDMaker: """ @@ -305,6 +324,9 @@ class VaspMDMLFFStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker) the undisplaced supercell come from a force field, MACE-MP-0 by default. Use :obj:`from_force_field_name` to use another one. + This workflow is new and has not been tested widely. It might still change + in future versions. + Parameters ---------- name: str @@ -335,9 +357,10 @@ class VaspMDMLFFStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker) @property def prev_calc_dir_argname(self) -> None: - """Name of the argument that passes prev_dir to the phonon displacement maker. + """Name of the prev_dir argument of the phonon displacement and Born makers. - Force field makers take no previous directory. + Force field makers take no previous directory, so it is None. A VASP + born_maker then runs without a previous directory. """ return @@ -396,6 +419,9 @@ class MLFFMDVaspStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker) force field. The MD settings are those of :obj:`ForceFieldFiniteTemperaturePhononMaker`. + This workflow is new and has not been tested widely. It might still change + in future versions. + Parameters ---------- name: str @@ -407,8 +433,10 @@ class MLFFMDVaspStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker) for the non-analytical correction. It is a DielectricMaker by default, as in the VASP pheasy phonon workflow. None skips it. md_maker: .ForceFieldMDMaker - Maker for the MD. It must not set dynamics or ase_md_kwargs, since the - flow sets the thermostat. + Maker for the MD. The flow sets its ensemble, temperature, n_steps, + time_step, dynamics, ase_md_kwargs, traj_file, traj_file_fmt, + traj_interval, store_trajectory, mb_velocity_seed and + zero_linear_momentum. It must not set dynamics or ase_md_kwargs. npt_maker: .ForceFieldMDMaker | None Maker for the NPT MD, under the same conditions as md_maker. None skips the NPT MD. @@ -423,7 +451,7 @@ class MLFFMDVaspStaticFiniteTemperaturePhononMaker(FiniteTemperaturePhononMaker) md_maker: Maker = field(default_factory=lambda: _get_md_maker(_DEFAULT_FORCE_FIELD)) md_code: str = "forcefields" - def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: + def get_md_maker(self, n_steps: int, index: int = 0) -> ForceFieldMDMaker: """ Get the force field MD maker of one MD job. @@ -431,12 +459,14 @@ def get_md_maker(self, n_steps: int) -> ForceFieldMDMaker: ---------- n_steps: int Number of MD steps of the job. + index: int + Position of the job in the MD, counted from 0. Returns ------- ForceFieldMDMaker """ - return _get_force_field_md_maker(self, n_steps) + return _get_force_field_md_maker(self, n_steps, index) def get_npt_maker(self, n_steps: int) -> ForceFieldMDMaker: """ diff --git a/src/atomate2/vasp/flows/finite_temperature_phonons.py b/src/atomate2/vasp/flows/finite_temperature_phonons.py index 1c22f2fc98..8bf78746a8 100644 --- a/src/atomate2/vasp/flows/finite_temperature_phonons.py +++ b/src/atomate2/vasp/flows/finite_temperature_phonons.py @@ -71,6 +71,9 @@ class FiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): See :obj:`.BaseFiniteTemperaturePhononMaker` for the workflow. + This workflow is new and has not been tested widely. It might still change + in future versions. + Parameters ---------- name: str @@ -169,7 +172,7 @@ class FiniteTemperaturePhononMaker(BaseFiniteTemperaturePhononMaker): @property def prev_calc_dir_argname(self) -> str | None: - """Name of the argument that passes prev_dir to the phonon displacement maker. + """Name of the prev_dir argument of the phonon displacement and Born makers. Returns ------- @@ -177,7 +180,7 @@ def prev_calc_dir_argname(self) -> str | None: """ return "prev_dir" - def get_md_maker(self, n_steps: int) -> MDMaker: + def get_md_maker(self, n_steps: int, index: int = 0) -> MDMaker: """ Get the VASP MD maker of one MD job. @@ -185,6 +188,8 @@ def get_md_maker(self, n_steps: int) -> MDMaker: ---------- n_steps: int Number of MD steps of the job. + index: int + Position of the job in the MD, counted from 0. Unused. Returns ------- diff --git a/tests/ase/test_md.py b/tests/ase/test_md.py index 77178680a8..010e7415fc 100644 --- a/tests/ase/test_md.py +++ b/tests/ase/test_md.py @@ -97,6 +97,24 @@ def test_nvt_nose_hoover_chain(si_structure, clean_dir): maker.run_ase(si_structure) +def test_langevin_seed(si_structure, clean_dir): + """mb_velocity_seed also seeds the random forces of the Langevin thermostat.""" + si_structure.add_site_property("velocities", [[0.0, 0.0, 0.0]] * len(si_structure)) + + def positions(seed): + maker = LennardJonesMDMaker( + ensemble="nvt", + dynamics="langevin", + temperature=300, + n_steps=5, + mb_velocity_seed=seed, + ) + return maker.run_ase(si_structure).final_mol_or_struct.cart_coords + + assert positions(1) == pytest.approx(positions(1)) + assert positions(1) != pytest.approx(positions(2)) + + @pytest.mark.parametrize("calculator_name", list(name_to_maker)) def test_ase_nvt_maker(calculator_name, lj_fcc_ne_pars, fcc_ne_structure, clean_dir): # Langevin thermostat no longer works with single atom structures in ase>3.24.x diff --git a/tests/forcefields/flows/test_finite_temperature_phonons.py b/tests/forcefields/flows/test_finite_temperature_phonons.py index 4708548806..fa5f3841ec 100644 --- a/tests/forcefields/flows/test_finite_temperature_phonons.py +++ b/tests/forcefields/flows/test_finite_temperature_phonons.py @@ -20,11 +20,7 @@ ForceFieldFiniteTemperaturePhononMaker, _get_force_field_md_maker, ) -from atomate2.forcefields.jobs import ( - ForceFieldDielectricMaker, - ForceFieldRelaxMaker, - ForceFieldStaticMaker, -) +from atomate2.forcefields.jobs import ForceFieldDielectricMaker, ForceFieldStaticMaker from atomate2.forcefields.md import ForceFieldMDMaker from atomate2.vasp.jobs.core import DielectricMaker @@ -43,8 +39,6 @@ def cu3au(): def run_emt_flow(structure, **kwargs): """Run the force field workflow with EMT and return its output document.""" - # the Langevin thermostat of ASE draws from numpy's global generator - np.random.seed(103) # noqa: NPY002 maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( EMT, min_length=7.0, md_time_step=2.0, **kwargs ) @@ -56,27 +50,17 @@ def run_emt_flow(structure, **kwargs): @pytest.mark.parametrize( ("kwargs", "match"), [ - ({"md_runs": 0}, "md_runs and n_snapshots must be at least 1"), ({"alpha_min": -2}, "alpha_min must be below -2"), ({"md_time_step": 0}, "must be positive"), ({"equilibration_time": 8.0}, "fewer than the 50 snapshots"), ({"equilibration_time": -1.0}, "fewer than the 50 snapshots"), - ( - {"md_time": 0.01, "equilibration_time": 0, "n_snapshots": 5, "md_runs": 20}, - "larger than the 10", - ), ({"md_maker": None}, "md_maker and phonon_displacement_maker must be set"), ({"code": "aims"}, "code must be one of"), ({"md_code": None}, "md_code must be one of"), - ({"code": "vasp", "socket": True}, "socket is not supported by VASP"), ( {"npt_maker": ForceFieldMDMaker(), "npt_equilibration_time": 8.0}, "npt_equilibration_time must be", ), - ( - {"fixed_cell_relax_maker": ForceFieldRelaxMaker()}, - "only used with npt_maker", - ), ], ) def test_maker_checks(kwargs, match): @@ -99,6 +83,7 @@ def test_force_field_md_maker(cu3au): assert md_maker.time_step == 2.0 assert md_maker.temperature == 300 assert md_maker.mb_velocity_seed == 5 + assert maker.get_md_maker(166, 2).mb_velocity_seed == 7 assert md_maker.store_trajectory == "no" # Langevin by default, with the default friction of AseMDMaker assert md_maker.dynamics == "langevin" @@ -155,6 +140,8 @@ def test_force_field_npt_maker(cu3au): # a barostat time constant of 1000 steps assert npt_maker.ase_md_kwargs["pdamp"] / units.fs == pytest.approx(2000) assert maker.get_md_maker(100).ensemble == MDEnsemble.nvt + # the NPT MD has its own seed, after those of the md_runs NVT MD jobs + assert npt_maker.mb_velocity_seed == 104 # the atoms are relaxed in the cell from the NPT MD assert not maker.fixed_cell_relax_maker.relax_cell assert maker.fixed_cell_relax_maker.fix_symmetry @@ -258,7 +245,6 @@ def test_finite_temperature_phonon_maker_emt_born_charges( clean_dir, cu3au, fake_dielectric_calculator ): """Born charges from a force field dielectric job enter the NAC.""" - np.random.seed(103) # noqa: NPY002 maker = ForceFieldFiniteTemperaturePhononMaker.from_force_field_name( EMT, min_length=7.0, diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 6f913b613b..8330deedbd 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -32,8 +32,9 @@ "stabilize these modes at higher temperature. This workflow fits effective\n", "harmonic force constants to an MD trajectory at the temperature of interest, as\n", "in the temperature-dependent effective potential (TDEP) method of Hellman et\n", - "al., Phys. Rev. B 84, 180301 (2011). These force constants include the\n", - "anharmonic effects at that temperature.\n", + "al., Phys. Rev. B 84, 180301 (2011). These force constants include the effect\n", + "of the anharmonic forces on the frequencies at that temperature. They give no\n", + "phonon lifetimes.\n", "\n", "The flow has these steps:\n", "\n", @@ -58,8 +59,10 @@ "energy late in the run. The result is stored in the output. A warning is raised\n", "if the check fails, but the fit is still done.\n", "\n", - "Without the NPT step, the MD runs at constant volume (NVT), at the volume of\n", - "the starting structure, so thermal expansion is not included. The same workflow runs with VASP as\n", + "Without the NPT step, the MD runs at constant volume (NVT). The volume is that\n", + "of the relaxed structure, or of the input structure when the relaxation is\n", + "switched off, as in this notebook. Thermal expansion is not included. The same\n", + "workflow runs with VASP as\n", "`atomate2.vasp.flows.finite_temperature_phonons.FiniteTemperaturePhononMaker`.\n", "`atomate2.forcefields.flows.finite_temperature_phonons` also has two mixed\n", "versions. One runs the MD with VASP and the force calculations with a force\n", @@ -73,31 +76,29 @@ "source": [ "## Thermostats\n", "\n", - "The fit only uses the positions of the atoms in the MD, not how they move. What\n", - "matters is that the snapshots follow the canonical distribution, so that every\n", - "phonon mode holds its share of the thermal energy.\n", + "The fit only uses the positions of the atoms in the MD, not how they move. The\n", + "snapshots have to follow the canonical distribution, so that every phonon mode\n", + "holds its share of the thermal energy.\n", "\n", "The NVT MD uses a Langevin thermostat. It adds a friction and a random force to\n", "every atom, and it samples the canonical distribution (Bussi and Parrinello,\n", "Phys. Rev. E 75, 056707 (2007)). The friction is 10 ps^-1. A Nose-Hoover\n", "thermostat acts on the whole crystal through one extra variable. It changes the\n", "motion of the atoms less, which matters for vibrational spectra or diffusion.\n", - "But in a nearly harmonic crystal the modes barely exchange energy, and a\n", - "Nose-Hoover thermostat can leave them out of equilibrium. This is proven for a\n", - "harmonic oscillator (Legoll et al., Arch. Ration. Mech. Anal. 184, 449 (2007)).\n", - "The problem is worst at low temperature, where the crystal is closest to\n", - "harmonic.\n", + "But in a nearly harmonic crystal the modes barely exchange energy. For a\n", + "harmonic oscillator weakly coupled to a Nose-Hoover thermostat, the dynamics is\n", + "not ergodic (Legoll et al., Arch. Ration. Mech. Anal. 184, 449 (2007)). A\n", + "crystal is closest to harmonic at low temperature.\n", "\n", "The NPT MD of Section 2 uses ASE's `MTKNPT`. It combines a Nose-Hoover\n", - "thermostat with the barostat of Martyna, Tobias and Klein, which samples the\n", + "thermostat with one thermostat variable and the barostat of Martyna, Tobias and Klein, which samples the\n", "isothermal-isobaric ensemble (J. Chem. Phys. 101, 4177 (1994)). Only its\n", "average cell is used. With VASP, the NPT MD uses VASP's Langevin thermostat\n", "and Parrinello-Rahman barostat, since VASP only runs NPT MD with these.\n", "\n", - "`thermostat=\"nose-hoover\"` switches the NVT MD to a Nose-Hoover thermostat. We\n", - "do not recommend it. The random forces of the Langevin thermostat come from\n", - "numpy's random number generator, so two runs with the same settings give\n", - "different trajectories." + "`thermostat=\"nose-hoover\"` switches the NVT MD to a Nose-Hoover thermostat with\n", + "one thermostat variable. Section 3 compares the two for KNaICl. `random_seed`\n", + "seeds the initial velocities and the random forces of the Langevin thermostat." ] }, { @@ -132,8 +133,7 @@ "- **MACE-OMAT-0-medium.** `mace_mp(model=\"medium-omat-0\")` downloads it once and\n", " caches it under `~/.cache/mace`.\n", "- **MACE-MATPES-PBE-0** and **MACE-MATPES-r2SCAN-0.** These are MACE-OMAT-0\n", - " fine-tuned on the MatPES data set at the PBE and r2SCAN levels. They need\n", - " `mace-torch>=0.3.10`. Download the two files from the `mace_matpes_0` release of\n", + " fine-tuned on the MatPES data set at the PBE and r2SCAN levels. Download the two files from the `mace_matpes_0` release of\n", " [mace-foundations](https://github.com/ACEsuit/mace-foundations/releases/tag/mace_matpes_0):\n", " - [MACE-matpes-pbe-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-pbe-omat-ft.model)\n", " - [MACE-matpes-r2scan-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-r2scan-omat-ft.model)\n", @@ -159,7 +159,8 @@ "# macOS: conda's llvm-openmp and torch's bundled libomp both load and the\n", "# duplicate aborts the process. This must be set before torch is imported.\n", "os.environ.setdefault(\"KMP_DUPLICATE_LIB_OK\", \"TRUE\")\n", - "warnings.filterwarnings(\"ignore\")\n", + "# hide the warnings of torch, e3nn and MACE when the models are loaded\n", + "warnings.filterwarnings(\"ignore\", module=r\"(torch|e3nn|mace)(\\.|$)\")\n", "\n", "import torch # noqa: E402\n", "from mace.calculators import mace_mp # noqa: E402\n", @@ -191,8 +192,9 @@ "Every force field job builds its own calculator. `run_locally` runs all of\n", "them in this one Python process, and the workflow has a little over 50 jobs.\n", "Loading MACE for each of them grows the memory by about 150 MB per job. This\n", - "cell makes the jobs share one calculator. It is only needed when many jobs run\n", - "in one process, not with a workflow manager." + "cell makes the jobs share one calculator, as in the thermal expansion tutorial.\n", + "It is only needed when many jobs run in one process, not with a workflow\n", + "manager." ] }, { @@ -287,7 +289,8 @@ "`ForceFieldFiniteTemperaturePhononMaker.from_force_field_name` sets one force\n", "field for the relaxation, the MD and the force calculations. Any MACE model\n", "routes through `mace_mp`, and the model name in `calculator_kwargs` selects the\n", - "weights.\n", + "weights. The name \"MACE-MP-0\" only picks this calculator. The output keeps it as\n", + "`force_field_name`, and `force_field_kwargs` holds the model that was loaded.\n", "\n", "We skip the relaxation with `relax_initial_structure=False`. The cell is\n", "already relaxed with PBEsol, and our AIMD reference below uses the same cell. If\n", @@ -1270,8 +1273,8 @@ " supercell. They appear in 6 of 9 runs with 25 snapshots, 8 of 9 with 50 and\n", " 5 of 9 with 100. In an earlier round of the same grid with a Nose-Hoover\n", " thermostat, 12 of the 27 runs had them.\n", - "- The random forces of the Langevin thermostat are not seeded, so a second run\n", - " of the grid would not give the same numbers.\n", + "- Each run is one trajectory. Another `random_seed` gives another trajectory and\n", + " somewhat different numbers.\n", "- The MD takes most of the time. With MACE-OMAT-0-medium a run with 50\n", " snapshots took 3.5, 6.1 and 10.8 minutes for 4, 8 and 16 ps. Going from 50 to\n", " 100 snapshots added a few seconds of force calculations and fitting.\n", @@ -1305,14 +1308,16 @@ "The trajectory check uses fixed limits. A Lindemann ratio above 0.15 is reported\n", "as melting. A displacement from the reference of more than 1.5 times the\n", "vibration around the mean positions is reported as a shift. These are rules of\n", - "thumb, and the Lindemann ratio at melting differs between materials. We did not\n", + "thumb. The limit of 0.15 is the Lindemann ratio at melting of an fcc solid. The\n", + "ratio at melting differs between materials. We did not\n", "check whether any of the trajectories reported as melted is a liquid. A warning\n", - "is raised and the fit is still done.\n", + "is raised and the fit is still done. The ratio is averaged over all atoms. It\n", + "can pass 0.15 when only the light atoms move far, for example Li in a\n", + "superionic conductor, while the rest of the crystal stays solid.\n", "\n", "Every result above comes from one MD trajectory. Section 3 shows that runs with\n", "different settings differ by up to 0.1 THz on average and by up to 0.3 THz in\n", - "the highest frequency. The Langevin thermostat is not seeded, so a second run\n", - "gives somewhat different numbers." + "the highest frequency. Another `random_seed` gives somewhat different numbers." ] } ], From 4341cc30612a0796fbd8a4a7771e6fdf82eeb540 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 6 Oct 2026 16:35:16 -0700 Subject: [PATCH 40/43] Add the Li3PS4 sections to the finite-temperature phonon tutorial --- docs/user/codes/vasp.md | 2 +- tutorials/finite_temperature_phonons.ipynb | 1159 +++++++++++++++++++- 2 files changed, 1157 insertions(+), 4 deletions(-) diff --git a/docs/user/codes/vasp.md b/docs/user/codes/vasp.md index a01a78c9da..1d8258cc6f 100644 --- a/docs/user/codes/vasp.md +++ b/docs/user/codes/vasp.md @@ -429,7 +429,7 @@ The displacements are measured from the undisplaced supercell. Pheasy then fits the second-order force constants to them with LASSO. As in the pheasy phonon workflow, a `DielectricMaker` computes the Born charges and the dielectric tensor for the non-analytical correction. It needs the `pheasy` extra, like the pheasy phonon workflow above. -The notebook `tutorials/finite_temperature_phonons.ipynb` runs it for six materials with three MACE potentials. +The notebook `tutorials/finite_temperature_phonons.ipynb` runs it for seven materials with three MACE potentials. ```{warning} This workflow is new and has not been tested widely. diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 8330deedbd..c3b02ade7e 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -16,6 +16,11 @@ "the cell at each temperature, found with an NPT MD. Section 3 tests the length\n", "of the MD and the number of snapshots for KNaICl.\n", "\n", + "Section 4 runs Li3PS4, a lithium conductor whose crystal is unstable at 0 K, from\n", + "100 to 1000 K. Section 5 shows what to do once its Li atoms start to hop. It\n", + "computes the vibrational DOS and the free energy from the MD, and compares the\n", + "free energies of two of its phases.\n", + "\n", "This workflow is new. It is less tested than the other phonon workflows in\n", "atomate2, and its defaults and output may still change." ] @@ -438,10 +443,18 @@ "\n", "\n", "def plot_bands(\n", - " ax: plt.Axes, bs: PhononBandStructureSymmLine, label: str | None = None, **style\n", + " ax: plt.Axes,\n", + " bs: PhononBandStructureSymmLine,\n", + " label: str | None = None,\n", + " distance: list[float] | None = None,\n", + " **style,\n", ") -> None:\n", - " \"\"\"Plot a phonon band structure, one segment of the path at a time.\"\"\"\n", - " distance = np.array(bs.distance)\n", + " \"\"\"Plot a phonon band structure, one segment of the path at a time.\n", + "\n", + " distance replaces the distances along the path of bs, for a band structure\n", + " computed on the same q-points as another one.\n", + " \"\"\"\n", + " distance = np.array(bs.distance if distance is None else distance)\n", " positions, names = [], []\n", " for idx, branch in enumerate(bs.branches):\n", " part = slice(branch[\"start_index\"], branch[\"end_index\"] + 1)\n", @@ -1291,6 +1304,1146 @@ "cell_type": "markdown", "id": "40", "metadata": {}, + "source": [ + "## 4. Li3PS4, a crystal that is unstable at 0 K\n", + "\n", + "Li3PS4 is a solid electrolyte for lithium batteries. In experiment it has three\n", + "phases at ambient pressure. γ (Pmn2₁) is stable up to 523 to 573 K. β (Pnma)\n", + "is stable up to 723 to 748 K. α (Cmcm) is stable above that (Homma et al.,\n", + "Solid State Ionics 182, 53 (2011); Kaup et al., J. Mater. Chem. A 8, 12446\n", + "(2020)). γ is ordered. In β and α the Li atoms sit on partly occupied sites.\n", + "\n", + "mp-985583 is a Pnma structure, so it is β. A DFT code needs every site fully\n", + "occupied, so it is one ordered choice of the Li sites. In the Materials\n", + "Project's Harmonic Phonon Database it has imaginary modes at 0 K. Here we run\n", + "it from 100 to 1000 K, in steps of 100 K, with the three potentials. Each\n", + "potential first relaxes the structure. We run every temperature twice. One run\n", + "uses the relaxed 0 K cell (NVT). The other uses the cell from an NPT MD at that\n", + "temperature (Section 2). The supercell has 128 atoms." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41", + "metadata": {}, + "outputs": [], + "source": [ + "li3ps4 = get_pheasy_structure(\"mp-985583\")\n", + "LI3PS4_SUPERCELL = (2, 2, 1) # 128 atoms\n", + "LI3PS4_TEMPERATURES = tuple(range(100, 1001, 100))\n", + "li3ps4.composition, li3ps4.get_space_group_info()" + ] + }, + { + "cell_type": "markdown", + "id": "42", + "metadata": {}, + "source": [ + "## Phonons at 0 K\n", + "\n", + "For the 0 K reference we use the phonopy workflow of atomate2, not the pheasy\n", + "one. When imaginary modes appear, the pheasy workflow refits the force\n", + "constants to remove them. Here we want to see them. The relaxation keeps the\n", + "symmetry, as in the finite-temperature workflow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "43", + "metadata": {}, + "outputs": [], + "source": [ + "from atomate2.common.schemas.phonons import PhononBSDOSDoc\n", + "from atomate2.forcefields.flows.phonons import PhononMaker\n", + "\n", + "\n", + "def li3ps4_harmonic(model: str) -> PhononBSDOSDoc:\n", + " \"\"\"Run the phonopy workflow at 0 K, in the cell relaxed by the potential.\"\"\"\n", + " maker = PhononMaker.from_force_field_name(\n", + " \"MACE-MP-0\", calculator_kwargs=calc_kwargs(model)\n", + " )\n", + " maker.bulk_relax_maker.fix_symmetry = True\n", + " flow = maker.make(li3ps4, supercell_matrix=np.diag(LI3PS4_SUPERCELL).tolist())\n", + " root_dir = f\"runs/Li3PS4_{model}_0K\"\n", + " os.makedirs(root_dir, exist_ok=True)\n", + " responses = run_locally(\n", + " flow,\n", + " store=JobStore(MemoryStore(), additional_stores={\"data\": MemoryStore()}),\n", + " create_folders=True,\n", + " root_dir=root_dir,\n", + " ensure_success=True,\n", + " )\n", + " return responses[flow.output.uuid][1].output\n", + "\n", + "\n", + "doc_0k = li3ps4_harmonic(\"OMAT-0-medium\")\n", + "float(np.min(doc_0k.phonon_bandstructure.bands))" + ] + }, + { + "cell_type": "markdown", + "id": "44", + "metadata": {}, + "source": [ + "Our run took 2 minutes. The lowest frequency is -2.59 THz. With\n", + "MACE-MATPES-PBE-0 it is -1.97 THz and with MACE-MATPES-r2SCAN-0 -3.48 THz." + ] + }, + { + "cell_type": "markdown", + "id": "45", + "metadata": {}, + "source": [ + "## One temperature\n", + "\n", + "We run 600 K with MACE-OMAT-0-medium and the NPT MD." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46", + "metadata": {}, + "outputs": [], + "source": [ + "doc_li3ps4 = run_ft(\n", + " li3ps4,\n", + " LI3PS4_SUPERCELL,\n", + " \"OMAT-0-medium\",\n", + " \"runs/Li3PS4_OMAT-0-medium_600K_npt\",\n", + " 600,\n", + " relax=True,\n", + " run_npt=True,\n", + ")\n", + "{\n", + " \"volume at 0 K in A^3\": doc_li3ps4.npt_input_structure.volume,\n", + " \"volume at 600 K in A^3\": doc_li3ps4.structure.volume,\n", + " \"lowest frequency in THz\": float(np.min(doc_li3ps4.phonon_bandstructure.bands)),\n", + " \"trajectory check\": doc_li3ps4.trajectory_health.verdict,\n", + " \"Lindemann ratio\": doc_li3ps4.trajectory_health.lindemann_ratio,\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "47", + "metadata": {}, + "source": [ + "Our run took 31 minutes. The volume grows from 664.8 to 698.5 ų. The lowest\n", + "frequency is -0.57 THz. The trajectory check reports \"melted\", with a Lindemann\n", + "ratio of 0.24. Section 5 shows that the crystal has not melted. The Li atoms\n", + "hop between sites while P and S stay in place." + ] + }, + { + "cell_type": "markdown", + "id": "48", + "metadata": {}, + "source": [ + "## The other temperatures and potentials\n", + "\n", + "The loop below runs all 60 settings and the three 0 K runs. It is off by\n", + "default. Each of our runs took 15 to 62 minutes on one A100 GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_LI3PS4 = False\n", + "li3ps4_docs = {}\n", + "if RUN_LI3PS4:\n", + " for model in MODEL_FILES:\n", + " li3ps4_docs[model, 0, \"harmonic\"] = li3ps4_harmonic(model)\n", + " for temperature in LI3PS4_TEMPERATURES:\n", + " for label, run_npt in ((\"nvt\", False), (\"npt\", True)):\n", + " li3ps4_docs[model, temperature, label] = run_ft(\n", + " li3ps4,\n", + " LI3PS4_SUPERCELL,\n", + " model,\n", + " f\"runs/Li3PS4_{model}_{temperature}K_{label}\",\n", + " temperature,\n", + " relax=True,\n", + " run_npt=run_npt,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "50", + "metadata": {}, + "source": [ + "The next cell plots the bands of one potential from 0 to 1000 K. Every run\n", + "keeps the Pnma symmetry, so all runs of a potential have the band path of its\n", + "0 K run. Their q-points are the same in reduced coordinates. The cells differ a\n", + "little, so we plot every run along the distances of the 0 K path." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_li3ps4_bands(model: str, label: str) -> None:\n", + " \"\"\"Plot the bands of one potential from 0 to 1000 K on its 0 K band path.\"\"\"\n", + " reference = li3ps4_docs[model, 0, \"harmonic\"].phonon_bandstructure\n", + " _, ax = plt.subplots(figsize=(8, 4))\n", + " for temperature in LI3PS4_TEMPERATURES:\n", + " plot_bands(\n", + " ax,\n", + " li3ps4_docs[model, temperature, label].phonon_bandstructure,\n", + " label=f\"{temperature} K\",\n", + " distance=reference.distance,\n", + " color=plt.cm.viridis(temperature / 1000),\n", + " lw=0.4,\n", + " )\n", + " plot_bands(ax, reference, label=\"0 K\", color=\"black\", lw=0.6)\n", + " ax.set_ylabel(\"Frequency (THz)\")\n", + " ax.set_title(f\"{model}, {label.upper()}\")\n", + " ax.legend(fontsize=7, ncol=2)\n", + " plt.show()\n", + "\n", + "\n", + "if RUN_LI3PS4:\n", + " for model in MODEL_FILES:\n", + " for label in (\"nvt\", \"npt\"):\n", + " plot_li3ps4_bands(model, label)" + ] + }, + { + "cell_type": "markdown", + "id": "52", + "metadata": {}, + "source": [ + "## Our results\n", + "\n", + "The next cell holds the results of our runs. For each run it gives the lowest\n", + "frequency on the band path, the Lindemann ratio of the trajectory check and\n", + "the volume of the NPT cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53", + "metadata": {}, + "outputs": [], + "source": [ + "# lowest frequency on the band path in THz and Lindemann ratio of the NVT MD,\n", + "# at 100 to 1000 K, in the relaxed 0 K cell (nvt) and in the NPT cell (npt)\n", + "LOWEST_FREQUENCY = {\n", + " \"nvt\": {\n", + " \"OMAT-0-medium\": (-0.8, -0.4, -0.9, -0.8, -0.4, -1.6, -1.1, -1.1, -1.5, -1.5),\n", + " \"MATPES-PBE-0\": (-0.2, -0.9, -1.0, -2.2, -1.4, -1.3, -1.7, -1.6, -1.5, -1.6),\n", + " \"MATPES-r2SCAN-0\": (-0.7, -0.3, -0.6, -0.3, -0.7, -1.1, -1.6, -1.5, -1.5, -1.4),\n", + " },\n", + " \"npt\": {\n", + " \"OMAT-0-medium\": (-0.7, -0.4, -0.7, -0.7, -0.5, -0.6, -1.4, -1.5, -1.3, -1.4),\n", + " \"MATPES-PBE-0\": (-0.4, -0.5, -1.4, -0.5, -1.3, -1.4, -1.3, -1.7, -1.6, -1.6),\n", + " \"MATPES-r2SCAN-0\": (-0.5, -0.6, -1.4, 0.0, -0.7, -1.0, -1.1, -1.3, -1.8, -1.6),\n", + " },\n", + "}\n", + "LINDEMANN = {\n", + " \"nvt\": {\n", + " \"OMAT-0-medium\": (0.06, 0.1, 0.12, 0.17, 0.18, 0.26, 0.28, 0.33, 0.51, 0.54),\n", + " \"MATPES-PBE-0\": (0.08, 0.13, 0.16, 0.2, 0.24, 0.36, 0.42, 0.41, 0.55, 0.84),\n", + " \"MATPES-r2SCAN-0\": (0.06, 0.1, 0.13, 0.17, 0.21, 0.26, 0.28, 0.36, 0.58, 0.45),\n", + " },\n", + " \"npt\": {\n", + " \"OMAT-0-medium\": (0.08, 0.11, 0.15, 0.17, 0.19, 0.24, 0.39, 0.36, 0.58, 0.77),\n", + " \"MATPES-PBE-0\": (0.08, 0.13, 0.18, 0.19, 0.23, 0.32, 0.33, 0.41, 0.61, 0.74),\n", + " \"MATPES-r2SCAN-0\": (0.07, 0.1, 0.13, 0.18, 0.21, 0.24, 0.27, 0.4, 0.52, 0.61),\n", + " },\n", + "}\n", + "# volume of the unit cell in A^3, relaxed at 0 K and from the NPT MD\n", + "VOLUME_0K = {\"OMAT-0-medium\": 664.7, \"MATPES-PBE-0\": 651.6, \"MATPES-r2SCAN-0\": 649.6}\n", + "NPT_VOLUME = {\n", + " \"OMAT-0-medium\": (670, 675, 680, 687, 693, 698, 702, 713, 776, 767),\n", + " \"MATPES-PBE-0\": (656, 658, 661, 660, 663, 662, 667, 672, 678, 692),\n", + " \"MATPES-r2SCAN-0\": (656, 661, 666, 669, 673, 673, 675, 683, 691, 699),\n", + "}\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(14, 3.6))\n", + "for idx, model in enumerate(MODEL_FILES):\n", + " for label, style in ((\"nvt\", \"-o\"), (\"npt\", \"--s\")):\n", + " kwargs = {\"color\": f\"C{idx}\", \"ms\": 3, \"label\": f\"{model}, {label}\"}\n", + " axes[0].plot(\n", + " LI3PS4_TEMPERATURES, LOWEST_FREQUENCY[label][model], style, **kwargs\n", + " )\n", + " axes[1].plot(LI3PS4_TEMPERATURES, LINDEMANN[label][model], style, **kwargs)\n", + " ratio = np.array(NPT_VOLUME[model]) / VOLUME_0K[model]\n", + " axes[2].plot(LI3PS4_TEMPERATURES, ratio, \"--s\", color=f\"C{idx}\", ms=3)\n", + "axes[1].axhline(0.15, color=\"gray\", ls=\":\")\n", + "axes[0].set_ylabel(\"Lowest frequency (THz)\")\n", + "axes[1].set_ylabel(\"Lindemann ratio\")\n", + "axes[2].set_ylabel(\"V(NPT) / V(0 K)\")\n", + "for ax in axes:\n", + " ax.set_xlabel(\"Temperature (K)\")\n", + "axes[0].legend(fontsize=7)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "54", + "metadata": {}, + "source": [ + "- The imaginary modes of 0 K shrink at finite temperature, but they do not go\n", + " away. The lowest frequency lies between -0.2 and -2.2 THz in every run but\n", + " one. MACE-MATPES-r2SCAN-0 in the NPT cell at 400 K has no imaginary modes.\n", + "- At 100 K the trajectory check reports a shift in every run. The atoms move\n", + " away from the MP structure. At 200 K every run is stable.\n", + "- From 300 to 400 K the Lindemann ratio passes 0.15 and the check reports\n", + " melting. It then keeps rising, to 0.45 to 0.84 at 900 to 1000 K.\n", + "- From 0 to 800 K the NPT cell grows by 3 to 7% in volume. With\n", + " MACE-OMAT-0-medium it then jumps by 9% between 800 and 900 K.\n", + "- MACE-MATPES-PBE-0 gives the softest bands. Its highest frequency at 0 K is\n", + " 15.4 THz, against 17.8 and 17.9 THz for the other two.\n", + "\n", + "Li3PS4 does not melt at 400 K in experiment. Section 5 looks at what the atoms\n", + "do instead." + ] + }, + { + "cell_type": "markdown", + "id": "55", + "metadata": {}, + "source": [ + "## 5. When light atoms hop: Li3PS4 above 300 K\n", + "\n", + "In Section 4 the fitted phonons of Li3PS4 keep imaginary modes at every\n", + "temperature. At 0 K they come from the structure. This ordering of the Li\n", + "sites is not at a minimum of the energy. At high temperature a second cause\n", + "adds to this. The Li atoms start to hop from site to site, while the PS4\n", + "framework stays solid. A fit of force constants assumes that every atom\n", + "vibrates around one site. A Li atom that hops has no such site, so the fit\n", + "reads its motion as a very soft spring. The Lindemann ratio is an average over\n", + "all atoms, so the far moves of Li alone push it above 0.15.\n", + "\n", + "This section uses the MD itself, which needs no fixed sites. The mean-square\n", + "displacement of each element tells which atoms diffuse. The vibrational DOS\n", + "comes from the velocities in the MD. The free energy comes from thermodynamic\n", + "integration over the MD.\n", + "\n", + "The trajectories are the ones the workflow already saved, in\n", + "`md_trajectory.traj` in each run folder. They have one frame per time step and\n", + "include the momenta and the potential energies. The examples below use the\n", + "600 K run above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "56", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from ase import Atoms\n", + "from ase.io import Trajectory\n", + "\n", + "SKIP = 1000 # frames left out at the start, as in the fit\n", + "TIME_STEP = 1e-3 # ps per frame\n", + "\n", + "\n", + "def nvt_trajectory(folder: str) -> list[Atoms]:\n", + " \"\"\"Get the frames of the NVT MD in a run folder, after the first SKIP.\"\"\"\n", + " for path in Path(folder).rglob(\"md_trajectory.traj\"):\n", + " traj = Trajectory(str(path))\n", + " if np.allclose(traj[0].cell.array, traj[-1].cell.array):\n", + " return [traj[i] for i in range(SKIP, len(traj))]\n", + " raise FileNotFoundError(f\"no NVT trajectory in {folder}\")\n", + "\n", + "\n", + "def unwrapped_positions(frames: list[Atoms]) -> np.ndarray:\n", + " \"\"\"Get the Cartesian positions of every frame, without jumps across the cell.\"\"\"\n", + " cell = frames[0].cell.array\n", + " frac = np.array([atoms.get_scaled_positions(wrap=False) for atoms in frames])\n", + " steps = np.diff(frac, axis=0)\n", + " steps -= np.round(steps)\n", + " frac = np.concatenate([frac[:1], frac[:1] + np.cumsum(steps, axis=0)])\n", + " return frac @ cell\n", + "\n", + "\n", + "frames_600k = nvt_trajectory(\"runs/Li3PS4_OMAT-0-medium_600K_npt\")" + ] + }, + { + "cell_type": "markdown", + "id": "57", + "metadata": {}, + "source": [ + "## Which atoms move\n", + "\n", + "The mean-square displacement (MSD) of an atom grows linearly in time if it\n", + "diffuses. It levels off if the atom only vibrates. Its slope gives the\n", + "diffusion coefficient, $D = \\mathrm{slope}/6$. We fit the slope from 1 to 3 ps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "58", + "metadata": {}, + "outputs": [], + "source": [ + "def diffusion(\n", + " frames: list[Atoms], max_lag: int = 3000, fit: tuple[int, int] = (1000, 3000)\n", + ") -> dict[str, tuple[np.ndarray, np.ndarray, float]]:\n", + " \"\"\"Get the MSD (A^2) against time (ps) and D (cm^2/s) of each element.\n", + "\n", + " The motion of the center of mass is removed. fit gives the range of lags in\n", + " frames where the slope of the MSD is fitted.\n", + " \"\"\"\n", + " masses = frames[0].get_masses()\n", + " symbols = np.array(frames[0].get_chemical_symbols())\n", + " pos = unwrapped_positions(frames)\n", + " pos -= ((pos * masses[None, :, None]).sum(1) / masses.sum())[:, None]\n", + " lags = np.arange(0, max_lag + 1, 10)\n", + " origins = np.arange(0, len(pos) - max_lag, 100)\n", + " msd = np.array(\n", + " [((pos[origins + lag] - pos[origins]) ** 2).sum(2).mean(0) for lag in lags]\n", + " )\n", + " keep = (lags >= fit[0]) & (lags <= fit[1])\n", + " out = {}\n", + " for element in (\"Li\", \"P\", \"S\"):\n", + " curve = msd[:, symbols == element].mean(1)\n", + " slope = np.polyfit(lags[keep] * TIME_STEP, curve[keep], 1)[0]\n", + " out[element] = (lags * TIME_STEP, curve, slope / 6 * 1e-4)\n", + " return out\n", + "\n", + "\n", + "{element: f\"{d:.1e}\" for element, (_, _, d) in diffusion(frames_600k).items()}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59", + "metadata": {}, + "outputs": [], + "source": [ + "# diffusion coefficient in cm^2/s of each element in the NVT MD in the relaxed\n", + "# 0 K cell, at 300 to 1000 K\n", + "D_TEMPERATURES = (300, 400, 500, 600, 700, 800, 900, 1000)\n", + "DIFFUSION = {\n", + " \"OMAT-0-medium\": {\n", + " \"Li\": (-4.4e-07, 2e-06, -4.9e-08, 7.6e-06, 8e-06, 5e-06, 3.1e-05, 4.7e-05),\n", + " \"P\": (-1.3e-08, -3.3e-08, 1.2e-08, 1.4e-07, 1.3e-07, 6.9e-08, 9.6e-07, 2.6e-07),\n", + " \"S\": (-3.3e-08, -1.9e-08, 2.1e-08, 2.4e-07, 2.1e-07, 4.7e-07, 1.9e-06, 1.3e-06),\n", + " },\n", + " \"MATPES-PBE-0\": {\n", + " \"Li\": (1.9e-06, 3e-06, 6.3e-06, 1.5e-05, 2.6e-05, 2.9e-05, 4.6e-05, 6.4e-05),\n", + " \"P\": (4.6e-08, 2e-08, -1.9e-08, 1.4e-07, -2.6e-07, 2.9e-07, 1.2e-07, 3.5e-07),\n", + " \"S\": (1.2e-07, 1.8e-08, 3.9e-08, 2.7e-07, -3.7e-07, 5.4e-07, -2.7e-07, 8.1e-07),\n", + " },\n", + " \"MATPES-r2SCAN-0\": {\n", + " \"Li\": (1.6e-06, 7.9e-07, 2.6e-06, 4.8e-06, 6.8e-06, 2.6e-05, 3.8e-05, 3.4e-05),\n", + " \"P\": (\n", + " 3.2e-09,\n", + " -4.1e-09,\n", + " -6.6e-08,\n", + " 8.4e-08,\n", + " 1.5e-07,\n", + " 1.4e-07,\n", + " 4.2e-07,\n", + " -2.2e-07,\n", + " ),\n", + " \"S\": (1e-07, 9.1e-09, 7e-08, 1.8e-07, 7e-08, 3e-07, 9.3e-07, -3.7e-09),\n", + " },\n", + "}\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(14, 3.6), sharey=True)\n", + "inverse_t = 1000 / np.array(D_TEMPERATURES)\n", + "for ax, model in zip(axes, MODEL_FILES, strict=True):\n", + " ax.axvspan(1000 / 748, 1000 / 523, color=\"0.9\")\n", + " for element, color in ((\"Li\", \"C0\"), (\"P\", \"C2\"), (\"S\", \"C3\")):\n", + " d = np.array(DIFFUSION[model][element])\n", + " keep = d > 1e-8\n", + " ax.semilogy(inverse_t[keep], d[keep], \"-o\", color=color, ms=3, label=element)\n", + " ax.axhline(3e-7, color=\"gray\", ls=\":\")\n", + " ax.set_title(model)\n", + " ax.set_xlabel(\"1000 / T (1/K)\")\n", + "axes[0].set_ylabel(\"D (cm$^2$/s)\")\n", + "axes[0].legend()\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "60", + "metadata": {}, + "source": [ + "A D below about 3×10⁻⁷ cm²/s is noise in these 7 ps runs. P and S stay near\n", + "that level up to 700 K.\n", + "\n", + "- Li diffuses clearly from about 600 K with MACE-OMAT-0-medium and\n", + " MACE-MATPES-r2SCAN-0, and from about 500 K with MACE-MATPES-PBE-0. D_Li is\n", + " 5×10⁻⁶ to 3×10⁻⁵ cm²/s at 600 to 800 K.\n", + "- Below that, a D_Li of 10⁻⁶ cm²/s means a few single hops in the run. One hop\n", + " of 2.5 Å by one of the 48 Li atoms already gives 0.13 Ų. A converged D below\n", + " 600 K needs MD of nanoseconds.\n", + "- At 900 K the D of P and S passes 10⁻⁶ cm²/s with MACE-OMAT-0-medium. With\n", + " the other two it stays below that in the 0 K cell, and passes it in the NPT\n", + " cell at 1000 K. The framework starts to flow.\n", + "\n", + "So from about 600 K to about 800 K, Li3PS4 is a solid framework with mobile\n", + "Li. This is the range where the fitted phonons fail.\n", + "\n", + "The MD uses the Langevin thermostat, and D depends on its friction. For a D to\n", + "compare with experiment, run an MD without a thermostat (NVE) from the end of\n", + "the NVT MD." + ] + }, + { + "cell_type": "markdown", + "id": "61", + "metadata": {}, + "source": [ + "## The vibrational DOS from the velocities\n", + "\n", + "The vibrational DOS is the Fourier transform of the velocity autocorrelation\n", + "function, weighted by mass. By the Wiener-Khinchin theorem this is the squared\n", + "Fourier transform of each velocity:\n", + "\n", + "$$g(\\nu) \\propto \\sum_i m_i \\left| \\int v_i(t)\\, e^{2\\pi i \\nu t}\\, dt \\right|^2$$\n", + "\n", + "It holds all the anharmonicity at that temperature and has no imaginary\n", + "frequencies. An atom that diffuses adds to the DOS at $\\nu = 0$, in proportion\n", + "to its D. The friction of the Langevin thermostat, $\\gamma$ = 10 ps⁻¹, gives\n", + "every peak a width of $\\gamma/2\\pi$ = 1.6 THz (full width at half maximum)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "62", + "metadata": {}, + "outputs": [], + "source": [ + "def md_dos(\n", + " frames: list[Atoms], smearing: float = 0.15, max_frequency: float = 25.0\n", + ") -> tuple[np.ndarray, dict[str, np.ndarray]]:\n", + " \"\"\"Get the DOS of each element from the velocities, in states/THz per Li3PS4.\n", + "\n", + " The DOS is smeared with a Gaussian of width smearing in THz, mirrored at 0.\n", + " It integrates to 3 states per atom.\n", + " \"\"\"\n", + " velocities = np.array([atoms.get_velocities() for atoms in frames])\n", + " masses = frames[0].get_masses()\n", + " symbols = np.array(frames[0].get_chemical_symbols())\n", + " nu = np.fft.rfftfreq(len(velocities), TIME_STEP)\n", + " keep = nu <= max_frequency\n", + " power = (np.abs(np.fft.rfft(velocities, axis=0)) ** 2).sum(2)[keep] * masses\n", + " step = nu[1]\n", + " half = int(4 * smearing / step)\n", + " kernel = np.exp(-0.5 * (np.arange(-half, half + 1) * step / smearing) ** 2)\n", + " n_formula_units = len(symbols) / 8\n", + " out = {}\n", + " for element in (\"Li\", \"P\", \"S\"):\n", + " g = power[:, symbols == element].sum(1)\n", + " g = np.convolve(np.concatenate([g[half:0:-1], g]), kernel, \"same\")[half:]\n", + " n_states = 3 * (symbols == element).sum() / n_formula_units\n", + " out[element] = g * n_states / (g.sum() * step)\n", + " return nu[keep], out\n", + "\n", + "\n", + "nu_600k, dos_600k = md_dos(frames_600k)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63", + "metadata": {}, + "outputs": [], + "source": [ + "# vibrational DOS of the NVT MD in the relaxed 0 K cell, against the DOS of\n", + "# the force constants fitted to the same MD, at 300, 500 and 700 K: the fraction\n", + "# of the Li DOS below 5 THz, and the frequency in THz of the P-S stretch, the\n", + "# highest peak of the P DOS\n", + "VDOS_TEMPERATURES = (300, 500, 700)\n", + "LI_BELOW_5_THZ = {\n", + " \"OMAT-0-medium\": {\"MD\": (0.15, 0.18, 0.23), \"fit\": (0.18, 0.27, 0.9)},\n", + " \"MATPES-PBE-0\": {\"MD\": (0.21, 0.23, 0.25), \"fit\": (0.53, 0.98, 1.0)},\n", + " \"MATPES-r2SCAN-0\": {\"MD\": (0.14, 0.17, 0.21), \"fit\": (0.19, 0.41, 0.99)},\n", + "}\n", + "PS_STRETCH = {\n", + " \"OMAT-0-medium\": {\"MD\": (16.4, 16.0, 16.4), \"fit\": (15.9, 15.2, 12.9)},\n", + " \"MATPES-PBE-0\": {\"MD\": (14.6, 15.0, 15.0), \"fit\": (13.8, 12.4, 12.0)},\n", + " \"MATPES-r2SCAN-0\": {\"MD\": (16.3, 16.3, 16.3), \"fit\": (16.1, 15.2, 13.2)},\n", + "}\n", + "\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 3.6))\n", + "for idx, model in enumerate(MODEL_FILES):\n", + " for source, style in ((\"MD\", \"-o\"), (\"fit\", \"--s\")):\n", + " kwargs = {\"color\": f\"C{idx}\", \"ms\": 3, \"label\": f\"{model}, {source}\"}\n", + " axes[0].plot(VDOS_TEMPERATURES, LI_BELOW_5_THZ[model][source], style, **kwargs)\n", + " axes[1].plot(VDOS_TEMPERATURES, PS_STRETCH[model][source], style, **kwargs)\n", + "axes[0].set_ylabel(\"Fraction of the Li DOS below 5 THz\")\n", + "axes[1].set_ylabel(\"P-S stretch (THz)\")\n", + "for ax in axes:\n", + " ax.set_xlabel(\"Temperature (K)\")\n", + "axes[0].legend(fontsize=7)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "64", + "metadata": {}, + "source": [ + "The fitted DOS is smeared with the same 0.15 THz as the MD DOS.\n", + "\n", + "- At 300 K, with MACE-OMAT-0-medium and MACE-MATPES-r2SCAN-0, 14 to 19% of the\n", + " Li DOS lies below 5 THz, in the MD and in the fit. With MACE-MATPES-PBE-0 the\n", + " fit already puts 53% of it there, against 21% in the MD.\n", + "- At 700 K the fit puts 90 to 100% of the Li DOS below 5 THz, and 6 to 18% of\n", + " it at imaginary frequencies. In the MD it is 21 to 25%. The Li DOS of the MD\n", + " stays a broad band, with a small value at zero from the diffusion.\n", + "- In the MD the P-S stretch stays at 16.0 to 16.4 THz with MACE-OMAT-0-medium\n", + " and MACE-MATPES-r2SCAN-0, and at 14.6 to 15.0 THz with MACE-MATPES-PBE-0. In\n", + " the fit it drops to 12.0 to 13.2 THz at 700 K. The framework does not soften.\n", + " The fit around fixed sites makes it look soft." + ] + }, + { + "cell_type": "markdown", + "id": "65", + "metadata": {}, + "source": [ + "## The free energy from the MD\n", + "\n", + "The fitted phonons give a free energy only through their frequencies, so they\n", + "carry the same errors. The MD gives it without a fit, in two steps.\n", + "\n", + "**1. F at one temperature, $T_0$ = 100 K, by Frenkel-Ladd.** An Einstein\n", + "crystal, with every atom tied by a spring to a site, has a free energy known in\n", + "closed form. We switch the potential from the Einstein crystal to the MACE\n", + "potential, $U(\\lambda) = \\lambda U_\\mathrm{MLIP} + (1 - \\lambda) U_E$, and run\n", + "an MD at 8 values of $\\lambda$. Then\n", + "\n", + "$$F_\\mathrm{MLIP} = F_E + \\int_0^1 \\langle U_\\mathrm{MLIP} - U_E \\rangle_\\lambda\\, d\\lambda$$\n", + "\n", + "The springs sit at the mean positions of the 100 K MD. Their constants are\n", + "$3k_BT$ over the mean-square displacement of each element. The center of mass\n", + "is fixed in the MD, and $F_E$ has a term for that. We choose 100 K because no\n", + "Li hops there in any run.\n", + "\n", + "**2. F at every other temperature, by Gibbs-Helmholtz.**\n", + "\n", + "$$\\frac{d(F/T)}{dT} = -\\frac{U}{T^2}$$\n", + "\n", + "U is the mean energy of the MD at each temperature, the potential energy plus\n", + "$3k_BT/2$ per atom. For the NPT runs it is the mean enthalpy at zero pressure,\n", + "and the result is the Gibbs free energy. Then $S = (U - F)/T$. We stop at\n", + "800 K. Above it the P and S atoms start to diffuse.\n", + "\n", + "The MD treats the nuclei as classical. We add the difference between the\n", + "quantum and the classical free energy of the MD DOS at each temperature. It\n", + "matters most at low temperature." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "66", + "metadata": {}, + "outputs": [], + "source": [ + "from ase import units\n", + "from ase.calculators.calculator import Calculator, all_changes\n", + "from ase.constraints import FixCom\n", + "from ase.md.langevin import Langevin\n", + "from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary\n", + "from scipy import constants\n", + "\n", + "\n", + "class Switched(Calculator):\n", + " \"\"\"Energy and forces of lam U_MLIP + (1 - lam) U_E.\n", + "\n", + " delta holds U_MLIP - U_E of the last call.\n", + " \"\"\"\n", + "\n", + " implemented_properties = (\"energy\", \"forces\")\n", + "\n", + " def __init__(\n", + " self,\n", + " mlip: Calculator,\n", + " positions: np.ndarray,\n", + " springs: np.ndarray,\n", + " lam: float,\n", + " ) -> None:\n", + " super().__init__()\n", + " self.mlip, self.r0, self.k, self.lam = mlip, positions, springs, lam\n", + "\n", + " def calculate(\n", + " self,\n", + " atoms: Atoms | None = None,\n", + " properties: tuple[str, ...] = (\"energy\",),\n", + " system_changes: list[str] = all_changes,\n", + " ) -> None:\n", + " \"\"\"Compute the switched energy and forces.\"\"\"\n", + " super().calculate(atoms, properties, system_changes)\n", + " self.mlip.calculate(self.atoms, [\"energy\", \"forces\"], system_changes)\n", + " d = self.atoms.positions - self.r0\n", + " e_einstein = 0.5 * (self.k * (d**2).sum(1)).sum()\n", + " self.delta = self.mlip.results[\"energy\"] - e_einstein\n", + " self.results = {\n", + " \"energy\": self.lam * self.mlip.results[\"energy\"]\n", + " + (1 - self.lam) * e_einstein,\n", + " \"forces\": self.lam * self.mlip.results[\"forces\"]\n", + " - (1 - self.lam) * self.k[:, None] * d,\n", + " }\n", + "\n", + "\n", + "def einstein_free_energy(\n", + " masses: np.ndarray, springs: np.ndarray, volume: float, temperature: float\n", + ") -> float:\n", + " \"\"\"Get the classical F (eV) of the Einstein crystal with a fixed center of mass.\n", + "\n", + " It includes the term for a center of mass that is free in the volume of the\n", + " cell.\n", + " \"\"\"\n", + " kt = units.kB * temperature\n", + " hbar = constants.hbar / constants.e * units.second # eV in ASE time units\n", + " free = 3 * kt * np.log(hbar * np.sqrt(springs / masses) / kt).sum()\n", + " variance = ((masses / masses.sum()) ** 2 * kt / springs).sum()\n", + " return free + kt * np.log((2 * np.pi * variance) ** 1.5 / volume)\n", + "\n", + "\n", + "def frenkel_ladd(\n", + " frames: list[Atoms],\n", + " mlip: Calculator,\n", + " temperature: float = 100.0,\n", + " n_lambda: int = 8,\n", + " steps: tuple[int, int] = (2000, 8000),\n", + " seed: int = 103,\n", + ") -> float:\n", + " \"\"\"Get F (eV per atom) of the potential at the temperature of the frames.\n", + "\n", + " steps gives the equilibration and production steps of the MD at each\n", + " lambda.\n", + " \"\"\"\n", + " rng = np.random.default_rng(seed)\n", + " atoms = frames[0].copy()\n", + " masses = atoms.get_masses()\n", + " pos = unwrapped_positions(frames)\n", + " com = (pos * masses[None, :, None]).sum(1) / masses.sum()\n", + " pos = pos - com[:, None] + com[0]\n", + " atoms.positions = pos.mean(0)\n", + " msd = ((pos - atoms.positions) ** 2).sum(2).mean(0)\n", + " symbols = np.array(atoms.get_chemical_symbols())\n", + " springs = np.empty(len(atoms))\n", + " for element in set(symbols):\n", + " springs[symbols == element] = (\n", + " 3 * units.kB * temperature / msd[symbols == element].mean()\n", + " )\n", + " nodes, weights = np.polynomial.legendre.leggauss(n_lambda)\n", + " integral = 0.0\n", + " for node, weight in zip(nodes, weights, strict=True):\n", + " run = atoms.copy()\n", + " run.set_constraint(FixCom())\n", + " run.calc = Switched(mlip, atoms.positions.copy(), springs, (node + 1) / 2)\n", + " MaxwellBoltzmannDistribution(run, temperature_K=temperature, rng=rng)\n", + " Stationary(run)\n", + " dyn = Langevin(\n", + " run,\n", + " units.fs,\n", + " temperature_K=temperature,\n", + " friction=0.01 / units.fs,\n", + " fixcm=False,\n", + " rng=rng,\n", + " )\n", + " dyn.run(steps[0])\n", + " deltas = []\n", + " for _ in range(steps[1] // 10):\n", + " dyn.run(10)\n", + " deltas.append(run.calc.delta)\n", + " integral += weight / 2 * np.mean(deltas)\n", + " f_e = einstein_free_energy(masses, springs, atoms.get_volume(), temperature)\n", + " return (f_e + integral) / len(atoms)" + ] + }, + { + "cell_type": "markdown", + "id": "67", + "metadata": {}, + "source": [ + "We tested these functions on a periodic Cu-Ag crystal with an EMT potential at\n", + "10 K, where the harmonic free energy is exact. Frenkel-Ladd gave 0.247542 ±\n", + "0.000087 eV and the exact value is 0.247599 eV.\n", + "\n", + "The next cell runs Frenkel-Ladd on the 100 K NVT run of the loop in Section 4.\n", + "It is off by default." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_FL = False\n", + "if RUN_FL:\n", + " mlip = mace_mp(**calc_kwargs(\"OMAT-0-medium\"))\n", + " frames = nvt_trajectory(\"runs/Li3PS4_OMAT-0-medium_100K_nvt\")\n", + " f_100 = frenkel_ladd(frames, mlip) # eV per atom" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69", + "metadata": {}, + "outputs": [], + "source": [ + "PLANCK = constants.h / constants.e * 1e12 # eV/THz\n", + "\n", + "\n", + "def gibbs_helmholtz(\n", + " t0: float, f0: float, temperatures: list[float], energies: list[float]\n", + ") -> np.ndarray:\n", + " \"\"\"Get F at each temperature from F at t0 and the mean energy U.\n", + "\n", + " F and U are in eV per atom. temperatures starts at t0, and U is linear in T\n", + " between the temperatures.\n", + " \"\"\"\n", + " f_over_t = [f0 / t0]\n", + " for i in range(1, len(temperatures)):\n", + " t1, t2 = temperatures[i - 1], temperatures[i]\n", + " b = (energies[i] - energies[i - 1]) / (t2 - t1)\n", + " a = energies[i - 1] - b * t1\n", + " f_over_t.append(f_over_t[-1] - (a * (1 / t1 - 1 / t2) + b * np.log(t2 / t1)))\n", + " return np.array(f_over_t) * np.array(temperatures)\n", + "\n", + "\n", + "def quantum_correction(\n", + " nu: np.ndarray, dos: np.ndarray, temperature: float\n", + ") -> tuple[float, float]:\n", + " \"\"\"Get the quantum minus the classical harmonic F (eV) and S (eV/K) of a DOS.\n", + "\n", + " nu is in THz. The result is per formula unit for a DOS per formula unit, as\n", + " md_dos gives it. Divide by 8 for a value per atom.\n", + " \"\"\"\n", + " keep = nu > 0\n", + " nu, g, step = nu[keep], dos[keep], nu[1] - nu[0]\n", + " kt = units.kB * temperature\n", + " x = PLANCK * nu / kt\n", + " df = PLANCK * nu / 2 + kt * (np.log1p(-np.exp(-x)) - np.log(x))\n", + " ds = units.kB * (x / np.expm1(x) - np.log1p(-np.exp(-x)) - 1 + np.log(x))\n", + " return (df * g).sum() * step, (ds * g).sum() * step" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "70", + "metadata": {}, + "outputs": [], + "source": [ + "# per formula unit, at 100 to 800 K: F in kJ/mol relative to the relaxed 0 K\n", + "# energy and S in J/(K mol). From the MD in the relaxed 0 K cell (nvt) and in the\n", + "# NPT cell (npt), from the force constants fitted in the 0 K cell with U0 added,\n", + "# and from the 0 K force constants.\n", + "THERMO_T = (100, 200, 300, 400, 500, 600, 700, 800)\n", + "MD_F = {\n", + " \"nvt\": {\n", + " \"OMAT-0-medium\": (31.5, 21.2, 2.7, -22.9, -52.3, -87.4, -125.5, -167.4),\n", + " \"MATPES-PBE-0\": (27.2, 13.7, -7.6, -34.6, -67.0, -103.4, -143.5, -186.4),\n", + " \"MATPES-r2SCAN-0\": (31.2, 19.2, 0.3, -25.0, -55.6, -90.5, -129.0, -170.8),\n", + " },\n", + " \"npt\": {\n", + " \"OMAT-0-medium\": (31.1, 19.6, -0.4, -26.5, -58.7, -94.0, -134.6, -178.8),\n", + " \"MATPES-PBE-0\": (27.6, 13.6, -9.0, -36.5, -69.8, -106.9, -148.2, -192.3),\n", + " \"MATPES-r2SCAN-0\": (30.9, 18.5, -1.4, -27.5, -58.6, -94.8, -134.6, -178.4),\n", + " },\n", + "}\n", + "MD_S = {\n", + " \"nvt\": {\n", + " \"OMAT-0-medium\": (63, 150, 218, 273, 317, 363, 401, 435),\n", + " \"MATPES-PBE-0\": (79, 169, 242, 296, 343, 384, 415, 441),\n", + " \"MATPES-r2SCAN-0\": (68, 154, 221, 278, 326, 361, 400, 433),\n", + " },\n", + " \"npt\": {\n", + " \"OMAT-0-medium\": (68, 158, 230, 286, 334, 380, 419, 461),\n", + " \"MATPES-PBE-0\": (87, 178, 246, 306, 351, 392, 426, 456),\n", + " \"MATPES-r2SCAN-0\": (76, 159, 229, 284, 334, 379, 417, 449),\n", + " },\n", + "}\n", + "FIT_F = {\n", + " \"OMAT-0-medium\": (32.2, 19.7, 0.3, -36.5, -60.3, -118.8, -166.6, -219.7),\n", + " \"MATPES-PBE-0\": (27.1, 12.4, -17.5, -49.0, -95.1, -139.5, -184.4, -240.1),\n", + " \"MATPES-r2SCAN-0\": (31.3, 18.9, -0.7, -29.4, -68.5, -115.1, -168.9, -225.2),\n", + "}\n", + "FIT_S = {\n", + " \"OMAT-0-medium\": (68, 155, 223, 305, 333, 410, 452, 493),\n", + " \"MATPES-PBE-0\": (82, 179, 273, 326, 391, 433, 457, 495),\n", + " \"MATPES-r2SCAN-0\": (65, 155, 224, 288, 350, 401, 449, 489),\n", + "}\n", + "HARMONIC_F = {\n", + " \"OMAT-0-medium\": (35.4, 25.5, 8.8, -13.4, -40.1, -70.3, -103.7, -139.7),\n", + " \"MATPES-PBE-0\": (30.0, 18.0, -1.4, -26.7, -56.5, -90.1, -126.8, -166.2),\n", + " \"MATPES-r2SCAN-0\": (35.6, 26.0, 9.6, -12.3, -38.4, -68.2, -101.0, -136.5),\n", + "}\n", + "HARMONIC_S = {\n", + " \"OMAT-0-medium\": (59, 135, 197, 246, 286, 319, 348, 373),\n", + " \"MATPES-PBE-0\": (75, 160, 226, 277, 318, 352, 381, 407),\n", + " \"MATPES-r2SCAN-0\": (58, 132, 193, 241, 281, 314, 342, 367),\n", + "}\n", + "\n", + "fig, axes = plt.subplots(2, 3, figsize=(14, 7), sharex=True)\n", + "for col, model in enumerate(MODEL_FILES):\n", + " for row, (md, fit, harmonic) in enumerate(\n", + " ((MD_F, FIT_F, HARMONIC_F), (MD_S, FIT_S, HARMONIC_S))\n", + " ):\n", + " ax = axes[row, col]\n", + " ax.plot(THERMO_T, md[\"nvt\"][model], \"-o\", ms=3, label=\"MD, 0 K cell\")\n", + " ax.plot(THERMO_T, md[\"npt\"][model], \"-s\", ms=3, label=\"MD, NPT cell\")\n", + " ax.plot(THERMO_T, fit[model], \"--\", label=\"fit\")\n", + " ax.plot(\n", + " THERMO_T, harmonic[model], \":\", color=\"gray\", label=\"0 K force constants\"\n", + " )\n", + " axes[0, col].set_title(model)\n", + " axes[1, col].set_xlabel(\"Temperature (K)\")\n", + "axes[0, 0].set_ylabel(\"F (kJ/mol)\")\n", + "axes[1, 0].set_ylabel(\"S (J/(K mol))\")\n", + "axes[1, 0].legend(fontsize=8)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "71", + "metadata": {}, + "source": [ + "The fitted F includes U₀, the mean potential energy of its MD minus 3kT/2 per\n", + "atom. All values are per formula unit.\n", + "\n", + "- Up to 300 K the fitted F and the MD F agree to within 1 kJ/mol with\n", + " MACE-MATPES-r2SCAN-0, and to within 2.5 kJ/mol with MACE-OMAT-0-medium. Both\n", + " start from the same MD, but they get F in different ways, so the agreement\n", + " checks both. With MACE-MATPES-PBE-0 they start to differ at 300 K.\n", + "- Where Li diffuses, the fit gives too high an entropy. At 700 K the MD gives\n", + " S = 400 to 415 J/(K mol) in the 0 K cell, and the fit 449 to 457 J/(K mol).\n", + " The fit puts the Li modes at too low a frequency.\n", + "- The 0 K force constants give too low an entropy, 342 to 381 J/(K mol) at\n", + " 700 K. They miss the softening, and they leave out the imaginary modes. So\n", + " does the entropy in the Materials Project's Harmonic Phonon Database.\n", + "- The NPT cell adds 10 to 20 J/(K mol) at 700 K." + ] + }, + { + "cell_type": "markdown", + "id": "72", + "metadata": {}, + "source": [ + "## γ against β\n", + "\n", + "The free energy from the MD includes the anharmonicity, the hopping of Li and\n", + "the thermal expansion. So the phase with the lowest Gibbs free energy should be\n", + "the stable one. The temperature where two curves cross should be a transition.\n", + "\n", + "The Materials Project has no entry for γ. Its two Pnma entries, mp-985583 and\n", + "mp-1097036, are orderings of β. No entry has the framework of α. We take γ from\n", + "Kaup et al., Table S1 of the supporting information. It agrees with Homma et\n", + "al., COD 1570309. γ is ordered and needs no choice of Li sites." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "73", + "metadata": {}, + "outputs": [], + "source": [ + "from pymatgen.core import Lattice\n", + "\n", + "gamma = Structure.from_spacegroup(\n", + " \"Pmn2_1\",\n", + " Lattice.orthorhombic(7.7557, 6.5627, 6.1362),\n", + " [\"Li\", \"Li\", \"P\", \"S\", \"S\", \"S\"],\n", + " [\n", + " [0.2441, 0.3122, -0.0029],\n", + " [0, 0.1493, 0.475],\n", + " [0, 0.8174, 0.9955],\n", + " [0.2177, 0.6717, 0.8864],\n", + " [0, 0.1115, 0.8935],\n", + " [0, 0.8094, 0.3274],\n", + " ],\n", + ")\n", + "GAMMA_SUPERCELL = (2, 2, 2) # 128 atoms\n", + "gamma.composition, gamma.get_space_group_info()" + ] + }, + { + "cell_type": "markdown", + "id": "74", + "metadata": {}, + "source": [ + "At 0 K all three potentials put γ below β. β lies 11.9 meV/atom higher with\n", + "MACE-MATPES-PBE-0, 10.5 with MACE-MATPES-r2SCAN-0 and 4.7 with\n", + "MACE-OMAT-0-medium. For β to become stable, its entropy has to make up\n", + "this difference.\n", + "\n", + "We run γ with the NPT MD at the same temperatures and with Frenkel-Ladd at\n", + "100 K, as for β. The loop is off by default." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75", + "metadata": {}, + "outputs": [], + "source": [ + "RUN_GAMMA = False\n", + "gamma_docs = {}\n", + "if RUN_GAMMA:\n", + " for model in MODEL_FILES:\n", + " for temperature in LI3PS4_TEMPERATURES:\n", + " gamma_docs[model, temperature] = run_ft(\n", + " gamma,\n", + " GAMMA_SUPERCELL,\n", + " model,\n", + " f\"runs/gamma_{model}_{temperature}K_npt\",\n", + " temperature,\n", + " relax=True,\n", + " run_npt=True,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76", + "metadata": {}, + "outputs": [], + "source": [ + "# G(beta) - G(gamma) in meV/atom and S of each phase in J/(K mol) per formula\n", + "# unit, at 100 to 800 K and zero pressure, with the quantum correction\n", + "PHASE_T = (100, 200, 300, 400, 500, 600, 700, 800)\n", + "DELTA_G = {\n", + " \"OMAT-0-medium\": (-0.3, -1.8, -3.6, -5.1, -6.6, -7.3, -6.9, -4.9),\n", + " \"MATPES-PBE-0\": (7.1, 5.5, 3.4, 1.1, -1.1, -2.2, -1.9, -0.4),\n", + " \"MATPES-r2SCAN-0\": (3.0, 1.6, -0.5, -2.4, -4.6, -7.2, -9.5, -10.5),\n", + "}\n", + "PHASE_S = {\n", + " \"gamma\": {\n", + " \"OMAT-0-medium\": (80, 156, 222, 278, 327, 380, 430, 484),\n", + " \"MATPES-PBE-0\": (92, 172, 238, 292, 340, 391, 436, 474),\n", + " \"MATPES-r2SCAN-0\": (79, 154, 219, 273, 319, 360, 403, 450),\n", + " },\n", + " \"beta\": {\n", + " \"OMAT-0-medium\": (90, 168, 235, 290, 338, 383, 422, 463),\n", + " \"MATPES-PBE-0\": (103, 188, 255, 311, 355, 395, 429, 458),\n", + " \"MATPES-r2SCAN-0\": (91, 169, 235, 288, 337, 382, 419, 451),\n", + " },\n", + "}\n", + "\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 3.8))\n", + "for ax in axes:\n", + " ax.axvspan(523, 573, color=\"0.9\")\n", + "axes[0].axhline(0, color=\"gray\", lw=0.5)\n", + "for idx, model in enumerate(MODEL_FILES):\n", + " axes[0].plot(PHASE_T, DELTA_G[model], \"-o\", color=f\"C{idx}\", ms=3, label=model)\n", + " for phase, style in ((\"gamma\", \"--\"), (\"beta\", \"-\")):\n", + " axes[1].plot(PHASE_T, PHASE_S[phase][model], style, color=f\"C{idx}\")\n", + "axes[0].set_ylabel(\"G(beta) - G(gamma) (meV/atom)\")\n", + "axes[1].set_ylabel(\"S (J/(K mol)), beta solid, gamma dashed\")\n", + "for ax in axes:\n", + " ax.set_xlabel(\"Temperature (K)\")\n", + "axes[0].legend(fontsize=8)\n", + "fig.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "77", + "metadata": {}, + "source": [ + "G(β) crosses G(γ) at 278 K with MACE-MATPES-r2SCAN-0 and at 450 K with\n", + "MACE-MATPES-PBE-0. In experiment γ turns into β at 523 to 573 K. With\n", + "MACE-OMAT-0-medium, G(β) is already 0.3 meV/atom below G(γ) at 100 K, so there\n", + "is no crossing in our range. MACE-MATPES-PBE-0 gives a second crossing at\n", + "822 K. The framework of γ already flows there, so it does not count.\n", + "\n", + "- At 100 K the classical F of β lies above that of γ by 0.2 meV/atom with\n", + " MACE-OMAT-0-medium, 7.9 with MACE-MATPES-PBE-0 and 4.1 with\n", + " MACE-MATPES-r2SCAN-0. This is much less than the gap at 0 K. β has softer\n", + " modes, so its vibrations lower its free energy more.\n", + "- At 300 K the entropy of β is 13 to 17 J/(K mol) higher than that of γ.\n", + "- The quantum correction is 17 to 21 meV/atom for each phase at 100 K and\n", + " about 5 meV/atom at 500 K. Most of it cancels in G(β) - G(γ). It lowers the\n", + " difference by 0.5 to 1.1 meV/atom at 100 K and by 0.1 to 0.2 meV/atom at\n", + " 500 K.\n", + "- Each Frenkel-Ladd F has an error of about 0.1 meV/atom, from the spread of\n", + " ⟨U_MLIP - U_E⟩ at each λ. The center-of-mass term of F_E is -1.3 meV/atom.\n", + " Both supercells have 128 atoms and nearly the same springs, so this term\n", + " changes G(β) - G(γ) by only 0.02 meV/atom." + ] + }, + { + "cell_type": "markdown", + "id": "78", + "metadata": {}, + "source": [ + "## What this approach cannot do\n", + "\n", + "- **The free energy of α, and so the β to α transition.** Frenkel-Ladd needs a\n", + " structure that is stable at its starting temperature. α exists only with its\n", + " Li disorder. We relaxed 100 orderings of its Li sites with each potential.\n", + " In about 90 of them the PS4 units rotate into a distorted structure that\n", + " matches none of the known phases. The lowest lie 18 to 22 meV/atom above γ.\n", + " So ordered α is not a sound start at 100 K. α needs another method, for\n", + " example a cluster expansion for the Li disorder together with the vibrations.\n", + "- **Melting.** Its free energy needs a reference for the liquid, which\n", + " Frenkel-Ladd does not give.\n", + "- **Hysteresis.** In experiment the transitions happen at different\n", + " temperatures on heating and on cooling. The free energies only give the\n", + " temperature where two phases have the same G. Which phase forms depends also\n", + " on how fast the atoms rearrange.\n", + "\n", + "## Limits of the γ to β temperature\n", + "\n", + "- **The potentials.** γ and β differ by 5 to 12 meV/atom at 0 K, about the\n", + " size of the errors of these potentials. The transition temperature depends on\n", + " this difference, so it can shift by hundreds of kelvin between potentials.\n", + " Kam et al. computed the transitions with DFT, with the vibrational and the\n", + " configurational entropy (arXiv:2307.00878). With r²SCAN they found them 200\n", + " to 300 K below experiment. MACE-MATPES-r2SCAN-0 gives 250 to 300 K below\n", + " experiment. With PBE they found γ never stable. MACE-MATPES-PBE-0 instead\n", + " puts γ below β up to 450 K.\n", + "- **The Li disorder of β.** The MD only samples the disorder that the Li atoms\n", + " reach in 8 ps. Below about 500 K only a few Li hop, so the MD misses part of\n", + " the configurational entropy of β. Its free energy is then too high, which\n", + " moves the transition up.\n", + "- **One ordering of β.** We start from mp-985583. Other orderings start from a\n", + " different energy.\n", + "- **Classical nuclei.** The quantum correction uses a harmonic formula on the\n", + " MD DOS. It is exact only for harmonic vibrations. Its effect on G(β) - G(γ)\n", + " is 1.1 meV/atom or less, and 0.2 meV/atom or less from 500 K.\n", + "- **Size and length.** 128 atoms and 8 ps of MD." + ] + }, + { + "cell_type": "markdown", + "id": "79", + "metadata": {}, "source": [ "## Known limitations\n", "\n", From 24574391b8dafd870f48e2d8f3d5f32cdfc7687f Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 6 Oct 2026 17:23:17 -0700 Subject: [PATCH 41/43] Show the tutorial figures and tables without running the notebook --- tutorials/finite_temperature_phonons.ipynb | 263 +++++++++++++----- .../s1_bands_AlAsPt5.png | Bin 0 -> 106556 bytes .../s1_bands_Bi4S3N2.png | Bin 0 -> 98076 bytes .../s1_bands_Ca3Ir4Sn13.png | Bin 0 -> 114542 bytes .../s1_bands_Er5Tl3.png | Bin 0 -> 117950 bytes .../s1_bands_Zn3P2.png | Bin 0 -> 105143 bytes .../s1_ca3ir4sn13_300k.png | Bin 0 -> 81866 bytes .../s1_max_frequency.png | Bin 0 -> 32359 bytes .../s2_max_frequency.png | Bin 0 -> 71198 bytes .../s2_volume.png | Bin 0 -> 32016 bytes .../s3_knaicl_grid.png | Bin 0 -> 18283 bytes .../s4_bands_MATPES-PBE-0.png | Bin 0 -> 102289 bytes .../s4_bands_MATPES-r2SCAN-0.png | Bin 0 -> 95989 bytes .../s4_bands_OMAT-0-medium.png | Bin 0 -> 101828 bytes .../s4_runs.png | Bin 0 -> 35203 bytes .../s5_diffusion.png | Bin 0 -> 19781 bytes .../s5_phases.png | Bin 0 -> 23973 bytes .../s5_thermo.png | Bin 0 -> 45142 bytes .../s5_vdos.png | Bin 0 -> 23891 bytes 19 files changed, 187 insertions(+), 76 deletions(-) create mode 100644 tutorials/finite_temperature_phonons_figures/s1_bands_AlAsPt5.png create mode 100644 tutorials/finite_temperature_phonons_figures/s1_bands_Bi4S3N2.png create mode 100644 tutorials/finite_temperature_phonons_figures/s1_bands_Ca3Ir4Sn13.png create mode 100644 tutorials/finite_temperature_phonons_figures/s1_bands_Er5Tl3.png create mode 100644 tutorials/finite_temperature_phonons_figures/s1_bands_Zn3P2.png create mode 100644 tutorials/finite_temperature_phonons_figures/s1_ca3ir4sn13_300k.png create mode 100644 tutorials/finite_temperature_phonons_figures/s1_max_frequency.png create mode 100644 tutorials/finite_temperature_phonons_figures/s2_max_frequency.png create mode 100644 tutorials/finite_temperature_phonons_figures/s2_volume.png create mode 100644 tutorials/finite_temperature_phonons_figures/s3_knaicl_grid.png create mode 100644 tutorials/finite_temperature_phonons_figures/s4_bands_MATPES-PBE-0.png create mode 100644 tutorials/finite_temperature_phonons_figures/s4_bands_MATPES-r2SCAN-0.png create mode 100644 tutorials/finite_temperature_phonons_figures/s4_bands_OMAT-0-medium.png create mode 100644 tutorials/finite_temperature_phonons_figures/s4_runs.png create mode 100644 tutorials/finite_temperature_phonons_figures/s5_diffusion.png create mode 100644 tutorials/finite_temperature_phonons_figures/s5_phases.png create mode 100644 tutorials/finite_temperature_phonons_figures/s5_thermo.png create mode 100644 tutorials/finite_temperature_phonons_figures/s5_vdos.png diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index c3b02ade7e..093171a338 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -510,6 +510,8 @@ "id": "20", "metadata": {}, "source": [ + "![Band structure and DOS of Ca3Ir4Sn13 at 0 K and at 300 K](finite_temperature_phonons_figures/s1_ca3ir4sn13_300k.png)\n", + "\n", "At 0 K, Ca3Ir4Sn13 has imaginary modes down to about -0.75 THz. At 300 K they\n", "are gone. The motion of the atoms at 300 K stabilizes them.\n", "\n", @@ -678,6 +680,24 @@ "cell_type": "markdown", "id": "25", "metadata": {}, + "source": [ + "The figures below show our runs.\n", + "\n", + "![Band structures of Ca3Ir4Sn13 at 100, 500 and 900 K](finite_temperature_phonons_figures/s1_bands_Ca3Ir4Sn13.png)\n", + "\n", + "![Band structures of AlAsPt5 at 100, 500 and 900 K](finite_temperature_phonons_figures/s1_bands_AlAsPt5.png)\n", + "\n", + "![Band structures of Zn3P2 at 100, 500 and 900 K](finite_temperature_phonons_figures/s1_bands_Zn3P2.png)\n", + "\n", + "![Band structures of Bi4S3N2 at 100, 500 and 900 K](finite_temperature_phonons_figures/s1_bands_Bi4S3N2.png)\n", + "\n", + "![Band structures of Er5Tl3 at 100, 500 and 900 K](finite_temperature_phonons_figures/s1_bands_Er5Tl3.png)" + ] + }, + { + "cell_type": "markdown", + "id": "26", + "metadata": {}, "source": [ "## Our results\n", "\n", @@ -689,7 +709,7 @@ { "cell_type": "code", "execution_count": null, - "id": "26", + "id": "27", "metadata": {}, "outputs": [], "source": [ @@ -781,9 +801,19 @@ }, { "cell_type": "markdown", - "id": "27", + "id": "28", "metadata": {}, "source": [ + "![Highest frequency against temperature](finite_temperature_phonons_figures/s1_max_frequency.png)\n", + "\n", + "| Material | OMAT-0-medium | MATPES-PBE-0 | MATPES-r2SCAN-0 | AIMD highest frequency (THz) |\n", + "|---|---|---|---|---|\n", + "| Ca3Ir4Sn13 | 0.07 | 0.17 | 0.10 | 6.03 |\n", + "| AlAsPt5 | 0.11 | 0.19 | 0.17 | 7.79 |\n", + "| Zn3P2 | 0.21 | 0.10 | 0.44 | 10.09 |\n", + "| Bi4S3N2 | 0.15 | 0.46 | 0.16 | 17.03 |\n", + "| Er5Tl3 | 0.18 | 0.17 | 0.13 | 3.97 |\n", + "\n", "The table gives the mean absolute difference from the AIMD reference at 300 K\n", "in THz, over all branches and q-points of the band path.\n", "\n", @@ -824,7 +854,7 @@ }, { "cell_type": "markdown", - "id": "28", + "id": "29", "metadata": {}, "source": [ "## 2. Thermal expansion with an NPT MD\n", @@ -858,7 +888,7 @@ { "cell_type": "code", "execution_count": null, - "id": "29", + "id": "30", "metadata": {}, "outputs": [], "source": [ @@ -889,7 +919,7 @@ }, { "cell_type": "markdown", - "id": "30", + "id": "31", "metadata": {}, "source": [ "Our run took 19 minutes. The NPT MD and the NVT MD took about 8 minutes each\n", @@ -902,7 +932,7 @@ }, { "cell_type": "markdown", - "id": "31", + "id": "32", "metadata": {}, "source": [ "## The other temperatures, potentials and materials\n", @@ -917,7 +947,7 @@ { "cell_type": "code", "execution_count": null, - "id": "32", + "id": "33", "metadata": {}, "outputs": [], "source": [ @@ -942,7 +972,7 @@ }, { "cell_type": "markdown", - "id": "33", + "id": "34", "metadata": {}, "source": [ "## Our results\n", @@ -957,7 +987,7 @@ { "cell_type": "code", "execution_count": null, - "id": "34", + "id": "35", "metadata": {}, "outputs": [], "source": [ @@ -1093,9 +1123,13 @@ }, { "cell_type": "markdown", - "id": "35", + "id": "36", "metadata": {}, "source": [ + "![Volume against temperature](finite_temperature_phonons_figures/s2_volume.png)\n", + "\n", + "![Highest frequency in three cells](finite_temperature_phonons_figures/s2_max_frequency.png)\n", + "\n", "We do not compare these runs with the AIMD reference. It used the PBEsol cell\n", "at every temperature.\n", "\n", @@ -1155,7 +1189,7 @@ }, { "cell_type": "markdown", - "id": "36", + "id": "37", "metadata": {}, "source": [ "## 3. MD length and number of snapshots for KNaICl\n", @@ -1178,7 +1212,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37", + "id": "38", "metadata": {}, "outputs": [], "source": [ @@ -1203,7 +1237,7 @@ { "cell_type": "code", "execution_count": null, - "id": "38", + "id": "39", "metadata": {}, "outputs": [], "source": [ @@ -1268,9 +1302,23 @@ }, { "cell_type": "markdown", - "id": "39", + "id": "40", "metadata": {}, "source": [ + "![Difference from AIMD against MD length and snapshots](finite_temperature_phonons_figures/s3_knaicl_grid.png)\n", + "\n", + "| Potential | MD length | 25 snapshots | 50 snapshots | 100 snapshots |\n", + "|---|---|---|---|---|\n", + "| OMAT-0-medium | 4 ps | 5.48 | 5.52 | 5.66 |\n", + "| OMAT-0-medium | 8 ps | 5.35 | 5.56 | 5.63 |\n", + "| OMAT-0-medium | 16 ps | 5.57 | 5.62 | 5.61 |\n", + "| MATPES-PBE-0 | 4 ps | 5.20 | 5.18 | 5.13 |\n", + "| MATPES-PBE-0 | 8 ps | 5.07 | 5.22 | 5.33 |\n", + "| MATPES-PBE-0 | 16 ps | 5.05 | 5.31 | 5.24 |\n", + "| MATPES-r2SCAN-0 | 4 ps | 5.64 | 5.51 | 5.57 |\n", + "| MATPES-r2SCAN-0 | 8 ps | 5.32 | 5.58 | 5.42 |\n", + "| MATPES-r2SCAN-0 | 16 ps | 5.42 | 5.53 | 5.53 |\n", + "\n", "In the plot, a star marks a run with imaginary modes on the band path. The\n", "table gives the highest frequency in THz.\n", "\n", @@ -1302,7 +1350,7 @@ }, { "cell_type": "markdown", - "id": "40", + "id": "41", "metadata": {}, "source": [ "## 4. Li3PS4, a crystal that is unstable at 0 K\n", @@ -1325,7 +1373,7 @@ { "cell_type": "code", "execution_count": null, - "id": "41", + "id": "42", "metadata": {}, "outputs": [], "source": [ @@ -1337,7 +1385,7 @@ }, { "cell_type": "markdown", - "id": "42", + "id": "43", "metadata": {}, "source": [ "## Phonons at 0 K\n", @@ -1351,7 +1399,7 @@ { "cell_type": "code", "execution_count": null, - "id": "43", + "id": "44", "metadata": {}, "outputs": [], "source": [ @@ -1384,7 +1432,7 @@ }, { "cell_type": "markdown", - "id": "44", + "id": "45", "metadata": {}, "source": [ "Our run took 2 minutes. The lowest frequency is -2.59 THz. With\n", @@ -1393,7 +1441,7 @@ }, { "cell_type": "markdown", - "id": "45", + "id": "46", "metadata": {}, "source": [ "## One temperature\n", @@ -1404,7 +1452,7 @@ { "cell_type": "code", "execution_count": null, - "id": "46", + "id": "47", "metadata": {}, "outputs": [], "source": [ @@ -1428,7 +1476,7 @@ }, { "cell_type": "markdown", - "id": "47", + "id": "48", "metadata": {}, "source": [ "Our run took 31 minutes. The volume grows from 664.8 to 698.5 ų. The lowest\n", @@ -1439,7 +1487,7 @@ }, { "cell_type": "markdown", - "id": "48", + "id": "49", "metadata": {}, "source": [ "## The other temperatures and potentials\n", @@ -1451,7 +1499,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49", + "id": "50", "metadata": {}, "outputs": [], "source": [ @@ -1475,51 +1523,66 @@ }, { "cell_type": "markdown", - "id": "50", + "id": "51", "metadata": {}, "source": [ - "The next cell plots the bands of one potential from 0 to 1000 K. Every run\n", - "keeps the Pnma symmetry, so all runs of a potential have the band path of its\n", - "0 K run. Their q-points are the same in reduced coordinates. The cells differ a\n", - "little, so we plot every run along the distances of the 0 K path." + "The next cell plots the bands of one potential at 0, 300 and 700 K, in the\n", + "relaxed 0 K cell (NVT) and in the NPT cell. Every run keeps the Pnma symmetry,\n", + "so all runs of a potential have the band path of its 0 K run. Their q-points\n", + "are the same in reduced coordinates. The cells differ a little, so we plot\n", + "every run along the distances of the 0 K path." ] }, { "cell_type": "code", "execution_count": null, - "id": "51", + "id": "52", "metadata": {}, "outputs": [], "source": [ - "def plot_li3ps4_bands(model: str, label: str) -> None:\n", - " \"\"\"Plot the bands of one potential from 0 to 1000 K on its 0 K band path.\"\"\"\n", + "def plot_li3ps4_bands(model: str) -> None:\n", + " \"\"\"Plot the bands of one potential at 0, 300 and 700 K, in both cells.\"\"\"\n", " reference = li3ps4_docs[model, 0, \"harmonic\"].phonon_bandstructure\n", - " _, ax = plt.subplots(figsize=(8, 4))\n", - " for temperature in LI3PS4_TEMPERATURES:\n", - " plot_bands(\n", - " ax,\n", - " li3ps4_docs[model, temperature, label].phonon_bandstructure,\n", - " label=f\"{temperature} K\",\n", - " distance=reference.distance,\n", - " color=plt.cm.viridis(temperature / 1000),\n", - " lw=0.4,\n", - " )\n", - " plot_bands(ax, reference, label=\"0 K\", color=\"black\", lw=0.6)\n", - " ax.set_ylabel(\"Frequency (THz)\")\n", - " ax.set_title(f\"{model}, {label.upper()}\")\n", - " ax.legend(fontsize=7, ncol=2)\n", + " _, axes = plt.subplots(1, 2, figsize=(14, 4), sharey=True)\n", + " for ax, label in zip(axes, (\"nvt\", \"npt\"), strict=True):\n", + " plot_bands(ax, reference, label=\"0 K\", color=\"gray\", lw=0.5)\n", + " for temperature, color in ((300, \"C0\"), (700, \"C3\")):\n", + " plot_bands(\n", + " ax,\n", + " li3ps4_docs[model, temperature, label].phonon_bandstructure,\n", + " label=f\"{temperature} K\",\n", + " distance=reference.distance,\n", + " color=color,\n", + " lw=0.5,\n", + " )\n", + " ax.set_title(f\"{model}, {label.upper()}\")\n", + " axes[0].set_ylabel(\"Frequency (THz)\")\n", + " axes[1].legend(fontsize=8)\n", " plt.show()\n", "\n", "\n", "if RUN_LI3PS4:\n", " for model in MODEL_FILES:\n", - " for label in (\"nvt\", \"npt\"):\n", - " plot_li3ps4_bands(model, label)" + " plot_li3ps4_bands(model)" ] }, { "cell_type": "markdown", - "id": "52", + "id": "53", + "metadata": {}, + "source": [ + "The figures below show our runs.\n", + "\n", + "![Band structures of Li3PS4 with OMAT-0-medium at 0, 300 and 700 K](finite_temperature_phonons_figures/s4_bands_OMAT-0-medium.png)\n", + "\n", + "![Band structures of Li3PS4 with MATPES-PBE-0 at 0, 300 and 700 K](finite_temperature_phonons_figures/s4_bands_MATPES-PBE-0.png)\n", + "\n", + "![Band structures of Li3PS4 with MATPES-r2SCAN-0 at 0, 300 and 700 K](finite_temperature_phonons_figures/s4_bands_MATPES-r2SCAN-0.png)" + ] + }, + { + "cell_type": "markdown", + "id": "54", "metadata": {}, "source": [ "## Our results\n", @@ -1532,7 +1595,7 @@ { "cell_type": "code", "execution_count": null, - "id": "53", + "id": "55", "metadata": {}, "outputs": [], "source": [ @@ -1593,9 +1656,11 @@ }, { "cell_type": "markdown", - "id": "54", + "id": "56", "metadata": {}, "source": [ + "![Lowest frequency, Lindemann ratio and volume of Li3PS4](finite_temperature_phonons_figures/s4_runs.png)\n", + "\n", "- The imaginary modes of 0 K shrink at finite temperature, but they do not go\n", " away. The lowest frequency lies between -0.2 and -2.2 THz in every run but\n", " one. MACE-MATPES-r2SCAN-0 in the NPT cell at 400 K has no imaginary modes.\n", @@ -1614,7 +1679,7 @@ }, { "cell_type": "markdown", - "id": "55", + "id": "57", "metadata": {}, "source": [ "## 5. When light atoms hop: Li3PS4 above 300 K\n", @@ -1642,7 +1707,7 @@ { "cell_type": "code", "execution_count": null, - "id": "56", + "id": "58", "metadata": {}, "outputs": [], "source": [ @@ -1679,7 +1744,7 @@ }, { "cell_type": "markdown", - "id": "57", + "id": "59", "metadata": {}, "source": [ "## Which atoms move\n", @@ -1692,7 +1757,7 @@ { "cell_type": "code", "execution_count": null, - "id": "58", + "id": "60", "metadata": {}, "outputs": [], "source": [ @@ -1728,7 +1793,7 @@ { "cell_type": "code", "execution_count": null, - "id": "59", + "id": "61", "metadata": {}, "outputs": [], "source": [ @@ -1781,9 +1846,19 @@ }, { "cell_type": "markdown", - "id": "60", + "id": "62", "metadata": {}, "source": [ + "![Diffusion coefficients of Li3PS4](finite_temperature_phonons_figures/s5_diffusion.png)\n", + "\n", + "D of Li in 10⁻⁶ cm²/s, in the relaxed 0 K cell:\n", + "\n", + "| Potential | 300 K | 400 K | 500 K | 600 K | 700 K | 800 K | 900 K | 1000 K |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| OMAT-0-medium | -0.4 | 2.0 | 0.0 | 7.6 | 8.0 | 5.0 | 31.0 | 47.0 |\n", + "| MATPES-PBE-0 | 1.9 | 3.0 | 6.3 | 15.0 | 26.0 | 29.0 | 46.0 | 64.0 |\n", + "| MATPES-r2SCAN-0 | 1.6 | 0.8 | 2.6 | 4.8 | 6.8 | 26.0 | 38.0 | 34.0 |\n", + "\n", "A D below about 3×10⁻⁷ cm²/s is noise in these 7 ps runs. P and S stay near\n", "that level up to 700 K.\n", "\n", @@ -1807,7 +1882,7 @@ }, { "cell_type": "markdown", - "id": "61", + "id": "63", "metadata": {}, "source": [ "## The vibrational DOS from the velocities\n", @@ -1827,7 +1902,7 @@ { "cell_type": "code", "execution_count": null, - "id": "62", + "id": "64", "metadata": {}, "outputs": [], "source": [ @@ -1864,7 +1939,7 @@ { "cell_type": "code", "execution_count": null, - "id": "63", + "id": "65", "metadata": {}, "outputs": [], "source": [ @@ -1901,9 +1976,25 @@ }, { "cell_type": "markdown", - "id": "64", + "id": "66", "metadata": {}, "source": [ + "![Li DOS below 5 THz and P-S stretch, MD against fit](finite_temperature_phonons_figures/s5_vdos.png)\n", + "\n", + "Li DOS below 5 THz and P-S stretch, in the relaxed 0 K cell:\n", + "\n", + "| Potential | T (K) | Li DOS below 5 THz, MD | fit | P-S stretch (THz), MD | fit |\n", + "|---|---|---|---|---|---|\n", + "| OMAT-0-medium | 300 | 15% | 18% | 16.4 | 15.9 |\n", + "| OMAT-0-medium | 500 | 18% | 27% | 16.0 | 15.2 |\n", + "| OMAT-0-medium | 700 | 23% | 90% | 16.4 | 12.9 |\n", + "| MATPES-PBE-0 | 300 | 21% | 53% | 14.6 | 13.8 |\n", + "| MATPES-PBE-0 | 500 | 23% | 98% | 15.0 | 12.4 |\n", + "| MATPES-PBE-0 | 700 | 25% | 100% | 15.0 | 12.0 |\n", + "| MATPES-r2SCAN-0 | 300 | 14% | 19% | 16.3 | 16.1 |\n", + "| MATPES-r2SCAN-0 | 500 | 17% | 41% | 16.3 | 15.2 |\n", + "| MATPES-r2SCAN-0 | 700 | 21% | 99% | 16.3 | 13.2 |\n", + "\n", "The fitted DOS is smeared with the same 0.15 THz as the MD DOS.\n", "\n", "- At 300 K, with MACE-OMAT-0-medium and MACE-MATPES-r2SCAN-0, 14 to 19% of the\n", @@ -1920,7 +2011,7 @@ }, { "cell_type": "markdown", - "id": "65", + "id": "67", "metadata": {}, "source": [ "## The free energy from the MD\n", @@ -1958,7 +2049,7 @@ { "cell_type": "code", "execution_count": null, - "id": "66", + "id": "68", "metadata": {}, "outputs": [], "source": [ @@ -2078,7 +2169,7 @@ }, { "cell_type": "markdown", - "id": "67", + "id": "69", "metadata": {}, "source": [ "We tested these functions on a periodic Cu-Ag crystal with an EMT potential at\n", @@ -2092,7 +2183,7 @@ { "cell_type": "code", "execution_count": null, - "id": "68", + "id": "70", "metadata": {}, "outputs": [], "source": [ @@ -2106,7 +2197,7 @@ { "cell_type": "code", "execution_count": null, - "id": "69", + "id": "71", "metadata": {}, "outputs": [], "source": [ @@ -2150,7 +2241,7 @@ { "cell_type": "code", "execution_count": null, - "id": "70", + "id": "72", "metadata": {}, "outputs": [], "source": [ @@ -2227,9 +2318,19 @@ }, { "cell_type": "markdown", - "id": "71", + "id": "73", "metadata": {}, "source": [ + "![Free energy and entropy of Li3PS4](finite_temperature_phonons_figures/s5_thermo.png)\n", + "\n", + "S at 700 K in J/(K mol) per formula unit:\n", + "\n", + "| Potential | MD, 0 K cell | MD, NPT cell | fit | 0 K force constants |\n", + "|---|---|---|---|---|\n", + "| OMAT-0-medium | 401 | 419 | 452 | 348 |\n", + "| MATPES-PBE-0 | 415 | 426 | 457 | 381 |\n", + "| MATPES-r2SCAN-0 | 400 | 417 | 449 | 342 |\n", + "\n", "The fitted F includes U₀, the mean potential energy of its MD minus 3kT/2 per\n", "atom. All values are per formula unit.\n", "\n", @@ -2248,7 +2349,7 @@ }, { "cell_type": "markdown", - "id": "72", + "id": "74", "metadata": {}, "source": [ "## γ against β\n", @@ -2266,7 +2367,7 @@ { "cell_type": "code", "execution_count": null, - "id": "73", + "id": "75", "metadata": {}, "outputs": [], "source": [ @@ -2291,7 +2392,7 @@ }, { "cell_type": "markdown", - "id": "74", + "id": "76", "metadata": {}, "source": [ "At 0 K all three potentials put γ below β. β lies 11.9 meV/atom higher with\n", @@ -2306,7 +2407,7 @@ { "cell_type": "code", "execution_count": null, - "id": "75", + "id": "77", "metadata": {}, "outputs": [], "source": [ @@ -2329,7 +2430,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76", + "id": "78", "metadata": {}, "outputs": [], "source": [ @@ -2373,9 +2474,19 @@ }, { "cell_type": "markdown", - "id": "77", + "id": "79", "metadata": {}, "source": [ + "![G(beta) - G(gamma) and entropies](finite_temperature_phonons_figures/s5_phases.png)\n", + "\n", + "G(β) - G(γ) in meV/atom:\n", + "\n", + "| Potential | 100 K | 200 K | 300 K | 400 K | 500 K | 600 K | 700 K | 800 K |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| OMAT-0-medium | -0.3 | -1.8 | -3.6 | -5.1 | -6.6 | -7.3 | -6.9 | -4.9 |\n", + "| MATPES-PBE-0 | 7.1 | 5.5 | 3.4 | 1.1 | -1.1 | -2.2 | -1.9 | -0.4 |\n", + "| MATPES-r2SCAN-0 | 3.0 | 1.6 | -0.5 | -2.4 | -4.6 | -7.2 | -9.5 | -10.5 |\n", + "\n", "G(β) crosses G(γ) at 278 K with MACE-MATPES-r2SCAN-0 and at 450 K with\n", "MACE-MATPES-PBE-0. In experiment γ turns into β at 523 to 573 K. With\n", "MACE-OMAT-0-medium, G(β) is already 0.3 meV/atom below G(γ) at 100 K, so there\n", @@ -2399,7 +2510,7 @@ }, { "cell_type": "markdown", - "id": "78", + "id": "80", "metadata": {}, "source": [ "## What this approach cannot do\n", @@ -2442,7 +2553,7 @@ }, { "cell_type": "markdown", - "id": "79", + "id": "81", "metadata": {}, "source": [ "## Known limitations\n", diff --git a/tutorials/finite_temperature_phonons_figures/s1_bands_AlAsPt5.png b/tutorials/finite_temperature_phonons_figures/s1_bands_AlAsPt5.png new file mode 100644 index 0000000000000000000000000000000000000000..c8ad751da72f6f319d74549ba81f5e7a15572e54 GIT binary patch literal 106556 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дEb+hJHf`PdEGK5a|2# zB_7A@J5*3#M9#u{TFJ%3tlJ++I3$-0S&v)q@V+~{t!_R!a~|#VD;c-FYT;T7C-NJ$Yh*L>Yi8t{%Wd=8n`BN!EC20Pag-?>) zJXI|-=(Rb>6D_oe+6Tz;07zd%yP7Pd@@sRiw2+#cy&;R3`Qw7mV&8XrF!Rv$b;`;8 z13EB;oYq@5U|U^%JSYyEuy@~{y+O_>n6#lE^@~@V*gTW)jf&;R(UQF()}WA zGq-QBk;6_Idu6JYo&;|<6X!3mu8u)pekOt}T*X=Mnv&;C(_0Lc3 zI&(hPbHU_*17AuNFf9ohx3B4ab&!?r>1*px@H3EW70)mbW}$g>^p%Q?3+IvRE0s@W zyQ7t@s&vE+ShFt*U#)5|ns3$VNB))dxYR|D*HlXb17a7u>^`tJY|}!i866wp5QYmq zN6er+x#yk4yOcNq*M9x)Rviz=Yv$%I>F#Z~_oSC&-FW5yo%|-mTqF34iQ%HM2K71h z&zG>oHjrjWoRK7q_Eh$MT5RR?9r{=LeVX|`9NG$$#GgDlfgtIyu}E;44>^T+R&N(d zm6$=lSB|8ZPof-d}6B&*_`2oJTE6s@}))enT!t2DF&Wk-h&$VTm8&^iCMj z_YQo1L{6WNerj0@x@zaSehi~cOu*?*&9)M8au&Uo0QN!a%nFy+5O@Rr82!!A ztGnaO73ftpcB?0ja(m2uizO=djyrvCkRB+>ELC~~QJ5g$_Ja)hwT2~DU!*w{q zaZhaBAVAKst~Low;@Skc1VIHEh*u{GlOW0{m(i`GT$H$P&+dH(_QlyxT9~E_`u5iq z?siWTXkbksF9v=5coM(fcZ$9v3jOOBh#EtT6q~k_(Z5+CFLqK@a%$(&IgYpMfqB=! zv2tRr|6atmsCWc*~qUo+9i+l`tbOmW?_XPkywN38eqeaDs}>t8=d zbQZ<MiZcBl^2f-p=h)~^ct&zFkBPh(tM2^Q{EmI43b967N<_-kWp4E;CrF+d$ z2bEfvyI$_dJ*n9!(|lDJ7bNYamE9Pfe<$~r19OHYz{$mNr?QA%|jec(;eUJPa> zno}#O-x9MB4BT`pDykvn65Ld$zLgaib4ab;w|_m(85=S#dA`0TL#L7bE|1lif?b`& zSPhynv!5a&B1k^7Y9L7(R&wZMS^i{6pTURY68-9;FTmRS46<;$fC;(P#_W!ulKO3y zyJL^bEG5XMmv0qoHtDO2oUu`^fiA&2!l$W{ScE%q|GRr#H$Dfo|Ijk5$=h$oE)>cl z3nsFL2f&6Z&#Q4ZOOM&eTcmqSW@&TN=-x3?wZyQVTWMjpNNf=hOY){cWA&XMP$xr6 zayXp{Bw|*P_Qt^$g!*k8IFp^Y^s3zbTFaw6U?`~`c$9Ezi>N#;AUTCC>?#HZFuoqK zww=E~CDbzPTFZKE-yTF`mQ+Dj^*#QZ_MaQasmm;aFxaSI_Xv-0Y@Ev)2<`SG64&nk zHc%qtw6hqsgQC~F`A0%7+HYJ zHNqq0)o`#QIiuSasPlqD3Cja|bf65L+syZ}0$4@#;(SvGwup-|lS92KJ!^^J9j4+U z+SKmzdOa}t+VT< zN^QQr!LNy~^Fbx>>(nmvcG<#-aap*>=5h$~mq*kx$dV^1Yc)u(XzZ+HqVYC3w@43~ z9}*@lKUuqDSrQFmmqRQ2HmKGTK{PNv}y9q(?DpaE$XCK{Dr zO$d|{xvEz-xu~d~3f{%a?sr*|==*B~ji61)ax3*w3#iUxQ3?>YzmarGob&VcMA zBcdma!uIW60veep;I5bxH%z=QE*GMLeWS#emXv1Ue}9tgHm2gxdG4&omTNF_=v@{T zHLe^hDr{nI$22;rpdm%4kMX&)diQpiOh&$~A}KtWK1_~T^kt#1RQ)V655>kughktd zuc+}nm(0q{L>W09TEI9Ihef`agjmZHhV!igk%wea9m?h!_JO8QP5}(D%I1pCp&-OX zhdWC8@eFqmnRbfRul=E63A8Apu$`66?yWu^@AQ5z3;y-&@89pb2Z|gv#m<}EcU)Yd zBzoV(LIlTP@F$hv*Ee$v3C%Rq@b>88{w-OgsPPFv9UH`mR(kg6uLVU$9+Yr1d3gbL>m@2sdG2Y8(Z@Dw8 z*8lc*gzL8EuXL-1*Y3kk^n>6oe+cail*q7_xtZS%%q>rzYO$nAVlD2k6uski+DnlNM5EWuSK+E;jBr*PUr?P&k#E-Skf2P2*;39z{xZbt+L8)`m% z1E2c=mn@Q8sCJR=CI=66PU(8SzWOZ8Of)Vc0N&KRSj1mcear>%tMSfU1qgJY8}>9p z<6X=Uc}32FR*jjNGw}H}Da^>{DhXN;lfz&=-XdW}yZFs@Hw8-|IPmPf_Mb2B`oicv zo&OZ>+536F=?Mc6=U}!?J_~nfLX__(j^u~G0DP%kzbK|&^&fhX& zs&?vAk%(3KeDlOP7A6VabcoIVK-!FOLM`_V{W{AsOJTU6*)vVJ#Iq(xsdHQj3A2K- zUuO5NhzwDI)QEMmIodG3hN2C@F7e|6K8xawJgXN}vf-v@YZIuzKC+0LdCcAXI1@;< zejSXCHCXK&8z16mx@HZk`EzK>h;KXF0nr=#bQoSPfzayHN8oBVivxj^EbCj2zZVa*{2<;1s+wa|jOrj>mjc`Gx%ODN& z&;-Y+l*m@v!7$%67#BEokIEt^+@4Jfcy9gUmCS0iX2iQ_ z!Q0JDiPgRV!ZQ{)hvGCKQo8}PX2M8qp)aJ~gI4I8;iMgP$~-ryj5P~BpA>JOQsbLO z8}#eY3fdB-CeNmX&9yf{4Wnt|!Nfr0_YU&4R6pH+0T0>stc;y~^}ks-q+0V};sD&W zsBwl^#ca+D-%S@PLHc~{aMUGBZXjk)>>>2Y%e(lb<7U`J4Mq)*}(WDznlD0~XyK(CGSm|#XC zo*XfEp#MtS#`r^2)MbC$G)t|7WgxofFI{84*wi^V0++DE9T6}&2yrJj&hnueQnSbq z9O;<(D?~URjhpO!8TP3oO3ey_&7*gGwHfi4$20~Nd+ z*qB}O8VIS%bO<1f%jfmgQE-I?sh~3h^PFgkS zAH6r_5J!T9fhLx&fHeFb#rV6Zj0e(CZfd2_4ymEu3lSD$SvPkz1je6`OG-pKdt@Cq zPNN0q93^{eqS=@2uC_=boPzJ?yf$!xFU1mwjxiTMk8qXbq#~t=54xuq){%B8SWWn3 zTN!3u(?MK`M~-bUp-PODIafW)k{S@^D%n5bPZtLDD8RV+^Tt9!AcN2F>$} z$1J)Acfs0n{}D=G1vqE_$HPf4b#^cQ=-e4hvm^kb730H>Xj7rJmC<)byXYV{t?vvd z7E|kBqI*#4NX5?_z<%3%`CgR*NOujm%}G?bWSL)Y=zDUP~C`7MqhB} z{|Pei*#~e*puYT1lk>k5;BOoXSR3>v<874NJk@aaljOX9^s!aeHHI?KBK#2umLhDr zk1)s9A&vI%$ULQ(%DX1swnKR%+>(gWuwSH5H`~ye6N{f+uP($Y$4b4zejVG`iC~(q zw*o)<_`Qh;mvXx#brDJ^)(=IUAjSUW=bQT5N-z_vw{vF3qHta5LBqq#KwzJDXuJC8 zY+{EXckTI>{_$_GGm)g7%ZJo1+_k`wc1hJag>}y6c_2}O;hEtN@--<);4O#$!8rL2 zps6r?%;D}2f=_=A2_D6u8F7~FTcCJ1s54#IG7pv)@VgO07>U*pj z0UZxWvR(Q34D@HoImgOgsr`D{ij#+g$#$NX+M5R!mO3jxcA($ErD6HZlP+;N(&)c) z{s=O|?i@l`Gt&1cCzn*xOG+}~eVCtH!%%<#9N(R5Eb;O*;l0w4u`%f80E*OdN@+9;HCZXWtE)8j*01+nNQf8NKaoP zae@A@Rm$GaXOCoyh00XCu@dw0ijjjj5kCfOSPeN-Z6r>n2;+rlJi{L{XnzY=~# zvatrvA96V|=)E8{6;!U8~c0c{v5cP5gna>gP;7?2S$-ZV{>Z?9RbKp-G<}2$M0Q31Qw&z;e7~J%;=|-TnhtrV#JT2%3nNrC zd>!IQ%%0|_vv2SIJ{D0GZT&WnrFtBf76=r*8P~OVuyR8>|@_x)G>{jVCwUiXg< z=fQdo;*i>B@| zj8r!>2<-DtV_O58S8R6wtEQOBs(RKGclveai*mg)TbfNW# zJaKPrU{M0?{D4$kIZK|`nQ%U>3gm`wW;?5^fgVG0g)&X?JX$M>2&i>`ikt%^0D~`J zvOf_Z1F;c=4%l+FXl#i;x+j_i^j$vY%TEv9x;--6ia08VQQ{x^sS9>WOq&f8(wtzU z1W_mr8cZLSV*x7$^8QBca?mrn&9{70!39&p(w7Ix$M3k zWoy&_CdZccY-(nT8cso)E9+okwjj0TV8g?)#FkPX!V!T=Dx#lqRDn|Sqs9XN8?r#6 z)Urm{Kb2PGt0dJrTGzXMrVVz3FgTuLjWm7I?oOTt)Me9GS3>U*duhSVcN;Ia0c zci$RbB60RVA?nO3WD#u^&Xk61nkqkA#adkKta+ZN) z0}Vq}vv3mZUU0qf^FvWYb_Yl1rY_r7W z;F2aE3m9wmX|uT5pk&r;pRsr;NTvw7Rmb5y{U11 z3Tp0gzRkCmM$S-bE>L})k&rWcTC8Huni#)XL>W0TP-%T&*O_wG)aHa55zDqrqfE=z zZLDuSKRnl=;|e4hCcuVUA8BoE8&Mf!%a=YQJH&J6m#kKu*~-SwrH=YFDmk%^N+~4k zcea+c%zfPq`D_%b`f6ZNy4#1Jf>W@Lh&pgUIybiRD6pMTwwvUbDudC{557wPH5r=ddC1;7uuiB|<^KC{G zhdr@WcSYsh`w}{S9D2`sB83ZFvLlih$idc&V)%9<RyRSWq@J*Lwltoe`fpFO_y1la~??1SuOc zdt_Yp&Ih#K^5wY(g@pV~a%iVJS*w+e(=65|{@?zk>ZBz6O*ve`UkRW6flG3_0I!BF z*csEnV$mB|bovBuss?mT1LR_bkiI+1CplFSXU?9Ds+r=H^D?jdVJ|K>7AQ0f-WQ6Ta567);ux)>X&emH{whh zxj+=l7?x0!%c_nznpdI=Agybm`LCFX@`ny<=o`EE`a0^%0h4^YGu(rpCg;|JU$ray zyim60=Q)NjdZn9{PjVVC_RCxtFhV_HydYPCatB6k)!$E-5g?1>|m0GxryE< z$vJ}BO-*q|=3OHOU6^m-ERw-dty-wQUS`8xQ=OI5xHb!Yw9(3rg--aGVcMSxBJi`U zNvd^6#njMKLgQI=A2_f&ZZ8diQA|L92G>&FQFe-wO-`gO$Vc+ z?UHmMCuN&?E+ZV;qVMahxZC3aE44*XSKFa!?BVC0A7VhIL!Y!aJFX-r>pO(!0zs~0 zi;J-YDHX{1<@G)49nIK)tc0pLD%&u{?G$28E|Jtu!ffLasR(B@k5zN2vBjB+z+EFb z{=nQHVIh=8>A+gEl~GE>p42qZIcbsFQi6%-n7nPQ5St@N#aVOc$X6<35{eTn5!Jdg zs)1E=23|?|%BeF}g<~p`OeKGE)4D9p&PNZcUX2bCmZ&Nc;iR^l@ROQxckbND$t%bj zVlvs3yc{?pO8P`O2ZS=nB_&m;Y4`+>(?nXDmv((BS{yt+Sp}JpT5&v%e0j?pCQd$L zc0Dgw({OxZ4glVY@wFeyE_!^RlS=KJxC|W6S+uHlvZ7Q)_OdgQpv2)2kgyG~ouu0$ zjj?T%mbT*Xv*i_Mff5A=A#}4*bJ2{xZU~%AhyPtCLYuNr(ZDOr0H`#uzY*CS@<*>) zg;OZSqdB>G#h)VQDzE{UWL`t!VNZ3~psTF$EkKhIq@L!y1ih;Nq~9rDF^W4ISS2~1 zc{uJ9v83K7nXeIPf~pXj1nMj1o1Oyl%drezHpH+acwPt@as%SA-K1auS`>JTP$@he)QE(gu%&m@RXhO2Fcj=TuUQwlrI|PYkD%L4P&z= z%20IY?8MyiQhgVa)Ko;HN=>5aA9y`ys~T#eWZd2KHFb<#QNC^tuFh^~7Y)6$5I#5>c{XPx10pACqWe;O^()=;P^m%@>6V4asz)C7W5r!N(`cxy^8Zx~D|Du28*35oNSe z3o~gKDH__$MI0rS2vNjIBrwCTa7E*wgG)shTVXw*8Tw^+(}!J*^;{%hAJ+fHPZ4%H zBN{l<3rjOIbio{zeTe_RtrP>lWua-}Yf_7V=mIjo!=R+b=J19U89G*Rl3Jri;ot2H za)7OmXAo6TJ|FzNR`W z>s!JhDU$?BEAFR43xQEQJ@J%jskvd&+X=su%y}E2&{+>}?)xLSzM&(&(t7x^u_jf- zpqH2+6o&7pt zoedPXh@CmR3zAmT)R0k~oT)?Fhc4cbWkoSht(4|u(b5cEA#Y@_hLNYwg%wxiL;#^y zb%%E6i5-r%*RW@>AStQ&zI8bH5AS#*p8S+BK z-TJ-`M~jQ2CIt4vcDm6T*m5hI9*qz#A%W>BlTv8l%7r1 zn2v_4mzwS9XvC?Ex!1!B(Tmj!R565uCH9<`uZyqi4YyMXEwE1k-#|O2qee0p|1Aen zZkO~{14%hEBA33^IglKOFGy`Jc{=FtCyW+V^v;XB^xVME)Xv`F6XpDMvt5`Pz~)p5 zITPZ>Xb01CJUbI!vap6MkC?MgXy>)f$(}H9(APv(RGyTxE)U)~ev^qb;cJB|CXIiP zK|ei*m~KwluYQZEmrUeq_F_$xs>D&tzZvLjYaH4OnVp00 z--h#^Jly-%b9N_e&fWPHS!W$siLbV2DlFv0p+ZsDOb^K?wilIE&%xg0e(G#9Maj^6 zWA~Z5pCxnp^fau5q)4OI;cSYA3mlvuA-$ZfQGgA42~tFSJMR;f4pQ&9|UMkU>YHZi%G! zQc4>Ib9pYsM;e$U5Oa%LNG)xogb3DTWy9PA?HMNqGHENHOYIs%ikLE5=beo7)z%u) zP6P~8r4~z6zf5-Z3Nivn!53T+njNmABMwv|tDh5|Mt#G6l*?dH?pYZcn>o6Aqx`~r z+zYSLZW|lDV=aIC-@m?lJu6^ye&?E?-g;vzAYxa#IcgsMh?KXa4Lm(Hq44zHvE@eA z{7WWQ+}UX}*p{YGV&4+%-yCTji`4CXiE%%73aNUAGaoNhpY$PFB6Z8RAqgU<4(PQy z3lqw!YznhG;q3_r??GXqzRrP#*#Ri{2o8pS_&9t&1#jj9lU-K6(h74Ht*0E9;@B8@!CskE`)fg3 zEN050JsfO3cf(0zb##cnkE1k5Bnge~Rb3oQ&*4?#4*{>k;iDg5(BTz0+M0?){Cc^q zUw8h1Hd5TPTUt(WD}eM8n;HE}i&3!W{zc=I?W^IEVtJdnZ|zWCc7|q##x5vNLm3`j z?S+8B@}%NzU(hlQ6%Pe_8zayfWl+6#Pjyo>+=+(r|G#3eIlrpClJ&a)8+1W8$FaH600Hny(bZG!R3UD7xT_>q zQpWo&*n;z4vd7K=uRz;~fO2}sKLx0AU z2lXE+=m`}0kKdb>4Z5w{ePsbcWkgKawPye1GBU_^8e5f`dno1;(X0U*exjY&X0pX` zz1rOCeaeE#-M@=RF}RBp1L)B`ajpn!e)-%(w0I(JKlki=tvRgrl#)m#xx5*85gpUj zw#Y8n8QIxs4YnGD1Qv7^k=xsG5PiH=Pgazr8+IwQ!10-=@OCSY3f3Oi!jsNATkIVW z9Jg?Zc#DCj{T5{CSzzWxq=dz?U0Y$ZzqKp#!9`ow_Uxxy{-kJy!5vy)XbOk^bC(ay6CaLYPr9MDFrmH(`r{8wv!JCgxUwj zzE}Sf8B38gA{4;Ux#{^WPR7WEZxdU~E*#`##UK;ni@TSgyxNQ#z8>1Exm3TcfMQWq z^X|3$`@eqw{pT;uQeO1dpQTB>_l|7Hu`PFh=a70 z?hZZX(kyuZ@+^b!&bZnWm`rcAhl-X~PIgQK2Pb(mq+2bESv5QJiA{vOaNo%`f^8i%S`GIuC*yfMk zo5vOuNS2z;$fFSl@=U4nRTSXhVb`@39#BdQ2q05$yPnv_wYWQUa$sGVtazFvc(-HGL;jkRIp~a zON-n_8zAR^4kX_VLL1%uzviJHX8)2J?~#hxQtKvaDy<=2gcLX!iM!|Qa+!M)m7J>O z25&*w-GWLiJJzblkdcO#BQnGkoXiSTLqZnrjLNER4KG$%EU&7m|0Fr@e+0Y~dE5i$ zlnNmg(^v`b4_2cgQd7x$MCT=klbV(GI=iiBB?dCy=OD_{8erWp$7yO>T3RZ)gf!># zESQ&~3HyBp-G+Nmxm^gVVNyyN5EKn%uVxHBE-g)r!)In^XVdz+`Wvu6y1O5Ss0&qy zQi86~XDaqfpL$UH_XS%_^C9mCPn(hQ+IFzT1GWRWRB(J@t#-0a7n|Eo3YSm}_CV$L zH3_F{?F@i!tK>w~d)D&1-~apHf3HdU&%X&t{eNesM`*Pb)&faCZw8dwc?Ml&t|dsg z)T@oYb?Wls{rLEkZ_5O*D$%i{UDQsgK>X`2r5k2EY9wiAH)&){hQr0K>L$)I?^xn? z)Wn=!5qOpQ2~}{k-A!A_ynjtYXrRh3N=nP@klhvo8we6-Z85gVsPAuHIIyM0v>6%OTj#B$v{b^qc@k zXVy&%bZS&(bXCV(J?tz*492J5_0_jtxP-pcD$OGU+Kp0#AJeg!RUdde%G>?~KS?5W z5AP|=x^yt&K`nc1ZmKdm@>Ase?1+>G;^iUS0~8DHY9-v36Wi6*lKXfz{sNNz8i=r+ zs?N=m)bQJ^U3Z7ad3oj(Ya)6lyqeY2A^ZgAyRY~ta!nV|{OaA;p)zZYAXee`x}i`m z+Q{uWbYx(&P zzy1Ep-~ayaRqEI8e*5p=h1T;RDLg2$ip8C%udr1BTVaPcC#j~%#=7ZozQ_(d5KSl~ z5NO}mPfS*9isP+rfDLEY{KRJg`NzgcnqHoQJedw!9q6{)L0dFSAgTN+x&nNrdh~qKfREOFrev?im4MDX*!Oxrs=F_geSQ5FUbFR(;M4LU2bG58yT;LrX91a z>dJEb_q|O6GqX#}%kQ7{P|i{K*uB|MzpYhI(UYfj{NM-KrW_@xfkE8VJE+}YyXK8h zqkCBBb$4rSUR&M~Anvj1F+;~}E~~Drth#SC8~&(R)6>>G^YI*}n+DPWxeY@pF*mlV z8GjW;uYbEm7waqsk|ha;yqz?*14vrqynoi+0Cz_-BYQh%KbKP^iY{Mq8-|^bXwyy3 zoS!<)nuuCC_5K*nB!}}g9P0v`g*en_t$NM^dUS6H#O9n?*feIqzVJu8n_1ahj;gHd z1tcwUy7~w|lt(=3TjoTxByKkn zO>?Xz?XGFxXYJEO$&=+8m z)7I5J{E|t+N*agy3KF>*VS&=_@e?M^L>~D%bbQrFMRVyjOe>$GvtO4W_rfa*BCUA3 z?eai`9tqNLL>o(k!{|dGynPKZ1BXH90Md}~jqs)LdRBpDtX5J$USx%9$(W zuSN;4V+4?=os*9!YR(?;-om!uU!X==9~a)yHv9>rUu2N`sUj|yazTiOssHQYq~X^` z(c&u^*e1SG)bt9c@bV$iv(@XAlmdJM(Wiy|G=-1en@a=zuc+}Cc}iTz34riCFu~tO zQBCavjs{1MpaMOGxijVnmSeXEKlivRs&Sgj;Y@L6xU5Q^D|ee_!M0ZD>?7%dM}62d zwDt*pTw_AH7bGs<-8cp7tflGdO)Hg6)nFSbK?A+k*0wFY`Ci;beN#ita7yV)*+iy+;j%F0Ue^72Z`M|DjC zE@3F7C$C<1lhcYxq!MNev-#1(%1GF-DkqcMiM*LT)-#ncths@DYIJ0IWK?-IeQJij zXagy9^=I76E>nhPnQ~!5y_0*~O(Agf?*H}nCSi2N6gFnv_1dnUv#npK=Q(C|PfJdr zG-aI~AfQ`9s-9&HOe6Mz|BTPV*5pV|8-vlBmibQ(m(@^5XVul!*EjxDNSj(*dKOO_ z%B`T?78H>#zZ6){Ee`vrHtV38ZDKmyUntcTG!mRWYZf`NJoV*Do|g3PK7o8#wZy9<5V}DH(1afePR~wo4+aeZN zH<7~V>S`tmcLivNhJ97`u%dI6y(o;aQ>bD0H&sV+=zsIv6H8L`Tj8wS4V%>?O!+Ib zoA-g~5nCB+V~fPm(j^#H)F;UKw&4okCTP=iKLPZb1_SbU>{$UBOEo@B_p>r z7V#ZE<*kO9`rKEkivvCFYiGRqHS0xsiU|Z1s^=w{rj3&MPDyr!a(lrjuRwwj9 z-)6*XiDdbtJ@{jNq@6-;=1T$Fg$SvHR_2pe{jZ)dn3M$FCc1e`PcrTE`Z{bblDH7q zAQ?aSmz+efvx6t-#;y*AtJF2Hps#C}HT|1y#gpN8)z6W#+F#caq2K-XKcaHpN6sfv zC?zGOrKKe$6jE^t9*66R9h+~xX|AWMt82oa0JBfW*vwG#?wy3*en}*xUY@WONnanF zgZ*OmD;v{WLop!gRbr4xx5gGb*WJM2>R8E84>Gm853|nWZo7!|VC^jD)+>O^gKejL z_8_=$Bc5FLFj`WT6e6kyW}Bi9AkF;P_V8`UFuRn(!rt+*vHAJI!NFHWh48vQrgW2O z5wT_Q1IV<1%X30_qpjYWlvqR!TeLoH5H8QWWbz_?$fkN?s^+qoDr_bf2S0XiB6Ntx zu)f}JQ(i+KB+PJL_f||t!nbDI*&HAMyefQ`@t;@O@vrMEYMv7wA4doVxaFcg`0=Xg z<)-g5CPunplW{SVcJiJt4>$H#$}FxeN%R{1!4aAIj`x!TxG+@e+K#@d$Capu_|+YcJKdd^OX zX*+x149}6OEkUMcuCHh`ySFzn7QLJx0s8U){;A+%%x9 z?A&E!mN+`vXQ9U&i#I@PC6L-l33|sGrY<7}J>re-TdrYe16>ROzW}Y(7D4MNdii5o zfFbfQw`h6uBpfn8+iC0AqxB*Cn+5XV_#~@imj3wB%aTV=C%6qf9|brIKwQpz`n3v7=Vbs?JDb&}6ou-#jr%jFZ=aIm)78Bxz& zVp%7Yz`yUZt>(-$yeP^nB*RBxdQlI2boF%QnOvnsqwlmo=Gs*7y*x>a1RO32Ya)mK zj7OOZq*`9DI;pB--PkpCrBY5`ULJ?_5cy+gcJ~kyQ}5m(5{Y+G6T(fL^p9VD`INQH zo#|M7TIPRT;oz|=Rh*fcI9I5|>N?>|l*?xo(@oKH8%q$-KxK60?X;nOAbvILRYab@ zzCJRb2i{N`{OV_TNmoy6X{sI{GPgW+dG(|Fo9JQy!z0h)?^RZ#-VxZyY~B@IO}iKX z2f^^IkFw|I$NJg*WAo$e`K86_&c!RV_$}t`M?8hwXgxJ}Ht5U@4;J%QhHXe**TgdX zW@66J==jI3CBO_v0+-d=j-egUZRIr$E6lg6`|xvqx}<`@kkB+*VODK9FQYrPi9U;( zH~_Zz#Ep!Bqs;2=5T2!k^k7*p$s1&y_ErS1yOlN#%_FC(A&F)TVuM#;VUfIct}|1& z-BIY!8;&awtL-{wW=I+ma=KM^v~q5CZY5W#P`5bCvZlm&7e85!Kqxy9gvyHPLB_@@ zF=79TI#;Nbw;$H@rd#d0 zJ~BC9NQyZ(8nBYo*rMaTGC*zn&AS&4&a?aAfPdG3aF~sZ?TsZt=2>aRro$D3`Mw*P zFAw{gz77zC?9ojUv8_WxZA66K6qvV#yXvpO7)BFTC_ZFYv*z0baK>m3wVypRImMl! zSANqv^k!sa^rza|pZZ2dhMyo(z0I=uj_EBcpp?g$pGKC>lGK))5FU=q!Ysqbk|>B^ zC^KgTPO8dS_u3>BNH_K+n>{kr`%`x9$J(I8gxK5u7>p&4xuW>T^x|0aR)`fL7P0s; zgYxcv_U7-t(&(=xOK?aCaS#q{$=a>neu}> zxvcfu6ZYI&8E{ZlO3EYRl4(oxBkYe}%dSpv$cKLu$8Dp^Gro&yzCRVIaImfq7yo_z z0IOV;h%i50q0vssmUfNtGPbrzK~^EUrek_$X=aL56Rj$sd3jX$Xf(3j^5^uhAe4t- zYK3w*j>&$3PyA-AD_mJf*IurlT;e5&r|DJAh*Q7HqZ2i4PNd|T09Ec=kjIcy*l?o? zu*6YD-=ZvdY3l@U(ppEoi#b9F&GtfetE@&57u zSxRkDK5C8`i&B;lXm9iRZ?MFk;{uUdm5W(upz#q(t`tyMP&IFrf({-4^0?lSk*5&{r4mZvm@`%R zK*W=g(F)l6g@|eK1Oo_qI^16cOqz?=qERU;JgIA_CruWFGx$)+gJa$NaB|yGOe&?F z(!X3W(j_nMo6`0Pxg#H;0|56*X1M|>XJMwACK z-nY4Z!ws|tLfda=`9N)LU3K+vQ|Htiyfqif*RvTzYu=Gq!!qFu*faUqwd`Rt8Chvb z6*V0*+<~UL>hCkE>xVf@6VuDXwfPV4KYG;1?yst-p6d7ly$>8|Zyx47%j2^R6I1mS z-z21xQWL(ZsGFEus*j1T9vk-8@97PUCx>anhU|im^U9XqNhLhVWv~SsG3V>*iRI;` z$+{@sVyW1^?BjB%S{^IqyjdJ0T+8amL~wd;0~L=#%`|s_T1^XkftaK-RjheVLnN#{ zl$sOpgA?^i%-%Yr(PL$SRH~*XGQP7p2AS|NIA1?pSf@KoQsE;BHXYb-jHQLS)t9#K zs;m9`U;DxSfBjqdPonX;n-?Jf<>_R4UR&evp+ko?w9ngxdK0p45&VrW80hO8s)@kJ zJzqQz`mUcb)SR1BJlYKF?j9zC(LCBrB=*Fb=pgJI##ZcfHJ{D0z){-HVWFX6VWC0s z4}?HVkg;dkCj8f z7@zty&F6S{ zK3>i>h2?oWN*3t$lng(a#|5mS=;dQcZ3X$oJxnGWr^`dURgQJxgeI&>rLs#g+mMDP zpPRj3A6PiZ3=;C4AyZdzVG=9yZ?2(QRQ6qO7s{rSASOAPnO5Rhg``41^xiV z%^{A2fs`ZOY_et#(VgeS2P0T56&+D(Qtf_g}E-xKYlzr)S`d9pK*YY*nv6`ab zOieCw=^ayW#4)G`p#?dql(yCqW=RX9B`1-ILEZk(VvG`#Ib{pnHC8YqT&fC?TYuupP$F5~fWt2ZJu`OwykW-2T z1DP+{hf2oB+Kt!o<3XMpK%RMeo@rh^SCQH^j#=Bd+aC5Y^DIr6%12Vtzw8>!4qVxo zTMSowBi%F=BI}kq=r!f=wv$X~85&~dU|{D!BD^hupD&B#bii@{&WTc-_6_9uYNf}) z5mI$|OmtLaWJF|CIkl!^d9kB9YN`T?;$#=4lfzg1t$XCmTLfCb)xlnj1#|usA0z@* zE>ws~TBhda=NISVVljEGh>628gt~-w*33{v>j(P>L!{q{lllICzyJK*zUJh**iC_u z<6ofHvgS@p zzFxW~IsI7#&};2rK{_F2=9pomVgYHo_&FMA$jKgpT@?pU1F*wK1NW**jLzqs+N+P) zO0kaRNX$^b7}$bO0iPh}8g8P0an}Tr?Yhg4@o~8=jMg4TtDvl<;Q?ZEpvAeTOi~iV z1dbusDC~A26kV|t%fvf3HGEF8msDCq+(k96j<1Zk$UG@A;!sbjAcl%<*8}2yCu`;^ z#empkkw34L?FxasSWr1zUsWCx6=7?A=JXkxNc!UF_|h41*+8<19vPojn318-tbP%_kj%l!_coME+g8ej>nJ6ht@Ox%X0kX&& zVzw28sH0P|e+^hm56gM-s~6yq@46vuN{J;rKfZ^Nmt-!15Osry>AC|ouX440_}J{v zGOa{Ef(%|gOI@0ura$R=lrdPFndxt3{I{#|>G;}TXuU6M9%K&ILzdlqZqQ?$O$s~; zQ**t5ljh-xL=po&pDsvfUS-Eo;jD*wfF`Pz?ji3W z_Hh0Ekk@=cucpKC*%huTVlIH0F&~rgPkb3|lkBC)Sdg51C_ zh*~3KP_#R5Wbcmhbus#`QJE=kM6}_F7C>MEs?1q;u%icR*?e*@sBZ(g4N0K zx;og^Y@o9`J3HtNOZO?W){Zyg(?bpSncfTwwA7X2U7wswh?iz!OG+j=_3Z4-830+7 zzMQI9ZGTe^fqlt@guJenyi_7dVvP;#EPbxAiuaJqmug-8JdERd-jMx2J_Zu-^$Q(# zhEiQqY!OD}-G(T4(+l3d8MNNT<@q5B5~SDE9M(3t-~`(TMWj(}TL}gjdF%o90dHOk zuNrg?eTsL(rf=iVl`@IVYsbeS8dR)mX{=NowbFv2To|aSxLa5VfmF^&a~^Z3yNUCh zu(-4|N-iSzjV~_^66&iT5A{CESX!#QN*;?rnm3}%R}x1WBAlMZuLQhD$7kSGRWsB% zwDxKRhd%$V`uX4g{o8xzD2mOBNVMuK@s=IP!^W&1TB@=*|AvvD-%b62u(Z@U{FGYp zdhqAx|G6I-#gqr9GA3r|Hi}<8Z~pSu=mt)%^}1wY9j0ol0m^Ql!WhZv6tNU`rz_V_ z4BxKyH`?{|0N>!0F{U2ad%+9kWT>rv-V=%Uks}m7g5B)RtX>Rq8ky8r6sfIF4v=MU zh=c6Ldp2-N8fPQbbZIZs?fV};|9}6!ZR}r|9pLHcpMJ^}{>G2po9B4lu+rLQ-Zxy0 zw2_h8riObpdXv*LP(H2>W^Tq8bTkxYWn|f7{hUrRDXG*B-W~|=o#%=3 zkpxOxX+Ay?mh;4<97>v6YR(E9*ugpkD4=aqFlXLXZhWD8`>Kz>J+F#}{Q{nYIxX6BpUQ0;J7i8VV-@NG`XKAjhBpKBS>9&tW zOXZPtV_Qk)Mvl8wRL@4+s)~U_Xjyq;PuEaa^7X0b1gYHN4(iMq;#%U!URY_#Gv|4N zb9y!c$XvhaZ|a72xJ`C zu|uP9qym|_dISz{29ko}2Zu&&0gy$(vb3K@^EWlL>Unhl0FxrmFocKhWA|o|&N(yp z8{T$0t7*m^elpe7Ljl|~yA?IHjrA{>I=H%fc(}Q`hGY})X@|SV;5a(9j7G?ar`6sz zHog6GnyYU>q1Em!ZoEkHHmxjuvxy_(rsxm{gU#XGk^w2LC0GeK&dDBJS#(+SUSQd} z23e3i`t=x-(vMH;>S_BCkH1?K;-bA*)6_NC#aIoJ){npIggy_en-SViS@B@21@=VX&FZp*OwEp{`a& z3n{O)J#Ym+CmWQ~GsKA1JCfIupHFD41{TBf6)lNtMr;R4Sc_vA9lT)UGPsmp5UYzo zaa?`$x7sc)FJD23Dc)6AJNACR9hp5T6oU`s#ko4`fbin|91)Ud&Ug>vF<&qvy(kO~ zzCHMq$+r;ON|Ihbzj-r*kbyR%FXv&LV57UfT6=lj><fJWL|$S z-|)F0)iqKMF{hZ)%3!omMw!g9K>y-mNn`+`;`OXR?~st78=-zduw!)hF3J}UirlYf zWyRBI26B-z$0Ul`-Ncip3=MT;0OY>nOKf%f8}l^0cOdFCq7HOp$CsB`JTc52!c=nh z0}Usik6p`9FIPv?^ID3+!T1?k+P%9m0$~+56d=nFOhrJn2bdm;(Jg{i*Hq1ZP{Df( zuZ{W$)5iZx{Zoe_5ZM=+Ke0jWi)-6^qk@pMu$%rS_;~*KHp$ek(HtYY>Vb{GHE{zU z=N~HN+n&~&^9p2=df~W|o+5H2B#xiCfJ!P&1%-PL8#J3uk^ zAbo10o*K#5j@9E`i99tP5*u|6BwH{Kbc;|jp%)pOC6%iYo_%`dyw z@9WO>NXd?kiQ1;_zlGT$N?g7)795)sRTcG>xJ2XIW9>?29`E4X{+yNuC1#Fd^A>g< z_BGn-XbMV3Mda>s)4&|vmY8;-xv2uBDF9(mC*B~$(?`p~+=Lh9qjDV^j*Rc}0+^Dl zb!w|}>YwEBwxN`)TLeuAm@wDs{9+_xbj{DSG_g&K)&Pj&w2 z63Nsznesw$KQdueGBy@tVZuW_M0PNnzVl4Vg9HN*4;Lis>t8T(GdicGo|3nBw~o_| zkWj<$U-N$W#VVd)CS%^pti^kpo;z=L&F6xQkJhR=ip#66Qt4>ikF;x+B!x@z-34Zk zQq{mg`&LkvKP}$L+1bk*Z7hgN8mXYB zG2}=2f)LY;e^@Z8xsiZ{+;&|xP@uBMYH1U*NaqBn3l&%LmQhn%4;?<|5*!wMVV$U7 z5WtOgjSbyHiGzxX&H9Ee5!~+G=UDuDa?Jse^2Zl+-AlWw7d)V`rEf( zz{h*`rpnqZ^+sy5r5A5Zm=wbtoGFj0Y?z*`QU$ilT_k9a&IJQ^UoS~Yk{-S+=}2lX zeR1H`OO+Mqnks8KXYA?);B)V_D9Fxc!;prU`t^S~JDPx!HADtV14&8(xFSNOaGI;v zdMIGN>xi@6J7{6f%#_<*ZGC}%-TL%4;t*|dI|ucNG#IPeo`$4~iF?tOC4^J_3dR8a z@etDEqDv0D2L5z8w;l}0I+2J|6-{cYE{^A+?j>ULze>)mJ&qK^Rx4vfBJ2cso~~KA zuW#_&I_GA}*t=&+>j#H93z-C&6(6*zFdu$?3M($zUO!>q6q+L8IDXg?2_2Myod*hq za@H!&;mfEz<&K6U+D>CDFbs7{?6F*&ocrtF@P!wB;z#+<6d}t+>8!#WOE60dG4LIf z)=3TN>OIKJNjLD zqyO@c_pRsZ7?zmM1fuf^SVVjgRslhoRFyi_u{_L_zkoJ#3=MX2(~-!_`z$E2w5_?P ztE)9NH5H$dkWk#tXzP2;E+^~;I{qc1ILnRmZw}0@mseKzIXh(dxiS2LWC>Q7JPR4} zK(X+6-euxq{Ep`oJ!cEdi~QxwXk$gRr^o=I9X^`!Z`O5mS+>OjaLyk8fNv-zDLq5T zZCa4Sg7^LDat=+{#@_T?GK=)FRwxB;go;l9f5|9%qy&yI1WTP-3;|8wJ*qY~ zO`Hmra#`4^uJ_H9R`d!BG7uOd8I&LvvF*nL-DaG`!4*MQLkVevn5NQcf2+1r?qNP= z+OiPX0*iKFS=?VBz2FB^j%VtX5T&aUB)>y)Lv$_fGKbtPmhrd%}fw!DCcaT zDk*O?Vf=hEE5P{hVHZCqV>1_2XlT$4U*AwaUsO{Dl$Pe4)L5ibnlnCf-@$3Oo!dT0+b>iWBrq=eh)bAYn~7K~ zHrXG?>?&<#6pyu)KC7()5b9nuS12(M#oBmc);iI*9S!GoSZ_7+lt#KuEX6o$MP=(r z3`v{zGW=><9i84(9esS0J5gxrJO(AU>U!3W7iE+CU-pg;L?GtPf-Pha&5PTL5xXNE zYS%o;y8^LX1k|uCwJ>xoh5hI4&8m9ktT0(%(z2~VNNw5956fT53=4Jh$+`r9Rd#PP zM!6KX4ZaLwu>?@R**M3cch1%?#SjDaJ@Oiq5!W7y|(xo|??aD~(hn#|Hd?y6b& z;Do@n((zdhc*M9Zj~?923~&lwOXY3Vw2RNYl^JNNvBnEy9Beo=w)Co5*U3rR#d&x0 z*h;Xq{d_RIT#B$aR6%%>v|s`&l$FnzboG2q=X?leC z?xEzcTl%|wPP}Jds(#3N@~7TgFIcylyYkOthLja`!!5#-@)*s<<4h8b7U5=!-1!#A zPyH2=$$l?f=NAnIJ=b#qT?`sC7apzmK2wZ>I=Y+;j2Sns$GFjsI+S_nacQoG6N zHD9+QqU{L&)yrqJ>S$Y=E9EsDZeyenUySBH zclbSbUfhvQvja#%sXS=fAYh2-oarZJ|5n%+@K zO-&(`Vt^v*+`IfPt&r!|SINwuX*(btw1HI1m{5v)tA+zQSoV0uYl1bDIz&hj)*>}y zLj|EX%OtiU$u*pl%5Wx1ueb<^%J|BBClA(kaNcgAMuC!XfztWkAyZwxPKVTJ_uqzUohPW!fDpYR0igHe? zIj~tMO$pN`*LDxUmm1zR*mThqdbyqhOx(=~cxkrtA_K@G{7&1wP+w`G0rMZbH>p#i z)s5qGXZ6x$fr}2W(KuqDzLCY@aywb`FL!6g`JQmpM=V~D;nsbgrsYjzV{G>LSpSo| zDS0Jr%|!Eqb2X!cZ-KTGtN9qkhuhyTNDco3Kax$C^|j-m-ShbT)KJT?q);>OADDIrZJR#z1PE2Qf$mp165~%Ll~0#z%a3XiXXj}(V|jwX6~{S^OPG8mr{gw ziq_47)^ooSl_g2So>#*3WRN z&l)(Basmrh%^PG5OL6a9#2E~?WGce5iroC zEwh@?Yl0FfB0*Q`xfAu36_u5B6Vp}4EQ?#Q5IDV1e8`eL#6N zr4F54V$ahGuIs>m-ve7*hMk|m4mchXgwg!{A|GDd`^2O>W6l~voh-FkFX&<&R6&J! z(<#c^YqM?{3Rqy28JLKv{i4bKS9#Mxt&)cJ@3|kSnv;0Te+d6?fvc+FhwWYuU{WIf z7|=qkmv-{jT6sk=Bp4YWnnzMbSWQ26Et@#PP9Q>UksEsh2{YtwC<)qbcAbf+U!G?_ zCWpGoK>IX|LPG7!ER~X4^YPv6sim=ze+GOeudJ+u!2CM84in1jtAY2Ax(EtoT|_Wb zL#?25%im&;seRZRMsB|6kQ4~6c-w(V;anaoswAVf1XA~td-qBXDD1^2J7jjTW_Wpg z?<4Jl8*$~BtT<=mJi+9NsF|7mp`pMqXL;Cs+1bCx{`~$|gl_m9csTVC0c-892x|ye z44JNFx-@+Sg08yUUFxCfn%rgy#mrSBn???ONXFRrnqQEodx*2ApR1voKDstKHYFH! z&GpyrRS9fdYysafR=-)m%gj~?Lt$cuEm1<{a30xlD)AuSUX?dB zkJXZs>@R?AdRSa81?iJ(ZKmYm627@#-SoQp{x>*Ed#(k9;Eaj){50)D?eg<`pMU9h zehZY;I+1b0oGnzvJ<-OeK{SZ(L+w7QOI?hJ?3)L8%Y<9*GTi8X^~ zJsSz)@JO_)?~EAMSb6?NDjy?V%u4&2Wed(Dh!YE@g&Eq+ke6UZL-@h+ znFIQExmat_K1gVFq~Wodh)pi!>{OP9p`RW9=_xTRsUj@pyXKgz+hjd8U-5U}&S_44 zUa@v)dfC!SIIMxnd9~J|21yZPsw#e3Qd}z z&YS^Qk^rD;Xs64xSg9LW4?ixX(fIG&;_mQe`gJ1>-Q>Gv2wh0#kFBL8loBTV`v~Rg z#ksRnHn2el$EQV2X(Vr~5;)e>xhdP8%6y9&u=zBm@)sfB zUVcY-e1P7#6X1v_kAPo`mw6}C_C3j*5UojV!;}`E46}zV0*e<~qz(-+0>k{|BulW6 zog?%8eJ>F1Dh6hc0*dWPN4stWq3Mm_z0OCFunIdzh67Q`LwC}l2Hs`tXLR)W) z;w0ikZgDmR5G9;9uvKAkaQF(LMe}-MNgF9O+?%FL%Qvee_AqJ~KGFHD7$AoNna?UGC)A@*v#0t*KJ_ zaC99S6clp9-oeS)<;%eQf?g7~Ah2t!s(uSfk*TZ7sb5PnKn-iT4b{0#C{zZ13`F2+ zH_UjQ8p`eF9l}8=^;O>B-BfYZyMyyxRddm;2~b3O_Q?G5R8urhe`#N98C?A;i53dZ z96}6ie8y}3pX_`>!w}EJyfjY<=y+`Tq@1SpO6$zofu@7NyiL=GZwVmJ6UvmXRthN> z_vjUA6z`9UoZt<71>&CPOkP+y`J#M7Z{50ucC@oIHL@y5(Ss&>deYlS9NS6A;~oYa zq<5}WgP^L(6$y>uZkFF|dTGgT1D1Anhj%(I7qVTQ)(1`5ydd=T|A+8HeG_N4le+nY zfYVb{r1A7Nf$)s>W@)(-VUN-BwQQdeiXd>!?YVkeoPwQTNg?vEBeyedg~fk?)R?!g z6qDc8fBp=9_1VAQwVrmSIi;2mkifz!SP?CP2j6Gx;pBmee^!=@*5^GnEG)dII}ps1 zB0`o;9edL^c^Ygr^g9vF*@;UuyRgOe{2qKhI||6$I8~an3aOUNE%sO)y(oUY3~?bQ z)>gHu_oTO|*R;jO2*|hV*)DMC%hOCf8aXzd9O!PRz5Sg*5UVucJmUBonx&-;FC64m z=}ef92xngQ^S@r*%wRR^YUrXgN7Zbn5jPqwq*(W znxt1kAV?Sca)gQ2%(PlFE9t<%Ou{~y}>VD zQ0HnA+e{({GvY$?yOv`j>gSq}`!f8J$z6|dk_-K^jl)kA7@BFo<^tPHf}gMYjeVcE zmMR@A8z6R>j--zCm?u{e0J88VRn|SKXC6LQJVGwIYl)OpE0H_h;cjff)PvXi`{(h` zztcRSbt>x&8FeP;!gnzL2Y9h(r%L?Wm}i|$%lq&mvy*PP|Znz{O8K*t+fy5_L} zc_|)WD)7(*+gf?y-^ttGR@QN5haY{mIsoZi{pScx)Nk*^$!zu1(aURNv=NoTVe}?S z9$G3Z4D|@&TjQh6Nf5lM6%g3x?D4ptq8r{dZ{=sYBVtBHw@ne=w&Fe-QiZkS5RmoN z$1?IPk%Egvcw6Fmp^0aE0$%6}cdDw4<*pEWt|cMe4S-3TlmfM$l|Zb>?zwyO+~Gr7 z_Gr^RZ->durQ!{F%?4Y1G&1{M!Qa2t&V7$=donFzc;iU2eQ2e2U0@v{DdXZS{$9Y# z2j_@wIa90&ZXKe;(gIgrI^nhACW$Q$CuC-(@Kg#^`HW9ZE1$|J!C}L(*i;gqZ{y6Y zLSo?EyM})mXLJIm3l?y6f2@9?A^Pm;D>Vx->q>X)Wpv@i^_5$6^5B)X+7M!|RdZha zJkwl_ZyfiZwzjpg7M^;-!7dK6$Wjz zwqI)QBv192U}A}-44f`6yL0H%*D|t$J3~i^G)t5Do`6rXwQk4`M zJCV!UYVUrsJr;`Q>;eiiworI`f}#WZ>NB!$*tHiX3S(VkV#fB2SOKwrT}{)BC{QzU za)Z+3Fi-lfs#RGZ0|4cvu1xDwU3^+b>yj7R+P198bqU0S4M?IPa)kCJyx`|O{D zU}wc#)z0&-#9Wb4_UbqEkx4N-fJsX^M-cv5FjH#@KVANSefa_X=ST~r;E^eA@|LRk z_7qfbkbopk0^!J4Xc{;T!1qOWT|J!xGHd?|BDtzii3LIv2#4-_G5F#8ur#|m?zPBe zFq&K2h({D}2=}BP3Tc%DX9iYXqh2ld4X54hqXn>xfu$zB_OHq0kYK(jid*3yL~Kgy z3B)F%vWx_~OU*kupFM}XPah?x+!p`rK6@h)>Tmu}ho@#}9=DMF#opimL1AY%1qF@QUszJKhKsXkuN`z5X$NO=+Is#r@%wx|N9j0AkKlARo2U zl}%IJsZJK1&Kj7W;ZCsXtEo-Y>c#=?M2)QyvDN&{%zeMZ(BE#}%Ip~_%fep-S77&e zhi}TG2_a$F?cgB|Oby!_c`dttHJ#<3^ zgWoh=F0?1LAeF&!;=BoH1>8_Yb`f=E6n|%?YzYW_;!YWG#e>v1Kmdhk6+ssfsPBB-P zQr}SENpJC1Lxv{Xa>lw}O$!ShW6U^j zUO)U{S8t?W7w|fB6zI#{g2hT2T~q)jt%`nveeHfikKFqW65Bkb5uQ(QXPUl6X|4NK zw*pI0&(E{$n(oqf-0aMX8I58IJw165v|Bp-qCRyR39B>$YB!mQXgd|3wl+b14;nV; z)4UrxjzIMbKY%xMv*_Be6SaBD#jeGMnH>D`-=8Bn@#I=|YRP)|d|GlxRPpG$x z(GQ3db9%N*N!uCmFzyB1?tIMv`@Ane;VmSL1phg;;Uv%dg`!aQhb`J-fy#nNR8swf z=p$-^#69$ZRB0^OfBXv9ysU7Dl6+MX$eY9#Bg5}jvl|mL^noVMEN@iZR6RLB(UJj& z#d7BzgTgZLzg&{Uwh`f|2z{xwX+u1z=(`;tlN(P3c-ZT#@c>45a_R4yiwqzC`0eL+ z%DGrX!(etc?dYa&h*<7w^9d5zyhBdD`mk9#+8PTKxG(!TNEX(*Zm#(W>j+bC6;~tc zC!U)<3L+;uV-ybihg|6*A0C4}Vc@?6rI$E0UP9sc?zxYlMORxpJ_LKl;m+st5;cELYL2}ndyK?_iqzlY~VG+S<^ zjdmi>H6Wj&Yt12~6!Wkm&+CTNo_~l81cGZ)Sj^hSQUSJlt1YIFq*6Mr6cpc`_pRl(@37}p4V*>#clg3g@^EXS)W%Zm(yK13 zptWU|vGcpI14tF;0Fgj$zji#z1J?D^OADRlySA0Q8n$p*dy|o|GP#$-I;)h_(psF8 zTkxV76VbHLQA4e(jERo4J&SBhL;oBxUN1}KK&kPjx!-6GhI}1<0{3qv>p1ew+^Vk7 z4;d7NjzFw<@^#_e0D1b8M+K$3-JXUL__X`uOV&W_Oia^4BXV5(egFWR>q$gGRO}U) zz|NETcDD;V;U}}6CjS$1M+RuCJGpsj0q&dQCd!wZvw}6wyZE_ZkmVU6h6Rv~r+o{7 zvs3j+Nj%QQisyE|nZYjl#wfe(pg8>73^uQ7C})3@_Pjd!oBNMn*T%2vMOYz7gQ_(s zLM5xzUwi#o&w1_u7A=Typ5gW`XMdv+&`LqFeL(E&6`M630mdOs^BO_&Pi`H7&iMt%XEP#9Er@9#Q^y-Y8R~ z16gt#*lu(~eUo>@u!v+b>JU)(auL*sq)4#zsi-a-7p^+89+Tj!fN=)7Y* zA>$@KGydxB2d`)9dBo6SHq}$L{z2pfBK(xK{dm-9KryVXdD+$wZJYi z6gpecI7N8gR84K}PWr?4=ks^e&ljdRuW5z-Gcz>W;FGRY;TSNYiMzNw*;N|kBkVNo zHAWllhMo*}3FS#lhF;Nx0w{66&t4Y2QqEx{@ZSTO=XLkb&Mho1FD))D@k#KP3GAii zrG=&C#o?ba>g(%js;QOHSI(>jt2VP=w<;N+oW3Mv%JXOsBPaF)DJ-!#4~LNiaskgo z>N^iJ((va*{U20%@00*8w%x^UH@={_ADPL_s%C{jCk7Zf`Wpwk&k>~i&os?-G|>m2Kd{o*R+n9YDaq*AeMPI?2`rfYE9w`zi)Zs--CJGEQW@r_ zGT2W$8blhmARool+?tsuX=(8xSM?yquVtIjlGh^vm5S4j|UKWRk~A_Z0h2J&mhnUG#UYa z-SlD?r9F0=xTD(&xYR4KXNm*%I=agwHJ_zDXpi7m;~^EB@;c6JM|FgP91m%NVYIfC zQi^kM2^f>lG!2Yz(`fHl%fG;f>i@3U^S}P`+i(B+tBBsTO6MU_6|4x4>ErCDf|SbsHSM%3Xb)b;%HUoTnF5rS7!j zEKSU@Iqi8STdxu>t$o>dgyg&H&6w$R^7ypiW*{@S!yzviu~m)Lbq(}>_UQa1tBx9N zdqzPMu~|?AN4UW9(U|Osjwl6{%7wQ!Iae%o;e%ELYPXJypPeEU%d`Mu4NDKmc8)G) z`T76p5L0Rm7wk*}_brL36&b^l0IHhdUEn@-&BO2)*v{1Oms?E5h8!P5=TueK)YNe% zrXstXwKqAjp$i1%r8dnpGW#>z;+*&Zk*VAE-Y9PuhX+5``a5~}qENn}@DES3I0P_; zZN2ESsxVHa7cBEb4M%&u(p(p--l@eU5umq*#~DgV`2#b9mAwMV=@>bx zx&A+oe$zAwn`~)gUvCFHXEbd42RmyZpqG$KDJfwNHRBSn*tnE9EH;7IHAKN|12R5qJa95$FPKX`WnAV1$slSpKyD)aGrdGZclGO4Q# z0=67_fMpq(@BgTKc6p3spaQb;FJ2-lp4`ftb+H<7`ETVC57dt69@r+E4UX!+qtEw#UT~ zihd72cT;_hL(;oHLCzy5rdTr_8+v%GC+Wx#Ph~Rs%T<*o?JOXO_+|vt$Z5uDdxpAe zYtwOLM-yctA%(Hnwc1YLU@|3pPRuIh$F)c2wasWYKzNeN)sBm z9iO9RivGS2bHUBW1wQdXP9=nGr6iaiRZ`Zq$n9y)!QG+c;BcfaUc>GoKjF-%dqCGb zQc{-lIj`FmmoY}F6GA{pVDgxxgsX0v+NNj}%E#62!ig`Cp?o%am_*#Wa5C`m*Y&wM zAvgZN=_!yDGW8A{8yh|t=q?Q3&Emp_$Ru z+McT?<7o`(F~1(@j5)1fO`YhpkxI$3$R0(Mmy3rQfcU+DCo=;P4?xm9Hm9U(XlUry zqLC5gf9c(QW3MYrbd}}hm5!QV5^`Hxa9__X4L?)?(DS17cyS(+FSXvBX|mnG%f}2M zQr)3wMaBmZZn^5nNNYLY$_^+~-gxgPLdc^l%y&@C^X#H5=1@;5(L!F=921+GbFYA0 zRG5`nM9NLVD1ohe|NeULzJ}W2Lo%PRH^q)eJbX1eI{s=?5}1a?9=!Luzo~gT?Mq@4 znMW0(>zm3|B`CRX9=fb*|1I9?*qn!iKCVDt$;ak3w^C9c&Q=I{Pv+^LQ5(wZSe&KK zzFb#Lpm3#%HP{X(eXcH2Rpm?!9ho{RMI!F@ z6|RJyN-tVkQ9Ul(<&V})tEUeP{!Ad$K8AxZ>(j>+ z4u14nDzI3H0A8M1mkNjx0P=p!PVo>%nRp|3W`#LhMl7SB7XNpfOBuEOjM7*TLs&zJ zX$Cga{?#i5B(aosN^UNton#4t%fb<|H2P#~HD9Hbca&W8*fc*}kBbj=b^dI=*(l5j z$-{_sR_d1KuI<2WnBw+kW+|gNf#>ob7VTw&4SM$yvOjjX*ejJL2aY~o8A=KZ`HM7v zcNFScaFCtZrL(rt)P{*!7V;z^T`Vr|kFDkB{}zJ5{`Uog(F|KrTvB3UYVl}UdO>1% zTdeiua@BZOYAlJ_V;-urNu`>E0UADzva(L0zWUoQ@Cf;iv?kir3{0@9PD5B`g4f}U z-h)7&=TDV4@nUphDLFkeD=RBAGaZl5%*-T&-OS7g4hi$Lio5sg%l@C@w2`h!HTY@C zW4njDQmdy2XxS5d7S~UATe^V z7UsBdHv5%mz22spwZ!Rv5xT+cfDFERUeUu4Oc60J?ZML0M5-*UCbSVgB1$>;Mao6> z-MX)aNg~COltS)u-Tjmla@otDXjS~g+Sw}3RFx23yPTkS%U?(y_5oCr8uki91dF)ZhuYJ=~@M@adS$##l+T z7#4c!8grhvS2+fNT6kYN)nknu9Is`Z{ZEd{+;rZEmd1dps0x~|t!&HaIBzggT`*{bwjv9FknE{>zYot_+$@}Z) zYbEsWfB)}q0t3&RKdX5H7B77R0|R}X6KahyveyGC%r55i*X*&zW|Db%opaE}6v#w4 zlC*?$f)dTGp92$xaj4vY7Xt(X`oxM=rX7>kjm`t2fJZ*Glsfp)1bw;+I^tRh8avgdl zq_1nZi}hcVilsKadFfCx8)@lOVf8a(9nfYvE}?0#o%zDp*URWqWMv(lGc&`j)zLq1 zWak=iH!~|f`QoL@rh&VoBzw~NbS!vf}^v6x`HZFn6)kY zN(N|NeSS}t-(y+c5#FjSZiIF=HuLhb zRed3~vhNfUh)9}XiOp?!vAXYD%V)p;{Qb|rKl}ds?*)JOAJxDA>$m?|dkkONnVFgz z8^MREo%3~qud_>#7KT0a=7~jj|KjrEQrHFqq%wDwd8ML;HTjJ2|Nce$<^TPX5iM{c zkK$Swj8b0I4m{P;v-t_|D%dMY`0=Wrx6942bl8*!UNt(U@wyHU9jf|vzPe9;}4rp?^pxxaf;P(5Ex^5|F5Ako74{nuo`#ipkOSy_VywCkAlRsaP zf9ya%9gZY)gWXrt)1(FVMB5o{caIc{ObYCUW1lWka@f^Dp3oWF8{WA3c>aDYk-}h5 za9G>=g_`610#i;3TJuzTd=SEdcXn0*SiDH~Mxi`-ed_W_%pAe&fNkLnoFv$TUO(R= zE3j9Pbx>gabTil#Ee)Mf;6)OYwp=VS?smJI-KE$BTwZfqX-=$(#3$xDRL(RP+uB4# zRaDjYv&Y9e>dI|)@@7AVlkZ+tmx!8YY^-=$|HsTP?T)FvRALLGr>zvb&CJm~KL=J} z)(u=(qa#RpkFqjauZz!l{%7}`Lpgl*icPh)J$?H4F@;_HVv%L@{MX^B*ycFzm6WO2 z=?H4m^i+L>7=T#iKZeMGomEQ=6Mpo5b}qbCUeVWh2Op@nZj6i$YU893mz%A8gAV)j zsB_r#lvYe?r0r?=%g;nsR@XH&!bd|R6G_Gur()zkL}&i??Z*1K@W9mnri+Z}sG+JG zdWGJ7(EWzdQ%0u6XN1v2n{~lX+l9%|F?v7NKXP^0m>O&LpkWjlDhl)mzKwde&*WqGX4tJ;czjkNnOv9|b}QRoODU&&urmVe>ZpOw9x=PvbJuC(r_Rio zx68w>5idMa3l7!+maXzl^c7d&%+G0$;}l-t4c)qR7oT-EtB5?@ z-3mXl%p6MzEzj#eA&r-iZa5CsgHHxowmT;xiNxJzVPQqup0KtQo3sT9iEpnlGq)3C-fvGZSF zfMdV>zLv!K@9ivMM?(P#P5$~UJ?v(B7P&S#Fg@(a(pud?A*ybIJ2jJ30+}R|%Cbip zT|{CkrKi0+JMYoc2`;CxD%wWy)m!bt&KHgG&@I&fTYxke#o<>j+;(MtfVW~5XLR_! z;4?c;n0orTC-?O-doVlq28HxD!`cGh{c1sl`n1ev&&O;Rxv(F{$6tKK=Qvk+#jb_@ z3H}iu9|#}*{{CsDLrF_qu|K1JKDN44+jQgbg@t#oo-C!Xre|U63{{Nxjg*CMyop^? zS6a-$9+WHE$<)lj&k>p9i7l0^oa6O9DOAr!_#A3YNzc5uqK~U;fJ}U0+~AwON4bfy zadB2bp$MaB*ezskgGV4fE8gQ;@GSz(R9^$pjLO*JuF)k{V)5Y{R)cJejx#T(3GU#H z1jcHIy*vM^Wv2KChh+~B_s=i=i$=(x(Q1GC z>GkW^KV1}xtdz{d6OvLt+Bd>j1>Ow6-;KZ5+{$QUGnqZjScR(j-s~SDcU@VU8Xrb) zNDntu0c?pH+SJcQUlsz;p$k4Pa!#g5n@SSW9wcR%!^Fw^q~H8kvygMjjdb)l*+mS; zCJ-r1{v7neo{^C^BSYCQy5Y0-wC5!y#KtBh5sO>eim_Eo^F_BI)yc+(y(XSK2eYcK zT~7-oM*7Q<(a~3rzQ#mR8{k-yLw{OR z{m}N0;ADRLU-*Ym{rvmie*gV9;rZtPFH-KJ)&M|n?x&J7Xyhz>dSUvni##A8WL?=b z16ysC({tuMly*|W#f;bOe0~b49LnSDJH@RG3hD7v)&zHk(^U0cfT^}~Izrv4P zW#ORQ%>t>_sm|&*43U#s6+XSMdG635Il0dgU*w)tx4TP-zv|`ZVFZU=5|2mUjQkLC za=bTnFXHSTpF4Qxu27{%-*?^ON~1SfZOq-w`O|>P@o-3BCLli4XDMIDB?sWsYR5-= zyO>NyDTP#EhjNnrbFhVlckyY-$;tlyK_QM>vevWa;dxy{BV_@fMKvxivxkPraqB-4 zIRII-D&05?Aazp@R4B^LP!=I9F@u170vwMqT5>QFI~-7f_Xs1ak7@rzlvH9_dQlM> zIf{yk2-&O2qnr4Q3<7)<7Lk*!w2{CLGRb9^kO|}CZ1(V*krduUtTS9nxF$+;y`=5@ zj5Q7^>brZrg)~kkxTtH{8llj8IWXH%cR&7C*b64JtB0>=_(vHYg+lpyxjLE|ozu}& zSCo@|*IeXpfB)^b-+upA=r8}X?lF9pz6xO3WgT6$#F<-SFOT+DS%uyT!{-+kbuU*{ z)2Fx{Raf?dZ6*n$U0oztJ8ERSTJv_WEsrzQ!8W~c90`snlD>}kF5{XqPsVf;m1xQ#$rsACHZaBLm2MdpRhMg zM2YBB{x{=dayogGiR&Kyf3(c>Fv7-aTO`M#bQ_;xX(da8xPY;x@?fV;1mCyw2_YBt zuE=?P#lDbxk_b$jXN>K<`6~nA;}%v~PQqJ?O@P`1LWY&%Iky|8-%gq{Q!@L;MIDL{(uQ^;epsxin9ESji!{gqWSk)O2t%dPaxLUO@BA3b_Hu(-4^(ZQlO zDL~pN(;a_?oEQ0<8XKNB(APIG@(v9S%Ajd(2h`fTzc$B~&kyz1KhK_D_laW*s(MW2 z4f7=-2dA}uB8?jtAnzXo##a+MO;s3XiYGohEFd7j$IIQ-$_3WS(ZKc{AXHr&-h}w?LkP{A|bcsMSey`Ksu~v zP`7AhC)XIJFfC6r&Pl6jYHOcRH;>IJ%({mQKXNgiJkFU}n(C{KkG_01pU1fX*)|BM z3n9JOl3{jlc6w32HNr$u(voCx`XJbbX(md7?Jn2+(t36M{` zcf%eHCrO>XlFGES86>CEo;~o-x)m1U7Z4bjmS0d%R))~%Vuo}VIe!9HlQ<@_)H|Qj zu4~rf%ZAFbi;6O9pRqUa*sCs_VIBpV*R}w$T?bT-@%!tLI!t)msuq>GnT1QE3AW~O zuEg~+spF#wyy#CKZMb5Zw6iKY&q8Yn%H~+9{om0Dw8wS-OQQ`B5(dXc*u6zG9*ikG z>y+qaX!#0PGK}mty*=~v!hbzSr?jrLW&O`jKmDV&j7-kRfWx2+GP$g*w-(eU?@ihG92$apwRVXqst*%2+@ZgPH;1c;$P6@q;Z*WllD z{L^0btrY24ILcLzZ%0gQp4F6c-b&b;aMMKd^#G}V@ctgARvk8|&pk&Ci# z>6lRZ?lW}{1(FwcBHTR;nfKCTZ#;Gf}J~ zbNV{kT7R@(`rZ8PuEy!fqOg#_Zml{8LZ|;`rUB^=pF-VKIOAn*HDJtq|?-`yKsi~`6saPBs9h;dV49?7O z`LO>*P80RpAXv~%7^yt730+E0@jlGVekm|OF-Aptpq~M@>l@pl?S<@cU|Pizm$O>R zJBnkJB$caZYhbSI76($D(2cTqHY7-a=H$8?f6o3INwXi)F?IKI zGdzsEWNf5V+)9j^t2zke^pU|-?hd981{arEId~%%)b0Kuij|*p=~4sOHOnyf(D{h_ z)4y9bviz+x+D-$4swXh*FUpFt%F43t;*;a7F8ZDCnEod2__bo z*UVs0a*~pI`_nBA^|r1p}zy-L=Y2UF%KH-GC_a|4%(U; z1};IShotZ1EPUbaYi|TcMuvOU&N+DB@Gx_^ImBjn4do|eEzAp7EQq8@Y%ZfT)g*Ei zy|6u{D8o^c=Nv!~I8#|)oAJF3sOgpTbNBOf@Hm$>midJ9F?;3MbVeGyW$)sV)@!jQ z@=Zl>DmgzZgm7EVvOVz>AKYzcdfqS06fjB0m#Lq+H_=)NqwD%*#aM&n+s|OHMHiFQ z+%qyLknjj<(-e22sgsjiYH1m0g|U1%|Ii#8YZAelET=XN5`L<(J&?#OPD;!vyQ>9G zxFi+!3JMi!_*fA6Mqb0u#a>%vQy)r?g?DbvT+`(htF9ZH+sqv9&LrQvn|zb}(&|eK zTlW0HDEf08wIb+hell;1feO>fO&w>EMrJyfsv>bGhtfqsXm<4yDeaUyv6d!S z^RolXb+CVM!*us2uBD4CPyB>%aID#~07L)mqQU?#Z6qO)-6veNm{rJ4+>P42e`t%2 zi?6SXj==vspM00iEBA;^k& z9-m+Eg3;Q_!2S_Ae=mPKqm|K`-kL{D#9Em;x_SF}6N+x7nFTz%o5xq&TS9IX_TF~A zVT`Eg$|m#XZ9onE`eitf@emNFf<0!wirY%=bD+H^^mSI&3X;_}4ZD?{LADBsP0cAQ zgwMlZ^t3Ztij&MG0j$HmIA`Yudj!F*>L9WA`Bk**`9qLO)%3sveEg%wozvsk^RU&C z(KJRA(o;rQk$-$GRi`uZku5KOE8_>)$;|fOq2Yqk0Y^)6pT&D<Fy*x0K+$hvzUF5^4y^yq+l0Ahcmy$Mq5Z}?v+ z;oG1{)?8BzAM*;?)X&9OcKL_JCFGLt-YRbH>hG(Wp@eMaXBv3(pQifThJmY2r)8yQ z%R~-vXSnnTNHU=`J-}bfvN@Meb$1k#NX+YjZ98#kQ32^JG1~JH{d|CFRHFY|1C9&8#{&rnT68QidO@_fGk?Anjo4y)~*XQ(BHqh1OF7t*sA&I zC^H)?H)I<^y53lMp;12mw={)Te2e1WXc;IMBP}_^uBcx#g|OZ8(T9yZG6)&?%(S?0 z?48zOb|ad>L4R~HkI&!>_@(tr=>&Xs(aC)-?ixJD4M&;1%y3yT|AT8ei8ey3_vd=KqHp+@4llpTH{JB=wa_{c5H~`-W#GWs z*?2NGB|T#$Bh#K1lugJ^56jNZ3_+oMy*)kLU0q%G0&Le%KeCRyjr^Ro_k6-ys^1vR z5&2Uc*$^7&tt~u^65pe!W%^ZNS<&T#Dran?D{Gn-m&Vu=wX|w##qIczcv?2$_Ji9Q z*)#-be|ZC&plMn>+ZKtb+O>SP>yE_vY*OMj40VI;zhy~DxTMOJn2MN+g^HZA^a9d+ z%&yt?lioVAhwMZ0dzVKs8*^~)J#405rlHSihZekv1P72|VG?p?J}1=G)zvNp72J`N zm66`Jcdv}r?FX>3y7ZxP{yzS8Qzx$*KDVq^eYK|H%-12WAO7gzY<5mlZtw1`kWXPg zoA1(gMCHW-O~1d7HE%oRD@p);?HqgF6c4 z|MPvJUZ^d0F54}-`Z-P9av}pOCnpW>>|^Y%qGx=GsYwqc+lxNAc@lO z^Swt7BSh3&c*-}abXGwFW!e_L_IBg2do7@9`S_>FInea%trLkFCx!aCZD;XhU9c_x7B6Z%O1c+dv|am)n2y2QArFT8FK^i`Eh~5EkRsw5V|s>` z5qt!sVdsNFef(PL#J>@S(5j4Q$5i#zW?5d-im0rjH$F&zQPexhK|tU!<+JAP@`wDS zPk99R$EDV0-yt>kG#97fYaic^&v^E_LX>4pIv~Ao3|P;1nfS>`bpM3fx9L*C@w|}? z&?B}}5-oJA$Cy1?fuAX3TSsSK;m#w7TgV6f>-cEA_8+}7v8w5^n})E3GY;(b<|P#iBx3HkuD1JoSt3Z%8M*1ho>>0l0G$-aXqD zPw1PS*U^;QQa-m10$}K|Tj?cxevll0!`H*j3x#s7?N$%y9z$YX1zP@%yRrSv(|^pM z+rZ{$wYNo;Tr_{m4~gBheQ$Uehyz@62N1W9@6KIo_Ba=L1+W;8yG=K=Va zjnFQ>{SMyBjvq6am5fyOwvlhenTO}K`lHmq_N&gmURDE*Mt&K69U>~8I5Zyf$$2;c z9BPY&{!&G@S{{Fr{j!!e(O6YMt&G8EzsV-@UOF(9+LK2~FHA4ImrKm0WiYx(L=utG z)f`VAEn$!|vug*dgfpPd@yTq~e3ylj0qnI0z11M^zToX+XP|j9F0Z?cjQ8NP`X#X6 ze8%@Q)qJvtYH4DB@WxJ0Jk1K^dt)x4We?5e73~qQ=H-gI=?+_@=_Rg|U$!*Cl??S* zeohOE-~It>`2qax@Nqb6r3bz0O{S6m@(W>D%HgmA{PxsfMY$NW0DJI50B2aPHK_l+sq>H~3dYqa91}Wy-*WZTGGr@H>prW{UC_*u>N{ z0v`TS|C12d)x^FX?1kt#>Fl0D`X9bAsJcH>uuPv9-NL8&qm9Io@uAIackIy*rq5`{ zXV!j)cuJ_SuweVW04R5lJo$7v-yJe6r2oe5{$-g>7=9eGQUa6<`zM)vCn<;0Hr(BF zCoUx99O8@EJj-Ynka0p7M*M>b1?VU?ExqXFSYy;mE#k0m*5fzr<~pvxq&Gw3U6-*} z%gDjSgI1KRvj?{D8fwy@y88`Hu${l86=lDFX!W{$&D`zu6-B$nH$FQ6<*u_5;M;QO zDnQ*Ywt2OwC~>Gn;yXf^+4lFY0GO`s#V-+%uZ4R2KOkFcq zahtJXeXmW*7c%I$;+gf@%~hj|1?~l``Ygwy=+hfhYEb3#o7b~ajwF!U8BdDd z&uBE->(OxvxXBWEau(vDPgzQ=mhpTyZnVQKYbdgqYJWWt65uv zurgTBEjNgL{NCJo%=$KYi8V7rr+$sakr>0hKNd0w_wINI8p_q;@wW(tW=0pzpR;;q zMZW6d9U2@@%Qw)_aQD#Kj<~umUTU&xab?dhA}xdl=gu1%+q?RF6_7?Q{5AVo26>D- z$$k|dX`{OT?Uy00@8;*}=y8jHPtQublZG$6XUV=#DA(}vay5)5hxJaL{iEf{&fdGL z1@}kU8rteBJ5w^Y{f>RWpbfwl&@y~o?9KLU*Y^$chAm{$$eV;um2;p;Agu)sW%)~N zT3KwMm4$`5iJrN+o{4|@>+GIHizAT(?N;8td~&lh&$ANNJU@v$ncwjy-a#7vcMHo# z$7*bOyT}uNX-+{FExnCNGu(J?Da+KnlAe+TfwD@xKfc``b^t*+Dy}y0m>a#hR=8Ha}gj z-PGL@M!)7w0Xk65;?68hHbiXnzb{Wdbq-0l!*g1jiEIn>=f_S3+%6(NuB!sT z%$;mI+*q+rIh={2*0C0rmls(z6}G}uT^E#*%R=;9)y+Q zjtjZ&DaZ);<>imvn={iK)>AzDQBDccXcVq@_>}EB!9s+rbr%R8gV6PQEY5w7wMm z^M+Q>ZWmZ-Dr$S$jKNm@!i`m{qK+~EAhlUE1d`Qp2n#7HdePHLqOkFg8(5sF8Dui> z%v5Jn4Yi^?DJdxxha;9GtlYKSH9~D!EPtbFUN0Q-KgFQ}nR70*EleGM-wEzj9tC}_XS;t5hyTv|?b9@cV4O>!`T1laPP3+szcf zam9M-DSgKRT8N#dUN1R~gs`r+c6Gt0Yh!kGclY)6_xF#%$M_h#n@6@H?OWR$zPf{V z_TEgta{!@eO)3gYCihNkMs}l@)Qq62ds_1n%_W5&Q2(2huY}#Z$U;QuzZo7KYmz>P zGTm;{jyQO*A7XZD^T0bbjD(mT5W)xC1xEi0CT|`dLP9yvc9PP>$l||j$UiMg1 zh0V@AvKq3VQ`vpTz~hliuB+71@NObq2zAvRL9)Uxp9BR3mi2dToLIZh@EX!o6dL4V zC{(?Om}>kIe@{~6ozAz}XYP-@vfh1YE0B+E%~d|YVzHjl`kU9(4`wI{9A8|%Z+9)| zUG?+dpZx$I?_STyxpFfyqC)8G^!ULS=sloX#4tm_g(Wn?4Hx*L&yMB273K$d=0C1k zU#)RY$UX_87O0#16$=0P>A{!2R;`KfeaYIR?X-}`c$|IGTRHqr^H5endO_E#Q8vcZ zgM4N9si1BLMbPKy<*>V?I$6zE9p$su0J1Kx>zJCE?x;F*>h3)$VKGO#VSrR=ocr|$ zKky$4#EJ9C8L!JuJNO)bN9b~Hhh6*>Uz7K6q;K|_dic2-s*3|wH{l-PNAnY&t0h+1 zuzSPVmxjllCNM4Ge>$FLbzAK5x*&?`a54k(%=vZx;FcTMmsB0+n?*rC z{cxn;7RUtjz7!&kc--e{dN*Ib^I^`L_%NCD(MKChkbDw@($Z`J!HzgHAt8^^l7r=u zww`%3I`YWWOH>%1WQyC4j`E4Cwi@}!%9kd7LG#~-Eup?nT{){x7#!MFEl)*!f;~TQ z+_s!X?&~IJ;{%OTifVf^YIDD(xg*U!D;w@+CLt^h-rW0q_(k5Qu^hTk)-O<<3&gzfY?9q$D1>~CEljuF? zJuTTb;l=E0nuhk7Z>Tft2I|N<23!rXimWNW6kv40%g2!Syi}=EEUTb`)OGH|Zq%cZ z;V+DQeO!@^4~4fUQkN$78~Ts->xQrR_j*IHvWs3?=2U(1JQjtH$9OC(?}I~O|6wBI zLKGGh)*19=-ed%b({=srl?1tf_PKRAHprJuZmb)4TM+Z`u7{C2jv=UIi)-6^qkKIG zg`sYaPR_J2FOTb?Vd>AK*~Fl`;bW9JL{}WInWOW4|1)bt!EF}SOq6V3RxA(}^S%7> zaguq(Ck-9=nd-_0VBp?M%a>$5EDI67o|LewpCIS5YTAZQzM+K=_*z_HemLs^Eq9-= z|Kptb4Ld+Sm4ZXuH*NQdzQlb#>v5Biiy<)YUN4OL_RJYbvOB}x>xQebj=HSOrsW_Y z-#q#n-+N!^F9+CGE?`e!*1h3c+EsnWWO6r0n8o^_O~uRM{=tzk9<$`qJR2D{Fg8BQ zhL7Qw-^hB{Z52JkK{AcKR@v4-t4ZYLSpO1YkUI3Tc9qU*$F;Ci;9%3o$3XDOd&|g$ zVR$oby*s?k$|& zkgY_we(^jxI~`v{F6$j;vq#t?!%rUAxuJZVE@%iA7SeDJd^1AJSff`IJ2sYUe+~}t z+#ikPy?kH?w)^=PjMuM_f~Z7P*0CmNgy(~V!R007KiadIfm%Wa?dQSg55Dxf%EWBA zx=Y!;WkH5}fu@cIBI%MZhxMovDt30gBg9pBhf+@~taPoLX5YG&NImVl5Acrw)Rgff zq%b#}PGk7#r`ut9^L1~niP7S4xy(e7hWf2v z44ZjqXsFi~*&&btwY%B3FOTP6FNhqjp@Pe-sTBnG8KgP~?K`0@y#N(trzTU@C-*i>XHrPVo zKs1NdECjgRZiqgy0husXDBKfz$WH^pk!=3spIMasi%^PBClrC{f3(g-`Fc7V>&QJI z^Ws^BKH5D(bGWJT739+QXc*X=o!3#@4Q`U>{}trn%TFJuvO_k*@@e27aW-r~v)egM zy@ZqEY6fO5-bm^Mg`Dn?$oq~o_u@myFFD)+7ON9!&zN3f4-#gkI_c!1{$5%D9E<6= zrgsl6sw&u4HcW6QnyR9$(C4?v-W;svnLC>f!YLJN+beNq4)%r`IVDFnrr*a4LNneZ zK|seCb|cIVMNU|>W23pYS;-~6YjYaJT6%Qf>1Y1;y$ikaD)dtkhW@1YR&$CkFNwdC zE20By@BTV5Z4Hi(<-5JBj=jbA#jGf=j08FC^>E``tA2zwqQ!dJj91M_`*TEZ0ADv> zEFzqU7)wVC`qESf($FHItY>cV^;nYCmn+4nfWY|LeBYD{)1 zd2QB;C+&Agk~zQ5AJlQ`n)sCEN);U>stGUK*!b zBPmcFOK*^dw*CSwrw_f<~UrT_cBGsBz_W&iu1=el-UGw<^r?)U!Pr{{j|Tf3%! z7;`LktJxn>5m4m=Q~RUWX?ov$q1A;Fh(B^6QLkwhBCzvZJI?Jx_~0 zjAP(yDsOcKrF|~jxDq|oNd*g6r6#NI$}Os_yq9}Qv7+4bLdw%73L(7gO5Is!xu}QH z^pE}3d8bx`>Bq02we?K?dKh%*$Wa^;J38u&rIHPGH*e9~>*%1%|F$z*%2t6Kq6Q~s zoYw%KrUGhjrayN*&Z)Z2W0jepfQ-nF7Glu-vhSSakknt!_n8+(YUp7(g*o+(f>X^G zdHm-+pXF{HSQ0B@)5Mk5mLf|z*EL|-!JjT)F=1ZwP8}+=jh__62L0<*W-;TsUv?D! ziq9)%=K^UPd-%O7P_JUZl(`GkS0Kd=wp0DU0{!zTrRV4JU1Mf(#bsAzu+2s`w~@J_ zx$>O7tu(mMbdgGp{hcdptx?l-$#^_)4os=dWa6)T2l?*Rkl@tnme=v7G`8o{Je7ud zKem+jLms+TdnI(W&_%OM*h&uZXa4URZXqk7cPWF_Jhwx?J5DW%CBANMVld-FOZ2eR zv$F#6iTJ-~j<5&lgRU&*M!3niE&m>>2wX zbvs^z!6_!ARmpX$j?4O8^f*H+A?MPw0?92rv5qx%lvw^FXKy*=uuYleLt}DCSJ5Et z;}n1O>0p6|e?l`95ul$+$Ib%UjOJ!~>>shzf-A6AT;+eMEKVIvQr?CoQcc&Yx)>k= zX_?J|#hMkAExKDbsmu~^UwI9W5t>Jk)471Ywxm9${C!Ka*0|GBF*XzcKPZu!5@3J| z<$E0O`NW&$xW9UsTZeoYSYZL;t!`;myx%P&kgp2gG-1L}1Yi?0h_B|n|8nUCSlY<9 zh9N~ASJm8)nl+0`q~3qUXvvC*f?l5N)Hn7CbSH#fN-e2@$fc#FHE2ngm(NN|$x!X% z>tV$iQ{Uq(wl>m6jNf>TvU%@4z;XUI@iFEy0=aHBNg`sdTbhYyke9u7}WsZIh! zidkX<;T{Eb+cQ=-Fc$YbeBOjE+@G;|al9i_Bk-*}VC% zGVE_RdoZIR7-M~7d@BUepqQk(*GSZ0iLQggzg}frq(lxGkC>2{;|sgEmy2W@Ygd59 zuKe3Fe5-(YcL-_vscH)D7VV7s_~U##l!2sI{1tiY!WO=c&ufkaGVU(Y(_13@u}sHK z7^h(lsjR5ujdcX!TP+1DEFEiS=L389$5J7@DJzPkAC~&0^l?gf{cYD-;0y!16v)2I z32!d_E7HxK__~boG%eg{s+_K!i}hJrz655Q1DjB4F3V);IYRF0UIQ~LbFv#AqFx=k z0Rn`D?fIAC3&x$6;6{wb>RvoCCr#OLGBda`=ou<>Yk{AlD|!$&NrraTK&U(EeEB)A z?ly`c{#<-Y*o@jdwatgDS=P)XwL^zPC|APn)*%hRraW#4ng%i}uFw++mtWJ83Es44 z_2m%+Lg;Z5{qNKNz)l7FC6^FjBa0UpNo=EFvte~-&Sh3*cU4z|b&^Pv31roG1>{W) zI>~r;$#~?n=&n ztXayt_P`tw6anfy5kW>n1k`vz z@s^!4xL{uQ9hiKGFNy@_b!ngaa5iSe>h4reHJ4C&#rWfVGQJTk{Mby0Es=BPQ;HbR znCw>MPAhBIJI@lnc5y^9td(0m&V`6I)xwUSEWMtBkM!KL&%xQ*Zm+@CP3x4G&cT3< z&4ydS_sv0@04M-)K#sq&O&D@-vuR%YyS1PB`_CPJoXb<8Hi%I0Or7mf`mwFU8Ex=g zeuJa*v?Ht870!}E&$jNTviIB^hJYX2;R49<@7Qhojnf?b9RTqsU3M zPoI>QF-nZA_wcOt>FX02hXQz_!)MWoXgC1ou%W}VmzVH3`lAcrG z4E?aEMD>HA72KgX|JzXq1LF!a1s|SL;WU|_aq9MNnj&M;90co*=e5fX@sHN4c^Les zB`>BS4OZc04XP&tC#p#~5unJ&HF8M+ExMFL2g zPdfz|oQp}aeBaT7bYO;}yQ5w$rk-k}yhM7bJLTM_qkC~@WWyUzR2oS zhrp7zWG ziH#qhIIIh1{+!imFyBEBdTnd9Er^J-GuZUUW&b&g=3K8` zEV(9<)R6q9r@g4?)yKN{DPXY^&(fZ<^PJR{dA#SEQCXgVnXKo+*Ky=DBV>2pozO@t zRT!WUg@)Fz-kyrX8$xvUgAFWxVR`&X--|DgYr%TmzoHVcnkWn_3@OFS+oglH~RG zoL=ls(g*S%DA;KuV6xBT%?L^>gulE^Fz@ZbYclfQ*8HR^`gF>NrgA8BMfz*v1F+7$ zUf909+ff3(q=!0S6c}zg%hsQz#vH}roDP!@JN>vhlGJqmz1E5Jl*dL$n?Js7u4?uR z>Ug)c&8#Yq!z^{=YetUArH3B$ZPzdTcCVM0^!U@#x3h*C_*Bl7<6X*k=E-Um7qh_g zuVZPwj0#uL_5BY7mU9#aP^hnu!hnN;moo1OI#{3K${)Eeu05m-Q@I{?4`#H+Bc3&( z0Rtot7{-K?HplX0!b?V7$LERcQc8gu?<3{ z!AY7EbQZ{vkW>zv_0LXs@`=u<+kBQG-5d6EWEo5w>^mBk<-cOBj8CJDBU!TP?M9ME9IfeX2^ZajB_D3ec_G|U8-qPTU;at82f0ju4m;Gdc$1U{^ z`lYoz#AY~|xp&j?L4}T?=a6bGk+tBDf>jWJO!>b{r`fB3`kaFR%==JcXgyiUWmZuc z4D9W=`m(yZCke=Uk(!HuqG|?)KK0zMTB^D{96pw>_mzBAeWg{5+Px{!cB=6huMk7FyxCm3|h+S15bd?D6IgE8=&#K9l)9-lpLr#k3^8$W>5QqBiEoM8A^1;2q zI#4C7p1r&y?$iYrxNa5#kiA>tT9Jt5ytW)x=F&b)a0_`Kn3^u1$DR++6I;n60QMXaf}2r zk?r=9jqe4BOmo3dfw%{&5wfC+ssIh7cz8mTx|JVxdL|`*FX+V|YsgkAE<8#yvoa() z)F17T2OApogr%`ibVzIA2=>(*Laz|p2a9T$TV&*`&3nTWGJ86^i!+DFx{l0C;?*>y z5~%{?FiPf=l>O`m{(1-(oG`kX1(Lio0b? zj4t?MIG1`=8yE|@@su6InCE5Ww{_h+Wp?@xBDIOQeE1XU8u-we{P8U@Fq(Q5DU7H@ zXb>0+za_wI&#QBmUdTY!n`FD6dLZ@-#&KC=Dl7s`@nk~i14$)A*G(89GDfrJ-9nDA zX8FZQd-rnLClaT#io5euLtUf`^L#G5F8dO+%zWEWkG&kQn`g;v#f6fRC#CTwQ;>Xq zA52U%p?B9XCtUVpS_^BlVmgUJ)ghmQ4J)U(^XXN51X#gv<_~nx_QM=gQI5C=56W4~ zQp<^`C{*%-H6TPHhN=s`G$tj`_Cz~7w2#SqWmKlgTlwo^T3K@Thpa7jlR@R_=FZ-m;rDu-lf z8JOa{vQ@}#c;Wg|>mzwT_+mI;_^LKE_ScYu+zz8(S7mkXX)X1zCs!`j5b@r$Uxq*7 z)FVr3nK{FWkSVFtgN`JmZjSk=DBxH!KW`{7Obrp%gb9&IR+1^rnFzJH9 zKCV}eIbRlcH!mwUFE7h{(K?l~I696}-7{l2g}$Ao&}UFcjh<6O5evXj_nG>gd%XN~ zv4C$S9@Fxx(`4{N^M2T_Fk}40j-VypLjU>ZXiOBevr_14{DLQLYWb|R64|Ok{W49y z3bUtji@OUIwj7)WPF1;wj0-Iv^|5RSw9oXa_@l4%Zb>N;UO~!A*O>93@CgiuIj+JxH7R_A+%V&ebCj0MfLUklt=M1P zcXR2!8AX*^CUFp-Bz~zv(#QXvvAX~*ud<)aAL;_Kh%$u#%kXF`zVp+f2u4##b89W5v5N9c}D*iUZC$CtXtMIlYT+)u$0-6#K z{^auEJ(9kivPh@kai^thUT;rB>3-<^He0T!*py4D?XMo($;vo=`WiLX&CdO`n>RkL zcR0RWb|{sZTzWmawm=WIkYJl{nv2Qf1%;J7TPpG~$=JYsMr4yJ=u`cVNu)aiAsU5m&Xi zPfbrutPeOE@N!AvEdpEAW3uY;C}?1X9$9<0d-br_n1lbAbBl`C@+)lbDnf#B`o}MX zMqWme0biD!m&ol$!jF>CJf##c_2?z*uc9erb7`KO_w-|J7OK!g9+dmM7aAj&c4TP< z{nB~FzZBji!|WqjG|b1OgZ$ptlBtj<_luOM%#VK-K?rf%W9#JX_AoF8hg;6LJA#+x zAcxeC#YB~xLftc!f@tWsZlrd;cW{fuH`({~PilakgD_?O^&qzQywowbZZ7!76)LD% zC9;U_q(j>uccZ}2exH&s%bqV0e|m_Uvz;>7)uj+BqW#_H(z3I+zc>HlmHi|iD{C&8 zV=mo(%S=2`u{)@;u`>h0|0H<~%Iw!3=9CAv*CKo;MNVqL!nPI}slc-4(1lBwtlrMv z;*3G2!o0@vvd6-f2-wEFTZi;E_kE2Wa#5f}=9C{3gXjTSg+i}wl5{}(gDjBB@7!qe zRNYqKrUtnm4dDkZJ{PSq4z!eb!5M9br%u{*)YYDu7<{5-Fj8UOf@ewSnSPCA0@Kr6 z8U@9iWn|qM{wnUb7_rocZFl^%eJ=h3g1=t^s}oF>(}!&X)CPrSOhjQOkoX# zX^r5p>WzrZH?4$?`Mq{kyQR>JUkK7kuRQfWS0do?s(k_ybX5%wp>38=KaUI?2U=n} z27)atI28IPoYy|~#xQy+jV<8YNU*zy@hxs?tsvt~*@Qk^=N(yow@XpvC1#u|>S`p` zQ}I6GX;0JQ0xsdVY_r<4&)UZJs29%DY2UgPDNUDpx+Qqsb8QIqnd>7^h_0k@3ssCq z-D##mFDf}My!PG?)cs`)eIT?+#_7fa5TffHz7mhi<;l9`?vH$ z2C^6gt8>B-5|TVxJjf5r)N}JiU0d~FSy3j~_2JCpZ|$}U;iueAh4pyNFCjCh z``0{%+}FAAw0tzKeYJRx%WeZ*6{fwJL5tlPy#jcWPxfaHb58r6wRvC$nex#Q(P2Aa z3rIHieeBt|R5T7Xv#=j683_`oYJ6*I?yyJRkcx!gGP&#DL#*WA-4TSA6tj0iElo_a z_m1v%t?6+o3-$=oL2K1e?WX--&!q97J6|$-_iN(w6M~|+T9zYHSg9fbrsev-INfr zZWIe-qvXwFcoIapz_*vftcBviw3xK>y0c~x+~Eg33?0i5lv~QDgbs$c=t4Waa}c7d zQqzD!dePg)f>=D#r2AOx{}eGbayXH9qB-4758SOqnx(<&oHOibXiE11Krez&kv!v_ z$l9+~ZYf<^T_$DU9T2=aA?4RuD79TA%s-o!FPmOocDJ^%=W+aHYC6}ua%AM4sPnYw zbPoYbaerm?D-L5E*`|G5m_w>R$6OU7THgDRYvh9sNq+gV>B%KyFs}{mFHuL}Nx8u^ zQVt>Qxeav@^C5_9LG~n(8SeeYm3+0{Cr`NCRH%*h?XtWQHg%tsaHnx$XOMuM+GC|9 z&(wyfz4kP8%|-&T+SBRLZafb>$-CY&@^-}=Goh#R>&{&Wz6-B;Ng^)UdeF&g-E96y z@He}?j)pdUByz9NU5`cu8vQJqqM%)8&vWK)JZUGG3cWbzLYrU%N%q|jDS^%lTB5Jz zrfY+7Au7}f zy_9wYkl#izy4tTt5C}=XmX;wKAIZn?|MLJ@u%YmlOpt2%)p62BhT%3;okw!ko%zPK zu@t}xo%F{O{U6#yMJlE`Cf)7Tda7@uC(v+v_wL@t$%Zi|Uxb!EEA);!IWof>lIsVx zQF4o^J%{P?L!GxYxbsUi23X_c-VK+n>0nZyMf~fPtqRhX`xkOu?b9bIabfQ6JC7%X zr@m}TmdWVP0@G<&o@rTiSZN^JdckEXvR~Rpu*0O|9@$tU(<#Jq$7FP8LO)$>_CczA z3b(c^qac0og>jCd*#qk&wEAfVWC%Z8B!4=Y6~&EY*nC>prYVWSY6YN?^4PzDijT$W zu|zQ+4}z%%IQN%iuCtsXqSC;R=877<^-+9#iT6+j6?&QFTS2QRn5vBP3BZ&}rTmhS z_o}PV>}%tkTi5#tFRJH@aZ{-n!(jDXHyQ>rB_ z^V;9VzP?PtM;upY@v}rg4TOtDT1$|3@_CflWuW1*t0bb%d8#Aoo~7xd3cV;56p2i5 zl#Zg^tvkL?IBTxKLMC5^mR`7{yV(w949T0dNNP+wYr_$qJxwLRmfON^LLiXDLB{>U z12`Nh@0Q)zTEBZp8@OQX>s68_&#&hT*Z@PaSqV4!)WDbBJ#-?-d>*Bpz075Rf& zWZ^=a;mKnvW=BtBg-jEJS}vJ&35<9sR2RttV{&5F14kVZFnY_(Q?q8)qE!k>jnH zk z1)iyd6kCH-SGVU$NbA^G9l|D^XC1H=I<}qOGJiG1nqTVSENACWb8aw56yvZ+TJQW?eQ!@POWb@Y$p4c{Tyu&l`X=j{w->dJH8;!?;>d}cD0!RWI{T=G;e`L z+Of2Kr2Vhc-wN8dEA=W1n3VZrmf8@>(WcRjY?W(F6m%v$4(c6D?9!$(*C(>;k)#e7 z?t+rf?S6fQgpr)_JKm-Gbn!cur(dlsQ_rtl=X6B5u?Ag&)V|YQxN$;ot`2QggqV8a zIb98|kh#Cp zYDuyI^IAh4kd~D1AzrgvHK-02gxeAc4@#$;suu1oR_B2bas*Y#y1?|1(6YD%UqNP) z1M}_@P=>fz&)V^TkyZ-48cT|2B2}U*dN}}2q`0bHc|rQ8vcIRRrLN?>hK?t>b(yE5 z1GB6;k>|m5yu3o2&b0DmA{5nnE&-U9v_nd0L0LY@e4QoF!R`>k+nVpH()nYR?TSGC zaeez+D*pE#A^VCKX^_p&zNn^PgQ7WrI;8@haxO%bF*RNQH(LU#+g zm+@@Z8(vXk*|j>&C$D&k>yl-j@y#zw(vsr>j8~p+YtNGZ`Z&)aeghgJXQ3V>R<`rh z9`|3F1|6d~cSQD+}_;>r>exv;-Z;T;%JSh z*STy7#6RyZ6!^-oQm>v7Q1*HJaXu45EE0@svup-gttCcP@Zqxw4c3Wnv|qaUu~V2o z!m*+EJjwm5I@AMAU5D6yYo1HtJ=XgAW6IUHHIxC03)YR-1hfZ9*^YYp*c-0i_vx8(wj z+E!mlE9}ql2}#j8z1@WZ6i+~MS^Ns{6>xrvh#KmKlx&*kT}Wt}iCx_eEPf{=gO5Km zE2pQ?ADB8w%jnbbhv6?G3fLjRE`ZfsXUJW)ta6dz~Guw(kr}E~~9?ZFzMs zH#0YH*H_`q=_te*o*3W<8Rp%^QUpnAw_2R(?T;sfo6UutDP>_E&HpAqMBBAY5*gMC z+AE=t!~M^Yg*Bt{cBB%(G?pN&2`Y040)haB)C&O2fff42OThB&JOSsl?6w3`(gHo7 z|CdCG>UhLFJKa;n^|-rwdd>Bp z`GY0foDS+LMc2B9PzPZcNEUG62pp6)IU3M!0!BR!~}o_8|K0O`|Kz z15Ui-!12Z|Kg@$`l5r;SP#KWyCO{^TdyMMxX)?AOS`)*RJs zXbVHECn1`MtT{tpg*VTT5DMHSt77QhKXe|31ZFbIk=^mDntOy<8kSvmYvQGJlORug zY#rO_TT2ZWaA*#hg6n6eILTJuj#Pm;pJs@-<-14ugcn-s^d_@o*T5wI9Xxs>;z za)_c5c|9K#eahl4$3#PyggZZ2bhyos{_85+GyPwHgGw!^iVBu?8(vQ1J zf_aV6f}Pn0cAQiChf5eqr>oQj7+j~lJ{D!j=Qnp$=C8RYfv-5??R6{9GTZt<-`vW_x)S{Ox@ z|BWPiB~=84whTt^$^{$?U7ZWz`cJUL!!5iL>|D40>`F1^d$PZNzk! z@OyWc;;{rtCn?zn8=4QuLh_|82Nk-W6+ZBNjn5C=Org8Fs9N5*re&8u*L1YSUdSmakn5n5fk>;n%jmDF48lLxvb`0Idoa1=lC2o zDxTG`ERe)jF=Rfuu_9)OwN{X*`G_E(g(Cjs%!VWzp%=Fgq$?oh!U=(IH=a+i>}FZv z8{eJQDAUM#Fgx<{VCL30)871!Z&{L-a)uTk})!Mc-Kheww7d!+UP1*ruV4$A{7|Y_uAjFf!ysEWBcCO^! z6;iSQT!mnA>`C;lz7Pkb+POEh%qS|B0>Gz?Y6^_6Bx121I6O7+&nsd2W|_rryQ=at zb}34HHCh%hcWGAsiig!jE;&(fgkOP~BjA9AfnNQl_{0n_&$p_rs(4k|OH!Z)S zFAI<_?##+eFZz%^H@xV z6|^>*TUzegb>hT{alpAHyF+YwY!h~phzZK12XcpEw%6Y+9tum&sLse{tPF`+AZ_Dh z_y>Cf3T7~~m4A~(Aem#Ob9xX|wGdfTLm2dVt6s3y-44Mz|9K z=sj8jRhJ#}2p@thU1ZjqBGS_A zU4*c`%nC@8v?bWYf)iJaU~S1MY!upaVWu>KVLmq@5xWI`9g7L%g2PyMN^Na|k<>=N z+@kj0-v0icuR%*$GBaD|L<4Cj@Pi_RVXXl*p(MTBUMA^A0p1eXUtF6#i!sJ;+mGPgRo9wK(Jkiab6h=eVsn7@_kz7Y_xcf^+b~azS>#29h zc-!7qU0GRNRP^B9y?f(;^Xt*fe_?jPiz<){Fy5^gTT}dZul+jNfiQ{6yo_eW5W-wF zm$e}8w)dpLSet^dKwL-xXF?ms9eQ_yffVeR_q^_)nux1g=^~c$&BvR!5&B%UTq!Bjjvh$QH;{)mX7a4Pp+)th(k#>$&#Si6{3H{m)7p~5Fz zCA*NemwkN8>!Ppj?71BWR6P@u$RyNERdb`WOp{Fl^3Ouic+x5g9*2vmyNg(*W-Td* z(3I`E7%eo?au>e@DL3ccu3jbsS$I6&?tN8zM>?^kjbF4+)0gve^8?cL=q_` zhD0P1j^S|LUjyfUtl$oYj@!Mlo-kD?*2w7gBspB*%d#_VZMpfm?NujBUtVzXVi!=^ z1|=TZI|*2?r|lYC^x->ANfdI0MMrT&GAZ(EcLoMFjcT@9fm8pDUN8J^=>)b6&@=oA zI#bIz?Nm0x|GyhpOW|mpg41TvgJ3F*@Q8>YLQ-9e@NAhGOj#shnOpt7 ztuXV1_Cg>rR^DWnUiFP3$Hs{87FH77P4OnRomJdcuvS-3PV&_KF$qS_5c9QQoNHML zfJ;a@0^D=vBZR;F4}|^Y{RtrZu4cauYGy?X-?bxK?>QSR#U@cRkEdXOY*i7HrR0lW zDWWj{J?gus*g*!Jn?$74CnS`np80QYW6sZsc<8Sum%awhe`jHF3h7tx2H`3dVCtE^ zk`8WX&66wPzdZjX{PB|-lcOH&T)^2L&8W^?cIXP*IKmJY^1J7(c(aGY(U7t;58n7@ z)tk7kywe^dYBRGhh23^%(xG*Slj766p5Lx5x!qapQxfuTWoH2|VLgG`(9)0-b}_(2 zW2@6q2Rl9^)-wO@gXaw`t#mq#Myso+Y9mjod1dgN@QI$AkO(nMCjCw0C+Ty!B%crOYf{PFH>MVa9N z#2Q%bmtPGVEuD>x4Xq8xsE0=#GX5gIZhlRp5$i|{295Um_3P&5=GRS6!mk&9kJohO zNQ$?h5-FF^#-EFAe=2JgmPzjS@h*_{&1>r_&eTSBHyjU3ZE7AXZ&Fw>&2lP3^k%LC zf=z_`rG{#*wIK8EuAD31xI-F1&7JrSObl2r8h9kLsRbu4MwxYK3KzkUv z)wx2gcBWTxP!iZgU>jxQ!{A5H?7p*Wmv7Pg)5wMN%dST)FLh@pc`gX6qwjQ&p|rHL zysoXNBN5KZjD#Qu1g(5%Fdt2 zd-EW}_)^LKgG-(H!pf_{YZ>*o2+@fJe{9!1aKu1hF&^X8)Z~Ql3;rhh+Los>a`OxC z6^$L|t68D4Fe3S1?scMr(w=n8QpfEvD@t0-(%XBxi?nkY0s1lPRUBs_TMClg)M-WL z6(}i9h^#C>GEW+jCW)u^lO^M@_phaoFIZbo1?G3&zPXcrG2!vkv`cYe$rmr25AZ*3 zVx+NZE^_2nn=_1@DZ1N&LY~*tT0d65YOH$uv9-Cmj+E#&xJg<9*5#B7gS@Ew<0ZP_ zg>yf8TFbjP_tF)Srpe(~o~DGyH@7|?BX3S8uVuwN?ox3g8&9SaJywxS%Q`D7hZ6Bm zf9TA5_8kFP1w$CQAw zhI_D|CB5I95EK-H5BfuJ7N1sS7yAeKQ+btdyWX|Gsv09L7qSgn;?5pOq@$p~jwBm; zsp-c*dHFa_UB}CMP=L;HWf5%%CC}2HrTW-gE#`x{Ok7z*C9?ANO&}Cea8}sbmQQJE=@aC?lC;#+ zl$4a@X+cSAt}N0>oOWD;Y`7S$V40O4Ee#P} zHh~<*JS4?|RRWGTBQB82y;WGA5qe0){)n^VChh#Ls&wO@pOl0fBY{=SH*!msDXrb4 zYq-x2SqFD=cJ}f*OoeVm{u)!)Tgi@KS@t}KAR4K*>{6Kj@iRH)WMZNb=lRtfe`W{* zx)$TiWYl1i@lR%MDphZ8lo+e6$u6;cJF1bGv`^HGdG(%K{38QXKHTYKc^0xo)$Li& zG`*1wK~=9hS)kBz#{9!-V363rqCSN;;Czug-9wXjt2F5McW?3)0;6Gpt({Ty_FZMJ zpV{}u{y&HLo0y%-tNu`#iHPA7&Hr*(WEUDzU@7y2%j>^TqEFo(A9|1(XwiS10DJF~ z*6wj~{?XaPTG{_`dZ(aNVzX|)07Mk8PA~3iFHAR+8V|eOm&KT&e=1@ zbiEG3(iNlP8Ys=59y|I7(h5wZjxqZ0%ZHO8a z5W3cqyAP?z7^~0Gb5&jB#A~!4FU#pZ1u#qGU>`&#HR1hu_~+5i;IilCi`^M-i!5hg%<{XlIy2Jzy^~;=FYAU=fyOY^sn?@|+`ys{+Zq;s+!=k_O*zjiG^TAK+3Z#@nLb{ zVezR?uY?<$=e7ND)y%|62IvegmX#Di^uXvl-#aZhsnoP*ky{We5qx)e^Y>&MOb{I{NS3ONPB)t=HH=tIBE* zM#L@$uc}HXM$Gp67 zUdNEyDma{%lRJq-jB?v7Nb0LPU1ad>B+8~+?VAOALD~7$U7ba_r_AQXH!JMMd5w`b zDNL907O8?TkM1UtH~nh8mad{4F0*`>=~vv-Tb1G4?VAwlNrCm^5)UjxTPcX>xF_&R zl`q&!VH%rLqj&>xWKJjZL|0a+sW+Y!kw~Qew=&BNmR{dqD0v*FKP3591xCa~V)tMD z{l7(wj3stnXA>i@?mLY4c5(HAtNw!(HDxAcXi-(gz)_E@f`OH3 zb49tFiz=4lR|On?rn9~#uH?Zvw|$<~kj7DIaDnmp_>?P8U_&}3IpI=TT=;n(jlosU z>qEKk7(?4xu)>Dj*fp*^Ygb0ka=K4%a z$eYZDhBL?&F)HAB$q`ZMIWt?mZNc$G_a`eKbY^I4`&CzKg++M$2~$DZ#rblB9=0}P z);hbO%kQO@VOu2x2IA%t=d*3xp0=L%ck2qGo_GFHP>`X8^d*8ZjrYdF8sU)59>aaR zt*n29c}HiNaeP^Vk(6%{<9*>-Z#)(sbnxE&Rz6#A58t=O<)py- z1i~K5r*I~q&;DwscQY&T!4&3R+Txom(M7CUb_BA=ECH6{s~Vg5g~z^GSjCoSfQ?O zWa4jf{QS=;rKOhw&~!%$21gdDj*A+MPU*co4Z<+zON*FfbH4M-%8=|YpZ7DP13Y#aInqq(`6My#zX31?SHnFZU3)@vsX zd*_C_i@hltKwc4icR5mdsmpBC)VFaq2)IIHFzQn-1{^=`<8%DDf57<*;R!jnZ$}p} zni-r9LrR6qEHFJaB|hx9KGW&F&DiH9E3Ys%-qdHVp68H|oxZ1N)*?H975|Bo1o0t3 zm*;BdcXk(Af{TgRKVim^cGa<`owZFv68gcK$XmIhsFV76vjJ z3r|^gE2bWIS_)RgJvn*rt$?`3PC^Bv;a)Lk;oq6`a6MPUt8d@lVOjK;RmOq1i2ByC z(b9}bOF2>wbqkPspJXL!&KdF=VL$EJ#Hi2Nge-n-3W|F--6@B~2T8Yh&M*}EUU<5z zqUIbS?udh-DyP9X-RMHio~;AZQ#m#5G?guT>=EOA%s9_xX30=kt3XuB_aY~`BP!*9 zDp+>#;7``BdXvCDX4T)eGx$h4GyH;aP?}EjgXQs60fD#>cIg7YW?EXH+hMjKoUN?0 z+tJBt&7_gsxuo;5MOY{$EIb+VTqfznR{yiNI@zwlY|N@?X<;tOHMF#}G&EFP&&du7 z3XSJ*Zdbhyf~}XShKBn?LJ}#IU(=G~n{VOH2L$+!jW=_cz=PE}{9H3y1MNi3IaQC{ z2j)ID^`@Yf%-jUR{!(LD|F|gIUv6+Ts%MJ&<X8`=ZQK*{8CK-t_iU$>iABg7UhC zt`AwfrqPTO_dY()@eH|AbBU7|uh$+jMEv)K>95{oX!yrJewvnmJNxlt=9p-S$&Q+j zjEGxxLGV8hO0e@qjoP2M{v3LEX{YRZh9tAXs2$~QrrLhSLP3GJG@+?9y4Z~Gb2YvM3x&JObrt`X+7B->5T}JO>x3_HcG)#Tp!}_14ZF@vSR4O`ELi zK_GY<&H~n)b%&L$T?`NdZ>E-+x%tM`7=V#h)7xwBGLH~`-` ztx>kGBS>HQ$cktkk14=lX{c=^O*+GM28fw(C((bq>19eNc0Zy3F><^5poq zpWO+esqsVSS@{}^q%p40H1>}xsbf@}kpWY^40{{On#Mv)S&QIc3uFYd|J`XJYOszP z9D`e}tX1i>>@7?fF7dq5z3@o+b@UH)Zilj#6|$G;ZGdS}lY~zQ(4Rg@_2A*`$`5UY znWz2Iv+lKZwcpG1-MQX${mz}i=dRuO{ozAuY*f(M(1a#ZsFBd!rQes=QL(!4E1AAR z-N?uPVtgtrK^P2LU2P0h^0MhAr)Kp@)r_T@E*G9uF#NE%cI_JfRA!Bbb)QxfcooT6?0Dzca6Ac)*cuJ-f`OJizu)K_O3B< z%J5xm+spmStW5`8Z1mLDD66P$F|>7ZK47S$vY1D{e$QVTt2xSH)?(>pa%00elbBFJ z3~HvFs5jj$(r~ZwID`QjW%?>1(RlauD@y!fQ{|8vun(o`8r2T&_PHFpek;U`#1XjL zNt2j;Hy*US^hAWF!@+|N&d#=5myGnT1Ij|(!(Kk25Fue{>k`q8bl=jMWdmv5uHwlZOrF)GcD&agOwhpn#OZE?E5m!SUzPA zBno>+LCb3$eV_Pv6NBakFCY&JH)@iGXu}s4>@m;S``Q|18k$&rBO? zsU@ZG_%$)e`>^49W$7hy>vXN19d~b%Snaj3b3iRw7f&x7M zkOp>(0cJhBBW~_5_{athH^XKPD6as=iHPZmA#yO^PS$2M3U2Dya1OQ|g0H>AcJJiT zPyLRs96xBrTaCk-?->+$x2PmmCR|~yo~V7kGe0J~9D%(InS>|t32CWF>~=RSfDVPm z?ldXqSe6K@KfH&6W)T`vIOnq*qpId(2A@qv*vB${`kjPdQO~_yK)*}_91^tHu|&;a z-vK)tt1ZfWuMJ`?;rpETXEvUOt#%zoZRVZgsxjeQ9>v|anno-X$ZlLNGF3)j^BVy; zSGHf>%$VakXgaF7-_F;KsOJyFg|QNxdYim#KZ`Y&+TzHywWTTH{>J(yu%tX55Ed67 z>h8H`*%~WHCu`WkRFYFtUZV>8iksBdsmLvvEg*oRUqbku?@Rgq*Do)O73a*z5riN7 z)-3j^=##`;XRS(mdhBCS9`ingfHXcI9C8Q2N`}@HX0<&s$8I0iX0>eGS}@k3Vt@3g zgX-tZjAu2!o$SCKSUk?j(Fqx2!a1`MIjNpq-@&}$ysIdtsjRWt6`&h~9AP(d3 z=X-fqX5JB3AdZ#bl*NcV@VS(fJL+Y#h6B8dwm8^t*>b>TuiA(MPibxs`SOY-dS9oG zl9mE+ej5otsN*?eW%s%BM)^hvn>^nPvaoLvtj@WX{Oy!MP6fD(Djd!&=t0ay4Ke|Y z!aeC{~5wY13vgM;%^Qa_Zzs7|hu8Ir^l5}X6{ zvd+-S!|uS5gL=zGaRQS>YC3-ur#TgTHqHlocB7G_TR4uy>EDCmMO(c@K9N&>7EkHo zGDB2s!Gh+E>O>@zc#9(mo5>d0W8%!Qj<^Ee+85I)$37#j$wy0o#yZG#o`XN-m7BPT z@G7M~UU6Qu#h&HYU?8{=2!1me8#+G>q}(^FWeaQIR@FRh9Plohd3Ser|9~VWZp=D z;+sgqZJs(~4$>f}p1D2x%upb1IuXq-CXpr(<}zimymnN=V56il>2r0YY~lAr@=$33 z#l{pX9Z`mRsp&SLE`_fYpXdEoXf8LQoH zhU^JCj^nh{WgkX}E*c-oTN5|$DxSjIPFrm^nA>a?hOi<>ZA}w060AFe`*s4U8J@&f z8jK@6F&3Po#ch+INDi#DJ=1iR6h7^A#m}yjfwI%S&6}-U(PBE=45Awq%i4L1W7OXD zf{>gzJ&vNaO#kvDUT=&9Q61!MN#|vwnz`A%VK8M*X^j#Z2=g+1{T7S|&Joe4$r<<4 z(qA^47v}>TkpGyUM#~q!7@K22?-2=t z=v|^@5oM9p>uS+AgosEYh%S0teG!7_yNlI>)d`>9z4!a?{&VNdnKR{__dIjvnRn*A zQ(iwesyYWV%|bWgbfF)(j`V26BU?(Oi$cXXOImvOs75`HMmgE4-YR+Yd1TFOR;#J; z!pZGVH9zH32cGH6wecC7Xi7sJEdF>~UOG+h)SGJbbur|`#}DljwV%G~l?KIXV%`mE zz(DVeYV&=a1P5&!ezg1eo3|vI8R6*GPiH|KV0U}Sk;}I~pcQ3SWbkps^3Cbu_{LW3 zO~v{ojsbwrE4r}Km-0S&$kBbiWb~mu82Hzj?<0x;mPwF^|n2&y=%<(&N*PnSV!`&De&j7QxEot7$3{xnXdKy zr*Jh657MuwfPO;;J)L!JkG6@vxt!)}n=VELt5!CgQTT&UgsGoZgoH-e893G*^aBkIsLb>#F>6TrpYvN;Jc%@0>z_ zqF;iy{y{eF^Nbl173w1xbr_&p)-BvIdA*~FuvF1j_XDViYItUTlxZeh z`GBS(yOSQz7j8wFwNZ<#?qBXIb0>8BQR<4wQ8#ymzOy2y6$p&IjtSrLlCYy${-aNo z2#I=SuPIaq9P$LZ4mA4hO1RNIUNEU+@tV%-RWb-3ZMq z+h&)Q{&MHr&3yIZWaL2aytB4j@wdU}FX@ZDPA3^Mm1I!EBE??b(D}gC;baAn0t9_DNHMvI*U21;s<|V<(g5ZCa18y_R?s>85 zr?on=y~=A1VU}4xXq$|L*I3-4WJ7A6jaJLq0n$53CEf0P$?Gig_0N4LuL6qWOQYle ztFm#_Ev9Xsk@zcr)SL!o4sFq@eLYjo>eoE3DG0&^%odNC*2RK8RBf z59qmB!>iki71mEn6Z-J0g94Ay@plMN7$LfK?T(Pcdpi0}<_QN~;9$~OJq2i?5?itS!w{s7tJO$RX~~GeFx&bC-`$_>%$CRzTtNqf(=s+D+Fu+IEiv}!=kHzT z&WOls&^v2#x+A#bNRWp1I z5oH)o%U&MvygAC!MZq zk|K^kP8z%H+)gx|wF0Lhe>ghoemrj*Fv)FXN+hECBabof^fwaXMpOs64iT#sI&+CF z{F)ML%fs@^NvuoFtkM?eeW_wtvm3Yv8+<(=dj0f%((Qjw+pOI*Pw$5mtHhh;1+K$Nf3P!^#tsgghRngi0E=?X9iKZSNAe+vXFO7P$t+_^P zVj_v}Z^b^rHP{yZ+A^B^hkaxa!doACC>qv;f%Tjv3vN!5D1q*Xw6M!kmp(nb-m=gG2*vXM6vL&M0a^39| zvVqRO=sH`uVkUZ|cS(GeokLl6$$E}Rjj*}bFUs4d+mHM+f%KeL(Ae(zVVO}m$NX@X z%ZM!AD@#;SVj)p6sgZ-K_x^oCtpP}hK-slT+Vg?kPhEu&BdFhe)2&t*#8_vo-Kq4t z{`a+SNdI*pwcAmJt`bFP$%v=d;}wjfxz!JTNrLgY=91?5 zCgNc7#_JDUzh?7mTTXL*3yp}1?<}r$Pb#Xu2zhR0mH&FeJ@Es;3PVLxzRA(`s-(^4 zPut_!yHpLG)9bJJa*dti&}GIpOemq>%gv5m^cjROPON0{$DfN%Poy*Pp0Hgf6!BSS{QYS zPBr$c8*Bf#xqN60z^_aEjGZ=}xH;(z-YX2K`6Dc4v2mA~v+FIlyR(s+6^f$A$ezg< zHS}!lfkkvse$FCLO7#NHh|@F>UkQ1!^eUwxd*MJ9?}w|qVC@J6vo zAvD}N)~uD?;0-Bif9x~!=YGl$y%tox$+B;C|8XR{R`023?H|y%RW4fOuJ-1t!d=u( zVnj&?$t9l)7D=dxj49n_WQ)l(&+7F*JYlC@k(pO50=mTWB$SJu%`7yC8}zCBZVM^5 zb(%_cSKK>$H$YI7Uqk8os=E#1TsniUA*}WKsz~pgtTD9hMnk@=pt4yx!9+8cgfwuq zDkoF;IO=S%vAyl(Uaq>+6g+vyhP`R|)K}&(p-i={>5Cut=uV+e@dQHXP;_t2qF6-C z@;G=+;6p;@?N%8o{r)O%m!+U92#pZW5!UP|6kV?oH+-Tm^;+ID{p>Nx&BMmnVqcSY z0d>9f09kiUDmi>skR#tmU#Lk8>n|hfXV_?bl7Lz-C3SI|h}b2Bru?l&uiMdS8L_=nPD&UCQ3{9gh%Z}1D}nmSN~dYuvk?JqG*|) z_x_LrdE2CpS}mMlMvt;`-1x^MamX!yXoF9H9q)B-;f+%Q$EtWiU|j-GdSzK}kSlcST$Zj*~8E*$jLo(i!SU+^mY1$g(s@5TReIvXA%s}gUjQ4bWCbo=hDNRNA7KlXjmbJ#nIqOb!r+5nH_7g@ z1o|);8Ku1lf5|ULm*XFBEd4J;$iDOxPAf5%-cHRt{d6w*zIc?+(%%*lIo~H?U2n~~ zU%sQ^`Fql*7DqL#>JuV8;<7;Dc;lSCdY(t-&X{*dq0o*?3LwaI?K|i`XDbmjo<%(v z212Qmr=)Cy^EuZ4VzCjtlAmJDC#RTfcP^1n>ZYRaUK}gd@TIfG7L40~eB=5v3g+K+ z_vAUP7zs0VkFiN&GOl^w2#dJECj25Iuy;E%-v7+Zv)EKh=5pa^sgI8yxO13Cv4H4c zN44Pl4P0YMA}H0i7_ZZRjziOABrepJY1mR=)WWEA)YQoUtzAvW10!*gPBtYQPsecrybqoSpy+@G*~%ar{XTJXj# zH)+R=n6e-tGo90$o*2fMN9kt%bg-ylCR524Bvjc+N*#fC8ZNX?31Y|wuEirxEK zijGU;fi{#!B!2%*)cMGDF!sKjUKc**pSYKYw|9f7*RispFZV_hi8#sBWu-~I{oF1v zl60I;W|@?QI+PPgA;Zh`sK=MO={ciLL$@)Zv?{9BN}3s=QGE8TJ7VcsZkC1Ral<#+ zVVg9Wyd3h*wkx1qTxLEhQ;ir*Hwe9tqbpA6Jr}v|uinXF6+%=A#A0-qe$-!evXo0Y zE3UPO&WpztJdA=V#Svj1B(yilM*tDHljO`10S|4f5f&Gg(RW!LHziIhu{+H$mM~yf zGYk$ZFhoQ_1{#hwkzI#9wr=$81dqJbGqN*pyk*TwHu+hBh)jS^+Ln;RtwVs~*;J`= z$s6^dR$NqfHU4`8!LFjLBRBmUa`HWsg^gwak{nm;d`NbR9&E&yk=Ih44lN9!-Ry+Y z)75N*1Nc~eM<*|h929>Nmm!y8zzsA7;$vf48_t^x;;$Q;=qrkUI4XkN26IhSD4W$a!}v%l1YB2EuU$(GJtVnQ5sZWUR7rX}qENdm6q}gknTBgXL zjzIB1l&Fl6F(E?AQF3RK7#o8x6=>ZgOU?Q^!sy&27I+v-PP`;X9VdSA$l@TPMHq3X z%I~PTj!F>CD6yWJmYe9ho>#NfJTQQHt&HUo?p}hj^`+1kfW3Ei==w)42d@!8 zQsZu4?_yrjG4v^`Noi&{QHbHSWzQwK=yO&h6BaZ@f|wdp86|wwoBrw~LV9yd-xk9! zQgexAznSNK*{+ga29=zbIromYW`P{(|79T$R)>K0SH8wvpEeukq^g=Op1C-bttFd| zbaOl$N^0j1Rg+)tz2X4-lae>?{MBxrY{P09FsS&y1G%y7yUtnN z`bW;rRu$(!L(TX!Nd$f^8@XN_F9Wdg_^M~+M*Xf_np6U4)W1wWm7lXcTeLR8x_NKv zF7eu+XW53WclEn(c7X5Ph)1oeWW*57mlQT6$ffiyGefE5+q^SKG2!qaSs>NH(Jq zE@L!{x>82arlg~2dl@wjdLx+aNN8Jw25elNFV*d~1@Chj9yoIxr6R$u@8k|+j~dtF zuFQnA9Vk~0dOP0hkdL^*xh39&%Oe1MT=%xfug6w~+gWsfd%;zx?W$gM^RdWseZDb4 zo|ik(K8cz?8C7vl^%jlpNxvDaQ&!+Zpq62Y)6{aYDqSSO1gme7NpP^Hj^YsxMhRSm zV*dqeib*@{*;zWN2yxiq{H`%e!;QFtvd{-A@HVxiXqRJ0k{?a zmOBJxlm5J~cbixKK&tIT4lvu?3y^y>|=I z4Q(@wv03(6X>4E7;jA!m<=6{f9=gGSNGWE#EeT{$Hwqw9dlGHK;j!NHl=k)lR_Pmu zWlF7SA z+?G+d4YdE2VsEdWqCY!`D~xat&)UQ2C!dTII3jM3d_}xu8hFLZKK)0?&E+J6oM0II ze_E6NBP_Sj(dxgX{&(g)f*gn8wU74@DO*#G%jT!2FG5-%q4#bmp)mHdCyE=Bs_(Ol zASMxJR@a>Ax8QEUAd>tf|2uQjfjs{wbFFek*uxQaleCQ9@L9ReDPGf59-3)`jWvJn z5Rtfn4>ZyCYAF9N5qq;m)}ESd@1Xj(Nh+1Y-|Wo4E@Cp}l3g1DhKs(N8JF6#V^jpF ztTcL+Si3AVf%Aphr~5BQh1v_2c@TVjvC0?1!03O;&1}hqAyMO-K(Maj)i~x8f;cn# zH0B8AdQ|^;vk$4ae4uf&_P_mjUrV~GEI}b};5$lPdR?cvd-L5wgHo8=Kfeosd zfO8gcC3J(EWIps&6iU6kAb6D94%6XpK@f+4RS>7tWD?(fU#(pCzzNeGOK;hQu2SwS zUDJ5y-*Nn%=n0v`gt3lvZFdCEUu>hvh)_N2;5NN4e;A)1{BX4%M%`V6<&9i|!AxJk zS#X?1(Tv+>{r_|TQkp~Xbl(YnL5a)9zn=5#q7~_^Y@N`p*h!zc4QOXmX~2ra8li#ZcZ0QidLFpa&`?=Vy3fPsZ-Jo-C^n zk5#KR6Ly^wME+P&S&tF8h$IzPA;t9=M#_ZOn%JHlu}FSJFsTbSJ`$8e_1I}QCjJqL5Pks>Z6pASN21Uz23_* zzI*iDM>x7N9lvlVHHtD`ed}Cspk-$STnR-_q|6XwZF#?NyG4N+F?Qp1o!8Y z=wCnqp545lxcg?(o}|U=6p?rx_sl%@A`&~3{hTiFOR!~pzNBh3+G=^|$I4Z#?&4tG zyjB|io?$lJi@*6yW9qGQ$ipx|7=U0JclrmkEK~i2l0-Fx@64Z_#2l`Qa%c|{_Pl_@ z3#7sQkr2vsSKy>K%fVN38sU;74)qT)dLmP*aVfmHo8Y5h>Es`9c0)w!)p0Td?hp`$ z*FrOgk8uL~Bk^ouVI`PH<%^PubNgmu$?-|%e6E7Ss&T(*9l00PEE5tSmg%5fiHZ@$CxIzzkf@i5c9Md^LIKuA>>A)n&sGO!#A7 ztC?77d|-)e!J|PdG=&WeC7j>IR~6%PL8>#P1)3W&r|G#PAKMT5!B8;$4keajl61Ia ztp6OE&f_|_D|V@w%M_;TT;+47yYN9PX@z5Qf^Zv>OdR4Uh{Dl!(!wwck>??S$x0|7 z)k2Uk#=~Jjg(HaYmLdf``%I3Fs#}bE=?fepEDs$`N&C+0VKiqA^@?daP8g0dY$uf< zDz6H+p3@0t;Ad7halROZtl<6Hi+xyGNV>pu#dKUH<*X_UK=%p0DGf)RFaU!tU{M`m zz(Y?W;f>U2jAR&+c&3S+O+7q>_`RTMvgdRY{FM!K0Lf@x5T}vw0}&mpjsz14R#t(Tl4f)(d;Y#C`}BM*z%|A*EGrQy`rg z3GwKU@iFsbNbpY5hdN~;2As620eOJfI&J#X(#x(uI)`7yy4xBLMn+*ie?U5^7Y~9Y zzre;4dWn+)c`A#64!r)Hnet)R@p$JTss0fYIv8Y~lguc7wyU-N{50+dl~48bSQYP- z#zXq`C-+LmgZ)qf(EajV{@@9)AoFQ@KoVOAG39%d&FdBgj51r{{hyGE1)Ad0YBi&L z`{F>b*k7k6_B6MN8UXL2K2h3}BDx4p(+y?NGE7A-txeUl=U=R@ci~tmrrE2y-#Sj}v^ZA{9Pj5_ZzS8~;?0JTV!{TyDc-Z-I*3yfRj-Ru(^q>E z`pNor57E6&&Q1d7zL@{N)W`kLg3pEF{XfQo2%jq{I#0Htl(uqBg4>{{Wvp5G$UgG_ E0hUDnga7~l literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s1_bands_Bi4S3N2.png b/tutorials/finite_temperature_phonons_figures/s1_bands_Bi4S3N2.png new file mode 100644 index 0000000000000000000000000000000000000000..d176a4dec5196c0e0d0558f1a4cf4cc7bf5bbcd1 GIT binary patch literal 98076 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 T$8smZzMG7MqIj*SQSko&GCBwC literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s1_bands_Ca3Ir4Sn13.png b/tutorials/finite_temperature_phonons_figures/s1_bands_Ca3Ir4Sn13.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff7bd7362665a3295c6354bb881d1df9675ae32 GIT binary patch literal 114542 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

ZajW59DvMrlTqzt+#-#u4x1O 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 HT15R9i|K+8 literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s1_bands_Er5Tl3.png b/tutorials/finite_temperature_phonons_figures/s1_bands_Er5Tl3.png new file mode 100644 index 0000000000000000000000000000000000000000..99b519990ad8b2666521df732f06bf698733420a GIT binary patch literal 117950 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

41So7 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 L&>w4kV{ZHljeG8z literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s1_bands_Zn3P2.png b/tutorials/finite_temperature_phonons_figures/s1_bands_Zn3P2.png new file mode 100644 index 0000000000000000000000000000000000000000..681f1488c57ba80d104c7b59322d83bb97138b5e GIT binary patch literal 105143 zcmb6Abx@o^(>RI}5+o2Hf#4QGkl+Le1Y104kl?ns2MF#E+$Fdz?(Xiv-Q8UlXBSv@ z_wc^ockZow>-_OMQ&Y85^K?B=Pj^rIhAI8{j)O&pg@S^DBO@)Lf`alAjDqsQ5A)^o z&V`L*Q1@4z=_XV-A>1mg4`bnoctuz!E=YHxS%dUm$sl^A;60LvZV`BwFrxDtqJt07!SmE1h-l+Lw6efkIUibu zA&tuSjl7SIT=#Wfo|@QU4QvmM?2q;A_jT;>78ZCj%hU60VudxaJ~psIswJS++|cST z4>g?k&$F8IuA1|qmgBC5hy<^~ne3#B{_(|7#6b&kuD956ce@4i56~ z@$>VmbI7T4(vEZ~PyTJ>;o9Ni{Kx)Rvz<*ytA0qEQdFmGN{4hOMz?Lr|=E%u$BSF@BUu_AiQcX(H6{{|fVG@o{H-<&5Ux;bH%r#7LX)nI?{rp6???EG0=a zIdL>OQ8XE06b)enEwK{e+i(H`B0}si+}9yEm?3y?L@_Whp6`N9+{zBh3ltO?2~kzI zl{4?xg7fZBK;HT%>%ZQqHRf_7+DQ>AvtntV(?Vl;WUv&6*(An}?84UG2@NNi`?zB1 zMI{86r>4m!rGAu4(AU<#103FT2@$w{qRyER_sEP(GC`G}17-ILG0ATI9o2rR}ETC*6zYV&ZBSR%-H za}EIUo~LK^xr$|FiPdi&ZfiMpx$+O*Yy{o>=rHKZdBEihB#4|r9J|(k)_c7u%VIR`JeM5 ze|^b=K8RgQ+R?2%5Qkd)0J+1cH1IyCv5?9A1iRFvWc-TC!Cypprc~Pt=ivdGb zINeXOG7=|=Yl#1IPP?Qj;zSC99PeA_qGbbfY#l_K>GsXWcT1Lj@`2g3m&Rxhg7j3+bmMNGvMGkdYu+9=m~0mVhzBa-gRFlZG+P9to*2^z;E*b!q)RW533cTpBm zeR1WjNur9j3j!@h2*AE+ZNTPOm!UiTVh(vyz8tsiru#QjU6Vu|A})%I(fA;!f8>W< z-wio+5Yl}g+e(=_MuAlD!Ha5e&Xs~uev0amw-(Hh1>Kpz@s_X9IC5NIS&%e|P}a*; z1Q2^Kv!%W9PUCMBtLikM>Vd;Ge0v0OE4vo>4x7$e+;<^s!n&52ontY}Bao8+g zgy6&?zN^&9L4Z(O6LD2NCVSVVl4RwOW=1><`D@^W)o7gd#9NS3UHJVX z_buXhaL#t$*Xx9*og5KX3bsznyg8&0Y7Gz(hhW>2jf3@{Tl0bFhv)c?9Bf z?bPh18ytuWz5%fZ&cCBOMJwY@)NTfd3luNKW1Bybt~_LAdEkJvx*8vSaq541p6@ja z4L#8+KU4^xL79Yw^oplxd8Enmas!)|MAo*Xuay zhAWu;K2!*V)s|Q;cwQPb_wSOkev($+&(}$q1|yYKH*A&teR3;Q7*9*Iazpk9E(m5P z3M;EZj^<>(bU824x9a%uQimVzc4BP-KqD%;<_zN-M=3%eA`TOCtFpas(TdKY*N*L8 z$E)f{c7Mp!pl&YvL7Y$s44f$RU4-p%=e^hOG%P~LV2H5qv_Rpd*x>zi`yeq#^f$=u z?#OT9eL=TvL4TLILSu^}?q1+1Z<@3Rb(hI)^>r3t1LMC~t0%4WB?2+6JC62!Xp#9K z;fD-@3ry_>C5OR-u)pLk*Q^%4`**&g^%tIkyFQFs>}<6b|8Qe+DPwiQra!75MTw*U zZiOvGlxx$f+WoM2qB>P?=jV}fIhltKxwFQe(GmNs(K&E#O>d5m<&2bCL(36t-DL9p z_CkIsgyDzO=~jwDLR4T(bE>`5BQ&**L)7}80Jy8T=Y9k!3uOzY1}Lxg`ZuH2LrILM zp{PgJ&GV;ebJ4V>%J+p^!=HtYE^vJAd%&h^uA? z!4<_U`ooke{#}xQT=km<;@b`12bF98WnTq)q{HO60r(r}w?&npx7DUobh11MlL5tv zpJn*7!8J>044|yLXwcAY1H1hU4tu}SL;qr>B&+k1*Z3Ny>3P_@J2^bU?(w3HP=hKv zLM)nLBXlM#8jn0G$CakQS1}^IcH-MWp3tq`AD1am;+%)t#$Z9Q#IJ9l;TYtODBsAbD!Dp5O?MlhYW+gumPJp>t`)E_CU4*)PZ+l zt$b6ggRBMdLe|nPy8O!e6}@hgEwZ#9?xTtxWO`9UEZ9eRy1Ot}4u!e^;VwI#!JYT8 zy+yw+$43)7WxE?GC}p`I;8fGUd{VCd=5_-x4|CgIosQ1A|5@~#_uSKGTlGRS!FKva z_Gxhw6->dB#g$;HW&g74j|iax)@0LemD)y(c9B-$| zapV1#$W_PPDW9~F0)ab<$;k7F&S$0Z?^ka^-*3eT6@fN~cZ86adf(D_B#VIUZtkOg zvQNKox1{~f_l}inc^(vF*ubCd-w3bN{tk8Fel3V2#DC+Uv>>2 zAtMxWx5_#?J}%c_5p;K$?w!@Odls_B*gV;H3(U8BM^Lx!jrhq{J0}e=trsD&r{Ph_ zZ>{XA_O16V4D3MJ3Pk5s88VsUYo5Em-KJx1-l{}`cBoRMHHbe9^kg9taMm|#{5fP7 zbfD{Wty;`jPD6Z(pPO4W?VjfPxPNug`?HA1;s4A#8+CKPT8#6(Fnln7$@?9<>Okbde||e&1NuWu@-m}bzOF1=nE(GRkjY80jsxE@=QASy z2LNfO*}I%eO$(DSubZBb5+Da7DdmPf^IsU-zVrvkmj@$DeqcdBv##ypID+ z{s-)T9{m3kgB~7WyAl;aw)Lb+TS7MlT#s{s!S-40h_D#AU-jrOFTg&li!dIUUFzoqQx= zJ^NWdV2)N)AXN-bWwEKDC9`7c2o`|LLgoMWUC%agx|IE-fa>)M@%koI-vanvTV_MX zZhv@o_i*C>KI>qL;33>QO9PZo^|?zgp&Krg@+5ryV`>@Tob|s1>I#L79I}J54m6#R z?sRykaoL&1RK4(y>1c=2Jcx`dwVyY;(r+eBn3w>c>-0{ue}iWzfDc|kGsfM%&*3bo*545!da0N zR~F9tfp}b%Ja)(ms{RiTH$#V!-o$DDK^e);vJF06`Ty{cCG}l+7+80gO7zE-{TSbH zrJL!0-$S(G$*c&_|EIj{`FJI^K#OrOb9DX8^zR34?S zSx4Uf5SXzAV12Yt3MODz7!HtKwm>#dYCg)RM?riA;tyZY$54Q%Z3OS6AHWQr5C6AV zf#}9^U<%=ojS<;waM6W^u>O$8CyPT&$>#r3eiI!ms7>=wKqy35@X*tnfn-pZPtj7= z{!5L|jo$k@nd1glhRrZ~y!RTXpXhzWfRKL!2340G^?xKBDLKtXp`xOurmWm!qORr) zy}iQ|_PVz(?rJN|t#7E$Ej71ytLD+T&jWBSzM=9lRAvQdZ>>FHnOQ4N+T%Tidw~Ic z3HFwsvjqU3_@s5@Q$nzjdOhVQ=cm3Xc6QZWRd)FGn_Bt($afy$|K*E=#UcAKIn^0@ ziUvxf?6sq~e?!B4OCdTJEEq*qaeFcVVM|}g;>@hd&%`ld+65hesxpN@N*0DtpWLwlok9phCty-Ybyzs zraMF5lBLtCOhVmh-Y?fC%}k-zAG%7Ig;+AbL>Ou0tmsNNQH~5Y(u(tytVZzXMd-}diO3sX>0QISb7;g&xgb0rih276pLG&9a@Lidhm zJG~IeBbXcb5reb=)b3ySxNi+eHeR&j`g%FkEAA7|&&;Gf6QJuIcrks+0ttwA*`Dd? z(KV{;XL<~Ql`^Fe8t}?#hfs5f*9V!84}nRkY$}E(D~86aicj28Fv*WcB|Z6himmRC zXLGP>0Omuz58izhTVeKA$u3+vZ8r_CeOl^M1MsvR8-j`)UIpYS43i1^?W`1Y9eC@>)?Z?S)K-^-m*i(yv(c^kw)EV*Xa4QA(AoIV*09k2)Aui0l zmPt-QLGf3IM{wq68s7WVVH1cTiAi`(vzO~7^V{t?rsEe8E5!0z=W8H_Nl^5yTH;<( z@ZLdk!k0hqZ|?$LQ~6*Kk&N+71(t$x5S=0LihEO_E8aZ{;oiJ1G`%g+NRv2LpSU6c5>Jh;S}oY>WfoH+jfsB`3GcE^K9PuB&y z5Gg6u(dp?6QV)K4ztXVB8haCH_6fSU;E;o#1C2VwL6w`* zUEwmpDb)zv(d{xhT96zo_4Y$FbF+X(S?S*RrRI=Q(@|FNou4uX1_pB=U>u*HjF<)g zC+!#CP7c84S&7{vRY%Ol=HcNI^#1q75iJIDvh4;C4Xm3hN>f17qfNae7%itM!1u`{ zcU)D<4&N*fj^tZ$mkrV0Y?te;=zEBFYv~nI%xbi9R0zFW@Y+^6NY_|AInBB>_)Qf1 zqN; zFF+1dut!VLRZYy*%uQb!kXZWE0b7DyHfI?Ej1LcfHu!To#4wmDhM;?`}^&oC2)$f~D}W9`U=8kr7!r zIXMNi`jC*2pdf|jK$n4U5%vE_j18*XKSw54rLTKlM}NBes`gc{dS-|HC0l9Ty+ zIrrhl{a&g>aB~&tc75AEm_Y&ac=jw@lxK=he&*`&EwE=Qh3EN;OJg5eTor3LC5MWr3J7!9StS=%yCLmYo-w`%N~eXEN~O9>0YwPa_` zq0}*-887h^$3K4R@rA5z5CBQ?zRJP(zYwvz86y{QW6ZQu3gJMh1K?}V0-SMkJYl;*} z4>WXyLYS-~3oJF+x@MbOL-9SG3o~1;Jri@W=i8l4?t6kgblpSLe)B&3Pg^h4zj11P zrxm1w2NV!2ZL64}oy9)=4OhQ~QVXB?64&1(I|1AwHky%95IhkWDW@S;WEK@zyG2dy zLG;PkB{7chyz0EDl3wCPoSaZF2Y8M|3AJHat7Ln-WO<%vewh=2a?kCYlqbX-x}3&5 z_KlEYa&1PPgQaI>Wkr-`cjIf(P%!`ni` zr>@4VwAR+FtS(=-Hy+1Y%gME$4d43s)Og_6v*Yh;h&N*+Q&Tfsk;156`lc73e=N`j zpWlCTV+-{8Snp`1aa-@wB~|8Lf1`szT^~HQGsAW)g_o+O{p`x2p*Iu-ny~g@djwxO z)!&&m^y&n06+1UGK*y6Y4_yInQ+;E2_y=kH5kMU`{t^Q=Lww(M?v#){oKFV?=f)Uz>JMivKwB4+gnluXcQPN4$hE zDC*6-uFBHzu)&FkmX=S6^5i}Zm*p{GGnR*6bS9JM=Q%ZnZ&Zbag=u)4ktyYA%oH98Ev&c?srCl85Fbg zKS}>lZ~esht2CZ1GGef`ztwwbpNZ+E;B|7Qs)Wu3ud^oI4m@xS`@`_IcaR~s@I1r< zquiX!s!Y^o1)tkx%6*yz%N#LMOYa7NgOwFvdr2T zS%Rcg|85Vr-;Hq;IwWKXky?%KGt@vpIU(L-x?4m-s%Z|?tzhv_k3Y0A_a=AV5zS*^ z4YQ)%p(MNUPn(6yjy>cZyG?mr7q-a4w7S5{@l-X6ArMlxw<$nv^LKN}YUmxzn*l3v|MF}mgrJwwTS?Hh41`>aIuJG>Y_LzD~348M@|f8NAw z$JFN&)NA%wLYFj0UvmBaT+}NgYZYJ-^2$Zoww`$_8!-J z%kd0VyZFhrBw)JcM0xc}A~S2lR&^O>9|IJg-;yEd80e1}=os5T)z1S%AJ+KsBRon} z%&sOG_^V6J4N{&?in7(VfBhL<`R*V!4C_4_-I|SK_>fJa#2z}H7C9W!!JVF6c@Saw zY_-r1lML4Gj!Cu}0GMC{a=W$W=_O5#?^>7qks81j)Qq-vv^g)}O;m8M?%!A{d=-D+ zci;3cM;pjd{#7o_-Zv&Nq0p&qmzsEo5aU#2yt^OC=)M$uMcepY7MIr)?FMAN=a9aDtGR7X8KHbtkgDif=ik5GYZijSDsMvmnqiPnD zWD$*r8h1jJ6!|W@Q+FXpp|VgRDXVpu~GZ$JP~Ajzd9}6s>4&t@~)=}_vbVF zjcZ&oKZJR=&JYmT`F1L{kN%ZBZ#Uix`JfbiEClS?0iS*qIGvDv^>S9|%ab3s(GkPz zqUPQJaYbsB#~WZ-^VZ^od2hU?{%TYTR|xC@&hYjuvq>kh*Wz#Fgy z<0McBFGX@=jMwwPEsZ%rEg45{P8OVhPIE2oeY8-TBqahFpAe{)$es)j9~n&_oqYd3 z5EiglMU=2P@`fl?$Pr>=j};h7jO)Yu&KJNV{I_y?dEs{vo~Yk;+m@FSLkk^A>!5)W z5EgZ+p<*6WxBk9uD{YwJ)dsKbz7^g#paT|VxW zu{{XDc<7u_ZtIa}R(z+-)Q@_(`St1OP6f%q!>&dCj@_TVbn9cbW|!pKl8Bj}oKjs* zD#P-0^yWJaFA>TFdmmS8SL@2JnhupEb(-kv0*oYO!mzfo$5L%rFeo+xqhqw+e4DO* z3eHI5Om*S^9DIU0IU@lt21^MWl-Ty`FDLKqyC^Fx!R-4LW4d6Cv~OW1i-E}FX}q(F zg@x-{{_Gc)R=c#TqBNQs@znSkn<4s^zKUw@dU|8zKEX=rznJ`}yg!{u&#vFRP5oSl z8o-}GvnAKz(DBvTN9naxIhAnnBY`iWpz0?>p=Ud28aMRx(CbD0%0+m>^*ii%Fov4o zGP51o{1@2}v|!ZP@G?{r+V@wBAgk0FFY1lztJhr%(Juoagca*>gMhZSR6pbzuM2YS zDF+m$Rd0c2k3ei=NJmen_zJEB^)x~#HhnXK?sFAmTv*N2B%$flLj$zVIR2DJ z-tKqd?R;xURU13!{rTQ3F%mm6c2%7pB{H|_wgZoh;VE)j$90#OCM9=H!EG8gaLCXs zS|BND>g>D>3-CuN6p@TQ7JOB^yg9E4`~ZPaPT)zK2gk}@rJiukH!N1pn-ISzRMRzW z#D_{fy9oJK7NP&L&z+oQ2)RJ+zxpRqd)# zGf{mqz;#GqcM?qMH3htDlb+aQl zw#`)2l;H-6e1n6hK8AF%h~X(D&ROeNb$+_{`RJ$cX29AqZr0e)M>u=y=QqF}`ux0J zNt>#=`oh%IR3v9L_3W)BkPEjKdH>|Atcg|>etmYdddN*Yr!P1RpN-~P( zHJ48P;+W2~% z&gkh$@F#GS&6|Lbsv~@O4MfvSSs*HEG_>C=a_qt-esF`L5SZTkhDKN)Pt8aA39`@= zGUm!7DA=-&hoN&5Fpvg&o1{MC1?&=P&8s6gf6E8fXhS(8%s1dn4u5)8_q8I0(MHP$ zq@_z8=)y_Ql`pV2UieAdJHU=wuAg9LWd-nNjML=$R=A>c=4pXfhi{yb(hM<-H#u@a zeL_mcvi%@o0p%`4UY%bH$P!?_)*~jQJWRht?->`hv}GEd2*0l8Dsq=HL%G#qionK8 zIVL|T8?g>XoG$+9@zj_^p00IGAU&!|6YAqWRD2TiGlh0PcC)q3&M*IN>!``esYFQW zc8nh7)AhDWNS($r0=)etoAX-r)2->a&2Pq9I^Z7hKDna1j>=@Terq0 zLlwHbAG@%@PwYfJyEoqKn|=3hv0rZqwt7NwQSu71QR;kWYe{f$qIg$VhTvag z`0h?DmqdVE>Em}$r%Mh4iJw`28b|J&;z+V5N5)*hHX(g=)9xTP)>7G9$5?wV4P6x{y944FTrWOoVo(WrNT4nWHLVWp9gL?(MMXVF{YX9E z&rP;S#L=?E_50n;PlzC_Qhy}n6q|0(8>6Jo*R0#;IRI+W!IFL(FqQ3iRobh|-m&nl zg*9GY$#eU82|y7VLj2TTkz=t)6lTj)L4>*o5Egl&mk{8Cuk^U-yPW%#o&K2xG^r=z z4+zOIH|-7U)i5mK>fP{i#|MUQ_lm|}aPBZsE1~TpK^HL)_kZPpLNA7 z)s{E*_Ty>PAn(_FQ|zWV*_7#NtKWHSUwRSXQB}_Uoeg>P5Ztu5Xn!ek)<`x=h?1()w@RGmC55YCtkAhzu+Pd$Ntqpc zWm0Ht)ZX<`+c)~v$#sS{q1sAIg+wx{;*o+w2uHmBnsy z9NArVU+hAu-F$pDIewlQPyO(g5^0NF*&Arj_;N6)Ja8{;aRCteNT)IQl?%R(`bjP16k~63FzpixE?7{VYv%BG1}vaIPYV|MH|PN zew&+_{S>P=9g7z84K-aHX63jTE<%zkwo2CT`$Fr;`hWSmzPd^OJ85^l4&aMXkTV8h??kn11~=%lsr) zGQtD;`&RwD4e%K1mdPO7>E^rIdC9Yii%^Vpu^)E#)1#!FkMVsv$S4Jk6jw}OX%Le^ z^?nGy10Yk*TFH4UH!W;F6lzBLmNN3GR6N^nwTcR%l#I3SxKYwl-<7q*z4f$uuHZeQ zJ;tlrtij5o(s#b5Xb(@lb!>mMOM=Wf(v3>1NxtQg4X(A^A6i>tSa#vXW7K04Y#GTT zrfIn^U90P+FF&Xmix*%jDah!5@mecfDQ^@b_zVs|SK+KFUE`&M#A2w$$2%dOY!8%T zzWQR;HGJ%HsvlkULX_kwHlYVOb?s-=o|rb!XOWq?_L~g;3xvT+I{re0%AA^Y+MMkD zQGc-s|D`|&0K$Gvw)<3^y9{1zy%8cSR>~7}1}$@Kew*U!!6`*#84rVqzJ`qQ^YgEy zlao1o$=z+IpzzXd{Pj}&{N%)kv8tK`P3hPrlw`Kf{J9~?`(&pLX}hdF|#* zFBVZln*GVfIA<0;Iw|T%es0PObib8Rvz829a1utc{B=_8GpNt-)q=|vu(&|q2$Oy| zW_P1sS#s)3r1%TDyT!x7#ko2O|40@Tg*~ zLe8NQ0vPS5KK>8@zg8IjvL&ZoRj8X{l0cTDl`SFLu{jC_iz{xQgcUNSvXZ3S2lwR% zW%r~{c;s9)oZr*)|2Wnf5rn!54h}O&V9p|k!<3)~KtNr6n}l2nh3D9NR0IFOAXxI| z=b~EPvOlW^rcz9z0`#81Ks$q#!@23%n2>dC?XesTp?yS^tOAdr)chV!!4H2IuHE8t ztC4pn6mBy&G$9?nh_O;Npq94H@2lI;P<|HaZ+NU7ZIvmr`) zXRkt{XDWlu_f}g)RTYJvVnIcGd1dXotV;bIr@om9nUdGGIV+o>@!nx7kB*W{4X83a zH#)B7>dVVSb{=kSS9spmU@JLT@1?l+*qS8Pqg1P`!;H$c$`=RO2%Ih6ijDW0Ycsb1 z($_jH+vY^0mp)$;L%zc(r0Mt`JazS;6rpPcVRi%mUak4}GhsP=QBjHK^U7j>|4s&R z&Wg_&jghhAmba5=3fd%pu69oDmQYZ~54LYHOHY2LCgHnIWL~TSzRX=;n{l?=dWU<^ zO(I?0n39x2ltdo6z#d7KbQzp(Tq5;>*OoiU^x(AjUH6H2gGiRucH)dBc9E->LCVwSpDjaC z%X>n22e<$)s{sh!_13Of_zNGzCNVXQ^!G;%W3Tlfp3^sn>&bbi ztfWQEYwm3Wof@pF?R5WTTBw@&*nYmOEM>};XJsA#pn!velT5N4DMty;$Hi`J34NRB zqF}?aC@=i?ZkresZkhG!w(eW=kR^lS+kp10WQPi(Q*ouM;;>7FtlRsevp#dh3k1T` zT!@97mUT@LT&EZe0s3}KIW%$z9owUfn~)l)0qw$~qd}F?pg%b@<8(CqvOlN0MI^QD zSB@0r2@;e!>vcP<5~opdiY`$vh0<4hn%a5oFU0nP>Vjmh&eInv^gGCK?z9&Ztu?Cj zF^B}F*1Z+=_urO8_n|Xwxf1y`=6j~iW@OF<-WS$>F_)Nw_p0O>Eml2PRd`-?gy2!@ zF**Tj(scV!H~)5qM`qi&W~%rfo~Vu_IxD?B#=a z%6=i|_k~4i7B{X^QhwU`cUNP9LFfMR`Cdj!a@Y1!QYs{*c7&qE`4|j*&l&sX{ngBf z#uI&9LwsRpr+`fU#HQ^xwm32GmH3OI{<3Z)nAff`4r#aJI@};Iq73UsNsY$|!u`sb@WihYu-ENrDS3e#29pG=1IqE&tbu({L?jIZ2H5e7FZbx!S z=IbY!4@4ec<{n#dY8ifiSGWfABx`NN?wK~+CWoLRYfXwvdN|* zC;dCq9uQYT;XgvetloS8m*p3FqmQD2@cVF)erU=y|72WS+{VedVt%gA=>NtC7g`Sx zDqeGakY?qNuA6y&7eY^k2g_bETd- z2*HC%5!BxI*0Q7WY0;OFL6m;!>A}Ybg0FMK&(Hs^{Vf$%Q4=+~Qk0Sker&CY=F1{1 z=-XigrJh(4Ta)gyX5(UnYDq`+ zDF!;x9$BLw?N)ZGx&~pLD+Id8?6Pk)fuqAmKE)Qr;4x!(*Z=ZG+b3DD`8Tx-PH+BI zTU{r^ASfY;5PwC7A?f8HgopR$~a+a1L+;Q+KOMsoS-w}bxS^>rsy7oS0O2kE z?v+!H5hZb92z(CsF5KXi*F6b5At15rPZPjY@;LFl>M%$jjOn=nCx?IRvj}x>Dm9dB1Yr;ovFG#bW`_7d}4LqJnF- zD2Wu*^jO)&Ve2jg5I1uTprV>JfNXyuytK2YN7zi}b+B~V)IyX02?@!Om0eqy4GQeF zs^28A=Zw_j%bTuKzO}CMWG3;g84$T7LuL5M{RUA|8t5h$qgZ8Mj1lO3`AU0q zQ1YTxtrU5UeV8H6Zl5syw@m`$M!!+K3wrt}`%mb*vOJROQs25i$qQdeo6%?fm~8QS zz%u;4I4?}PLa3H}RD4uC5;{o;Y_^!r_014+JX>0pwU2$Nw~l>bNU4s=oQQse$xr#z zGq&&)JF{?o#*KXFbu36EIwd6|BROJMSJq`=XJBUi%+{@t#5_MqO+l`}#dXT)^xfO$4#vCSiDli3iM`Cu@AZ@ERrF(Ar;2s4L~+>H>=~R8%*}u<31XkLM;FA_^*}lf z>sCz2o`wO@o25-E8_l~dTk}ouHGe=Pv)>R_sL{1tE{&Kp{`HVEv)1^o1EXAM7%c6JwGt#fHYf6%{Gr5IidEX` zSuH*l;N$Q`L-|qm9qG_e+jC77?%_V2O1n8b>9X!Fk!bq`Km-=*tDsT!9=AcVATP^n zqAmFpsNl25bf!gB@*3R?GgTK#YTmeKKvHVS-wXL_hxhg7cG5hHG zOt@wBat`7UVh$s}FOLyQ=-3RU28(~5Vs|5%BmK9sv)8h-Ke)XEDSrK`hvp$Q&!M6f z77#$#QFMNx zwyyUcb&6sG?2+8Q6(3YW?y~W2^n(tutpgm!a6WfvPZ%T^?==Ps;ytyF+QzE`-i)konF$}+3C*_r*#qNa?Y;s0xb6Nre;O! z^rh6)bK-HnkCbN_A-2*&m~t(qrhq4SR>_3c&eup-hH!7)lf4Oi^%fB$>1io*`hjV9Au0I!I{2eQs782PEUD%uo{*& zkJfMRC%`&QwoSZE*@PG8=p(Z~*#vv~v;nH@MN~=h z&1zlT&uSgf!HQAtX?75I)r~~7g)+YRgQWm7sGpry`O5t^?HZdX|7)@zm1(Sm5_1ES*!ut>HNwH4q|Q-(_vVTro=l}F-n0QiF|8z# z+Dcr;dewmeaz1Rrd!3f1AKD{)PL_yZt2n|m1)(Og>jpqIOGKa?qn%A_>_~YJ1lqm=^+HCv34(wH=#b6BXA(J^SgIRP7>dDaTMq zyJ0jO<-wxTDHa|X2R5$N@$}@P+gfv}Z`y4CUDtv(=(XRuk^6%$g#z`jgH(QPb>tSt z+CS#!@Pfy=(aE{SYj*-_cnu_>Hhf6?mRhY56S-RPgW4B0#MFe)TZk2hl@;tNZSVqR z`K1)Br!S{d-OSy48Sz_>weTkX4XT;7HFhB%N9|MLB-Z))X~_^yFNAA}_Z_qB^g!~S z`d+dNR87q}?_-IDZRtleZ8}22W=rai-?OsR$stJ`dD3KO3n$uA%4(Yd+dY2_-7IBn zUFXXJeu!-_WK$Tf;m#Foz_+qd0HY0y;#<#aN+s4$Z(6Rot9xwU>5~Bmw`{$f_6rc&eEU-cZ zgbVQEkS?Gx$YHd^y69 zjBGg6U+#7+LVH)eR(ev)O3{#yb6sVw}0ZULM*uq7%tvSeQCZ_7Vb_`axT^W4Vk z51RD>ARXR#E-b=lmVy;HiyKK7PuMs~;fYV)Ypjlv%floVjDe>$*I@)oPS?6&DY!L6b8cXJqGFXO%7uJ zK?eq;1cR*XYz>rH+h)_GnNzkIV$S`gy4>r=fA3+MSZk?0!YAclF+mEl{wX({Eu;TE%{^U@@|%nt9sRC4^`t8TN!ln z4yoEOYUjpx`_9SS>gUv?B%eC?n8oTZ(H_+JRGfUZzZ$@;tgZ3pub|sQm=LfRpWC6C zcqP$-2_#N@?_Dn=r@%)E9nCiss}qgUNwq6B&Qxb+FS+%t%f}t4JL^M?>j?}1$0>rO z@yOkn=uOR5{CYa2$706(OOc(!3CZ~WK_U3dRKW=g`nuJ}b7x?Ohn<1JmNFq>%K_?= zT85n^jRBGpdzt^@?XlRI>(=Ht&b}m{p26O5eB5?V4g*}1mOzaE-Q>n5YE_pf^xZKr z_sk~Tv48$LHwo1jnR3Y?h}oiv?HSv^qa4cAGpo4f)wFtY`sbHY1#55!^?K0eKo8+R z3X1ZTm~1sDb2qP}D+)XE2zMq%W~wrh^I)hl7VVgAZb*aOf=fK+np= zR9oFl@{<7j1{dx8H+*1+yopi(IzTO)p^AxQpp4#ZF@`mrcCB~r+CRpm?ElS-(t|=n z2J?wHu#Eg_{UM=O1ZmNyYxB+_r2?K39(3@h(<)-N3;{i_=d#IB<_(Zqy=FIqla(pgyk>6*wZ2)ox-S6AQL><4*P z%TcWdoa(3C`-M10XPfOTM3tM!#NKTfoUsGDHaNBSYmfocl@*jAF!hE#Avr16&EVbo z0ah8#Au56H43-z!t6wk6$*!&Eeoy}?c?8bsSUJRQK z&~rB>^*+{VphpuJ3klRwThR21mL`J3XmQ4?=K4Qu<9IMoJNc8Fn46p9_%@y`ZMXG} zT3<|13a?U9eDwiu)p5~~-2#sK*f=D-#h22pNz(oQIIep)1pR(ZAj*c6C@T8S;MTgN zwJXWe_{;HXrHz+On3JC_eq-Y|xq&A^yPQEO@`hH3mX4EVVRdoQ2R6~%cj-mD)f#8@ z6{E4>*z70QhfFbH(}b1o%e8j*`1^O1I1pT1+-PCp&b+^K$V*X0OKE#sA4~U_N5Rhq zVr0pQ#WBhMX%5M~Qp0Naxz60;Qa3-f^WC@*$JD5K+q}z1+;m=B%`R_qFBL<>_Vjt} zF@@)rS~)K#52?p(%5?SCR!SyBLl-$I?$yiGPgtrw<*h5IRQ$@GAM{wwpPN3K`Mm0S zdI!*Lk05sfE@w;RF~maH7U!Pa*Cww9jc*R2Z#J2Qe4et*Cy9uu99*5T$Cx`WF_m86 zPOrDQy4XUONt0s}-1umGs+umMDa#hi5hD(}2jiz*4+A_OL>$i(WJ0heQ~|PQGf26x zAD1q=KRCMF&BX>{Oj9x(b?*bFH)b}Ri}E7s56R9iqzKkV%B?C4Kz244h6-dK!chM& z03ku%zCh-mlA#0G@FhP)TTFNc_TK9o0@4khXlHv%*WIgE&zBb!;K7}L`0=8Oo{Dme z26PRAi^Ih8&3=ppm6YV>=9kx(mzI*MgucPidlXjt$WhIqwcG!v}44{;PzEIiOmXR=n=OY5D=(b?XXrniG&JN@bPZ`Vm-rO=5iml|#~{PGLN*TbG81=V#DC)K8a_IeU4xY|B5LzR_&ER5XfHTZ-gG8??-mRD z_`=T4_H<7Gq?wMqyqv7e7rXx1J@oYHuf>PlHU$>n8+rERQDtG^p+kXK3+(K1u<-B> zE6e5I>`bDARxB$hfd30p;m?oh6bIPoRjdk1@an+>+Mwi~UiNa4Y9D_ff_jy{_elo#kOH8e7!(LjN3+ZG5L z^g{6-bDDEhPO_KnS6@wtc5b1$PP?O$S>EMumoMkQ{qZ$^DTL(rH`h(B_M2^Jrlw2v_4N&mOqLPB--Le~85!s;QFT60Tv>TO7n2!8vTCat{_6f& znCRlCu1-2DXXB^@#>E;2Hc&s#?7MgF)QP-9aPdtm-Q4UQ_5=owmW5H`PW?p+NGgBr zCP($8mLm%@`WP4O-NuWn>neC7hC~eXO#=c0C)}#M3d$-AOl{3Ajo*;y>+dvEbAlTb zA0G(x5#W04$LzF%J9p0QQgl8sK(rA_xwv{N&v}79?HgA&H}{pWxE2<`2?O&^02vH8 zaPY@7V6)THVb2A^g|_3e917e}Mh}xyDE~2LHv@0^b@WieY#b?i)X=rabK9=ji zH6JGl4)<5(Ymci|=E?0DIOim;kyn@(u)rE@xr>>zriPQ6NDyY#kLy3O5Kr~K0ej;f zs40P2b`zuhvttz6h30Vc39G5St=9aSC2!l!UvFH#=FJUjY@&v_<{yUk%*^EE z=r}K*tu9_JTU@*jr)T`w)ZTEp^WFtgHfe68ucIUs}yzM&z^9teCM5d>J zCv@OIK!CHerltmwUAvsoU}=0IEhDd_qiX;cUb;YDT6_-4hs5a2<<1r&XV0EFaUwJ{ z(pg$w$G}kM%U#UDdzB|ccTKoe{V~8n|32sXwJV@2>6y{74x?*Ff48i<32qQc$-YtF z2!;~e>@Khi&1D`YCWeN3O43xW8%_`E&gJLk6%ZHT6$)mymbR1^qH#HFsS&d!jJUIlya&&w7WQhYLIJJQ_bq@RfRv z(!u`x86sJ2x10Q4o_Pou8qzEP-QTRYu&}XraNO=Gz&i)eA*kNTqFfWBecBgPeLE`$ zQs_+!Go!Z`^XE=J?tLuEdL+4YoTqW_Pl!QK{{3toFe zBZg2gh6NYfx!uvn%QHT`@NCz>066kM$76kLEbs^58t00OUrdTHw5)=vE>P2@V5vz3IB1l$tJkhIS!(SP zml(b3tFOLVV`;S!_UTr*%FaaK^ji7niUVmzdie7bZdH;Uk7jn(B)=$+7lUj?q7Xd(EKcE2d_rrlw_O zrKT1X9xC1+!aQHzd=ry8F{|_Lqv3&`!S24{M|V4$>+9;u&J^x(T}wl@PqX>v8yg$@ z?OvV{VCK)9DL!#9(#68UD}#}$K9x#Jz&7enkxGze-=+EG?QJ)+L?mF5%~W-Cmgwri zW#XtB#%y%{%7G~S7~`+T3Qf)mX&rnxG1@gqcFjahYZl(;;5d2e^T+czPMxM6DYREs za(xmef3{M^Cb3V5n# z)NVgD5x;`623Y96t6g0!Bv9I19*$+1e(L_}e*Q6xhUW6){$UCP(J1f=M+*DH?%qk!J0bj;1%F||pcV?!~#@HX5nwlEw>S`IJN=v;Hi)T8U8|z7i z=#|>&_#{v(H%NU;L$<#N-$ZB^ionC*xg6rgs?$QAV0#{bbqCegVtiAZm(3a82koFX z(hKRuaPNOCI2hpS>YfJ(ztBmikH$L3a=2K2p?hFn@j0ph7BPr2|i9QJl z@p0am_vK3Jtua#ajl+&Zc_%{miOpBXQE1smQ;#0Y`5|l$_q5N&LMnP54)s)oER>Lv zm0uz+E3L5)=Wg^=j5Tqa{f~nw3BC^Bz|~xTy--=47wBeTvCY{dDr)yPR9@L0;QlA_ zJTw(1+^Xte&k^k3#k!#T9uP?{YbVhKmV5kj?l7v`P_46>puS=j@d4>=p_L=^2iR!I&%= zO>caBDzukWzb#}v614Z8`b2&^tKQnfY?qny8O&X2ZX}0ftoHh4UgpkoStq%|*kOTF zG`EUb(L#^2u;1<&>y?-ZXe3os3`S#FLHJuT{)NJiCG6c(c&D@O(nU{mnMuXLVR4t+w0ERF^E$ZzTv!9^d<*eX4qPR(NVQu%JSBx4d&zRXu}) zPr&WD(|!ZX1MuYV!N?;#ZveErxnna1;4v1i0S7{lAIGwQ8}&8WX^b>9GMs$mNR-h4 zw(8E^0X)wDvxjLU9UYzM7+{|!*G+D&_M10<^UatR*|cKqY7+QZ=eh?pLlBj+G}}Mx zQhj|>OHcn0Ugr^pPn;0!0wr^AU{4yk~cy$r*QUB9`={2N*5++iWWoQ48xOsg-4#veh;lJCB zDc*EEsJ%gQUE1k|NuDk)&K_X4)6=8VQx5w&+HdjBxP1HePZ>$xN$DAM5_Z3R^Ja5n zGq^IH9k)lzkJ@g4W$~upx^=q~kDrISd#-lgY-{g4dwBDPy@f5<=#Iqb+dCS8-zH@? zl!26Ek`KYhZDguf3vXY5z26 zuen0^N{;rXPP*&s>loRLG%VMwV?>!5N=?E14kiv}8X0~-%7RNvTRIz>x{7z~_{J?V z!YhGZd!-i9UW+EXwg$M-?CH~I&Yms8H+wd>fP}1y?196VZ{5I!E*dS3=MOKt9Jey> z(a12^AyJA6VmAjI;y5t)sCdT;&%z{E8mq90YbGDix3Y%z_S-ib7-?bZGdX%N0hNk$ zKODlY&XdLDIip~=8gC~4d(L&Nb|unMkstgHLnJ0CTo#GR3RC~mXn|8|Su+rwfxf;0 zwA)~`+pzD}uZ3=|hl(qI?HlR82VTb^616Byignn$H97;9OD!gATwe|B4usiTwY9a^ zFe@2zA+nFAdwcEO0mONLWPbr@?{zj}#nS%ZUE9pJ9XN5mbr4*G69?Q^u3fiorTd}6 z%cLOqCh5eA4H;{0lA&6df=|t=csc}^dGzSsy z3_M$PuM70SWqL*u28<)4Au>}^GN7UA}lb%i^!#EiV&ubpt>FB)k2yEA*yJrvY z*tBU!{7zSlxCLS~G%!AX?~d*E>upiiz@N>I;Cgz~>lrcXvvK5NN%zpm-~${pmuGRH zx$SlfX(;x9WSKo2#9CQwYK7i<;r8{1FCU3@v?15BwP*3VTqc!D^5g+)pgZ;+$!(n| zH-z=fXWSwh#^xkmN55WhyrhN2+JTBb?PHb%Yfb+^v|p*MW@I1pw21wQn2^RAG6=A? zwi=t`sEhbTxmd*>BV&KbAVa^f)a;+=(cZq^dtur3xbN^zIfli%NPMniaE`$!Z|Vd$ zrlGl$)VR0bZp)1Gj`fYEU%SB?P)L4ddHMOPEp%V2of$3XF%7u_Cudav9&%E=*RQi$ zzT9SSdJ`F`cAMld-oje?nrc${hIMb%v+)zp5G50`K_=X)Lc2+p>~~v@*ZeL^yYF6b zsoeGieCZLjn{cLCqn-*F6TiVgFhtlbD1cB>yvh~7(IW((wMhVqDA{ogS%c?8Txn;>ye7m zRaVaU6liZL4m^~!HwErrdeUKUFHa8*r&LC5c2<=0QqvRtPoF*NYQS+^=X?4GpNX#y87#2Xi3BZY(`8} zWZX_~Zy%rSJL7gH((8d)HQvAL3uN9{;VuU zR#ud!jZFgfxND%(FaHLly|J$PSVn@6jfI8X7B}EkJM7n4VQk&PoM!44cqlUJXf~rP zedl`H)wbUrDrPkSpUxPhz z)-JaqHfb`ni+(ON+LUgd@Y|4ks`Au4aKTPi?i+pNAU$U}PJNPz&JMnb>18Av@!mjR zPtVn}=?OmHto`O2_rp1Wvon4oAytEqx|$lUTuO@x&t{w{Z*Ir#HL$VUE`y4=e4{OM zXA1pDqWAW1*VyljreD5>6_+<}-fkmjA-6JjX13j~&&iCA^TxbbJR0{__te= zqg~3__^YjGphzS>=eO$}fBez3pES!T?H+9~TlM~EKUWC)tnBtJ04jQgEf}vYZz?Zu z>FnyH+uLU{vf+JV9E9}jz=%i#P{izpwi|VfqfybZ+t*ud+fiH%P1a`f_zkMakYr)Cph<~DL%l$@O#6E2TNJ8%ui8r~w^0d6)nWQVKoKXJ%y z(EmOqqpGB8YO%p#X96b5x%l|*jEkoKcI*1BoXn&+ZxG+@ z+v5uh4|{pVB^4H)2tAQ^00W|HU0wGS-y6AeCdJ!3BJzOyTGwyB+3>CVq2lvb&$l$u z)1%|IZ&(hR#253lFWYBVPSfFd|^w=iM@I7 zt(LB?mb2Iuw7BvD))IBLceH2hOmCp49FC7a3^$|$mqUyYER$3U7xt#KKgQd2fm@pz(3-5e7niQf=1gq8e+SJ?4T)J zZBn$)A-Q0-o40QDij7T3{J!z`M{k);od5o4-{xwu?LcJcKZ}}3ZBb(b7W-k-3v~tDTuU4&EZE0e%8e1IN z`}oFzqHJVUU-k9$_jh-L7un8#n0DUN#oy z<|gLbo3Uc+(J~u99eV=<-M4S|^#$7<>$@{C1zf-=4{Msay;tVV$m#;&TmPD-aYG`3U}HIx-q<>#LW*ye_$Cm!}$Jt7jLkg$Q;&`x{DrqDaO z?jRZHJ9nt~T=60Bh}_n>xd#H&&!5RiPK3LaxHHc2aFVZgQc8MCN)pL1a}P|Smz9Bj zDPs2HkhiB#@0|;kQTFum@?G!a>*eXJi5dEtnJED3(PJz3yyC;_*T+Uvwb@MOd6FSg z4ho?2&OmF`)eFUWU=e)1Cqg@?h?CRq2(QhXzg|9;Pm_QjrJSK~+mi%qlz%9@dRNrw;b$SX_-Ns8OCood8-rVMTmyyHAq_e$z) z7)#;%N1hJ#RP|SN<5>Wy-0mM39vNtAsJm1KethGNdU|1DULo*#QghhfQ&mw^R756k zG&VGqv+CU^+^T{vGm$obm%Q8G&+qu%yIq(X{c2g+_$wY+5bVbM@HuD{l><^#@?PPOz_!zKvRB!DJ`J* z!mmXO1tnw@7ML0unOoRzv9sB-#bL9JJ!ak{Bt)ac``T|@yLR0=x5EbyMtTHzcm%lE zZ(Q@$S6{6LZw3=gR$G}bg`K-A>c^kR#A|xG_m1s*z0u=xbXX4-hi2yzn;7AtAt5cH zp&1dK5bN#Yvgc6V0S#7@F_G|N(T`Uc3V{~w#iKFzJ$rWS*n8l_k3U_e zCv4bpriB_8`UbZpgKt}IwsqbexpyuvAmBiHA-w_11Kjq2!USL*aCTN!HuLm!@N}^@ zU23>gZ?ReY;dsw&Zm!>ayWM-I&qnW@x*9x=6yo5??|V3IE;dhY_wZm<{_)i8noDIZ zLl3)8IO`Y~8kkzUcqUxNEI87QA_dnm`hCtFM$sNizuiH{KxgCYGh=>lDI&AvXS}~{ zw*bE9x@}v4XPjq%i+A4Hmd3hN?V+Lm!3U4J3f;}koc#R4vlw-C!0i&YCnTkpwRCkh zH#L+oF8$BJct?8|PY)00fNk4cX%-fn)*|yWwKj7O2rPOf>aCU)78d8=;=F5r#nl$7 zlCGwAK3|6mPzIN@}6#%FMdBohE`&ZHa`D%WCqlH8hp?$W~?s1J5j%55; z@DFEG*6tmLcC`;fJCHj^2MpOJ9gg?f{>{qeYb-5|jm@0=Q?oB((|n$w64pR)Jb55A zy60+heM8a76Nduxid*h^2x6Zxz=Zcb|@+NFudAkwV0qbOQs#?sM2B7@F#qJFCUp)~(qXiUJJ|e9I?ybNS z{Z%BWv~K05O`G;SctB;MW8cvHApVKB>J(maDR~`ZY-l-}H3G(w#^Y;%g zC~NLIzdtP5n`UShk#Qy}!pscwg^psDF_uUlJsK5ZV`pb>vE4HwAqwT-!DJ+y9=iex z8$nMtG-PK{?Y7fW!~Ax6ZnpJF*hN~^%v6s8Ki*kEh#V)mtsw492bp@FKb4~U}!UIepJzgoQ<)A6bq zppUYtqv}ch_F4A^j#K?szDrDq_1e0bLObz6>#_S-s*n)(v=2bLZ^9AKmW4nf<9GNt zdU`}2JeZN5wAaRB$Kk@WEochBhLbZ)MEmf_$UrAB>%2pG#b-M^8t6%JJ7W_Pz)juh zyVGH(&ra{1-qD$tshZ1MZKI97>l>SKXu-ETlj!wrx9D-U4vCm;avP{P<~HAMd+8>0 zwKO%~Y@^3*-mvpXU0d5|7_Tk!;E!jpF9Eg>!i#r20C`9n2HbuJ!$bu?r1UWQv6E{5 zLx|B$%maG#^dmwaFR*>&mtV{c!&Wo(m(#6jrq1PEtgL?0s;caOk*>#42DZ??QcZf! z9!v4rZl}4sI{Rp(XM8%H9;K=AB@T--GRC|Wqh*%nAXrzm3ipep39v{eql#wK|C*xTCLI$|;Sm0Q;?XGZ%vI5>iKF9X&V z^bhBNyt75YC9NR>at2__!J6x-$Vy2{Ny{m!>KYgu=q*-NQB^ey053k)#oF34GHTa} z6EdqCM@*&FwrBk7ORn#Mr2ft&N?tW)#LeY|JfO-L@@Il$DhF5-zrZ z9BclN>W4?Aa|FdRQ3+w~NG(NA>64;8SarGA_Tx;5dAE-X&(kM_GQg?r<`;N2i+ z4DIwJ?}SWD>TCue@4!AFwqIkN=uU4>Pe)Hr;NgyrJK_(g9EpzewcqUEh=mFX-a8K$ zx7-_eG%(OrdY}jaH;}vzxi(Y*Z#~fS)W04kKbni})IzMf!}QKO-M|P-RYC?W7+NYoAqN82-7&G2}sDP>KoBq5+Zhq z^G>paT>JMgTC@;k5la?|zK`q^oz3xaXm>U>KXBq70@FCT1vDaJy#RRhAJei)3-mBe zYx95;zuxVr2cqd{v1awEdriP}n zs-6LsSV)QUPUDz1M_kVAz}bSRjATz!+7@dS6`cdSc&AL`p296It*~IJxrGa8+bi^B zP%0a@?(~d^ib>7ROmNs}W2UJQmQ`KDXgZhYYN#qJ!8SeY}$jJG(9v=k1LzJUc+m!+k~`A64cZDy{_b z?!Jz+V8tx1y?aTA2KWthV)rl8QxbeOtX;Ea<=*rk;eL!Bnfy|hnP9)cH!%e_=XQs0 zv0@9e;o%yX?ew+%R_qW#t^v+_oUg+MTgTWGI{x_NXcr-iln}f1D`VTsw_d9<81v)b zKT2m|VQXV!VQKFfopB5}vD)#gS5KI(GBGk-O0&1OF*i3fggqrADXpSU6%8*{m6w+O zQhCo7u-2Ea&{Mp8K!t9`NV&zv)fTo6zOjiZ85tflb2I1SNKkJ9@$}62!#}pP6z92Z zSh;7LCQ0z-5Fg*gjCZp%!Ow4u7HG#78w+zI zee385jW0Aj_S#z_ud=kT@QJ2pr-o@b+ikRu10&YZ*;Ic$C&hcS?G_Iw|Loc z597fvZ=@z`x7;aD_q1KJ#&V-M&2)*;5>uLm?Q*N-8!hYt4iy)la1xlqO#;eO`RC0O z6+O=+a=xVn3yvBZez_-LKh z`$y?&fuZHlk9ci#^ziU>iAza|_VxDN83+EBqwPi;mk4y3fsvSj5pZ&H(gZJ^a@2n; zk2>sVYYz+w6jlx{a_zO>YO7&mXs&TLY&-#z>N_nD5y%7Rlq#5BL{oAWB4 z->*D%6XGsz|ku<)@!|^x3~Asy?X*dcKG`EZ1(ltzJ9soa?q6)pfDZ06O*HM z`}zC%M;%N~@B!a>qqTEh2Kc+RnX$e;i8=K-=?OktmfOI~Ew=AXDlDTX#nX{jA}iRj z_i%c8Vcr2yq3&kRQOAx&d6?0R7OUzSncMq##>MS)uv+~U2)IR7>m3{&>_JIenA_T# z)AV%>4D}Z{AH-foaXwq@&CO}L%F^Njez3qt)iJFsE&GSeL?0VVF!Yn6oqzZV>%6Gr zu(9#-&5m1RqcZ4tYJ3G}|4#qlJb5zehhsXQ5Sb8EhS^}CJr4lY`9fS^&NN;r1)Zga zIC|XO+Q`&>o3(QkMv=Tg3FOo@Hl_NJ>5o&m=kW6KiVFw`%yrte8`w~Egomb+rjvxY zIJSQCCu1M7%Nm+HI+~gr8yMM)#Bg)xeshpsIgn)posfBm)Pc_+LLcnDz z1_ueN#!Jr?mvD-Yj68Uvs00L48k(A1bj++hJv??%Lw31&Cr7(*Yw@U({AwdCpv#w1 zk`lWLntyNFAEY&Zl2$Ae+#qF;1!j8#%*^@VYV6Lgrl)wvMn@jr>FBuGJ1O3dM(N+wRE&9GXFsfD+vy9M zaPMAlLJ#loip==23_D9VFc_DzVZDAx_O-Q7#IvB3NcgpMI{2hfP67hEe$2_a{7W4u zV~34CiHUKZE-qeJ@Q@f+S=ogdJ2!FI`z1#97E(zB4+eUR%{+nNPKtKnBFgp@lHeR% zGV#0bzH`DRF&B}Ds(&!r=JL0hT zl8)UfjwJfn+IS_?kA|tw;hrO?aiaKuGW@Wjyqv78{9<_&ITU3xYr8EQVFv+)!a_BR zP2X&Si*F$((aBhai9Rhh`2^PR8$Ir88_<&88BT)O0>mTM+r`>c-_XMK8w+#Nc)@YY z76-JIz*CXvMuSTcoe4Sxj2KX5nzf6I%j9SedG_o)=nbha&8%%+?+Ie4tD~YQCoLf^ zz&+)C(e4ou8JU!nfEjXe3BH*fEv5UN`yL_%zUz0+Mnn@K1xqDhJ?7 zoA3=87#Qf|fC_z6b7LcHNMvN~k(`+kwQH`xgiFZN^YrfT%`rz4ap_Fvej>E(7Zw+K$jT+wQ$1?iZnK2df|*M_ zm7bjFX{InK+ME9P9T{Q7SL65S8vP|Ydgg%s%d9OV_CSfnM)!#@jT`ZQii zc@;SYv&bJCT8aa##@^?uVHiyk@(Y_7?fo4jz;Og~yT1EA!fD#4Ks(CxagVRa z=L;8&cjsRu#c%iV_T6l=H!11x;dpOHdxr#i?X?<4LuY3hmhxSWcC^}(aCYF~L+oHY zJkUZ&6Ot0+e0Cl#Ou~Yg2CVpg5o*Exs@tTp5 zp5z-Bos!_QdA);=muFmrN8SMi85voy`3j0kDylk*b(aDW1vh66{IRgH*|NiTr;p8g zM=uahAOYJqZ}v{1!*vqU(=(9iWTZ!XdnIOMMrWkNZQq#?=WB1XezSukuup3SC9~HD7(T+as@lqkDh-p$PL8b-JfpN6$XJXmyk#=&ForY@1m zgb7|mT(&yeZzj7GT-#WCi@@ThdjCnYYlvw7@kjXXf**f;IojwuvM-n0+SplZPWf=O z-@MuQ3*%Tac#~04kqKLDzTF;pC~)tgyu3negN=UC*>aq`-q7$%{V(M2vY)V@N=`-` z5KthYjtR$b5CUB1R%0V;wrhJwXIawD?N~tU@U5-A&(3)4tr%EXd2bje#+8aHBe-(NKF`U3IED7oUGx zcJ-v=h;#4V>1sK0gv9NY_;85vPgG5+cT;?nZE80&ZTgneeFW2i4Lz{MjLlv~Q0%frthgxt`@ z#?~h~hfFfb*`jM|ZoVAY(b}~u40MzfC!t5P8P{*2Be|*ADeAlLzZd#sXz%UidE3*y zl^h)Vp7V^$oQ=YmQB;J73(e**sk4q+U}8+QNHsBEfeq74Rl%>+F*I4V%EWYmrc+pU zSz(~tj>7>SPU_)DcPX1WQ+Y-ao)Hlqo}PR6Zqr?AXs|?8Nmo%xb%_CZHp>k47MKON zeQRe2ip0Va*qN23B}U~|U`IM~mO;rham|43%U7*l`Hh>kj;bmcMLqP)m#C^JE;Auw zX=Sw$V~6IeR~ci=RNB_K;tK;+A+sh!dq~f~AHR3BjWUJb=n0A5#I|px4&UZ}INEWh zJVNd=Ju^8vonDrc9_O>&!80NG2i9bb>gr2n4dvx6Emv_=eNz)cnk2?FHZ%YW%D4m? ztrl~I7^H_X)>huQem&=icU)}B5z-_nGcGps7i{M8<3SH=5YHq!R?v|N+cnwYY6MRd zsAj5>jFIZ>RDUNA8`q@vj`l`!VxQvR>+9p|1OJ1MZVh%n?`q#&!m+~r)c9sjpE}`I z-Az_$xv}wPFJPgWmq``O@7Lc+vL{13_7tIVxf_BFB+kZSM4qOdP{`>Eu zL^wVf+NW3c&U+i$PlEUHf`42=0_kRWBDA2a>8!Kq(gn)8OFehnXOe75i?rtkF<$j%e z@x7~OB0RkuZOmD5I3sM(Y&7me@TvRxqe18LzxacMw4$y#4)&V_?G?}N-X`spI+{|$ z{QcA^?@~o^E0tffYx;+y{dObT>&DxdSF_#0!2!5&dS*&`qL+=u*61IqFH#e&NLb_Y zZ&xl~#%{6<#t%T!eI0D=eUs8j+p{vf!VNOSpzOzE$q8Nw89(9BWdQCE$Btzr$2r1m8w%9lTFS#EmRp|m?dHUsI@Y*mY+#!?UU1yYZ`ZG6hnI9e7-}uS z{XB6ui(OF>5#N8em0-elYr+xi_%#HiMDuJ076c-Q>6cm?~RZ^6dTkPhnzB_uav&PX^qcn4!U0q2(&1cU> zE)*YfcXdCoi`&V=extR#f*!a&^3rf2K@8xDOUfu>(w&N|_?*u;gp2-p0-LA0?#U~z z>>Hk>B|is8{q>HNed9aX9KNuAm;o-b( z3yo&D6hlg?Dk@5f3UV?yKAW8Mem0GJj)1t7oRV_k!J}zm>hnWEbEIS>NA21bdIBfC z^tCdJLU(CsDytakfTJWKFl~y2;!>LXq2f@CcQL}p?n(-4Tmedpk3LCm@K}JSZK_g^~T`4jjfGiTneVUrFh3?T)u`O z#hV$PHef-lt-<@iv;~VbKuhc$w`>8U1x~w90{xd?>geehACFEF>s(`CLoHR;z9L;%g;bD6` z)JOz1dHH&3On7)0&blDHoe+2IDLQ-Rbk6ti+i4b{>DOX?*^fGsbtfP}n`KKSkWI?hpQLLwT<$_LMvUj65;K${g9U|#`jdZmTyTAGQ0qPT#d z?Bc~3GFf7@7(_=0lR9+|M0%QO3i1^-2XVesi~q`Vb6l~fkCN^I}YLX@N$3C91 z@Ue6xJ}4D#q9;Nhzxnh+Y*@XI`ufxh5UkEeUT3}Co@P$l78n@d?CGqEM?mrzVp3ha z)ZE-I;)j|XdS*&y#%>7-IU^HOGfz)5WoK|B7c9`V23qLiVy2>`q^pFYs02TR1e_$q z80e}fYepSw0Bx;6p7z{9h8)1}*|q=`jh>2vywVc#Vo=8_dWNb}xR%;|gTWjeYDY7p zofj;@iB94RZ(j=X8A-9?HH`R0kBcKM zUBzm{5+Ncq?E@E@T;AQ)Eg%5Nv5J&{NO&_NOkGXZa2Ylmq^Fn%r0KD>VZEXPhz$z`U$^IsHB0F|?$0udd>u=n;QJ<5Uurn?? zIr(66WJF|2p0bjXf|4TM93@q2`%P$&ggwF0cFn3)Yd2C2zHB#q zZBJ54>u=mxPneRSf!-1wRV4*^IU5&GJSudwwRPB;n3?n2M4yp$f~ghU`s~T~-+xDH z3^qE%MmUY8CQUxZeS#YVu6|5RYC%y!=)v@KjC2&IpZ#@Yrs?NvyZnm<*<9^Hlr&*g#yo8(?-@}cf z!_w(0$zm-D=O;otG2i zo^=d!;lD-u1}ecU;P64wSFZgTuY|O;qyUML!EKcoje>HEYaVh31pu@zgPtAZ@ArCr z+82@n+;9{14D}Q-d3w?)T^%-4@}KMMvU(Kl2IF(&cXNNZZ3lksV{h+uI4Qx)#x5SV zjJ<_R3Yi1J$Vv^{jdM6qLmiGzKbUtgJu>jXiF5a^wv?SYvr8Ftq4TzFZkuc{anlFO zk>KyxSWpFKDyn)WFAs_=aU#cxZ)`T(+c|4GJ8SNa`hm3QPAhB3jC0tCr9xj}{l{0U ztsG+0%bL2#=n8i*d3bt7@=cA`Ws;B-)^m9vaXtVh-g%p;xw$Fan=KnxPm&q}j(XMA zj`p_SGVxr)YwOq4QRddsW&BR$LznP{lCu1lnwn;&cD_DaQ1fl`4sc$?&&4evzu3@l zskMt|tdIRhJZr?0xMfC0OU*o@Bb1eN7BA6rU14Av=Cg9#TWBRkc^N5*6QLR>PADs>C@t``cFCY) zok>PAse;DSD!2z5Eo|1=+FDs{b_9z6n?*)JNmgQEYgH9LH*j@XG~9YBD#~AKIQjdB zr>5aF$lC0zRDbYKw7Z45#pRToO0NDG?MNNX;(0O{8Z|Awcg_3u*J>IZ3X<vY}Y%wIDe_2f+xl*a?%olymPp9 zKvZ=W0FMLwfUI-_8i9IfkNZme>4~?h_9M(f#L&m(?-RYZZryClN?b@7Ein-KV6;ms zEC!WiV)YG8A6CoVZL@_X77d%2T1R9gM|;vt^mSAh!**G$BquE|EvK?rPtSL-l@u43*cC-Twp&I)Ro`UU+I4Gjvzl9MwxO9Ak-1(bhI*=s zGLnKI;xdvF;IvMe#w#JC1ix|Fgi9Fo2OWH$E11SLO;A=J*Y1;`eYC`8(VI~^@Y^pu z=6~%1vnujSnW6&HDsq|;&Mq`+5-NVI#i}5S_4Ez&^{qW)6I{#<^>t~qrG~(Y?94Q# za7@kZ=?R+nEpp{n!LQ@b{rP~Yo}H56c!dvjCLUw zrW2{|D_giv|N7UNjKVx{WL#I6nwjm0k5d1PTTn(xK}v8AVqc(;KG)IXLG? z$S-g{_~ZYiMR^3IpTV&+!NL2pbLa;n4;~zziN?F)i(&Ao%f+kn`tQlDEmd_}77viP1i_;?dnd+OYN|Wg`XiE|>o;%pLd#{p zl4hz4JITyB>L^mu>=^aAGAaOk!lm?a$Lr{r+Su5dn*#uJ_5_;h;$%tNufN{>_4efG z=!94=mo0YIrlzL4x?hfaPuwzk6Qf=0kM{5B*K(Ys4 zaoO`PBqTtYojy^lsi5+urkR(Qwb^1>UTW6~N=PfJE?%sv?0lj)GySmZ>ecRKhqm*^?p-){JJiyh7|u&_3_G&f(d!fL(!`c1B8G6DqfVm(9oV+H)&5~|4K^ng?d z&RGGxcDt{)x7!N1wZKKq-U;nTjyR6X3DF=Prx5q->6{-yqF&6I!z%!$LQ&7chGqs< zm{->9M8l1?8}*mV%Fdp>aBmogyy9Hfl9H;Dl8V;urUHH`6-fyhd3pH-?l$JM1#(gn zf&#pA;6lJ`z(^RVD(UFy>o3tULJwO;N<$Mo+cPJm@Xp)JmBT)#NEKcxt-hLhp{s5n?3pYxu7?8(H00y zuF*(-Qs;HX@4v&s?Vy*DJ~){yO&Q@dm-}PTek>z7LQ}I)Q(9WHc-I#Z9v*R9eSBh5 zz$>H~=}5oD0DcCRN%l)mCpD+243L8wz)Zo_jLJB6jDGa!(QGnj95gM)F)$?@IN=^M zWlaqyzp$o;OPOADQeB%Crp`A-Tu~pr^f|mrM$%I_xK#|qM^AqIvluzZa8ptuP~b8t zi5ZzW7snDDYHPDbx2B|$fq{bHBum)cv2`=G{qz)NBm~|Q>wmg}pM$)>hsiI1jX4Sn z!I#U3jmw}%TRTTYc=|Yadto{uxXoq<^78Wb`Z!v{zl@ER8JW8rJX79&yRn6|GArKW z6&)FwUYH&kbuc3%8P+{HI?>xJAvveInoN_p)Yw?f_~oY~joojhmH0gyZzPqcqNg_ z85@#ZQ*cySGubC$@>H`boCkFUcIlDmt?(lfAHC4zDU#=EM6=uLA+MsZr>c3P_<)P~ zG6Mr(rHgfRmVnhzl^k!FIK>X`JP~PT77^*;V&~#{Xq%mlxe+x67L}QbjGzE&MD97f zf|7y~8qS_uK&xsNdMK-?C@G&f8>;MJ52i)mz|hDL9t>1pg~K!{y=BW(=jQegmCWLp zBL1bdxvhhX2dHI1BLh7h@Dt{$J8612ySUgnBWxt}bp+mpzkqS~YrlTI+rtZ;u#_fI|Q6{Rlp8OLn(g66ES9LSt9d548=Q1AV31VV5FR42%p6 z0PXOw%y^Zhk)Cr#9d?;*YM>{?(c5m`zJ2pjc2;#(T3S{?d3nqE;zQsM?%Cvy(epic zj{ePdZ&LhSU*CB1Mk98JZz@om$uUjVV2P}RxS-&i&ybx7O3A4j7^+J1O2}ad*452z z(dlMR1T zBkVj~;?j!`EKrb@Ra8-SPNyG@Ny`fN6PXR$m2)QF=;y2>#KcCoUq$0>MMM~E|MfpIWtDz3oc1(xu&bU|; z@udRkn7DMYioC3h?3W&4PRfP^>--@V-IHxq4nItSPDxK1ub#I~-UsAe&>kL>)r|F0 zu#3{N)38(96d5B)UWB)Vl#GIzncbEx4)*r;c6Kf-Ff$)kH7t#BvnLqSPF8Wc3?re;L5aR7>V_{2X$ zg0w`1#e~JQgG0A%I#hY5r2&@gA_J#>@C6O_kVI!z;Va z=IxD-_ua9>b)B2*%C)Q4SZzOWqKNr(^VQa$Pn|efRB^uOI0o`SvwAQ0!E;|ESn6SZ z>Q1{fJv=?V9BtQFZg%tm<3qEwB%!BuE531an<1OsOfMbcOf&}+REHnd&V{^H`pSoITUVyT)snr@=A3RRS z@-+*pbOi*nx4yzJXx7$tHk<8jT=zIr6NiN>T1Z%v&>=EKG}T{SXk5cGVP=WA$`>Ks z|6HJ_eC$}9y~9>V8(Rz70%`Pjf~p1wiUVjgLt{f4Eua{uk%#bu+an__QTm`S_~lhF z$2Bn;JJj3Q+S)k!SekE1%wc3#^gJ9WKCsPn=_H$pul)A)xUp5U-DqiPN%Po+<+x6B z=YmJX`Qd2q1m*AVSHTqKm>%O#`U|Npe)Ep_WnZ~+k#U7lb1}mu;s@mF;o%2e3b1^) z9NU{?2Y;OEh%Jd58VW`SesPMGv}yy2gF;$+O2BmqTKI*ck%5k)jJS4b4}dg;pGzJ4 zq@?+)@rmFlpS0|sqPJRYN$Psk8ax{I2pJr#&>j~9!KkW&(t>E5@B>=#Mtya5jK7-D z#7h_+XB_<-p#4ai|IGg#w0|KZzrfVld7GV!kL${nD{)-eg@LDFB|;@6glK~R#9EDbg3!L#$}6@jg19usfooFGffErK`9kgc^PSGWlc@zZ7cAo$imfi z#qy2o?6>>IC4gsO2Rq$nv8s-Ww1kw3uD;GSd?BxIqKl_YQK@NJN24MWytdnK9~uOdm+aG!l*U{=ReeRO-bBw}8Hv5FnF#IL zPo6#M%6ug#H+QbM1YSyIu>tWRK$U^1A8r5eUJI=z5>)Z8g@WSJ0f!=YM@6_qYksLm zqPNSiJWXGpYHWgo71yr9E(q8L(!|s(&ch=i-o@HXK~j)cwCLyD`9f-H{%UGMV+lpm zg+$b`d6{}q%YJpgqT+2d^N3@~W||c9p6wTv9BXgxdgxrqYptQQ^1FwI&Yd9cd`RCg zQ+qZaA9g*2_hYbFNgjCtdEMF-o7@i-CdK(!n48Ip^G=&=GffXU`~SwG9?Nu96lA0% z1U|)H#bJaEot-T$MFrW|_m^8v~cpc2b z6rb?arY6+7j7COTSwT?+)%Wwk!{Mh72dN3o6@4Z9vlz!B0}h-BygJz5{{W+ztW3nI zfcGm@6(@E-!%_D!z6hSK7DHzDOw#_R zDBU=-M<=EUV$PYnP_k($Q1iRjb#mT~0GvrmMLd z6R&G(uHeHD$sT5=rVC81OiU~-jg~HjAGSoR1=m?cGTCX?HUM7Br7H5Oa-ag_0F=s_ z9tR_~thF?^Tm_p%M?qdreu0sx$HC-87jyKwO$@2iOd|tbQ<}N?me}ZwR83VweHB>% z0xz$ixRi`6YmXV}FIH7j0Exr2%wv(B7M51F>i|7Q6QMo#SdD5xk(2vRImUP;vydriHZ=)5f;@IYSPp+I+6 z*X{9n#l?k5-rIqsx?)2q9MbcR>yEvV$FLNrrWy4ZdtLt%?PF`}5|MoD2YB%hq>o!vgs06$2VY1!=A^>?GS>|UtKVzC(afwUEy>T%W#;DRmz1_NQUizjINQM=P3Hv*WOzTD#tk1{M_xfi2M{YE;o+%ksILnq-PGK2-AeoQ%h#-3 z^OdEg@iIddNp4;_13gJ#q`ZnoI`T^ThI*<>N(*Qfwss4YRCSi<>FFW9<*hb;z1e=V z&DXY8R<`h!19jMobvj>4OqyMj`z(apDJo-}btmeTa~e0O5-{;Ha*E4dtJsuzpX?e( zN1wQ)q{BP5$0esnyVz{;iq6QyW)rCe<#!(SRRq1-7kC={Qarp6*|lwpo7)cGoqO@% z$;HRf$IBts+uLi$_HQ?>Sm_pss(=h}cHgsSo3%O4I*x!Bxj5R}J34}o0P2B8QWi{J zrs0s|CrcA7_fV48Jc*;DY1l9fha#rXb5MuSqrEm;SlHNa@g$z8q>`bojHIIevdKz1 zID-DbFlQ6yz>A=cZ>ycCfw7)>f+O;+SW8+1~R#eLel~Ke%nJCHqq^ zR{Ot>;Fy+x&zlvGr858_YtF@s;}bFIZ>igJcUn4S2!s^lMLM_&%q z6$#I-WyFYZ%jz4b$Vp4eNlMGB8tUS9>K+gPsW)>4*1h-w}A=K;DTHCr+Nb z(A8X5dn`&*VX+}7Qdlr0DJg>4WmNJKNnbKDS)!5OI{4^9UVtmOSle)3I}WibDk&-Y zXQ(BWO-6lqU0Lyo(LO^g`1ktnzwdnZ5QRk`^^hvQF%Xifi2N`BgBep%suIBK^V$B$3tn4@TWh_R$5KEiT*9i(#8qoDoThVp zVzl?Z`vou+UPr~*Ls~*&S5(w4aRC8dK^;96)y4WofPZ~`eZ9pha$`ZP&%{;4IjOU6 z`6UL*QBmq)N7cFKNGj;4Dk&~eR8&-Og0uPII7FfGru0&MSZl}2d0)q1L z;#iQRhh;<<6Mqd=+>-DV_61Uqm6F!FHmz7;v1#QB z3mOfB-_jBS)20il`-Sb^9pT~O>*0az`vG(|mYFC5 zF#3My$ShHD_H=gkRF;#G0@qrVs(zb>_bLYT<~3ZInwqR|eBeaLbiXWC=WZW7yats5E<17p9o6^QOcj6p(fC^?sXj7ZqpKhd_~xB6 zjq}rxs25n-Yp`^wp$VQK80kpAuEFL=$fwXcZrC^jsl**$!#nxX~4R% zj%XCI#^iWMf3Yg4B2`%#S!GjeGn+N5Ep4n7m2`}j8K_DNaI<9EXVV0~v^K{{g_d?6 z5gvA=Y#Wq^V{CK=JvqXY)Uhu$(N}`&$VyQPn;VmO=FH)qM&65~y{(09g+A@<0A)Mt*c8YPUMI2?RzprxN$aqJ6smQE3&4X>+7?q-8WcA~Yog1q4Z)K~G6~ zv_mVG2+oS3+IDhG5s*?cv(tpFqNE_D;b|uR%Cd7)?h^UlXM&2(M}@HXLLP1SO#dwP z(NYj@X+3?Z&p7zPvN1I0=kFJub+IN(or^=#P?7pbT>jP79!m`61&9y!YVH`He^_`b zIV`Qlwn~2L6QliE_7PiSBk})5v~$e%%Zl+&OY@r}E~g?dDL6+$VG=itmza03SN`Ft zQJx;h7};5){S*it^UtcOt;V|MnrsFvLR5sOwX=r6G|a8!l#v>jQY%8u*C9$WyC(ZJ zVK9D(cC^|WjlSkZ_#J=xerBuVif2uX_EPY|=$JMe`~5MD;o@gkwynkmZ3$SSI+ssJ-m z)Kw%$4S@ZndYDXS1Wd_bslKW-uTzAbg_WI|##|*y&as1bJdaqWXXcSi$6k2YD<~%! zM{wBMnJHq5yn!BSNCi0s9V7756kmJeIyy`Aj7$v8JfgC)88x-Flb~IjgLD7ye{|$z zQVvm+6ZoIpROPVv$1ULtAZ?~LG`+=(m+0v$fj8+SDWkN+$Up~J<(OHR?VnA?&NHy_ zCj6b1iZ@Zi+FV5(qeKeUHo&EHR8hW0Eb9Sbxqp1J^{1+8MRq{(`1cQB`7F}9L-F&20g30*a*{^bmT|5 zu233oC3U`cJ0oj-k{N4jY%Kf9(H_c@$uEG-q!`#G*ICmE5TGXWYr<}+CJhs=QFEWK)ne*Hn3JZpv$BerndWXhLi6(S1VV4RKpGS- zuMj3W;H^uI31byTtNW`H@f#I&bv2=x93-!CiHfqavgRv^liUJ?xy@9M!B(WH6RTB% z_9>ENWBPvg{rDaXsh9vTu-@+vw@!7&GFO$uU6t!>t=!2`_23X-fS z{~T#0anP{4zreN#M$3$7cBXm;*egz2N=iyz5=BZ1Zy#n-*V_V4Vj7FzFW6CEYQ)T{GvG@iFO*z-V|f8 zvQiqmkM5FHBJ})~m|Pg6Cd-dkT4{;CvB4508I9dQxz*JDz~JD>WlUi(Gqc{Z#fE0S z7ThFjYim0@8yraS)!NlKu++>MyU{ODmRB}&G1XlR{ME=%Uq?}D4wA>}m^b2PGySt` zv;8DhNrkYXfi7s}xHvC+3o{aZm(d}iBg}u)U#uw2`;I5#U4LY5Ha52A<^0rWf6S7} zFF=}9c}7IBENVhB(309~ggm2vQcZmYx-=~{8|UO@qstQI5=BPqVGFXbu-(qo%su+i z)G$9GV#KFN>FX=1$jU0{=;^8At(z(0w>!$yD-K&O19zmEX})v$&on{U{4xrF*E18@9E>v9{wrN4yIT~Nx{Q;fq{vk{!)bJQp9wD@Z*ms?s%kW(!+O$`@HP+r%}bAbvTJ}gmH(PQNh;3m@t!)ydN1+N7d z0P$e(WrilpvG3|vYi)eI6Cyk`zaR=iLPA1ZT3iCp{8V&6J?JggrCG)O5F;{;S3;Wf zV$jjCw8bJu@F-ZaVf=d%5S%zlS8@0EKdxWTiMD?wu(=EmM5R7DCZCoH+tAre$J&l& zi081#N8}XoJYNv0vszYdmf9S71ARqF0q*JC0+Nc0Rg_emqmG8D&BkgDXBX?mi*-%S zG`>$%?-% zWHTKA&j{nAYzuZ|S!`%-Zb~(xU93nF&2;tUxdkN^^uT-Leh0Mw@%#6Q%9h5)i>2p$ zTC~6W1;FK&kdTy;mc<4M3i>Lt7y}dMox?q@$bGtynxDUaI2deye{4@OS6q6r9wt|S z8IqA#Qj(X(3&`szVC@BNRTE>(vPHwRSXEV*oT(|v%c>{}j=DYEl3=rSGybD>p5Z}ztK7OIeQ{sXGb9WzgQjiy*8gTok9o=neqNl1LCGaPaKWKtZ~)T=pC;Gc>+rKRoCm6v#Bzf4v02VaH(oC;@+ zj=3k?@+O`?U@<3)X)av~CS67OOBv}ezK{k5D)}py9=n``W~-;A`3uc~y)@cWML|w+v62K8n*l`1$SbOt(QM4VkW^67+!b}S`bsUh zhwwAlRY6Y2P+vh}+8d!G8AUU2ipI%IA+Y()DR$!)^?+?q6MqlzmU=*tU! zHW}JGzE9qr3|!t=;eRhmhdE?|yrjFQk_391i}j4ae==aXeX4{7A^`;U10+xnPd~)x zh^vf6K{-M90qkXorVyAjMO7vsgKc>|wu^9o9V z5>OQX41o^FUMw%kI|@k^9aTk{aaM9Mp`^O1igHp2kIy(JMtc*MjcT&yx*AJ=(xgQ- z|Fl#mc{yGZLx{k?BwU43Qz>?DI}qyc{D5BPfbKk zNJNcf)`!Q$q=GPjOcAVeODM?+s_l;Q&;(ahUhZW?ijTOnY2ZDo`KhUcN=6qc&7b0? z;Cm{nhvT+HauzU-K~@sYDs0eY;Qq+TtLT}~u-R`^S~hrw;24IZ zW2m95BFW9ld*PfZr0yS+ogL#J=3#CZl?E=T$m_!c=18j=VE=wYRqT*KI;SpGmBV3% zv$3b=MYyt`8sAiwZVk^StdbAz3OUcg?K?*XoO+!}YehcSO83&>Na(64 z$w`hY#G5h)_}%Eo8TFXqdsslJD5LWB@?3GfC2wx^DT30n@0euCErmc{EHAgl{&T}Z?qER4t$UP&E8J)>oMI`Wd#N0_OOClnZJ#8@OrgAe!j zb209VQIjo!cvb$Ih$!XdAOKqN=eJ>>m%DY z)RTdW3&m7}JNx?9QdE$Sz(|*$$kcaoIuY$) zmPlg&r%$<8@fng`g#Kit2M}#%kH}-N4i~GdYc6K_O_NZ?LLclmC4rfl`mERl_Y`pz z31SO)kiEGNsD*`9Q5FVv;u$4D>wY9Yj)SRiKOFlLqB^2$k=6qsrQ(h68!QC0>- z7PH;Kw9CIrp|~ZLFoj~V%%7>hX}p4%{3av){%AL&pss>s;!~nsTv3h}^!>%^>=-8v zMI9ZZ#h@~=DTRuGfr@4p7G(L2Z*(~w%drr_OAVF)VcC_I<*zoILqJY({Q7f)tEi}A zfUOl&(O+wL6UXL$g2o6lmw3hMQ=bl#=)yK4do-j(3(!0H-qAV1}kp&ffBc{$SUcZ zn!0$}?e~6QIVIHl#o_bkVM)Y72#rSZEb38hqld* zX1~>0gM?;;nKN{`CC$b{B^I`);US!%$^?tZt7J5e!t#Ox!OEWF zo$~%@&oMTR#feaypAzk-9$yGuBr3Wn^ups)lU{(FPU`FH85!t;udaukzhEtSOzJFJ*GHqi&A) z&XJWVI_=Y;-JC|Vv$wFauygisrqRrRh*sBLL2notA2%>j_+Yw9vXbHgm@y)wsA~Wl zS&1bo3l`|=n&AE-mQiW zFXl+98X8hXcEBW!4agVzi&YgdUW)osRZ&(-QtC@Ha~fPOlR93ZTm=kVqyLWTS7!-X z$4StB>4zh+?#q-{i z{O@*wDcpjpU^;l;=y*F#P)0@15D#s2l;mU-@I*~jUKS5@z*)h;^+x(Sm>W7Sh|Dbj z^b2&~D`a_^1a?LK|IED!SX1ZLHXKF=KA8kLSZ1)yGL?di8f8$yIw2?s2o;%S3K0Za zgUm8x#W#q=kXD#(NL)2ivZ5-@S$FbMWfH)SJ)&$;fr?c>DP{*Q+vNGz34`?b#E^OO7 zTi2{XO(!EFzDBbTj;@oH#4Q=xHNa|vi=uDvxt5{f8fE1*YM&e1JK72Zou~>}SKGke zPEW|wMPxOMG*>IA>!84~F4o1{086`VFxJsf(^5le4jq)f2R&(IWT*eCYFSEE2MuvU z!$kqcXv8SC92_@j%e+;KpsJy*qop=qH-gU5F_^uj*^Ilbtfr6$zn*!G_G3f> z3OIg9YGZ*Hq-$XH$}|JX)cpXLQdCOaSQG0Asj9APWu>ocrGtXSZ@gde`Kknqcxtbf z6n!hMq=y=P;KAKA(thjLi>q(2*MDc0PEzt!l33T+29)iBTUc>s@26DKEwFI-TRUq5U7;hRfkI7ElCSzV zf*Yl(i3LTG>nWvfq$NAACJ!6{BkgzDJ5dEad)wE5mr+N>GPWB~R@2_bNOv}4gz->x zOY?qm1ENu{tIrohd%c8|^7>h@+sG`Ttm0k*Wz^P3q9dcAtN*7^my|`BIU`i-jpdB7 zG1_Pnwt=lKR&k)F3Y^qHTL;V$GQD;iP%zR;-`H9Y_1v9p@~Nt;|3;`t9A)4ftl^hq zNoR3cHTc-xKwauh4<0^eWuT}2mfhDvr>pEhqw8y73T6?s6E!|+Zu^G^-~a3al9CEK zbD>9+zScv97;HtH)BbGte*Ts_a3Ytbbuv3y!e{!%y zMpsMnwOZ8&BL+6gT1R0~o1kiCuk&ip^^DLmc(sHD<#txW44nAFX#e3%#o@zdn4Id% zF7-ygd= zq3~zyR#w;E(Z+bA@dk%Yjy49GsV03jcPf16AAz^G%MZyRgw>XotV` zQN_a7MG?!EbPHdul@@N1zMYNH+hugv7qkpe3GoILEw=&}&dLgT&acHyQhiS8%c~@- z$cxO;OjS?{`Wk9jzEKC6Gw=%M`}e>(?HsJM|L6foA`&<=zSqyrS62#AJ0cEU_e4Kp#AO_0PI_}c=@1hOoOIw>2VQMYQk2I?}B zST+vp*kEmEZ@0nG+RE5SUk44}dQI)6G+*IML`FeFUtde>t+T39YI?J?VvICp-&Pb3 zHnY)rRW)p>&n-1!iV(G7$41lGE{ygckc+2*9o7OoN{KEx+Ce@vWMo#q!yQ7UM7G!* zWp%{V!A${YQ4$@khYbe}W~Hz84t)BFu3&*lDz7ul!qsmK*b_R>X z_*PvXIo^`1)wIDA#N0dddeK1xG+f|Kr6__b<598E+`JW3Zlj83xiUB{Ob(|dMd=;- zR@VUbUkj69EluPuIv6id)+VKaIf;L?4#=>{g6ja{sPG|T0=69|rH9Ac|Gz`KEY@QM z?I|kdev?Eg=-N3LYrU=cQ0r+89Uw4v1{$xtbJQ3DRmK7Mb@b;ZL!m}}o9vKJtBuhv zowphvh{}SiY$q+Frf2JDqxZU^2Gcgi4ydE6gWabDfrMzsiP*pEEW6C7q8<4& zz*xX)YioiHF_>qsrLaORBMn*XX*F~<=z^}3fd_pxOH2v`8hPo+i&`zKDvOOM)Wp1j zR|VCQYDOBf9?)tnqt_Nk2B~7uk?7Y+s%jc*&LhF#i5kylIR0$uVMlOg&k=)rv2cj# z^$2WKo`eFmm>!Z5X3sti?K*nKHVHMg>r{mbT?1$kC@<6_*FbxL)R5F_HLU42+`N{i zc}?mO@LY6_wY4{anxk zrR9NYYJL#f3xkX{z1QL3zYOh&zH1xls>y)mMaErM19L#6RJE-fH!PUd5J4`Yoh>G( zuWY##x`>r6wkezJY^{uhX2aeNJOCtB2Kq+UC{iF)2sQ?9>k`q`*jP7o7(^K5+5n(L z2SjXfvsGZ~sK{4OU-yI24sTiq|Bj{msc7HqV68hpEQDg4R@O$yceFE}rHQE2%0^#H zPfHKJVq~DJscob;PuirgfrhBVG&*eozP+}(s&G#wWr0V{cQhqc^+A8amcZ4Gv=oE{ z4Amj)8tWRPnd5J=3OffIeNExrAzbL|>!H{nmIFooFVxXI0gUNtX)l8I3(AVJ_&;B= zpMZ9BQd(6t{-3qzW)u_<{rZq7s<@QQmzTf)0@IV)#z0ntqfA2+j~D{_(Ow}bLXVH~ zxw0QReoY406KpoP?K*0oASSq2l=;svc)vIp{{ z`aU{aTz0O|T{z{@&e}+4USMeMZJ;yNXvBm%O3q;-_V$#Cw?lBUZJGC|~%=wp|=~C}?ISQAZvWA5~YFlR|OfAq*_Lh+@P*W9RP{a8?67O^rEs2y;D+HD2eEZ5;F! z-Xu_1yco96cJ_Q7s*%^y($-f0p!Ct1df}Ut)qXeHRX+jkb3&WUAxV4;43wA*rFV(u z$=VuoBQ4=*4k?jOvy0$WXli{D+P}u1lKG^Y_|vQZ&p-b5z83(Cxmu{*wGgpYkp0ws z`G2z(5~kBg9IbUxn;K!C8cC5QyZY>xP;Uhz9Tbq)R-1pOQB*;He#rc_3#qYMQbbn6 zz*t93cEKou2y*bT7?Ym1hMKz0YbFo;3&{E(Tu&)YYX>7$@ul3sS7-;#W%H)4M5Pzl zDGS`EqaBA^Ud>VY;QL-#$Flgduch#xqn1_gaN|F4NmsMp=sEjQXutFqiTKHX|L4lL zV()PQ73rk`n}m`D$5GSGT$)5R6Q9kSMZ zClDkRH1)wZS4BtrjEwYkw6)+eng$vRU|&)}$Jz)L8`;=cA*zb_*SkR`sc!Y|iAtFM zkrAE=GuHiZw2R2-180{MS?U)w&rGxGJ}}^K$szrTpv#ju3`-H5dCO%O^XN}H5>#8nfw?$FBQwt5po?F(a<&521sh?ND z09_3Y#2tW-E395DtsttZZ}(P^&RE#U-vJ$0&_d4J2cmtox-RM~Z7;d>FKFHpBYlv0 zmu_Lc+iok7SS-?#p*jg7!c>`!5qh9PZ2CU%tHZx5Y1j_9a>3 zqwm3@g;O^V-(pHBEucV@{{Mvb41B5lUx#*3a4GV_AmVCl{w25zYU&CyAC%^khh5{a z1fVTBS8JU%0zsc^dyB#XdRErP#s)eX3LoV7NvY{$-9FWX#0F7rsgD)a3haczra$)P zSc(^9s=VS2^IrYl(rC#`ng1c0s%2`j)&dj3H(t3&GA|{C#rSYPL7p|kkX{Ng0kn@v z|3yM5jkx?5UtD>+{p|ladF3Cg{%`@MIv#1|$J~HeGK=vJiX=~Ba;hy>E*-63F8zsU zZ~p7hjuTTMv6!ErFL5hVSgdN5*$arsTap+*)dtxJqjV1TC`A9(S;G&BE~)7lS!0*LzWP@HUCXL_4`G~d*i9}Dvg^=T`W9>o%nD^9 znUZe$rc0T^QNk&;uq@wS6iAO*@=GQrf%sA8U$cW(zMOO4-}?N&#c;U4z4HRgNgpV$ zBFUUO=|6Gg8JxPc2=kWBd=}&5iM<$!Kf`Z+kMPLCXpg{`KC}F5(GJgA%}Wvc@GC2| za8ll_4wdQz&mYZ93z#Gou}`{rv1FzI6ejNz(O&(Rp`Fh|lVY0N2HV!Ydhxu)$dWvR zF^5DELf>Eu@`N~i!HhsK!LLSwEUHYTkO}kq)Tr<*aUX#9wStK^g8gE0a-Xt=2l02G z{52Uk4AFn|*+qUo`Hw3n=Z$rLIUlYducY@6uvxI0=j%NQB?~1~p)8^VEWS=fWS;%6 zR!V_SefGgmC(W4Qlf*t+cplF^f75GX=dI=@h1b!xR4d zqgFC!M$lp@_KD93Xy^Y`^ysC8QgSn|h19}h54O$WD|zPWBT!KSPD{$W%)A7N_iC>R z16&TP8hrISOOQY@d5dcP3=8>}BFgFXo{o;|!0T7cI^ik8O(&_yFSa9MEi?1G#I_8wCw3Q`*?v!QsI{E_ZC~>f44~g2b`FtxRTeJ}mYx&zfN>Er~E8wBLXJQI_|E z(2nGY`5|#2`Q~?FT|_B`!D~rgIq$7-NYyN6@<*gPBQ*knGv?xdc=1=!BjHR* zOD1EjC6hhyQ_6BQxJ@WtD=n*;{72Kgx;G_3#FF#ssZ<8ItQ2YaH`S(e%M`CMhmwP# zT#i7cQp>RRQY)F&B52>APES34JjH9a_;X`6#d{^LisTM@y2+gQtW-&#X4`-NBigUPAOHCl`{181VYM*W+!1c$%K3O-+>A&!&nsxKV2_Tn z*)7e?y6O|j#QL_uJ_^y~jlm2`tZLXQX%dU^-aeBw^Mk@8f3_9aGXmPP@AF=~XkPM- z#x9>?sq|WpsIXd;-W%(jWRZCow*;q?RM*1dFi4-hwN3IZOnId`Uh@Y!L@QfnI2KFt zjJQZV?Kw|k>19=T^*Od!w^D`K*T#b_ctdG|VQY~gzR+51l{ z{uj}X`yHA4-(OFac*)@~>qw34(N`W5ZY4?Zn9pIg{JFP?Jk&XHl&%`(wvnnqMmZB4 z^i!XSh*`FbU8GRb(qFad#EI20F%_cH%&V)O4~{=$QOz^Vc{*pAvMHO-2k(xBjrApw zQc{vX#B`YB|LeE=4_+`umVTpAjH!;nVbxjALBW#sUZ9k(dyRGA?JV>jQtDDHRaX8< zM9LER-yf1Hm1vn^DJ{`6BD9aa_-iZ^?j;3v#sSQShlbSugW8>)&jdGXNqRA(J9zu6Gc(6YF09n`6^*#LNQfFJ-t=xs^@DG z>AH#O=9TX->~p_gnc6}8GkH~FwA8&(rnlf08sN|T_Kfvc?BKO45;%z~*Zvs2`?m=0 ziJoo_a_kblvx>FsX}7# zz%y8Rf;~X*pwh2jr&H1iiXzB+L{}2AXqlK60ErSX7NUhIQ@mHdS1}!%2t-d#LDPGi zTR;*xJV5>jqP_e6{rk^&N`D2~F(;1H%xnH^E_%7ReFv<+ax6XrpEV_=8kHtZahTPA z5|fl?Ar1;}=RIpg#Oh`^N=x>P2<>f;UnKuEXs;%bs_NZ+@o5tE*rV)wC0B0_ImF^y7|e&PhFngI^AlEj>bwB$br!rp=~ zzluzhPHr1)tLD6w2UB@Fqdw2D%TZ>rzMRAqOwUZS81r?75(p!IYG&e9T5l1we>Z&p zS@rUz-@(s*|NY;;|Nh6o*x&x=-&cPB*B>vSL}ESQ4ydRg_we=YD1kl&2K7cHkHmZR zu@YmDJK19SmS$Xmke)-ZU_F04!D~qewT=9zRTjKt%Q_B27%q}XW=#BPfszt`YVIp5 z(%L)9h;^Ka>8Vd~3(fJ_x6|(fnP>bJXlIYzWHy6&XL9CTM-kH0vqz7nC%_cdCCk4% z4lnkK3UJWz?q{8HEN;)?@TSq0M*Z7O)=XB25y1{;PHRCdFASr%a<=V)tYPT=mgc& z1X+J>{>^_2W_Z=47WP1$#VR6&i23esg@_ohr9OF@GrRi|IbG?P;z;4o@V__zTrab( zg)=cDm{aB|aNFQtfC-xsdbW$9z4EvF&!6&uHZNP+9h5%#&y(-+zn6dc?R*{Z5*wF^ zh18Q-lU(i}jgoXV=g~B$4ihe*POrUsc_w#|*D^;em&qxcDw~)BvcZ_EH1k=!Y9+Ar z%!x-gsp+c}i46xiFVr~Fe=3MwfBt4!_a=} z{%@=oFP^iMmLBa|x<*bxwU-&B6O?on5_p6hemZ4-vRn)WHAvOfKmuAwXu%`24)CV{ z>P+SodyviHFusouGBVWB($~~9GmAg@uWQ$uYLXICn`+>%(9p!1reB&@63SM9q!K7? zEw8RECLtz_EX_0vMOld_v^CNe$@RT`z$F<>{UOE*tVkQUiO9sJj{-|pXkfUT-z3zN0-D@2w^2;cJpgJ{8Kfo@G!Vm=%g_^HnF z4_reD9RPa#{3#e~khJEy>Xei^{)532tZEgIo$AK60k{Zvl+A8yJRyyfumBqljEg}c zC0iz^ux7?bu7Z)Pr?cO-HY$G%yI0S!W&ydXtSje);4wpKxeCZ9>8&3XJVtZ5=Y{_l zMtcwi;69M@;>8OAv+g5KL@gGRUtwB5*rozTo6nz~cw1#E0SkQeSO8nh1lz!Cwh%&J zK7|1yB8?M0G1y9cvs0c5gH5H@vmZVc@R;)wP|2J+*6WYut69@i?>Op-Q{p^&YrCXL zO#TGtt#7L)rMy897JNo0e8s^1-;!Hiyx^!TUuv|QnkcW5QqWu^x9n3&`a zfR6<~%m!s~6LBn-fCaQ`>gltmQ#=-2mN&)Y34qKpNX-In8|=C$aj?wfZRWsuBa)Od zC79I+()GOq{FzC<02Sm3c$}w?;El}Vkt@ZdEl4fAsmJ_T$6_J0Yv6O0J8s?o4XmT! z1zO2Vjdrv@C%`1bE|4thSS$v!uCAH@%s?~0lx*=js|!9SgEax3s4((?YCu?m6f|A1 zuTABTNjMU3a%|w|TixBg!(48oshkLUTn_JTS6qcTJy9+8HZ5%ydov3+&K>FP?&_-} zSPrQ>vSpAP`eX`5~9@*~~OrQvv|<*kEHbxR<1Qdb*0V zn21VM8=F1KWe>E~*AuI*-mF%dQ&-C^NK8&k%NQ4x-KpFpmzj$FF-tV-TaYFul9yYe z_~7I5p%GRK>nXo^E-FAwORsNZkB?tXmRo_Y09pVvGB9KkXGVZdQ7nXZb$sq&;_cD< zjf54z*+5=DTS~OIH8!HC5r@^>!ltJwF&WiN@F3ABn}T8cJ|;Hs~I#ybzNg)8~E+827oE`wNlBAH~HYC{>1JZ92*Ba(pCkQ*pl-H z@}A6_Pmq+}&RnXnM~C{`*l;%!K>r^y{Ah5fPC`^Bdag$&?&|x?%9?^JOLE|XxUtO6A)3i8y*?W3lfg5R#JY=TW9$)OMS zl@Z}n%VrZy)tvEBK1l+n!XpTao5+L}$Q475Sh6K!MnGC=!34F6Yz?c0WI=5=!C6kf zGGti6NMoU|6K^W>_kVp#3`n^4#y=AA9oRdCP}8?+d-g z2Vgn}+nV7~s+;-ag9A6;4*g5WD}AP-q_lFDBFO_k0*`)@!{S^WWIy4tForbB9e?of zfj}UboSb|DUJ7`m&ETYhoUv{W^xd3c5Yi}R1UU=d+CPTt8ISoXvr*_7hBV5u)HO3u z{m0Z3?$F3MkhB)WG=!X<^LVb_MocNWnKSj6S6$6VdHDrJ73|WP&fo60VUH%yc`>E3 zglH$C*)>^_g_Zqu`gJ&j2MTs2wBRACodZX=t*@`Qw^d1g`Me^4hj%)J!VJcl z^oS+D2nCeI2i(3lOiwpelKZI2g+K3I^S2MUz$#+jVAXP*9B?R66LRYVkQ_1al~0hV zT~y*9?@NVER|JMrO`w>H;KY*Ief1`9AMO-U&Kd0MprQ%uvmWWn#u33|W)*et#4=E$ zZ0_jLFc*um^7w*@si#1qo`Od$jM%4jrHhF%9t%mB7=d!Vqn%2bM_wNbnqNDdmSCF% zoTtwhMtjg1Q~GU&0Ao>&$#P4IcBFP#?AH1dDan>9mYk{_>ea<{Ejpp0NX|*-C`rqk zmeJX79wm@YZkc~5QTjwHd*&(ALY_dTq~Dw+r(!CkIv@u;9w-JD@9|T?l;G*pi3!Ac zfPEo+rzBH)xpjYx-CJ^I<`otK{%0nbjH#(b&~A37g76z`ADhLSelel4gj@L16c(Bk zt{c=kST7GKy%3SuaCv^pJ%vAwJ;(}0Q$@KI%dqr>s41P^m*u1?U41z(@-Sv;U=d9T zC{#=|F(Fdu^t&BB^p38co?AV1avJgQ`ZX(+2F9yZ4Xh2cHH5uS#a6DASdrdA1s`*{ zQZgz9F`?6mV9kMXrG}hbxe8V4bltk$)6>=7PEASvVhtKZC>(&UX9lp9GetS#k#S4V zo(qeK=`OF|hR}2!`p5L_U9fk}7k`7b_yr8~wA5CMa73YSa<;y%ww8HT7EmtI(+Poq&mOtc z-v)*yCFR5*dyspR|MWQ!NEXOqRcrT+s+1H`GlMrZGchFq5`{^;GMy@iQxfo{abTmG z2k!K<`QYR}6$nteBiYj8GbJSwXKH>%&Jw=LS{UtyXTD3jJ^Gy2TsMHxs1r-=w=31% zq+%6UD_fXr%La+cs}{sKAWRS%$HvFz^;WQ8 zOgw+F2-+1+pBZ_EsmljXIZ8O(lG=8HiL$by+^W?E>WzbKDywqto-cIU=H=xZd74f| zldOQ%4G(uCPS?|Zy`#4q{^;oHqP7K@6B@7PBdlYOMj#T&Y3Vs-U}t&&-^8mz%_yo! zAb0e1)Ymm8{fosK9BWDl3QA24_X)5039Huvn$EsEJpO3v>D1%#;k#@`V|_i9e!(~D zXKXZYM-N31z^Ep{+${df6V-KX{ddRsJQjOk zaFQjMn4S?JV}!-=#_rx71C~kpY_7^=YG#@{#OCp*o+6KTia&T~pczcmmuBV-zyPM7 zK70QB`O_K9^L;I;{ORgNqI9y30QWQfx9LQasy3n5w1jBK=3tBC0j_eCEV?90xe(1$wDMHbeY zDl1l9YjE1^beMpasY&vLFodhbNs)s^PB&>vxHLB25cR_Vx2-;hf-XU!(96g^=JprBiVEAs^TpDDVqB0r*&BV?d|TKE;KgWWR>`8b;Be>V_khK+YQG0nyN(L zK-Bu`#y$bBdGaY=*y;saK*mh4+-9Ay+MLiqJptxQAOJJ3Na;wE5LMN;cd$0l)qWM) zu4BzV@2-MjUD`5v!9y3a4x8f7REz?Nx;H#JI6x-IEg{;;W#_XZoD5aPm6&a1ayW2? z2HW@o21#j^X%4-soBKrYRz6IHXGuWJNQt*Lo$^z&JWlp=r--ccAf}WY>)}3dk>Mxb(~91S|o6kS&;b!0lu6o<0SCQ^37@my1&GpbqDiB3oeF^Jr>pXk_yF zqp8_7d8wf|zeMOZP0u>4kNNYW_$|v9;V+;tRnJuXIsmGx>bKcI)4)=pz4qice_L5S zc9EK6YI!oTCMoDtUp)m0oLI|DirNM{4bi#uEORB!f`CL z-^XoK6#wj-leMXt@$u_a(NsfuRy|ox$h&x0sfUOuy|O$btA1>7{5klJQ&of<>S@2g z3seeheNK9M4y6klu8q+FUFV1JdlaedL=uDlc#1XuOqB$I+B-Bl{$z%QY8Jsb@~X5jnkImq6EoXO@G537Sn`hYI zn)GyZ+!#cxs*KVLU}v|H&qoAj5lu}&NC{Z4AyGLKB1nF4a6}ecSQ;X#@VSwBL}YLT zjiM;6luYMLF-X-6{`6d=dSYUHX!ObS1bdJa|^ z?`n-CPj3fBo|DddRHxFypP3eL7CvI7f&aYx%%umT!}qYUr2Q#MB1?vLczQWG(_tc^-l*)z*Swh0lq1Ixn}9KyAIszj?W)pr)y*siEo8R4`WPRY_SpJ+Z(o%jrs+B|puA8Gc>L z&6^xPQkPTw>6u1Kd)EMO=EZY9rU*+r9n*bya4g4i@x#>h~kf*YVY2!G%j7}LCAcHKDDShk#?nr-k zb`%YXCsA2M9Q9Mw)6~*6Fwil}BFiPSbEx#5>+S7yIwdD4sH*N?wZ{v8;7r`?D>nZdnHJ2E?jc=XweDbiA*-NckwRz^@ZA!HRs zooX8(uTtTWKzB{ND#unPcMNeGXUn%F8ry`$4I&I`JttY*EI7k-)hg4nG9qmCVbjBh z&CCJl=Id6AtMG&xLuTFH?D7b({%JX7C-^Kr%hIBmBfw1b6YkLH1g!+VsCnOo_>u=CEva&YTH?O^N_2w^^3;cI_d4(0y zex#M=MP<_lN4b6F#rFMdz^mHtDcits~ODUswQPas~ z6y){L|DJu+*UKvxlb%~$-J=6JIc3xv+$omu9f5i^#jPMN!sOTZ;)`fGE0!GX|N8eA zFLB>qTl@m5>pnMh3aTF%ywg9}*EdMZEu_IC64TPsbI7e+I(kq#Hu8G_wq{_UZ*XLE z7?EN2&4##3JRaxfSlcmkr}gG$YHQ5an3xihPvq27d+$;Ko5?E4CmP$>gM&Xro~mnR zT|F0N7=Lq+NvdW}JbN~wf)iUMr>H2m0y}z;zRZN$MQ`syInqgVYIqf;GS;JE{K12V zH<^v3WQ+7Pqi(PxIDFw@eGF zmoFNLl*N0Vy?=igoT0mACZbEpLtmQxGhR(Y+rTKOrr@6~yt-qNebh24VMTfe1(>)z z|FK|3Q0ozU{si+e-%^Ccu^Y7y;CTifKTBjGFS zrk+3LF@;vk4&3-?>5OBj=vQqVGr zIB#l7OsACR<)5O`JGy|@^bg;_LSl%VgW4P(x^?^39q@-be*U?y|IWQTy_I=I|CgMW zbHN;yea@DNnWm$2*m9;h;53n`Ij~vOvUKoKGpSufDK)2v_=$-WOAh8}&qkoqI;gKb z!Bsh3Wk3~EW>ielTT9*Y`g*%MkkbR6X&3T+u$~S$(j%UQ#I0L!4?Q;qAFw`que`&0 zeD2xd-+ucI?cntfw@?ebAXW-^B1{hR`^=<*q?6J(1w&3f(oJIN7?Wm9$y+k`O>!`qqaJA6`Cr64=s4 zJ2m+fCWj=A6VWv@B@oi7C{tcG#vZFDQ-2H$CeL=O5HlrbdtMl;!mXf|YYRuq+TrbV z)KtH``tTtG3lcsi%~jMX3bEcnG@*1+O&8rl!mqjb9cSB?9_=X8|F`$3oW&_Inbj@4 zsVfCd561=@nG>v^YQx-oy*yomvs(v;fm3rC&CN`~495~3@LOv_QDg|}f77D@umTT-g@rk9*#hc%@4U=X&h_>j<;Bo0gU6S4 zo;`DhR{0|}he$A4gn|a&NBg% z!DvLQZ~V!_rli)f@$uID;;b}qnM_dz2`)uU12RdeXRn?0&XwvoZS@p#ypb}B7_mze z;(uY*rOb&OCZNRYbOI);AarCoWnvC}xT}Mn^>SjC!}o^9SB3@CSWP>B3V5~;3b zhTn3cjXQkj)~${l#rHt_YJ9+%Gg(>V5BiaAR$M}~r`FUqGMF4rbMh($y}gMiP2(fl zgay@dbUK*#=4r&2CAD3mGfhMYnd{dl6*OJBoOCJsXv6nP>ISlN38U2-=1JiN1xbMP zZ&Q*jlv>#-%W?883~70lFEbN-LQX2J0-BRk7EC6m6TyEX08t<0a@z=UqPli-<+0*M z){5h;r;qM)-D{}6T3l4qQBMk|!kC_DM(z*zJaZ?(R+$nJd#87lQ99_twACV8sPw=S zpPMDIS4Px#uut}K25@O8A+zN`lGc_ry2ss8_-O3FXgPN8;DOjLDk?e$g*uD15x z8JO#9X2BjHaVC^x4a~^PRN7i=YOYqRh~Xp^%nJ$<3^o`T80cx8{0WQlt;k86|5PGh zBwV{zYiMMi)qM-NH!VBR?I>+{m`)+55fsHxl@vj46_MJ}KF9_fk^^mJ-?~vEa9?Ww za4%v|aDlFlIa>x=f~+V)lQ?s`Sj+imbzH#Fq-~sDi7J&8RvNA543Q z$^uPqoD13Q?0h81{4)V>URcbM`G~{7&Sf^WUExJ@KEv2uHUZkXgx}J@LjZsZgK}|tH(^VcAdBNy| zna4BFA5Trquv)59EDi^4^~lP}AyX*lkN!xdz)n$-j%;}}!2wZKcN9+3kg?N~sR^|= zI!#Wew0E>$aCVYSW=&5q8N8{-PoK~5QI)pXvQ;K!u+bMh(F%-=SR?vg6i{Rk|Mi)Q z9J!@N`)9xZ&&z-R{vOpeEC%apQ%zFMKay9Ts5#=KXGSCrGDwz|IURJ9J#$+~vxMEfX`G+SJBD!GpfkAjANr)b#Z=6r_|`GgBNE>!-`{x<*>6e^XIWB6c9B z|HjYV-M!tF6{S%gh2=k9Z%27v>h%sPQBK2l%ax}r3FHUSyQp;dB*j#W$p*t#>XzN{ zYF%#^W{6W56Vq79>oR3RS`HcWm=po(WhSukz{wUxyFMNtTGRBP6&ZN64lfy#Us=aV z!9rFkHKmO#<`-H{*`0U#dugRneh2cKCV8kRD7lXJc%r4QnO`T3TU9o|`iGHv4pBrg zA_%E95uoO;JEN~mVNO4NGB)~fLNLQ;G0%}@G)uRh%0-{04IaqOXr1d-ZBO|P<;cbLtDerr** zug8y!cG4<7bng~NJF5PdR5RAoHdr5#MU<0@a7jqb>_$EhsIK}OKi60DCoEtGXU6(E z=Gbm83uS5X=Iix!jP(>&HqS7YVbIsrQxGv76qZnlD4n=E-bSI4 zbJBAnzuJ3PdD#kb*4NpmPoK^@cA+v&3`cs(n}E$%a71G;)gAS0LTY3cg=bEGF+_l8Pf(V?tuRGIok|{SlrwOq{h?k9Wk{%fqkX8J znM@>-UkjZa=0+`sc9~6nzuvz6>zy-aGL|hZ+Hn>f`4!5q2 zu(h?Z*|InIXk=tzQFcj2L}6j%@uZNXxL_wuO+$7!#njZ?Fg|E+Wafnnks0UHssyiU zL{^vvMbg^os0`#5c0hGxqz!WWiWH1+|=|Ib&nS9b7$~H&_`P=sSfc6(j}eYHO$| zs39gSyT}$UKNEn*m!~heZGZ0z{A0~(ShBKGlBx!pQp!Q6di(0B7YTW^$|axz2X3hiulHPq3_?JxiP%H`T`zxndZ&lLZ5qWN-DO}Kx^ zp78MS#KeTmZ?N$ZqKc+YS(F?Uw4!$*H^+obZ7<(nudagnuLU;)OA?QPQ;W##6kkdi=p@RU&sjdJvT^g??DmGGL#)XajhW4 z93zp6L^7p=LMAGMpmY1my$gG82vaF#VA9fv1QZr9RW_~Xa_Q|I9XHw$8R(fS2xz}v zMocTCEQWR+Jih3^Fk)1(YH87)UPiy$(N0Y#n5{o-N+grBGJ|w&HXG}s!a@Umy@>43 zKM#s5E{-tIti9ZHxi&NMkVk%Gq=A7B8kH-KlhM&NCDf1H?QN%$)5~%YFzNK4BMjHP z)|M+-%^cypDb+202aPmlgFnfY8@AHKiIFS=rb-IBvo(vW3k>c)XqL$Ak6HzVL71TKobj zuS=d+9S)92%lLd1f!;x-VA*Zub}Hy0=_}60QaCvxodQx5RC7YHEbGwTy-pDskq0x5 z#UGZHk+Nj*_*hFtajDg6S_Vd`H5s|V8HJe{g+~LtJPsX0Ae4 z>%dOfiKhBoew7NdoKcanI(UI_EF;joti_C!zrgz zuXj`X`iF)GOy0|MV5|8_kslr(aJEwzlkZYqDzq2W)YKFtg(ud0YiXe*vD(OV6|t4i zK?J<7mkm2J{rt)0f&+e08L(9{@u!mv)f-QKbLw1)Z(BMvp z^y~eDP8+l6CUT1CJR+tk(BVP2$^dJ6wgy1X#MDG_nUtiMNjmuZWR!e@i!FwBb!<-i z(Td8u0}@M%c9gCa9_5uW52~b-)5(-HU4WjWwGOJ`uyXd?qOT_1A`ozzlP!`Nf~Mk; z`oEV^&If0abJB?BPKPa;dCk1!70QHkGChZ=EVinwu?{DrtNpq#YdMotjRJowa()al zHr7}@H)v~FdiResGxM5+a90OgeFNJK-^{F)yG}%10h&U-#p-!pmme!^-n?no&aXCY zaCt`?)<1s#=i(PIUY}%SV6@)J zDL6Mfi=4GrUEQ!Ohe#l%A*Kwd@1hVDS_QuA>26~1;kx{wX;h?$^uYmJ018VZV>H@d-8GTN28$g6U-~ z2<PDjiDnjuQDr_miB%+7Fu|&0 z%{*pSSDidrn|kDcd#HPOVp3{Cf|ITWSbO;v7J(R?MI?a2q*HU!;1yA+BO|S0Th`3G zot7q-ye_c)Y3Lw_xQv3Tx`vjvuHlh{@PgN8ZAM}fGP2?iuThp<+8spei}$eYwi{ji4+TeLWF0eI zvrgB@Fz8^A(dxOXQaK{En*!9iy^mYqlUiGwP>>&Rz&Bu>ByNSWxf75-;FI;2YEy$f zT%7GTI9l6m@%=jQ6q{T&UmT>F)!)<{S#N8TnU<4dwEA^sxU8FsT!rK&*DEQQW&g(3 zc8j-BJWqHYQ`9UZ@gHwh`il`z1Ri5qC;#=!6Hc-iX<}N~tZ5Onr@VNSoPOpEEf9a6 zOe83;TDpyX8RBejZ@amzo=E+R@8D`ACTlTV&ZKD@~wnjX85 zn$%RAY5uvst(`F_N-G;X=McEgCVP9kEl7777&s-wg>KotH`HhIrpHpKT4dR z4?f?8vJ$|Ly67mn%baLwa(U$lmp{9*rp( zhyk^|Yjkp~weoc2Mh9ax@%KVIZtYn=WZt)x<}5ARQN5<}33fV#nodm1$%=@~$jS&J zn4t4|hn+SD!RP4h#GF%sp5~yzM9nj*>P*X;e<}Eh(Q@&4NnanZ6LvjT^r>uOLLiiN z^-yjK1xH-nKnqpdC@6rt`rjwBDt|Z(>Q770W|JdIr0c0-`zA-dMPK_c!THMc%*3yDYdYvllmF#LA zdut=>n$)<8k->W6;q_*6E5yDynR+}jKNemN=!EM%=rp@x{JCI5g*UQWV$CfQCmMny zws<(LmNJ+((OeN!d6^i_@)u`REBSCQezQ{r^RYnKgEu}T>HB$v(Hd^a(IYT8NK-iO z)WF)>#@;z3^oXH(?Zasfqizwj^Pk+Oo%yaXZ-?DdtJRmQnAMUptJTbd4(@fbvUdzN z*VfC)F_}GHYC@>YGBeApNjT`?<>k4{)62s*=4f8wp~%za<)^cQBQr80gM%W>zPZY0 zDv3)^9)%+u4$ zKe49vZ<1=pjtKCJqMh`#^UQarOLN`uK_W|Q+p)s|^=$c9S&7;jblj&7bripv6mn(y z@z~HLW98vs&#bhJ2qn&1swr{r`N7tRAcCC8tC_HPPR~gn={vu_#`(Wzsi|uPIUV$HJ&0CtWMm}J^xU}EnD8SuwzjYV3Bg&^ zFZj_~^l~LIQ5g835^*1n8%^;Uu%?w_rV{2=? zaTB(I4%nYAo}M1I8@41l@7TE$Z*RsJnr+^@^83W_Z{OJ1$l#;7c|o7+=;|9;+k#%k z+dDWqI@;MJ6(ntO+`M(W>mq1p-@jk+ohKf@H9~Qz(Qa=3!~dnXUq^v6Q`Ptk8%J9Q zN4KqDSh3~d8yI~wFZ&#=tqO5Mm9`&FHRO97a$0YohiaCyvQQ_M!NHNgXGNHsI~fK! z!Gq?8mGpBtbrvgeA}f_FSpp6-e!Z5Ct-Zd2GM%byG?%hargWaKys+lvwZoS$+c+8+ z={s%@-E6lvdoB*7R9zb$+HiF)mjO5A;_URfnkl_~?#QLo$)dK%{n6YVBvR^`rj)iubpt&eW5-SQ zD8w;43S5r*W91r!!&l;s)l()Wdx^qS6TivF?5!IO*}i@AW_w#38_diAP*Q>s%?L{`=X+WGT2L}evbRhE-_HEUw} zIqC+=WOC%O9hK5L=($%zLDkOIYJ;6nUwZgD2Od0)Xn}F49N4@-}bSk{7c#GSb=Fz*<{oSqi6_ z!BR0v2bD=pSDvdr}cY>arp@d5(%mW0jQTYJj?iwt)@e zKpHyw`kJ!1WpoO4sJp9sxNRj)`b2nAzL&?*j0|%#EnQ<<2RmaO^}}WDJ-6t+q0Gitm?_+BBh#s^5l(9es2C|DGK<<;a=d|z+6E{R z$|$q7RV&(1KRYr?aH$z-fCFH1IPE-{ph%z($l>Z*BxO|6@2eSF-r@h8+L@t3RE1YETXRexQ8^bQ^sKQraf6;G3FcLppQxJY+ zVYIKkfB(VQg|i^2MN3>7BK%Tai>j`HI*~$9GzA|sO?$Hgs<6f)Ip7jGolbl8E=1F_ zBa&NgvIp}s>#M3;IIJqOgjBQn&#S~srzncg6@-c?Syppq7?u*^>Q3cUWeqDM9dKr3 z=VHpH*C}NkRWqNhO98P#wX{|_0&<01_O^%qdbaZsEv2rj*WJ!WfCOsK{!WWE>4h0la ziOMqSI$+pzwbW!l7g15;203vl83lFSBOxLB>QbVrx>j~VzulDDfsPF*U45|d7SeBz zp8oC-UU$jS{-GCG$!xCURZEM@Dx7Ev5_;C6s#f;u!hf1{<;YD{nZTe)nA1;Ech)qTj_rfGSbl0HMR%a3eswi97-_K2LrcwxP}_4NuqKzmuPe5^b|9B znYz8PZ1u!c%e*k>-h+n%e7D#;ZbA!o!T~o+!$QK%rQYKiEgsybx#97CA6H7ZFxn+$ z6f~S7BmSGkO0(@4<}7;G)yz zKb$f*H#`z|JZPQjY8gpvAEh$4*lR1NpLbgKdRtcz>2wPDn3<+w!Fq=fC-v1*!mo)+ zsp{I<88~X9X1&8)#!Pj6HbvAzfM;j}9d+RM*BZ~@ifp5BOT#sd*^QbtxaJ~KNnGAT$~+e%x*+FnOPQ*VQVt*)x16tEuE!?d)r?gv=BgWP+$z}dmp z%Er++{$E#`;!!wywXBR3W+HRaP3OX%;^^mSKVFD%vURl5kRr`67eDcetGa(b8Xr*j zT?OsJ8f8UEk)=aB(py^+Qfsm!G&Oad%!p~ng21~K#fhy_G$Evs&(ls9MmlZQBX%e@ zPbhJe%M=`K^)=PvYnx7GM3@I<1buEEl$3bH*%?`DymNvok&|)A53);zVRV9jpQcbFT?R#U*=$~+hxO~pS zTWHyN#t*+<3b*8F|L5=jJPH3T+EV_dWeN#peN&`yDvY0MlQKWwU^Ks3jDjtqIkGx- z_D1FnO*JvD&KX(3moC*4O-+>LX2;?(IOxzpvSms$k{J=K2WR%7h#(K}MKdxYA~J#u zk?(UPL03P)S@qSWWpo^j6>yUAi6NPk8^gDU+HkAP_PXWVL9;m^fk2ovzTDJw`O2li;h~Z7hi!e`-8U9SJNb5JQ>q(&SMC|br6y4?Q9L<^ zNT_1hx3Symj|G{Vn%7P}MQ!+}E+@F?3U_lAWr&vNyVD~&%1O^GJ|Y;bepX~;`N+s% zD+P2SfheppEGrvCW$#^G9q5#5##b&buAY9r0f+WFB^m0b))-nl+NsaNOjgUv!QNO` zQ(aY+MmGIUcFWMH=;zC(`roYj}PMO`W7`=(lRJp&_DR|`^>k(HHo;bJRX zr@xPqW4d}CFM1U~&&gRKYUYx8Q(m6;M#o%-hkFy#3Y7HAYKddt%jQ!`I_q*XbK9W1(Z=1kzn#5WhOr9%O_FW)2I z-q=_roJ%MotD~aa?Y1#Gbs4R71v{#MZzI|_~a2MW5L29Ydo(q2*bS23zn#_&YH+&+hBh?Hlcd%Wi|Mi*Jy*xp_q7Uc1eX*r)7lH&_|zX{oDe7;Lh0iHv_zd%UJ;8f)$; zYDy-Xh+xjNmagG?8@r7gH#%%`u+`DglX=(gG0n8uAfrg(u2q_YyL@sp3(awpma^LH zl1ICByS>!=G&*Sn?}A|Rha>#5_O?zLG+|v9=`m-mg+KssM_ofuwNgjV?FF|`Y3$6I zB0OGw>Cyfl>G#aH6Nsq$cAAO00XoE^sw<9Lt)~O#LS0i^&&bNo8QGRBf}$y%!h9s4 zC$IfK2H(_%JA3Rk$4YQS6$vQDM@H6(kWN7Lm}ZAITUo!3;z+9MI%S!zB2oyV5=_$S zHJ7*8S#7X$aIiHt3`$K3PgsZO!6Op=_N^OSN?DmlB;{13ho^6JaPVGm*o?IlW<&eJ z>IQWUO>NzR0w-hR1V%GyPD3lE)4SRiMEf$qv)0OrGiUy5D@f`FT{Y3AL_3FbbD)j% z#Ts?JgqoAdDa}o(=K3hwjsrQAk(FJo@2IPws-a`-9J0}IOURak>$i9mW<&%hL&4GEsB=iP@7DdQ13nwJm;~PR|k4Kqn(eLfUl%$i~@xY_FE1{AB~I%GS>nz6RV!){7p(mRzcg! z(Q%Wt^#&Uon=OZq25G4#^A;IvB+`C+__zDNnMLHrVkI{C)#6LFg)e1cfoq|uZ=|WP z#wj(zKmu;QcC;=%}BT|Is5oVA7;@>tMyR8{pryue|6>xZRO zb&RbtP;+$RU{%V~M*veaEQeKxq)0A}UUVR0i#OhL{V#POw6Y55q?fvys)DTKA2~u7 z${*mCw@hE#zIpRz7Z(pdKM!XY7f%<51-G#JKCLKs8(!-#uO3#XnIFFhkQc=vigHA~|5mT@SM@Fo5M7pgWC!(XOW@KJlaAdEC z%ND1ItYgIaZ6Q#Y=%Bie_M1B-wQg_38o;~qnuJUvhtQBCM~;MthWNN2IHE19wqb*e z^ki!nr6ZkKKbGbkL`0)LmdUEZM!#W%bI7lbR7=J;6eJwM%?rVxgWU_Fy^)KZe53t( zOkKwoBvp1P(QcrxZ{!qgh!wY{RFllLL~sgrSb>rqI>lwP!FCgVZ)8!HN%hn+mdbfG zeS5%rY`zmPZKo|ZTlPi<>FJ7rMAO+t@l7>FHYO=xA$cm}eb3c0Nt< zGoBJo;`;;*lz~Gf2iE$!y4H?Hs-hCrQ&ShOuWgYgUZV+_(FXwSL*>#ww;qX8~L>#n+lQ94a6Elo`gwbhFi zK1qI_7#SPow$<6m+&m*9C@8fc=?H?pfq}lBu8y|07A$>rc)3!V#`gAB`dVPNG{8n^ z>KbhTa;POEK}20>73qzn*F#?viInRdWhZ9h9V-=agzIKW&JOmr=!6@*4`Z~^V4AFq z&_OpnejNH3rql0h(>B2iWtj{36!8GSWB!@Gcbj%{1K6egJZEE`0KfbT}QVA!%S`*c9 zsXI3Gl2?^=cgW$chWt6pA*7eJcjU;)px0=uV^;eERoI@D-gWEtE!2Z)A+#%_4h)CM zzxJHf(%%3(ZY#c&Xh(!Y-zYdpT|rh#Qbu1*L_uGBK9iJ7Z>KritRZ$0S(8k9)ydSF z)RSMRMnpInX`5wb#hYm$A=T0ZTcWO`rlz`voTG@7(bt%Fj}iomi76#rg{PuwP*pP< z36NCK)VFomV6?@j;IbvC!+ZDcbr4Mqg=ehfOw-DM@Vx1EA~L3+V;53zayEg|4DQgx z(`V0~K7BBH=k6kCZy7mTh$Y)M0E#}sAA0#QoBIaV)r}Kt#R!K}iCNi!8S$%SWTd2& zNK8(1^2&F9yMl&}zOj{qv9Z1`z<$KZKqBVbk z-;R?%`OlN@YA65M?_a!ub`gc>v4p!tGTd(UBxkmoY zN$jF(Hg35ddZJ{i7_nW}p{e@MA5~OF_49+C9)`0NjevCo?&@iu8zZ@pFe#oDcC5)o z!fKGCWyS#h|qQd|H4mu5*sK~!}+ zTkXo67h~+CBSBw?V8KjsJ1xV>K>f{|K^zDtrKSHC`;a52uP~($Ys^)RzG1%FLJ7;3 z%QYcK^la=6FAUx2qH|BX=FOXe{8qh%fw8r{gSF0ToCSZXP6CH}{`@)Me3HYcB4TY? z7Jf#HrZZ=vVfzfEmRwd}s$#Y5t7VidlP#A28Pu&DjcPC39PJElt5OyfS9Qubwni1` zwx*_eW>f7+Gd1iYs%o05YHDigu--|-u{s_ikxZwc4)R1(EGB}J=S?UncA2Vew%w$4 zft)h)UXyTEfdRS>K7I}wH!TdA>Mgj1KfvyJ82%MeI^3W1lNbBtvAwMcbJ${ zhI*h=&ma3-|4-^J#MPZL)+;De-kg$QLhhimQyn%t|F{f?%W_dwnz8t^r?IxTHP%s; z1g>g|eSGTlX|RiHWF+6mbco#l4Qshl1pEE&(p~3iEP<*P}x(_729{dUjsByqtr`0183%zV&T`1Fcjt_&_Vb0%t|+jYylj zL{1LHR8m1lU*V5lD}kc8+9@M7QxcafV4;3jXvnyLnX(+GYP+SpDAd{5#@HokA$F7?WGg_;riIH9=|x}r;y>lc>j(Ff|Hn1lE42R;Ro4m&itLO( zH&fTp);G}CRDG91te(=|e01Yp^UNS4tG#>I>+5K$BVDQ8r&~U*!{OpR@mAKx4&}$xgKCVxQ$nFwEB)E2e1DL7 zI@Z8K&)5i1geuiA&7}7yM~ks%#EIP>zMZy4UE9zDb~_iL{n*lMGOB=v37*Q#5t#I-QdKy1+|Z)yO`?=PSUK)B5#BhCx8*gLIL*uB&Ufe#;goLqoWX zxzp!*2KpNBrXFh|ob(OPH*%U8d{#?K9VvNkLX0W>v`fti#Z!5w6`Lm(IC%~xpPDvT z2qlr+j0(T^24w+7YOkb~pDtbK8FA82`>~!sp7_FytYe4cm6u3Xv8!`997Z*k8j@VC z7L;V9gU*hNH z7pfXsy80kt)*CihTZ0#`r>m{0sqt2@LIxCo@dgLS%?^NgBLgF&1-CHkOy!FNypG7y zqy10%$$$3y-*9i*cJ*~;@h59hzp8&;{`SwJBo;GDCbadAc5e2GKmg1#fgR+%r1 zE$!NR(ERXWWkt~?wC%F1Rke(4Hf#V=u8d|ol~Hm`-_?J)ZX*2_y)SF;7Gr&VAo*q| zYcHMrQdSBr8Fd2#(6h1%GE(mp1`+rM`lpg%nSy8li2P#IyV84WE zjh6;!Kd=xuGNp$vnd=x>+ijX~}~Q7m1f z17c~DnyRIt0ayjKsUZ1=AFsJS^}qj_n)-cR3-8%e;Y8oPW5q^`drWtLOn4o38?$j`_ z1Ky#l33BkJL!yY)H;Kxs=@{E>MwOtB3!!PypzofUzQBFFU9m{Z9hZVu8YnrE~rY1OHVP%Ze;O&JdogV~4iqFc}N?%P< zgh*bsEInu0JSU&tRi=zfnMszTIfDh-8ollp<}1slrln_P=U{K8_lDG)P`cjg{w=y% z3mrdL*y)tNU$G0crL$9pu(D>&5^mv35lJZ-LZuUP)eB1Se{ebN<+2HDS%5q_~KPB;(uF@WCI{rdTqI`OW7Bs;hPM z|IsY}DnYEX!O_?Z^;wX#)r7sU(!t?~?JJZxGrYQYx$oi%;Gu5}s(m;kXt5OgpzzMI zT-d=QUoQI#(Ejdz^2?;9r9XT5_f*g#E^tAspts+q^z=ks^b{y8Tx3$G@($+O{cC}yM@XcFR zLq=5#h?vn^KkkTswKh3A*xFhzi1tc9{Eq#5oj!l3oARk>S5mP|scr^On$>Li?t@4& zS{oc~lbrXj!>xCWNRgkpjmc--vJ4Ai9;817>Wxzl?c?eQCJTwJXhPKv)ptu*zm?9tWcGHz(9$=s|2 zOn_z8w2kaGZ(bPfBe2t+$P4-|#cXR@YAIL~rIz++aQNJo)lVf#Iz;!4gthRaK&a4_^rsT*ni zGsxITS4Y}$E~bpP0dU&N%Q0VN*oSf0Qd7t zLxM9Z`qEazNh>KSNsGM~+RgF1O2=Njm|GC;ujs$6hy@;s#EMtf(dH?PP|e zhLul}0;LRx)7@yTZ(CpK%s#bE~AXOhU=BnmIAU zLk(*r*By1S(UQ`(k<_$>t59=P%@ZAMv7G6`OAW}w8`@@Jw11ZyI;$J3RxdT$lM)gV z!0*=826BG+i??wgrEXwvr>n4Xs6s$mm`x+QKu?Y3Lz{&P!b4~4c+$6MocJKpC`K58EC$? z=AtsF(8d<7wqbr!klxYZVK>Y9ZH#n~$F!iR%FznZ?m61%%Ph65VsTDl72_tK#bmPC zgKReQA%nzXHdmwJ^vz7(#G}WLrY6RQo)px)fOVyb`;aGSs`&|geG7}^Y6fp&YI=gl zs5*gkMh=-m;Js~?m!a`xIv-#0ZiT)_s6qZ7r`6L9y81-I~Xd|~HMo#4d_{!;JY z0{!Ggq~{r+m!RSd^mR0V2q~y(8R>r0GLHaBs_NQ082pPTmO~fAY1xRYt1Ik1JlC~S zMAj@QILJ&@K|x&`oOnGQZ3AsB^Hd#SLB2fXTH!dutkg(uBoM|rKOE7sWbl(NP?NE4@&2rJ#+W|x2oD! z7~U0@812|@h$Awppk`JRBvgRli^GQMZ*Z_TQimrL<17lP6%+86*n{oIGQ6s6HclaCCHdbTq23pQyb2o1}kL*ReQ^YD>Ve zJYq-_j~`D>Jr!^U>Uk;i&5kr_4(q7r#o)l`U=FyGigI#_CPWHq{{!FR6x7V*Pd%St zF~4{DMjBUkgFjs@#EB9heu9~dKCpQB@a9j9#$*$dsv$yU)cs6CR)H`_cef!Cy6eS92pkBUUQ;d)7HPF%0LlR&E{Feury|Km|{E*Jsl@$yvf$U zynZe+A$~a0Y2DkF((=Ex4OAun;4JFu3u8mF+Iq6{*y+utBaTLgk=Lo}s3D3Dfv;#! zlb;eEMHH8md;{ND-$j(hoc-9wW&;*&)}C$twFufP?mub3e?kUnfftmlw0stelpLZd zfkI?)rrUbEZ(N@n)^KO&&Yj_N{%!1Wv@R8o4)=F-{5`UUX(@(Ipv@l3vQSxTk7drtoLZvHZ=;5uY1a>FH=8uK~?= zZAWBO)j=roqSoL!5w5SorOc%K;b*n=^g$OHTUo77N^&yL*Vp|Jv`gagZh`s5ST(iG zlJ}(p6@(6zii=ChtX9?3OGwptyV7hqpF=IfN!sY(G}KiiYhJmPBBogp>vhysu@Z04 zV`|!(2C3h^Gmt2yfpG+s_4)j7(n=O7jsI#Y2yxa|T}JLu28HRc8jBgL;pDCpmvg56 z%r%q(f&+9zbG0Z=Z25<1G{rL&mE}o@%ZvOKwtf2H7`v~v9ve+BUCm`zQQ5N`Qp}Pu zHOU>~GRz!qK53&;yQq}5hAU(2nVa?0@}smnH-tkqDfNwwVBM!Cp9%y5{`lx5Pw-g4 zf+b+Kv@kgwW;L0b)57QT;NyY8v4;;a zJ0K!wijJUDsbFI)Sbx$nM;rzXJlf|trz2<_td{bxHz?+aRzS1!4z0@~Gqgy`vm2GRz9MG9Bf z^41opOfk!-VxlNaCaN!El9iMcu0ni*(@ z?$q?cG*qe(orQ5f;`Gs#p9{PobY{5mDi4hpy~$>ejiuA+$`%3!+!_DD_$Znipdzjp zGSYjUl4eRUO`~)k{b6`$aBQsk3%#J$yFXLOL{pO!jqElAd^#%bT#-C7mVyFvbM#iJ zzHjXD%ruWP!>a1;AMCr+-Erea-ynefVj1PM+u5Ew_fRKaG^4Pqd#J*#;^!Po)+D#D zqjzMC&q$dS8>MCj|1mcG5hrF!>FDaFnkdRi;3VY0BzcyP%ygl^W zz*6VifBz?HDgU7tkf)?8C9{@cNe@yB|M~NoY3@)9DS4yXti&08cB1ui!Br-j$k{@A ztITm(dKxH*cU8YCRkK(m5<}!w0u6Oc%~=H=74w?UH35eKgbQBn!;s4@DrC9@ZaH(N zzjVg6il%ypVd`1~OK9}~}gXb@v3+g168ttfyDH(v;H#l&yja^T?kaarq+}X1g z6&2;@&NVbd=o&e@<#y6eXBXy121e#)WJClO(puR90gH3eXXV^4|W&7XHj6yS2M_WPAn%;h0z9hO)Ab5t6G1?hKDjJ^m#>GSbNq zJCI`@pLL;gkx_c9?eKW-z1fw&{!eNF z!E|60TWH1C=*p)Ps*>WHIjp)Abf&u{Wgd7$(up`RX7bxmC$X3*(zs;SN(tq3dKU^P zw^MRX)UgDhY#UwXyV0v%{(EYApdC#vWXi}{ok;V%8MBu@Cf-OLp$n6B|I#EWx%VdTX@ra0T0X7%siTTKF#dAVX1_IkZ7r^ zuch*uYYMKin4sX$HY$mTDie^dAm?Cp3@yp;06J_ngJfyJNq*HG38$FTL2u;EOth@G ze(jyeIGhwrwYCGf|BNy9nAdFi8k#_Xm@TY{r+m`#57%f?_-*HJ58c1dnt1VoC%wdI zZ)~ip!rDnQZ{EDrke^%9K+BE^4Npu;Dkw-W)HBRJORKbTv^EIJC@P9BDvUf7X&&So zRT!02({%Z#%SlZSAC7Sc2imYv+3;r@cVuLk`-IDV^7QHR7wE{(_|vCPpFJ7pR-P-4 zii*lFX((xEI9FOy7!~ceYsWTE->|O(5AOB#^W3@L&-b9Ohl{OwQ=F%7A#H^FVCK>E zlkt(Ek#V@#!=%K-nDDTDo}T*xkLH)0JC|EnSX2lrH}`0Cps$DLB1S<{8k}652v4l(&yBzB~UtUG&VCi1qG96VWSUfE-?ph z@|$YvNYxAu7)tP9z$dbtHN>K1Q=IhtMnKCfsxheJL`YZDk@6k`CGz;`)0t@js}3Yl z#z9RHtRfY)0S7{+tm+`8#NZA!N(gPx6sy`oNQ(uJ;0H*}Y}BoW`{2p+lLzD6k^b)P z?k?mvwYSq3M7svw{OlRpz2VW{VDV;9G={fiXqUq*`7)K1Iwt5#0hbFfo|)#u5=;XY zm6Y4d#BdsRa>^#AsO685GBKTFA){mXO*4zrOiHPS4J4_6%3LO=XhNVUxPlO_by&z?P=oWjyY9452Tbhb$g6`Q)%v7o4m*zNc(tF!mF`)w^RURW+M z+J}Zv;A?PT;D_SlCA8MY#@eK&5doix4acp&bFa5yy`zy+pvTs&n>OJ$ZE`v2;SqRf z-&Wt~r~<%WYLHXVH`OgHEMPWtZwReBy+EuxhWgvUH6P*fSwD?&`^pQCme4x;>NA6b zgAeX?atcaKjq}=9I>;XXNyW0Nvb;DvWM@cXW@T4d87#rLgcc5?4)A3uFJ=O41~_WDXXSM|o!UjE(`kkDF8W|A<$T0mb7C@Jok2hGRRCc^BvUj%na-{yTAX=o&LVoMv}1Skb;AG8ES~CEP+N! zlwEH>=Ae!vJsIqpJCPs;YN!QWf&WS=ug#%%_xASAHfcepo8=ZeoQ=~)2MlPp?;(Xr zCVYf9w7?6}&@>NE zr)%qISD1By793ex6nW%GQc`$`&-Reuqme=8nwq-m!oxpe1bW$xk)azmVE23P-03Wh zJ2yDo+kQSHIO{y+LUwj`ZlI@MM0^Tk^7+#%1-{H!M++TF6R{O0sMl5po!)hWOjL86ms;0ZL!guCgKbsG@lHXfexSEq<)fOg ziK*$w&mTV)3^GW~e<)#=Cvj#bnk@;`?!LCh=4KL!lx(>c%)O+c3yuE9h+t((rHckm zqWKB8_eT0#MZ99zL~S}c(ruAKO8KDJgeu<3?7K5G;S{~w_lEih+Uo0*E##L1?ONLU z8=Re!8d`sDFFR3H8(t8an3NEEG_Nqb^xVm+x|1Gp6)`>qmoXE8wb=iq;6PYv{a|@; zC1}1&O*O}3<6=BqHX7?`Yw2sKY3duGlSPF7{;u11(7g`*Se#e>b5~dQ`5>n(YFk5? ze|S<&!{zbu2ZC!&1++??*o~P~f zGSo$pO7H9K>A8+3Uw45uy53b7Fgo^t-PcJwm3_Lr^5?$6{L9ZKNBgOiQ%8U31BI7^ zX8N?TuQrpa0og1Ldyr`S5r>{k>Cl$-Rc6DK_9qzUw>q2|a z?OQ$cvYe|^Q_Sk*g_|X4;q4A*p$hNQ#}1pae;dX`wx2>&miTnEgAN?N+uz^+Bdwx> z*4^Jnr}p*VzTMM>#&UFAM`P<09KTGdYi2N+0w97d-zSjjFV-~<09P6AugH(ergh%A zd-pE7%sq6a9y*0O*!DVbr*wijKF)2W(z|;5+p1HV`GSWWU^jw?AFFuwgD-c1f7iCOmp?CvvdoKs<=MhW)19M#lSdX z%tFxLe)8O63DEBD6B=_oDk?JA$?14;Y;4P1k<8cI`@2O}I}| z(w=R8#Z4he*B-J_!;8v1Pv7j$p6)yM(5fu*`)bFwutK;*enUZcNO%bitl{X`lZU^& z589RS_^&&Edq7$;cJ%U}|NJNV?>%O`B5!GMgggEaUVlp!IM#!$^{schdwROtsg!#5 zFNsONGyv!E^au>}3k>x2^z@AlIMw)YeDndoF(UFpKO+2GE?fgS)FZ&IK^8z7?hXk( zsNs=OM8SuL?sVU{K?Rcz>H$o1P8qeYG9bFM0|fXkVh*s0L$eN7Z*0^M`hGgOktvwO zL<@ZbqMqG9-=I^-*hKQkL%yEgzPV>RL4#H0q= zk7enmimT+%(B)(1;CN=1U%blUJY?PEKO7$caE}bbmfS{`^jEYu{e1(VQR{Q){X@N7 zw|Y>bsN=^B7pE^s4E{7K`~c9(D_N%0F*t(h$K%n_gM)Aj$Y~wMBotlf-q;xW%;;br zQkNZF`;a{fPb_F?x;DvYq$n*Ss^WThd%cLWfOojYuuxy#9-XpOl3ywEiD-|CDlDb- zq5B=_jH>AEW3$=)x#fd>KUb7QyN8B{G(36!{8~f!fzac{C2=LiiQ(Z%1tIxIQo+4% zD)?n`3@OT?p-US3{wNkv0(sQdPvUU{vq4Y! z*twCBwjWZDxP+$ugYl2rnwr#t;|&d+LnCdLXlgE{i%NVSv|reY#~&TN|ADUL0z3Hc zf4_H3z8ByIub)C~rJXCv%TLWb$#^(2&OxsA!z&HpKA|ptN3&_KT52m2&u0dDMMp=K zoTG7{JZvbq{8M9N+u%q)VDWZu&#l|H@7%#+F2mqn_QPlU`|pkn-|hRM{B(A4acXAf z$^S;VHo?QD#E@Fv)FgMfx0_C-{QW`&?eAc`u2TWwGf4@A`d)C+M-leBySw2c{lmzE zWpQ{Y&^?91PFQ7`hQUS`kEo*4<+KZnG(wWn*?^s(u{Jae%0P&p9pircw&JIv9h22o z*h6ei`uPZ_!*q7DrG=$sGKo}OeKN?|H6$ddp$S!TfMVp1&>DOa3-YmeGMf6#K)H~c zmugd^jz$LL(+2zR-nrG?KZ1f8s3sG|GvJ3tko6w{KMQL;53C{ckXvqLM+YduJ43^? zlDIJcT?fMAFf%hW)L-nHMMf(pJw3guvE?Vh%<~sdRg^HleHohm-cF~EaD{hMay-WW z0IbDCRZ4FYm?av*JB?OZS=rfn=g#<(C*Z!JsAuyhpq-Tb*%$Gt$6+6f<7jYCcafRc z=jP=f6BFj1ba{Mipm<+EQRVO~{TUhQtBA_arxhPaEJ!LSX!?mY#%*m#2r^SuNvUSm zwJ;wx6`V||x)6D;HgxBX9XogL+2a!u9-f#Oy4~l1%b~ES!lJ0W!l-CuyQ1>LLuy7x z?p9Wmg0+tZgI!ut+1*162sjc_QjzcD6Mo3U>j2V=AwF=eeKExs!MK%Y=jG<*6&6(t zbH|@dFq2V|W7Xk|!uLTtp|c2&FS`5uDXZE-Vkyx60T;l`X=mj*kiLeRRCF*SJaCJH z^%iHJkkG^IzaK$~n22rBRWYHN{a;c|}oS`4yF&Jwvm$ ze5k*>y9XPlJvcZrFo5K#t)Vz7H@o4|)vLce1TQIM4`x!58vgrIUvK~5_~qg-PcQ#a z_b`7i&wVlZr4?DG-zJ6Et~McG@3_&26+j^FaD4rGn=M-ohRiJ=toB|(MpSf7d}>l+ zc;e!1&!kWzH>`Hnt+41!1sEoF+X)l7PiFGq={$LgQasO}J)NGKn0VMwGcf*iYHIRw z!*PGFm^k;s&bxg-w}Un9xec7Di(Y@R=5j$X?Q#=H>a{16V{Bkohy#rd-|H`py4c2> z85=>ak)=Ft*=NbsEi4`n6rEt|;mFX)*x03$nW>;b68;H_Z)WPj824PXTR`Di8eF`x zqAGG4wn_SwyeC{}3fOWM8-Uf~a6u@#*~d8JXl2SSrlog!*4(i*_rriLd3 z1sNJ9#CXIO7x?UOO|3~i0#|Qns3`zS)zpyZ<9;9@CNelEv#F`6Hps>$x?;E?Kh!5Q zF2As-D6XieF#mWs$Y(*eXWa1+-^jukpKx@7rY0f8^+;+`K}m6(|2Fq9AQ|T}Gb7Hm z_1(R94+wrwX@GZNZqfS{Sg+ZNFQPT0%+Pe*|1R1K3IHkxJOTpzLlZ$y)-)6Vi)p%Y z`4ZZR!0e3NU>keXbkjgzf6ICUtBso-H*PuN8G9TwV@LwphK7<@e_>`cyr7`=@)U=0 zskO5o==;Fkfz}I|kw**5D~Im(_jdP!0m>^XEd|#p+S4m6CNSW@f$h6?dLA@iBZU)_ zUWQIy21Oo?4Gi%0*y9%9yASnH@;K-ek(otp9caCB<;vyDO|_>ov$L~H&z_Ana&kIy zBs9dwC$Z*V)t1uB-?Pb~f?6Q9y}X&*kTzqm7ILi@kZ3&4$0& zNv(rS0ju#My*@p;DmghloeYmZhcJEgw96=3g&3ca)M+yhnK2i{LvPI_{(uiw7?Ufyndb|QPXbNB9jSniTeEh9JH zoLY4F`0Vy++hF?AGq&izDk{#N`LlKSgV5etNrRn=@d}G7DQy5(*vHFjmmAz5vciSY zZm|{jun6%ma`=9|cc+s^1MN}~Qws2nD=CfhcLRBeDh78S_y%m|=L2f!N$~&$Bv}OTvX?J5jWMaaW zjShRuhX%|YGpDAQ&5f z(o~7t3G!O_-Ps3E5Lcez3y)EKe3T9tO;bZb%mHAY`6Z>Lg?_ue!Lv*Z4-E~AEvlrQ zD=jL_JANEC&~>+KNGN;{tu>Bzx3jV&Iu|7LVpC00Lgo*B!ywQ@!*~0Cj-uTe;0|Iz z;M-U@l;*`RxTYwI{#$%rfOYPyV0-_(o`s z96rD3-B3S!`qT-F4?(-HpMOAXUUBhp6le27IP@*8{1u)OU~8 z7hQz7#JQ-zxL7a_`(leq&t*Ct^!4@g^YHWA2HzE!Uz6lh@XL!Q*BX34vF+To&3m6e ztbqLD{G{R%AXLw1rk{-8rIo~Z$COhk7b;Fipnf^FJ8Z3V)rizCdQMK+g=qhxec@Ne zTIpStr=$F~?ScyhAo@DO9TQAWpvCs|0uN~4u3cd0lER%GH@?>v>f;^FfLjiae`qE5 zr=vYM|6D^u!?}|DD4^RFov^D>ezAqHo0Y?(+{tH8o;+y^4*_EZauI@x2z){dYQmew zN&*67ODpek*-gdA^Gh1eohyzE^A7WO-MM+|cF==YE>+|ek56*J8!C(oMZ~CqR#@0d ziz@9z${F}d%)U&z1bdK(#qwIH6{AwclIS6D8O9ZG49B{;jstc zR^>(S^9n1h=s^np*SJKiq9HV?04a>{J-go@?dh{4Pxi-^w*EFIn8r>%@vA=??OV6* z+_o<|uc8y2qE1?opKlQ@@9eL4ZvR?&HZQ>2FXnhLh%BN@m#;KkK~d#IpFQq-wuj|q zqh|_0%g<}u)~~k0gYH0sO6%+$9N@AC1}>gTO^D1sm6?#3m{`yRx&!FZ*|TTi z&%)fe=s@h}_j!Xb?m$xQ8yyoDl^^HkmIv?khYV+zEkT*5erOvQ7+~MK1GiUETAZJs zUkFO+Y!SK{w7{Ak*tYAdmml!>z{7Ox@c3{J20camj{);E$gW`{!%8o6ffqjq5D=jUj z{ctYUZ@-%x*qX@f@`3U32T!gQ9M}_5^AFOA`r_jUPt{+%c&<1uHa0e@q@s0XxU!-s z#@B1N8yY4WT}T7KAJ`WPDlc?TNMcebsGHq8ce^HJ(|UV*%f0hT1HFk|6R0$&2;nd zjRp_Aq@?)xQP{t@AFyDOFcuE>H#*icpon(&?g*HOyPXxezP`n=0de{H$HP3`{JxHc z<-5<@ZTs$>J9h8!j|mH_NlFCuk)0j4W1Cw5ynr8CTL(tUW5bUFQ_C+dKyeksbVEWh ztd}@d5airLi8au2@r4w{6?pxT7QJeoEpFxWa2G zC>}w@SM;*1%#6aqjPk!z-yiMD^xIwV&I5$!Un9%Xs~C@7yqNlEv^#D&l8|_0ud}O{ zUqGN=VP#Km@15vfo}T*yqJSw5_4oJvSRAlz_cmBN_rR0*9?d=-SW!_J78VwD`iHi$ zU#?v`8IhWJWQ*fwJQ}{bWBc~qZf*d-uaFM>YS(u610e?vBo@TPM8y@JYbX%18gRNA z8cIv@WBh%5LX(g_sljjyG6!F1$amkpFCYxmfcv)HyLMvQbcd(szOcALB(V*MAMJ#% z?Ao;x{T9$x#SJe%?D56dm9xU(aox zzP@2$z>|xbE;Z!G#l#hsfK0~h_jdO_5E~bL&|%Z7Zbh3nZ}p7LD-7@kHRl@Hbd8OS z6g=($x7|B-?b;Sre5ti0%-cOIwy=MAaB!ftsi6S{7HOq%zP^FE09fQAa`K6Q_fu1hM`>PR1+C&-X@0bCLJ6%RJF2*WJ;r6X z)n`RS?u&}`ip|aSJrouhdB}A;aK)GaFaI#VT`rEBckbN2edlI8etTG49@_7t9xeyZ z4UP)4L@1TVZOZrF?H3*3KxS)u3OiNpN-!MduY~ z(@WU;py33fawdfI^QW=?@|CymjoyFog!$2E2X7txl%)LZ()`flNdP<=Ex&==HqiP* z`MKh}7{6^hcDR8d2bZQ5{zt1Qj&VN_aG;<71Ul4b`)+T4U!c=9P5-=n^X9diH-BQ( zpN=k2&6e&Umv2z@r4a=X+9^iGt3=hH^!Ss z9F6`kw2Nn)`K~C}5A3_JL~(fd_PC{zw8Y264 zj++bo0Sf6W_{1JG0CNu_LOb`kx$WBJ7FH1M<+p#=E-*gDC8agT4`y8Wzuokodx2p^ z(az-;`-AtiI|R^~5K#ngCng}Tp+57duWwv_6lju6^OH>|M<257EAPUJ$~kiKD=jE8N`v!p@%C_uePaIlENR z*ckk7V}<`+w0Cy?{4?cPR$+`k7|?CrVR0zXo|~Orlotpedixf2-a&f%^@5M?&;pL; z9StrY0eJS8#<+&0meV>xq`I-dd~0kuEk7}dJI+Og%fqyy=$M!T?mi(0wr=+i-n-Ys zEx52KA}A;V%Yp3o#28gxaa3`BY`{KGFHcXeu&|KOhW>Nm+rtyX4}|77jEs(Qe=7x( zlwB0-w+r@mtBbR9G|EEXyN$B#h@O^|e&{HY!)Lzx8a6zT_S@(X$m;$3ZOKX>hxR>t zc5id@^xFsK+s(~w4>F}-mUr#)MwBVe-zUFy6!V+05EHhBDofy*qYBX@MFqeQxozFG zYxnLwdv;*g@&UQp?dI*}AMOL}Jv`JW>D;-zBoNG)xM=Vnk?eo9Ynz+5H`+WzeDm5~5niuBfLrHP|@i@QTJH4ZT#24kkKY^ZvMdxPI&gZ02 zP6xU;I|Z3LnFl%T_4Rdg^^NvG?EGA5R8)*_bbbTa@1~|C*fPwyD{%9Ut@ydC<3>;W zjjqm0T6uoR0e@d#Ur+zz4gdFtHn0^<#r|#qd8HMFZc)8McY23ME?sJBXabWrd}nBM zq#?#VEHBq@fAs!!>h{{$qAYUaYUz0dP!fFWnq}I96jGaf;SnmX;Oi;a}3% z+VtLADCG=07tpW@_rHtw4O^T&JodqI^WNtl;D_Zw_{PK)S9F5+oqxn;gSDg0M(2a;6Tq*JDv9=v{(66O^r3^!2i$h; z+2`!M^-yVNZ^cnRkAQvP^mzH9h-P#NjoU^^HGfc=G-N37ge7!xkCzWQ$ zfK>!f*5goMbo5S4+3)cQ4cq7C=@;cl-G4IS?Ha23)t#FewRmJUUo&r*`jDqzrsjokJD8T#=uy@ zCj$2Darg4s69Zfm?h@2F3SU=tVv47?68*3rc%dJLcIB+1Ib!`aSUMoeopdSDk3)Mw zcwBMKxl_j)^7icu0G~a;6Z0>eGs*|KsEn|pG}mvJo1Y)D4PSYBdieQyf(HUh%eN4G znY_}|kq5(avm;WEhlQieP$Kx=d;H^KqYF#RFLct|J1ficqGRKV3cq&q-s84g=+^Am z?Gv6^Jxi;|KXBmqaep80t>9L6-s|vN8b=uSW2tN zE3EAAF7-Q}A6fz;1tc`81U#td!os+`SpTpR(445k?rwKyYyHX0puHX*o~|yNH_v)w zE*^oA*|eUX-p=fRJ$`wmt=!RuaQC=UpudF;4L@8sot=I9LVG{DLQ&rFL{up01CD5R z{+3Pn4@J9(l%kmf_Itnb1S?y?MQFc2@DXS)Ery3YS6&pAhYU^N*Li0vU`GJ~g#pMh zcJqyn4gfbC8UC-}KOj&s(Xmm{afM%d1RjmbF9C|*Nh^s0OMfsmbU?(S~8cJBCU*PiXW;iq4I zsGLcfUTMObSG}I;zUHIQo*M-y3-I6P=e>KE_dYML-LPjx+1c4geZ3L!arXhfvL9v&NmoEA3}o`@|4jTMN*G%6q}>L~mL)IQP=wrkHd4p%; zA6r;j9PF{j%>xC5Kzz5k@AGq?1249KIPG@x`}%7?PmkEBIA8B=dr%a4=dNwr_5_^D zj6CE9?x@RVXIS1?Ds$%^_YmLU!tA2xo$tAYVpSk&BQ$V>oc@>d?O3n}Xi!q9r?;0! zSlsb&f3!o}xBG;K1BrA)#1va#^ml$G{Ksx@lno7tF0SYs8KIpkJdTBpK&yuPhsA}5 zC&hpO)AIacQPd?YAgZGG&TxNebWvepcIFRbYO$~|D$LU}x~KvrO2IvK z-xn6<@9hy)S~+~D)H{xbQc!o!#d#fwMOg6+hz|7g^ouKLVvle8YWE)R{oumwf_Jkm zps4a=h6+k5sAUw!dcW#exAljQvF!l?VS#Z)6|IBZrsH|#KlffZ=Nld17vQ-s>TG3s zcK$&ZASK&FkqP(P$kawRS9fm^dzI%MVkO2Bc`$dK2<{xh; zX=*6R4?c9r7aUfAd{{}-*x100uC5#Z_gowj`0ZO=LK2JfV|)%AhpW-fMS1z>(^}6* z?A^R$hkIT{X|y*A9lJOmIu7hMAo^%~V^N%?anO_2?tn!1= zu4tN09nOB;@UQ4&(eB~l<>l?|wrjWhz5owb*WgoGr;1|&0%M~C!+iI70^Iz;Z3eo3 z`Pwi18U8QVE;l44#)Y~2#3UByg@N%wjC7Z`yPLPC$NpWI%mpBt>UO|y|DGM-8uH-8;9thab<6@$!o*0%`XTFK%M9 z+Zy42ZEfdb+;{EqFD~z_h~Bl!BRZ<6;tmQK+<{BQuHSpm7j_Q##_m0Pwr}5o-|VeuKiT?p=c+}Mzvls`i#R;AIIdu|IRCnb$8$A<$GwaQ{>S@u3)|QY!_DX z*ChFS#+6o-<^`e@&Ay%cTwOf^V~)r8d&LB}?esa|;qK-ieDsjpHn8fz-uH)LT(CH? zrX-ejsiC2!sUhFrKP(JIe85!gb_3mjg+6v|+aFunIow+8v)#uXWNzCY;8LJ!-MkL? zAnD$@d)prGDDWrUckI}@|LfcmFo`}sKEQ`Cz5#pyUMVKLUPxnr4&S-!eYY@qh<5hO zcZRe3=BO?Hzl8SKI3RhbXsNiQ2#kbVV8f+v)~KpGg@hz#ocghYUPc}5@965FQz>Os z3RnaR{r2^Ac6N4eW!_ehIh4iN=1Hq5z)4sO}0h{6wz(n*tASQ9T0cb|Hm3% zbiv*=r%K|&{CsmuE3$I~_W2(=`JnN`Vtl>!Y;!{uEjxDZM#Cw?iyJO+$5CNF{MUy_Q8_K&H_UBkY++uspW7Zc zAX6Tv+uOTtwg0`y1L%FAulMd9yS)AP_<09_k#X~m_TL>A8yo1g%?+poY>%(+{%y!J zKsjh&wR_hGrKY0J7*60OdHI3=>I+f}j#w<_XTZMi_V(Z9>E+?P#m36Y+Rnkz#l<^s z0ANAyq1QKsht@RJroQhM9zOG3VPS;s2ev`}bhNvH-vTT#)ZaHWG{nsvc=WbiyLb5I z(SD{=h^FMq&e3|)3*`~!unQi0oq~eQ(WSJg()@f7bZ`oh#c|u^6>z+v z>G-7)T47Xav~Qy8ks~47-QenOuM7d{kpKck9(;md^-s5 zPVlaTY2jVl_67KQdV~Mwz6XW3ckcEHIdTNv39?DxVYoPlCL|SvIt7`lNr{=}WE^sf zj@`e@`@_)QjCB)!0BDbc&GtJAB=kbMiQFpjk3hS30E!G32@l7#(&A8UDoU^HarXxe z(0Ol&mKp53bq8{*h52-Vu^TXVCezoH(6q_m%@`Q?_ zXm{{;H+z=cR5Ny5AD>R9ps3K+?LOf#$AP&6N87V$GjjG{d8;4H1iN)ppy_K}`l04uJJHXrV1LYkH{CCG! zy9=;N^H9(SV9)pY6%L`Il+zs{%_d;j6ie0_WWX0 zZBYb1rFTGXp2u#t&?Mx#gzU!R65IFeM$&+Pb8U9<3JWVK$&HHf_6-g$DW_FboXalG z3jh`yy2stq_0W-Ej{{+|_I%scoxsVXd;tRBWCr*i*aLdlZy(V1(8Q!f54V84@=nAv zfwQ9XZr!a7#W8-cm;2rK!!4B-27tcUw{_XCu=vczDXKX)g8sw{U9^ZY3W<_TmJ9c<(tr1=13|zpz{l39@`NzXU{k_2!`GorW zxbHr2z{A(q!xdE>?F6N@$H!$efNRrcaI}v&Z+6)SviX&7TvXh?-TRK_73ReT`UM;< z$}Nm7JewUA=Dls})}8**!OrV9ZrZWK%?}8W=U3ZeO3DG|VTXJ@_C`iTL_|g&1v9-5 z_|dLyfvElgK^)2Xu5JENC`MWyxhG&hSf@jgPFpr_T))T12L=0J`5rpBckkXEn>TF? zs$%jVUb}qx@SkYFMdiJFy*=F(QTz7Al~h#T86FuL z9`3EI$Uf@no85hPeDZ1Xig=HJl7QVizxrwys?bFT^iY};MWyqLOG?1cF9>xHZ)hqA zIdJ@3-{^a8A^FUiukm;*wLh8h`4>j%iu0n5=NAHGe>@lMm4_(Z?p-_F0&>AZz<$;g z=N&)dY;UB2b(a^BQPp05Bq2P+ef!R@0LszeN5&jaOiV~bjxo~)Dz$T573 ze>l`ig+nn+kav>13g}{C#c@oO@a=O~E?qqR-ugb%?lJNG>sK#cyxQ=t8Jf%|l!`p2 zfk2p3wq0*hCns~^OgmilR8oYJv2a{jcIo1UQy-QnlH-|7c2wk=$Vet1WR6-RT(3!r zjASHHR3?*LAlKW^ly5Ie5U^vSsR?W<%*-WGNjzCmkz6ieilt(S0Gi?Gt{O!Om(POR z&4^%Pc@&!~0<^>3&{|rr-#%W@**CMp|J(F4@c2Q{{qo;LA3|xgA8wFqny%GKcB#I&qC&qNe7O`-K zu%t-9Mk#D2lgW#RMWQOJ0$hYm8btMh_JaFS#>SYaJav)zk+hG0Jnb&H($c6Krb&+ui*2_3N#TCKNOT3OCv4 zBkdFS!UBb_E?&ua_g$>-&K&f#w5v2lCX+!fU`zDdVI=^FQQ*utteYl8h#Q|X^;PhpA7_GC7LL`=*-eC=9qR5)Zq>2@fcSfs~Gf1MMaa)*3XF89-V@ z1wkv5LqS0@2>T%1=f`DKSj+526)Q^1k5dX%sVgICQGBf<%LojDLB*xV#t_-;1dxHU z83{ZtFCN8;!yxZnRpGHH8=9Q*Q{`n=O#($MO%YLe$`m+LB9P^kHrVyDI1mX_Oy&}c zilYU=SOW;PXt8~ueO))jT?66eb}P0qV3;sty}$p$N#n=7=+URVT_j?$;DTo<6$Fu~ z+<1w~U@FoSDdXWpw}cx{N-jBb`O23KAapUqG8C*F)*>K9G7{nqT0RG5s}=DSY-ckX zxK#pAvX%>T(C8R)Oe`F&fL(b2$|n#^Wcd9HxNPjG+)x>FvTr_ga|G)~U{^o8~p4uC8O zz<%+ot8e=(AY%GkKICa>r@(GTL-`0h zh?30W6zwh$%IFM@^P9Ur{BZkvD@(+otznuQul@9+JBL7s=+#bDAX|(M3*)Bs`G~E) z(>^jd=>E-ZJ0s!BE0F9YsErB%j|?Z%xv5F15++4yhGy1olJMwUiG~4gi8)6y{`#;T9u&3O`8=i@Oq48YLg4g0x@1eY;vHl%*!p ziIK39ip^j|g9qRX1o31z`nAk2FtAT~`-n;FV4{8o#G(KDweH^OuhMM=)+kJR5OQ3F zi=Ffm+M2%5{?`Bfv-PWsUz7t|DGLjW=BCBHKCQ_s-qx1TY;7L_2y=6RUVJ> zl0i;t?$uHQk97sxu{AN_KF^x=n)bFkckVyY876>AgH;ocq6u8kzhnlDfI|iOw}4A$ zkjZ2WdYDm{l$hWoSy_om63+mpIF`wbjfw&ZCr3=Da~afVSTaKGUTy`_=`d`1GnOyl zgYGVn@Zl1pl+65fFC(uW0ya|#=lIDivC3kxZ5C!`%Y1j25Fx zLXqf=d^QSfA1QK8*s9f`VXM1}I%6dgNmdq!^MPNAilT9tVwKupwpuL4OkfqUm|w~k zn9H`ClG!|9FOnG`)CCFwX|CCR?r>e5Q*Sn^fXj^)OC-rG8u0K@lo&XROiB@^=T_F# z!6Ah2zyA>)snFDDHwnlLLtkirX@4^aVjF;)l82#PTiI-w^whLF91e>yHLuWB=9Eg3 zh>?UOwZ>#LNI)2=*PBfW9&oI10vD!zYiQjo_hLAya)pW`kxI1!o`3~1A*L!+Vsr6x5Zrx+yS8Uckbg?qL*oQ{gz>})uSvYbE!2^a`qVb_gS zn)1>DCXDv<45}y=MTQa?OqM{6Ri7|HEUP!k1;o{n3^a-b;|E$Sn~l|X0j~wkZLd@~ z^!&w!wS8Uy_cXLuzKjfZ-?v>|r$#B^vB_kh5Oq8%l}fpMkif5@lG!|oDod;6#>evo z61cP~o{RE$Oa@P)F)7p~Ah!Zmm`afdc>H)8EX`4C1Zn{rI3t5PnF?3D2-d(w7$5~m zCJ-r6k+fJ8#gy8$y#Pt-aM|F94BUzaF1E&24nxVyx0RK-a^gs2o8}y}pqJ7f60eG{yNU>IsaR01B=(s-89!ch@QV5YW zKJXuUi$cKW3*gYB)d&w;OVNTL@zUk;?ItCU3E~=NywX(G@D<#fzp+d~i(-kjMg<+E zQJ5qmkr)$6izJ4uUJ)Tr-B#kX@V?BK4dc~jK&m-)|w^F;&%<@NQ*5dkk1QH zib^GlqHsX(TdU@Q=tv^fT5XyHfyq{4Vk%P-#UdIzfoD2&`0(N8=EK!n3-Tg1wOl<{ zZcQYnWa=ChP6d}8&rVPlr6%R=*pjjS)rlj$-gxK0v2T9-$Db;6e6|2INu!meYrcLo zD>jzQlqewHTslu8Ad|TQJ`;pz^p(=$ELv<736?D7`(tbUHmSKRm7}7fu+StxHTLUY z_ezED{B(6Y9Mp=OHTvI>w^!b|e+Ets;_P^pHdDonQ>Dr^iCnI+Yv>p_9V*xAEVU|l z4B#;?HNbs<%FN2OMc4>xk;1GlD-ocQBDE5v&>F4Ppa&^6Nmgo7CR2Ha?PhGp0aFr* ziAqei`sU`kLkF=m8Keg`ixxx(u)>+aPKK)u;p(t2>?K7KItkW$Z20oZPy4+CWL&u0 zQ++)w3U#~P`z9iT{dd%!JbChTgT3KWOKY9eSuBn+HuQPLD>B@3{6gn1gi{$y=FIe+ z3Xg#8Ih21~Gpe{Glm*Nlot~spsn{GQj073U3cdYoOG|y3S)NEF35>4utu2?ox_qVe zT8kY#c9xjKS6S=JG+Z7RmU@A}m7ko-OHEBmlFJ1k?um&P#H(XfYNN%XNn%9ONJ$_; zzy`5eTCn{iuYX<*lJ1pT;5hAHkq-3ThS-?{m zBno;=G_aOyP*S2WeM3Q>Ob}0^#ZqY?wWe~4%k1y%mJt@r^Ye>{h)YaD>A<*>L?j|P znvn$hcaa)ZG&a_r+SB-DSrLx{*Mm~nY)a&6l1@rVHaQ$w9F)o7uq3Fa{`&RigWL25 z`PwAb8Zs{)4!B4i?w_umtFP@H?O*@B><`%P3bUR)?Ju|0+;;;OpP%I@)(W^FyB6?J zHa9gbaGn3cb!jpl(QnpLB0;#Jy6JM6X)S|6MH#>`mDsEnqrn7ssrZ}8*3x1jp>#rI z6r01L!K_;bM&`ZLVvdJh} zsbpglbA7Lz?J8xWt~Hte@NU7dr&e@lR&kD6A~WgDMM|}j$4gFJxnl9G8PjLYo;NQd zBAhM~7rU-EmuPrwah6mkg`*%Exj+L9d<&yjCzd<(d9K1HQ~3ym2JZfa`pX&?LR z`ip=`>o(-Q`|i_6@*vrfNK#TrXo7&pg;h!=C2+lY!!{-G=qSpj^AbRa$2ZouG&Nmm zYHBG}@Dl)w6uv4c83dkYeOh89Ig*qJk7$Y&bD}_26dFlGH4^7HF1COvEtYU2B2p6* zQw?hKHnY4)UufU`*Dt@icyT-1bo%1y#&gbM%b`Y~M)2R6T?P3-Ge&(``MIW+%XTH9 z@Tk+E5DK$c@k;%L1{287m;#MSUsk$%_lI_~I-af6mp3*x0@L2B8Mrs@w!RCCYgW&h z>iNuRf8lsr_o~{eP9RbWU82yZWu@7iIav~60Kl9cyCxDPhA&yXc=3`r0UN~i@hTli z8R5=hIu)O%%t{eURT_1YI4+r)Qc{?kqm^)(d=*~{_fg^Sxm<-QjmxqcY-Qz*_40$~ z_SBxbaH^%nCX?%3`}Q9>a{gSIRVNk26B4x+BbQ8O$H!tTn?Sot3}zFTp(s03u2+Lx zv=r{8+z1j&8ybmKIg)`fa39#X@g1wtD5b>2#ztecQZZ{DQ3-~<<0CXN!tF9*Ga(7` zr|qiP?KN!h@=BH3Vl63BaP_tlt0EqxmvCcJo3sAR<%SX^s<20D!(fyV$bsOzY^H!9r!fA)8a!r0}*`aXg76rR0pmfc#5%Ia`cWNK|ztIevF zFtPe|GWqA_&~WsDN@Yrv0)fIHSBXUwYO=Y+RpzRya~kDbb_|(HH@J>}`_GRvUDq2F zUjhuzoP}FqTxl#d7-8PRPe@?H$$S)UU`Lo&@zYP|O66>>5)Q&gG5LHHcyWdSKn#W8elu1#(nV@hbAd-do=tdw*wX z5|Kuv6A4+4>htHny?#hYV3Ntn3V}%>K&h~}i6KCNO(Z1=_$)GN@?U5w1NQFRXU+9G zQ5GplfAC!MQHQQr2e(MhBBfMZIrCS05hKag+S=55)oxazYP}t1Ifv2%g+f>+zHURl zNr^_Y%Rur3JpZ{NK@|=$QLdMT69`hBjujpkCrm3ibnc41#H3Ls_eO=UTyOkCbfmp^ z=NR;l_L0Aa9Ugt45%V=5K37?+StvOcu2NB~EmD9OSzvTl?Q6Z#P?}04iZvQFU#Zck zQo>0jxYn8(8xzfzNWrxd6fQ^BD6|5t)>>ch)G#R=5KOI(q`(4b``{Yj*IuR*Fs2A`{c8nkQ=CUbWUSY_%8FOdP1O6(8M#HL2V?cmTp|C)lCzU27 zqXM-O1oawo+3rJ!KL#mkG?mTc5<)_j&xIjTA88+cENx3)H?J4#5+2u#CXm*^ zg?KCqNQ+crGMO(;iCF3vA*N7KzF5rXu+dlwn-ar<2b~!CEDD7J2g=AOEE9@FBk3SX zRcK{0xx%C-oDjdd#)k@J+t}-h#0ysPUc6;Mhb}~^peGxgb?4KQ6dFa6vwCaoiBp$OpFU|fClTW+ z?!JLc{OHH?TX%g}nx6$vgmfG_xM@>WZhF(A4dNn4$>*5#xFHFAEA9?1q4{dAD26EpGB0>nMMMZLnMxz8EDM02KkH%7CDe#od zVy%S7W)?f%$UD?btL8`;c#oQ#cIFQQU|Nq`bPVUjb&@s zu2m@1geR?aeKPG*HMXjZN{gqUEDDECXT-;|sUQ#O+S>d=ZGGdHS6W)GlrWWggBnEI zu~ZtH5A=${MaFEk8dbpc{bd#@i^icuaropI3K|s|6GLKA>Ef(nXVu4l+m<9@i>rbGEU5{RKUmv`(w0tl`Up`H8@{5QKsA z76cZYIH|B?=^U|YgE1>pI zF4#?F4KT^PT&`eSKYn{_DP8sXPfi7isLp%;#_f8&h9joMgf3m|H+#lZpRuDnhZKt` zVvra}*l@xrL22IJH`-rqxYtjY&!01Ey6=-b)8m@aR-`tY#VnOB3+_q7XDdwx#deSl zw>H}KiX;|`8P8{-kzKhmw3vKFQ7V_mj+aQKEHaxb5>ZeZ6JTp9J!n5@FOido5lM!I z*5Z$gOTRg=fA8Kpi+~oz6w720E0)cfHty$qZ{&BarwSA(i-jhc%HW|~7cVrF%19*P zp_{is*m<^K9x*Cbkj#iroe})j2m24$%dEvI;ma1!!VCs7s5>!>jg3{8*unLEqQc`NNfJ@~Hk`sxMs0bdFq=E;+lybfsJRi#nEf!(hz*{xbWIhqXeB8ph&tZO-Y=F+7zXKgBn ztJG%HnAGOo`3feDyH>4LWl02Frpi|4vRQGXZj?rczM3U)o5q@+0 z{ANt?_g}wd2R!t#G?~AB{jdlE+&j>s5s=}ak;ZxD@|nigRtwv7%kq*UjUYk5O<=<_3wT{e-pEXH20bl5jV=?ABT0(w<>y-M zz|*T#D4WY>Gudo-1ew051el42?aH!JjjHil%e?7RW-TKrwbInQ_jXn2Dn9w_lgfPI zg1K{MydIe2C{}Y(G>R~5!rtbV%dOXM+`aMbwX2uUl$*H>!@=eszivHyvNSO&RsrNXFUQ^}EV8v+tBhDc(-YEZhVaQ&vEM_rB_om7OSMHEgvh}fb-RxEx! z-$WoPt#!A5{OC&q}SitS%~W!I-BFp>><1@>!S zfA_<8H_jijBx6UtUhLz1`}$MwzWawFUN1(Mo=7_tZipg~8MSmK$WVZLw>WczDJdjT zW?*2c{g5*ygg{4Q!d9*D3k(eOTmEMH?oweEfuK}q<*9OA7KO#>-g1o!tSgyJrA2Wl z6s5BC@|8oYBlPx0U8>=|^%a=`<0nlTKjxK9IXY~2F{e|nrf?&KGL14BbYqzBtcgJx zAW&1K%H#>$lD{=w|L4bB|5!w$YX01G*`5~>9++?2US_|3^Rr_&zJ=j^Kwy4;#ra!5 z+`iUWqGb1FeftFLNSObZ5El0OK+vw!r2u%d=8YO1n7Vwa&iOz4&Nz#2|KI=p>ssTf zgAQHXN+N?4msU`)O>Z`XI7+{*v@jJl6uej7(71cI-DV=k3(R`C!Kl^gbkdw0i$!3v zmtSaUc2a1uF%$|#YBXw<3VlgwDXbJRB(p)5O(nA#yd)`~Moo|h7BuWyIC$csjeFsN z^dr(`s8SivU;z8TWU^Eyz22neQ()bw?qC0aN1;lr&KxexCsF-&`{|Q=wqPS}BNuJ# zg$k!&i!w~(e-qk4CPY{u(;7uir9@09wxouKL~#<7>a_woA$&2HEijZdoIP`DB zoY!-NzJ?S|6h&F~#f3|kE?&B1SKH5k`vD`$KUjOZcF&Fiom8r|73RrO<02x$336+F zWBsASbxv(O&tPv^zw>1Mv0Fd>aQEhoA8y?I?uYMh9LSK9?59eF5#ixPB8er{IV%3= z?JYa^d|F$5xV5!@XJK;88dSDnOLf{jzoj87=Fdpq|IK$les}Z6lU3+116{5tZTxQ& z$>06#*vBP0o0JeKAZd*BW%C1$R?9-)T(%-4BqWNhu~0FCptt-tG-K)L8NwxCt8!p%Tg@)1C3?^`f7K_!A8ID!9FZY`t^j^Y zqax9hnMto5xc=qI!#_EbnWlza{)3Uh{<}UjF_mSl^_Q=lOP{?uI!2(ke{uP2?e660 zXjDK283oEv8eR5n1_48$HDO0eoNm~bNQ{_*^lFIdo=k3r+cAWpyVrXR1nrG>3!le> z`^jm_;X3gKjZtH(Z*dh9{U&Vr^e=n12}r_qKQHDQJaXczi{37f3sCvGFq;))ty15~IB^O{TZkZ3-~PqQG^_ z({`S^dL&=X5{U@me!g8JB7;09q&plsR&}-#WD*dN&Sz<*oh4+|DcxVezb~qX#`vg=6gS6oa+vkl%*(HzqEu{Wvd*m}D~4 zMWh}4=$-R>u%<^Q?$hv{dVQY53INZKSPHi=UKL6paCz`hgrqo`QlXCG(A0KkQo;G! z^&T%QI`F~%k8b>MTU$4K6HT}Em|=pDoSFtHOJZq4TE<>&pz>_{|qDUjKVT5gdqKHod=!?rd#pI$ZmqR;uPDW#w-v z)aAb?oQI{e8?Tki2rRLf4pdgO?Y$kFGqz@AY%M4%+HNqH>E))<0-;u~SCE*+hZ^_n zsBdb$dZneQsotj1m)Cw;Th31a(S0lz7+9lN#F1L8C03(az@|~D(ZCddD8XVVG8PNS z5^LFp*JjL|K6m8}-(+jLBxTBa{4*}hFiiiwP3g6Li>=1|vA5l^4lp-a=`$zl;m z*l7vt{TGfI45!b>&Ro7~$*exme&i>N_AvUMom(^3FPt>If3(wRlq^Su!;(VGbQJDB zX-~D=^HWh`T;6*pPM<1MQ*`d{fBM|*!Vb`t!ZWd4u0QSD|EFRJJt=SJU$1@inWr#f z>a^*zmqpQN@Boe|k?^(ABX-*JetxbI{uw(8WL%ZKac9PRHhKOe4`j^d+7sv8YE)a{ zjSLz)V@c?JE2CD0W;)BVI4LtW?A%ief`g2%S&Rt;LR>_k&!Stm7GYlp6=MgFF7TT_ zfALayaMhDkIC$Uoci&Cx^EMU(M*E9f&Q+vJQ$dKBvSMED$1Sb)tfQaZICkT7=qn8+N~6>1sxLKi(F7EwMy;4WY~$^g(+ycPdilC(bHGi*LRKuB zKQp~S$jQk!8&kr$JO-OCOAFjkchqH7D7k_odlwCx6_S3r^%Z2)>jV-Vo+aP?5<{lW z4_VfSbKovq{Gy@EB#4e)TQtR^--_Z$!BtO#hENLCKlzWO(sP$T;WPXxhkzj>vSJ?*-G;Aonm-O0%7(2Yxp7=B&p5< zEP+C+Q*lucV6i1iC7+|q#dI|zG;ojItYq`GF{@Us4h;qWtO^Yc?b8h0OSk@2(Dm2k zSViv_d-^vfKW^;UaZ>_Qm(0v}MI@4FF&v4>-f-#kX?UEgMwX82B< zI&23go{L?2%%P<7#g0c&}swI!e>nxJ!;fgpXuX9VGomWvR?LcyzDu4>a6*5 zXUz+bj8Z8K>65meK6&CVJGVIE1-4f`r_5OvvUK)+lO6DaDRYSGx}y$p=!(U2rcdea zY70-CIC=8)g$t+8T)uqj#EBCh=1rYCbqW+8pK)VH4SQmEH1U5MOlw2K<`4UgXm4~y zm{iIVU43BSv3=<|@+8yY=H`}qn=;;P(utXjxWy}0&;DiL)pPosaZ?wN_S zMh$-Z+Lbd6##nMuM9A{FK+&E+SEHuPSR5+f?GT0AE?@ubgE#iq>6q5WzXH>`b?eT? z=4-eAaeE&jrT&uLs%G-De*GRpM)j8V!SDb5^7ggZj*Nj5#t(p^JCC|jSS5cwTcAr1 zh={Xo(=t^c+Ey3@Y_0v$g$rL^dw=SZZhPrF+jsh``O5&DE92;yR;$y*O_UjvQL@I8 zOw4p0J>2~9`F%TgOqvn_oRnIx{U!PHf`Vh&#({i!={wg~Amj3znxqgcmN2I;>n!}NrYLP7{ zEG!a`2qLkFB?@02`X&sKd$?*yP(?983^(%@>Rq<{ZE15BFP=Yl?y|Xl^B2Dv&LD+Q zB7u=uzG~U>6)S+Pm@^|Fx90fgN3)`&R$F2Ey7U}A&wTJTzZGyBHaN?(W$TWepv!LE zoUsrqEg$q6L$mM5-MdHg1O1jP4}tdz?>ctsaP^)OXIig+^mfp_{xfvEKX(0-RQP^_ z67+i4-*Lh>3~Z~ySa_uo1=#Z6~U z?Af}Ri;~Fxs2pq((d*5zyH028pe)zZSpjwIR6wzk%5^@sPR zn$;2&ml#QmAx1`qf#5sdWRgSzr%WX=xB><}SuR&Am2!o`Xmys_ch~OOnz6}|#gW@v z%Hl#6uUHL@!-}qF8A@D zj%SH-a(C?9`pff7{NUJ)yS<}*%*I{+d$ru&y~}J^$db9UrVZ<#3OlDxeJw9-YQWLl z!%a3)l1#CdP9*RJN&zY`?cTL>>z2(K8Jjn6*}8Sdj-3F=ojZ1H-2x+W|ye0S@!{fh!3WchNG zoPcr_X1$!mkZ=1C_~;X#*6x9vZ!Q3T1-PgaC;qZ$tN+m9dF*0uuMdvh{o#kZw{G72 z_Vc3}g+i_rFxf1rO29o+_>g^R8W!USoDNZ?P-2Qi&u%spJBlYIkLfnYLoVg!LKV{Xz0l`|0TupMDCGm|X>_Y3nByq*^4J zoIjm!apbxbYZ>uLi87TeQKpm#lxm}8!`_=miGHu;x+?;v&x<3VBp!BrpW0;AIUG)B zaVCi&p~P~WE**<&C_8uU#*Oc8+&JHCQ?rfNvXqDKo}U+*SPE2Fd*YOyFD`bazot|a znG7llzpT}j#gRIkHV{;uIt47pRq%E3@f)A@lJ-~s{=eF=HHts18!$z8YScw~+d*x9 zX8x(mm-Ho<%MJR5EAV(@w?n)-bk))xVelB|w`5hgwxqtLPUoyoeeX<}S)tJi3`V%1 zo2676G=eNKA%-B$Ou;q*ma4L(D!u)^f;^d&LJ^6xa_pze6vXh9*esCGIt%mj^G)FY zg|HO1A|h-Jx8n99289Oo{k$XTcz0f~n=bmeBzrbyDVe1D!ezb7ciQ1i8c5dBsa*scFt&c4~ z-umc+x87L<%vur>vV7I@kQMV` zm^5bn*4mS`J2soynJ};&Jn;>9n@u3)S>3fKch|8=Nf{Y%>|+$j6M*+$vF!0GeCehu zEX=eH`R!B|-nI>NJ@Z{Pmur`xx` zzTVo>)a=q4(gF-RnZY=FQ&aKnTc0}(Ts9hmvUvivzTo^m*$8Chepd`9mKMdq&S{rs zYPBkrLaSmD7A&4E%qz1AXt82Kh^%Z+#;-jt zKL5=HSsJ;0%cf$7sz2XD`1Mj{7>I&AxzVUG7j8LZ z;S&62Or1J?&QicPP|@NySA;D0^Bp_rUdFzBg&(#Ub<);PPt@w;xoNP1HX~!pmaXf5 zdFVl&V|}L1oIVpi;WEGJKAunNCJ6G@*Kik$Ra1XE+7BN5bK{;uL(ADlwb)gWY2@Y? z6chxer{yWpSa@nfM8pE1j%6VA30V~i&DYWhVSeekeTPZ|Qb{Sw5FL26->wER!Jggusj_W)9+^QR!R-~}@;v| zwH1JW{Tj%*Tbj=wJF<6wbA7;)c`jYDAl)<9nG!B5EIbH&v@CM<^4UK1!c9kR{_w-U z?%w?D*s+fe?Em1cjq3t4bw-0Sp3R7*vfm-UmtNB17D!jD>tU;;G# zx1;_2=IiGxa*i|~q^K6Wo^K^C2oy%hii{FYapfzB=V%|FDO2EZ<30Th8#N9@E%TS= zoojAcH|~PM4YD2qY$lC6$Upm-s%;vrgJ+S287>%&CKr5&m0X zDtf}=C@#(tvsf&tMhikMDH}XX#Dc}kLl$@C8oi)>k^S926s@I(#rY3pU+p~KTwQCI z5hQ-YkcmzHqx?!`y_=#MwEn%<=PW2cfDD_Rl$Ith-BsOup>zGorHm0yC`fe}>pt4Q&z_a#$n|>MRh~Y6A^C@|ZhWy&A*2@`niJxe z`|Urz|JU8y-ySU%i=;A7WaN#T0rO|PHX)3U?S_kl0Z%v_8{5^zawkfw~g|JqK3Noqzh~ zgZ;;v&snXh>jv$w&QFoLOo2nXX9_T%>p9hT*4)|Cd;%h52d_2l z^Lf*KpXDi`y z3u0Wr*mus??pQx@?9|1pB9%(3{mc6GFFr}fbKmsz6tb0Nmw`(vQ!waqlfK(OPlQ?T zxpPhD`bzstP3E;Qh97W6cYd_@osGLPZ03kj$omdWX5i7(CvF|==`+J`+Su1YP;_AQ zo0*>e)!?;$Bs;gH8EsmrmeBjDfFA( zm$+nUKLd~E9x&vDb|E(x7K8{7=3fM5=;qe^9yA8pX@*AH)QZW(`&tpG=|L<%In`kUUkU0rb%7d zRaZC6&0kn=r^jKY^~Fg6aVohy6-2Qll0ai9SlG+w@(me>40cgadRiz3!qOKp}+zZpKG`ugC5rlc@<68h>Di|5YhC+*w+ zU;;^}=fL;XuAjUOLPD>mg?^ijecET;BV)r{?NN^*5%u?f_a!69HC}RYHtae1DaeI( zWGo!sKTyVR1<6qD*8ZsQjkRG@eq-7Jk(*@-negMc-Z-~l)C-4Yy;k**Spf#;M#Sq+ zNecOfUl#C{8@FN(=vR~ec=q~R1JaoQ?5Pum zJPSp4*8XMBW`BPE*uWh3?gc@0vR)H8c8>21Q_Fs2R3<;gW8toowLACh+;ieDI~V?0 z7@!jo78A&DnnR*7TJrM)#(F+=zBfAGsN_+|-2TzN#l#C+Iqq5X)vli$0)ge>>bb#| z*ZO$ljDp#k_mL^3_jj*NrlH6SM@i*7)~_G`A~Hbo;-vBYm0f#0)8GFuLSgAHiSbd9 zJ{9?(Vncm0T|{McGbHzG$;KALL>D$HAuJ^nxy>|ebFC;b%yqVzr=i_nC<8jX8JRh%f&g(oLugB|kE|)yQcZYO_T%fMuFXyKsB0tUKkN@>5 zeRG@sqHbZPhU4|U@v5uVMQK^XZ5e;v`ree}ialt)<5|HlruY#|=BC@~eVt5dI2(1J zq-)}_b;V$<9#JE5UbA2ho$+{onwb2?LJCVlyXw!iEi)^`yJ$b2{?bJ(&dy~W2#8er zl=FPnuUS$4SC9xC8=-jF;ByV}SVHCU3YW5re)6skdioPe6y150<#te6C2Qi5r3uT; z7=LP)Y5RPIf@rxz!|znvCy&ftaa3EydK>&3A!zrc{8qVL2^uNG86wM5xA6JFTjTZ` zWG`PnitCinsIKN3HgY+oJK{d{1P{CFBt5(p4!Q*5MnnwP+|6=+<6NkagnsFxdCW`n z!%J6pgtSdk6D1TEn)uR25?alRIfv-By*k|s< zhvGWYfst!wTkaZxPGo=VFd8`+0zJUEYTSr+klGZCBn}W6nn1!ttO&HcabEOlqVFrr zsvTs@kY;UP?7-;lv)PqWVg7!6^C{vXR)2zmWt#!&nRaAvrs!U|JiD;)MV&DlU6v;a zNK}}|Lqc4`!vsU(YCtHeKLuxE9@LD+p*^C^&WIYGa54b^pf9 z0WzjkQA%E`6Y~ zj;YlmBkVSG^z1?(T%~CT~-*u~mh`#sP>+@Y-;X9Kk1v(5ZVA{ugzH3I4 z_Qu+BbK%Z!El}Wafuh;%%}iu+3Qd(1hsJ^Dv%BiNK*DQgc@)_{4ab1;k(9YndJ&jT8?aRl>v`wX{hw(hV$>mRl$G@c2bf4^7o*w=2T`%^&{+%;X zRxHB&o~!^Z#(5;UzT3?ylMpWLVb*Rt*XDh8T^y6k1d*R1{4QK_m~4S0e6P51f5(6? z`3@bc;jw$3)`eJ7ZFYRiJZ^X8$&*7 z;0_Po4YJbQHaF6DEv}*E0c+pHc^U6vbOCv&yW|Bqy55?&;kykQ(w)`QJ zaj5A#qg>|ti1B{(dWJaHp!M)3#8^5@gTcF?0*jeafrs`Cm+^yxay z=f{-(HrI~b(>r@VtUGt&IZ|p8Xq)EoJ%(mu9k;t1^`}{pwuJTQ#QWr! z+AW3j^S1XC^;&1~d`aB9Sag?%+>sL-mm%GC(G5@^Q%t%1lx zO@YS&DW)Z=-~0zz?C=1)W^qwcj}yhLYHPAW$oBn zag8|oN8qWM!cHwq@%F%a8CVLyMMF*%+i zKb@syIWE(>|AIB)8+wu2a8wTkyu5&&X)pf0`cgjZvvr*pyk2nmm#XQ2`A%n0d}%S! zL;t?5IoNt96khgOLH%ZEm)|V8;}*x| z{hADLTlZ}@TLth?1G%k?vA+cp5C>^9C1A&MMg=rBUkSUj?uXrnNc4+yd~Y1q`E0u7 z+k>-7T!`GruL0OEK?FO!{1G@WFSRDEk?sgX!o@R@F38loLQiZyiLS&-H8WpQ0o0~z z@}dk@kP~{~>hX?dG9}zHbRjiIV2FaXH@mo0QGT^XxPUHcCZLcovy~rslsaIO100QE zuye|dIe-9GUr41Fl$1~~kq!cWfpker7T69&4Nt|2(uFZFW%Mj3;3V&mBI+Kr+x=q| zQUP&4bT_O1vtb29fRblw{XQe$$XCu}6$m*C;FyhI|q zQW+sAz1{YC7D<7JBa!!NA+^3`)A1q8cQHO&R>U@e0`VV!wVtWWTbWEpI3^BpQl)Jz zt4yw*hjkZjNIUQy+icRlm`!*s9m!IF^c;jW&4gKKlVWf~xFPUVCds3@!AclBvxuZr zRdMpPq8Y_nZ^nAHdsgkTaTfaW>keV;C9{J1>Ext9M$|R{BAU#_^HSBMjW0)McX9+R zoe1Uv)ykUcLiiT_LD_KRmEzH#U44B}a(nWxlXe)4#pGL?tNI{+M%{w%no2Oh$%3MU z+Gzs{jdYo^`&5odQ`*+!H`d+Ck{FXGL@NR{nmy$T#<7ZUC02r0PY}0S1O*|04Ekr^ zmhX3hHQz!gCG*GUeW3|)AG6q+LT)r;YFrMB6pos_(ORi`X`u&x1EGL4SlT`6EIQcC zi$hk6nsoT63n!2;u4eL2Atbs9g+nDtwE2d=ze zj3F!an}y(`lKu5$YJuY9zUrf7tH7h+vyxG#PA?PpNdc$pQn=3s(e>Q`oVUzL+j0oC z|E~U0MOh@9lSRCqsd-NbXZaI}$lTwFk%7hjZ4WMp9*7cwF+D$Qwz5%H>;r*~R_+}L zkLp3D#1^M~ylIEIA!-%D%#L_VF=Jun{mpiB)2g-Nxy-K3aifXB#33_M)G>FG8kyi5 zp!wSf(0MA3!|bW zc4f%PzhQFfX*1D(rV0?dFQi1fXYT1M;RvETp(JTXo7$S;WSrnzT_+bu=Rf{AgwtMq zLU6W8Z=XEZGjwu@j`PT6p25s&xyR7fAA2TLwe{D&wiS2AmQKPB%-DZvS|@u4+X`yJ zf_+3eK`&Tbz9O$0AoLT5ic<_vvj|puD>0~s#UdEvFA}iCd*!G0`@|Ig4gCwq34}gx z^nI5_oMOBPbIr5f_Z53JRMJx&tKzFREf44{Yq9kJofr2FTqDWKfK5#<_n^O06&I z^iF48v9Hox3{@FD{L*aFKyfXxOAw6ljo;J_t}|Nz`)$>BUYs(6+9&KK-uRUg zrc{4@P+*I8`1js0+3AZ9tFZSxVta!xwni&sz6dFN7+Yk%7>+{j$9`=~M25^{w_X*aZg({IUf;S?jBIv%5B3E&F8aZ^TL+)zY(3pKVel zp;}sFcjv3@;f@VSOwPG5Mf1%Ga-Gm>!)i6M*!L)PUX-hpwbo_0G>EuGp7=;nLS0zh z9|E%!#N-x2EH=s;EM3IHrs8U&F!iu0JQ$W>b^CBb85(XcfB=x8wo)2I{Q4^%R>bqc zJnBNo-@HIoHw)`MLv=~ioX>b-8X=fldv~e!Yx$)_=(|a_zzsMIJhLc&pQ7Z`Wz1?U zLtD0gMi&+p7VvEp>Icq0L?M+X zr&>7W$yC3V4?#YTE>1k@yKz7!iDR1P&#GpnXvHJd`j)kiPaUu_TEC}9T1i+d0U$1xr;x_8F7*L1KxSfs7;oK`WT??PuY^VN!Z+}n3FKS{hYJQ^&UIihs{ zM`3RbVcNO8*4wx2R9>m^a-CEEqPs@|62ichF{Q=Nz*k%siZk@76LR^b_+2*#M`bKJ z?-meWZS37QXmgsmsvF+K|rmB0@mXV91 zf0X}WAjbXESi`FvspiG~i)`Lv3(Cg_M%6ro+UOr3YMDwn?_5YAR7JcG2H@NM8-{pbTb81&jr!9 zgfq!OEp(V71@t+Md7gDBH66#+8o(>0ak(|tnR=`M8lA+Ev7N`5$)We&)Va(g&WyP# zJU>yB*WG48QS5JD$HZG})w5mi5;+=+cl8DR5<80(3cy8^zHKhcy?B3HJ%Oy(s)Ay- z-VUrZ`V=*B=gGRzDX`4^u;IF*ZCQtGT0q*d0R;rI4+$>nx zRk+EGH=MSxPek5@_5N(E_9iL-xj60(OO`V(qL)48+x9t}sn4=eY8UYT*c(6pj00#b zb;7`Y48Xcb;O^$2IO4U%Q5U*6$B(j*Q#S;)PB#q~hqOQ~(dxQ4iTt4vr4STVy)@e= zg;GCzo{MKM%vD=^BH*X1@J&3f_AMo$$QS*2zaT8w4CY? zAq3FF)wcYsq<;BX84zdtqb@4fPv}txS>ozfFFqC}P7EpeP^u`SGutr^lCtrkimin7 pibp7R)#$%k@Bc&HJm%?|T4lIDY^j}EY2`nkpPwHe zAMfv9cz=8Uczb($eSLp@eSLm?e|dR%etvy^etvv;dwhJne|o;ZzrVY?yM27Qx_<_N zKsPrx7dN1jo5zcbi?g${)6>)AgwvMs;bKB+RDnxii(Qz^768>veMGhl9H0*;^LyBqQb($ zf`Wql{QSJUyxiQ}^xVRnoSf|J?5wP;%*@P;jEwa3^t80J)YR0Zp7n&Twb;(J==PO} z)|If9Wnj}%P~)P1{eo}Zf_Lq_SM{7*)tqz1tW)`{L)nad>5Og3v~}^cWzm#b!DLEG zN^){?Qc_Z4Vxn2zsA2B7LC&~d_81^*R5xo(J9AVkV?-l;L_KX-HFa1eWk@l3NFixZ zE^#m+At63KJ}xdUHa0dUCMG&MIx6Z5QIV065fKsL;a><33kwSk4Fv*$At7G~2@U}U z2L}fQ1qB2H0|NsC0s{Q~{r&v>l;S$23v)2zTneB>)T4}(@NvhLgU>+{ROXPDz6qQuV%_Gcs5h~2Thdj z4dkB986>8D#GiCYuNSL)jM!>#ehSL)h8?Al1|+F)j8 zCL|<8Mn;B&g!J_-$cb2iz`()4Bt!(2-PX?EVbv2(+Bu^8nVNeH1R27=!D6Du2Kr+D zK`RSz5;4#CnX!e_#bKTwR1YZ(louG4;A)G{3c^x%G8)LI|Gg3Th6WR-5#L1#2^jX` z!kz|o=FxCtn^b9d9(J1;h;KbkX=QIaru^&nZSeyGJoV#rUk5XK?IQgDXFtXB(FyHM zKq!@*Zb@dhEA8Oe5l9{F55OTI3-ksvcu^x&(6YX&x_mj4<@C zJ@C$2ty{zo0BV)=w>20p7r3z24*gXqy(p+$U2S3_O?)~dSey67M8NA#I+m1=5PJ7Tt~08&6#2+$3& zS;remcVSm-Z->fuE7bQdwBB~FA>UEKF0m?3O$gjK*6yTrhS%n zfEqxJcVoeuQa^5-nyr8Kf+lpY_nWHISqBnsMUOi@O)b)J4T%HqcDJD3dGiZiKHSEs z2?;oO-bf6zn{Um8;6d9reqFYJ_1=*mcG-_HelMpLEn+(v`xW?0vlSd-(9yTiZ{|!C zYqz`CF*GsT5c}uH!vnBS%ATgRRr(JX6-^v9TQ zs{>WY=58%u-O>887*z8B=VR25*}@t(JIo{WvXNwyx zzvuXUrUGyFIpQk>*Y&-w>5-V>mZnZOCTKpm#v$_g+tgxvVz$bhh0h&}j?LJhhG$D{ zcwx89{#@4b0eoiq@nP^2nn%iK)|W@1UHon`oN)*0n!xu7^p3hTiEjxo)hs!PrrB|8KJRgpJL=7;Lx(VEfzUKB~4CnQ2L#+>axs?qJzA5-Qg9_cUB5i9eD}uf}Jh zAJ}u%o&as6a9GXOip?bO+8MOjPW?Q<`g`+;OjOTZLS*2~nQ;k*IGfL@1w z@ZMBiG@x4Z8&?T{u+qgBz{^FsW9V5)V;xvGMH4BBSEXs&tB%|LHyr|E$~I2``6v-m z4}u@r1Pr{bg{RN$?7{09Ht^Uh4gR;MF8`IebYTh$90Qd<2qksbl_HgE4bXvB(oZnKnz=p#sX!Ov3 zXA^j#g}5E`tw34%%)v0v)>LmDyi@ymMXA5YR^&rWSLj`0UAxm7_0TkZJo7MZHS+;J z`XWyqYuMk~qGoiv@;6o+Y$X4I@mLR(s(L_2HX!WeDM7i#eB>;bJ^=Gdrq-XQqoy>H zJi1Pwh$4fxcy*J6oBwKhL+?C1H2IBNTy~hSMh5ZNye%Te!s;P;b8!q&Fc4VUw+Ea|HRK9=-q;X?aD%Z(%B9zIvF)=pF`&MQ=0$1V`+by|CNzishx z3vwo4up^oEsr5>DZgXt86?Eg(u_@9QKA&E|ZQ1eFrhm#I?(bJPTb@c8uz8(z+@mgc zFK2kT5Dxdwc~3#UR&azK>F{;sIm>nK<1bhJ?4uAo9u>lct%2AP!d(U>vPb$^<1O~v z-s~h@yKMehLzZI9=DL?0hwD2IVfVogfSP<_`hdlVQgH?Mw;Qa{6r<^_i}C9vs+^l< zLWUYJ-Y1oTTGs4LN}{?x5g?Cbb94RI?AI%E9D%+iY31F5Y`7EA-2^EPiG4{CnWUTc zrWV6w-@B7>N?P+nn*g9S9c(EME&M9LXcw7}lrNF829SS8tPcS@DzuPADUu~A9Fg==02*WmxnzEYh(F;UF z@Q#+6lTke3yVHu1jJVU$sGhI;HG;lx@^Tm@z|a|xMlAF+l7Cu3vCc2N)#-8HI%jr4 z82gPWTU?nE*PrkBH5E~%VM)N4X0|PTgv%0Us%j(=;i_ABL#tE*ug&w*x7KjthB65zgJWrgHRDDlZu%x(NF#jyZ$*f} z7%{gOE+_|@c-U)qAoY{(iRlQ1@S|Zz0D(X9Ss2Lpbuk#l@T+1V^*{OlG{v?nY@Lv_a`t<)V|DQe|v%CLQi0SA{4c`{ixQF+iuThD)-%M{}-s!schrhc1 zr}U-N*G&GW^X%7z{!jleY5zB`|493v>@Vf@CvpCl|8E~4@~6fd>A;h(#I^pLYa-u> zoVhyBbI{QO`>q5gO_Z#yP4T?BGJKj})eOR;Yg1b#9ZjQF4+U9uzVR70ZWj ze*9YS#BfU{Z(zPfEmRHiC765Byka~$`W`wuWua`2f+|l< zp8Fw9s|!9)5ld%;f~q2iJyP|sLZ8jb1{f@T5vf1ipPql9K=So?fql5qiArC_WS2dtxvL=~#n(-@|Wr{4$e!>^mI&y}4`lpX5!3Oi`@{29vP%6`^lYu17 z5&yAs0|gN$E>io(aCf2%54WuhNWj4&!XpSmL4k`3ovf<1>_u}4S+4oEhZsm}R$4Ya zF%WlqduxebtA!FgDLjf8^ag!IwzaDCO~!eLVCRpgr@vGPx@?Jj=t}#ByssR`)wQUF zb#6g&J!d9DZ>E94KWtQ$2vQEEu-4)B)6Na;uiG%v`viGv6mxBFFG0OiS_bH}GIE$- znp>P_AoPh{$b6t0LHIbwt2DaRf z_+0K!%-El`gZt@t_;~5pBI8Rs$CzH$t-z>|_Vn=Z^cSoQ9{;v`&c8K;Nzs$^g-vjg z@O032(NhO6O#doM9;|y*CG6<+j)aP_p7s}F@QA0pa6eIiHzSC{-slz-uK85!FoR(_ zd^3<0n0m_iT^)?9%yJdKiCIe1rK{l{YFXOy%Zwc+`WAVp+Ofro66}zg7S)A(oSkK? zAp^#u^doW8?_y#sxaAu$f5G7{XepBro_2+7$P=q+aRRO*QFbAPt~RlD3-b47Ayj(| z46crd6*fhRb}dQYGi^$9k~!h4%=F1Eua1W=LXe|`%qo#V&a88>7+azKS^Ty}XGGty zD3Mk}Tz~1k>`oybT+G9XaG@CQDKqXe-F+CJWghx9P28XW+IOJ z+d>cexDB@XSm=}!FH8zBla4%_c2o?@TZW?$R zbBM3ae-!B4h9<~w6a9eP3weWph)g2dtK{fv@8ooY964%B_Seh^0vSjt4|e$t3PLW- zCX3(f_u{^P+_rSpBgga8o$EooC(;J08zdC2MTmSgEY1OxKNU2cF`JBMPpQXS2R~|7 zz!a#3<5&C1&JnSOSU%ek)P}v&Lv-;0PdV{(dR`!J1d4atV`^$+WMwA=rn|;>^E$&E zR0%Yw+o|;P&4E`OuR8&Z@&MqF(ZP(x+3|N=T@E%D7M3m>v)qybZ`Fsw(GNx+Z2Jv4 zbav3t+hju6TwLErcXp3g%xDhJ=O7g$HH}Dt!s_Z{!=-WIe>fL1N=kBy!I7b1bqx*8 zR4w)4!C^{@qQc@6ugg?4U2nwdXX{>Il*J3)x4aT~L}PBW$jjfp0=7Hkq6Z#=9CH(l zRCF{o&1gMg&fMr{FS(*2I*M-e;YQ5sS1@uisw=i1EEvH-LsVc|> zw5z?b*|O;ykHX`1$=7a4NM#j$rpV;x z=;=!!q;NsPyko>p`xRsf3Ij7N@pjc4bznZ1=5Qb|KsGf339 zsDw;C?WAlxl)%Fjd6l*}*K?DGgbhJOIokZ<`~;sMD>XeW1K`zXRG+N2@>|z|lP9b7 z+lpsTYG-twu>p5^Ws|LiyMAFuRe2?9mN&5w1s^Gb&hRl_YO0|_E1)uJ$Y2ixJt1D{ z@{1xXF*Pyf8x_r)g$^DfH$KEt!4GoA5$b3bPEP0Rk+t?_-YNlF5I_yS&j6biUb zcACR5+6J=A;kc#us#KL#SK0P`@s?8sd^u*N?|`a4E$va4M4(Pn^&!^ z?$CcY(Q56AAR}?T+fTwL3pIiACtx@ zp=|isqLnDFY}~%0it2VTdsE-yudwDAfj4h&D2|RG&R;2 z1=?FhL@7;kaInNEx0`mL(fJW6T1H0T^`;~Vz^SGGj^O!hik;Bb_~fMAP88AvYwYBeGp=l6xXbgEQ}f=gk)mr2;Gnk>^NTw=9E)rDw=*T)-5 z-#22ptoEVJalEJaz7G(8ybEv~ywcw;_k1`XHYmL9tj`d#MAx zA>IHGtaN5s>+M_jG0=53{Yc}@?_4iVHm-O4{9*~{kTNiKJkH9wXGq>uCScumN)nZ) z%K)>jrN-8-BaEFPB2_4lZTn`fugzT*YQNQ;WFWJl0}QZ6Z z^2+mm(Vv7@U}maTC;-qKU<-at6%^1pKi=?i;b+0?JT+gU2MXlt>i@>(5-tQ_cUltT z&baq7Y3wOLhsM;1ELy!k!?qv$E`K&zFUnH^e_2E}OrB?GVE9F>qk6|7A~xJj!a^VZ z2AApHp_`VDL_~>-l;g_+1W^UV`dhdfL;o;)e!dg;bydUZeZ5{le_S=Q^;Ci5e%1Bx zz+2#YZ0J+q_5f0t9Hk_$UX=+=f5ObB;hkJrlu=E}_GBcY;^1K5q@>2j>8LMm3ABwK zb$jtIX{3KIp!7tfnoKB%sXKvAy{v1?Ss|_!S5u!HG6f-kUD0a!L=TwoXW*ThS5b)w zzNaU9;H(sc-Q4Vi8yXt8Hq*KMV$VINhs`kT}{PYwaVfN`*Iz*q9NQl8B6{ zV+FFHrpg-|%Z7&$yc}72yY-FOs%@uQt*WU%?UWc5eaot^*ve*o{Oz&{W9;K)v7RMbJ5X349XSp zh?tX#j?PC!{i!z_C2LKv4S^z>U*8?c4St4KEOLiH56ZKHi)W+T+@P?i%wF();}5A; z5BDkZ1J`wdy$sSU^4QGGmycp*Vn*y7tkq8RM||wzMH7}i)fAcT%Q)N^VZGWzR=d*# zUn5M5xsKP(EZPR6gW^MFw7;=|sQ%eX#AW;)E}uK|^&DH*S+YI#BRunF!3=<5da|C9 zf@1i~>mdqm01Nx_>fzbW&9ml*q^%NWesPNL+vl+mMLh~O@7K0^uZ*DNh)}VT_)1>o zogk&xTQeEu!V-Q-Ig_fQPuh?{E=GTDR9SL z*-rtmn?N&R+4*GRof{+?l?-WVq~hV>eQ_Xq}HuXnsUnpNDp?XA^lylI3c2#jYSG{uCzcHCX(F0{1^>E} zPE-`FFJlh9zXQVt4V}+>YY^^7JCTLTT1gFKO%?4vo+T)sR45SAi+59-;KJIvQYNxS zcP=QwuRT2-KHkSgbSz|ge&(t;*z1SLr?GHJeP?BBE7WsMBjytz@?k6P`_86)%D<4c ziTXD@5-F;i&&4A*9%@KyFZR4=h%E@z*Tk0Y zxsz(C^~`3bi}J?ZX17F^?hm)8zioUuwK`9^>EKLCz&V=HcyQ>WrAu7M|0o!XO&7jzc$8dSEIE8Oide7JS3+gGj%Z!PkN{<+$p-?&RhTYo?ci*^VXN z^&MH7=E=dfp@&VpSNp!GRVDN^b34PBE#TX?M;Gm?miITo(BFrxL6QUVl#PU(uLISh zXw01=!!!~CAssZ|fA@5~lLHG29LagB9TYxc6!?7d!XDiK5r29bcht1s&d1DT3uI(K z0zQ~vGq;C|a*|iArh$6~=Q(Kz4NCh3q=ArKdhB}2iI_&)Ghm`zPmFA&uRPK-^TE~q zm`WE3o<&IW6{5*)Ae~hc1LAM}XB$J(4!W{TmuVAMI4g_=rb(*3Zk%laleAxMJ88EE zf}_cAOtlg9EQ+XS{Z@o4+oPJ;yeHxui7@;B@R{}cO!Y(5u#1UgWM>%bT#1JRU~`3C z;96ZSKhW4XJwU!TFMS1+pIc1W+&}Z&F6+a(#PpP9FwiuH!Mhz~oI+zNvI+ovT%+oe z%5KCCXAfYHstSLEC)So$2fhw1cz&&Ub!Bkt3ky(o+6g%T9j$Gs4Rac-pN2@6?rrXi zO;Nm~eZg6$nWM8m1Q=U*TsQc?IE&oQk}K z3zlV3CJ|QBOMjqvVnoS|xWxq3Cug}L$E9N6qNXp4Kr`4E7QA@!zuMCi>lrDXL0BuZ zcVlq>EGzW+&XC~w0u2QW3Jwl|f`0Pj+AWSNZjVoVit`py(@RV*@z|Xzi-PZTlv2`= zbb4QgCTHEOV?(Ba?RKa_59=A;m}0Oc&V2svceQFJCpF|+YK7}Ym}Oi&QpI(qZ^FL! z96<7EbuJCq(+wetNf~+crEb@?)70` zTG!Oj28-Np)<1Hx)soU$p5?VfRG%g%$FhD0NeNq%qbM3wpN-P08@Wz7ra=}-!2AMo zT(+eKXoyZ=T#n0|XTBkG?573@O5?TXcljE8q%@rbc42oM*@=LC{5dcTFA=3_m}gNS zPp!@?`&ZeN0Yb360j{R41_M^)#5{Pka66#)3x?UIregA}pjw(IZA_s*s+qQwsaNoF z6>I=}lubm#Scx4vO18d7YD-j)1SyK`xyJj)Snd+39h>c0Wi{2#($dOm_krm} z0d%wB7jc0UEwvfi3jDSMg?ybT<;2BU4+MrfB-;crz{U4IXcyTynh zZ7+Tf7B>E0E8FvnTM&>Uy)o0>IZ0{RE*xCYA=mW^W_qkR*w|Jr>belA4JI(S#~s+q zvX|Qq0w~~Wx>{ncIC^g~b2XwFNFUuy{LZI$=H&OZOVQnPZVuTsn^@!ugZ)^Fjh3a& zaqDwyn~utRjpKg`))~6dnndubxqtS~uU;14Bt@K_{$n&V)9x%RD|0_YcAM*TQh zUtk1xUHgc(RcG^GO2tT1lB;@T<06F%)c=hXupMnxxO*G0aS?|{I;8Yl7NE@Q{elS= z6Q4eeg~5a`!ZDZrlh@Xk9upf=jm3T<5B2oSZR}K8+b1{hC`_*E7gwp(1(7c7z!uX# z1cWN6R_XISGtc>_Tlb`SbTRfACnu1_!c3MDkE`r^{}3&c9g(VB)lD52WjlVFa8|EK z6%C`Pz-Vg*uAzQuN!1Th3P;uLU(iFi&&DQJMsH*NztA@~vFCM6_;bD!pW6&2;@|}M zqYQgnNGb|xMa%R@bG{Q8KE%Ep})y=oW7Nt$(EM=venZzK86eWRjJTJrlRwqF7F~g$C zlwu<#M;hmCXnG)Q-qA@f`O)JneSw@b9iO!@Stedum|{ybcfN^^c5p_2=8o} zJ%-N&JY~6#d=ywyxLW5lk_~?o_!oG&68X7SX@F6Zs=CUV`t9KlV;7 za5o)pW=LkgL1_lgV2yd_I0glp+B|XGs>YVeAk}~FqbHnt)6{|N1H}^%2lXOV6vv--~q`||)zHGIq zs%szAyX6KatVw@(T)8mFN$bd>r1$5GXe8f~nHd+w0u#tr7Ww>8R&!Al64jpo_@tel znOTE(f9@PO=EiHx2U-{HjQ8rQhM7Ok{UHay8ipYiemL_)_T+q=jX(O@**7+T=gMQe z>GVDAaMg&W+KW>z{(*9Pg<4i9_qMU5A=*Av*4~j#Z-qMAUy2_sLlQ*B8S*{k2wJrA z0)3PJ^S2hwMe-GSRHq(=g#BfUm-6LR3iG2rufP$hHUF0ZaH}W#eeJ|rj!WL2ent+_ zsp;1mkxF0Z)by5rT^jjLYBb876BEr>ARR6E+HiIqS7i}SuaNiHVP&nl^yROFrZ@DX zB&M{9%;3C-U&`3!mDXNm9aM{oYJ!V*HqUop+_GXuKxyM0v@>^}w+?VUvx zwnlqn^KH-1Z6$IPBVu}bomd)(kigZ7^aW;*&-TV0U1oQk`Br7+Kg$?L@}5}5U9L{a zW2@qY&tcEbOj|f`Vx?hoNm8PpE{yc_`{3;c2&wa*TZSgD-9qtr%|7lTsXH5(dIimC zhdn4@(`*D{)A!D`E>1ejL&Sw#U~AaaqKc}j4Ixt1;SQ8rs}H@@^eJYNNT~#ga-r~7 zJU{3>rb&Q8f%;Ys-l-9Be>>dcUk_LbAu7Oq%#9$@k_{^yoX)PoavE+d$)MJC-l`hw zYX`rxMNOzxT_`6e$x2Ct`r!2pT+%y);uh+I!L**2Ez!|tWu;gnkDY22<(GS8S4#5* zX+HUgYHE5=EDRW@E>!~qNokdY-#0HJZ}%W}ShgTxTp!6^Peyxt3vx6X5|n0El(PP~ zR?#I)n6zJMjb42Y&SS9%J2Tp81RjpH16xD_2QlyH;u|VLl8IDv6@sw{3-r*x4-}pd zuASflk?Pk>TQg5C|3>0^L)Xn5Ommv2^YI4Bc2+y8>I!Pjurd^MUX^^&;D|f6uE^4i zpSJ@G1vhbXHQv}_6&V@&M$Vh=f44=LH4h#k4C%DLiw5vwa+8n95=N^28B!`akj+w6 zR#sH#$o=y7tdFrYCX1KMnsu&e4>H>nvmU~Du5HiCV`8mQ=2ej(RysO*ocU&yz4W~uC`DZ-O0iD4L%~9 z(@}Q*sky<`Ocx_+1C{V#*G=iHGyWiX^2?dYeG7M3U^TsQ{G_PT-!uU6iZ!V?8`(`w z7IQmvesDa?X_-r0{Y?$C;8*;vcUt<2P=wUPikd(wgzvxbL5aW*QQFUL7A)S zIxi$kH!sVC5Bm@Sbz>~r1{Z*|%R9Sc#d&)tHTPS5f11hy`*a8wPJ^97`b0YZg+8V+ zg|^zemx}XoVP!yhIXkL~3N*Akm0g)?&?u6P%y4i;Jm(X3IJLvX>t>%E z5EWKDwhW1u);{@`!7{(h#;p>ohn1oNXJyRbX;a%o#V2Z8(Y#8JHYZg^0KhxF@U34_ zi6;1gF z^Y+1S55HwpV(8w3A$Y0m?xA?z1NOWuaPa=RRJZ^1>Q|S!@x3WRl)ZMPnFz%hEovc= z80JTn{Sl<}w9p>Su&V>r^CgFJ?9SgljDL{?@1U~6mvn9dB>Y_;C1C|^b@|`o>OvBr zW;wPd{=tF1r7>DE6e;0wY8#8PoK{n`54uYchD5z%2;SlQyQgX3mrc7h~mBx>LV1|q!D&o9ghxTBGt7akP0`@7C;8> z3plh^j$PIx(q1sCC-KrjvKk9nU~9h^OS|aNOu#p=DDKfAR*zlP#*+QWw@y=FW0@Z+ zHE@b%e*KPxRV94>4>X}|LX2mi!QXB0M*g^Jx81vOJ308YK%gv#P>^-_h=F*B;(Z8) zz1H)H@E9b>`MplKGamgrbZ#rs6rCZ4(%)aix$xl=wEih?Y#Q3fZ1-A36$S6U0H%6S zxYZhWwzzZLhh$F)>auF2#i|EXjbM68wYFLo9{Z#Mi0=`b8hN47 z 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 SA36W~PF7M$qDsspj=HpFt@6jd{6bzJ- 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 z z+C^xxZD3$Oze-*=kLx2nGnF2W7(wK#*GBE!%}ph8IdY>IjZwf2%Vxc-Mjx#wNa9zw>vt_Gf%n9d%ZF4 zy7(Q=i%P7A_Xn|ZV>e~DFKm&hG^3Fpfa>9&RMt9A_9y|vDm@KE>@JzR3^TrI`IX#T z&>UYC|0g@(uN2-f{@qje62lKI`F`9_7qFUQzC`HA-``U=enp5tu@lEPv&-2ZMk%t6 zkw2$NMEsla(8`U8rTL>1Y7rixFcN2o>!fTHsLT@UIkUq1)PKDa?ys~ zYmN+e-8FX!s;kqB{^FI>Gy5U{MKHbx_A}GR7WD>_d?X|aBc`!pK2Ofj-Z@eNfCrxZ zIx9t0=uLuZj)1Ejt2$Wb<-1dlBjX%I+>OSF2E|eJ1%6Lx>t{15GuM$Xw@{FR^_F$P zmO&mT9n2Pb`92f5uh;s!S7I5vz^*{91}SA@dv=3cX4|(?rMR&AiGIbg)FlRBb94~i z8Edd^R{Px4LY0Pv6neR)gdu=r^B30g$PPN35c)ZQWC~JPPUHL-f6w*q=<*aMM9K`3 z>PIiqOMSXwY)2d0YgcQH-3zjQj(Yac3ZBGu7$-b`#VrwM4sd-y^-JIU_DNG4>B@wN z1|-sG$noo;0BKnJM{a<~zJPE&lG_49a{JciBj1iMbqF1>u6mDfwh9T&iDHhDL&+;E+c0Dn%8H z3sv~!K0kj;;=D}7|9$&I6?W5}$&EU5F6msIpHupe3mt^(s)H12?8x90cqj( zJA5iZ-_Yo$jA@Q_V~v)zq!Fs6e1hM*$Aw8KB2Qa(QN4ieO)>|yt;aVL34Qx;GA4B7Wo9J3{~NjkEP0Bvsmrt z5uiw6FCg{N^Gw7HZw~1n)HKgzpdeK{&wemYgu<%=Obk+0xrH_H54>}Y_w-^NncRd9 zB>(``4TVE(kDMzV1V!FGdR1Tvxwc4l+w;MBGS7a$ek~oQZ^za%}}6 zrx{zAT{!roGU>XAP@E*oBg2M^4Syo17x)`J&DBkx6VeyMWJI9M7AWOcDqu?ca$%s8 z+oGfqUf{dJzOmaCtUoNjhW9ufswh=?$B3Mm!p)-8$ zD)uPO{?ts46Jw%j1GK0g45>})0f=1y35M~hGAVr8$yL+!Z7dk<9dA~vh@J8UZ3YED z>i70FA-9DOi7E*sc5ENJNUgN*iWxZytcn=nc3nJaBCj_7<><#7j}C#* zrXolX;I3-AZ}o&fOW6)i-;^kOtrL{RexQ6HGu}l;(`>FM?0J*K?57y)yMZ@JDGoqG zwG$!V$56>$Yi_(UCqlxXfX6=&aO~VTwv~j8J(~v72d3p8MmO`TllafEt2^8pBsU|! z_m?ZfKNN{p(GutIHF}d;u&X^4ZIjCgpv_w5_#2kG>eiX#D>l!I)92A_7c}zF9x%~G z6)xR2E4r0D{VT#myGt!C?ZHLA|yFMNyC1nyY`uJJo7Y+8lLOM{gne3Jd5 z+~`Eb&UU{p<^mp*Q(vu2%BcD$h}5ws_ozl~K57_7lq%Ta-a^L&I>U51nO2{pI@~Mv zBf-^%9?JGt8Vo4KZJ=#$hbB&q1mhh89vM zR-3~EZ6%A}RTJVsUioT*Y`=-D=SvvO64nDzF>gzT8=tV1VO<|%g1V6rTNwBPYwOnF zJ%KE~uLD3PLZyA$yWW>QNzelD<#gS8)oo`7omtu)h(hUMW^?%2X%B z0Y3lP0@2}INow}CLoS#-B}#;I#) zN`>f1$b~HID6L9)vcjGNlGRY_Z*v%GOg35ZSU8%6vR1%Qnstp0Rtac*g(8=3f^oj2 zhB8KxZg|(vF$+tS;+*I=5Sk-a9EDsMi-n)jzzsW}%9NM`^&rpvjmZkm-(+QaYA_a^ zgQd0Tr?vm|Ir@1&KBJrriJ9?$16@Y{q7%TmseTgB~)4&Pzm@XRsJQeMe#kQ zP8K=DXgh&tspIddHczG6(XaGnEI{b-XFu;s{xvUwyIWY_Tw3<0c4N#Rr>WNM(|Awl zXC9=KGhcvnCj4~hUEr3w3g0B;S|W0sXOEX1X4u}crsVV_qnw9v$gf^9aWm|cOUX&Z zr4nD}QII#N>`zv8{L>^Yx%*_qOsnHt3!X6u2kzH^uI<|3M}ZB4v{(;R2b={}yOd%I zn1get<)25W<>bFzT&?WBciy}gHXHM>RykJ6rMU;xoW7Ct-4NF2u7hj0lwbX{CfOe` z=@^}}#XJkSDTPvqS=I5J4X}O~QkLNJib;q{-;E@E4YfPzM$TAuI$&2=iA{+8?cRFy zKDWpY?ejB8s8n?dX^U-Inits;tU*gL8z6QjA7U@czqG(eyd*vz1>2ewyqcqQCP-T7 z+bBtw@nxA=JHN-+6erW$2KU1oL7?%M#7xI*e6}0q!!Y!E%*>lYRqkh(zt@B(6&MjJ zx5K&B5!N_kLn)D>#jhO>_LzXsPL7xwRC2{5n8y-8a0$i1(3>N4AbZL<{;bP^7X_YN zU$yKTs+)E)c6hqmU2&}wQhdM{Z9Jb!79Tzxtc@tOv{YK?H=ZvOAD@)y+Q`jB7V0)< z{vn;xGA;(|%Zs24vw#|hc*`fOg;1=rA6ca|J{mSRh7}Nor1il)-<%tbK}S!;YdV z3T&V((8$X#C)cy{r3x*Ge{wrutXUkfzdYqoYEQh%_W9st(9V$kGaYTfV0%+SS;=Ua z<>AL%ta4Ny;`s1cY0uwE))XcA((B@GP_9$SR$QYqp03~g5Kc#q9F7+0nHCQ1!HheB z7dw!uhlAcuC5xV2b*Aa?&+t zZoQJ6y0#G|JZi*vRYmwN;?!l2{WqvCa9|4(#lPmz?$Hj{h<-BTSFogx?hXZ1_a|Lu z&7?vTw>T5DmSV1fhG?C6p#qMMb`}V;rSfZx_M`O;80(^?dpAv;bywXRkCJ&L;@>;{ z0GeS=2u7vG^xH3fhcESG9d!z$=u&gM8|J^wfJ-@_>)s!0Brh^fK0x#|eg)hW<(sau0-$@U8qb8wq4DmlN6LQjryt{n^ zW`qj`Ex~lS%Rh}^4Il}L!S!Mc@>sBTT;Kv!O}3{8;^hvnYfmy!c0QQ^*X6-5>5N-9 z_QXGWO-z@NV86eQ86CtUz|xtJ!?;sM56@>q%-_Yh9g*dx+c;jEm={!NmC8UUKNV7D zqiOwm7_@^-|LKP7G*;%Ec$+aZDf&b6R5n8D*%R$Vd~)?HI0qnSw67;;-46{BI68vG zRvQR=_wfR<TqKxPp>sy?t_b_4#ED+d5c=sq13#%O52O`^|yjw zP1^0o7R`lYJOZ#+xXSUuz0)O+&#tEcu7YJk<Fp+%vIi+V6I1*WI zkkJ!rX!^SVC)dJu6uWme#ol16;#wxO7xy9M^oH^dp?1SM8=5O(n}rZWpXN#SH}U2DEiTscD4D28PS7mVtI!0=UG0CgKC&j~9Zi2$M*f+6 z34@%BKU;4MLu&;cf6PhYLf7zIlq+nsy^=sil_iIs`tJ z$j+S%6@M(z9T+Nm}@V*zmLy?s2|bimNxe*>rpnPZnQBlU-;~knUI1)hpj2aVk;_cR#0NFU^eM0ZkgG*>W&%s>VBahK4OxecZ^!! zl!J^8GFF@}8HjGzF*7hUn-+ZJQpCCg5s$jMu+F)Va-sa~uZ!GeSsrjkjme7tr4Aug zR%pzR9q-=dBK+QIMHY8jIUAVY?ZfEjwW@BG)}lm$p!he_DD8mufHZ#}_omXrtr!~l z#(Zv0oaG_+RH}ur#NP9enzW+Ty=d{M`p8`y(PW*~!Pc1i?Y<@C*Jh-yJ{5w>Txom~ z!SE%C{N{Lgj)S0&L|A#*@64*v&w_|_8SO5FXiVQ=F>-|5ifeDj ztn6hhBportWPjBDma?U}enjM*{9N7~UwN+&uy0J|8l{c#0s{Zg$19g!aJz~Ty}(94 z>qbe@>o>*_`OGL_xJ&}-WBP$mU>5(Sw_6^JRh`IczMuTC$p~SX)H{$T7@ixWJX~T2 z>efFA`t@Y4#-Me%6FS8^pX^A|Z@(^+h#VNrh7#`0O%C92EOtQ*EO(Od?_K&gNUaEe zYH$_Xtt<;uM7VtM6TNmD#;Lbe~nH!IKnMG)-R4!||-32?^`n z7GSDfJI7hvRUr9eBTAC`w!Z200pcC3|Oa8LY4`pWwp9ZC3W; zb9X}}a4<&6UA8|+1~0DS$~&N2; zkIk+oJ}?mSLE!y~iz-fp+COl3^(^-8XFwX~Ho3K>-!fXI$Pk&CJIVhb$^^^pdPY2t zvD1*)GAULjMli^$t@X4*8dY`icav;o*vJcHEnBbPI5aMs88%w>^?vqlK}R3WD3>0V zlg~A%)>$=B0$~hnzDIGOgb9h3nhejK&byMXDlw8v&{8qR~(yZ1oNUHU|~7PjNlh51^9j6ns({Ci1z7FC&tH(;_Xl>#Gg>A?;^N%he~Zo6*3F z=B*W+(88G@j0x1*(k3Ls@1X^jli5~@qB-&df`sxxDrcW-CyoNq(o6S`ufG=59C|m1 zPXeh@v3D0EP&n8olh;*wEzd8#21*%mp68h4LPvIo44)s%X*&yl#j_Y!>XOi}O6@aj zb_hBkEVz&DM2oZ4L=ePxU^@e$vJ~TTbuMn0n@i?etxy{7kFtaiFTtY3>(!_D?_(kLZo~JUkdTl{vTPx!{&g_>adb1zKuEt( zA{6U{ZqbUkiqjKL5bkekzTD4q-eM{GPjiS+Z#f~!Ed{C*KJLXz{I1pgV5|A3#So&U z6__Bs>>o0aF;lI)jI7!|L3dd#WY~Eve)&|k7bxB4y!hAWA@qQ{$&CY3xYeE0vfsuz zZVQ_CmQfx(=T&bL60PVg8k6MwkQS?8>5> zxQ?4(&}NQ!S&r}X9>6>=Lur&@wAv+&FGDfmK|x_Q;ziqGWsWWvb>Uu+`h+aa`YItQ zJTd%p5TX<>v(L6Ke*bXk=Kb^poGTWCcl!O~$WZF!_ZSWnIg!-aT-4N$cnWX913y@j zuU)C2Y+`N~5wuv$3%xPs}2;g1Y}JS z6i`Cd+)pV|wiKyijRYs&tsYRg{Sxuf*?Ym;u4*d%V=-0@?j(QNz<8;tTk&S7Ph?L&*_9W=RI)mMT)ROmZw4P|GV=NnQgUA<$-V$Rq0ZfX zxZcG%b5Y67E57kspiSF^$yjAhPo(<^vBFpzP_xY8k%J%Uk_Do1#5UoA#L(-NK=UR2 z&pf-3ckIWw9BhI4%q?(;i<#1yzFSa{(UhXQWK^JSuKS^kVH@xLDZ^i`#b#Q4p+geD z7T=YZjl?LgcED8@vlW_aQljSdS2e?*^7yt{g!%AhZ)H#q--TeYT2Lp1hU-Q%{H@%B z-V%FrX_f_Bq2jsqGLkamtuRn1_PoXERGC|*CNjV61L!q5QQWouG?LKOIR=KGsJw`5 z*N^$VI6tx7xrAAz%8UtndV?QJ^XS04b7(`qU(4Opv&qW07h6db^z!!q1sy5c2F*77(*bFFJxp9R<+V zI3uE`X&9W)n2&a%<1e93PuKa;v|8QO@sE=9;p4eQ-MUH-2>`I0$~uwO%;1UueYlFw z)PE15OPs6>ktfa(GSPC6iLRyj-T&{9uOgMoe^}a@&|y-m4CjV9CWqC(SYZ(1XXl&! z9P)Vo6R2KR8&AMouREPD@I(BKP+XDC{x4b_q0q;tMSpS%ikzbben+jEs(-_IIxW1U z@j4S1t4|-)OUmCPLCb}Itoiq;J?RC)7Zgjd=*Yh#{wb=tK<4M& zr6zI%rKM~POMa68(yq+}_&{rse-j-IpH;W!{|^k;{r`@fgUC6Hu>w>(_`(8e=2@pK ztcG?~BbIN$>iNNmv0G*T1?8nn?pfN2%`dLHn>~jvOmYG9HBq(kGqo*ef;kt_B0ZmP+u8vl{O*2}InbtNC+t!1C~w{= z#7H2!x0tABLEXN-P&$YKCuUH=eR5av0dRp%fXv1y5AVZ97Jiv0`EapNslQ>aW&Jc4 z_@)AL|Ew-Lf)Q!_ietc-;vA^JE)D1kqz$wK_k+@*TA4nXG#$bZUg4 zsN2VR$X2RW7C3{dik>exT@kv52>1$&E54PmF-H@(Yztvl*xK9swdiG3X_?A>?EqT0 zjzw`fQqT_5kuaB+Wghjcz!oTRTHC4|JE!Jj9`#~eVEB4J)TDdmhc7S0*)^oUQHABh zDLzJT{Qcy>%uwhHv0fsdw~(!%+;>uDzOt?BF0%tsneVjoJNy@R6Jk|V{WGggg0mL zCC`?Y`bUt}s^RV8r+Pq&_G}eK*>BV!Mway?JXbQN=DiJ#5<`udSb7p1P4{NucbMP#pkKc+98=$V*(($y|^uL^`(AV zHXZ!p=T>XSKN#`l^Mm%<=5qTTY!QQm@TFo!AR~9RBTYIL3qtcb1{=7M?>&q!lTzd} z9Jn8`KUn!l_hNSE+QxIl>uG_Bh#@P|1}FkJa-D&Op8GG`CQgFFGQIM<)W$n^&t)G* zi~MSAIo^+UEVfCL1Nf(hFY+=a008O_+uyS0^8ILDwXwnA`O?U}b2dSd7c9&Lf7GsC zJ1F~CPQzPOe4*5M;u=joMTx67%RjO)ef>|jn>R6~H2-wbmtsbGQ`{_3o+dc>eM5l1 zlNJPPkqzENQ9hkn@LL37F9Uc^?L5B+PCqvECo9S^Eo|El4iBr1(RsRld6avw z)pvP$*|6s)?-s$ESaY=61$lC!hkRJSol$6%;k$_2)9T=?E5LXp9)_~t^m9l z_LpO=1sV!H%Y1K3Eouwq=flro&xv1)F@D%MyC4H@?`b04Tq=39>MO>_Dl+<+>iGN%j z92ZF(Bgh_KC$Y-MVK$mRY>~k$dDcDLU%6I5tn&qZJ7_yVd58B!e@bGc;SU7gT`0lSFY?Ea5 zmh-nb?jLXKm}ORPfuP**+snMp3%XLaqDP7w!cQ3V;8b&!aJhS#G z4*ME75`Dp)_Luxq`9)3tm1h)=-{y~=jxQvo;zFHkQhevRFSaYpIp0bl*W*&1<;QD~ zjFH}14(xgLPin7Y6}I314Y1De`Tem_jT1I^QZk$cS7@Fv+0Kw9_IOJ~pKL}Vnwp@{ zUp5qU9?1;YC0uGYD{>m4lNt4-uSexQy%fd@sl4=iABNW}7%34$XG_QfF$+l?&;!>W zPPVWb)Psw!@&TkNsAW7fqXYaz4;h>jC29N| zqkfO|(?nrO6;I{4ZU&kFr%Q{kBx55_&2^dvV)sXU-rj0uOw6Ly?lW4iOlyN7#U982 z2_u$#XpNFYy&p_s(eg*Gmof9t`_6P2EF5bT|CSm(8BHy@7sk58K(cur^02osn3M=o zMCMa`w`!8gn9kCLL3~2}{HXiO=?NPp(C;-&bMaXL;b%3z6EsVUfcF2XCKqD|b+aKh zypshp|Ng5o=zB2r&k6NS?!sHVjl)YXX8v=E^7y11&eHJr5L!DGV6=FtTmW_DZam#6 z5TzGYZQuF(hk|r~@^>Oz}rI_h9sv0_{ls zleJ#VT;*9Dd~0S(?8)#rn`!x7$GvDQ=Ie!_;N};Hha2js0{J1?^|p=2X0zDD!NF)Mh&rEpKQNQq`6V6R5QJj-Q{J!HP5a@r&2L$HRl~ zIN1bOKvIR*l|hkVr$#&CRUNaTEXM9P>o1JTp97i2N{iIrIV&hpQO6@)l+nbITv%eC z5kEFJbb$A#uIrnkO$=j6%+0{H>GH<((E&s<79NAR0^Su?)UFuw(RG;wF-J=l%}G`n z6ZZ>Kjq6d~LW(~ZeHy?{zA}^TrvMg)I}IwIa;=s??df?qQ58bva>rFL;v8dTJvqcw zoL6mVTZEEj@cq_S!V>(c?*z$(FF?>dz`)RWojX1o!kQsKdHo-N;RyTRvZ7BpIq``% zWbD$DPmB7}_r3=u;_7-@+{^`yMVu^BE-DVYlHz^469T}Wo|2hDC8_vK_?^v#WC^kGol`#xZ%zkziWzEvZ@Neo`B1k@oYovR*-U znQdXP!XTu=D?<;-s$?hq2(-Q3taG3{Jk+t=R(E3nI#`?PUnj}V+up=Y{K#0IDtXBr zh2jhM9rO1iqyE2u5N_EW@TLFQ_VMg+GP z_ts(%?t0|pFcg|8m=UO%k8Qrqvoj7a+QuG3DDc;n;JA!PVO@*CDF?Ug_$W9cUw z$xCaoVLPyv*610aAWKymLY3c5o6!ij`ntgjy_Y?d-Xdt7XYi?yKqfxN&v~uJk>apB zH`79hN%yV+Y(VP~^wM_0yC31n#JErQCMx;=-bwI%Y1Ru9KX;kXgR=jZ-3Ib~4!anY z5uQ{~Gi}HqQ&-k{JZ_6esBbE6B%w0_9^Fs02P9yPoBI8#tVGJ(u!y$bwAIX;>D1^U zpniH;HQ(cCXh(wlM878}PDV~Wst3A-;s|eOxm2ZuXSFiY`incqfCNhm48vH0dAC0_!43m(z>V z{AhRvSNdLQkj~F|+RGz*T;xJgGU>>^4R8ItbD7BCv2twc=~bDaVz?FavzW)~Q?+H_ z0gHg_wDchF1XJaP+8jq&FY|4IxBBeJjUbIoe`(SSGdd^cP!R@y1n7?Nx_6Rr64-P+v2gfbW1R5S$yJ;vg~o@bDB=LQEW4K8PP)jTnjl0nv8SRHR*1-ACfFCd!N z;~}1BU;!E#fVUTF?8IS}tzq zA(}`j!cR}lr@(BTd<~9>S(S@BsDDOL|MAJj`0QoqD^wWL=ePzw3&nez3l|>XDUsp- z=1BN_;B~nDtp#iumwKej{>%wuY1(V6S^8s`2dg z>+s=?X?C83DHJHjYsm0bZG4FsK|J0(%;nJ32HTGz2%bpA_^(-EVCyWl==32G6GKMJ z=`hB%e#N^j=j2ukYTm0GeDqls1xYzt_o>$vFi1bmS@c1WlxTSTfcnY#dwQ=zyz4(e z6zCkwr<@^{!vk(6JR%DG@X%+4Ac9;pgMK z%fINZP^(HSH*sPGJLz$sHWm+`HrUJe^$ocpyyB-2P@^Lp>OIP!lY~u1h7DgGUM; zk5k{z$TgjKC+GPG4>M0Q67q3F0CZ`Yk2ZL z=O@ZgekXnUKP0TxgXw^21T3j{a}2+1Kx&vLL-LV&XGd0@kOspwnHb=aZ*?X%?v z$05!uc$;S+KT{iJt@%q9VL8Z$*1t5a*-C3lSj2h{?r`qAD6oj*wFrCzY$22y@Q$<0t}HggdxLw0H#>4lH7%aj$as)x`T8|dHi zw!L?!J>S*7ADlkkX`S&v?uK5tYG?hWF-!)!AKv0n?-6^ekJ!^oZo6^m|G;?8$eBT# z8O5UBe0O6}_01-&#Fi&w%P-27lE07!`_BQP4CHhj8?#u9m#r#`sS|qTa_;h>6M}=*U6O4#lq|UWgg8XzKon0i?AY;YA*=Aw5Zr#TORNL zApeY4#t}%64uFH|hUTYH>_m;>u?BIRCv8bxr76Az$~fF9@v~qjQ)s@yCITCYCpbYq z1l?7;GasI;r<*TRBAq-NdwQb=4Zz^YZ&ZgzV59;j8SXt48cDZqyplsms5;Yl5tUs-g-fz}<2x?K0hHHr ziz%aX$7HVdPoM+kMv}JUx7XY^zj@ssE*sjoI*Vh&N(FU{fwg9GD#xwlDQOc`XMP`^ zbU))p53 zzUVGOF%9p9iDfP7wljLGLy8=KIcYgK@UE!qEgv(Rf?Y?)zBXNbrHGJGx6t}X}cS4ICK^(t^{7MYpr#E~27EExNr(wN8 z55Ho4R!(7Rhk9lo%ueic`HCi+IawiqBtWv4Ag;!CY%*SgS%n>$QS9Qm&!; zfyT+n|K8B>+N&s{qZC=WFV}5O4xwPARNOWB55?1iBpFM~-+ohONRRzEr5D}X%SHFn z^PfBiNc#o;n}Nj245tP$s9IX}qzg(UbGl=H-n915W4iyA@O~i^B0TLYKoOYQe9kBlTi1PWI7T!W`QS11< z3ndGX^*aCecmdMAF%DzwHStB%T^W^3kE4{^cKB^Xsq^FUPFj-$|3-&r;p^Eo46&Qf z$8Il110jsc^MHmzs;UzV?2Ptg7)2AQz3@k3m9MyFQXy1gEVN*P=bSdYs@eDc&xe~b znn>yN^|9=e{3n}5+}31>Q?b#GFGFg@tQyYKjdM7T))p9pj z=$U}Ir}UJNSJrE|RZ6R*zN$Hk-QA+L=P1-cpx4S0*`+Uduhc&fCMdB<3YtjU`Q?Ui z8Q_4#{N2@ep>&Gm596(#g0ZtWwY9M$L^={eP~i{!P7t2I4X`T{azdBJh73`DAH^lI z!2+B0|L6nM&M8ZaOUsK8a*Hw;%`dd6bX}w&4n)YMvn{cwzebIw_n`E#x4^$~=BHT| zxAR~P_53#x;qPV+cLp8WjGk|Z)KAT5ONqjUR67B!%#I2zymHS+G|oCm`X@bU-!J@i z$}_F#2|2in|7}?<7yKdtV{7NeI*%ebJffMDjDxG@Ea$9d5|q7$B#2&HN5*pfijL+u zv0x}#r#rT#q`DQD4k_N>YqN_gFU_~tAScf&5Jc;zl~J?(eOmyl_(9B6PMh};AnIl2 zO01NkFC0IGQHzaQP}ZC2PlFzNJbX>TBBc6lL6UaXI0Jq3wDfe+u#Caqth=<6hUCLM zWl=w;uHu^a9y;P0o-HLO4rid^)vAuUOyjNDaqtQj=xW`)CoH`|H0)_$Le{A9Z=Cbn{fbazKenY$LgYvm-;%mKgM3wF@g9 z@+|BLiSWp9aAV2`7)mOBPufc}06CVq`G>9$sPLqO?NIF+&{%9#Vm|Azi^k>z(=%Ub zrbD8v!5!f8*X6iMb^^>c0oT1plkQOsG;-{80*`TKOmQDvc>^x{3HQ#nR~bh$*8>Ix zL9<@*`4H}$Uma4_vK3Soya{`|7oY7H@LT1vICg>x(ox%H7SBDEe}cu}c(~i>HvqHf z!%O9oA){}qN<#7uw&F_quJNcE0ldEAU3Y1FJbG%uKv;2&fIDX$Jy)==#V-E+pAAge zSRtzuW|_?B=yT8#Ql}gT{-;9j^}=VqS-5UtCMj`wq=Ln?K}W-U4>)v#ii^5fntMvr z|NLAX@wen0Ovt##$S((a(+9_a$3Sw-vP*m_TgFubFW1mOA65dawOvay!a~M}yoAJg zSy}zJ_z86vLsHcRT~9xcmuE!P2sM(Qo@dK6`2ve`2&AJw$t~_Od?wbaKhdKk71{P& zi^*XPE_MwI@8-}^pu86nAGU!l|%$FT04umF$||3l|jS^nK5D@;7YFkq~)d zh3cn$Z}>Dsx?x#@3;!78?MO^Nk8scP%hj}!u0r!9R)s_UahdNqUq}#{zf2C{#8NQ% z5qK8v$UdTZh|Q?mxmenDCD zMcOlAi1AI@e(*#E?+P?I;X&qnQ*LW@yqDmHB$}SXrB&E(Om7(rll`8Go>;zx#=gg< z^&}O1V!s8@cWdIGjc&{u#*X^VVx6i5It&X3O3s%jB@*86G{s^k=(!Hm5x0<61GM!$ z^2uC@KmI=I*vx;G;!be;hsGneww}n5c>|@b#f{rM2XoOwZHO%HY&7v70+mAc2jlC(`=>q)xzrQ^BuqZ@MC-ZnKJw=6l1mKi)JF1LbZ^f zFsEs#B$QQgqxn+wYVz!1a|bl!FU-hFsN;wlaaVwxqtqVdYco@@oI&GIC8(;6L*5~3 z*NXAtO}CP;Z^*BSwV)iR?+|hloL}nj9?H=USNTTwZ6T?1&nl>KIm^AaA3lPFV1+7n zFqxNWZXn0G(U5nquZE~RqBegAiut?0c7Z#nWRt$X`*nTIURRLJ>hW>zLpJlpr%1KS zvFig-P%_^i%3M4{{UxR<7z87S@1`l}3Wi0IeiZ`lqdxq2uC8Z}9H6ZnvLd6kDvS?G zhZJsH{?!ys|85Q)@g?hP2K1S=6i~k>=ijtOh<2~NE?*8`m%nnA`d(GPw-)%8^Sh>X z$VzK*(_Q^$lT6;Cw1{F;{C_d_mQis%Kfo|jN`V3`TAV`B#oZ~TxZC1V+}*usyXfNX z&SHzZySuv;ceiJM|M#5t)AQlE-)_!ilF7_Xax*gtrQf;`QILx-QrBs&7W@2J?%N_N zjg~fliv@wn`DTH?m$fgR^D;K8K$BKfex~z~U|fI+!)X($odwEwZh5ZpIsIaqk%5xC zi?{W))bC<0CVsigQ}4vkYe*(}K4}FIl93xDeICF<(Rcp*@k<)%`)?1-Av*^M#5orC zpMnCAJbI{K&hAKK87Jh*ewo+$KnKVGz)f|Z$WCUiXf5}wmML|Vrv6L8flGr0Y~?N4GL(0k(|xwR z87;?;Aq#x~{nJdBOKvhh-KUqr3R>Gy6VQ?<@4{|?HPuzlTxPl&>X^T_;Ab)58) zD<+OBoxmKCLuXa>_rUcg9tkY;J%;z^^aGj&H*e25`xi|<*-CU!1OPK2z0~;m)fhYQ zH~YWl-1AbekC+O|1!Vh+q3`+4mAvBK4H|fvw8xP79c& zzqD-2KH`z!XK3?3vBw;4)MgSS#Q%Z}^cT1q`6SRnBWuh&zQg&e-vbX&mKTqT&1^Nq zagv=FY2(M_kBRG|g{_Lw_nsZ6)lT5648-)zys+#HYCLNvAExJ=dqC-wN;@8gVy?Hc zmkDW~GSbuK6I78aUY_he4x#1`;JU?V6aLF*lLV*!oY!&57bHO1L_M2l+FTp>P0O|{ z$R$aAj_El(7EDzLySmAc#>HC_9tsyf##) zHzpT;K~OY_bZUZ- zjXyT3!O#^>{3?%=oXc1w2TfNQXFZ^sG`4edbBh2bX{V%DjN04prL$IbhiA`!1l|;rHVBUazGr#ys#@=(P4B(4FO%=ao1cz zX;+=Mg`xG!NR#Nuz-IGZCMTjkYagDfx->y({}hdv(Dtd8@z@yI{NIb2SvkS_w;Dxv zm$JzRY)jT*C$@y-4B>3JQiEEe zy{;QYvL&0_UBukqcPNv*4+`T-yQk3`x=T}fh}DI|bU)B5I9A}ZG?8CSW)Ijw*B@be z*S`_pepHM{Raj#tMxJ5uxBg16zBB6=o02j5DeD|Tmh*XJg-`=V19ABWNDw(>W2XEz=Lj=0@0isd@BHkNb2{RARh_@&lUiR+0-BHV)G9yU4ErcNW z!Dxla*%svVoeB?JPM`UxKOIzz_~TM(q^Q`7Nzw7p%f2>~b{Xdk9IhM5eEcqq`lmTh zq-t37Yyd;DH1=gA0z)X1>?aw&n;XiIHeN@XO8Hp-KPwEsKP`6KePVsv3N0OB!_i%z z#O6LOEA9&!nX(mSI9%<`H?4z{QEHwrKiS4%cv8-Z^Hex`}@&N_*B?J_fVSJ8bgKrY5#u7cNz-vmpcHHvNnr5sxnd7GHzAciP)cGa&XA zNa=QMo2b!vH2jp7bO%x-iK*TW;h8`|DdrwGJj_`f7dLI@XkLCxVIc()tMSL}{UEb> zM(_2{tq;>vyKn@H(%f;Wi0}WDHckzt9T$lmOl^Xve%LFA2$#LQ`mku9XnK7sC09)L zYrW-84;h46Oy?*jPNQj`Np|^5n&PtQx<5pDMA}T1@*s7QQ|}rHN&%zhHzZ1BO%is$zkipTu9BxU^>iR}mX9uSmoHq}&SY-q?iy0*nr2X$TAw<&60`+eqL~G^ z=RY6SS39{^_yC_?`rEhg0HvG?yybfC2~(Az<0WRibtv+`Xj_RBLKzWYI=10tJJd@+ z5)W>s_Nv2-UY6*!CUj9!-45ja+|!8;;9VQ~r<(}IX#aPHeD27z)qjAU*KM~$F?#_R z=m1Dh3=8QPV! zD4$bv1QGKI2za|$mMGn_!z@!%zhZUsBK*eM`ZSMTvET{agiAET8+y7}g}SgnRZ4eR z_@axZM^E#L15rnv53Rth^m^#KM?>=b0WS@q949|$4o;&vEcufReM&Fpl={y2fsR+2 zqlwQG`>`-6^Q^Ua9@s}9=DS&s_4ZiC*6Mk}%!e8aTk_)|T8xftIb$jnW7Os4?wz#< zy+3OKvR^O~Yz&!N%3$$^gzRC#$es3VeCwz*KAM&$tb{aPj|EqBeC_0w$g`BbS^Sfa zMFVBr6EYG=WdpgvGuJK;PJHtj{xYaf-e1$SN+e&|@{87)2Ax0wSuuO#X6 zCUs*}D=s#g@$`2Z&_60=vcCOp5l?k3_M-RLWdrRSk1^=i9YggkTXV+2TfD1Q;~Be- zfNS*(72Q;9XHB-`ZBWZ;6qY{SJsG_+pWmEVQj5JaHyZu9bqFnikv5-wQb1vW6ZBW09J9?Y+)%*ZSSp zu4xgt8Sa#FysDh*)BFCQ`E}Wa`|xRM-sOodEBEGl((@q~{d!XTKtl0dtLta`FZ8e~ z29f%@NBLJ#Zn~mHgbK5zx7NeMQ?qg3W~+Yz%f)h+0r$hrj_>|nORJG>x&vZwZ5mzS zUY9@S4%o#1%WqY7eb5_%WxqC~QnaNsJ@}{A%YHX6G(VV7q@!*e62I=-pfo$)^0>c5 zCiKclqoJut>Olf&alF0nGYgjkZ+cd4d98~FrT%@qp{Y1_Mx4AHd3@y26T!&Y7yn9fl&&9@O4na`Z_iDpG{nVtE^#l@!6 z%v}SS!S+XCmKR{ zp4Ml4Ukf5NFB&(S=^t4I3GXtbb$9u7_^zMiN@{BJkh)5T`u{>0=GI<)o6`g6%G^IK>#JzLk? zgTiLxOPDhmb!n4?Oz1xc&u?u$c@wv=~#uvu3s{YbK+-4{R9 z5l-*u=YS>6up`}?T{~o2qHPd`ilDZy{{y|FxX1>C*&*U&6T5KS*W=wrrJ_5m*k<>& z^Q`(SlRn#`J1qWe#skjuP^J~AjbxO4jbQT0_wr1UQtc7I3A3A`W6~Xs^IpSyX{Hx& zG7jXr#OJ$-|B2biEkfBaq^%YE`}si3e>d5;FMEIs^B&4wrBd3EH{j8P5yJ}+4774Xt6F`|5MjSpthzqAh8`wXx!k0^DtB-`Luy8UKNzy0yZYus{K{XUp7W z0ajmak0qj1;YaAq4vNGw`0E-rQM@Ly_yZq~< z-?&M1>``xF+Rd6U8|B>;#uUtDlP!NaC|t_)z3;Bpy2ahU%nofuKwA)q==&V(6D58a zf31Sgd{8uT+_&uxkC1Uv;_%*ZH|2)t_Ne;Q)81iePZ6;mT9%CO(eb&cssE7w-i4bm zLTm2slqKo5a;x|FI{(omm=Y9DRK28@dy!C7!K7tV3J_yDleI1f2MM~|qsXZdNq7e* zij3NLzTT^C65!^0xM$8O-){;c-h-IXMwyoE??+}i;UqAsyw3pY70Z>Ac=%%re$PFF z(`G_7NIZ1H)yfU>!;l_6#5jyK@G`K%y`?&E9@qLGu#UJxxcf5?9PV9%2L%C9=ZEjz z?}UYf)_w=fNF(=X_XLKpR^oV=Bx@yJS*E3Ul7uq}yUM@hM*a z@kk+#;_X@;#!%jbwZWVo33@2}+)(k6IHZlp9?oZLr+Au-R9RUk(v!mbF^-|z<+S01 zUCVga93N{pG{3BMik%6wm6D&lEE2Jdq11pZ6qgtBSL^soXi^FGuj7p@ia^T4nOnYt zDBM$8XdY|nUAMc;%$;+=0D5fdWOPY7-(HAtqUh*v`g?vNI3oD9dL=huf=g!XmU~{uZ>1w17U>7n%h>ReUEqW+U5aQ@=XUt z251!)Prt)*gP_65m?OJe~svRD5V-p50xEUo!+_hJ{ zWHu@9C=2|Bxxd$;Ao=Sl_b~o8DCZel>w5!~jz^UvwZ4HbnSRfN3Yl#bj5%#)tmlrX z#Jkc4R-f5i1OsRB(Q)T~-RM3&W4Q=bZ*KhhHm|Ngrq?b>1gYtPyADNgmcs5oHM*4q z%arg;4HfC`{-I!g2bf|XjmDKS0{Sgi*0(*}g7UyG+FnkwbYi#ZsEDa!sT-?@@L#9D zR>H3CgnCnbuS@zDbbffTZ>r~ahRhfB+==X$E2e4JmQ(q=8~Q!(9l(*jmMnYJ%$j4{ zB8%}R>HIzqCjMWolgUewhjK}3#)h~510WKE>fd5h5a ze_w)D|8+1<;XhP4eJq#Q{k%KMslS*w$Wd8K6WkTcE`BuLcDJaW$$ACWfBI5=y@*`# zrB6MI)EUpwrV{h=o0P1;5Ty>ZK zsU<4tqc$R#fj^lFa9E-9OjI@?{NlGSFv>IQchfg8A`$z-h^-H#f@bb!RuU?R{W8IU9;t0mWAvyg7D4;O%bl zsxxe0Z%-U+7SrM0y;4G)4Oqp4*%8M%&wGV`O3&V|*JR!sQ3+zA{BXYq+N`{GmA)VR zHP}Z<28)#Q*AW7cB6~&AS+sf?a37hOa5e?|diGvX@pJA)&O~&%9v}=U^ ze(8xg!_88!jY9aNuA7>>VI&k&X8rMHzP5J#MfmJ>={tmBzjJFvMiRWPG1iz+H-={? z=Da)8SxdN1$z;*_ocq~RUw~CWU}b>SZ!6eL)>DxBD&={U`&4(WU;RCf$ zqIMYKy1me~l8c&^u8jT!>&xCvk8yYz8TJb6k7`0jAPB>5Z?~Cm&u3Bktd#niTu$ki zA?)h2gw!q9Yng2oWiOA@+?kx@fZs?5a2dYC9pAUj)ii2Ii_Zu)+ZDE!GTAf8OL7N3 zyTLIpY(s<@F(x$WXq}XdEi2tvjiv)$651pZCngm65>`GlgwY9lL#XC|=9ti@)Y)- zsZt0VS>aWi_WAPqirsXvSaF9YicDeKFOI@1T;fFf__D)(J5P90#^~h8?*RMF zKNa)VZdyxcTD8FZil9tzvxK=z)Yb{6~A*ueVqru1$p$P_vz){!(ik z!hpuo!=uGmR5-v|zdTewoVft?+KbBDQjUd+`G`^2i9TSfpwa_`y$F=m+f7aE_y~E<^8rmB99-%Tg4hs?>obUO)DL%C}p_t^}#kW>JmPMqL zu@(R|-|ioxF4azNhEUlfT~Swz!$HKntIFJL5+PgSR^Hw%s)bSLf7e-~g{4aScYLwR z`-QDyKoF&yjYizY_AlR-jT9v_K4fE}W=@#sq3ff#3pu^cy&cKuxbDv?v=^7XRBNG_ z7~RGDB$|#&Pc|GPwq`}?MZG4kX@Vnjr_s82=k{R#3y*AY^`WH4Aa9k^2vNWAP8>}j zDyaSoxuX7XiJTIcvy4l0lmv0nGclQw`X{zRJpJ z1_#Z4N;KKl*KN==F^TfDg`(4nU#l@bb}UHk{jUrGv>96})p0~a zIpc0O3r?Z&-$w;a|E@T%aKAl0EuFnR$;IB``Z42zo|!i-T>Ow#cJvZlI{A6^bakZke1G`io9d4nUABc%JO1 zDzQMe{AHKD6JwlnPea?h+EhLFVb;Dz!Umnf^* z3W&jkrK3gTVtm5+ZiMsgxo~C8$@#}a;CfPJ#W@?oLf?{EP!~J0`WWLNY*nHUqmGZG z^xA5AHHg<-dWAcvd;3`%TU#0%8#_yve=|e%?~Q1NvoNV-7ZMWE)FJM{^}9q%S{HTB z8Q=i!?06+(1BUmi;)gzG|9E)JKYMMgyM;x1S;_R3h^;DwuCo>IdoT9GN7R|{+?8uF zc`F7`>5Sjae-Y7_m6e@gYIK_IwhqE8|L{5^#py~sC1gcY?MIOro@(2 z7}UT$>!R{oN=e-}|F9=33cFZ_8*znKJv`rjdBI&<>*wKC{P%IFu0`fpEPvj*W0{%E zqqD)gmz@T?W9;uTqj?=gpx3A47Ns6`LcgUwolA`7a!22$n=SYP*0*b5D}D$;I$JFPS=CWRaqA0W?}Q*(3ccd6Qrl zH@)A`fa4UmQ$fxE^Zuw^_^%p>F^;(a%ISmy73H?m>s-`+THyF*x%H7`S%8d!zAX>}nOHLotay2S zS|amf(?CLA4H-;!isH{)^n1*WuQcDLFuIJ-7uYb--}C=gnp(@Vg#3B-6Ac@^pVl5q z<)Bi6x(+z8SEF15-1ohaU8z%Z1#G=5Yo zqUf`)yLqkB!w~3N*1vZ%G9=#}L#)npj3+$Nt?!3e)nqL+e5Li#cq~plCqr+qcc`t! zhtPNHfw{ayL*yA(1_^opYQKLf8XYTB*iR3drt_LK+_sf>t7y1w(bD1BO+k5u`xd~! zMDO^Q+1G{cFtK+?NiKhb0m@wmtm6^9Gx1?F`vE#mE_66Cpj6)(CM=A>L>(_v^86Kv ziqTy|F)aV?Z$!U3u!!HE=Yl!=JPZ5)GU7W-cpqv@k6oatMrwrvr#;S`JCJBl7BlsuCTlX8ZR zy0^@)XfDFnV?`)?Awang!gy7bjTsap{}b!;M|9z;SABhYbofO8k0L0%>OrsM`kT|p zZ!KMGje^a<F6oJ>Uvs+E2D*8pxl(oVC){0NT$;QxkHavTgjFArBBu_qX&+1-M+MQ7!@Z%H?{Oq zioEm^_=JZCyiH2jbj#2SJ33}D71PVWZPS>y3DJfu92CYYfx^w6$b1N4MWbA$qawQ1 z5iU995X%KyNH^|VTy?q9DkiiKkE^y1uA)j>`YRs?3wRdirpK^JCBaA15kRmY`^j|= zan1b1?X3;m-N6T=F)fB!pVUoafG;64cBNp>qTrfk%CUuXP}1*6{#abN&aL_U{=QAX z>%-L|zTs|rge;hDvt>+m893LA*hy6T^6-2?M0`>Q`;lk{wyb3-cy$a}5|Wcirl z_F9z+1|y(wWV=-7Wz&Yfp|$5@+!UX!#;Bkt&Zho%I-V=|9bYL>6I)k(*EBt?zqPTo zyVguL;3O})u<^U~dhczT>w_J#80sG^eu!EHr&jd|a{y@l44+G@lwsan>AH%&OFv zKY-dSe>#dG0X@zS6)rWzz1a~Zgq{?+C2(?ZaU~G83iFyg9mMeZ?}U#0e6#)5mtX`- zi(RWxzRlGw27Ko9whtbjXNLV-tR;|ST|A;thJkV2WOO6@7d#g_R2~F@5$X?Pf1X25 z;}YZJFCx}5yK3Vb6bp#mDt)$F~O@U+1{UD-I z2CFJ!4n5)Q42tH&wUYB+YeA}D}YrYQz)Vf8N~-XePsIAp2jP&geJ-i z58jgdz=)x7R;IT_jqi`LhXGQbe0*E^_tSRw*d~MZ*o{3ybI$_&qO@$Npjdv1-K`zn zR_Yyv3=a)MyarQUHB2(;3h*WY=*W=zzZ+~#fwKCnp@d0CJ_#+Z zwRDQ44ZX8gM&jOq%>zEV#bTHyqalnOTx;x;b{H{!9z41z^)#A?#;JKRNPJ3Y`!pqUKUtcuxx0wy*S>*m~{AD&OmtB{;i zz%f3`K~k$#q1LoUjAj{>0}?C6y0dB@X=?!5`~MlEGu)*_!t;Yv?u0$cx) z*!!fto0#a-1wLOWx8cgvJ^*H0B{KPAM_qhk(F5I9WjizTjLKX2%*Hry2s))=z4CB* zt?Ac9&Id@aGPIxz~4q*&e^D8b!zsq6t8P@;IwknH(E##fv z+ys9HZ(uz$8^6A0iqGQsi1q}kzYkJ_V_6$8L-W$EUhRZS#IGwmGnOftoj`2QWXB_g z2tc@BGe-~5w|i`ZT98?YY$OJ2e3*F}Vt?PO`(g09%F4pZ2^2i}82grQzolSFE-*j- zpE}>+z;Z4^A+~GWs9`!u>HpHFG&5Mk&RQxPB{2(LdFBbZG{z6IYo??1+ zqaQU<2IkL20%I<3V27HPFPVA4cr}SBES3I*$Cj%`8tg%AyNFuvE`;Q4yj0N`La z(aXQK>B%#mYX_fR5G1uL%#S4h2u}lVn}k5_O)MUtz4JXDht_0x0V7RFgJl9}-X41G zBCTFKno_#SGg1pFmTfpifzM1<_s`yg;OgpSIxD3~5_lSc zFJ->QrAm-zmNA?fn&+5yrq*r_oJA&fui)gWA2i6E9%JWSi46QhyfidX`S5Eoth~IM zQ}&Q%el+dSG`UXoXJ)f#yl*1neblR~Mmyp64c8*;?sv;@-24W!GaBmZi4MYxx&CHn z)<|0l)*31C+s3AliNQ{9^gXKa+M`RBvH>XeASQRv0)>20fjMM5y5M5{=jlm)PmULz@B+ z?pQ4st6U2dzUiI0=As!?AJ8fu-@-Zfkb9|EY7F(LA=fjgOTRr+n$=N3hhF27+ur2CnO(?_l%PO3#q-y^A9#`}k* zN}|P(x00_`-kI;b_FVmV)B6S*;Y-lBEr*;ZY~_d9F?02)w z83EIV%^GG_wwZG{vgc7u`2JTi$&ajz`pMPC(BxY3{ubGc&eO?vp7#out+3%YsN3F# z?TvsaJBAk-ti*xs=K({UUZy($_}_U*tP8QRwhdk!@P1m4AwytZCF3A&V3AYQFYZ(s zuIbPKU^ov?h+HyCC6;1zcC+0YhqsCL8Wl|!Y9KCc2+B40h+xW}+aNPuEI;K4la|I) zR$J(|s%?yP67p}&*j+OZtPGI}sqK^KU|@)w}1-tr}tn?zqp z7dFY7C}yj#{&^jjk;Q!MY;cp-knyp^-~p;4txk( z)V%mdbZ~rBX1aFEG6{WBe!pD^gC5t zqAZsguuDyT<|_#Do{ddU^^Vkz+Zw|aOw66VG2zMA6@=@t4!LOB5`6yv7Z=GVssYHb zQ(6a&Z|;5?R1u=?1L;1}(B6L?uZ-)Ku^2RVGVKKntMp<~<_tJ(@2==bxSTmOSmfD3 zV}vk>r2dxJ)pP7Zg5TI~Az}*i=LRet9#y#h!^Q&n18)3JeGdiu0D+cF4<04sT@pN6 zx@7B92xI_t=irD`ZY0xw)gr_5?tWuU{ybeaE7FZ)?WmPzl5~0?sYH=t7NQaSZu{SY z;QN<2?T;@!<3bz@og6+?pU$Qm!fBzG7pfV;zr=c94vjrV@*tqF&q$Mfh9O zO(a^W+=aurO@I^UfaS0nw)fgfXv50TT0$jb6ROz3XC;~$-#RR@41D4%$NI0RyQWz5 z?fradfD-_`8waou1inj1s-r;0Gai^Wye+fVwyoO{VfiKY*?G{o3uL%Q5jymT=?^aZ z4Gm3NV}pjhL!_7YlY@ootSIKEaJZR|`hOrvs9ZK;dc>7qcFez)jbKC&tPT8R4vN?O z(9jTHnd2`S<>*lJ&>E(!?-Vse8ke?*8Os(17b!$@q0`rtEv z2AYa_E+U~_;$E59Mj1!BZz+^me1&`hegF`5`Tc?3_zC!*b;#U9H zFxGvlyL#e3$S2_SFldoY;>H-(s__4B{Nwd)P) zlmN}w$0Rz+5JYlr3-l(OoAS4JNjO$R9hctDB`SB9GdT6)O-oUKkI8KD^W>K>J-38e zG~yiwBH+bQc_W2a7F4MB#~8GOt?|(m)s+9yRPN(|=4y9yjr>LkQbA=~m&6#fyB-{+ z+mhEdqc#TRn(ave=?~ptF8Z(mC!j)Xk1+ftv$|IMTLO_1Z_r?Kog_s8nlX=D^KlN(&B!cG6MbT-tt>t4W9f9zK&N4dA0S_^m=Fe?G8dm+3&6t z2@$qZFV#AHe2lt_4ik+y*TQ}+%YE~dK$QzPktjPn42}T?B3F#sy!h4klJ1`9pDC)X z&5vYo!xIs7hyYBPpajj;+@jKNwaxSJkS6}=pKiMOu95O)8}LoJB)M`Hy6Jez!y%)q zy1@bba9?B9#Jagn63}NU#e%zU;09x<0wgS84D`Gx583rb)E*>uHKC9tn*^)f{X^f` z@;R|63)Id_K*t+>=?xad*kE-ntt>=`0eZIsW-{dEI2H6eMA8jDY+y`f7FoCzo7k~+ z4@!c|Nb_=uK0)!biv?YYiXvid78LlUbN_j+)Ge>(tx%2`(B-R#H_{0gu%a7IrX(e_~yB z(#foS05vN2L%x(E16L-=st6f_KCwQM)y>H;@=KR0c}cv95>=AY#b|MzpV=WV*rKaR z{#sSSAJLcthPDywUoeewC{)lMAsx|igg}#I4H%w~wI0Bd;J{vfc<-LIa1(TJVL+*E zmUs+X2yz@YY`!LFYz-DwKF;%>zg5Xt-UP*=pnd5%^-sYtT11R-#QerNHvQS$pO<7* zqfX%%PeN@b3v8D3rEylNir+{R$pCdQxd;_Cv`RQqx-8>U$g5kK+P|zuaZ4ETvOn$v zDQN@-zBD76bwNz|Ebfwj^F6Jl^%hGX)Yp`_(b@#9M>aQF(9jdj=%!~#{(`mP?-O{4 ztJnndYcpdNzsuHrPMNahB8vt?5q8$v{b%{$hV|eViF*yS5a_3heukanmdDUp_D;SBVbK@Hf?Y6VgJ!P&V(W6s%J z+iduIkZDSxx(KPr)HaCE!+%n>4_cQrsT)Tj@k?a&E50Qh}#PHcD^1C^0xbW?-59z4ICNdu}LJ@#Fx--$<6v=*(PTG}35_GJyu4Kq)xXCEO#|!)0k1=E#ipeT{hltvI zTE_$j{~DNTt)(JqV9A50)5YSPH3TFRwD2?pdn1e}9EP27686dapcupjiVB~3TVIkE zaLvxjzLa7DA-<=5;}`Umdo$cpjM~xEwzk&Zf1HD2FlMS)6F3PWSt?l?d_cj-L@m7g zEr*m)9(QEd?)u*5FQxcqbYy*$aWhIgdNY}`ly621%jWoR z$(JJb85`Xt<@CiSYOlUT{@OP727EXx(Qm9k%mvP$X0+1p)4sY6iCQks;8rQq;t~57 z;GyA=YDhB@c}`?*Dp+r#Cs58?A@xCj3rD8-Ey5iq$s&ZdITp_%>NKSkiO5ZLr+?xg zp{}(SMemWGnz>=2J#+HUlj1Hmi69pf_>*+|8~Dv?7g3kz~lAZPft@=lGeM;es3_i!8%f+I0g#I4hjA&$Yt6Brq#Bk+bXH zSjpmcrqFEuy%Sy4gnZTqH>=|+-`kz=3R}UV6o&bQjPN;y-UjpAJjEt97Be$TX= zjs2{Fxdr!n>dQYVEIGH+1>M8@HR?#)d}L>W+rPeU*JU%ACC>_`6r_9tbap&>KyJRG zMiB7h+s_$#-6<{`wT(chcqZoAl)|qp1k<-avkg7qFfINc4m7&XGuF`9E(rqD7MEU^fYyQXH+ z7D^c7DGel50fl`+wnV2Z6x9w!WR!4lSff%uMO2;O%owvgTW&;J(@bQ-R!MOqK#-0C zo4k|HhH+I8dLa*q>&nR=Dx=ew?ov1tlO;tBB;;m`Rg@^rX-?K3ds$&lCLxj7V2GD@ zUVMwm(|9X3naGWf5Q=k5N)?|3aW85UO<3i-5>0m3NDeEk$b{qE?V|FKD(eMe61mcYjaOFY{~GjTbKKExji8bu+@NP*p3k*?U;0a@yU$Ns-0;zX<)F_W6DQLh z&zcP7&M+P#I5^fYsUvIWU43`p6@!jczj3+y-`vAfPJciFc*_ZY8EQID;>JO-hsTHe zb5DRy zN)omFcv&^{OWu(1j5-WaNJ^@BD<&^5H^ui{z$&}0k`-;Hjt>rt^j8_P4Hw&ql(cjT zL|Pg&aUIwRp~_e-R8k!w6S)@Xz@1{cCcp=b{fWVJp9~pd@&9#V5S7wA&HH(vs`DFGMQM4(gsBR%TL=|ek>DC!N0mnoOj0inhh z0F^+*Y~r)8)xLz5&Jd0*=^w1~r4HGdDV1A%zi;@}W*a=^XgJUiO8s z&4}rGO-*XNi{OWMo&R4)(pnp3<PQEm2+gX<00-T`LW?&TI6Tp3JZ%tw|-#SGayX9I1&#|mFyxj05?wNE^( zJrR4otlYh;uOqnN~Me% z*HM=!Lun}Zr+$?G2UMJIz!2nXsKo3;6s7d^b9kZqwG2zMUX?W-H1G4=0fS#!<5eSD zz$mOa`Vc_lpcs{fJx%7h`oYY?j!+tU?5!KCtWlwdE*53BGK5>b^xZ_JM-ztKrim0` zlqzxf#`@TFLr9US*5O#nVXgl@wvv)va^4Kt*thFw!)BT{!?OR)O8Eze!uhpo^Dc~V z4aBa~wZ?U&KFyZEDCh-4&Kqsz?5Mv|E4-{)iit_r#iI!}Hy#sve@AWHf)cgcQC-@x zf@%3nESDqE#0Qfk>F`NIGIj6NqBUsg4(j)lJH;3kpbzsaJGHEMi03g=#jlRA+YNnT zI@~=MJ#Q@Mm#!|bjmmez-#Bp$2W~Mb`Uj_b>gZ6lLVP!h)Xu#ua?9pOOuuDkP<6FK|x}*HwC(z zKX8m^gC>wgpOhqiCNyQ-0e+*4ww1h*2LLl6-A2MK#oA!%ub3|}DNg8T?M*8Yz`VF1f+o4NW zln%FkEJ!h~dfU=Vq{B_bqvpkDUru@+@;%K2y9dtNMm~ctcwR&xjTWcUL~!_r%J4Ml zK2h+7NeHb*@<=N^B@<0x^Ipz!uKwHgnufVrR=;Ltv!+3efOJ>-2>znab|$4t6)1A$ z4+#90sG?ToUyyU%>G(J*vWpKCs!IQ?v4->1w zBn`azn8j7D$mXV+T;H`Q)@m~Kgk3w`zZOC8hT!m}X6T}Yp|3O|-IgAa|Mtqr-{hjp zR~W;*9C^9RD(|=1VcFe1%`?an17^E|;Ev37=$YINN_CduY~rf)ik>9}ui$o8LI@&n zVLXm2yES8L^H;=B0Gag&RL*Yxjo2hKX<sPeD**M=l=9y53`&DO zFWm&&d9Muwn|@t$nLQ>%hx>~+GbTVq#J4MOTZxVh&Vm=ydOb5B;9on^5sUB*DeKLt zE};MNiSFqQE8+lhmr?qw^0OQke3>-w0I|n}r-dru?ea|Obi!sKlR<`EyO6%m~3b$pT z>`CMRX7t^OlW70-`x4UFJrtR}Fl2V2eXE!*GaY&?I^mhP*go@pr5!N*c|>o^H6u_k zTF3+~3L=3IETtGN`n;+Dk%XZ-Z=O@aTwR2y%)%7505=bP@l%CL0?4bbxB-u|y6?eD z{sKF7(#pn6h&4IHBG13Dq6?X)muyhF{URA))qML;kYa+tt5?C#5!oi+Suzz@jDDx+_BGo{V4jjZ?!im9iFKC7>^ZzOK`B7uNjMLJX>yF#st2IMT)UO0KhRY9IpN;onZ1*`Da2kk zEI2Nl2N%1JYE@ZARr@|=kk?P9EG;ur69W|w36!)ftDxG5i(lb21fIKP5&48$YWLCV zw_tqoXEgdo4T2z2M6|LoQ#{YH!PlcY1_g@jEs8fpW%$Cv;-U@~S%)%cyq!o&^ezH@ z^qtE}1-@T(g-B(l$Y>e+D0?9G@*BRM-a)2V8uSWr{#h|@miAH0sWN&j=9BQ4m4-F_ z8DR#Qqdq8k>OTOqO6j7WF6|WhfRwp)imSEd30@r7bxHUjHKd&+-to< zGIB52pAsoh!06wmO$J(ll0rz?q$T)3;~pxoI{|NgX@SQP2wW12H3&-+2FREHkVqRK zov`Hw2%jERGG0E*x#vmGT1Ej%+dml#BzCM45Eff%wj{SK+jEK zp+zBpTn9K*AvQ^G;TUaVN(XjRcr&Al@mL`9K&U9)&w;+){`a1jUFIA%V#na@_9urm za8Pz;1agg~kRQ9Ora9^D@Pv*Vtb%H0N2AmoxlEr#NzMhw*Nah{6mEMz-m5b`9v~{A z`6_dxU+bHoxsS#YJlP_A*3!(x@YQY4-Kp;-Qh)4gO?=aqoA&s=4RI*#((|yt5B?Z4 zu-QH9Is+0G^pf?LRs=23?=GbkkFQ3;Hp|Zu={xycJ8IJQu0rQa6jukRY zDTlR=^(?6Jxw8m@g|KNt>Io&qrqKc9>P6I>MsTTGJcZ+A^E|(irWH{ao0>A6LkDvJ z2nLb2<^H!@_5VNKC!VwQ4*Vd2Nu7mMR#sL(y-qwQH@9TdiU11>3;XMlI906mX?(dJ z#EiKRgGW0p(h$&@2k{M@oXpvd-1hte)FJ~W4JIYU|6yqXQ*MP7)Y!R}NJ=1@+#fz| z9DA4{S$VW_I_yRc^gL53n%Vk-InkI*)film@A;yjt?T^VKwPTQ--Y1t)WEx?5b)FS z^@PXy1du|j32ZO@p&~L1&_;UygLi`vy&s%rQFZ55(jQg*I)Ic9KFMUlK~N2VT=8G6zX%&dU+I>KDO(D#{42pxkL zuQtL&?)cGICS_By*H|Asq@Lpt=~n*cY?JBNJ=o(JUf*9}PfuiQ9m7SZNT%IH#)%t* zznA$Xaq9NSnG$~_Tx^~t{i_HPF3RPT=yK^jA|!Q7wFJ63l$-$rbhLlOp)pC%;7FwX z&y!d%b5&5ml-)w17j92se-cx?vjdVgS4E@)jrl=r(n zU)vlB_-VQddwy3ds%_@wC47*$N)|*tVz8n9HH)F7d=QU#=FKUr-xoub2C5o(%lZSe zn~{r=-ivcwaU~1!_s#Z2P6J{tU%c2av4ramcw|)te(*a5LEz-zz<6!E)8J05uVRqs zhYmQW46m}5KI|B?Zdc;3iO*>6-XOKK1N? zule0zl9fi-z^T53*yam?XuDh2!99Yg08#QA&ru~mGNQHAo<5_g0~gDOZX#N?iss0q zW`*3>FRG|9)5jDyo>zBwo3jBvYPLsl%=+N!MNX&0T(lpS8eLDS*h}a8z4O?l zQD>_=KpDlK|K1L!J=YivHsYyTK!4dr9aj^!EK&4pXH=Kk*7Hqj!J)Kfc6^WGlyvQ| zLm)0_&Svqk?53|7fi#jL<|UT{e&6O)iSIO;LL~oqHDH*Y0Fr$v^SUf>UN?NEBvw$p zU_s1Q;Sm1;*Ikn|%nSwYwqaXn(^q{Ipg1YXpcwQ*?S1kqxAYO0lwzGQk?fDV7^%}9 z=G)8dRF~k!p_U44wYZ1U^1an17e5O^e@`%msEfD8xGn8r0uxSbm_$k01-B(Fzrqq= z4oSo=US??_-=wMFwo=Ye2F-dqJFZ5xsHKhDPWH?Jq` zyz@2tBJ+(i;I)Z5pU@YS7rksq>p*~mgCiY$o%L(uv?`!gYiugunfvj7z-LpIk4Y+0 zQvZzkPaOXbcCYd5F5sii($^QasmFCz0 literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s2_volume.png b/tutorials/finite_temperature_phonons_figures/s2_volume.png new file mode 100644 index 0000000000000000000000000000000000000000..98dda0883796836db1b2146251df741d2c3d7359 GIT binary patch literal 32016 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 Ut=bA&-5DS+ts+$=VH))R0Ep}z3jhEB literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s3_knaicl_grid.png b/tutorials/finite_temperature_phonons_figures/s3_knaicl_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb92b02f6f36ddf4509a55e17214982dc481ffb GIT binary patch literal 18283 zcmagFbyOSC7U*5tLPN3O?(Qx{OK{f~hX!{k?gfIoL$TttxI2{KuEm|=F2&^q?!E7Q z|9!KvvL-Xqcel6K*LOEpSJ(gUF3xYRk8aNXU0z;XT%4bu zpPZg;oFBusqobpp!^8dk{l9zrf4BAzt~S<=wqV=L$=}g~^}+28*tWjDzOu49xV(CJ zH92}Twy>}O-Ia&l^7d~$SjY-nhBU|_Jncd)x>ptG~{_wSBhLlg0XJ*_Qmjg2j} z%@g(Y^|iHi)z#H4r2`cemHCw|#l^*iMa7V@8o#M1$B`7vAv?nXbHf3HF9TnECl#%S zwJrPO^!p9<`@v3KmEhiJ$HqFFvTDt)Z<@U(8a*aDea6aA57ll9rA`Z(->wQR(ZVgx z0?p0>O>P2B&eHXXGUb{4O)h+mu6&IyTyCi-xCwkVqy~`BcdaMV*SH210ccQzWIB5dwY6% zdU$wz$to7iOjQcWVuHld1x3+$L{UdZ(fCJE`$y4!i=v2$pbU+o2#ur)iKGmPq6~?o z3XUSn4I=#!O!6a`G&7VmBZMR)lq4gBG$o8IA)GWJf;1tVJT}7J&CA)*)z04C%F4>z z!phXt^oyCRp@E5}md+;)Lp3!uB{d60B~3|%uafe%Lh_+qS(wLIgKKD^dkAy!zDmkAWkAcOiWC4baXT{G!zsRBqSsN0PybJJ9v2bH*em+!NI|<1v^$__*bvQX=KDj z)!pU~mppZKG&0Gq->`Eiy~+8D*F|U?pw`;_DI7>%`)yL*?3EG8Ya@U5=&6yW@L;N2)>26e%qPE3tqb<65ciObeJ3zn%rq95sZ<9{tV4R1x4bW#3;v#v+BO~!uXF@fe2rQBez{x}fg!Ga+fTK3wy79k=&FnAIDk4|w zlO!j5jqQxY_+F6vHzyn%Ivpek8VL6h0O#-#owt&&*f5z8Ih-bNkUtDaJ+xT*4gv(e z!$2^SDQ%3lxZAZ<^W-5+pRNR`)T{}ULB8>Y&{ZUoaj_{S?|x|!-KdEYr~io!@5&wh zR308`!~zVFH4T!2^i!C6SG~$M_9QZO!3pti6=MD%2aPTKOC1JAVwQ~pZ#R_at_7^e z#bbiZ6+26Q7|A-c6hbZDk$+uE6t9pzp-N177_=u3NNJ3@i+4Z-9drZ0pU2E-nM{Mv z0b&PoEyKZwcJW1j>9&|ITCtOc4kL2bN$lLQaRh%>NjUl*eqE_^h70@AcDG+_igLqA zV58G-oH$-!_RB5}Ban%inR(&!X-#@t^b`(f`Q zK?yutLbFDk6nP!K<$uCxJ5zbix}q;eVF!4FMK`)g|NoQ@~ z1QTNKo-`yshz!~gMCvmBGPR1U=a*qRZ}1?gll3Z8eT22mGW&fueo}4*4~d_T(el9YNv(g1fJilmYfPb=kFutB zFr>Pm{>dU5*1^@hPzoa5vRZ6@O01GN*CN}nLGzpxEGl{Pm5xk@ZV66+13!WIBuTb; z;X@V~#A<_IweFNVOxf(9TD+00OX)K^u`Z;E%o+V`=p6>3_H7Ae6{vu zf&p3dRBUJ>k`R+Rb;xbfEblKD*}qLu(~#DlUIWZMQjW%E+dwj=g)W(GA!-RcCj;Vp z<->@Rno=C4JCZp<4;@U-E#^*#jBb9phOin!9HgJ}NQHINk=i`O*z?jO1)1}0Pw{~j z6Aa=YD_DQCLu{MN1`4KLC5YZMIGh|z2(k?ZhR?%i|CY^6d9Sk>A7KA6T7*7GUN+3$ z{Db+^?*IUE)8s}$+}=o`br?}7KZrHd|6?e6A-r})L36s>-lWy|J&$<=M*l&o5J z*(t;)=Zg|N#Q?)}Dk;lUPTJd3BDW1ju@Anea~Nz;wpZVj7x}LW-H+ssw<)W_3#fpMOJ683$DLYrSquxjB8fafsE2+z zJ3_X^bXfSCFo|SXaY}%)=2)4-mb_H#u8ga(P{}ZivfB4Gkf#jbkCT7}KFJ|S9K#KZ zW-}iN!A+}UaZjH-q_@K3RG9-xpsdfT-Wc{*ndQ6NoV5lH{KOM`#MCSQQW! zJas@PW+SP>0Scs$sImH@Nz~%BfDYYWdBD z?l>k=&BE_{K6DBv2v5>_&KMXy)V#Op8%2wmv8RePh5t!~R^?|UbjkAK(|GQ}YD)DD z+??!8`4+SbH+p7zfCnA$u+tbdzChAW*ef$M>+t8~RbzAFbIIKa5x5(HHRGJkiSPgvJ; z3jChD^=~_dk~kk-$PvxAW&L&cr`Rp5!-_do0lR7DuhC}6*ELO^qFCVFX?Xt_lG1GE zzSF?o@G-HjgyiHah4uc^-aA=yjnvBwhs;%3NrLmRZxjdlq#KNB6psRhF*U!(zx{b! zTMLWvIb#jIHRtACgD9W>r4*Ose3YgDa1-VcZ3U8TJ0-OLMlO|H2-2OdM%pW7Gb5%dP4f^{mqZHS4IHb*8u~K6H~EN z3e`mSROI3XT5u9YH9cda!$0+as8}3_?O$jip9nWZS<*I!<;4f#?NgAr$~T1&<-gxm@-<5eu_&nMD8|M4q;mgk1q|i@96O4Xl>>!I*gkpL{}* zm#7@?w+Bi!cRr@hWrxR-wMnSQKK;kOnm9WLA*JehVjxE=vkGD~a&79r>cJcvz$t34 z=X5V|GsnK%^q*eO5+%j>7z$(6J#(&Z-AvIm!Uf<&RO;J2EmAsqLJzKxYk-mtGQAsP z*|b}l6;spqA%>;TL;`QwD@YX3a~ueH75UoK)pFWNAH>O-KEdzR7EO%|6Yg}QY$wes zx-Pv{WoEOm>{Nx5)wf)|wB=gj<@1=s?HfC|e!GOGE@vI~;(V zERzDF_DMbg>Ii^C$AiG_5eI&I1<~av=z+Y-6axUvF+m?+fdGJz2g-Xpx5{^re&@$K z%(g_h&EPXqCTN`FqM`rjMq{1EJ%;aY)^(RiWisy?N_$uEW2nI`?WO8t`-xo3MpnaK zmK!oaO}_fgCkjy~aI|ecF7P$z;|?bD_|y>a&&^SG`l3_Hz&LH=ts1zg~0w~sIMI|ZV4ogEA>?P_$N;G9 zWg$C(^EV*O#ueb>H(bv~mxKr5Y|=K37xjy1Q2wt-USAo#{wwYFSW@Y^HS~e(V#DSH zCd8`;{cPo%eK#`9Bqdakidf{s)yIA8_oi%Y`E5aWufc14gx)V*0zPWmv5$;Yi`3_g zk4&!o#@C%uD*HUQ0MS8Uj)Xno0^ru*$OKz*K;)7~aa<^(cvm|_ppAnQGTCYE8tj;; z*PxGX$^ff6LtxVv#C1w}H+BE9-wBjpV$GDJ$kz~5y+d)fXAdNd_n8Qd1UJma@sYQ#Aoo}7u6gFwIFp>yuC zZGJf`RqRV}1z$m=TNh!E4rDcX&`&?0Y^6mKIl)2tfBbP+bl$*(i~^oeSc#+%=xMk% z^H58qq$Psh1UvjI`aVYY)_#rv7S3pR@HbW+fyCHM=P*5aC8g2M^O6fEQ+hNz&pAqH z%f$tgODvJh7VBDINitEiMf$)zHn@;V=8?U6HYp{gk7WR}S@=dgPC6%C>%4MN3E-=p zPG@15oNri}kP+T}$ZM;cOf3^uUQM{L;36>_n?&=3T}`JXFHdEpA883+) z-}tc=q(^R$xH1<-!~9F`tUlw2VxQ0#c4kN+6AYw8%kZE+Rwh~ALIi(y(_dzvp82V! zwPx(IuBlJ5X67qjw3RX7K|d%29T}@rtW3~4I#zLuZ?py6ma61M>?D>}`2n;mpW`gbIha;jDv;lm{U@I}xR(8P5Hb zeJ#?$pqW^a7P`o(Il6+nra^)UoU~$Y2YS1vQyG_()K#p}U6qtHOJrJKz!+Emb;aWV&}xU- z!#qE58NwD$hBR6&f?UUHlHYzN>oLt(exGQRMhIEc{JflFFc)9>%Im$>Grbd9jijn@OVMO2g|D`#SY;<8MM9YNR0 zg%h3Ui-ozQ!A|QI#%Y|OpZ7*M;N%}^rPS2f3Z%`VeC*aznyD1OWV1Ee1(LI9e-f_| z9CI`sL@1}zbwApMIH065f?Xq`tsSzWq9~a5Q3)JC(mDK*df-vXcnW@)=yo7Xw0tlo z2;(ewh!SW!|R zpmPma5uTz_81n8!ToXvfp#1J4BPAAEGHXZ+sjN!xN|zfV&=S;|VYb+Ix>!u;i?WYP@C5|!INW>^ptN?6 zQg<&}LR{Otyj)k-CDf0Kj>K*swvMU89?WYdBkGaa z9>Tj57J^f^Im==pb3so0Kd=hF;H_m=iMZGX4Fio(aqR#OOxA6L?ZEWP%uAEI5FP;x0l+`y5A5JBC^ z8J3t>Yb0}HdNR=U7k|>^$({0+(aN&u%Ntrk_jy@xRvM1rvVX&`nQNG-#u{-BD@zrN zv~0kEOXL*XJdLR$oyKRksl;0KE(R9_rXkS4Ds$8|A##Sw&m=2YIjfSc0GW3YRtnPd z{<~2h9By&vw0uvO^nh_hoKrt(ypa0souy|S04qM*sz(BL&E<#zu0@Dq)R)eOu?IQAkYmn^Nht{?&TDYsp^>N5WR%IzK7*4(ZYn~uIZ zr-bp{l&3S?Tw4#RTCqOA7+nktJi#;jimspcf-);8(8sEPwm~VkxZhp$zr06|+`lF- zkNe7%uwxMKno;cnBCWs5O0BrxojpsOPaMOcg{;i$#SusapF22`>Ao}f7*W0zD{oZt4FOcCBexRlGh{P_he$? z05ISe7ckX#5pCG#%hp|t{ONr!qZXS>LzNL;gu;vP6g#N46pi`0lxNDI;-@SgByX$< zOr>hMy_lEFi;>Uk!_ZNiQIjI(hHsW*7oN|{@-AL6O>CwWpO#6s`5f%L9!xs0Ndy%j zZofUz_&R~tvN4b96t3)Zaml(_S?@cia`;i&LsZ~x?xNR>19YIa=TJYl z;38Ljs0$(O5Wmv_5FbOFb>o7Qn3!@SfR!`{$3Rg8C(~zO5(uxT-5I_1os}{G8J`4+ zTny8Ftv701U+uCI7a)=(-nD*lj_Hm;lY$qGfoY+H93SNpU5^(4HbC`^0smB>Efx;Zh~^8?1X5ksx-|lHxtFtU&#aU~zq8{x2+H8?l;RyL*Z0Fs#xQlN1j*qzv{0xy@T!11^sWa-*D_6iV5K z-ZK=cN6vT0=#{6q-%JfU4WI(!q*xa=Gx#@$u{jGB=L%UTIr*kPka#+D%e&6>It_gG zyBMc^>MOn23d5J;Zz@pP+3p-D{1k~f2tF!HY4n;CZe5HD5Nz^E{rOmC(B`$Yz-THd zj@m)egvchk;F-M&v|O^^t9G2z zPHBsgn5}obS*zkE^^ij19z^(5aCJ9Imw9L^f%Cdp%IexR>Hd}4qhF`qLZ5w!NVDkPIw0#TynSj_{0iJ?z zpZh%n5ZqdI@JVmWEG4voqr7bj=^1er|KYo3;ChM`&CSo@)p5|m?T19w zX8ji^yFgiM--JIdglrMq@erhJPA2l-ehNhx{Iax4RxekOdVi3q{pQ*E=Y|_FmO0Cn zg#;BgvNEGXf;IZO*`riKWieBE_Fg?3^6p!OgAgG5dnuhTltCv_vHWXZE`=N-sH2Je zztJi`_m8+6_fl&Nq0O%|76x^14F&eNmu`%Ki}eNCf$v^aQG)K~^*J-u?M3E6=sfd# zz+bfzj@)3a(py^tu8S9T0|FRH!M;MpiZ)Qyvt}0RD1*tLXAj!{AzdE?p8=$!zL-ET z7Pm7ld4|7Oh$%PVCoYi<6dn#{=C_j{z?^|Z_i9Amt0Z**N@|jZ0%ik)ZiBB~_M)G% znex=1KN$!w5Eyi_a_;Z?cWv_Gs%0P^ouQ;lv@8OVp84-5pHFgJH7~>WM)aDmoY;Gk z^_23d>-Zki(;d@iHTk;LcU|c*v^C-B&L@=gnpXHsNe}_DX$es!e2Eooez35%2v-e+ zC}+SuPdYp{2>akX`0zo8%HyR)8~MGCzMHS{-YUdFOV04sOCtc}uRj4wUM@^C0v7p8 zFkS}o{xjLVfc^`-zxj3|a`O7Q^|cc@az7KyVHnOvoOtUWpnx}_N#wRP2+wDC2%)~K z-OD~%_Kk(h-)uYho`=v6q$w;>rfW3?n@<418%Tvy5}Eok{C|VN+cG;D>kq&AL2STF z=sA*X9|0Rw+{kJeB#N20-rCbHi~;@*2^HaY+&{d=S!qMl4Hpy$7Su8 z{!gBf{(*DI>tN8!^@R+C#<_DGroH;FGT*gsl3+Rn_#&rD^cUaBAVpvMEq(q5m(RRd zcNGdG{^?Kt9;Vn^>bm{RuzZC!0_T08)T{q^GHXWDZf5=>4gmlj2%_Nr@ImYCOSS?C z+Tz{MR(QUI%K;)A-I-BXOPEA&p{6p5oXsg|v9V&f+K$xSc5UwT0T9TNTcx`OWcWjz zmy1e}Qh=GS0@|qCu*E{O_PG${y+XYDayQfCXNJT&_V6Xu52*wBfAoB$_-I(;R!nij z!@?x{pwiCH@3eS758EujgP-QA9}W!dB)YWiCSTvZ=K=qnk!d@Ohcg8oD5CX-WR*ljanBUf`>M)4VwbKB zGtD4RmAOS833@%7$7JU!_wUD@_5Mg?z=;=4a(kTKK}7pg{e{R9Bya{n=UUOj80`OW zGUKz-&bO4lJA`oV6x>g5t;=;Ep>G9mZ3S;vk(@hH?D7-gpDHe#SbWtVyn-ml&3-2C zkiN6gNz)uDN$jBk2UJe*xSKDq00J-slYG+(7b+z(EJiseY+YU6^Pjfxm*#HVa9Ojf zFQ+EKP}_I*W;x}2=uGqJhVtHdyM1yYOSR{KhsWiy_&gI>kni$Ys&Yb7GE+p!^yjuf zxM5Fv{b2+f`S}S6(3Es!fIq>;)rBHsXmYYziD<+{kS0yPPxus6=LvBSuBw7oAB5HWT94~gnbKOW?C;mpN z_m;S(hoz7*^)>Z*#W@FW@i{%w!a4Q_^c@v)S>FD$fw0^4HN?m_VYv!+p+HR`m3rc( zUXaqF546Fh|M;>>D`Rn&3UjZ4F6$97vySuA45&7j2~h)>r+M_t_+VFSUQy|9k4Ywt zl%Q7qZyvm!1CPcXysfV1FK~?kHiIYh^)TpK21~Ong_+&M-5Y*`56-OC!ra_=f{f57zgYnprxH zFzO~(UCIvkf(+B?Cy|cUz#Ewi1sTdX*eaIkK!%I3mBh~U(Bpc@eRX^!eH0a=-a-Cg zsGdsjQzq0rM3LR=>6B2_-SQrxD;A%mjrJI0#LsUAqENplFv!}_h+06W>9=^?4LfmB z<*xQ%$}@L`$V=dEL1J{SK53iIpBoJYO*~d_k9vI6%m|{*P+0(e7J16wuR8=3A^>G8 zO(sm@ZEqeCd_>IcZ#);t?@2^chNZ4w%P1+0ITOKdE_3$?IgB6#tp-jg?&RcT^x8l7 zU6BgPA-Pe3SZC-PkUN2l7(5GLQ=;aUikGiG;YbxOG~Ef*z*QB#I|rEQ|~3zMQYT8KXAs%;!xDUumfkfVQK$lpCj9`C|cIgbe)Jyl=zkI{2|ym@@&Dp0uobKE=f^vI~hO&;jdg}ru@ zYqU^jBjvW{BbKk&%aoR+ru@g$V(T*pf6ihpjT7kl;XrJ6m)88SkK7B66ERINc!SMppJ$LSL+M%^u+dfb!H$?90cwTA@+fljF=8LE{9C@{o z&$y5e>oyDeR{v%N=5ef&cRr@1&?WXr$~LE}b59FFu{sCt4T;0;L;i06YN*xER=ato z>CC%-1N{WUJ}MPo`MrLtH*GN)8Qwddin}{k25#W`WtH{l!4LQl)(I?bK2}zu znUD}G#I_xnG|H_R%^Wu!epx3MibWD4^!xcNfCF+|?SOsOfNf)zH)VG$H`3+AnHn z=i2(mNB$`Hc(FNt?t5Eh9wBzkN`<>=;}~wQNF2eylgi>0Z@CS_;`|Mw_zORd4J>N~ z>F?iY+m0jbuNg99YBCXvQ)W z71@{UqsYl23A6`y+>TV#q|~rJT~HHrpmgM<7sZG-6Sg(RAE0Zj*(yTQ_(taq9o*P+KSX7xMiHo8uUN0v+vK#0!{WlH}; z!rvjM(Mnu$93maA(0o2#u0m_^zNZVPUxYwGUN&5YfLaX8Vtsb}jcAG`qm;Qhf`}Fc z>e|WB(9rtU5Pt6!Vr%2(THepHuZD?-DU}zW6qzLd5D<(OX`nUZmpsWha>_`ivBsUc zVMIAQM zr@N^q_x@bBq?n;MIhPRycVw|j{LrI&XtocJn3C!bMQA0O*! zvR2L#^7O{kIlK$gqcIO+Q`A=GqLCepwq?$Tah2j6Ko}RIB*{OHcEeJ~V_Enm`DDNQ z^VvsU@0XzmEg#0l3Xl>5V5RM!`+B`uD{_1R(#(?tgYQ%7a@2Ywcto{#MmC=rr70gK0kzK{k4`hWZC%UM5 z60qoO2)!XagE|;bjph0MRYpjcE^@%;>vTHdK564r8Ec-=AsPAqpt*uZ&a{Ed2bmGBiBpm--r!$jKl5_-xL`I6j88t%Tr*&LCHC_| zo-kQ2T?RW52^jthkxyp&zwM@BvS56}bhsbN0{=`52*}x%HUnfSEdS$&vMGwIPr{TS)z~}eip@-5qR^h!V)of&Qz~jtMEur8TSv z{%$>3zvmoB`(GF!F=e4aCxu1way1?>L@tyTPm~Te6|Pea*8P0f(Oy8;yS>ZvF?8ku zGa3;*+ftWP;ad7awr*sA(VxKwS1N=Aq=f-~pnPrWb%XkXl?vtyif0XLqGUvDXi;_* z-YoC)WA9D9cOM)QeTH|-t~ykF@M&R~2?W}T;hA-7ZSh^HwGj9#V+GTyS^m9xG1gW} z(++zz!b$D7l(dm0-V52nNC=8_B)y4|nJ|Z;i_XB5`r>AQc!*I<$)O&N5pV&>qqzrs zM%WXFDM)Ra6wp!^%|)_Ev)F-u+CT*3Wds+4*epMV`d{!vf~<%Eo*Il9sQ(tCA+T|{ zwx+yig=JUV!Fs$mY}nb<*tTR*qbyNqKYmFSIJk7h+|UHByd---9~+3tWe+VPXz4_sjPY=@18KZCZ?;x3-zW>vR`~Qyn0v;|Yvtfn{F94oc^$%`HI3I6f zm0u#(2Atj_R(swBzXEcI0486xzN7>Yz}b@RMdRj2BWN%yVY4N`Ubmf3Sh!3j2$nR0 z{Z5D~;DN#~!lWW#Wfvt$;y;@(#tShxHB^$CE?IS}L427sY|4Pty)h?(m)Rr@k%n8z zfkm6G0+7h2_^kB@umE*cx%~1!S|Anj(MC`-5nZ&GiBC-&=elD0hgqsM+%Lt5EoS&r^Ld zxwyE9BiNoP=g-8|AI5q|yjDnj7NwNhtr?$in7nCsYxj6y zWxD)i77b``a&ODhI}q`GyvJ>E{>xr}8t&su-a?aXV1&D1Tt&lS7q|AC@u^K=d20A@ zri~G5)qOU2Kp`ACB%G{gs^MHs*!*0`W*D?F#ZBu^3)UJKrbQZ#vMF!Re7Z)*iERXuWRC01{-&GE4Z;JG9|sAcm23S z_p}B}GN`9h;nK3dmrDEo7P(0&o?)l+jih;eA(GJm<$&6#q} zuUHJ4lkW7>JRzlP_>Hk2m_S;nmfh#1W<-O-=teHt9~##o{fmxHx9R@LGeyVJVrhP9$MGzl(_CbWbPwM4rL~NVBy?b>z<`{4TdzZG%~2 zi(klgq_4m41X4k)*LFJDrF+*YjzAu8ww}GuYb%{6K&GoxKTeo3Gh)rcbA%3-Iw;I? zmU5aU4dMW7{*l20;*_WkgxWSKlhunaWPz zw%5-DVr6?T-BhC%WAh@7EIUbt3@V9uTNUz>>YtE+nab||R$fXeAcM3?+g21TrGF-f z(#6V9HjQ_Ze*#zt2Vw{|EJ0aiZZhMTz9#}S!6 zN?QM=zS=csv^1q10i2`N^5=Rf5X~RZ6Eov1(0V~Qvf2aQ3J!TIwdziv!MtzU^mAVV3%2`L^SwB6kyfkpCwe(AY<99Aw(9jSFc0_ zINTpG%WS`C6e27I9Jwk;71Ke({$*D1p>1x{=I#&(tWhTLPblN8-7T$$Si$((HDLbq zZLI*Md>lJ=Hq#YB_(`j4{M*Ckyxg}0oDO6Wqr;=aPpA9kzbhIcfJBd5=h<9a&u01 zdz{5<5LR5to_kQ~XN=Bv+T|j92Ar}}s#`OSYN7b+p_42V_?Tyuo1vE_1k%l5zAvRN zvL8c%ZcA_NhE=4f^+ zz28P_lTmC<)mGlahAzVv5boc?%WDjiI;7cK_kOn*YyG14Wzu1CKJ`l=H@C??*FXzw z>{u?2Tp(0myK8bHtPQP(+V?Fzp5~WSJb141)!Gy=^{Z_#cYglWs}DN=ohe)OszU95_#7@YQUGD zn+#~EzXq_vW>s4t%Q}infU(Wpr|8|C_OGHTn8)*y_h75)-sSOiO~KgEdh!of7KrkcjtJ)2PTQe}Xh9t~5^$MSPO+j2x+8Be#^-PZ3^LjC;Qzor!Ti(L*=LJuCTu_g%bqiCRP+!!W+Ya8G$9F4>_uqABh&j;oh0a&g%1H&Ubx#`KLCoaXTPs8!v!4py zkk_NKUP*edxunPZL@a%~>|KDgBraT0YpL!xXs}UWL_@Nj!lAp*UF!fyMNOsBRgkQ4 z7f_^&jnh81Td}fQ2R<^B(}#N>6ZlYUO1sRZIe;dRWcdxgo1j9B^%#R>Jj5K=A2<~o zMmvZh?{PsV>fCLfY4!-)#2v*$&fJ{W@QB|FXBz*MOC3j4P^*K2$-5d*X5-TEQW+_+ ze~1(KRga3T>)!Qc(?W*V@bU8o1G!$OIdXs;VTdY{;4)|*4Fl0+3EA%Tecm$4beHwN zYUv9u8-^|F1gTCBJqy>dR5jh+X)*V|EXTgGF3@zvYuyHw)b|s?I!jnw27bC(s&QQGRT;@; z9+I;Jj7c$JY`8{N!?8co)2C+)!g067-(> zt&H6Ld)Qm}S(RLQi`v-JOUz0;3n5=QHGO~n46S+mE`6yL5kU3Bj*EMZ=^x5jMMHNp zqp5V+$3^aV2T=^C-!a6z#-yI!-SVDlNI!4-io7sy2-$k}Z4{iGPCVq)7NP?FK@rjb z$p)3$XmZ#hp`HIN!-Lcn=ddl3#>Rbg^K0dBAw;M`o+Q|VC za*?c@`va`{k)i*365!-Oo8s=E;{rm+v1@&8tZ_{#aX_Ag_tQhWot+is1NQ|u%~fN_ zseU|jEF5p0+hcLXFjB$h;750}!m)>I_mI`i4b`~y2<^rtRYemi@1!#yvCU)J%$o>c z{vIz0^F_nlY_;TT-^Ht8mi@UEr8N905w4`{FPl?Um0Jrwa|FyHJ%#CdJQXXA=|mH( z1cNHdtSr7u^$%6t+K*Te58_SUr3vQm49d!*f2($hbnCWoA$+6r3woKRSfiJVf=&vH-~s?eXp{#e#`;3s?e3N5vE;8sPZVbc znSR8~RggEd!h0nmwhcIu0pkBne{u#?3)cUWK5jylN<>do`2Dg>SC9-6@1e50{_O$% zJni4ezH(T;R|_r*@(Wv{y#oJa#w7paj|ob42K?lu&CS`0gCmDw#=CFIm6C0NMwn;l zO(m4xxd7s*fCZiBDz_4BA?*xdLU_%d+!m#iRk^yhNLmkKP&7X`d(F$KI%;$M2x z$oSJy|5FlL`px1g@T~)&(b*cSBzEwr2ORQT^dv?18Aj@jl@$AWQ}sTZ`kqzu$2by* zXn&T^h+jvsrc=` ziwo|3pH~wMMm}0%`Y^s3K-&~?gQz&>^v<}Ri)SDRU7|A4J=Hhe-$`kj>k`bEbIH1) z|F~E7SsA%{Ix|$FWj&n{GF_GUcJ>DPK<<^!el4ESW4G;hCU%oW0(*CGW&H#$yZwkA z_TDAnDtOH9D#Z`BEFQK5z20-^ej_>Wn!r=t%B#L6Jl_F&v! zrX}Z*cl;7~!fzga({pR#CbZo6NuDiHYd>nMzM5=PikCq(fFdPMPTwHi@dy6af5eD) zu8igt8IvAkD#IV_S2|lunZL47?O$Vb%Ql?%P^xTqw4SrR_{1glCy1?u%jhtYVZ28_qA2hi1<*C#DF zY`{(|RmcGB=`-)l?vDecwMC)DI(DmD?+7~w68IvuLKtSe_!WLJf2V(%|FQ^g)h#@l zLwo$M^Qu>ZI|*rVkrnVHqW^Y_gfla%L)Dj@D1|nOtBp)u^W@GQ1XCs)XH)nP81vYY z=d*|liAuZkHLU*JO9f<+tdG26&WR(=;w;5E8`K^Lyu>0otTD(JSRJBQ1j zGb|C8mh(|iv4Isc*<{`)hCg?$B#E@FpZ@Gk=S#!V{u9C1eCH$}o8AD3su1^;)$u$a zx+juPy|K2=l&ttV*bXS{IjXa|K`fKGc zbGO`YS6oMg*$;)C#3JNAzf}xPwKEZ2y>I8k%*V9DoboV~hj09q#TeRqoNawpRVpTW zdC+FO`kTbxG~j~BqZBCO=kk z)O`Po1YMyQ<9M*NAEYbmyK<<~)=8B+#hg4wORaDO(O)S`00H zl?GQrRBKJE(TF*7ng^|Vvfl41~QV zjQ;O4T&DH=>%rPI3Jz1+)ni-)CG59d9gwjwLPbmjh=-EnU?d?dt2S%AL`-i?iJ!>~ z2nhiEnLp{`w*|x(&^8kZ1usBMJ+FK+gaWyL$HT)pkg0GAehfl{Xe2C`DAQZjOBNo@Vh#A<>GhFu7uf%YHj)!sMp`%Z$?5@z~sgpo8h zJcN#ohpU~=V&roj#;F~NgLyXl`lQEiS<>b@`va#u?&^M%wbbT(0hWCtQ#Z%_;knoU zFSW{Vll$zliI>YF724>3awMkx=ovt>#YlqK@M?p-fueFQg>?&ssf%g<-}Wf?-G=OHd6Hw|D&vTDR^ zu--zY<<9oj`2s|x!-b}!k0eX(GZBE-_C7?I=Bx4}Mmo?Lt=^v^;$0u(9HnKa+p8ga~WeM+;BOo71`K$oZpp{$6%(6Px)--=qj? znA7iV>5>Z*_MMkZTgP0?o5-B=m@bDF@yRcj6S9%dSU zj!iB4^3nZ_!}AGk*1)iOSI~4}pRNOkb6V&*j;U{2_g4M!tjlkx`5F_rL$p0$hNoJW^*j$iZ*HAkkY$ToXOJa=&?Jti3v@}1~jL$%@KTLzcKH#fzvL>pyG%2|Lgpp zDgXJ-W!AUY@>{f9>yv1Xr`s&}5*N0fOg(Xt)9hKB<|@v2z{IrkFelg>idhESa|Iry zMce*eWl{HEXX2gYP3s$XPFu&MyD|QIhRSwL?`^48w_3OkU#Va$E-|VT{&sHNWS`4* zOw-TadAP;*L>{+*Q^fC)pam{&LIt8`ue%(w%q3fGfSODS@;v(K6PwU%B(d{CtTOsi)#kZ+-ddL~KFJ zwje&BBYk|Q7=-S=Fs(-<=jTmu0$HBxRCe3AS3vSAi(;klwLIq&VJWW@&&g^(jW#@I zs(8}=_q66Wr?}Rdx?j+>EeAU{=Qz(@F^!fJ3luq~7k-P~%B#5YgqTR{HD#c#+gVPN z>NU?Y?cQ|d?5-CJ7?~kjHuv^9Gq(!7JkEKjee0971M4_ucCAS;zO^$sHQLvM>tZ+e zK`rl_R_&+rpMdg{b&cCYi!V3bBK9R7JU^*W>DP}ZW-Z=N4?Uc!3{3y8CVI_fR=m98 zGAKltR|c-yD&Tk1tumrF^8DNbsmA3N=h${SGq-KHva3x{YK!5_Ww{*TT1g(WPb@gy zv+9Diz$3T0Csz92Fqk2=EXF=3JZw{>VA$522VjfuScn{wl`?2)y=K}Iu)f#RG|zcQ zkfiYjDfiR$Ztoo=OjZ`>318z+ZPPSAWRV&@HF4@`H%LO@J*;?VA+VpYWNTuJYVhmJ zt8zKmm+J&C7wo#M6LF$fW`|;1$X~6O_Z|zl@#?PeziM&mV)Qd!<(-`3)lApVemng7 zUGB@bx0%`mdT$#XIs`0@fF6lR<^w)w`kF|o~w&56wk-xw3yoY=N)+r}glCzE9J?e3rbv1j+5K7G3H z>8h?q)qQT&^F$~sN+H4H!-Ii=A<0OKtAc?+0l~n)l>m@m9`PR(B4A*UV9N695}%)+ zA7A$VW&d;c_GSNG-roPcyuQ4=ygxlXJwM++zr8#>+}+>5{rPiydwcQs`Qp#tv#Xoe zlhcdy^W&4#qobqe-QB0P_5J<*-JPAa)4y~3*IQd#V_TQ&>+7qltNm+dj|&SAlam{Z zOJ6oWKR-J=J2^c!K0a|bH1xNp=df?!wx#8`v3X=h(udlDCtGjjKxNhd4a(t(7 zWVf@kv#4)5wRbbVbFHndt+}P8v9YnfzP_xXBc^pZv}rl8e(_Ir&2?GXRYAdOaany; z%|%AWd2-6xueifsas3HtHMR9MHFY&LHPtn>)z#INRaF%g6=h{*C8eds#lyIayg*8JSrb=^1HhX{o7c$tkHxUzV7ZkdP3ckP#mrpAwVeS3T=qITu>k z=3YGFR5s)Id&ahS$}VpxEyueF`ycQos7dVtRxlyH7$xj{^eM0zrFTK1c2zhc2!M zj!vsiF8e=z?3tNwo0(5r*z6h@?r7_5YU@nu8vG89i3pDj3kwhZvfxNiNLX-ia8OWC zKtN!Fn_r!kQ>;h$FKfRpJ+m5JiyS?>Fg-VGP_{a#R3fxNGN9~RM7Q97TbE!+D}Q(= zPe=!Ma4UOoJEwmGlYgtecP7728LMv%t5>C?<4;GUpGuCIy2f6NK6SLd&GcS1l-^C` zUQJ|PP1K&Xq#g}4u9e$r>RZan%PMM{@(P{>TrdZgQ85o!8=$B|{=ja)y=$Yqf=w@l@ zyHvh+%PJ3wNwtZ|5AzERa|^Z#NVf5aj&Sn!bMW_Y2()p28)4xbWn}ANY&XPa_j7V#uj`_~7t^8rP)UQyg2aa+}ffOaVoCo`sl< zx>NPsRhP|6_8sm$_D|T)xh~x^>^Sz3GHrkOOQ8nSy>d?81b1fIa!t+6fe6~8qS*Cu zAq-~!&%^vrL}yw?wEd?5Rit-)&2w|}Wc~5@FhgtW2t|mVC)1vrmU?u$dpMJUw<&|T zvU*M*T5=ihg2WezcUjZhOtLXLu6Q2>>&(536or?jvHV8$L3hgJk854Jruz9?g2NMV z!vymiAC$)^z+vVgMcLlF1@ovTe_Bscmv{|H-5hc8Ai_NQ!COpfs*x?_>=hfB(-LQeQM2q^Bp6A;UcsVR-tn+1a_m;9%so!|#n(w?0HdQQyTB2jIxj`Yl>_JTJpyW0hei z4IEuDMF}OS?r>wd{nf^6Vc)18k(fHCyRn&Tzj zT^gZ#15P8#FY)jzno!%Yjme!PHbSEyR81&cY|!%qTEB<110~`7EY$`Wb?p|H1R$SQ z^d6;U;!=tfv^OY26#^&_ zDi}*_z7b+*8%E3_5q?$tE*1>2{VttSA~r}W?T2RT*&mLBh)j!=Ba8AFLf&m@5@ z$xoB@Zqbc`pbrT!7Am?VX(R)klAxzm1bMC-&k%V&kwdfE9t98Z(E~5NhW{&1i7$|> z`d@hnKXM~LU)N3$>I#&o7SiKD;K-FTJ~0T1P&{Tn0QLRd4o#C>0oI4-R(REzbK$)4+eQN9{j9RpD6;N97WWrX`d|-M9KgZgMO-3&>*z z2|AFx1c^V7fAu#b0niQc@@*ZWcMmkM8VMvloQJ&@AV%>Xc66*6x`r}+TwR97tc)xb zeXqVxpPi0p9Eo~^HYvx;^Be!Mg>U{i9Cg%&3S zuv5i^0<0!LJt30}ba4~+^(ca%U0&hwgwjg)UN7Pp)I&dYlgG(mBl1YeuN%!b7lspt zraH?GD!-|y0y{$!70`laMx1a>0v*0Og&IHv3a~e57m1B>LjxjxDjY8V=~(1MG-p|txUpx?3qn1m1+#gP?T(^X!niT>K;}(Ft3SazV@MD5bq4lplQm54Dt_C5 z?D$ozAQe}$RDF!8CiFkyB;?oN>YuumasFRb$eMjsak#UsSW-MvJAXr!#8>d)m-wW6 zo7y=03H^hlu`)13GH$vb6MLU_ZlxXu8(*XxYyw~F{~iHmImHLCUuP&0l(ekIy-Zdi z5FRMH5!D9T~7)M`Tsao z(%aZHBL92yfTAopJUm?91jqL?BbEkSx?<@^+xxHEvQaCPm6rPhNhnmx}#;vLine!w8(XmX;RW(Uq0&L5C+NrT2-l z#UCGRUIApHSQRqT@-h?SRI*BoH1A!6Om+Uv$kPVs{t`u0tjRuxnm-a0F-jqN<6mDQ zySlnMnY<>Nw`KKVIyuQz3ROpoR8hYEKRc_NILX1GA-eaUf?0aLN4+FyY!NMs6VbGu zIdNlNCCW5=wm)1WUJ>mb9@@1+28WK(rA7=6_phkGmt!O>ti9E<-$%e@i~>S74e7v3 zZvHxV9|}el#mkJUdS~;I^%|a^I9A z1(-ruS{Lb1y47{5u6j5=s15G*F)}f3tLW*es;XuQ1~ucDTb2}`a>UD~4~n@`wukj< z=R*!J&~{!?KS{zmcvUh@Ia2RW_-0mp7tTU{?xK17gcn_HmlctwdDn9cv=fBb-^VnW zOD>NPjc@5uP0UKq)>p0XLh>>}EE%012Lqzjz{f@ES4%(DqDh@MG%W0!GbMH?1tyA@ z$&BwhP`uZB!R^2V)mhd1l$rpH=eK%(j_R86dD^ZHEDdRM3~Ud3m)9Cv+5BMxZj%&CXo!hWEDHZb{M}l~9B*PK zMyF-tcooj|*(u~Y5p3&JBRhP0x%xvn&jVF-9f zODvbcJ&0BG1=1lsg98y8;Ilmv)79H15ttg!0bsnAb8ytk(}YGFU3#7W%w%5$R>7;N z42WP@|F8u>pai@HnA~1NQQ?cWzh_goK2b z@wRq$Akjc02r5+A!O}d7-%)YlP^RTL(+1tDo^&zjjkC|7qD6V)7IxJ{H@FO~dR7V( zltHDix%2#9tUjRj8Cfkl3x1u)wBj>|<3KYPgvAJ7#8F*DZ*)3eGRbyQFQ>3vs7wMj z1Ad5=?H*~&5+p`ri_mIHHmS?Ac_kv0EmW2CFeZ(xzC`o#KWzRsPtUjhTXT8fUFxf% zYZ?^SBfIzw_IFm?gJ&nFTl^}?U;_vZC>H3>onDL&wqeX#&T*~U2Ts{C*b$8Bd7f;l z-j$8-=OlTDo*L&@mxo41@R949M*MYoQY;-;!b1y68;rz#w4eu=Vn9*@N7uJv@fuh=Qd%JKH@qn> zQD}BjQQ7@&`hP>ylKlNT6fqhTSUt;VkSW8nllX^C4GtO}ktkOm#HjmG72B}P?wa8m1Ea~f7T($` zQRcmirWLbzNKwVd#nm4Gj~E^;pRcgXIyN&QjtZv_xfqY`;@RkyB2GbZwh=90JdU}s z?pb0aP*>H+!_WIo*f%5xEI)X3D5_Q_3HI3+5TjjSbnT1}hnidx_poFf0RrFc_I=U{IPUtR;hB#c#~*ThdYqiwn%@?;+Ic zn*^0ZS>}5p=L5>{4Lq|#fzw&xJgqTpo@p0OSdWahV%Rg1- zq}iERMfcA`VvAWj0i^Q!;N`_=s-$taCd??)({|KLwfq&22?cnw^b{ zo^W~}@)Slf&C${KitZRR&7pb zFhoU1sXfQeU)U0&rWF4L8^$zoFoAD$5jH9}Ehe)m%zJ_+&&TyD;NhQe{X`T1mse3u z5Rop?fSesWiX4R!WOPvN6y3LFPbnQ({MRE;G7DkrDTn10VO38d>A4YY7e2m7i%1)d zn3b=z2nO(WEUB6`pqRr>hT!>)8h{QK049NY)68xmT9%NfIYyc4KBiAAx;v@^TZqhR zTObzKXU+0xCyb?ekt8i>YT z=l6 z22ZKune00}bNh!sE)-JwcdIi9fZN=H-p@-i-dvB4;uAASNDv>U9$2bIp)S z8N{YqMLA=pg0@bAVsAswI6f_0ld68nHeiwUT-((ZJSX4DfDR4Te0G@XEWh^rqdrm< zf@%ivIM1Uj47`uNB(V)vziA5lhVn2_i3;`zswxT=FZGSO3~sJ8DqY zjS#G?$t3`J@YnE;4FgGCFF1%Vl!4Gw6CSJ!*n#`VMy`Tkd5zbGXl;D43$m2PMn$VI z{#Ht+9_Voime@$c&!~bC82C_^E+1f^aqqUO_e}}VX%cv_lptpu8!S*pqf4LOnYt-c zt-!q2Jur&FkE>*xY5Prllf^saIlmm!M2z;^)uwe`<8eaA=qFXuT8=(_l9%=MAbD2PT|9+QN{2 z{hB65ca1H|)WJKJjG;9*&yy_yDu@ff>wv|Y$u>opIuB-wh){O87wH;zYDt<&s${^M zm-hAzFq5hlF1R>oWOh%ILx3umXO;)&ode&(+1=t|Bi+|usm&6joPFvH1T7YA$5F|G z+Gvt3hznSeqCjRpokfc#ZP>uAeNdojj;(K1VFMfdJ2ffIs~w?PBr0`=nCy~Hn{UqV zCzC*{o(e@trkFOmvwz;n8^4D516(L_Ps&7X!gyJA4awmu$BRR{7^b1xi(``UJMm*c ziSn<3y9B7&`mr(wSM)b})0ht1_Mu0=Jma*pMA3MhO{va^U{}}11(|eJS*G!3hI@}s zy&UPH;}$adq1{>K9!N2O$Q$aPCbL}6F{^?uLthwtY;+uIOXf1w33;dVu$ZM{M5HF{ zhOonNEu`_x$-&leEq#-sL2dDEOIY25;yEF>Wu0MR(gS8ohYj0Q}G{1Pe=+vCMd=_UN8f3666sIDM@4 zN-oh*h8Xc@n?pv#4Fk5xGYVKFQZWotckH%s^Z0gojv?*vWAxBaNdgjJD)jIDMysb% zN^wambP;x}TX`Ud+nUXM1AC%|s(&(HkQz0JUGHX*HUAh`-_l)@)-RF*cr8-J22Y4h zXREVKg|=uzK)WfIk6Fz5K9>$lL9YQTcfgHZy75|`5IH7fQ2xE`U%ddUfN`r~PTY`S zaCyZt}kG0vHYLv+Ddi$LrC+&1~Et0&qe7>Sn%03zi;G>1DRVVb_z=!ftJ7RanTbpPL^N@o5Zr|DnQV5Bp}cmuE*D;wsL{<;A_AzDOTLXb{392OawF*km-2=f-%yd7 z1~Dd!=r?qJfPu~;r@}w5vLPl$Zaf2cb*5f}Q^>v)33L#4L^!a0i&=+dqJSLgNRa`>1=CF~ zth53SB99z-N%miX;??sB9pA)o&VHRuLJ-JD^%cQ=0oczvxPT-+{Z3h+r6d(w2yhgy z^eZc6wBOin{^=v*r0I<=Yamohrphh?Utvmp74>Qkzz%u2lUr|wBuk;9XW9dM3Xf3- zs^wK39NE5+^kWQss79=AY-F}Mu`FgLB|zvXk);e!s4`3&VVMVT{*E)qnOIrxlOTg7 z4i_s;2)jdkL$lmAAdGs>kB%OxC&2POZz^TLr6rTe%?P~ZuMN(s!IR8p1Km8On()Gh zl3>xf1u?Orr58{@r$hKJmlAAJYg4;BJRzRz5Ce{A&amwB*1oD6 zx4$9|P;~c%`fVyzBw*;~d6Ro{7lO>x&4$Gi;(U1zhw!cn=!^bJ8jIA~u(q4z`h(Nm z`qwID%TiCjuW)3K?mMF^P}v;&BZ$sgc+xC6@@3okL3^^`keJ|QP=P1d2zz@vVXtr= ziM&Y^WIv)eeG4XYm4QF0fJISt15F%yV5#}l=}H&LGd#LGg(AI#pwMbMw+*t^*!>7) z?SngD$GVSU^o$WYG0*Qm_F8GB05+Cw>$BIwyZMVa=ELm;TsvUG}zltv9GH5I=fdBPzV88GPh$vG)$ofxQ``iZ^hn(EG=c zU7EXgZxxupL_?6KVWT(aPd`h`ZQM$}fuRkhlJG^`Ohq%x0sd1#A|k)fGr%5c1c!5w zNMRf$jya7#vKY@Zq=5X#O~P%&&k^+lFN)v(AyH9-19A+>^h@oo@GDZ!AJLguMh7gQ z5D=hj0_$`Ug1`rDJ2C212oI>!(b17hx_&4Ar@OoRr=XI++}6)L%b6U(t>@BW^FR4w z9X8H|17bnGo0jVeukZ^NFvrP95)wm)*y`#l%iLVtU#pi8S35gD@~~rdbf50O?D1NP z&(X-pXm_>FH0Ye@t9u;z!JMA9#HVRaR44UMHmb+v|)G8>1Tx`Pp=909M()$WvG z9Z$gz9|;M{&LaHZ#ck`+Mzk#?C!DbX!j7oL1Lo) z{e`B^E_Vp43Yzks!h~A_kila81t!inNH^Y|AX+g%exhNK4zGcCmvp*H(OnlhoE>9= zQvZ{Yx!plPf_5Nfo)-8O#~Bz+>PZ&<2{-Rvpt;3Z+70Tb+@MRf6UfTm-nO!$s=Tt? z+G-Tx!O0`bLNJn3%o(50!((ZQyQN>-NSu0q4P1?{cOe2J^gCEK4{L2tOKC?j9#gPX zLvwR=H=1KXOAB6K5V)Al6NaFm4;ZbE&m$3!J7U1zjj?dWPXP91p<))#?PY|@J;!Xr z%>MUB58u57>Rd|i<8;d$KYV)x6h;qTC~BTrD3Q&nZxi+pgAtZFN2hqtm4O(WoV-6+ z^)dLlm2I5q37%$4dk291P1k2f*Gb!tmvD)0COzI6X#Tkta-rO8uf-+ee*!D|j=TY? znVF?vz(I8MMT|vlz@-I*lz1}9CBqDO>p114WL$*<6;0^Z8pcpE6($iFVaQZXjm_n` zj#@eaWC0b=?846ya(?e+E$fp#V6nYv_o@wpFkYEKU=l1Q7BMzHIyN>oG4T+MfIu`2 z9~A=w1qBby?8w5_l+(Ia3%tiU1}-8`XMKsyQ@&VOyU|kXmcMroEfH9X7~jXGlO#=Y z#zlDr9li9A!@)suse|G+8zpajCtB(43^?38Vj~~Pt~X(UhPMC$p0<{8TTUn5r+ddN zeyRs~JW+9pqod?tWJ5I#jST=mnBkR!5My5^A+oBq=Ydqmqb3k5_#ra%CjvMSH`tJe z?b5{6)!xt57142~JScb^{N*n{YHy@v;>#Ysg@wt4lk=qITyy?*XR6pByIv$7 z9=UmOzq5Q*lkjyB3gWW|DLZMA+OxMU; zsv4gH8jycLaE)5>2Yo85MCd}FtGn6ho4Q;OzdG`WP$Px`_7?A{dHkee3D3)E1IP_C z6B83V>Mayb?8#OkLBCQUtK_3E&scqB9hBrui7xNx0^ocxP|LSmm!)z%)Y*B>7r?+h zmAW9es2anz5e>bSErooaN8`!EPzr@F2e6FbA3lCEQa}YXTo|(&aSBgCQ{vcX@6u&t zXImBFw%4W6iiMYyNVY>OchJ-Sbt&lYO#zda!~vs0F`jF~YMKHCY{e{TAi?tg?POYj zae)i}{u0y)hdfgz%m9*G@m3*Gc*YBidw-e7sO_+~fsvPrNm&v-)o0G_tUMVBQp zi$t5dv;}t+XU2hee+$KY|23|yoy)y2T@BGS^(V8cv)J1CNg&mUsF^aF@`3_z6{q8P zMn_yw@NG~^>+v5JF(5n7pD!Cs&$K%Wtd-|(qJx(u%1^=7S&+)f)Npc-4JPkfOTE<3 zhPd;KkxJ9l#n`*12MxqS$!*Xm#D2PPuVqq8ZmCDjWs;@PkzxF{lX=WO%cH8A)Q0|J zo3Fd+ut-Bat41goTT@5!s3-^;2on&=31XaveM* zmbYUFTaX3kq8LnVwB?@{Mu<0j-7EbbLW-M&ho*w=LKh87=Yr0pA7V># zqa2t8Wh_6fF12WY^5j-U3u-vxl4YKjxIj=G@+-^;$Wz9{IJClEzfCaV$Fw!!fd<@O zir*ua20jSP$yz|t+9lfv!_<_~(fqC+*qSg*Hq?SFFPzKv{oMczQ=z1z z(`lKrHzoSfOT4Re-c9`XfujJoW>g9zWM#}(*!qs*FA)Bah5?nA0ddP9IS-S)i+HgM zK6JYe!7Y7lXl-Lp$s%ZehDLi=zprnuv%bC@g7b$Wij_o*CX+!1a>Pk*xVcy87N;7$ zNKT&{#FRBR6BHeN7;>O83#XvhL|qde7M6Ot^hI9^m@-aPKGMlo@!VfJnLePInjMLn{QUZMIWBB&4;A%w?Fw5vuqg7*neumL3b5 zarY`)jg_volaqV-`sX-ULFRYbjy+yFXOSbP+*Qj=DSD^F8??qL{PDYjpv@8m-v|h0 z8k-7{l2BLzp^fdR5}Kq8uDCVDD#v;@_OC$p7cV{&=LM^3Y&Y&^*NBRGP6}SVU%c4a0f02ri`a6&M>YJ<9%QJyZ6mdu=$rA8_gMxJqzecxOhZ zKvnA1r&U!~)Hlak66aefkN8P-q{RoK`UKHcwYO?gRfWHq303nX0*m-cEhpS^9>wo} zT@ov4i8^IR>#NuV8>=S%0SVC*O`>G467BH%d(_i$XZ2AV>yfp_)^t@>c!;|Ep7f0} zV-XqBYs@X@t4LS}q;Qp%IR=He)YsMrdo}Y^mNyt~;kk(zG%x-?{%9D})ksmxh$M{EOvJY3k<7@8H;*PUzbwORFTk>Ewd@MMxtQU!Pu^orI^W|cedA4Q>Q=rZOb`)k zJ^ZlMgNZ$BU3?>|oub~M3ti7s`5w}URyE<6kO;HEEcdfZ&(Gcav?&<%F=16*zK@gR zqS5L0fG=XUF+%;PWV0gU9Vu~3v&X}Lf#@R3{rrNH6$J)Wy3vX$M#+uiP|0mAFV6yW zSoLp=glDJdVJ6pqU+KeK(TWZaq^_YA`ofFr7!+qSm)QZEMKmX~>EK)TAlqSCG}_k9 zf&#lsnH`zCLUeDRBJp%VZaOg^G$63h{xDU|m(lgMG&)fH2&yXsdR1w7Lzg%z@gX{> z-<9}c)CAO4E6}^M;s#Ie3C6s-_4j~nek3Q> z;t!q1U%^w?AMDxd<7?^ok{e3qqK`>HC^z2txx6g7N;YIpxe-6t4~(L4IJC7c%5k2i z`5AFkcp|+{v?~Sa3Zh`@RaXPTj{Y==Lp$*-E>>E+W~wfv`|2d|l+SO)Wz!I@yoo|_ z!{%UW;;}Dm@h$Sny-#@qv0B5^v$h4(h+$=w*Xa--(z>fla3vDs(+^A2g2I@2B6!3&Po3<)w(LPUP=i`qP{1ft21A59Fj?Xniw6QhTMX{};l?vG$ zHW2Fktbp>$KS=dDUy1JCT7V)CABZz~B;Nu#^>gfzm?zLhUCgbporPFUYa{YEiax_b zK1N4mb+$7t5II!RJg{u8tbNoejOw4%-@%*FpK)}YuMGCb*oth6K|imZhDy?mU@Gb& zC}W&`86^T5Qt%LF8=Gt@QL@*0;3a&?(gW{~{*-|R^TvO>a z_j~V?j6GyCuC8}aPmd+*67zOAo4A4JVC@5D3FOb6UBA;bu$J6n7}ZsW%m-AEi7n)wlqJOwHDU82gCe*Yd`KK2 zA=j{=D@+PRnUeoF(vEY|cjsMh2{OXa=p>7co!}am5EA;HLMkbxlz;(Q`jUz(JryaS ztKYvq`p`%NHuJfah;XIl-ybM*wVWi`^Fc? z31hT2h_T=EPA09Xs25^El(s?%N~A>XalZ*=ZG8441buWeFD}xOxRfQ1%Ij!zkFt$& z5H-E<#shM2Pq~s8sQ5r$O_X|Nu%4gI~%3 zSA0MWLQWifw_fkw2!g}inL1;X69cp9#wvwh|NDxrp~LTVZ7hr-5`PaxsMR%vOe)L| z_jQNTz9yA3XZ9fJR@SYQR`#$x*wox9`;njfnQb~CIKj@JSp()k0`zdEm+N*u%~fTU zKyw8>qM7Fx)fFaDWh$bw^`%Nt5L-s|@W3jsi9SYc%&kfC0T6003D}XMW?S<9_#OI` zP?D8Zy&uh9=hs6N%PDgRYG`4&5pH&{^$iwSn)-}pFC~Pjv!`53K0^ev84pV@NAdNw zMRigrP$aKI#YWhd&}ZgCQ$OMFOSA-CMMbrFGd}$Wn`{jD_I8nXg`RAad+si314t%? zMQ2WLjEx8Hugg$crFc^a2D#&dWHTWamWDd#GFwX1+SGR^G>v@ZsUxPsy_nqylhm50 z{p&O=Y2zGgdW}S7XCFI_Av)zj$Sr0kn6OXN)=AONK7hzSxmPsov9C#(C1d^Gz&br9 z$v>E7p>4@adG^bkF7isy@#0AtsyfBbokcdwVG>^H|=Y|NV7QFvWc*;?_WhwW$03=mvXT-leXOSTHn_ zY53XlI+pb+jUGLMX|x#RLN~d}t|^FHp+be4PhH;pMbYxx-Zn?B$LmHe4wiahEn2(j z5J^lg8c<&pCPFLF%1?MpZX<_s_Y^Lh<>HQ}o|Y!3kHKQa#Erz&Y3=v3@C*d=hlrZF z{j_%nD0eSAmyj07`-vc0*3QwgWvzlQuwBH*4bzqH9U%8&d7q|ExoP-nXyz$N=hXqC zmz+~*xu@}7ZG;6fMEwu}V36gc1#|d3UTQa#DD~XF z?#RC<{yQE%Yp|HfVLvI!jQ-wz>n(S_$^6Bq1ZJN(6c3O^b=Hy&KIeACTP>7KWwzJ~ zy1h=`SM7D}7#*BWoH-6m2QwHtR!+8XQ$*`=f%2VxdVXCN|=PW+}f zGmocodyM7^hU8Kh4Lj@yN~Uyq*XzyiN)#N&7x9U?$j|3PYbvo?vq~zjL7_{p>Zwn+4uqSgp7B+bsM%vcmT?KowH`zTVHV|?=U|4;!J89~OGrpe=vqrej9)YvUU*aLZ{=vEY$5_ExTx*{Pg=7v)~eZkC8+Lj zN8Ptq>vxeIapmQ&po#X<0aNw*Mx9!^L&~B?EDbi(1-Ar~Cn0wlB7S!~WoR@@F*Zka8Ke%aBn-l zJ5(||eWY<)GokJ7RPwra4KTvQ>L&hx{($KP|6EO)!_31mGA z*^`NR!AZv-kv69EXZM%p@Y#t&s~x;bs7kL5;a0}UMssWz$mg>A&&@XlNIDiWcRvdi z&CJ7gLhDd21gFy>wX^Fyl+Mf{82F)GJy+?T>2D_EEXZye$wOf%=CV7?sRn>fm^;Vr zXFayPulm;(bh)YwJ1|ohzF4uZ(5U-}QdW)cGrSh{UH{fInF-Dym_rp9sf&8vW74hV z+1O98bmC_m*tAUiMN=_uK0mYGa$QblW5g^7wJmC#a0J7`<`3`2zESMkiA<+(a+>dO z@b>&k(0}`PR+YINOw8@^cm(%BP*V8UbD_ZNP8mrO3H@G5-DkyNQylv-%F4(^`j)8& z6~|M}9TDS(h+F{NNiN`9OT&p5i_gmt`zF4f_|;F^-*iQ;5O&0N3H>AB^Vxz;URw!m z{f6`7wS*i9qPRkHr@VMhk4V*22BZ$#wf1;)I}Oz&PRka7n}(f9Sqs0V$KRvd)F&+v&TR)f#trZ+%6!s zL*2mv9pmMq^>j+nDiP@hv|W?zwwz;AZyf6$j1Jf?-0|9SczZbYUKQBQd{f_oVR8H5 znEGA@4F;tsy{C2s4+wQjb5D}S$|= z>YlAVcd!g%A3PacAJYEZbOfHwf@ z`@cWfzNaONyIvzo!XnjmHjp2fIb@V0*K{Ec4-UIcU=K9ikhzRL?*DuFhhbOuUn~a) zJ-3lK4pgqWob06+k;??`GcpJuQQM4}2u!$GD11(RHf8r?X*Ijv26?%Ze8M{Y@9+hK zz^(V!g_d}vb1pT0!)i3Lp!2tv%WV3T1Z>Qnh$@&uf4ttTE4Y*%uHzipaY|oQ!{9hU zHG5b4gF`iB$SsVkwF`$2pG$+``V&R#2h2RX<;rR5JB`NR}QVLfjNi&vmU4w9b4EUN%fXSE#<_-U|NFt2N^$| zH6%yx_?O5=O1R5vmVdfe-I(39PmO%mu~kk^Aq^*`c=~gP)T%8GBHXV_AX6t-Xz6=) zPuJTtzeUT$+>X58apz18UPDRF$@L3SgVl-+3`U0S>76NsUiV8%S>k)uL|#u9yLJWy zXqV8%YS;eI_C&38rh9Vpi!+2R@5nL6+Rx>`tyhaT8GG-xU>TooJ1RfKfbIOZO4p+W zxDtKG#zF$whI4(~a5$@BoS`>izWdk1CF3Lj!L+z-zdw`mB!_QkL@PBv29he)%l4q1 zfEF?ot_>O?g;8e^k-}on0dGPAER|%NR+H{bR$q@di=2CoptBE1%KmZkl9j`mfE;rp2a3~a5J zO)BdY1_nLXU$~0Vyv*z2&0?>#4%grZ+;+wVyc1T9ctydsyVj~f*RqvuUmJ0*n~p!Y zqK$yJKM7VmVZM#&w{t<6aW7LCe^Ln8g4@*JjwYw-%~(rmRZ}(fuNPBXk7bw?nDC3vua7 zR3@guKsf&>m04i6_Jm;HYsa5$qm1?*Kf$PYM@m>pUDwy9Lb2%j)H9}3CN@DgZi6TG zYOoTDUw>TI#;D(2&eofLd+n*1#k*{JW2!JrHz!BQB{GfEnh>no*K%j=Cs-*&XTT*t zd+c~E7>PJO_VFeq*5J)=AxfC*CB>lB$J>N>G}dxtAjuPbb3pg-U)ZenbSWFl&)@8o z7)E9J>mz~P*l*Ie;W#wO1etDNf#h6np319g-wlZ)H7 zT{ne8m$^K*uUF#<#2;hZt@sIof`1SeDm6#0rDdZHO@nL<09LHr33@o+jE~M27j0jY z*ZYf)n(Gx;u|A0JwdN7-I;WouqFSf^U%Hqt1q{-c0_Fzv1@t$Kz7#P3r_1aM`fH>1 zi~g6Ka0a0E8|Et%HYr<~nmU-0V`@1QRZD15ebRf*w@cv(EsMA=S3J#pkmQH0EY-T>oG+~Uodi8T?= zC1#+jr@ zuv5Po1}Q)}(vw-@pfEest*(40o1^IUw%T8+i$?>Qn0zm#<>6Y%Ne0&9v_-yS)#2L( zF#*M3ZSrEHl}G<|X4hB|fRLGI?*z-b%-dC2DPPfPBf zE+CB8cPo~q1Nko^Gd`(EL0W#SH*-vJWeDb(&+rB4c9Q_HbCIAbtM*VZU^SQYptJ+p6+k(`p0cZ|tG9&CncPG%0C?$7rR!Vl#$ zCnqN*B_pF;>TkO{stJ@*Tv1%OIl39V_#aQAjnGQWnEvk^b7i$padd$p_h&0z~b$(?-Q_vPP#v=r#AoV%JDMfiWn2YQ8G#Tn_0 zwwb6B#7)d1=LGuFAU?N1)aW(Ppa6ZaDPptzK^}%QU`j>eZW$YTk_qfxNU|iA1zLyr zsIOoa;Uy6&{6D0)8kp4p$}y--X)rt}-I~G2fB4W+vcixW6bbNiT6DJ%G4tE*WZ7c7 zyGJDX3dT{LTV~1Zs^D21PIO<|lZi2R#8@nP3`YWX*B`|~dEE_RiP9VcecQ+5eTKUM z?cbpUi*FS<9v_>Vtu!|PA)d)vVLm@;L`=2K+&+U((k*Coq1BICc3UaYpr_j!)a8;QwPw7)2kOX zgMW~z$(#B1!=;X#t6IOv$tlc!)6dOHLnSGr(06ZCN8@3InO>$AhnV%@;r9w(9jf+) zvlFlGc7)iaU5J)erU2#`$+HGgM zO+m80oUhp1%fr=$PAuorv==MrjHT&71Zz`pVdLch+#vK89ci$u<@ z9$uuNp;UVN#Rf>dCapaR?PoZN3Z`x630BDZd`LATG{MqMrpSW06;!S`DI6qXmUtr%OysN=iyjPC-gehMz%lG0~-t zBQK6BB0@Q32*HbN5RAkWv2aHHrAmL=EMMPIYhXBIDG8cXO+q?Ab)rf-j&cF85)l^{ zA@!JHBP0{T71Vavcw`EB0LK%4j3+pz@B@Za#es36lKD>B=oQ$&MLfiQ{-hA6vICoy zs?)@(U^SD+!neyKo+k{41SHK>_WK8nVhS^!U`#>gFV7THfDm5Z-n_QtFXJ>hSV_1s z{>~DUQuL`Kb*`e~;^MaLB_&0G6^WWikl6sfB>IH{L<7(+LAgxSs7+K=1uBhxbj-ZH zy!^d@yuI=AVjebtFX0Zz42c5(N`*6>345thpzZG`<=6#ueb7qdQLRgZ+uClbx1;8s zo{qX4f4@aVC8ayeB~=t#rFoHPPXQ$VRex`GMeugGn0B1vRLKup`rMC*g8nZOM6JuNMrdn8!+5+Hb@ z;weK2o+pqgfG5DRQh{c#*ATaA_%(pV&m6%NaC19|C$jW9b%Y%C5GGwvJ~}vyWs$n% z6wvWTGKGX=3W>yoDSWv*Kncbf7@*20BmQKhB*cL^?B^?%u@_3E#JV8nz(`2X%t9R^ zYa*r~p4h&9TS+nKIT}>}DwIw$fPDo9reJy=C_ls$E~A)2$9Mwm9qy2%k2FlosmK?3 zVjQNhAB!mx$6^YeCsNbknb;E*5l`SVU5oh;0tXL?3}iO$O&V@OR$EqvJ~3V)!Jx#? zjg1IwMII7R3Dg>Gik?hQ08CW`I=IEKryObvj5?Yk>4-MYVt=~TlvHkUx0{%N zumi9KgwKhD&qxVGlfLh)tPu>F#uMXJGDppon`tC@G#sfH}-e>PBkw?U$yh+V4 zV+!UfqGOrDWOkw{PXtW%zWqirMVbjyWQ@fW=~KLS0f0aB!;A!@AI$V;k{1R7gmiU5 z?GelY7c_#Lm^^iHMernYMV!5)A|-T|s^UgEK$)mj*)P@ogY*XPp~0g=TJ}5BpXn1L zDO>=WBX9YF`jVPitml+mPM|XI1VadLmKkzMu~HF6ucQGgbZwieSKIXp(TMmEMn=$r zU~WnBK_!vpL9p!dhB^_la~ZcUbPmK4AVzyL!~Y?En}owZ47;+>5~)5=f)vn$(XML-AWr5A@>{8 zi+b%KL?kc;h6{)%kSXx#^`&VhJdtF=6R6j-$I~gr_Ck@XuS^-MNi=%)fl9XNr0ki| z`QQWq!!rd~5C*2uY8g`?Pna?Vb4!pRf}r8yA(r?nBDKkxCT{A?bbVrihLURh$)Uj< zN9ZyU{Tv4Y^F)*8$v-EfZNwAl<1qz=K9Y3goM%j-E*kT7X~{Y?(|yPCqFybYa6LLa zc(lL&=-}{CSF?Xm(Hn5?clr?9AJd=d6J4B9Kup^4<`9v&y}kXx9XqzSZ7a!6P1LHn zm?i9Jq%1ZyJ3WD=yI?MZFF77Kf#AZCFQ=R^KNa~P6u>Ewqa+O|k75szy|t-BQsm<0 zi-9+En&>%i4q1bMV3{M1WURtp?2J#$ybbo8#YaA68+&^vZ~q8QQU({Kg3Usow}yMDig*~!T(FR6mzkU3JBMH~Gv?QC{ z{c$P^^0=Z|HT4MLLQLV{U^_{3z*SSSqrDyO8*aQP104>eJK`x1PzGo-vr{z2Tn1kz z1BfYjp78QwOyNaL;U_h5L5z;cd%MgqU0oXoCs%Jwn?R?DE|GH_0aGL;le@}zB-2xL z@hWtLlYuI<9nBODE)scUf}Xu8Jvl**!7&Q>O@b*12?5J6Yk+z8K$f8yWUdbj9h|+; zOxGrIUQ}2(wNfVWa(1vU9h)hNv(xoSfQAuxG`!H37hZxVhT2@%4=&q>Mk9pHa3mO8 z!(=v@{(Qw;W+P23%8K_D8Xgh1M#>#<*v%BRCSDyGuTy#b+F3;cdsn$eU);81$Aj%7 zSDI1#j<%vCmBhvVDqk6dFh=TAdALeXX4nH90x}Iu7Ic5Piv5*pogM`2_8mJEBW*R2 z2k0}A8Va))mzK6|-;OtI@(9t9LhN*v+1C}db(2&Yz<$IYnbgn< z4}W!XmR>RA*WrR0VugkR^14WW5Bo8Nz6kAUv6nRG<(mO2_i4_THnL3Hhufi1QAJd_-sMjbZqtopKw)PGz zYT@fGjlht8R-#JcFm?B1!=;F*!JJFhGp0yMN+kO^06p=pE?0B!Y{viy9wB@Y6_Tt* z{A|@e3^bX`JF7B^5~Y(sR-r4rL$CM+#D)MY4`(l5e?=@)4$~5p644}1yue8si^(0y zvHmW2$ZjO%A#@O*Ecpdx3muQ>;dYgFWq}uo9n78Y8pB_%0efb==@tpH_yjWYgbg)*3~z{)rlGz)z{b8!Jqot+UlyR?#imF z>gwv+`lhC?y?uR$fsO#3JbC08(&1z9i@v^ny*;hX_0^RHxzXVvK|bzoc7|IP*tvNI z0yIVE<`-1r<=}ez>5?rit@N;adiKHR(x>(H?cLkbSYHcQtg1ZF4YbFcx*3`Lrl+@$ z-i>z^H8$G-M0)zba>FC%z+F^SRoAlnXso@e2r)QlKQ=;G4IZ_!(hNCRDb&WFO(R1q08eOhKQ=C@E$xs+HG zD|OjL+38xPp9@Qub@)$4h=GBD0|)jSj@7E%oSc}Ln97)Fq^PK<@Ti=X<(-|ocXu__ zHMaEZ-@pF=NBj3by?;y^7%;vFU)I~()3fjJvE#>&9b>;5KzjP=0RtU7#vMvHmR()D zkq+^+o2Sl0ora&gnwr+s)e(3!w)WI>R0pRG2~e)JySH~gUg^Y%r-`0@7QUQ-hwbf# z2d&5_tO6Y-DhMeM2{fCK(6F#@chPw_8r*2-*gqYrGUkFqNTaMuDY@UmO3UnDm*LG5eIgb*Gb zbTVfeanaG?q9R)>|KX$kL&a8BM+dD8KO5dgl~U+XqAW$q7fjD6X)}6$!Dtg-QZ)m^ zUSv4@{^*J(7jA@Eb#Hu9R%zR|lJrDOlJr+$kb~t?(ktUkA{WkZAG5tWV%IBUQq z9lIt;h?DrO}U}qm<6{ z^o-OgLkPJ-u@ERPFR!eu98Lv07l%4cXiZIFetv!dNBQ}HA_O2Y)iFkbCEM&d5W zuSW+*+~;q5;DHB#C4e4$V4K;MI~oc(f+xpyShHpg4{(RZq$4pg43xtWHPHS->&wwm z$Rc`lLLwsLu^Kx?Pq}!*6AF~}A#bx6`1d2h>Gs;uj?oJZrf6|L8{WpH%fi{=Qa9mH z6`3H!h%>=nfmBq~wjKUnY*q|O=P4VHF;zvztK$smQV0l`z%G_YYLh@m*v`K(JuN9A zPAQX!vG7wBr$q>W57MZ$$!U6x0%3#_aQ$Txu9OZ>TwFYhZzd)dCnlL?FJz{trmzaU z1g$m!Q(}>dC{;LZWM1s{qVcmEu+lkza)Oh_OoB*FN{Cf}(%>SN$`B0IECHA9KbtEH zr3_FdRzgX{UaroR-a#1`7@{z}7l0UsYv`ZeZswonqFfmJEQY5`V+Dpf?UW$|pF@pV z)WzJ67mc}8#*E)$MnyYHiYf1!;&y5J6b@wd>Btj0mjB47OHmR&RyBC|DdG}R(lbj- zvsfxYMmolw1EjuK_N|PJPavL1Oo)#ML6HFEZ@^4b4#58N005YCO%%R)+NUqg1DHl0{@0*B0g0e&l1+P3B1$? znUA?x0CTrE%Os_L!HvkwZ>ELTtpaX1#qehwde6gHW zPMW$zz0_Efg*DF@5_P?d)(KN*WpK&HDM<+`sq+|F5%wPbs)STy_F5uWBo92HPKQI9 z#2+~-wI!fTNMby}f#?XP;B(Po&zUY*R04;BP6fba8!C~&{>kv~MX8BKo&c`M(6GK8 z?8LDhfc5tlyEr>t&6YC)TYE0MfwFKg0Y^Tzxk+`6nCQYfn-~&5TwP@v#uJpaVV|?f6AGIB9OE0RnAjO%vF9sMze?yLaEdzGLL{VTNE+ zO-``ev`hMZ9kBZg>eYTqtmtRuc|7?^Wef9an&2W$YibyE;g>2;uC}_m zs&M7Xyt38BnII=59#hcq>dL5QAFK(`KBV4#xHv}+?Osz86B6h-bIhac=f_wB!E35w zdsBuGep1f%jEGOn$j(aEpvYHhRjRlI5*8VWv2yWcID`eZB4<}G^fvj)0;m+yj4S+z zq})Fs$>b~z(%H12$J$opA&u2zIkD1TY@R0dYZ6weQ`R_X0=^1u`Xy?IMO?YG$7R(n zTq`^=Jk6HEz?7q?jKy;9q*$d&9RLTE>TIXE1%|~`)T4X0xhf~j$MG^hcp5oqL&9TL z6;#!=?CEZ)&W~a$%1jJMO`8V)PqVYL1L^F@LRdb5U}Tnqan{(_`ox}|p4Qebj+&b4 zYpbj38!Ia-08aAJ)ouN=wOl1>5z|p~K7_)wgeNQ%y}_ zPE>d(nv3S4Fo7dE%%fOnpt*I=DC+JGymk=6S|CKGaHbr^2(>OfJ4>fhYL#*>IrSGL zYkL=oGA=Gcf)R7fD&ZQJQ3nuE!|W*u5(~79sgdYz7THg6&pLsPk}*YmQuekTT&knN zrb%U00o0Goo0ZBtIN1LJVf5jN@Qi5EpSWVhiunJcBvwwd6?#O(N5%m*j#7GN28QQW zw*Wi0))hpD_&5rX^AQE2F)mft*xbTGVFTT8!fGp5<>ch#!;#K`ms+!iX0W|#-utwA z#R||fQ&Mif{dVTZK}S;=`L8&=233x|U0rL|FgMh}gPcoc*I#zch$2YP}9H*sK@gA-W1Y77F?QkAd-Yjofv_(HC%40Sc-~W|iS+ zM|uB>2r{rg9S zpP3rK=>s78TUt=>V3#V-i^9`5&0L9y%B`rbZ!vxj=ny6!+RH`00cZec`18G|``E#b z@|96xVPWCn;ZafOvX3!DxoYd`n_F59nF8FmL#qk!807)w&-{%ZX{Wui?cJ*Qb62l)QohxI4r&Lmr!Lt1>dc)Zh|7v zB357vJTa+y5dml+0R-^b89J48(uuRSUICPyo0+6mm}Tb|XC*~=O~&Mr;L4E0R2$D~ zDqJt&SUO;cfE6_eyB$bt3( z(GM8xDK9HaNlZ*k&jJ=ozq52T4;&mFVMlZgA^;r^j8*|DRLAd2m_y zchg%a1P-tt>OsJ2MONEJsM@$Vgs5)mER>TW`PK-$TaMcG)}jnsKOf5 z4$z@nh*7;Lj9FvQI*7BIM!ks((Q~whFqjXG!J4dCDEIR)^I-ULUiA{p$LD?3+e@>O zG)l=hMSoLS{msh0Sy7*@&_SwJ`ANME1yx)<6>EQF@YNF)CnY7rV;G`d*%|5BT_Gbo zDJcn^mgwS+izSb&j8%SfrQet%<14{1xeR;N#l*D5ZZTPbvr zsuGcdbmMT4m#-`qJ8PwD11=9Je7U|*tj#52u%U4wdN#4X(?eut97Q5iU1MKiorYRMH_n%M5k#e;I8P{sPM_!aEs+rw-53gMfa2; z1lHqI|56OlibMbpu2;Gn0_H%lp3!~XezBUufp^0QNW;$SJ$_RBle8I|Z>{=NS z8K01h0hP!ADc7s&Dp@xUzDiw2QRy~7;L>f#6k|m@vy#+ukIOj=4w496*5$yC12Kgk zH3P;51BU%iPsU&nDs9Q;k=OJwQ7$eqy`*i&gCm)ORJtiZ2wUp2g)V1lY+6w|m`v#z zS*H0A7@Wpj2Y|l#IKCS^DuJ+HLavwAsJ*im+EWWc>ips1f?Y>g3gir~+mEfS1Mgho zI(K5imA4cOek@|4q9(O*Vge>tNu{hoz~!}x6xd@wDfGo-LcS(Kr&NKtt4lHMEJ{t& zK+M4o#j|D;{!(KUh6UWQN1k{@K12~O=P^-=B~M_R_yCMoP1x&3V8c3UVEbo~vt}eQ z0D~>x{EX{SVyx{Iid;~}vLmIKGK65)r^y6zZC19P8bxKd6`3TLWl*jI+a=ZwUgC`* z2pa(giy2dl+#+l0RmwGUZR~Dg31WTTx>G5$q#K@={kz7oj zL{QzC;c&^`v%(p!61hrCl{*=_$ar;xDpC!S+$8ph#?Ox8;-bvdL~R^cJmyT{Yr+&I zqnLv61V(4MpO#@KwCYX<0>PJdtH(&J-d8Q<(JGwRfT*EHz(IP60wt znu%JiNy^Mf2#|1{-OQtyH2Z{;ge6=;52kNW@hn%7yn~l+Ko7#7Qcy4HoMVB$o=jAX z`l^hS$XbOkk-<>}RtjV0HMSptOSKsVW=T<78=YyERfKoJ-AMZm1C5bS!n5@bmfK^Z zLu6)vSy-B?PfO2a;dkycw=+bhi(>j1zIN=zV+EwBO=lweg592)SzJmB)QK!gS9JgkPk#aVn8VrO7wj%6i9uPr& zBeRMrp@*wYH(`n$CQPwo2dqa)QC2$3o*-!ng!RvnMxM}Uc&0Gn3hacA22DZ|Cf~O) zrl6&S-Pyr_o@Eua8F`|8T%N#&CdGV~+DN9zg6&AfZuseFC~X^?DcII!YsWWlGtkH? z%1FT+ro`lQc51NG0CV4r!4!Pf8J7agn)T>McZV3CDJY*Vdt9D~2O7pNSHKOL#Ps6Q zlB{%-KAfgm*O>J}Mapt1p`mb0flba^f2y#cvrp|2I5vP&fP8^#h20>Nu(OCNLP!11 zRgrA`fkuOlF_KlZXWU|CVIC(r$hK{Ja7SC4(Mwippa)S^Y}?LdBC-W!jETnxBs>{@ zY_LLl7WOd3ZQ(wsop-wN`-GP*D&o_&OWErl%$}GCVYagbAI3+;TqiB0*s+Mse85}E zW{~H9xt=rDqfxCd{ml`F;HRBH$<&f@ev5@ zW{Q-C2PhH52QY;`Q46|=Dqh1gMH~n%mU5O%=|x2xs3KF~dUG4Z?Vq{llzP}c%stB6a!Md)E>PN)WXlp^_;_I)B)q>VQHpfU%FB;p%5V?3$f-RUk=_bkB@$kIP z4E5Lev3>0HgPP~qq3zwAO)&V~A8I{Bo zSgWVgQ2IJC1*>tv0wU8cbX<`P#}fvo*tV?%8^Wb$Fqkng1^+6LzS~MNk`uTo1Ejs^ zl#D6(_Ka9gGny&Xqg^h}9$>`aC=fG;vw@UjJ8EzhSnoqa<32c*l=MG=oB-oXt#DuSXOExXqrm7 zjK+4vVsd&~CT(UZdj-?Jii~|KvDLcL-`mM%G!D(+8kd8SJ4S0gfrE!MLQARAY1HXU z>?PrQr23kr_j9SSJYPIGwhaTC7uJ+SVEX5X%*ioZ7n1131Y3XXF-ECs?0#KcT{Xrn z7^Cypwi2B15FrzrHa?j$glHR^DIUBGrr6%T!>Ey)xByGGnJ@*bKiS3^3?{T=2itNw zA=r73b)i#hbmS{wJ?ys`?KBf!gF_w};O8-_5?#pm3SzDGMmsBnPGWf^1w*s++QFsuk66usnM;H{TbNQ?cFxJ51YN{SMOt9LpC8 zdtSszGFlA+5ipbndWsTMo6BAPc#9}YjcJ*?vGR0H* z(90(E#rDAHWp;KJyP7eDIZt?aaa==8B2Q-H1V;K98;Jzp)^e8 zV}>Wk6X+mk-fG}b>eogcrmwoj3s@mj#sL}?u{OO498<79?S8%#*)fV8uAArOcX;*7 zz8t1VH(?6Bc(P0}eASs{s<=#GW18o}WxCi{hByBr`E%Fk=UNMiDQ1YSIQz*$|9cR^ zLKcLu(6xjRd`g>z8!X&lK?n;^jQ)o!j%8RD)q)Tfp0HRM7H+U0goP(82yrE!c(*C7 zU$=JovSrJbE?>8F>Cz=j7B613VE(+D=FGbB=eZbvGkx|=^A{~ywtSt*wYJ_pCar^8 zSiWrO61w!fo951$J!|@n*Z=0%UHAD*d0N8JVxUEf7A;t?U_Pu6+$P@V4FU^7j7xTI z?%47^C@9d=-Eo@bEdR$K#PYRk*R5O69nTFLH*VYjII(dv{BAw`b9c0fy=lRcl|wrqtrpFVx&`Lk#7(ibkgI3~UM;y85f{L3%Dd;$JLdIx_-dX2um%+Xu)^*qqI z7ssay>o{5uM0dFX?~~o=7VbvjK8^3#FnU=8*WEaM_8fxBwd*!)+5*dZ?)-WFMqXYt z-g4eBdoKT;&0E-I=xyh(350O;q>B35`o_lk+RFUg`utT?;9l30R2l)Cn_08x%$*DO2RAr>!Ghazb7P`Hf+k)jA#&Bc1qsAkZ@l5MMYLen-1&=_-@Wzhg*V@N=Wl;|_uY5jVf2;>{q4;+-+b-03ooBN zwfXL~OBXMghY}WPmMP6)-=-toc;gM%UuSv~zqt|iao+p|iA608=G4|LfK7mT>(_7P&Nqj9>|Af%`tm6}-6M`Sqvy|@25f`ZZP~o} zvKHsYIrA1RS-y5X-mPIlXm#FY#H|#r4lK`kyu#^IgrHluUU+vr!uP;i;0@A%1h+4L8Dhnmvax?Sgqc<1Si!^Q{j(^w?uR{`lih-+g=W;>G*!yYEl;z5n44 zpM3i1zdkk4m!E$58C$@_~HBT@_X;yux{-wx7>RF9e3Pbwql{bm&im- zwEoTYH%zDN&V|eU{`WWEeDke9cir_6PY*x5i>DvC?~j|)k3T*BC^{;=$-FVl)uW!Ej&O2|8AdZ3geS3$!{;j{h`PVnzc>SXf;NBm7^wGy2qf0(? z6VbeRuqL=F3jkx_j4r+9)?3+4K89p+Q{R96#TTD{{_)4Jzm9_HwKw1T>tFwl^v{3( z^B)HKyXk@Y2QA~5Uw-}dH{X2q)xZAr-h1%!F&TuO2WT9g=y&3Oa_XNnLLfw3f618i z^ttnwEWdm6DLO}IwrpIxWd7{y5HgU5=FH_-hgNCPayTbwPi$Z|%d)kcda!o+Qm`G! zasaddgh12)?t?`JELgk*v4B@3P)Kju1ZQ*8rj6^CFIxgO$D&2^$D##G@hf3I*dtf5 zcj=9@_?w$Qe;naXdeWvXry06De`?Dnct|vm7A)s15PaC_H~fcL8J_`t4D=DwC!c)s zA<@_H=X<2@zWeUmZy$a5p}Ur^y&F`aGv_b7@fFbPuK*%%eHn3=aCHjlXZT9?>3C956?*yAS6_eQv(MoF&)$Cfv(L;fj`RWh_UT6-(YxT4ble&JjeX-! z_-h=!^$zy~DU7ea@&X*~$9C;J*x7|byt%d_H$2$KQ6O;i3<`_Jrb5`7ke`LqJz(0Y zsOwDeTVeZPe1+mmo8nlZ29tyU}GSD7)<YWe4XMg+cV~;=Cf3Rcq?RVVI=%I(WAMW4D z6Z{P7!(FJD0b_35h!BioW(@z7Kycl4*I$4A4M3oj3dXmK!dBI`?jJaT6Ln4u9O!AR zhzWL^d=E)nlUr~_;QVaZ2&cuw7zg!r%jS*iK_)I)G@rZK8*VUX6Fbka+}c(Er22~J z5YNflTaJO@xmEQoBU==X#}hNM2eAd+VD_Zv=nnHP%5`f|;4fW5HrbM8i+CU9RpL79 z8)tzDzJMtT>x`bt^>kfyOw#498B8#zo5)Dz;QqR6<*ud-ArKkvz4xBG4c;j{nj21m zakCD2e!;vs)9HmXqw0HFa@;3>1)*n5L71b}^=Px+a@V~mRf$kJ0rlijgr$4#*+8;l z*^8Hn5ZzE-#0;PGf;C4{ENEr+}T&g8bY_=X#NJeo9k(QiGY3&PyYHrx6)AZD+# zrcuAxAbC|)ZDVU|bA2Tq=n>(M-@+Y+<<~zkz%>ZPL89z%(G0;^TovjNk0Vnx4TbtL5z<*b)!)%TnLveE5pWxI0+C(xHOdKtx&61z~8yQ zmX~AK)10WNsNAZ$y6PNL-JH$GrJ2BC;o&j4;bCwI0G6w>M|M8ZRn5Hz1`ZtPZLR{q z!WN@6z#%vcJqL9Rh!99BR-yL6<}}cVa60eQ1i6xWBeympS_QfZt|6YlYCKo2L#qgX zbTIiuYk|B0YbI?jLsbwu zID1Lts<^l~m0aTLaFvmZMpy&|N8{A#OY)I=bP--wrb)|yj3kXpCceU<<90OpIe6x^ zgAg=`mZo2~w6^ZuySMM~@slTypFEC(c#j`HIdE)WZ_gfMXK$3yF=mrgYN|Yw#EF3e`+D}^jFQIIC+aW+7-rC1P*p%* zBA6BVI488Swyt?^U*Fy}fE6nX>snd|3{y_%fYxDa@aXWcsOS)~5q|D5bOaNm5|4jl zMRc&IqY$_zFeJL5x)CmT^2m|HM-Cm@-HDyxi#Vn*nXi_rQ!Axx=nN_spqr2mVKWmf zp4`et^q5ve`Pf|x2r-E1*uyN|aTI?}GDQd>c6Sj=s-(_^|e zz~f4esI`N)JT@*??mOlr7QFTh5g?PVAI`t!2Y`c8L-n>&3D&-Pd5Qf3B6Vpd9b~Ae zo{EUo@aiO*)8{Yoc6Jb4S{8)mRyA`rXKhtQMI$z}=XBBff^crb1R}9ar7=t#9Ip$V z0d4GEB=X1vYJZrWk&I0%rI+?JMHMi+7=%i7MMZ(E6|iM8IXh;L~c|_AOj|W$V;k>FYDY*;}!bwjz$hmatw;8ZtdAq zmlNb@v{GnLN)^pZXx@juh-mbPc)Hn6F;5)jI!GMtA8BPo(l{NLi6`JWNFoy9VCv+e z%fF zarF{oe-D5ESR7p*fsH^}i;C2Q2sRaA8ZcW}RLm+G-QG)@U`uswSl~>-cpjsi`hACw z9opSdtWSspy+w2dpeV3+_LfNf#~q#`a0|(;1MX`E>-q{3hJ-ltBd4GOShIS{5CR7f z_U&ydj0$vfa}SD!;~O}JPf+0OkAq9o)e_V)r+J1IH23!IKe2y*Pit-Nn9lj%x&=np ztXWf@7d!)i!O*@CxLO=IVS@Zro-Xr`B2t;p2Tm^U86&+U`R%t*NKEIyZ{oY?M)j{Dw9M zc^!N951cr0;y_DPPFP3?oBZH1mgm9EC%U=^$3NkK6vUXA@DR*9b%PtJhXuvyP-fu@ z(7E=v)`3nlR{UimPvwN0E*g&H5yHGR(=d*aGp2Q2!mbpnQnRylGKWj54l^VwwMxQ# zrvj0;EHWXWyhlanS1}f{pv(C)0GdHiKN~?%_h=H2DgrT-e#!*xA_NWI#8+g?TgsCvRbB z*s8jo-kz2^5ScU^BRo7j?6L$u8`2!fF2Xyl0`YA&QF+#R`5LgPm`&%kP>?Sghf}#q$4jnmmcwb$v!B7HCEuZuw zus=0wW_kFp=_a-Ejt&13-ihW8_Myh2YR}=czAe;#ZrG?F?ER%&9Jwz=1vgk z#FhrCUPzj78JMzhDEQcsBUhlt!r%I@*A3AD_5>8FGJA}KtZ4b+E92{OiT_c zJheH&o~S=m)weJX8epu|gY%URA3D_4RFfZ#Q;ja$Xqg#a+q0)S+|!->6y&%BA=Q{0 z77i>Nlbc^)%z1#DDZr6Qfnd%wcJDFrH7(!R+GiLVDHyKh5u>-IzPf-OX#$=Y+TlFG zEtd>&OxX_h#-It74HvSxIW+jCp?rm0;*BE`CTN`_6vt*1rK?;sg;!5M?R zHqm$;foBw`ZMfxb0)a@X20TlPH5~xLr^wVcb%A*eYU)Yg0UGAFx2wLEjp-!K5kx?1 zbqwq$j@Qb`9dA|x#mP5buktIr9-Cg?NV!3yVv zBpLn)xWS%w_Wru;>_piJmz9l392%9k5_N>G-LSV+u!}jlg*b7sVI|1nK$&9U3g(Ff zHh`TkEX>J)-OuA@sNmNX@Pe8(H94Vy9y58=xP%sG2V#X02p96Lg7Lt{8-g@Gi3Fz# z2t@q;9`2X|284#n10rJMHQG!aP2bB%PFoq>R;_hmIXP)QL{0-P|B_nhbiV4+oI-_R`IQ*%C5VA<{lJ zD12{IQ_aepP(LqMui&V{+Lqqlo}N98RRuZWp@G=x&lN-`b@US}5;R&^&W6rIhfgvM z=;U$06fmyS({PlV4rkXzl7ogO&WpXgrUD^|CswTB#!?`uSF9*2@9aCtZs`bm=2jPH zB&q{^`GvCqO#&kbIprM(J8;+{V|m6C98(+{=JTljYpq9H#-&A@t6456P|XJ;2l~wCwgX+~u`)G_Gh;u3>$MYtW;#FfoaZeJa(A5JAQhi2rRRZ7-XuLRis7`Adu}C8kGYAYz@K{ zfXSZLJv?v>fH)=K-@m^X!G|4Lvas1u%B*9(t4@Ju&l;PBOyh zXvkYA^YwDU`7gF2--YF{UVHa3dC`Lsp^yA`H8oX*1qGBauqr1Kk|$Mky1vE|LH>PSMNG(8Wb8T&PeeGS7)%)oEVqIAsOu{8 zSLT(iexSX5#{(S)I}aUUaPc&rbcC9d4A=aFWaZZ?U;kC=j+Jca{f z)MX7!>paXaCQrxNOxeD^L);WxnyCALajeIs`kyO?hKC1T$MsW+oIu*b_lRMm?lkO4 zL1Z|pt6&kUYpW|`#!8Ywr(aZI6T%m4JRq)7qqKAL30Yaww6~9;8e@`UsJ7$4O3)nP zxa0W^ba!)eWGLk3jtlFKzcATqYg=?b`XNSO(3~l=t@RZ#Af14NK;sV!i;Cfs==X4J zdgRE-BS(%LH=`p*P-BDJT#e0^Q{(;3{Hy4whh4+{5sPIK>}M>+&7>)-XvpSPQ*5J| z3`7)VAt4h4a$RxWP-HxgIY`SYSb^OtsjcjtOQ4hBK~! zLk662@?>9E0~jqUv>FRC#A-*WO;R(?QMd-A{TQx`J{6{6lbp zcTiAN2r2?q^{x8{5cc{ooL7YoX~VQ$5EwaCG125zz`7G_jC^|rN9PyTlw+Dqd|m^( zyyIhISCoMqK`XTijnt@x3j-9YcpVe>8Ht*OazCF?Pj?p_>E}UHVFQ$rnnW=552C40 z%IE+&il05e2sVHpQH(>10Z7OVf=&;5(#Fc%Fds(&;>ZjdA%~dNRLdrOlNX8fiSFk5 zO0d9LG=j~6?AVPkP*WI<&et#&jTd6jg{GL|nE->kft=#J4}z&dG$Z{GxgYDRu@)z2 z%w%6%H|7LrZY7Iz;J}n2L~R`rDd^meMTZ211)(Hi`N53^;XX!%O(fH$>*M_$CeEG; zU0GET9q1-jY7-L^0!&6?A}RwaRM*xvx6}fwR958YS2fn>qxpt86ybU0CY~yen$VNP zA7;=kx+vmVoSh05s4sO%$CmQ0UKmN2E3or+N+!<4DJjZGj0YW&ci0P<15Kf%Ay5f4 zqPRFwr&X&0q<-kb$SJ6-uHz=PGbNJK6B|LL!sM}@#@rygu_8UOfSQ0sng|&>_nbsr z_8*Q-ai&3f?4o#0&=T3GbRa#px=yAkzzJ6qA&w3W>QSuQjPaV3L6X${N6{1+94t0L z&tVKf&&1@R5SEyN%m6?^O0qHPgCFdr(A~MZqoJn06=3?<;X`Zc>MCoR_A#g=E=QaO zYF~{z3V*#_?n1f;84Vx|s&X)W)^VC}8eSDc2&kgvR+8S@+60)e(9gxuCptd|kKTk2M;Mg&= zT8N%y-;S{-I7nI>jom6He_|ghbzo6=QtV@zsms$H*t)U_H7C@kn|k+DhM3$_F&pQ= z#yjCqPxK#1xZd*A=y?Y9eD(;AE^OQjw{xNeLzwk+{0B~eaY^*7IRW63T%;#D_{;Q% zm_`{s6_wR3fbu!v!Dhh(2T7zJw6s{MmzTdfJv&P)wHJy!B=QJ#f=MfU>V}`DRVuZh zVy&r(@^Q2lNmS}snU}+8*W)zzkX8BNp3^9sMy!mBQ%YRyt<7BGe)5QT9FClrsLKXR zF&-z7_`1%xbfiHb^72<|^!#Wdn!AHzHubvr2ssTw@bdC-b(MH{VSEyVfpddddnrTvFg&b|1edUq5)fgv2Pf!brNKYpx zSBX;J*4|EYWs1{5mM=ux024hLo0|_bgF>08QEL;^i%PeZW@q3C*yP(+1H7zhLP1IS z^Nj^S82k+m^jB(i36Wqt=Ai-BM{X`K9MD!k0@<+oPNSzXBlUJP)Ie_3TNR_+@((2H(}=Bk{~KsK?qg$W%Kj}^-~rqCZ)ODhYTD3;R49tn?HedeJ0aBHLfW%AgcR+#aeRiUL?S=L~xfDW6G~5FvphMGWrj>qUL;lN z5;aO0DFE>}QIXASEagY3noV!Y%D`Dgap-;a^#7?3GxnU|WmC2$ZcG^z0W6o3YMHrvUWO&D?J zXyT+N;S3jVoUNxOiOBBc!7-R(J2}*FR+~KJy|>r%;Y_{7BA+j@5^72+U_vz3ftghc zh6M{w?~`F143jKN+SnlD?Kl(^X!Y)6hdXcAr{D;b6pFaRW57)vH=8Aeli(g~@8~e- zG01;l8?SD|@li!Ij#4}x8J4{d3yHbvz%-0IHq_bPl7SHrlEm? zgE~#D63#z2)n>$$4IvvGi^H8X35iL`nb|axMu)S>Bb5Q5VT{bT6*{>3$^-lt<}qi< zvBNAglhj~Rg%P~UYicO6TbCO$y6TGjv&Sf7VmIn^9UTumP->!UFs2|%21-fkIAZQG zGjWyR67m1Wyl70F9gin$9Yijm=#ZP!j3(fTQcRZYFPStqB+{tLJ6Vh#T{;Ij4u<=M zW$P?k=8=-by^fa(dT=$?Lx|B8!?jgb5K zO8f)Ru~!5-VuD%@8XfGcDz5<$10#QL2L zd7(a@6gIb;;p(TrN-d0nvBIs@t8Y(9OkA-rG&G7uv?zYDe}C_u76k38ih`V|5K|ZB zn8$~*?A$#mTWM8AbzLK$7QF{8xRXzt8*WEHQ*0|K8KIbD=`{+8m}!do|6Ukg(A?A0 zToLAJqDL{8hV~TW$$#=u2fpi)*#=q6^+Oh_8w*gy}m#vU{kKuX}MPzT^v3*-nQl!+y#>Dmy zqIA>dR?K1>Xs(V93SMz191gTQR|eV|!xbX1Pqe8x7QRSF;G|DUDl1=880yUh7m)m- z3Tp~iR@C?I?`^Iwz*KinH$%{aO0KXxHpp{?FG4ue2TYBwJ_CcIPO`7Daux7$a8xjQ zJnCCnkD-E`aF$?;K57T=08JW8A9nCxfnsm>-hDl+wFmP>@>&pv-fEZ=x97l#rw4i( zfp5WN0z)moe*gZ)XoI9Nm>9gPcTY=QMa;Mvfz#|Rr@1TReV;&T2pbeMWe7n~SeCa! z4Lo6R-z8=zC8(9$u1_Q9B5P{UTHn+~R^hQ@eR~`C*Vk4RVC~}Q1Vrl@3(J@sDqkqZ zU~&xF7BNwvE3Pc>WGX&qSC*xy6;dx37aFN5_VowEsH$shYQeOE`nu}sYD{v#_(ymU zMn9r+3hKH|k_-o)c?Oedd$9JVvWC+VIBf1bShmp5-smI^=efd=ztDOBQ&yXrFq&Al z&`ann)1-q%saY76ivgV0Iym@Y!9iu9qG;n|RW$$H$vC1Dt4yiHqpqcAKl!^(aPi=9 zWB8AtwScR?Xld;>w@3{)f(~Pll&p#zEHK{k!vv3TYGC1Jce$R*D@6#yWbzg0F|H|$ z3Joo6+BdL|PdUIeRd(M!`;H-g9j0J*Piu2ycW)!C0Va;`?*%g(whjo4g8j{V_S60} zcQFm>a9>w>p43I;EK$U%W0e5`5&Yavbsm@_)F*v9($nJZwfqoTAE-yGV05UKmV; z;Fx%wTToB|s&TcUi3FVfRqWhT(y+ivIL*c;rh@xD!a;BlDPOi%8p{|wDzp+Fo%Dp? z;hGvO0)l&76%!76K>n)mKvTbzjn_hEOXA8O+sEgu)zC_RHmq!FU=Yzm*sjDe32hI9m=WfmjM~4Gu*LLm2G{~wd zIv5qTEm*h2B?(}9E~ZFURaI5j)i+TFa34AqS&WPF2wJN#-F}Q+6>H$Umg5JSp)WeH z#=_udxq2Q9(__RJK@F@cE?&N$#mEi~@Vg0jR?D_CFfbSkySbA1f|#&iPm{ysQ$fvS z2nI}ANU$anK^%Bc;Zb8Z$%zxswzlq}+_L=#cxB}2iD?3!@E95z92)YNG&dN^*7kN` z;z3~{6}b6$22q(b9uf55fMRB2s2U-qtY`ngGtUliPAsGSg-eU#`iZ(KY|0ZHmWvU* z)<)d@K1@yk2%tXxW@l<;hD58G?jZ7GDjESds-t~u z-Qd+!>zt2W5ggq{s(L^Nn37AKi4Z!Yax1uMhCLY6K)VE;CB|FJA>9D^5^Qdezf~+* zIGkSf3nN5%LkB7S+}W(J%n9+~O@Eqxe$7qM%WZwxnxUav`JLjdS*~e zer|}{Z~3APSBXp!5gDn*rZJq>(ojxTIp^8N?XO2U(%M{4^*ijhO@JoklmK%)N9Uzm!+N>68_$-407X z!kn^1-Kfcbf@<6C|flC}5E-p`BY;b!AjkZgq1{&z>%F5i|R9WlVHTK^^?I zr)QuCFJ0ffXWubIn1Q~orkZkA)KW%8J1cV-+VT_~0}IYEqYY*c_Uf;-kVb~AE9a|1!!+?CD9l;7%$W^tCEo9U5ke$Lgs=3UmW1M;1 z*_lTi9hI|+#f-t=V5KSp11CnxI7S0gn-3vy!pujo?y&l<6PSW>e(`2I%k%tftsJB( ztxg*&o1kxqV_-D3Ujdb=xwW>+&;~&$lBg2XGO|!HPt(Y~o$NBzNHoQjhZ#Ee`TR=msBWiT>VwL)R7@n3UVcD zRdQ({mE2bWjQ6H$Fs?J)?Jc&kXGEZOjir-4r`vp-IKO_4~SN3Ugzk3!C;HK7R69S`6$#*4kK)b!MzOV@-LU zR+pTXm5s^PU|gSMw{`G=(vn0&j*ho1GJ!E)TB1fJmxW?pVk>Dl)nH=gR{)HnB@%X7 z`(=y1N{*%sA-J@~2J{H96~wBOfgaw8h8~+EhY`{X3&CDkeP@Df!WPOXBJq&rV##P1 zA|vRl^+a{Gm|NG`xrVFDGUiNnp(U}K4Ef{O;EJjU`Jmum{_+>j&j7a0?t>kM(gX^o zm6mSbz72jz*D5KSGC9r6Nsy_>?oY00r3zi;+6+v5jFo$fs2e>T>)iTW*3k;6qN;{f ziveN5UTbSNOYDYA8-c0EP_eUbA86tYWw&Qy@wH9(4=MxmVaK-I+7E>Zl z8LM^%!>W=ava#~fA$e6h*?J9L*<|0=Ufg{!rRq`jjmpbg!8>|w+(PqKufBaDwI;;c z`JMxCpbzZBY?r)HrZU-KHYO07;I5SJq0uH}>2#Xd2$d$GY)xU*LaO7%<4eVF7?wPF ztZ!dy%Yo)5Ff40OUV;G&chFQrIz+>ou6<}zHiB)Bk+kZX!j)76ykfmz_di=7!$tTJl)*fgLCUxp(eb% zdR2JfOo2TpO>4R+O1>MzIxCD`YAh-ClggB_+7yOp7{EN-2U^7nRRoYKue|Hnz=^}U zB*vDhy2x?*)7emGvXEdOw;8Azj{&;&9#Tc5MyCg0E^XWXU^`_~95T?9Aw*40Z9V8c zJw2`U*Z?+k#R`={Q*e+aW@jfzZEeW;LuCk!-Q<_(YbuNia<>!MprXz~F2P~IP_(I_ zi%~`_21;AG>Rtu~AWeHvw*u3l2L8uj5xTqUK+M+HVoi7+m6~GLQcQnCZNmn$0eq!$ zMT9Cz^+$;xt-iL?kw*!scUM&a7z~-Z5}1sQqH8DybM2w0%cu zqRc%ox}uS<=t9#VEH{J^mVMD2K`Kv-2G&{e z|5Oo5Vhi}Mtf7I6*l@MZWcg6%F3vB(C@2U$nnZm1gB@Q~Z7US946oEoVhZz&$_aBS z2L~e+K$GSM@&i+u)n2}I1OW0Rg5;6Idz-2XK-GtXiZwBf`N3}3&?mg2rOz1fX5n2_ zzcD2S+XMCCncU4epBk~IpA$Ep3WkbQlI0)@Q>#$k%a-mW!RGP+P9 z!_qfZWB_I^W1gN{P*g!31)lQ5gMtZ`na2kgm&*CD7Ok?W3oE;hU^3{Qf!+fHAaRZ# z-i>!Q|Fu-b1Ocm8p)jbZ;M`LzIOWMTF7QOZ2G@nIn__qa&t8h2VPST#+gg$K zv`n2Jq8yIpLcS>=P=qo*DKSHrl)0^~Br(8MG`d;FG`HZwu4AJD^iMy{60QcGdG-Xs zZ9`e!LVpiKPMfu@vsfOBok(Sv0s)pTwGct6a(jA8a!OJ{d@O8$%B0ybcB7-BH$;N~ zO+bLmAJlpmmyp~>YJ(RY!qQdTFs&xU#JH!vgO$~5x+o3ha9=C-Alb(ncijHpa*6AV zaqT6cy~x#D;vb-lj8g+s#DbtwDD;?XnUP((jnV|Sl@w=ZWn`pbqEredW^1uFbuRz` zCFlf!2wi!Cvva{%UlkSXe(A1F$1cSaAQVBd?E!P0e5wWc6Gb~6u9O>?;6~kOg)S+h z7=fw%!IBJ3tY*dSWoR&Wl9`pLiSYLe#cgP8jF$jdVtJ^PL@VP{S#Qy3|6c$ z-|zk&=7FxPtfsC%d#C~fF4nM{&o8K_Fy9j(NU+|Zf9K9!yB>PzuDfoz3+J%m0Jfc& zf7J;HMkt1o{RlH9FxM7S^EHviW(BB;d&$)))Lc^`wjX60=hR>s>S6W?MeS5cvYN|V zVOEZzo*UIl0mltdjiHVHY~|DRXY0C~$tMN2U}{|Ie7U;n6xF`ZXUNRDZyDk53x(# zdNVgA@Ybg&_D_!YJP=~6!or2hy`8c5s#Hb_U=~@sbWa_ewSlHZ!x|<8;n*dz(yg?N z%n=dO?CpAB@Pv3(fYfWu<1L&?KGlLM)cG*%(KC?_;d*70&E(m zWoh>rNt#H7Oe&Ry0v=-0+@XW*54JzJJzFPZC(>T5(CAsBY3Aw%rd=I-mY1^!(7|!y z*xoJ-NRSWtw_JJVAQL(v8ep$byKUdGEj^Cmu>eadSj*7NG=%Vk1g$nvpP)-l&svSS z3}E-6o`^i*_d6O|y#8LAsq^T??`Ra4fgXMMVQvB@PTTqJ!w=v8;Dr~SW3x_Aox<-I zPVs+1Is^3l*|RUbbm6sEUg4O6r`KP7^`-YOe*5F&PaZs27-fjDO!JAZZtdynxa0o2 z*4@2n^Hv-s{hIj{*XPgB{8nzhAUE*!)TvL|WKc%mfB*dtKYa4ROJ~oHIU4#b+|>D3 zAJQPjqhlnygtGBVS9gF>4R(G@?Mg7w9B9tt+PgQ>yt~t9PF+o&$QYDjqx&o12H1v& zY3|xX_uqfV>JC1`_8{d2>|=%pb*NLye5v=2t*bO5vAAtVd;9j%B&9@T7noCr?f!C2 zJE99`xJo0jnb(~iUF9olYSxtBe%oyb_q63e7ax7(;`{Hve-SRflWH8Y(vokx?GFIZ z_wU^G_>Vu*?4^ev+qLtK6$(EmJ2STzH4LSg0T{~zd_$QdPaS>o$L~M=47lOBdzQ=@ z2P0;NRkZfBR)%{{6U_7pib88Ij0!;NK$q#n4*&@I;J$kw-g$6$3)lNJ?;v5-k3W9* z!>2q(eL!dTZ=g}_aE$JI|AUVJIKTe- z>n}gKc<)^||IQXGF}!7QsioU@wC~tnq?LQw8VkLHN>FB_n&?HY{BWX=U#sK{A;hBe;LQXpFe;0x%(c)J3+SZT(f&k z4Q9KM`Z2zwS;ozjT(Sg}iaY+?@zhgK9r?>i>LXLWLM}FM2x}#D2*vT}pc`RZN_PjG zK|b&IIC1Ra2OoX(*=L`94r}`958vTL&nNrwMjF;U#TRR}l@@2|bu@CpgeioxXmIQX z0yc!kvoB7-6T^%q%?+<3y$TZfr89)h&mq0^DttL@J`nr)(_1%hSa-`^pwfXVt=9y2 zJ2*)G-|EgI#}0Rv{b9i(HkfzA#*LfKY}&Mmjn}3rug|^k;U_qi^@}gR{NnS^2+ooI z{`%{$eDMB#ru4|8xH?bv_qT&yh8~HUDjL9o6#$-`ZHejjQJ7nO_!y`Dp2RGxLY5%?jdUJr(hxHah{b!oMO6Zfb25nhZ zhkD46J^%ftP24Il!l9EJaE2RBnOl7G&9`+>m-HjMcdy|x$b87$^}rVNS}GBP)7HU8WbdZJLR+V&~&Oe*XcE=6&NM(BB@q`FEoK@8*Xdee~k{ zAH0ML7@+CLsP4VOg!&tAy#3d||NXCjeeDA1eKfB3(@#G68zUdgVOu^XV;{wr-_qto-D6Qc2;)Uj6&4$e2cKZ@qcp!uhjjXeK-|*#tac&*(}r zY;V8)j-6orKMWgt@xu>4`Sepz=t;Ro0$KS14mkdf^r%n2{Nfw9OB_=E&wu>mZ~y$~ z-~ayBn>afCV;r6S$RqdM1M zQ04EweeCgrPaWnWm1whJV7LUMMcW>Dpo2=uFbr~H0Ct9a9n>J9AAp2rzdpWm7s#Na zN1uH1-~UDl1WF0$tSEfG1AX9M?*aYuz4!is-~UB~cl75!-+$Y! zY%1-;w~nH_i0--Pk#E2I{*zBX0xJoJLgQ3uWQX_u_K!=_KZ)Ms=wDNY5YI8S9i@_q zru^plk-9U-)SrPi@x^DaU_M`Q{s59KfM_?XR!C^1^fX-Al83 zcedl+0W&=Q80;15DWFWgkCN#X9GCslORsQ;<*#qQ{l@D!{`-Ru07*Xm^wTd5gsR-f zpMCas90vXwTnjZCqEC^&{+hnwd~vuqC<*8O2WQrA-F)}jTW-A#E$HHsqO8&q9E(&` zL>6r)Pixj3B42q|*HcIT{nPiKenTt-PxSd0a8d}tq*_T2=5*4{+l;mHPS0DkO-8p^H?NpwBMd&V@3V?wOT2F;C365^kVjs-VsTasy-Eaof$m zn>%~f^jU0nvcPj?=kBMT>fg2NG5Gggk8`vOPG`r#&aS@Q2Up*^Wa;vCcW*=}KJyX+ zBxwh)16-oX2#UeI_ujh+PTnJrvU#!hKKv+J5Z`|L!*}2D1J&Wce2%B~>n~BH5D_=P zZhQ@!{|)}zzy8G?a5~(dvFY)IKL5fmFFf}r&{Yf@f-v_5ZYX?#4+R7EtM}jk@B=_$ z96|p!A{@~>fBXA8Zvo*B0Fb{5iq1zLyZ{n~tXN>sw;8BRpFV5uf+e7!o<4u!&9~qn z{2dPJ+sOUw5PXCjjMrup<3IW2z1K$*=#k&xbHH`^6aNqV5qaR9zdz0@8L&so*g2Fp zOrJGp9;j;T?z#8A`|wCj8A9OF!V$ntJbM!iGYZA#yK^DpEj zfLai7|KK2($qm37V62Zneh(iWc^J6rj~myoTMov=E$jdI+$$F@;O!8-{q{fEYMg`R zd7h)QXJ5YX+F#l3qKIebo82_fW9Ws5SF2+qBO_Hvf6#z!{}6)Y`}nkosGk`LG>tou zP~z;`1=ya}@4 z&A0gHg5SK2XZME>AGv4k@}-Lx&;aZkY0U9;vt(t!5UX$d{rve0a5y&668L%1;-$CT z^$@8g$jtA5@FDFut~{ukc*%dlpSRz5n^UWBC*hIt?Ece8Ozwa6&DSUzzW(}?PZ^<{ z02X@br56CbPrrsfs#6H!h~XRVxfi`0V9UaKg0TJ)mK_-9wRd?QLcP4-(L)AENi@)>{K4E;D9& z$QIsq$Njq=dkkLv!zWBd`1fAg*P0~+E@ee(LtoYKg^>`lfo7r12s z)cyG5k9p;tZr~pVaAC6Xo3G*ikukqV!TuO7$NhKQro~Y-Uf2ZI&UONx=pU2}TSZL1 zatqfL<@_TLKgN5iaXH}2u3Hx`Ub18fz~{q1es}S?4*<8`K=gQvWFBlkU?lzc)?eTI z7wTYNkOuJKhhH&4iU!6DVD!BL(i5$%&t88O)&K-LZRW*~n5P`KpL|yAiFfVl|1&6k z2cJ5M&MWj4<3E1?Az|zX9DTwGY)0R(Z=`j6@i~Go$n;lUdf_<`a7z}<^$xG4Fwmz@8i`+{qiBj8`pe0afBDPt zBTqd=M$V7St&KOuAq|2W+|=i^@t=P3JvySEeDdJI&NY?h!>I2zoGHQ@FfP&Wvv%o% zxzqU|u3I2iGK^MEU48A8Ap~w0;Od(wD&BebZ>Ged)N2=BJhf#Ls_b`kbawT$*5-!? z8Am|5h2+;`8hT|;l=5cs&2ReCX)u!ixaB?+7#E+zP{1j|_2*vr;N#D~;w-<<{`KBh zU*T~;g&sx0N5n!eplb}if%WkU2pOhey#Fn->y!UxI|ApI79Ol%GHu>|&tTG{iUHvD z#s?24Ya$i?V&}`A6>abPhx?g~d+xqJ{t=({u3H~^?D5Ch{y#}t0w{uifA8(LLH+oc zSAOuEgTO=WmDFIcw!UI_@&bCJ?!J5d`gQBpQ7r!N(x~omgajYDD!t)yr z9()o#{omq&XGa!~{kM4Hcm8=bws)h5@Ugx%4IS7s1FRIb%KiO2ce3F2{X03g9MwXs zE-uMVQAzk9@HF?Z{M_)cV2V0aH?~sIWfz~G-NChH>Fa8$ZS39OQxO~(9J(+sk99%8 ztl_@B&HJ%Zoz*yCaFb%ud%L=hQGUhlj-*(B<_Hu9RrU1Ll!2wHkMtwE&CxTkuCcMU zGCw*rbOkxXii_`D-Pw1zuPIL<5wm&ejzKwfJ(zRLs!%%E5&-I9EM{S_&&ZTX?5Kgg znYnIRa3|&yb#P=|MIF{6nvP>*WkIYfE_kKDhWDMpb_NiELzy2k(l;p#g;r4F{hZMSR6-6C+A2?>w~Mn5Rv%GAODsDw!4= zbYZuwShXhZsv?94{`Cs_Ly)s?=PojGz#969qR4Om9rS+AeEa6BH$FqmegssroBiC~ zeZmVGso64|H{jQn>MsnFFu9^2!IFeEs<+%<&E8#Y;x{{=rxL4-)?A&$fs5fu!3J6 z4sbYQV^u!iP8+eySr)G^ZZl-r?wB%!pn56HF#dBtuE$THfP>(+1DayQrxe}Yv-LJI)2&G+y7I8*d?)P=>x(M9#!oBzF(kNEc&bRQQCSH`GfK?O^mSXrlBlDq0K7eEJ z{lA~W?pO_Zp)+rsGk@{2b@%-7Pk8P3_+SKjEMCR<#1|}d^U68SVFL{E3K2zZKK|kyFTC(R*;1rif~2OhJ{o}mcXH{LaY8SpF1>X7Wo2FW148s4oisN* z^2j5Y5rI1ZHqB}{)p>q=h|4p#5ql&YK14b+CN44a=!;Lj|MszmV81AP0@VPPx0jXWu_;4XT+k`aZzuzxn1{ZowGJBXG1a@IrS$ zp6nN&KXc}_(`U@{UdV&j_3dlS%?S(7rSM^6 zLEdc-J^KD9Um#w9t^U(b-+lPeXMaU^;ma?+1;7rr^#uyofndR;5ln-+h+-Gm;^VKr z!T`lfr#5d~&yr?YfRhXK+{F>)Nqx&HrOY8jW*>UL@4bh-BoC45`N8Xayq*Ou&f{VI z{OeB-l3t71cIefEJN@*B?;d@4Xa7@&4U{Fi=j2)?iyfHptFt2ry`f-hy-LOmg^PhH-oNj@O&d0#^|F5b z#QhFpgsR$tx}F0A2U@D~bE86VVx&Oir_!aDU_coZ4T=W* z^B;d35rgC0&42s*U*CTFGcdY;LR{?s^PjQs@d!)GK8D@OSnj}XHsK)i&ebGOXmEJzZ@hK^Q0^>6)i7rTlT5a3*|K@c5Q1wr44a0g7*3UI1#<`cs$d(OZZ@xT z73l7v3*(dTXBy&9+3JRB#zkm=ML6-iDjE}*|Yor zGycjyymDVHWf>M=S~!^S734!cQ)gXV5yn3Oz?8Vm)8 z=j}weU>R@d2>b?v8sB_ljFtV%5DWh&`2;@)tpLvHcj)NcRiX(Hk7(C=;soE&12KXt zJI4wF>Z(H7E{D6Cs&b-OOA0%i`}uGRrrf>$%1ftD{pnAnRdJryix(+7;3M)^evWtb z-X~_nS${?s92foNLVidS_J`13QGW=Kn7hErEGw+2s%>iO!v4`*gHN)jJKA?q*7Fx1 zqp*Aa)aJX_E?qQlw#iIW?8WRMm8-O6<;?0ob`leap6Y-6v2Wjh{{yfGJ_LR8xh;RZ zkNK_FuDb_$ijsIABf<!gAva*qaQWKx8#n!N%PW6^T>&ln zgBM<+h{nt3j0s{}Hf>n978KpvZaa!K6s#RMt3f%myJIz`>=)lbIs-;6Q0OmPzMLFT z4?q0mvBPZWDYil8v|08@ixw@x5EltgRHIn3*p@B7yLPg!Nr4Lu^mGT94qeF=Y*UYT zHU@}wp$371aeTgKR%JDHQF(TNFX%WiKqKT>FOEahkBU(j^(v~Ws%`AqhxN4Nomjb& zb&$dSAbATzgK6d$HmM4a$;ICMg;iWp*UFWZb(k!L9R*uia}YR~*bcF$I?D4BZa$$T zAv;^^=Z2MjAcXv7X-5YV=JT?i`E00| zp{kGTyESrxAJM|yMxvo7PaVZ99^z*Fx^w5BSC{3Xki-^acGCn_&1U@wv2bsXNgEt9 z+g@mEiz9@mpg+XxEY`-Su7C8whwsCQ`4s*Kiwe_Gx1by74=c)9F*Kll2DUknV11s@ z#XmNYIev8UDg{nO^%Z-2`->$qRa{)GA~Y(uqA)tt|K^+Tr-1Igs4-)R<5fyrqktoq zK=L{o^B;YLcSCLm(xg777~#j9JbLfF&q$xd?9bC&aC6hfjT_Hw+^`-rf<+7F&Gn6{ z>uJd`>CEGrxBK|v8c*XoV*Bda7Gt-O{f(d>%HqTv{obmZ_YBZ*gx31%iUQUoth*WUrlK;3a+}A>EU}U5iZUaeFVWw`S)P!U zou=|IVuoE{ZsUHgjTDyH7SM9w034i*;Usdf7h(faRuhlyW?ES*)NX)4N))fEp}F=e z^K)}qD_R`+C{;viQ`iVOOtqJKIU9T8S{-2PNj|CSg6MG@Azv0x3^JNDH_V`i7t!%^nsYIn-n{;y z{@rz9M%EBW8x9@otE$ee-m`CC-`*}9?~tBp+D<4#Gh(2eKzhgHKYd90$eAsh0Df3W z5N5=@cz#4?A?W@r8v_-8BQ57Y$_};TTx?p`TAdTZnLLXt^mllFt7h##$S zghq~2@P)?mRA6sY;IOIeQ;BVO^H=4BhxoYt_R?WNkA)yWjvqht6sSw>U~x6=VULSb z9;0&dD?qH%?TjhB&XIm?4k#B@r4GKdTh!OhKfvDEj8C-&^Y|KW+N zDppbPJdT2niq7HY1V$kM2*-$^U?=qGn6Rjrd@hiJJ>94=HqB*V^@0KVqSOF;j2lRB zgm42tOovwcBpEnSK5lkGf!$1Z!~Vqt&%A==q`nkEaQCaIJxNs+*C?i{x|*7aA&T&0 zXwf=3%neP)E>n5%U);TCimK#;s@1oqPVihyUD#{nPgDW$SmCRYp@Qm=mM}J!{gD>I66G z4of9lT1iS*VY>XT$G-jU+edeGG}KgKL!Bz1F8B!qXnku}XUFaL19;qX50-Z>U5wc# z4uPw3eSSOn-MDV{{H5zQpLqo=$nPG$&2Ofi-AvDrnCjl+CuySHp-wERaWNI`CObK6 z{*rZ@PQ3!!%qJJ`T5^+#bAHaec{klOckY~7vu?c1XtlBLC|5bkIzeCq+o&-jTvk@m z{G31ou`%bY0NsRr4Q1uWrwk#yTtxPloXsQH^wreHZ*N1MpEGCU3S4A3T;NU+ z4dl?RugcGf&dH5NCqh*PcEav%uEX9`oz&JCTWJUTdAWLcczH>1MwopENFKs zhOwLU)F>gA`bD!u5^PL^4dA+a_78A1_(u+PttniI5}jHqV)qU=nqQ0E1F;!%MNXKH z-Bnmu_i!TYs7ON9-EGVcs@R$tjUT*|F+ayvdvhT(p@SjTeKPj2U9=z+QGR;5CPaVt<$xGX3x>-yq-_pDud^Y3Lc6eK7d zz{meD9;`0m%NielJmT81GLn*0 zsd_s@pQMe8ko!w;(4EK?*uqQVuZ&I5XHknk>;=|Smm55GlDMrmE3UkAHS2HBhOTjG z3h1sn*4G7Q#=`%`*|te+I#qf`Qc8M;UKc4HtFG1hH@~^=`Wt7>o^#W@`55q70^X+(_2v3DCk`bj2ak^CGK$kHRB9Y@uh(Z5>ys0;>Ik{Sg$agP zi`H%dJ^uME>z3Sf!}zP>;OZ-t2WY8HT)@q@+;cD1VW1!Jk$dl1zjoQJcdT9^pEGOv z^}HAmio^oJU*a45nCM zmc=XRK*hYz&p-U`$A2Gv>MsNPd-v>V&L5|Xegr!)$tv;XCgkD%;!a0I7!&aCz4yNR zUUe^<~+)3u|!t`n z%hI`pB7haSDvp>!iWz1OhFaV3g8Jq?T@4+p@1S-tEZT|jYNC7ZB?e;ke|&h4@+sec z|KcO}-3vPB-KQv4c{iqNqx%OFH~)AaEb|MPFhLo;L@&UrZ@n$A5W9M{Hg&E}liQm| zLBcCq_VhGY=E!9M3Z*VG0hA!UlJ`|ipSxh`+KpRIb3W`-TQIx-?jJGI-@j|uL${Dw zyv1PYzR0_%I3LxP&70|_?z@#S1;-PN2ogYYl-ID9GW)Q**+M0U6IWAe*aFSiF*ZW< znUY^Jm{Y^ZXf%7M^+OgHNgEn5Bk)0e?RF_@mE0`{IY69$y{mIN>L{Fz=Pi zW#|)_SA6=+S@dZ#c7fGczZL_WOK*MX;cvMr0jd)Gl-o-%~!=;-(}V8de%KT2oy{r4&5`HfewRKk!B1UlC#bke{M&$)4;kGp>Q zER?3RXV027efsnpZ@B)t-&k2sr`#iI9JKDPTkpT)&(!9NA5w=|lUOV9-M5e2d+%Mh z-u(NUW>3G)Jkn6t81il=H4`a!Q!RM*WS&xcT}SpV9@8_Grwc` zn?L?|H4%ckLkx`xI!A{F2h*6=<}i$k%djz+wfpRH|8nzt;MK zDDfOzLUbZ-+`RSlIpW-R-+ha(BceVW%xic0)CD*i=gwik@VVzMV!{koQemO*V{8L{ zeC*MOA9>{cM_9@fM_BIp$Rl8JV44Cbh_k2vhPOmP7tF10Y{9vmU>4SbB_HfQu@Pb` z(Ud&=@O^&*?cwysrE@vv68Pk{^t2R&jA`A?nt#{DPrms2i!VNW^r3*60(3DV4_48v zn4X!Aj=Xgx3P>)>QhQ$lCHS^ShAgfB!QjlNEYI(uTW_8>dxR>s_N})}SM&T?3b)>k zDTlLf_=T;Eb!(R|U9xEYyt%Vy-C#YDx{XoebsMQ83+0(?-f;Jy;LL+OJu||Wd-gmn z#`7<}e1S@q-n{Vgx#v%Ft(&;!8SB?=+ys{f7`^%CKm1`u-paz7hK8~g|K&Z#n5k)Q zLDBj7IU!Nhnf7w#4_S%iNkv)lUc%Y)m#p1%3X9^1f!TteN6i4sII)g%!&2nJ-~UeH z;koek)vH%{Vnmeu0`BgfTtC#HAWxH}@KWRa$=doBLu-Ca85vQhy9jlPEt^16EQ8fW z8%QwPG64`l8;a%3{c#;j=-R;f z!gUx&Ob;c~U)m8=sE-z9u3?qYm#nbtn}2;y#lK7do&)9v-v02uO?R(bzH~7t1=nA4 zJFI60Mz1Ve@rRoMRPKEgMZtZntr_Ore)}y0YV0V4?Q}XZb-kvhyrGi{h(YHh&n0S@ z053at-o7G~*COn&Yg0@G^?=3U9YKI-6w`+7^OpYp*1I15_QOvxDdkH{h}+A8?K#m= z;RO|-!-P3rDqOBB-MQ=A4>70alkXnenZk*MNBM3UR2=xpC*PCcpl&xp5e*5a`m>N*Q1_aOTxGz(PzF3keGgn+k*=p5Pk#fMS00?;I|vyrB-hZqwH1U!;aj z?-1v{j3FP?F*Xp|ECIQ>WI5^!%NE@NjErh8xrXqK45c$sRYP~o?u^+y@^S%RAvlSUD_dqL@+1h55nC!5AMyQ%t&}vg� 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 Z_ROoCV!n?#E1N8_KkR5u)N0BF_FsvBl+pkI literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s4_bands_MATPES-r2SCAN-0.png b/tutorials/finite_temperature_phonons_figures/s4_bands_MATPES-r2SCAN-0.png new file mode 100644 index 0000000000000000000000000000000000000000..19611ce97982778c6c4f68bb5e47063561b86e36 GIT binary patch literal 95989 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 z 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 $;t233NT3r> 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 y+-Y!;kUPm+gi?CSQ`3jx3QZELVs&6*O3fWyng( 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 B4x0b~ literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s4_bands_OMAT-0-medium.png b/tutorials/finite_temperature_phonons_figures/s4_bands_OMAT-0-medium.png new file mode 100644 index 0000000000000000000000000000000000000000..a74f4c7eff262618117bac3c63c65507f95cb3e6 GIT binary patch literal 101828 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 DAlvQ( literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s4_runs.png b/tutorials/finite_temperature_phonons_figures/s4_runs.png new file mode 100644 index 0000000000000000000000000000000000000000..3a720f519240b3b67a67323433e76db75e4aabb4 GIT binary patch literal 35203 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 Cjykyj literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s5_diffusion.png b/tutorials/finite_temperature_phonons_figures/s5_diffusion.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc96b9d9f7006c7e4529161fd0af3e1da5df5b8 GIT binary patch literal 19781 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 S*M&%^Z=CJjexP3SPyZLvK7!c* literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s5_phases.png b/tutorials/finite_temperature_phonons_figures/s5_phases.png new file mode 100644 index 0000000000000000000000000000000000000000..311cb27e49482122b3d2bf225e8dc85739154888 GIT binary patch literal 23973 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 literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s5_vdos.png b/tutorials/finite_temperature_phonons_figures/s5_vdos.png new file mode 100644 index 0000000000000000000000000000000000000000..81bdde0fd6899127bf809ca66f93732d1e300f75 GIT binary patch literal 23891 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 z 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 literal 0 HcmV?d00001 From 8f48c987d1b451acfa0039bd220af84002f4931a Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 6 Oct 2026 17:42:27 -0700 Subject: [PATCH 42/43] Shorten the text of the finite-temperature phonon tutorial --- tutorials/finite_temperature_phonons.ipynb | 992 +++++++-------------- 1 file changed, 313 insertions(+), 679 deletions(-) diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 093171a338..419290f044 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -7,22 +7,21 @@ "source": [ "# Finite-temperature phonons with pheasy and machine-learned potentials\n", "\n", - "This notebook computes phonons at a finite temperature with the\n", - "`ForceFieldFiniteTemperaturePhononMaker` workflow. The forces come from three\n", - "MACE potentials, so no DFT is needed.\n", + "This notebook runs `ForceFieldFiniteTemperaturePhononMaker` with three MACE\n", + "potentials. The workflow fits effective harmonic force constants to MD\n", + "snapshots at a given temperature. The workflow is new and less tested than the\n", + "other phonon workflows, so its defaults may still change.\n", "\n", - "Section 1 runs five materials at 100, 300, 500, 700 and 900 K, in the 0 K cell.\n", - "Ca3Ir4Sn13 is worked through step by step. Section 2 runs the same materials in\n", - "the cell at each temperature, found with an NPT MD. Section 3 tests the length\n", - "of the MD and the number of snapshots for KNaICl.\n", + "## Contents\n", "\n", - "Section 4 runs Li3PS4, a lithium conductor whose crystal is unstable at 0 K, from\n", - "100 to 1000 K. Section 5 shows what to do once its Li atoms start to hop. It\n", - "computes the vibrational DOS and the free energy from the MD, and compares the\n", - "free energies of two of its phases.\n", + "1. Five materials from 100 to 900 K\n", + "2. Thermal expansion with an NPT MD\n", + "3. MD length and number of snapshots\n", + "4. Li3PS4, a crystal that is unstable at 0 K\n", + "5. Li3PS4 with hopping Li: diffusion, DOS and free energies from the MD\n", + "6. Known limitations\n", "\n", - "This workflow is new. It is less tested than the other phonon workflows in\n", - "atomate2, and its defaults and output may still change." + "The long runs are switched off. Our results are shown as figures and tables." ] }, { @@ -30,48 +29,25 @@ "id": "1", "metadata": {}, "source": [ - "## Background\n", - "\n", - "Harmonic phonons from finite displacements describe the crystal at 0 K. Many\n", - "materials have imaginary modes at 0 K. The anharmonic motion of the atoms can\n", - "stabilize these modes at higher temperature. This workflow fits effective\n", - "harmonic force constants to an MD trajectory at the temperature of interest, as\n", - "in the temperature-dependent effective potential (TDEP) method of Hellman et\n", - "al., Phys. Rev. B 84, 180301 (2011). These force constants include the effect\n", - "of the anharmonic forces on the frequencies at that temperature. They give no\n", - "phonon lifetimes.\n", - "\n", - "The flow has these steps:\n", - "\n", - "1. The structure is relaxed. The relaxation can be switched off, as done below.\n", - "2. A diagonal supercell is built. Its lattice vectors are at least `min_length`\n", - " long, 12 Å by default. A supercell matrix can also be given.\n", - "3. Optional, off by default: an NPT MD gives the cell at the temperature.\n", - " Section 2 explains this step.\n", - "4. An NVT MD run of the supercell at the temperature. The defaults are 8 ps with\n", - " a 1 fs time step and a Langevin thermostat.\n", - "5. The first 1 ps of the MD is left out. 50 snapshots are picked, evenly spread\n", - " over the rest of the trajectory.\n", - "6. The forces on the snapshots and on the undisplaced supercell are computed.\n", - "7. pheasy fits the second-order force constants with LASSO. The displacements\n", - " are measured from the undisplaced supercell. The forces of the undisplaced\n", - " supercell are subtracted from the forces of each snapshot.\n", - "8. The band structure and the density of states (DOS) follow from the force\n", - " constants. Imaginary modes are reported. They are not removed.\n", - "\n", - "The MD trajectory is also checked. The check looks for melting and for a move\n", - "away from the starting structure. It also looks at the drift of the potential\n", - "energy late in the run. The result is stored in the output. A warning is raised\n", - "if the check fails, but the fit is still done.\n", - "\n", - "Without the NPT step, the MD runs at constant volume (NVT). The volume is that\n", - "of the relaxed structure, or of the input structure when the relaxation is\n", - "switched off, as in this notebook. Thermal expansion is not included. The same\n", - "workflow runs with VASP as\n", - "`atomate2.vasp.flows.finite_temperature_phonons.FiniteTemperaturePhononMaker`.\n", - "`atomate2.forcefields.flows.finite_temperature_phonons` also has two mixed\n", - "versions. One runs the MD with VASP and the force calculations with a force\n", - "field. The other one does the reverse." + "## How the workflow works\n", + "\n", + "1. Relax the structure (optional).\n", + "2. Build a diagonal supercell with lattice vectors of at least `min_length`,\n", + " 12 Å by default.\n", + "3. Optional: run an NPT MD to get the cell at the temperature (Section 2).\n", + "4. Run an NVT MD, 8 ps with a 1 fs time step by default.\n", + "5. Leave out the first 1 ps and pick 50 evenly spaced snapshots.\n", + "6. Compute the forces on the snapshots and on the undisplaced supercell.\n", + "7. Fit the second-order force constants with pheasy (LASSO).\n", + "8. Compute the band structure and the DOS. Imaginary modes are reported, not\n", + " removed.\n", + "\n", + "A check of the trajectory flags melting, a shift away from the starting\n", + "structure and a drift of the energy. It raises a warning, and the fit is still\n", + "done. The idea is that of TDEP (Hellman et al., Phys. Rev. B 84, 180301\n", + "(2011)). The force constants include the effect of the anharmonic forces on the\n", + "frequencies. They give no lifetimes, and the MD is classical. The VASP version\n", + "is `atomate2.vasp.flows.finite_temperature_phonons.FiniteTemperaturePhononMaker`." ] }, { @@ -79,31 +55,14 @@ "id": "2", "metadata": {}, "source": [ - "## Thermostats\n", - "\n", - "The fit only uses the positions of the atoms in the MD, not how they move. The\n", - "snapshots have to follow the canonical distribution, so that every phonon mode\n", - "holds its share of the thermal energy.\n", - "\n", - "The NVT MD uses a Langevin thermostat. It adds a friction and a random force to\n", - "every atom, and it samples the canonical distribution (Bussi and Parrinello,\n", - "Phys. Rev. E 75, 056707 (2007)). The friction is 10 ps^-1. A Nose-Hoover\n", - "thermostat acts on the whole crystal through one extra variable. It changes the\n", - "motion of the atoms less, which matters for vibrational spectra or diffusion.\n", - "But in a nearly harmonic crystal the modes barely exchange energy. For a\n", - "harmonic oscillator weakly coupled to a Nose-Hoover thermostat, the dynamics is\n", - "not ergodic (Legoll et al., Arch. Ration. Mech. Anal. 184, 449 (2007)). A\n", - "crystal is closest to harmonic at low temperature.\n", + "## Thermostat\n", "\n", - "The NPT MD of Section 2 uses ASE's `MTKNPT`. It combines a Nose-Hoover\n", - "thermostat with one thermostat variable and the barostat of Martyna, Tobias and Klein, which samples the\n", - "isothermal-isobaric ensemble (J. Chem. Phys. 101, 4177 (1994)). Only its\n", - "average cell is used. With VASP, the NPT MD uses VASP's Langevin thermostat\n", - "and Parrinello-Rahman barostat, since VASP only runs NPT MD with these.\n", - "\n", - "`thermostat=\"nose-hoover\"` switches the NVT MD to a Nose-Hoover thermostat with\n", - "one thermostat variable. Section 3 compares the two for KNaICl. `random_seed`\n", - "seeds the initial velocities and the random forces of the Langevin thermostat." + "The NVT MD uses a Langevin thermostat with a friction of 10 ps⁻¹. It samples\n", + "the canonical ensemble for every mode (Bussi and Parrinello, Phys. Rev. E 75,\n", + "056707 (2007)). `thermostat=\"nose-hoover\"` is also available, but a weakly\n", + "coupled Nose-Hoover thermostat is not ergodic for a harmonic oscillator (Legoll\n", + "et al., Arch. Ration. Mech. Anal. 184, 449 (2007)). The NPT MD uses ASE's\n", + "`MTKNPT`. `random_seed` seeds the initial velocities and the Langevin forces." ] }, { @@ -113,16 +72,13 @@ "source": [ "## Installation\n", "\n", - "The `pheasy` and `ase` extras are needed, plus MACE and the Materials Project\n", - "client:\n", - "\n", "```\n", "pip install 'atomate2[pheasy,ase]'\n", "pip install 'mace-torch>=0.3.16' mp-api\n", "```\n", "\n", - "The `pheasy` extra pulls in pheasy and ALM. ALM is compiled from source. The\n", - "hiPhive tutorial and the atomate2 VASP documentation list what the build needs." + "The `pheasy` extra builds ALM from source. The hiPhive tutorial lists what the\n", + "build needs." ] }, { @@ -130,25 +86,17 @@ "id": "4", "metadata": {}, "source": [ - "## The potentials\n", - "\n", - "The notebook uses three MACE foundation models. All three are released under the\n", - "Academic Software License.\n", + "## Potentials\n", "\n", - "- **MACE-OMAT-0-medium.** `mace_mp(model=\"medium-omat-0\")` downloads it once and\n", - " caches it under `~/.cache/mace`.\n", - "- **MACE-MATPES-PBE-0** and **MACE-MATPES-r2SCAN-0.** These are MACE-OMAT-0\n", - " fine-tuned on the MatPES data set at the PBE and r2SCAN levels. Download the two files from the `mace_matpes_0` release of\n", - " [mace-foundations](https://github.com/ACEsuit/mace-foundations/releases/tag/mace_matpes_0):\n", - " - [MACE-matpes-pbe-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-pbe-omat-ft.model)\n", - " - [MACE-matpes-r2scan-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-r2scan-omat-ft.model)\n", + "- MACE-OMAT-0-medium. `mace_mp(model=\"medium-omat-0\")` downloads it.\n", + "- MACE-MATPES-PBE-0 and MACE-MATPES-r2SCAN-0. Download\n", + " [MACE-matpes-pbe-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-pbe-omat-ft.model)\n", + " and\n", + " [MACE-matpes-r2scan-omat-ft.model](https://github.com/ACEsuit/mace-foundations/releases/download/mace_matpes_0/MACE-matpes-r2scan-omat-ft.model)\n", + " and set their paths in the next cell.\n", "\n", - "Set the paths to the two downloaded files in the next cell. The Ca3Ir4Sn13\n", - "example below only needs MACE-OMAT-0-medium.\n", - "\n", - "The MD takes most of the time, so a GPU helps a lot. The next cell uses one if\n", - "PyTorch finds it. All our runs used `float64` on one NVIDIA A100 GPU of a\n", - "Perlmutter node." + "All three use the Academic Software License. Section 1 only needs\n", + "MACE-OMAT-0-medium. We ran in `float64` on one NVIDIA A100 GPU." ] }, { @@ -194,12 +142,9 @@ "source": [ "## One calculator for all jobs\n", "\n", - "Every force field job builds its own calculator. `run_locally` runs all of\n", - "them in this one Python process, and the workflow has a little over 50 jobs.\n", - "Loading MACE for each of them grows the memory by about 150 MB per job. This\n", - "cell makes the jobs share one calculator, as in the thermal expansion tutorial.\n", - "It is only needed when many jobs run in one process, not with a workflow\n", - "manager." + "`run_locally` runs all jobs in one process, and each force field job loads its\n", + "own calculator. The next cell makes them share one, as in the thermal expansion\n", + "tutorial. A workflow manager does not need this." ] }, { @@ -234,29 +179,18 @@ "id": "8", "metadata": {}, "source": [ - "## 1. Five materials from 100 K to 900 K\n", + "## 1. Five materials from 100 to 900 K\n", "\n", - "The first part runs Ca3Ir4Sn13 at 300 K with MACE-OMAT-0-medium step by step.\n", - "The other temperatures, potentials and materials follow with the same code." - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## The structure\n", - "\n", - "Ca3Ir4Sn13 (mp-1200211) is cubic, with 40 atoms in the primitive cell. We start\n", - "from its PBEsol cell in the Materials Project's Harmonic Phonon Database. The\n", - "phonon documents of the Materials Project hold this cell. Set your key first with\n", - "`export MP_API_KEY=...`." + "We first run Ca3Ir4Sn13 (mp-1200211) at 300 K with MACE-OMAT-0-medium. It has\n", + "40 atoms in the primitive cell and imaginary modes at 0 K. We take its PBEsol\n", + "cell from the Materials Project's Harmonic Phonon Database. Set\n", + "`MP_API_KEY` first." ] }, { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -286,31 +220,21 @@ }, { "cell_type": "markdown", - "id": "11", + "id": "10", "metadata": {}, "source": [ "## Building the workflow\n", "\n", - "`ForceFieldFiniteTemperaturePhononMaker.from_force_field_name` sets one force\n", - "field for the relaxation, the MD and the force calculations. Any MACE model\n", - "routes through `mace_mp`, and the model name in `calculator_kwargs` selects the\n", - "weights. The name \"MACE-MP-0\" only picks this calculator. The output keeps it as\n", - "`force_field_name`, and `force_field_kwargs` holds the model that was loaded.\n", - "\n", - "We skip the relaxation with `relax_initial_structure=False`. The cell is\n", - "already relaxed with PBEsol, and our AIMD reference below uses the same cell. If\n", - "your input cell is not properly relaxed, keep the default\n", - "`relax_initial_structure=True`. The force field then relaxes the cell before\n", - "the MD.\n", - "\n", - "We give the supercell matrix of our AIMD reference, 2x2x2 with 320 atoms.\n", - "Everything else stays at the workflow defaults." + "`from_force_field_name` uses one force field for every job. \"MACE-MP-0\" picks\n", + "the MACE calculator, and `calculator_kwargs` picks the model. The cell is\n", + "already relaxed with PBEsol, so we skip the relaxation. We use the 2x2x2\n", + "supercell (320 atoms) of our AIMD reference." ] }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -330,23 +254,20 @@ }, { "cell_type": "markdown", - "id": "13", + "id": "12", "metadata": {}, "source": [ "## Running the workflow\n", "\n", - "The flow has one MD job and 51 force calculations, 50 snapshots and the\n", - "undisplaced supercell. On one A100 GPU the whole run took 12 minutes. The MD\n", - "took 9 minutes, the force calculations 12 seconds and the fit 2 minutes.\n", - "\n", - "`create_folders=True` is needed, because the snapshots are read from the\n", - "trajectory file in the folder of the MD job." + "The flow has one MD job and 51 force calculations. It took 12 minutes on one\n", + "A100 GPU. `create_folders=True` is needed, since the snapshots are read from the\n", + "trajectory file of the MD job." ] }, { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -360,19 +281,16 @@ }, { "cell_type": "markdown", - "id": "15", + "id": "14", "metadata": {}, "source": [ - "## Results\n", - "\n", - "The output is a `FiniteTemperaturePhononDoc`. It holds the band structure, the\n", - "DOS, the force constants, the fit and the trajectory check." + "The output is a `FiniteTemperaturePhononDoc`." ] }, { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -392,46 +310,33 @@ }, { "cell_type": "markdown", - "id": "17", + "id": "16", "metadata": {}, "source": [ "Our run gave a highest frequency of 5.97 THz, no imaginary modes and a stable\n", - "trajectory.\n", - "\n", - "- `has_imaginary_modes` checks the whole band path. `lowest_frequency` only covers\n", - " the q-points commensurate with the supercell. The fit sets the frequencies at\n", - " these points directly. Everywhere else they are interpolated. Section 3 shows\n", - " why the difference matters.\n", - "- The force RMSE is the part of the forces that the force constants do not\n", - " describe. It grows with temperature, from 0.05 eV/Å at 100 K to 0.29 eV/Å at\n", - " 900 K for Ca3Ir4Sn13.\n", - "- The Lindemann ratio is the root mean square vibration of the atoms around\n", - " their mean positions, divided by the nearest-neighbor distance. By the\n", - " Lindemann criterion, a solid melts when this ratio reaches a fixed value\n", - " (Lindemann, Phys. Z. 11, 609 (1910); Gilvarry, Phys. Rev. 102, 308 (1956)).\n", - " The check reports the trajectory as melted above 0.15. This is the ratio at\n", - " melting of fcc solids, defined the same way (Saija et al., J. Chem. Phys. 124,\n", - " 244504 (2006))." + "trajectory. `has_imaginary_modes` checks the band path. `lowest_frequency` uses\n", + "only the q-points of the supercell, where the fit sets the frequencies directly\n", + "(Section 3). The check reports melting above a Lindemann ratio of 0.15, the\n", + "value at melting of fcc solids (Saija et al., J. Chem. Phys. 124, 244504\n", + "(2006))." ] }, { "cell_type": "markdown", - "id": "18", + "id": "17", "metadata": {}, "source": [ "## Comparing with 0 K\n", "\n", - "The Materials Project's Harmonic Phonon Database has the 0 K phonons of the same\n", - "cell, computed with PBEsol (Sahasrabuddhe et al., ChemRxiv (2026),\n", - "doi:10.26434/chemrxiv.15004632/v1). The next cell plots them next to ours. The\n", - "two band structures use different paths through the Brillouin zone, so they are\n", - "drawn side by side." + "The next cell plots our 300 K bands next to the 0 K PBEsol bands of the\n", + "Materials Project's Harmonic Phonon Database (Sahasrabuddhe et al., ChemRxiv\n", + "(2026), doi:10.26434/chemrxiv.15004632/v1)." ] }, { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -507,44 +412,32 @@ }, { "cell_type": "markdown", - "id": "20", + "id": "19", "metadata": {}, "source": [ "![Band structure and DOS of Ca3Ir4Sn13 at 0 K and at 300 K](finite_temperature_phonons_figures/s1_ca3ir4sn13_300k.png)\n", "\n", - "At 0 K, Ca3Ir4Sn13 has imaginary modes down to about -0.75 THz. At 300 K they\n", - "are gone. The motion of the atoms at 300 K stabilizes them.\n", - "\n", - "To check the force field, we compare with effective harmonic force constants\n", - "fitted to ab initio MD at 300 K. These were computed with PBEsol in the same\n", - "cell and supercell. Their highest frequency is 6.03 THz, against 5.97 THz from\n", - "MACE-OMAT-0-medium. Over the whole band path the frequencies differ by 0.07 THz\n", - "on average." + "The imaginary modes of 0 K, down to -0.75 THz, are gone at 300 K. AIMD with\n", + "PBEsol in the same supercell gives a highest frequency of 6.03 THz. Over the\n", + "band path, MACE-OMAT-0-medium differs from it by 0.07 THz on average." ] }, { "cell_type": "markdown", - "id": "21", + "id": "20", "metadata": {}, "source": [ - "## The other temperatures, potentials and materials\n", + "## All temperatures, potentials and materials\n", "\n", - "The same workflow runs at five temperatures, with all three potentials and for\n", - "four more materials. AlAsPt5, Zn3P2 and Er5Tl3 also have imaginary modes at 0 K.\n", - "Bi4S3N2 is polar. The Materials Project lists AlAsPt5 and Bi4S3N2 as\n", - "theoretical. They are predicted compounds with no known experimental structure.\n", - "\n", - "The function below builds and runs one workflow in its own folder. Sections 2\n", - "and 3 use it as well.\n", - "\n", - "The loop runs 75 workflows, so it is off by default. Set `RUN_ALL = True` to\n", - "run it. Each of our runs took 6 to 22 minutes on one A100 GPU." + "The loop runs five materials with three potentials at five temperatures. AlAsPt5,\n", + "Zn3P2 and Er5Tl3 also have imaginary modes at 0 K, and Bi4S3N2 is polar. The\n", + "loop is off by default. Each run took 6 to 22 minutes." ] }, { "cell_type": "code", "execution_count": null, - "id": "22", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -616,19 +509,17 @@ }, { "cell_type": "markdown", - "id": "23", + "id": "22", "metadata": {}, "source": [ - "The next cell plots the results of the loop. For each potential it shows the\n", - "band structure at 100, 500 and 900 K. Ca3Ir4Sn13 and Zn3P2 have 40 atoms in the\n", - "primitive cell, so their 120 branches are hard to follow. For these two the DOS\n", - "at all five temperatures is shown as well." + "The next cell plots the bands at 100, 500 and 900 K. For the two materials with\n", + "40 atoms in the primitive cell it also plots the DOS." ] }, { "cell_type": "code", "execution_count": null, - "id": "24", + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -678,7 +569,7 @@ }, { "cell_type": "markdown", - "id": "25", + "id": "24", "metadata": {}, "source": [ "The figures below show our runs.\n", @@ -696,20 +587,18 @@ }, { "cell_type": "markdown", - "id": "26", + "id": "25", "metadata": {}, "source": [ "## Our results\n", "\n", - "The next cell holds the results of our runs. For each material it gives the\n", - "highest frequency on the band path at each temperature. The dashed line is the\n", - "highest frequency of the AIMD reference at 300 K." + "The dashed line is the highest frequency of AIMD at 300 K." ] }, { "cell_type": "code", "execution_count": null, - "id": "27", + "id": "26", "metadata": {}, "outputs": [], "source": [ @@ -801,7 +690,7 @@ }, { "cell_type": "markdown", - "id": "28", + "id": "27", "metadata": {}, "source": [ "![Highest frequency against temperature](finite_temperature_phonons_figures/s1_max_frequency.png)\n", @@ -814,81 +703,38 @@ "| Bi4S3N2 | 0.15 | 0.46 | 0.16 | 17.03 |\n", "| Er5Tl3 | 0.18 | 0.17 | 0.13 | 3.97 |\n", "\n", - "The table gives the mean absolute difference from the AIMD reference at 300 K\n", - "in THz, over all branches and q-points of the band path.\n", + "The table gives the mean absolute difference from AIMD at 300 K over the band\n", + "path, in THz.\n", "\n", - "- No potential is closest to AIMD for all five materials. MACE-OMAT-0-medium is\n", - " closest for Ca3Ir4Sn13, AlAsPt5 and Bi4S3N2, within 0.07 to 0.15 THz.\n", - " MACE-MATPES-r2SCAN-0 is closest for Er5Tl3 and MACE-MATPES-PBE-0 for Zn3P2.\n", - "- MACE-MATPES-PBE-0 gives the lowest frequencies for most materials. For\n", - " Bi4S3N2 its highest branches lie about 1.8 THz below AIMD.\n", + "- No potential is best for all materials. MACE-OMAT-0-medium is closest for\n", + " three of the five.\n", "- Most frequencies soften with temperature. The highest frequency of Bi4S3N2\n", - " drops by 2.2 THz from 100 K to 900 K with MACE-OMAT-0-medium. AlAsPt5 barely\n", - " changes.\n", - "- The imaginary modes at 0 K are gone at every temperature for Ca3Ir4Sn13, Zn3P2\n", - " and Er5Tl3. AlAsPt5 keeps a small one, -0.12 THz, with MACE-MATPES-PBE-0 at\n", - " 100 K. Bi4S3N2 keeps imaginary modes down to -0.8 THz in 12 of 15 runs. Its\n", - " AIMD reference has a small one as well, at -0.12 THz. Bi4S3N2 is polar, so\n", - " these runs and the AIMD reference are compared without the non-analytical\n", - " correction. The three MACE potentials give no Born charges.\n", - "\n", - "The trajectory check did not report \"stable\" for five runs:\n", - "\n", - "- By the Lindemann criterion, Zn3P2 melts at 900 K with MACE-OMAT-0-medium and\n", - " MACE-MATPES-PBE-0. Its Lindemann ratio there is 0.161 and 0.157. With\n", - " MACE-MATPES-r2SCAN-0 it reaches 0.144 at 900 K, below the limit of 0.15. No\n", - " other material reaches the limit up to 900 K. The highest ratio among them is\n", - " 0.127, for Bi4S3N2. Every run keeps the volume of the 0 K cell. Section 2 adds\n", - " thermal expansion.\n", - "- At 100 K three runs are reported as shifted or diffusing: Ca3Ir4Sn13 with\n", - " MACE-OMAT-0-medium and MACE-MATPES-r2SCAN-0, and Er5Tl3 with\n", - " MACE-MATPES-r2SCAN-0. The mean positions of the atoms moved away from the\n", - " starting structure by more than they vibrate. Both materials have imaginary\n", - " modes at 0 K. Section 2 shows the same at 100 K in the force field's own cell,\n", - " for Ca3Ir4Sn13 and AlAsPt5. From 300 K on, their NVT runs are stable.\n", - " Most likely the atoms stay in a slightly distorted structure at 100 K and\n", - " move between such structures at higher temperature. We did not check which\n", - " distortion it is. The force constants of these runs describe vibrations\n", - " around the symmetric structure, so use them with care." + " drops by 2.2 THz from 100 to 900 K. AlAsPt5 barely changes.\n", + "- The imaginary modes of 0 K are gone for Ca3Ir4Sn13, Zn3P2 and Er5Tl3. Bi4S3N2\n", + " keeps some in 12 of 15 runs, and so does its AIMD reference.\n", + "- Zn3P2 melts at 900 K with two of the potentials. At 100 K three runs are\n", + " reported as shifted. Their atoms likely sit in a slightly distorted\n", + " structure." ] }, { "cell_type": "markdown", - "id": "29", + "id": "28", "metadata": {}, "source": [ "## 2. Thermal expansion with an NPT MD\n", "\n", - "In Section 1 every MD ran in the PBEsol cell at 0 K. Two things change this\n", - "cell. Each force field has its own 0 K cell, a little different from the PBEsol\n", - "one. And the crystal expands as it heats up. With `run_npt=True` the workflow\n", - "includes both:\n", - "\n", - "1. The force field relaxes the structure. Keep the default\n", - " `relax_initial_structure=True`, so that the NPT MD starts from the force\n", - " field's own 0 K cell.\n", - "2. An NPT MD of the supercell runs at the temperature and at `pressure`, 0 kbar\n", - " by default. It runs for `npt_time`, 8 ps by default, with a Nose-Hoover\n", - " thermostat and a Martyna-Tobias-Klein barostat.\n", - "3. The cell is averaged over the NPT MD after `npt_equilibration_time`, 2 ps by\n", - " default. The average keeps the symmetry of the structure. The atoms keep\n", - " their fractional coordinates and are then relaxed in the new cell, with the\n", - " cell fixed.\n", - "4. The NVT MD, the snapshots, the fit and the trajectory check follow as in\n", - " Section 1, in the new cell. The relaxed structure in the new cell is the\n", - " undisplaced supercell of the fit.\n", - "\n", - "The NPT trajectory is checked like the NVT one, and the result is stored as\n", - "`npt_trajectory_health`. `structure` holds the cell of the NVT MD and\n", - "`npt_input_structure` the cell that the NPT MD started from.\n", - "\n", - "We run Ca3Ir4Sn13 at 900 K with MACE-OMAT-0-medium." + "Each force field has its own 0 K cell, and the crystal expands as it heats up.\n", + "With `run_npt=True`, the workflow relaxes the structure and runs an NPT MD at\n", + "the temperature, 8 ps by default. It averages the cell after the first 2 ps,\n", + "keeping the symmetry, and relaxes the atoms in that cell. The NVT MD and the fit\n", + "then use this cell. We run Ca3Ir4Sn13 at 900 K." ] }, { "cell_type": "code", "execution_count": null, - "id": "30", + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -919,35 +765,30 @@ }, { "cell_type": "markdown", - "id": "31", + "id": "30", "metadata": {}, "source": [ - "Our run took 19 minutes. The NPT MD and the NVT MD took about 8 minutes each\n", - "and the fit 2 minutes. The 0 K cell of MACE-OMAT-0-medium has a lattice\n", - "parameter of 9.825 Å, and its volume is 3.8% larger than that of the PBEsol\n", - "cell. At 900 K the lattice parameter is 9.964 Å, 4.3% more volume. Both\n", - "trajectories were stable. The highest frequency is 4.91 THz, against 5.78 THz\n", - "in the PBEsol cell in Section 1." + "Our run took about 20 minutes. The 0 K cell of MACE-OMAT-0-medium is 3.8% larger\n", + "than the PBEsol cell, and the 900 K cell 4.3% larger again. Both trajectories\n", + "were stable. The highest frequency is 4.91 THz, against 5.78 THz in the PBEsol\n", + "cell." ] }, { "cell_type": "markdown", - "id": "32", + "id": "31", "metadata": {}, "source": [ - "## The other temperatures, potentials and materials\n", + "## All runs\n", "\n", - "We ran all 75 settings of Section 1 again with `run_npt=True`. To tell the two\n", - "effects apart, we also ran them with the relaxation but without the NPT MD,\n", - "that is in the force field's own 0 K cell. `run_ft` takes both options. The two\n", - "loops run 150 workflows, so they are off by default. Each of our runs took 6 to\n", - "29 minutes on one A100 GPU." + "The loop runs the 75 settings of Section 1 again, in the force field's 0 K cell\n", + "and with the NPT MD. It is off by default." ] }, { "cell_type": "code", "execution_count": null, - "id": "33", + "id": "32", "metadata": {}, "outputs": [], "source": [ @@ -972,22 +813,19 @@ }, { "cell_type": "markdown", - "id": "34", + "id": "33", "metadata": {}, "source": [ "## Our results\n", "\n", - "The next cell holds the results of our runs. The first plot gives the volume\n", - "relative to the PBEsol cell. The point at 0 K is the force field's relaxed cell.\n", - "The second plot gives the highest frequency for each potential in three cells:\n", - "the PBEsol cell of Section 1, the force field's 0 K cell, and the cell from the\n", - "NPT MD." + "The plots give the volume relative to the PBEsol cell, and the highest frequency\n", + "in three cells: the PBEsol cell, the force field's 0 K cell and the NPT cell." ] }, { "cell_type": "code", "execution_count": null, - "id": "35", + "id": "34", "metadata": {}, "outputs": [], "source": [ @@ -1123,96 +961,46 @@ }, { "cell_type": "markdown", - "id": "36", + "id": "35", "metadata": {}, "source": [ "![Volume against temperature](finite_temperature_phonons_figures/s2_volume.png)\n", "\n", "![Highest frequency in three cells](finite_temperature_phonons_figures/s2_max_frequency.png)\n", "\n", - "We do not compare these runs with the AIMD reference. It used the PBEsol cell\n", - "at every temperature.\n", - "\n", - "- The 0 K cells of the force fields are larger than the PBEsol cell, by up to\n", - " 12% in volume. MACE-OMAT-0-medium and MACE-MATPES-PBE-0 are trained on PBE\n", - " data, and PBE gives larger cells than PBEsol. MACE-MATPES-r2SCAN-0 gives the\n", - " cell closest to PBEsol for four of the five materials. For AlAsPt5 the two\n", - " differ by 0.2%.\n", - "- From 0 K to 900 K the volume grows by 3 to 6.5%. Bi4S3N2 with\n", - " MACE-MATPES-PBE-0 is the exception, with 11%.\n", - "- The larger 0 K cell alone lowers the frequencies. At 300 K the highest\n", - " frequency of Ca3Ir4Sn13 drops from 5.97 THz in the PBEsol cell to 5.58 THz\n", - " in the cell of MACE-OMAT-0-medium. With MACE-MATPES-PBE-0 the 0 K cell of\n", - " Er5Tl3 is 12% larger, and its highest frequency at 300 K drops from 4.12 to\n", - " 3.62 THz. With MACE-MATPES-r2SCAN-0 the cell of Zn3P2 grows by less than 1%,\n", - " and its highest frequency at 300 K stays at 10.9 THz.\n", - "- Thermal expansion lowers the frequencies further. At 100 K the NPT cell\n", - " changes the highest frequency by 0.15 THz or less, except for Bi4S3N2. At\n", - " 900 K it lowers it by 0.15 to 0.8 THz. For Bi4S3N2 with MACE-MATPES-PBE-0,\n", - " whose cell grows by 11%, it lowers it by 2.1 THz.\n", - "- At constant volume a frequency can also rise with temperature. In the PBEsol\n", - " cell, the highest frequency of AlAsPt5 with MACE-MATPES-PBE-0 rises from\n", - " 7.58 THz at 100 K to 7.80 THz at 900 K. In the NPT cell it falls from 7.15 to\n", - " 6.64 THz.\n", - "\n", - "The trajectory check did not report \"stable\" for these runs:\n", - "\n", - "- Zn3P2 at 900 K melts with all three potentials in the NPT MD and in the NVT MD\n", - " that follows. With MACE-MATPES-r2SCAN-0, its Lindemann ratio in Section 1\n", - " stayed below the limit, at 0.144. In the NVT MD in the NPT cell it is 0.150,\n", - " just above the limit. In the 0 K cell it melts at 900 K with MACE-OMAT-0-medium and\n", + "- The 0 K cells of the force fields are up to 12% larger than the PBEsol cell.\n", + " MACE-MATPES-r2SCAN-0 is closest to PBEsol for four of the five materials.\n", + "- From 0 to 900 K the volume grows by 3 to 6.5%, and by 11% for Bi4S3N2 with\n", " MACE-MATPES-PBE-0.\n", - "- Bi4S3N2 melts at 900 K in the NPT cell. The NPT MD is reported as melted with\n", - " all three potentials, and the NVT MD that follows with MACE-OMAT-0-medium and\n", - " MACE-MATPES-PBE-0. With MACE-MATPES-PBE-0 the NPT MD is also reported as\n", - " melted at 500 K and as shifted at 700 K, and the volume jumps by 5% between\n", - " these two temperatures. In the PBEsol cell and in the 0 K cell none of its\n", - " runs melted.\n", - "- AlAsPt5 at 900 K with MACE-MATPES-PBE-0: the NPT MD is reported as shifted,\n", - " and its volume does not grow from 700 to 900 K. The cell of this run is not\n", - " reliable, even though the NVT MD that follows is stable.\n", - "- At 100 K, the shift check fires for Ca3Ir4Sn13 and AlAsPt5. In the 0 K cell\n", - " this happens with MACE-OMAT-0-medium and MACE-MATPES-r2SCAN-0 for both. In the\n", - " NPT cell it happens for Ca3Ir4Sn13 with MACE-MATPES-r2SCAN-0 and for AlAsPt5\n", - " with all three potentials. Section 1 discusses this.\n", - "\n", - "Bi4S3N2 has imaginary modes on the band path in all 30 runs. A few runs at\n", - "100 K have small ones too: Ca3Ir4Sn13 with MACE-MATPES-r2SCAN-0 in both cells,\n", - "and AlAsPt5 in the NPT cell with MACE-OMAT-0-medium and MACE-MATPES-PBE-0. The\n", - "check reports all of these runs as shifted.\n", - "\n", - "A run with the NPT MD took 12 to 29 minutes, against 6 to 21 minutes in the\n", - "0 K cell. To compare a force field with DFT phonons in a given cell, run in\n", - "that cell, as in Section 1. To predict the phonons at a temperature with the\n", - "force field alone, use `run_npt=True`." + "- The larger 0 K cell alone lowers the frequencies, by up to 0.5 THz at 300 K.\n", + "- Thermal expansion lowers them by 0.15 to 0.8 THz at 900 K, and by 2.1 THz for\n", + " Bi4S3N2 with MACE-MATPES-PBE-0.\n", + "- Zn3P2 and Bi4S3N2 melt at 900 K in the NPT runs. AlAsPt5 with\n", + " MACE-MATPES-PBE-0 is reported as shifted at 900 K, and its cell does not grow\n", + " from 700 to 900 K.\n", + "\n", + "To compare with DFT in a given cell, run in that cell as in Section 1. To\n", + "predict the phonons at a temperature with the force field alone, use\n", + "`run_npt=True`." ] }, { "cell_type": "markdown", - "id": "37", + "id": "36", "metadata": {}, "source": [ - "## 3. MD length and number of snapshots for KNaICl\n", - "\n", - "Two settings control how well the MD samples the temperature:\n", + "## 3. MD length and number of snapshots\n", "\n", - "- `md_time` sets the length of the MD in ps. The default is 8 ps, of which the\n", - " first 1 ps is left out.\n", - "- `n_snapshots` sets the number of snapshots used in the fit. The default is 50.\n", - "\n", - "We tested 4, 8 and 16 ps with 25, 50 and 100 snapshots at 300 K for KNaICl\n", - "(mp-1002081). It has 4 atoms in the primitive cell and 72 in the 3x3x2\n", - "supercell. Like AlAsPt5 and Bi4S3N2, KNaICl is a predicted compound. KNaICl is polar, so it is compared with the AIMD reference without\n", - "the non-analytical correction. The highest frequency of that reference is\n", - "5.51 THz.\n", - "\n", - "The grid runs 27 workflows, so it is off by default." + "We run KNaICl (mp-1002081, 72 atoms in the supercell) at 300 K with 4, 8 and 16 ps\n", + "of MD and 25, 50 and 100 snapshots, and compare with AIMD. KNaICl is polar, so\n", + "the comparison is without the non-analytical correction. The grid is off by\n", + "default." ] }, { "cell_type": "code", "execution_count": null, - "id": "38", + "id": "37", "metadata": {}, "outputs": [], "source": [ @@ -1237,7 +1025,7 @@ { "cell_type": "code", "execution_count": null, - "id": "39", + "id": "38", "metadata": {}, "outputs": [], "source": [ @@ -1302,7 +1090,7 @@ }, { "cell_type": "markdown", - "id": "40", + "id": "39", "metadata": {}, "source": [ "![Difference from AIMD against MD length and snapshots](finite_temperature_phonons_figures/s3_knaicl_grid.png)\n", @@ -1319,61 +1107,38 @@ "| MATPES-r2SCAN-0 | 8 ps | 5.32 | 5.58 | 5.42 |\n", "| MATPES-r2SCAN-0 | 16 ps | 5.42 | 5.53 | 5.53 |\n", "\n", - "In the plot, a star marks a run with imaginary modes on the band path. The\n", - "table gives the highest frequency in THz.\n", - "\n", - "- The mean absolute difference from AIMD lies between 0.09 and 0.19 THz. It\n", - " shows no trend with the MD length or the number of snapshots. Each run is one\n", - " MD trajectory, so these differences are the noise of a single run.\n", - "- The highest frequency changes by up to 0.3 THz between runs, also without a\n", - " trend.\n", - "- 19 of the 27 runs have imaginary modes on the band path, down to -1.5 THz. In\n", - " all but two of them they only appear at q-points that are not commensurate\n", - " with the supercell, where the frequencies are interpolated from the fitted\n", - " force constants. The AIMD reference has no imaginary modes in the same\n", - " supercell. They appear in 6 of 9 runs with 25 snapshots, 8 of 9 with 50 and\n", - " 5 of 9 with 100. In an earlier round of the same grid with a Nose-Hoover\n", - " thermostat, 12 of the 27 runs had them.\n", - "- Each run is one trajectory. Another `random_seed` gives another trajectory and\n", - " somewhat different numbers.\n", - "- The MD takes most of the time. With MACE-OMAT-0-medium a run with 50\n", - " snapshots took 3.5, 6.1 and 10.8 minutes for 4, 8 and 16 ps. Going from 50 to\n", - " 100 snapshots added a few seconds of force calculations and fitting.\n", - "\n", - "With a force field the force calculations cost little next to the MD, so more\n", - "snapshots are cheap. In this test they did not remove the imaginary modes,\n", - "though. The default stays at 50, because with VASP each snapshot is a DFT\n", - "calculation of the whole supercell. For the MD length, 4 ps gave about the same\n", - "agreement with AIMD as 8 and 16 ps for KNaICl. We kept the default of 8 ps for\n", - "the other materials." + "A star marks a run with imaginary modes on the band path. The table gives the\n", + "highest frequency in THz.\n", + "\n", + "- The difference from AIMD is 0.09 to 0.19 THz, with no trend. It is the noise\n", + " of a single trajectory.\n", + "- 19 of the 27 runs have imaginary modes, mostly at q-points between those of\n", + " the supercell, where the frequencies are interpolated. AIMD has none. An\n", + " earlier round with a Nose-Hoover thermostat gave 12 of 27.\n", + "- More snapshots cost little with a force field, but they did not remove these\n", + " modes. The defaults stay at 8 ps and 50 snapshots, since with VASP each\n", + " snapshot is a DFT calculation." ] }, { "cell_type": "markdown", - "id": "41", + "id": "40", "metadata": {}, "source": [ "## 4. Li3PS4, a crystal that is unstable at 0 K\n", "\n", - "Li3PS4 is a solid electrolyte for lithium batteries. In experiment it has three\n", - "phases at ambient pressure. γ (Pmn2₁) is stable up to 523 to 573 K. β (Pnma)\n", - "is stable up to 723 to 748 K. α (Cmcm) is stable above that (Homma et al.,\n", - "Solid State Ionics 182, 53 (2011); Kaup et al., J. Mater. Chem. A 8, 12446\n", - "(2020)). γ is ordered. In β and α the Li atoms sit on partly occupied sites.\n", - "\n", - "mp-985583 is a Pnma structure, so it is β. A DFT code needs every site fully\n", - "occupied, so it is one ordered choice of the Li sites. In the Materials\n", - "Project's Harmonic Phonon Database it has imaginary modes at 0 K. Here we run\n", - "it from 100 to 1000 K, in steps of 100 K, with the three potentials. Each\n", - "potential first relaxes the structure. We run every temperature twice. One run\n", - "uses the relaxed 0 K cell (NVT). The other uses the cell from an NPT MD at that\n", - "temperature (Section 2). The supercell has 128 atoms." + "In experiment Li3PS4 is γ up to 523 to 573 K, β up to 723 to 748 K and α above\n", + "(Homma et al., Solid State Ionics 182, 53 (2011); Kaup et al., J. Mater. Chem. A\n", + "8, 12446 (2020)). mp-985583 is one ordering of the partly occupied Li sites of\n", + "β, and it has imaginary modes at 0 K. We run it from 100 to 1000 K with each\n", + "potential, in the relaxed 0 K cell (NVT) and in the NPT cell. The supercell has\n", + "128 atoms." ] }, { "cell_type": "code", "execution_count": null, - "id": "42", + "id": "41", "metadata": {}, "outputs": [], "source": [ @@ -1385,21 +1150,19 @@ }, { "cell_type": "markdown", - "id": "43", + "id": "42", "metadata": {}, "source": [ "## Phonons at 0 K\n", "\n", - "For the 0 K reference we use the phonopy workflow of atomate2, not the pheasy\n", - "one. When imaginary modes appear, the pheasy workflow refits the force\n", - "constants to remove them. Here we want to see them. The relaxation keeps the\n", - "symmetry, as in the finite-temperature workflow." + "We use the phonopy workflow here, since the pheasy workflow refits the force\n", + "constants to remove imaginary modes. The relaxation keeps the symmetry." ] }, { "cell_type": "code", "execution_count": null, - "id": "44", + "id": "43", "metadata": {}, "outputs": [], "source": [ @@ -1432,7 +1195,7 @@ }, { "cell_type": "markdown", - "id": "45", + "id": "44", "metadata": {}, "source": [ "Our run took 2 minutes. The lowest frequency is -2.59 THz. With\n", @@ -1441,7 +1204,7 @@ }, { "cell_type": "markdown", - "id": "46", + "id": "45", "metadata": {}, "source": [ "## One temperature\n", @@ -1452,7 +1215,7 @@ { "cell_type": "code", "execution_count": null, - "id": "47", + "id": "46", "metadata": {}, "outputs": [], "source": [ @@ -1476,30 +1239,29 @@ }, { "cell_type": "markdown", - "id": "48", + "id": "47", "metadata": {}, "source": [ "Our run took 31 minutes. The volume grows from 664.8 to 698.5 ų. The lowest\n", - "frequency is -0.57 THz. The trajectory check reports \"melted\", with a Lindemann\n", - "ratio of 0.24. Section 5 shows that the crystal has not melted. The Li atoms\n", - "hop between sites while P and S stay in place." + "frequency is -0.57 THz, and the check reports \"melted\" with a Lindemann ratio of\n", + "0.24. Section 5 shows that only the Li atoms move." ] }, { "cell_type": "markdown", - "id": "49", + "id": "48", "metadata": {}, "source": [ - "## The other temperatures and potentials\n", + "## All runs\n", "\n", - "The loop below runs all 60 settings and the three 0 K runs. It is off by\n", - "default. Each of our runs took 15 to 62 minutes on one A100 GPU." + "The loop runs the 60 settings and the three 0 K runs. It is off by default. Each\n", + "run took 15 to 62 minutes." ] }, { "cell_type": "code", "execution_count": null, - "id": "50", + "id": "49", "metadata": {}, "outputs": [], "source": [ @@ -1523,20 +1285,17 @@ }, { "cell_type": "markdown", - "id": "51", + "id": "50", "metadata": {}, "source": [ - "The next cell plots the bands of one potential at 0, 300 and 700 K, in the\n", - "relaxed 0 K cell (NVT) and in the NPT cell. Every run keeps the Pnma symmetry,\n", - "so all runs of a potential have the band path of its 0 K run. Their q-points\n", - "are the same in reduced coordinates. The cells differ a little, so we plot\n", - "every run along the distances of the 0 K path." + "The next cell plots the bands at 0, 300 and 700 K. Every run keeps the Pnma\n", + "symmetry, so all runs of a potential share the band path of its 0 K run." ] }, { "cell_type": "code", "execution_count": null, - "id": "52", + "id": "51", "metadata": {}, "outputs": [], "source": [ @@ -1568,7 +1327,7 @@ }, { "cell_type": "markdown", - "id": "53", + "id": "52", "metadata": {}, "source": [ "The figures below show our runs.\n", @@ -1582,20 +1341,18 @@ }, { "cell_type": "markdown", - "id": "54", + "id": "53", "metadata": {}, "source": [ "## Our results\n", "\n", - "The next cell holds the results of our runs. For each run it gives the lowest\n", - "frequency on the band path, the Lindemann ratio of the trajectory check and\n", - "the volume of the NPT cell." + "The lowest frequency, the Lindemann ratio and the NPT volume of each run." ] }, { "cell_type": "code", "execution_count": null, - "id": "55", + "id": "54", "metadata": {}, "outputs": [], "source": [ @@ -1656,58 +1413,39 @@ }, { "cell_type": "markdown", - "id": "56", + "id": "55", "metadata": {}, "source": [ "![Lowest frequency, Lindemann ratio and volume of Li3PS4](finite_temperature_phonons_figures/s4_runs.png)\n", "\n", - "- The imaginary modes of 0 K shrink at finite temperature, but they do not go\n", - " away. The lowest frequency lies between -0.2 and -2.2 THz in every run but\n", - " one. MACE-MATPES-r2SCAN-0 in the NPT cell at 400 K has no imaginary modes.\n", - "- At 100 K the trajectory check reports a shift in every run. The atoms move\n", - " away from the MP structure. At 200 K every run is stable.\n", - "- From 300 to 400 K the Lindemann ratio passes 0.15 and the check reports\n", - " melting. It then keeps rising, to 0.45 to 0.84 at 900 to 1000 K.\n", - "- From 0 to 800 K the NPT cell grows by 3 to 7% in volume. With\n", - " MACE-OMAT-0-medium it then jumps by 9% between 800 and 900 K.\n", - "- MACE-MATPES-PBE-0 gives the softest bands. Its highest frequency at 0 K is\n", - " 15.4 THz, against 17.8 and 17.9 THz for the other two.\n", - "\n", - "Li3PS4 does not melt at 400 K in experiment. Section 5 looks at what the atoms\n", - "do instead." + "- The imaginary modes shrink with temperature but do not go away. The one\n", + " exception is MACE-MATPES-r2SCAN-0 at 400 K in the NPT cell.\n", + "- The Lindemann ratio passes 0.15 at 300 to 400 K, and the check reports\n", + " melting. Li3PS4 does not melt there in experiment.\n", + "- The NPT cell grows by 3 to 7% up to 800 K.\n", + "- MACE-MATPES-PBE-0 gives the softest bands, with 15.4 THz at 0 K against 17.8\n", + " and 17.9 THz." ] }, { "cell_type": "markdown", - "id": "57", + "id": "56", "metadata": {}, "source": [ - "## 5. When light atoms hop: Li3PS4 above 300 K\n", + "## 5. Li3PS4 with hopping Li\n", "\n", - "In Section 4 the fitted phonons of Li3PS4 keep imaginary modes at every\n", - "temperature. At 0 K they come from the structure. This ordering of the Li\n", - "sites is not at a minimum of the energy. At high temperature a second cause\n", - "adds to this. The Li atoms start to hop from site to site, while the PS4\n", - "framework stays solid. A fit of force constants assumes that every atom\n", - "vibrates around one site. A Li atom that hops has no such site, so the fit\n", - "reads its motion as a very soft spring. The Lindemann ratio is an average over\n", - "all atoms, so the far moves of Li alone push it above 0.15.\n", - "\n", - "This section uses the MD itself, which needs no fixed sites. The mean-square\n", - "displacement of each element tells which atoms diffuse. The vibrational DOS\n", - "comes from the velocities in the MD. The free energy comes from thermodynamic\n", - "integration over the MD.\n", - "\n", - "The trajectories are the ones the workflow already saved, in\n", - "`md_trajectory.traj` in each run folder. They have one frame per time step and\n", - "include the momenta and the potential energies. The examples below use the\n", - "600 K run above." + "At 0 K the imaginary modes come from the structure, since this ordering is not\n", + "at an energy minimum. Above about 500 K the Li atoms also start to hop, while\n", + "the PS4 framework stays solid. A fit around fixed sites reads this as very soft\n", + "springs. The MD itself needs no fixed sites. We get the diffusion, the\n", + "vibrational DOS and the free energy from the saved trajectories,\n", + "`md_trajectory.traj`, starting with the 600 K run above." ] }, { "cell_type": "code", "execution_count": null, - "id": "58", + "id": "57", "metadata": {}, "outputs": [], "source": [ @@ -1744,20 +1482,19 @@ }, { "cell_type": "markdown", - "id": "59", + "id": "58", "metadata": {}, "source": [ - "## Which atoms move\n", + "## Diffusion\n", "\n", - "The mean-square displacement (MSD) of an atom grows linearly in time if it\n", - "diffuses. It levels off if the atom only vibrates. Its slope gives the\n", - "diffusion coefficient, $D = \\mathrm{slope}/6$. We fit the slope from 1 to 3 ps." + "$D$ is the slope of the mean-square displacement divided by 6, fitted from 1 to\n", + "3 ps." ] }, { "cell_type": "code", "execution_count": null, - "id": "60", + "id": "59", "metadata": {}, "outputs": [], "source": [ @@ -1793,7 +1530,7 @@ { "cell_type": "code", "execution_count": null, - "id": "61", + "id": "60", "metadata": {}, "outputs": [], "source": [ @@ -1846,7 +1583,7 @@ }, { "cell_type": "markdown", - "id": "62", + "id": "61", "metadata": {}, "source": [ "![Diffusion coefficients of Li3PS4](finite_temperature_phonons_figures/s5_diffusion.png)\n", @@ -1859,50 +1596,32 @@ "| MATPES-PBE-0 | 1.9 | 3.0 | 6.3 | 15.0 | 26.0 | 29.0 | 46.0 | 64.0 |\n", "| MATPES-r2SCAN-0 | 1.6 | 0.8 | 2.6 | 4.8 | 6.8 | 26.0 | 38.0 | 34.0 |\n", "\n", - "A D below about 3×10⁻⁷ cm²/s is noise in these 7 ps runs. P and S stay near\n", - "that level up to 700 K.\n", + "A $D$ below 3×10⁻⁷ cm²/s is noise in these 7 ps runs.\n", "\n", - "- Li diffuses clearly from about 600 K with MACE-OMAT-0-medium and\n", - " MACE-MATPES-r2SCAN-0, and from about 500 K with MACE-MATPES-PBE-0. D_Li is\n", - " 5×10⁻⁶ to 3×10⁻⁵ cm²/s at 600 to 800 K.\n", - "- Below that, a D_Li of 10⁻⁶ cm²/s means a few single hops in the run. One hop\n", - " of 2.5 Å by one of the 48 Li atoms already gives 0.13 Ų. A converged D below\n", - " 600 K needs MD of nanoseconds.\n", - "- At 900 K the D of P and S passes 10⁻⁶ cm²/s with MACE-OMAT-0-medium. With\n", - " the other two it stays below that in the 0 K cell, and passes it in the NPT\n", - " cell at 1000 K. The framework starts to flow.\n", - "\n", - "So from about 600 K to about 800 K, Li3PS4 is a solid framework with mobile\n", - "Li. This is the range where the fitted phonons fail.\n", - "\n", - "The MD uses the Langevin thermostat, and D depends on its friction. For a D to\n", - "compare with experiment, run an MD without a thermostat (NVE) from the end of\n", - "the NVT MD." + "- Li diffuses from about 600 K, and from about 500 K with MACE-MATPES-PBE-0.\n", + "- P and S start to diffuse at 900 to 1000 K.\n", + "- $D$ depends on the Langevin friction. For transport, run an NVE MD." ] }, { "cell_type": "markdown", - "id": "63", + "id": "62", "metadata": {}, "source": [ - "## The vibrational DOS from the velocities\n", + "## Vibrational DOS\n", "\n", - "The vibrational DOS is the Fourier transform of the velocity autocorrelation\n", - "function, weighted by mass. By the Wiener-Khinchin theorem this is the squared\n", - "Fourier transform of each velocity:\n", + "The DOS is the mass-weighted power spectrum of the velocities,\n", "\n", "$$g(\\nu) \\propto \\sum_i m_i \\left| \\int v_i(t)\\, e^{2\\pi i \\nu t}\\, dt \\right|^2$$\n", "\n", - "It holds all the anharmonicity at that temperature and has no imaginary\n", - "frequencies. An atom that diffuses adds to the DOS at $\\nu = 0$, in proportion\n", - "to its D. The friction of the Langevin thermostat, $\\gamma$ = 10 ps⁻¹, gives\n", - "every peak a width of $\\gamma/2\\pi$ = 1.6 THz (full width at half maximum)." + "It includes all the anharmonicity and has no imaginary frequencies. The\n", + "Langevin friction $\\gamma$ broadens every peak by $\\gamma/2\\pi$ = 1.6 THz." ] }, { "cell_type": "code", "execution_count": null, - "id": "64", + "id": "63", "metadata": {}, "outputs": [], "source": [ @@ -1939,7 +1658,7 @@ { "cell_type": "code", "execution_count": null, - "id": "65", + "id": "64", "metadata": {}, "outputs": [], "source": [ @@ -1976,7 +1695,7 @@ }, { "cell_type": "markdown", - "id": "66", + "id": "65", "metadata": {}, "source": [ "![Li DOS below 5 THz and P-S stretch, MD against fit](finite_temperature_phonons_figures/s5_vdos.png)\n", @@ -1995,61 +1714,36 @@ "| MATPES-r2SCAN-0 | 500 | 17% | 41% | 16.3 | 15.2 |\n", "| MATPES-r2SCAN-0 | 700 | 21% | 99% | 16.3 | 13.2 |\n", "\n", - "The fitted DOS is smeared with the same 0.15 THz as the MD DOS.\n", - "\n", - "- At 300 K, with MACE-OMAT-0-medium and MACE-MATPES-r2SCAN-0, 14 to 19% of the\n", - " Li DOS lies below 5 THz, in the MD and in the fit. With MACE-MATPES-PBE-0 the\n", - " fit already puts 53% of it there, against 21% in the MD.\n", - "- At 700 K the fit puts 90 to 100% of the Li DOS below 5 THz, and 6 to 18% of\n", - " it at imaginary frequencies. In the MD it is 21 to 25%. The Li DOS of the MD\n", - " stays a broad band, with a small value at zero from the diffusion.\n", - "- In the MD the P-S stretch stays at 16.0 to 16.4 THz with MACE-OMAT-0-medium\n", - " and MACE-MATPES-r2SCAN-0, and at 14.6 to 15.0 THz with MACE-MATPES-PBE-0. In\n", - " the fit it drops to 12.0 to 13.2 THz at 700 K. The framework does not soften.\n", - " The fit around fixed sites makes it look soft." + "- At 300 K the MD and the fit agree, except with MACE-MATPES-PBE-0.\n", + "- At 700 K the fit puts 90 to 100% of the Li DOS below 5 THz. The MD puts 21 to\n", + " 25% there.\n", + "- The P-S stretch stays at 15 to 16.4 THz in the MD, but drops to 12 to 13 THz in\n", + " the fit. The framework does not soften. The fit around fixed sites makes it\n", + " look soft." ] }, { "cell_type": "markdown", - "id": "67", + "id": "66", "metadata": {}, "source": [ - "## The free energy from the MD\n", - "\n", - "The fitted phonons give a free energy only through their frequencies, so they\n", - "carry the same errors. The MD gives it without a fit, in two steps.\n", - "\n", - "**1. F at one temperature, $T_0$ = 100 K, by Frenkel-Ladd.** An Einstein\n", - "crystal, with every atom tied by a spring to a site, has a free energy known in\n", - "closed form. We switch the potential from the Einstein crystal to the MACE\n", - "potential, $U(\\lambda) = \\lambda U_\\mathrm{MLIP} + (1 - \\lambda) U_E$, and run\n", - "an MD at 8 values of $\\lambda$. Then\n", + "## Free energy from the MD\n", "\n", - "$$F_\\mathrm{MLIP} = F_E + \\int_0^1 \\langle U_\\mathrm{MLIP} - U_E \\rangle_\\lambda\\, d\\lambda$$\n", - "\n", - "The springs sit at the mean positions of the 100 K MD. Their constants are\n", - "$3k_BT$ over the mean-square displacement of each element. The center of mass\n", - "is fixed in the MD, and $F_E$ has a term for that. We choose 100 K because no\n", - "Li hops there in any run.\n", - "\n", - "**2. F at every other temperature, by Gibbs-Helmholtz.**\n", - "\n", - "$$\\frac{d(F/T)}{dT} = -\\frac{U}{T^2}$$\n", - "\n", - "U is the mean energy of the MD at each temperature, the potential energy plus\n", - "$3k_BT/2$ per atom. For the NPT runs it is the mean enthalpy at zero pressure,\n", - "and the result is the Gibbs free energy. Then $S = (U - F)/T$. We stop at\n", - "800 K. Above it the P and S atoms start to diffuse.\n", - "\n", - "The MD treats the nuclei as classical. We add the difference between the\n", - "quantum and the classical free energy of the MD DOS at each temperature. It\n", - "matters most at low temperature." + "1. **F at 100 K by Frenkel-Ladd.** We switch from an Einstein crystal, with\n", + " springs at the mean positions of the 100 K MD, to the MACE potential at 8\n", + " values of $\\lambda$. No Li hops at 100 K.\n", + " $$F = F_E + \\int_0^1 \\langle U_\\mathrm{MLIP} - U_E \\rangle_\\lambda\\, d\\lambda$$\n", + "2. **F at higher temperatures by Gibbs-Helmholtz,** with $U$ the mean energy of\n", + " the MD, or the mean enthalpy for NPT. We stop at 800 K, where P and S start to\n", + " diffuse.\n", + " $$\\frac{d(F/T)}{dT} = -\\frac{U}{T^2}$$\n", + "3. **A quantum correction** from the MD DOS, since the MD is classical." ] }, { "cell_type": "code", "execution_count": null, - "id": "68", + "id": "67", "metadata": {}, "outputs": [], "source": [ @@ -2169,21 +1863,18 @@ }, { "cell_type": "markdown", - "id": "69", + "id": "68", "metadata": {}, "source": [ - "We tested these functions on a periodic Cu-Ag crystal with an EMT potential at\n", - "10 K, where the harmonic free energy is exact. Frenkel-Ladd gave 0.247542 ±\n", - "0.000087 eV and the exact value is 0.247599 eV.\n", - "\n", - "The next cell runs Frenkel-Ladd on the 100 K NVT run of the loop in Section 4.\n", - "It is off by default." + "On a Cu-Ag crystal with EMT at 10 K, these functions gave 0.247542 ± 0.000087 eV\n", + "against the exact 0.247599 eV. The next cell runs them on the 100 K run of\n", + "Section 4. It is off by default." ] }, { "cell_type": "code", "execution_count": null, - "id": "70", + "id": "69", "metadata": {}, "outputs": [], "source": [ @@ -2197,7 +1888,7 @@ { "cell_type": "code", "execution_count": null, - "id": "71", + "id": "70", "metadata": {}, "outputs": [], "source": [ @@ -2241,7 +1932,7 @@ { "cell_type": "code", "execution_count": null, - "id": "72", + "id": "71", "metadata": {}, "outputs": [], "source": [ @@ -2318,7 +2009,7 @@ }, { "cell_type": "markdown", - "id": "73", + "id": "72", "metadata": {}, "source": [ "![Free energy and entropy of Li3PS4](finite_temperature_phonons_figures/s5_thermo.png)\n", @@ -2332,42 +2023,31 @@ "| MATPES-r2SCAN-0 | 400 | 417 | 449 | 342 |\n", "\n", "The fitted F includes U₀, the mean potential energy of its MD minus 3kT/2 per\n", - "atom. All values are per formula unit.\n", + "atom.\n", "\n", - "- Up to 300 K the fitted F and the MD F agree to within 1 kJ/mol with\n", - " MACE-MATPES-r2SCAN-0, and to within 2.5 kJ/mol with MACE-OMAT-0-medium. Both\n", - " start from the same MD, but they get F in different ways, so the agreement\n", - " checks both. With MACE-MATPES-PBE-0 they start to differ at 300 K.\n", - "- Where Li diffuses, the fit gives too high an entropy. At 700 K the MD gives\n", - " S = 400 to 415 J/(K mol) in the 0 K cell, and the fit 449 to 457 J/(K mol).\n", - " The fit puts the Li modes at too low a frequency.\n", - "- The 0 K force constants give too low an entropy, 342 to 381 J/(K mol) at\n", - " 700 K. They miss the softening, and they leave out the imaginary modes. So\n", - " does the entropy in the Materials Project's Harmonic Phonon Database.\n", - "- The NPT cell adds 10 to 20 J/(K mol) at 700 K." + "- Up to 300 K the fit and the MD agree within 1 to 2.5 kJ/mol, except with\n", + " MACE-MATPES-PBE-0.\n", + "- Where Li hops, the fit overestimates S at 700 K by 40 to 50 J/(K mol).\n", + "- The 0 K force constants underestimate it by 35 to 60 J/(K mol). So does the\n", + " entropy in the Materials Project's Harmonic Phonon Database." ] }, { "cell_type": "markdown", - "id": "74", + "id": "73", "metadata": {}, "source": [ "## γ against β\n", "\n", - "The free energy from the MD includes the anharmonicity, the hopping of Li and\n", - "the thermal expansion. So the phase with the lowest Gibbs free energy should be\n", - "the stable one. The temperature where two curves cross should be a transition.\n", - "\n", - "The Materials Project has no entry for γ. Its two Pnma entries, mp-985583 and\n", - "mp-1097036, are orderings of β. No entry has the framework of α. We take γ from\n", - "Kaup et al., Table S1 of the supporting information. It agrees with Homma et\n", - "al., COD 1570309. γ is ordered and needs no choice of Li sites." + "The phase with the lowest G is stable, so a crossing of G(β) and G(γ) is a\n", + "transition. The Materials Project has no γ entry and no α framework. We take γ\n", + "from Kaup et al. (Table S1), which matches Homma et al. (COD 1570309)." ] }, { "cell_type": "code", "execution_count": null, - "id": "75", + "id": "74", "metadata": {}, "outputs": [], "source": [ @@ -2392,22 +2072,18 @@ }, { "cell_type": "markdown", - "id": "76", + "id": "75", "metadata": {}, "source": [ - "At 0 K all three potentials put γ below β. β lies 11.9 meV/atom higher with\n", - "MACE-MATPES-PBE-0, 10.5 with MACE-MATPES-r2SCAN-0 and 4.7 with\n", - "MACE-OMAT-0-medium. For β to become stable, its entropy has to make up\n", - "this difference.\n", - "\n", - "We run γ with the NPT MD at the same temperatures and with Frenkel-Ladd at\n", - "100 K, as for β. The loop is off by default." + "At 0 K β lies above γ by 4.7 meV/atom with MACE-OMAT-0-medium, 11.9 with\n", + "MACE-MATPES-PBE-0 and 10.5 with MACE-MATPES-r2SCAN-0. We run γ like β, with the\n", + "NPT MD and Frenkel-Ladd. The loop is off by default." ] }, { "cell_type": "code", "execution_count": null, - "id": "77", + "id": "76", "metadata": {}, "outputs": [], "source": [ @@ -2430,7 +2106,7 @@ { "cell_type": "code", "execution_count": null, - "id": "78", + "id": "77", "metadata": {}, "outputs": [], "source": [ @@ -2474,7 +2150,7 @@ }, { "cell_type": "markdown", - "id": "79", + "id": "78", "metadata": {}, "source": [ "![G(beta) - G(gamma) and entropies](finite_temperature_phonons_figures/s5_phases.png)\n", @@ -2487,101 +2163,59 @@ "| MATPES-PBE-0 | 7.1 | 5.5 | 3.4 | 1.1 | -1.1 | -2.2 | -1.9 | -0.4 |\n", "| MATPES-r2SCAN-0 | 3.0 | 1.6 | -0.5 | -2.4 | -4.6 | -7.2 | -9.5 | -10.5 |\n", "\n", - "G(β) crosses G(γ) at 278 K with MACE-MATPES-r2SCAN-0 and at 450 K with\n", - "MACE-MATPES-PBE-0. In experiment γ turns into β at 523 to 573 K. With\n", - "MACE-OMAT-0-medium, G(β) is already 0.3 meV/atom below G(γ) at 100 K, so there\n", - "is no crossing in our range. MACE-MATPES-PBE-0 gives a second crossing at\n", - "822 K. The framework of γ already flows there, so it does not count.\n", + "β becomes stable above 278 K with MACE-MATPES-r2SCAN-0 and above 450 K with\n", + "MACE-MATPES-PBE-0, against 523 to 573 K in experiment. With MACE-OMAT-0-medium β\n", + "is already lower at 100 K. The second crossing of MACE-MATPES-PBE-0 at 822 K\n", + "does not count, since γ flows there.\n", "\n", - "- At 100 K the classical F of β lies above that of γ by 0.2 meV/atom with\n", - " MACE-OMAT-0-medium, 7.9 with MACE-MATPES-PBE-0 and 4.1 with\n", - " MACE-MATPES-r2SCAN-0. This is much less than the gap at 0 K. β has softer\n", - " modes, so its vibrations lower its free energy more.\n", - "- At 300 K the entropy of β is 13 to 17 J/(K mol) higher than that of γ.\n", - "- The quantum correction is 17 to 21 meV/atom for each phase at 100 K and\n", - " about 5 meV/atom at 500 K. Most of it cancels in G(β) - G(γ). It lowers the\n", - " difference by 0.5 to 1.1 meV/atom at 100 K and by 0.1 to 0.2 meV/atom at\n", - " 500 K.\n", - "- Each Frenkel-Ladd F has an error of about 0.1 meV/atom, from the spread of\n", - " ⟨U_MLIP - U_E⟩ at each λ. The center-of-mass term of F_E is -1.3 meV/atom.\n", - " Both supercells have 128 atoms and nearly the same springs, so this term\n", - " changes G(β) - G(γ) by only 0.02 meV/atom." + "- β is softer. At 100 K its classical F lies only 0.2 to 7.9 meV/atom above γ,\n", + " much less than the gap at 0 K.\n", + "- The quantum correction is about 5 meV/atom for each phase at 500 K, but it\n", + " changes G(β) - G(γ) by 1.1 meV/atom or less.\n", + "- The error of each Frenkel-Ladd F is about 0.1 meV/atom." ] }, { "cell_type": "markdown", - "id": "80", + "id": "79", "metadata": {}, "source": [ "## What this approach cannot do\n", "\n", - "- **The free energy of α, and so the β to α transition.** Frenkel-Ladd needs a\n", - " structure that is stable at its starting temperature. α exists only with its\n", - " Li disorder. We relaxed 100 orderings of its Li sites with each potential.\n", - " In about 90 of them the PS4 units rotate into a distorted structure that\n", - " matches none of the known phases. The lowest lie 18 to 22 meV/atom above γ.\n", - " So ordered α is not a sound start at 100 K. α needs another method, for\n", - " example a cluster expansion for the Li disorder together with the vibrations.\n", - "- **Melting.** Its free energy needs a reference for the liquid, which\n", - " Frenkel-Ladd does not give.\n", - "- **Hysteresis.** In experiment the transitions happen at different\n", - " temperatures on heating and on cooling. The free energies only give the\n", - " temperature where two phases have the same G. Which phase forms depends also\n", - " on how fast the atoms rearrange.\n", - "\n", - "## Limits of the γ to β temperature\n", - "\n", - "- **The potentials.** γ and β differ by 5 to 12 meV/atom at 0 K, about the\n", - " size of the errors of these potentials. The transition temperature depends on\n", - " this difference, so it can shift by hundreds of kelvin between potentials.\n", - " Kam et al. computed the transitions with DFT, with the vibrational and the\n", - " configurational entropy (arXiv:2307.00878). With r²SCAN they found them 200\n", - " to 300 K below experiment. MACE-MATPES-r2SCAN-0 gives 250 to 300 K below\n", - " experiment. With PBE they found γ never stable. MACE-MATPES-PBE-0 instead\n", - " puts γ below β up to 450 K.\n", - "- **The Li disorder of β.** The MD only samples the disorder that the Li atoms\n", - " reach in 8 ps. Below about 500 K only a few Li hop, so the MD misses part of\n", - " the configurational entropy of β. Its free energy is then too high, which\n", - " moves the transition up.\n", - "- **One ordering of β.** We start from mp-985583. Other orderings start from a\n", - " different energy.\n", - "- **Classical nuclei.** The quantum correction uses a harmonic formula on the\n", - " MD DOS. It is exact only for harmonic vibrations. Its effect on G(β) - G(γ)\n", - " is 1.1 meV/atom or less, and 0.2 meV/atom or less from 500 K.\n", + "- **α.** Its ordered versions relax into distorted structures 18 to 22 meV/atom\n", + " above γ, so Frenkel-Ladd has no stable start. α needs a treatment of its Li\n", + " disorder, for example a cluster expansion.\n", + "- **Melting.** It needs a reference for the liquid.\n", + "- **Kinetics.** The free energies give the equilibrium temperature only, not the\n", + " hysteresis seen in experiment.\n", + "\n", + "## Why the γ to β temperature is off\n", + "\n", + "- **The potentials.** 1 meV/atom in G(β) - G(γ) moves the crossing by about\n", + " 50 K, and the 0 K gaps differ by 7 meV/atom between the potentials. Kam et al.\n", + " found r²SCAN DFT 200 to 300 K too low (arXiv:2307.00878), and\n", + " MACE-MATPES-r2SCAN-0 falls in the same range.\n", + "- **One ordering of β.** Below about 500 K the MD misses part of the Li disorder\n", + " of β.\n", "- **Size and length.** 128 atoms and 8 ps of MD." ] }, { "cell_type": "markdown", - "id": "81", + "id": "80", "metadata": {}, "source": [ "## Known limitations\n", "\n", - "By default the MD runs at constant volume (NVT). At every temperature it keeps\n", - "the volume of the starting structure, as in Section 1. A real crystal expands as\n", - "it heats up, and the expansion changes the phonons. At high temperature, use\n", - "`run_npt=True` as in Section 2. The NPT cell is the average over one MD run, so\n", - "it carries the noise of that run.\n", - "\n", - "The three MACE potentials give no Born charges, so the non-analytical\n", - "correction is not applied here. A `born_maker` can add them, either\n", - "`ForceFieldDielectricMaker` with MACE-Field (see the force field docs of\n", - "atomate2) or a VASP `DielectricMaker`.\n", - "\n", - "The trajectory check uses fixed limits. A Lindemann ratio above 0.15 is reported\n", - "as melting. A displacement from the reference of more than 1.5 times the\n", - "vibration around the mean positions is reported as a shift. These are rules of\n", - "thumb. The limit of 0.15 is the Lindemann ratio at melting of an fcc solid. The\n", - "ratio at melting differs between materials. We did not\n", - "check whether any of the trajectories reported as melted is a liquid. A warning\n", - "is raised and the fit is still done. The ratio is averaged over all atoms. It\n", - "can pass 0.15 when only the light atoms move far, for example Li in a\n", - "superionic conductor, while the rest of the crystal stays solid.\n", - "\n", - "Every result above comes from one MD trajectory. Section 3 shows that runs with\n", - "different settings differ by up to 0.1 THz on average and by up to 0.3 THz in\n", - "the highest frequency. Another `random_seed` gives somewhat different numbers." + "- Without `run_npt=True` the MD keeps the volume of the starting structure. The\n", + " NPT cell comes from one MD run and carries its noise.\n", + "- MACE gives no Born charges, so no non-analytical correction is applied. A\n", + " `born_maker` adds it, either `ForceFieldDielectricMaker` with MACE-Field or a\n", + " VASP `DielectricMaker`.\n", + "- The trajectory check uses fixed limits. The Lindemann limit of 0.15 is that of\n", + " fcc solids, and light atoms that hop can pass it while the crystal stays solid.\n", + "- Each result comes from one trajectory. Runs differ by up to 0.1 THz on average\n", + " and 0.3 THz in the highest frequency (Section 3)." ] } ], From ef3339bcfa336d9990c09f465f3ab73b72bac808 Mon Sep 17 00:00:00 2001 From: Hrushikesh Sahasrabuddhe <111614145+hrushikesh-s@users.noreply.github.com> Date: Tue, 6 Oct 2026 18:04:14 -0700 Subject: [PATCH 43/43] Plot the NPT band structures in the finite-temperature tutorial --- tutorials/finite_temperature_phonons.ipynb | 152 ++++++++++++------ .../s2_bands_AlAsPt5.png | Bin 0 -> 117486 bytes .../s2_bands_Bi4S3N2.png | Bin 0 -> 104042 bytes .../s2_bands_Ca3Ir4Sn13.png | Bin 0 -> 113426 bytes .../s2_bands_Er5Tl3.png | Bin 0 -> 119333 bytes .../s2_bands_Zn3P2.png | Bin 0 -> 106753 bytes 6 files changed, 100 insertions(+), 52 deletions(-) create mode 100644 tutorials/finite_temperature_phonons_figures/s2_bands_AlAsPt5.png create mode 100644 tutorials/finite_temperature_phonons_figures/s2_bands_Bi4S3N2.png create mode 100644 tutorials/finite_temperature_phonons_figures/s2_bands_Ca3Ir4Sn13.png create mode 100644 tutorials/finite_temperature_phonons_figures/s2_bands_Er5Tl3.png create mode 100644 tutorials/finite_temperature_phonons_figures/s2_bands_Zn3P2.png diff --git a/tutorials/finite_temperature_phonons.ipynb b/tutorials/finite_temperature_phonons.ipynb index 419290f044..5726ffe022 100644 --- a/tutorials/finite_temperature_phonons.ipynb +++ b/tutorials/finite_temperature_phonons.ipynb @@ -523,8 +523,12 @@ "metadata": {}, "outputs": [], "source": [ - "def plot_temperatures(name: str, with_dos: bool) -> None:\n", - " \"\"\"Plot the band structures of one material at 100, 500 and 900 K.\"\"\"\n", + "def plot_temperatures(name: str, with_dos: bool, label: str | None = None) -> None:\n", + " \"\"\"Plot the band structures of one material at 100, 500 and 900 K.\n", + "\n", + " label picks the runs of Section 2, \"relaxed\" or \"npt\". None picks Section 1.\n", + " \"\"\"\n", + " suffix = () if label is None else (label,)\n", " ratios = [3, 1] * len(MODEL_FILES) if with_dos else [3] * len(MODEL_FILES)\n", " fig, axes = plt.subplots(\n", " 1,\n", @@ -542,7 +546,7 @@ " for temperature in (100, 500, 900):\n", " plot_bands(\n", " ax,\n", - " docs[name, model, temperature].phonon_bandstructure,\n", + " docs[(name, model, temperature, *suffix)].phonon_bandstructure,\n", " label=f\"{temperature} K\",\n", " color=colors[temperature],\n", " lw=0.6,\n", @@ -552,13 +556,13 @@ " for temperature in TEMPERATURES:\n", " plot_dos(\n", " axes[step * idx + 1],\n", - " docs[name, model, temperature].phonon_dos,\n", + " docs[(name, model, temperature, *suffix)].phonon_dos,\n", " label=f\"{temperature} K\",\n", " color=colors[temperature],\n", " )\n", " axes[0].set_ylabel(\"Frequency (THz)\")\n", " axes[-1].legend(fontsize=8)\n", - " fig.suptitle(name, y=1.02)\n", + " fig.suptitle(name if label is None else f\"{name}, {label} cell\", y=1.02)\n", " plt.show()\n", "\n", "\n", @@ -815,6 +819,50 @@ "cell_type": "markdown", "id": "33", "metadata": {}, + "source": [ + "The next cell plots the bands in the NPT cell at 100, 500 and 900 K, as in\n", + "Section 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34", + "metadata": {}, + "outputs": [], + "source": [ + "if RUN_NPT:\n", + " for name in (\"Ca3Ir4Sn13\", \"AlAsPt5\", \"Zn3P2\", \"Bi4S3N2\", \"Er5Tl3\"):\n", + " plot_temperatures(name, with_dos=name in (\"Ca3Ir4Sn13\", \"Zn3P2\"), label=\"npt\")" + ] + }, + { + "cell_type": "markdown", + "id": "35", + "metadata": {}, + "source": [ + "The figures below show our runs.\n", + "\n", + "![Band structures of Ca3Ir4Sn13 in the NPT cell at 100, 500 and 900 K](finite_temperature_phonons_figures/s2_bands_Ca3Ir4Sn13.png)\n", + "\n", + "![Band structures of AlAsPt5 in the NPT cell at 100, 500 and 900 K](finite_temperature_phonons_figures/s2_bands_AlAsPt5.png)\n", + "\n", + "![Band structures of Zn3P2 in the NPT cell at 100, 500 and 900 K](finite_temperature_phonons_figures/s2_bands_Zn3P2.png)\n", + "\n", + "![Band structures of Bi4S3N2 in the NPT cell at 100, 500 and 900 K](finite_temperature_phonons_figures/s2_bands_Bi4S3N2.png)\n", + "\n", + "![Band structures of Er5Tl3 in the NPT cell at 100, 500 and 900 K](finite_temperature_phonons_figures/s2_bands_Er5Tl3.png)\n", + "\n", + "- From 100 to 900 K the highest frequency drops by 0.3 to 3.2 THz in the NPT\n", + " cell, against at most 2.3 THz in the PBEsol cell of Section 1.\n", + "- AlAsPt5 barely changes in the PBEsol cell, but softens by 0.3 to 0.6 THz in\n", + " the NPT cell." + ] + }, + { + "cell_type": "markdown", + "id": "36", + "metadata": {}, "source": [ "## Our results\n", "\n", @@ -825,7 +873,7 @@ { "cell_type": "code", "execution_count": null, - "id": "34", + "id": "37", "metadata": {}, "outputs": [], "source": [ @@ -961,7 +1009,7 @@ }, { "cell_type": "markdown", - "id": "35", + "id": "38", "metadata": {}, "source": [ "![Volume against temperature](finite_temperature_phonons_figures/s2_volume.png)\n", @@ -986,7 +1034,7 @@ }, { "cell_type": "markdown", - "id": "36", + "id": "39", "metadata": {}, "source": [ "## 3. MD length and number of snapshots\n", @@ -1000,7 +1048,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37", + "id": "40", "metadata": {}, "outputs": [], "source": [ @@ -1025,7 +1073,7 @@ { "cell_type": "code", "execution_count": null, - "id": "38", + "id": "41", "metadata": {}, "outputs": [], "source": [ @@ -1090,7 +1138,7 @@ }, { "cell_type": "markdown", - "id": "39", + "id": "42", "metadata": {}, "source": [ "![Difference from AIMD against MD length and snapshots](finite_temperature_phonons_figures/s3_knaicl_grid.png)\n", @@ -1122,7 +1170,7 @@ }, { "cell_type": "markdown", - "id": "40", + "id": "43", "metadata": {}, "source": [ "## 4. Li3PS4, a crystal that is unstable at 0 K\n", @@ -1138,7 +1186,7 @@ { "cell_type": "code", "execution_count": null, - "id": "41", + "id": "44", "metadata": {}, "outputs": [], "source": [ @@ -1150,7 +1198,7 @@ }, { "cell_type": "markdown", - "id": "42", + "id": "45", "metadata": {}, "source": [ "## Phonons at 0 K\n", @@ -1162,7 +1210,7 @@ { "cell_type": "code", "execution_count": null, - "id": "43", + "id": "46", "metadata": {}, "outputs": [], "source": [ @@ -1195,7 +1243,7 @@ }, { "cell_type": "markdown", - "id": "44", + "id": "47", "metadata": {}, "source": [ "Our run took 2 minutes. The lowest frequency is -2.59 THz. With\n", @@ -1204,7 +1252,7 @@ }, { "cell_type": "markdown", - "id": "45", + "id": "48", "metadata": {}, "source": [ "## One temperature\n", @@ -1215,7 +1263,7 @@ { "cell_type": "code", "execution_count": null, - "id": "46", + "id": "49", "metadata": {}, "outputs": [], "source": [ @@ -1239,7 +1287,7 @@ }, { "cell_type": "markdown", - "id": "47", + "id": "50", "metadata": {}, "source": [ "Our run took 31 minutes. The volume grows from 664.8 to 698.5 ų. The lowest\n", @@ -1249,7 +1297,7 @@ }, { "cell_type": "markdown", - "id": "48", + "id": "51", "metadata": {}, "source": [ "## All runs\n", @@ -1261,7 +1309,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49", + "id": "52", "metadata": {}, "outputs": [], "source": [ @@ -1285,7 +1333,7 @@ }, { "cell_type": "markdown", - "id": "50", + "id": "53", "metadata": {}, "source": [ "The next cell plots the bands at 0, 300 and 700 K. Every run keeps the Pnma\n", @@ -1295,7 +1343,7 @@ { "cell_type": "code", "execution_count": null, - "id": "51", + "id": "54", "metadata": {}, "outputs": [], "source": [ @@ -1327,7 +1375,7 @@ }, { "cell_type": "markdown", - "id": "52", + "id": "55", "metadata": {}, "source": [ "The figures below show our runs.\n", @@ -1341,7 +1389,7 @@ }, { "cell_type": "markdown", - "id": "53", + "id": "56", "metadata": {}, "source": [ "## Our results\n", @@ -1352,7 +1400,7 @@ { "cell_type": "code", "execution_count": null, - "id": "54", + "id": "57", "metadata": {}, "outputs": [], "source": [ @@ -1413,7 +1461,7 @@ }, { "cell_type": "markdown", - "id": "55", + "id": "58", "metadata": {}, "source": [ "![Lowest frequency, Lindemann ratio and volume of Li3PS4](finite_temperature_phonons_figures/s4_runs.png)\n", @@ -1429,7 +1477,7 @@ }, { "cell_type": "markdown", - "id": "56", + "id": "59", "metadata": {}, "source": [ "## 5. Li3PS4 with hopping Li\n", @@ -1445,7 +1493,7 @@ { "cell_type": "code", "execution_count": null, - "id": "57", + "id": "60", "metadata": {}, "outputs": [], "source": [ @@ -1482,7 +1530,7 @@ }, { "cell_type": "markdown", - "id": "58", + "id": "61", "metadata": {}, "source": [ "## Diffusion\n", @@ -1494,7 +1542,7 @@ { "cell_type": "code", "execution_count": null, - "id": "59", + "id": "62", "metadata": {}, "outputs": [], "source": [ @@ -1530,7 +1578,7 @@ { "cell_type": "code", "execution_count": null, - "id": "60", + "id": "63", "metadata": {}, "outputs": [], "source": [ @@ -1583,7 +1631,7 @@ }, { "cell_type": "markdown", - "id": "61", + "id": "64", "metadata": {}, "source": [ "![Diffusion coefficients of Li3PS4](finite_temperature_phonons_figures/s5_diffusion.png)\n", @@ -1605,7 +1653,7 @@ }, { "cell_type": "markdown", - "id": "62", + "id": "65", "metadata": {}, "source": [ "## Vibrational DOS\n", @@ -1621,7 +1669,7 @@ { "cell_type": "code", "execution_count": null, - "id": "63", + "id": "66", "metadata": {}, "outputs": [], "source": [ @@ -1658,7 +1706,7 @@ { "cell_type": "code", "execution_count": null, - "id": "64", + "id": "67", "metadata": {}, "outputs": [], "source": [ @@ -1695,7 +1743,7 @@ }, { "cell_type": "markdown", - "id": "65", + "id": "68", "metadata": {}, "source": [ "![Li DOS below 5 THz and P-S stretch, MD against fit](finite_temperature_phonons_figures/s5_vdos.png)\n", @@ -1724,7 +1772,7 @@ }, { "cell_type": "markdown", - "id": "66", + "id": "69", "metadata": {}, "source": [ "## Free energy from the MD\n", @@ -1743,7 +1791,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67", + "id": "70", "metadata": {}, "outputs": [], "source": [ @@ -1863,7 +1911,7 @@ }, { "cell_type": "markdown", - "id": "68", + "id": "71", "metadata": {}, "source": [ "On a Cu-Ag crystal with EMT at 10 K, these functions gave 0.247542 ± 0.000087 eV\n", @@ -1874,7 +1922,7 @@ { "cell_type": "code", "execution_count": null, - "id": "69", + "id": "72", "metadata": {}, "outputs": [], "source": [ @@ -1888,7 +1936,7 @@ { "cell_type": "code", "execution_count": null, - "id": "70", + "id": "73", "metadata": {}, "outputs": [], "source": [ @@ -1932,7 +1980,7 @@ { "cell_type": "code", "execution_count": null, - "id": "71", + "id": "74", "metadata": {}, "outputs": [], "source": [ @@ -2009,7 +2057,7 @@ }, { "cell_type": "markdown", - "id": "72", + "id": "75", "metadata": {}, "source": [ "![Free energy and entropy of Li3PS4](finite_temperature_phonons_figures/s5_thermo.png)\n", @@ -2034,7 +2082,7 @@ }, { "cell_type": "markdown", - "id": "73", + "id": "76", "metadata": {}, "source": [ "## γ against β\n", @@ -2047,7 +2095,7 @@ { "cell_type": "code", "execution_count": null, - "id": "74", + "id": "77", "metadata": {}, "outputs": [], "source": [ @@ -2072,7 +2120,7 @@ }, { "cell_type": "markdown", - "id": "75", + "id": "78", "metadata": {}, "source": [ "At 0 K β lies above γ by 4.7 meV/atom with MACE-OMAT-0-medium, 11.9 with\n", @@ -2083,7 +2131,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76", + "id": "79", "metadata": {}, "outputs": [], "source": [ @@ -2106,7 +2154,7 @@ { "cell_type": "code", "execution_count": null, - "id": "77", + "id": "80", "metadata": {}, "outputs": [], "source": [ @@ -2150,7 +2198,7 @@ }, { "cell_type": "markdown", - "id": "78", + "id": "81", "metadata": {}, "source": [ "![G(beta) - G(gamma) and entropies](finite_temperature_phonons_figures/s5_phases.png)\n", @@ -2177,7 +2225,7 @@ }, { "cell_type": "markdown", - "id": "79", + "id": "82", "metadata": {}, "source": [ "## What this approach cannot do\n", @@ -2202,7 +2250,7 @@ }, { "cell_type": "markdown", - "id": "80", + "id": "83", "metadata": {}, "source": [ "## Known limitations\n", diff --git a/tutorials/finite_temperature_phonons_figures/s2_bands_AlAsPt5.png b/tutorials/finite_temperature_phonons_figures/s2_bands_AlAsPt5.png new file mode 100644 index 0000000000000000000000000000000000000000..52408670dee877eb1878ebc43f18e38d61761293 GIT binary patch literal 117486 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 literal 0 HcmV?d00001 diff --git a/tutorials/finite_temperature_phonons_figures/s2_bands_Ca3Ir4Sn13.png b/tutorials/finite_temperature_phonons_figures/s2_bands_Ca3Ir4Sn13.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7d822cd03ae1c7031e4f198859e17ab2411f94 GIT binary patch literal 113426 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

$WGFSobhL@ou!n0z(v#!=-*`Y3XDXe@TiW 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 literal 0 HcmV?d00001

oh+-E0?+5r@2mR-0} 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