diff --git a/doc/html/tutorial/1.5._Settings_and_Library_classes.html b/doc/html/tutorial/1.5._Settings_and_Library_classes.html deleted file mode 100644 index 0eb90362..00000000 --- a/doc/html/tutorial/1.5._Settings_and_Library_classes.html +++ /dev/null @@ -1,1383 +0,0 @@ - - - - - - - Introduction to atomman: Settings and Library — atomman 1.3.7 documentation - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
-

Introduction to atomman: Settings and Library

-

Lucas M. Hale, lucas.hale@nist.gov, Materials Science and Engineering Division, NIST.

-

Disclaimers

-
-

1. Introduction

-

Added version 1.3.3

-

The atomman package inherits Settings and Library from the potentials package. The associated classes can be used to manage interactions with the NIST potentials reference library.

-

Library Imports

-
-
[1]:
-
-
-
-# Standard libraries
-from pathlib import Path
-import datetime
-
-# https://github.com/usnistgov/atomman
-import atomman as am
-
-# Show atomman version
-print('atomman version =', am.__version__)
-
-# Show date of Notebook execution
-print('Notebook executed on', datetime.date.today())
-
-
-
-
-
-
-
-
-atomman version = 1.3.7
-Notebook executed on 2021-02-19
-
-
-
-
-

2. Settings

-

The atomman.Settings class is a shortcut to the potentials.Settings class. This allows for atomman, potentials, and iprPy to all share the same settings and local reference library.

-
-
[2]:
-
-
-
-settings = am.Settings()
-
-# Show that atomman.Settings == potentials.Settings
-print(repr(settings))
-
-
-
-
-
-
-
-
-<potentials.Settings.Settings object at 0x0000011DB1FEEB88>
-
-
-
-

2.1. Set directory locations

-
    -
  • directory is the location where the settings.json file is to be found. The default directory is .NISTpotentials in the user’s home directory. This can be changed with Settings.set_directory(), but should only be done if multiple users/environments with different home directories are sharing settings.

  • -
  • library_directory is the location where the local library of reference records is located. By default, this is inside the directory above. It is recommended that it be set to somewhere more accessible if you wish to examine, modify or add to the reference records.

  • -
-
-
[3]:
-
-
-
-print('Settings directory is', settings.directory)
-print('Library directory is', settings.library_directory)
-
-
-
-
-
-
-
-
-Settings directory is C:\Users\lmh1\.NISTpotentials
-Library directory is C:\Users\lmh1\Documents\library
-
-
-
-
[4]:
-
-
-
-# Change the settings directory - Not recommended
-#settings.set_directory(<PATH>)
-
-# Change the library directory - Recommended
-#settings.set_library_directory(<PATH>)
-
-print('Settings directory is', settings.directory)
-print('Library directory is', settings.library_directory)
-
-
-
-
-
-
-
-
-Settings directory is C:\Users\lmh1\.NISTpotentials
-Library directory is C:\Users\lmh1\Documents\library
-
-
-
-
-

2.2. Set default database parameters

-
    -
  • local indicates the default value for the local parameter to use when initializing a Library object (below), with a value of True indicating that the local library directory will be searched for matching records.

  • -
  • remote indicates the default value for the remote parameter to use when initializing a Library object (below), with a value of True indicating that the remote database https://potentials.nist.gov/ will be searched for matching records.

  • -
-
-
[5]:
-
-
-
-print('Default local parameter is', settings.local)
-print('Default remote parameter is', settings.remote)
-
-
-
-
-
-
-
-
-Default local parameter is True
-Default remote parameter is True
-
-
-
-
[6]:
-
-
-
-# Change the local and remote parameters
-#settings.set_local(True)
-#settings.set_remote(False)
-
-print('Default local parameter is', settings.local)
-print('Default remote parameter is', settings.remote)
-
-
-
-
-
-
-
-
-Default local parameter is True
-Default remote parameter is True
-
-
-
-
-
-

3. Database interface

-

The atomman.library.Database class is a subclass of potentials.Database and extends it to provide support for crystal structure references in addition to the potentials references. The class is used by atomman.load() for ‘prototype’ and ‘crystal’ styles and by atomman.load_lammps_potential. The class can also be directly accessed and used to explore the database for more involved -investigations.

-

See the documentation notebooks for the potentials package for more details on interacting with the potentials records.

-
-

3.1. Initialize a Database object

-

Access parameters. Only change these if you are accessing an alternate database and/or have permission to add content.

-
    -
  • host (str, optional) CDCS site to access. Default value is ‘https://potentials.nist.gov/’.

  • -
  • username (str, optional) User name to use to access the host site. Default value of ’’ will access the site as an anonymous visitor.

  • -
  • password (str, optional) Password associated with the given username. Not needed for anonymous access.

  • -
  • certification (str, optional) File path to certification file if needed for host.

  • -
-

Settings options. These allow the default settings from above to be overridden.

-
    -
  • localpath (str, optional) Path to the local library directory to use. If not given, will use the set library_directory setting.

  • -
  • local (bool, optional) Indicates if the load operations will check localpath for records. Default value is controlled by settings.

  • -
  • remote (bool, optional) Indicates if the load operations will download records from the remote database. Default value is controlled by settings. If a local copy exists, then setting this to False is considerably faster.

  • -
-

Other options

-
    -
  • verbose (bool, optional) If True, info messages will be printed during operations. Default value is False.

  • -
  • load (bool, str or list, optional) If True, citations, potentials and lammps_potentials will all be loaded during initialization. If False (default), none will be loaded. Alternatively, a str or list can be given to specify which of the three record types to load.

  • -
  • status (str, list or None, optional) Only potential_LAMMPS records with the given status(es) will be loaded. Allowed values are ‘active’ (default), ‘superseded’, and ‘retracted’. If None is given, then all potentials will be loaded.

  • -
-
-
[7]:
-
-
-
-# Load Database with default settings
-potdb = am.library.Database()
-print('localpath =', potdb.localpath)
-print('local =', potdb.local)
-print('remote =', potdb.remote)
-
-
-
-
-
-
-
-
-localpath = C:\Users\lmh1\Documents\library
-local = True
-remote = True
-
-
-
-
-

3.2. Exploring crystal prototypes

-
-

3.2.1. Load crystal prototypes

-

The current prototypes in the local and/or remote database can be loaded into memory using the load_crystal_prototypes() method.

-
    -
  • localpath (str, optional) Path to a local directory to check for records first. If not given, will check localpath value set during object initialization. If not given or set during initialization, then only the remote database will be loaded.

  • -
  • local (bool, optional) Indicates if records in localpath are to be loaded. If not given, will use the local value set during initialization.

  • -
  • remote (bool, optional) Indicates if the records in the remote database are to be loaded. Setting this to be False is useful/faster if a local copy of the database exists. If not given, will use the local value set during initialization.

  • -
  • verbose (bool, optional) If True, info messages will be printed during operations. Default value is False.

  • -
-
-
[8]:
-
-
-
-potdb.load_crystal_prototypes(verbose=True)
-
-
-
-
-
-
-
-
-Loaded 19 local crystal prototypes
-Loaded 19 remote crystal prototypes
- - 0 new
-
-
-
-
-

3.2.2. Get crystal prototype(s)

-

The get_crystal_prototype() and get_crystal_prototypes() methods can be used to find one or all crystal prototypes that match the given parameters.

-

Note that how the get methods work depends on if the associated records have been loaded. If not loaded, then the get methods will query the remote database. If loaded, then the get methods will search the set of loaded local+remote entries. The two variations should, but are not guaranteed, to behave identically.

-
    -
  • id (str or list, optional) Prototype ID(s) to search for. These are unique identifiers for each prototype based on comm.

  • -
  • key (str or list, optional) UUID4 key(s) to search for. Each entry has a unique random-generated UUID4 key.

  • -
  • name (str or list, optional) Common name(s) to limit the search by.

  • -
  • prototype (str or list, optional) Prototype identifying composition(s) to limit the search by.

  • -
  • pearson (str or list, optional) The Pearson symbol(s) to limit the search by.

  • -
  • strukturbericht (str or list, optional) The strukturbericht identifier(s) to limit the search by.

  • -
  • sg_number (int or list, optional) The space group number(s) to limit the search by.

  • -
  • sg_hm (str or list, optional) The space group Hermann-Maguin identifier(s) to limit the search by.

  • -
  • sg_schoenflies (str or list, optional) The space group Schoenflies identifier(s) to limit the search by.

  • -
  • keyword (str, optional) If given, will limit the search to all records that contain the keyword substring. Cannot be combined with any of the above parameters.

  • -
  • verbose (bool, optional) If True, info messages will be printed during operations. Default value is False.

  • -
-
-
[9]:
-
-
-
-prototype = potdb.get_crystal_prototype(keyword='hcp')
-
-
-
-
-
-
-
-
-Multiple matching crystal prototypes found.
-1 A3'--alpha-La--double-hcp
-2 A3--Mg--hcp
-Select which one: 2
-
-
-

The returned CrystalPrototype object(s) have attributes associated with their metadata information as well as an atomman.System of the unit cell.

-
-
[10]:
-
-
-
-print(prototype.id)
-print(prototype.ucell)
-
-
-
-
-
-
-
-
-A3--Mg--hcp
-avect =  [ 1.000,  0.000,  0.000]
-bvect =  [-0.500,  0.866,  0.000]
-cvect =  [ 0.000,  0.000,  1.633]
-origin = [ 0.000,  0.000,  0.000]
-natoms = 2
-natypes = 1
-symbols = (None,)
-pbc = [ True  True  True]
-per-atom properties = ['atype', 'pos']
-     id |   atype |  pos[0] |  pos[1] |  pos[2]
-      0 |       1 |   0.000 |   0.000 |   0.000
-      1 |       1 |   0.000 |   0.577 |   0.816
-
-
-
-
-

3.2.3. download_crystal_prototypes

-

The download_crystal_prototypes method will download all entries in the remote to the local.

-
    -
  • localpath (path-like object, optional) Path to a local directory where the files will be saved to. If not given, will use the localpath value set during object initialization.

  • -
  • prototypes (list of CrystalPrototype, optional) A list of crystal prototypes to download. If not given, all prototypes will be downloaded.

  • -
  • format (str, optional) The file format to save the record files as. Allowed values are ‘xml’ and ‘json’ (default).

  • -
  • indent (int, optional) The indentation spacing size to use for the locally saved record files. If not given, the JSON/XML content will be compact.

  • -
  • verbose (bool, optional) If True, info messages will be printed during operations. Default value is False.

  • -
-
-
[11]:
-
-
-
-#potdb.download_crystal_prototypes(format='json', indent=4, verbose=True)
-
-
-
-
-
-

3.2.4. crystal_prototypes and crystal_prototypes_df

-

Calling load_crystal_prototypes builds crystal_prototypes, a numpy array containing all CrystalPrototype objects, and crystal_prototypes_df, a pandas DataFrame of the prototype metadata. Combined, these allow for more involved custom explorations of the loaded prototypes.

-
-
[12]:
-
-
-
-# Display the metadata for all prototypes
-potdb.crystal_prototypes_df
-
-
-
-
-
[12]:
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
keyidnameprototypepearsonstrukturberichtsg_numbersg_hmsg_schoenfliesucellcrystal_familynatypesabcalphabetagammanatoms
0d30980ad-ae18-425d-84cb-abf08577bdc8A1--Cu--fccface-centered cubicCucF4A1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic11.01.01.00000090.090.090.04
2f4101896-1e17-4736-a4d1-308b8934e8ceA15--Cr3Sibeta-tungstenCr3SicP8A15223P m -3 nOh^3avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic21.01.01.00000090.090.090.08
1e0126715-c7db-4d79-be80-707c572bebd6A15--beta-Wbeta-tungstenb-WcP8A15223P m -3 nOh^3avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic11.01.01.00000090.090.090.08
3bc13827d-e1e6-4d70-8c3a-59399ad78b0fA2--W--bccbody-centered cubicWcI2A2229I m -3 mOh^9avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic11.01.01.00000090.090.090.02
4154d1a2b-04da-4477-8962-a0ca0c17c8fcA3'--alpha-La--double-hcpdouble hcpLahP4A3'194P 6_3/m m cD6h^4avect = [ 1.000, 0.000, 0.000]\nbvect = [-...hexagonal11.01.03.26598690.090.0120.04
54dab7fbb-108a-425e-8adb-d55de7b1134bA3--Mg--hcphexagonal close-packedMghP2A3194P 6_3/m m cD6h^4avect = [ 1.000, 0.000, 0.000]\nbvect = [-...hexagonal11.01.01.63299390.090.0120.02
612654c83-c153-4b58-8805-f6dce43b7842A4--C--dcdiamond cubicCcF8A4227F d -3 mOh^7avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic11.01.01.00000090.090.090.08
7821526c5-561e-4f09-8a04-680419dc1495A5--beta-Snwhite tinb-SntI4A5141I 4_1/a m dD4h^19avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...tetragonal11.01.00.55000090.090.090.04
876cbf2c1-fa86-41c4-85ae-c24f55c9f13aA6--In--bctbody-centered tetragonalIntI2A6139I 4/m m mD4h^17avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...tetragonal11.01.01.50000090.090.090.02
9c1e15cf8-6998-40ce-afbd-0b1cb6271a1fA7--alpha-Asalpha Asa-AshR6A7166R -3 mD3d^5avect = [ 1.000, 0.000, 0.000]\nbvect = [-...hexagonal11.01.02.77700090.090.0120.06
10ceb6d7cc-b20e-4878-8b2b-1e62185d16afAh--alpha-Po--scsimple cubica-PocP1Ah221P m -3 mOh^1avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic11.01.01.00000090.090.090.01
11133ca871-c927-4073-ae46-b8a27e035f4bB1--NaCl--rock-saltrock saltNaClcF8B1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic21.01.01.00000090.090.090.08
127398b231-fd55-4378-b6b2-6607262d3090B2--CsClcesium chlorideCsClcP2B2221P m -3 mOh^1avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic21.01.01.00000090.090.090.02
13ce517a32-6bca-47d0-82a2-2ee48956cff9B3--ZnS--cubic-zinc-blendecubic zinc-blendec-ZnScF8B3216F -4 3 mTd^2avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic21.01.01.00000090.090.090.08
1474171ba0-6605-4956-b8d5-0059672ee7e2C1--CaF2--fluoritefluoriteCaF2cF12C1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic21.01.01.00000090.090.090.012
158a2eb4b8-1302-46d9-992d-4296c227d966D0_3--BiF3BiF3BiF3cF16D0_3225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic21.01.01.00000090.090.090.016
16f7b8d5d9-b0eb-401a-9cc3-038170e3ac1cL1_0--AuCuAuCuAuCutP2L1_0123P 4/m m mD4h^1avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...tetragonal21.01.01.30960090.090.090.02
17942ce385-85ab-4cb9-8adc-4bdaaf145831L1_2--AuCu3AuCu3AuCu3cP4L1_2221P m -3 mOh^1avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic21.01.01.00000090.090.090.04
180fb6d590-5ce5-4476-a1bf-7130f96f2af1L2_1--AlCu2Mn--heuslerheuslerAlCu2MncF16L2_1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\nbvect = [ ...cubic31.01.01.00000090.090.090.016
-
-
-
-
[13]:
-
-
-
-# Find the listings in df that are tetragonal
-is_tetragonal = potdb.crystal_prototypes_df.crystal_family == 'tetragonal'
-
-# Use is_tetragonal mask to retrieve the associated prototypes
-for prototype in potdb.crystal_prototypes[is_tetragonal]:
-    print(prototype.id)
-
-
-
-
-
-
-
-
-A5--beta-Sn
-A6--In--bct
-L1_0--AuCu
-
-
-
-
-
-

3.3. Exploring relaxed crystals

-

The Database object has built-in methods for exploring the relaxed crystals in a similar manner as the crystal prototypes:

-
    -
  • load_relaxed_crystals() builds listings for all relaxed crystals from local and/or remote

  • -
  • relaxed_crystals and relaxed_crystals_df are the listings built by load_relaxed_crystals()

  • -
  • get_relaxed_crystals() and get_relaxed_crystal() retrieve matching entries

  • -
  • download_relaxed_crystals() downloads all remote entries to local

  • -
-

HOWEVER, many of these operations are incredibly slow due to the large number of relaxed crystal entries. There are two suggested methods to best reduce the processing time, which are listed below.

-
-

3.3.1. Remote-only searches

-

The simplest method is to call get_relaxed_crystals() or get_relaxed_crystal() without calling load_relaxed_crystals(). This will send queries to the remote database to retrieve matching records. Giving parameters that limit the search to as few entries as possible will reduce the amount of information that needs to be downloaded.

-

Limitations: Requires internet access, no user-defined local entries will be included, and each search involves a separate internet request.

-

Parameters for get_relaxed_crystals and get_relaxed_crystal

-
    -
  • key (str or list, optional) UUID4 key(s) to search for. Each entry has a unique random-generated UUID4 key.

  • -
  • method (str or list or None, optional) The relaxation method used. Allowed values are dynamic, static and box. Default value is dynamic (the most rigorous relaxation method). All will be loaded if set to None.

  • -
  • standing (str or list or None, optional) “good” records are the unique crystals found with the most rigorous relaxation, and with known prototypes over DFT structures. “bad” are records filtered out, usually for being duplicates. Default value is “good”. All will be loaded if set to None.

  • -
  • family (str or atomman.library.CrystalPrototype or list, optional) The crystal family associated with the relaxed crystal - either crystal prototype name or MP/OQMD database entry name.

  • -
  • parent_key (str or list, optional) The UUID4 key(s) assigned to the calculation that the record is based on.

  • -
  • potential (atomman.lammps.Potential or list, optional) A loaded LAMMPS potential object to limit the search by.

  • -
  • potential_LAMMPS_id (str or list, optional) The id for a LAMMPS implemented potential to limit the search by.

  • -
  • potential_LAMMPS_key (str or list, optional) The UUID4 for a LAMMPS implemented potential to limit the search by.

  • -
  • potential_id (str or list, optional) The id for a potential to limit the search by.

  • -
  • potential_key (str or list, optional) The UUID4 for a potential to limit the search by.

  • -
  • symbols (str or list, optional) Element symbols in the crystal to limit the search by.

  • -
  • natypes (int or list, optional) The number of unique element model symbols in the crystal to limit the search by.

  • -
  • natoms (int or list, optional) The number of unique atoms in the crystal’s unit cell to limit the search by.

  • -
  • keyword (str, optional) If given, will limit the search to all records that contain the keyword substring. Cannot be combined with any of the above parameters.

  • -
  • verbose (bool, optional) If True, info messages will be printed during operations. Default value is False.

  • -
-
-
[14]:
-
-
-
-# Fetch all records for fcc gold
-fcc_gold = potdb.get_relaxed_crystals(family='A1--Cu--fcc', symbols=['Au'])
-
-# List the matches, the a lattice constant and the associated potential
-print('alat    Ecoh   potential_LAMMPS_id')
-for crystal in fcc_gold:
-    print(f'{crystal.ucell.box.a:.4f} {crystal.cohesive_energy:.4f} {crystal.potential_LAMMPS_id}')
-
-
-
-
-
-
-
-
-alat    Ecoh   potential_LAMMPS_id
-4.0685 -4.2994 2012--Norman-G-E--Au--LAMMPS--ipr1
-4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr2
-4.0801 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr2
-4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr1
-4.0798 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr1
-4.0800 -3.9300 1986--Foiles-S-M--Au--LAMMPS--ipr1
-4.0800 -3.9300 1986--Foiles-S-M--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1
-4.0780 -3.9300 2017--Purja-Pun-G-P--Au--LAMMPS--ipr1
-4.0800 -3.9300 1989--Adams-J-B--Au--LAMMPS--ipr1
-4.0800 -3.9300 1989--Adams-J-B--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1
-4.0701 -3.9242 2005--Grochola-G--Au--LAMMPS--ipr1
-4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr1
-4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr2
-4.0800 -3.8100 2010--Olsson-P-A-T--Au--LAMMPS--ipr1
-4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr2
-4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr1
-4.1529 -3.0332 2017--OBrien-C-J--Pt-Au--LAMMPS--ipr1
-6.2107 -0.6133 2012--Norman-G-E--Au--LAMMPS--ipr1
-
-
-
-
-

3.3.2. Local-only searches

-

The other recommended method is to load only records from the local and then perform the get searches. Doing this, of course, requires that any relaxed crystal records first be downloaded to the local library directory, which can be done one of two ways

-
    -
  1. First performing a remote-only search as mentioned above, then passing the list of matching records as parameters to the download_relaxed_crystals() method. This allows for records of interest to be saved for accessing later.

  2. -
  3. If you want all available entries in the local copy, download or clone the git repository at https://github.com/lmhale99/potentials-library to the local library directory. While all the entries can be downloaded using download_relaxed_crystals(), doing so is incredibly slow.

  4. -
-

Either way, once the crystal records are in the local directory they can be loaded with load_relaxed_crystals(remote=False), and then the get_relaxed_crystals() and get_relaxed_crystal() methods will work without needing internet access.

-
-
[15]:
-
-
-
-potdb.load_relaxed_crystals(remote=False, verbose=True)
-
-
-
-
-
-
-
-
-Loaded 59326 local relaxed crystals
-
-
-
-
[16]:
-
-
-
-# Fetch all records for fcc gold
-fcc_gold = potdb.get_relaxed_crystals(family='A1--Cu--fcc', symbols=['Au'])
-
-# List the matches, the a lattice constant and the associated potential
-print('alat    Ecoh   potential_LAMMPS_id')
-for crystal in fcc_gold:
-    print(f'{crystal.ucell.box.a:.4f} {crystal.cohesive_energy:.4f} {crystal.potential_LAMMPS_id}')
-
-
-
-
-
-
-
-
-alat    Ecoh   potential_LAMMPS_id
-4.0800 -3.9300 1989--Adams-J-B--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1
-4.0800 -3.8100 2010--Olsson-P-A-T--Au--LAMMPS--ipr1
-7.8429 -0.8357 2020--Starikov-S--Si-Au-Al--LAMMPS--ipr1
-4.0701 -3.9242 2005--Grochola-G--Au--LAMMPS--ipr1
-4.0800 -3.9300 1986--Foiles-S-M--Au--LAMMPS--ipr1
-4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr1
-4.0685 -4.2994 2012--Norman-G-E--Au--LAMMPS--ipr1
-4.1499 -3.8612 2020--Starikov-S--Si-Au-Al--LAMMPS--ipr1
-4.0780 -3.9300 2017--Purja-Pun-G-P--Au--LAMMPS--ipr1
-4.1529 -3.0332 2017--OBrien-C-J--Pt-Au--LAMMPS--ipr1
-4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr2
-4.0798 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr1
-4.0800 -3.9300 1986--Foiles-S-M--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1
-4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr1
-4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr2
-4.0801 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr2
-4.0800 -3.9300 1989--Adams-J-B--Au--LAMMPS--ipr1
-6.1962 -1.4338 2020--Starikov-S--Si-Au-Al--LAMMPS--ipr1
-6.2107 -0.6133 2012--Norman-G-E--Au--LAMMPS--ipr1
-4.0650 -3.8100 2009--Zhakhovskii-V-V--Au--LAMMPS--ipr2
-4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr1
-4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr2
-
-
-
-
-
-

3.4. Exploring potentials

-

The Database object allows for searching potential entries by citation and searching lammps implementations of the potentials.

-

Methods and attributes for exploring potential listings:

-
    -
  • widget_search_potentials provides a Jupyter GUI for exploring potential entries.

  • -
  • potentials is a list of the entries as objects. This is generated if load_potentials() is called.

  • -
  • potentials_df is a pandas.DataFrame containing the content of the listings. This is generated if load_potentials() is called.

  • -
  • load_potentials() builds potentials and potentials_df based on entries found in the local and/or remote databases.

  • -
  • get_potentials() and get_potential() retrieves all potentials or one potential, respectively, that match with any given parameters.

  • -
  • download_potentials will download all potential entries from remote to local.

  • -
  • save_potentials saves user-defined entries to local.

  • -
  • upload_potential uploads a new/updated potential listing to remote. Requires write permission for the remote database.

  • -
  • delete_potential will delete a listing from local and/or remote (if permissions are allowed).

  • -
-

Methods and attributes for exploring LAMMPS potential listings:

-
    -
  • widget_lammps_potential provides a Jupyter GUI for exploring LAMMPS potential entries and retrieving any associated parameter files.

  • -
  • lammps_potentials is a list of the entries as objects. This is generated if load_lammps_potentials() is called.

  • -
  • lammps_potentials_df is a pandas.DataFrame containing the content of the listings. This is generated if load_lammps_potentials() is called.

  • -
  • load_lammps_potentials builds lammps_potentials and lammps_potentials_df based on entries found in the local and/or remote databases.

  • -
  • get_lammps_potentials and get_lammps_potential retrieves all LAMMPS potentials or one LAMMPS potential, respectively, that match with any given parameters.

  • -
  • download_lammps_potentials will download all LAMMPS potential entries from remote to local.

  • -
  • get_lammps_potentials_files will download any parameter files associated with one or more LAMMPS potentials to local.

  • -
  • save_lammps_potentials saves user-defined entries to local.

  • -
  • upload_lammps_potential uploads a new/updated LAMMPS potential listing to remote. Requires write permission for the remote database.

  • -
  • delete_lammps_potential will delete a listing from local and/or remote (if permissions are allowed).

  • -
-

See the documentation notebooks for the potentials package for more details on interacting with the potentials records.

-
-
-
- - -
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/html/tutorial/1.5._Settings_and_Library_classes.ipynb b/doc/html/tutorial/1.5._Settings_and_Library_classes.ipynb deleted file mode 100644 index d81f504e..00000000 --- a/doc/html/tutorial/1.5._Settings_and_Library_classes.ipynb +++ /dev/null @@ -1,1246 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Introduction to atomman: Settings and Library\n", - "\n", - "__Lucas M. Hale__, [lucas.hale@nist.gov](mailto:lucas.hale@nist.gov?Subject=ipr-demo), _Materials Science and Engineering Division, NIST_.\n", - " \n", - "[Disclaimers](http://www.nist.gov/public_affairs/disclaimer.cfm) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Introduction\n", - "\n", - "*Added version 1.3.3*\n", - "\n", - "The atomman package inherits Settings and Library from the [potentials package](https://github.com/usnistgov/potentials). The associated classes can be used to manage interactions with the NIST potentials reference library." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Library Imports**" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "atomman version = 1.3.7\n", - "Notebook executed on 2021-02-19\n" - ] - } - ], - "source": [ - "# Standard libraries\n", - "from pathlib import Path\n", - "import datetime \n", - "\n", - "# https://github.com/usnistgov/atomman\n", - "import atomman as am \n", - "\n", - "# Show atomman version\n", - "print('atomman version =', am.__version__)\n", - "\n", - "# Show date of Notebook execution\n", - "print('Notebook executed on', datetime.date.today())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Settings\n", - "\n", - "The atomman.Settings class is a shortcut to the potentials.Settings class. This allows for atomman, potentials, and iprPy to all share the same settings and local reference library." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "settings = am.Settings()\n", - "\n", - "# Show that atomman.Settings == potentials.Settings\n", - "print(repr(settings))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.1. Set directory locations\n", - "\n", - "- __directory__ is the location where the settings.json file is to be found. The default directory is .NISTpotentials in the user's home directory. This can be changed with Settings.set_directory(), but should only be done if multiple users/environments with different home directories are sharing settings.\n", - "\n", - "- __library_directory__ is the location where the local library of reference records is located. By default, this is inside the directory above. It is recommended that it be set to somewhere more accessible if you wish to examine, modify or add to the reference records." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Settings directory is C:\\Users\\lmh1\\.NISTpotentials\n", - "Library directory is C:\\Users\\lmh1\\Documents\\library\n" - ] - } - ], - "source": [ - "print('Settings directory is', settings.directory)\n", - "print('Library directory is', settings.library_directory)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Settings directory is C:\\Users\\lmh1\\.NISTpotentials\n", - "Library directory is C:\\Users\\lmh1\\Documents\\library\n" - ] - } - ], - "source": [ - "# Change the settings directory - Not recommended\n", - "#settings.set_directory()\n", - "\n", - "# Change the library directory - Recommended\n", - "#settings.set_library_directory()\n", - "\n", - "print('Settings directory is', settings.directory)\n", - "print('Library directory is', settings.library_directory)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.2. Set default database parameters\n", - "\n", - "- __local__ indicates the default value for the local parameter to use when initializing a Library object (below), with a value of True indicating that the local library directory will be searched for matching records.\n", - "\n", - "- __remote__ indicates the default value for the remote parameter to use when initializing a Library object (below), with a value of True indicating that the remote database https://potentials.nist.gov/ will be searched for matching records." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Default local parameter is True\n", - "Default remote parameter is True\n" - ] - } - ], - "source": [ - "print('Default local parameter is', settings.local)\n", - "print('Default remote parameter is', settings.remote)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Default local parameter is True\n", - "Default remote parameter is True\n" - ] - } - ], - "source": [ - "# Change the local and remote parameters\n", - "#settings.set_local(True)\n", - "#settings.set_remote(False)\n", - "\n", - "print('Default local parameter is', settings.local)\n", - "print('Default remote parameter is', settings.remote)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Database interface \n", - "\n", - "The atomman.library.Database class is a subclass of potentials.Database and extends it to provide support for crystal structure references in addition to the potentials references. The class is used by atomman.load() for ['prototype'](1.4.10._prototype_loading.html) and ['crystal'](1.4.11._crystal_loading.html) styles and by [atomman.load_lammps_potential](2.1._Potential_class.html). The class can also be directly accessed and used to explore the database for more involved investigations.\n", - "\n", - "See the documentation notebooks for the [potentials package](https://github.com/usnistgov/potentials) for more details on interacting with the potentials records." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.1. Initialize a Database object\n", - "\n", - "\n", - "Access parameters. Only change these if you are accessing an alternate database and/or have permission to add content.\n", - "\n", - "- __host__ (*str, optional*) CDCS site to access. Default value is 'https://potentials.nist.gov/'.\n", - "- __username__ (*str, optional*) User name to use to access the host site. Default value of '' will access the site as an anonymous visitor.\n", - "- __password__ (*str, optional*) Password associated with the given username. Not needed for anonymous access.\n", - "- __certification__ (*str, optional*) File path to certification file if needed for host.\n", - "\n", - "\n", - "Settings options. These allow the default settings from above to be overridden.\n", - "\n", - "- __localpath__ (*str, optional*) Path to the local library directory to use. If not given, will use the set library_directory setting.\n", - "- __local__ (*bool, optional*) Indicates if the load operations will check localpath for records. Default value is controlled by settings.\n", - "- __remote__ (*bool, optional*) Indicates if the load operations will download records from the remote database. Default value is controlled by settings. If a local copy exists, then setting this to False is considerably faster.\n", - "\n", - "Other options\n", - "\n", - "- __verbose__ (*bool, optional*) If True, info messages will be printed during operations. Default value is False.\n", - "- __load__ (*bool, str or list, optional*) If True, citations, potentials and lammps_potentials will all be loaded during initialization. If False (default), none will be loaded. Alternatively, a str or list can be given to specify which of the three record types to load.\n", - "- __status__ (*str, list or None, optional*) Only potential_LAMMPS records with the given status(es) will be loaded. Allowed values are 'active' (default), 'superseded', and 'retracted'. If None is given, then all potentials will be loaded." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "localpath = C:\\Users\\lmh1\\Documents\\library\n", - "local = True\n", - "remote = True\n" - ] - } - ], - "source": [ - "# Load Database with default settings \n", - "potdb = am.library.Database()\n", - "print('localpath =', potdb.localpath)\n", - "print('local =', potdb.local)\n", - "print('remote =', potdb.remote)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.2. Exploring crystal prototypes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3.2.1. Load crystal prototypes\n", - "\n", - "The current prototypes in the local and/or remote database can be loaded into memory using the load_crystal_prototypes() method.\n", - "\n", - "- __localpath__ (*str, optional*) Path to a local directory to check for records first. If not given, will check localpath value set during object initialization. If not given or set during initialization, then only the remote database will be loaded.\n", - "- __local__ (*bool, optional*) Indicates if records in localpath are to be loaded. If not given, will use the local value set during initialization.\n", - "- __remote__ (*bool, optional*) Indicates if the records in the remote database are to be loaded. Setting this to be False is useful/faster if a local copy of the database exists. If not given, will use the local value set during initialization.\n", - "- __verbose__ (*bool, optional*) If True, info messages will be printed during operations. Default value is False." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded 19 local crystal prototypes\n", - "Loaded 19 remote crystal prototypes\n", - " - 0 new\n" - ] - } - ], - "source": [ - "potdb.load_crystal_prototypes(verbose=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3.2.2. Get crystal prototype(s) \n", - "\n", - "The get_crystal_prototype() and get_crystal_prototypes() methods can be used to find one or all crystal prototypes that match the given parameters. \n", - "\n", - "Note that how the get methods work depends on if the associated records have been loaded. If not loaded, then the get methods will query the remote database. If loaded, then the get methods will search the set of loaded local+remote entries. The two variations should, but are not guaranteed, to behave identically. \n", - "\n", - "- __id__ (*str or list, optional*) Prototype ID(s) to search for. These are unique identifiers for each prototype based on comm.\n", - "- __key__ (*str or list, optional*) UUID4 key(s) to search for. Each entry has a unique random-generated UUID4 key.\n", - "- __name__ (*str or list, optional*) Common name(s) to limit the search by.\n", - "- __prototype__ (*str or list, optional*) Prototype identifying composition(s) to limit the search by.\n", - "- __pearson__ (*str or list, optional*) The Pearson symbol(s) to limit the search by.\n", - "- __strukturbericht__ (*str or list, optional*) The strukturbericht identifier(s) to limit the search by.\n", - "- __sg_number__ (*int or list, optional*) The space group number(s) to limit the search by.\n", - "- __sg_hm__ (*str or list, optional*) The space group Hermann-Maguin identifier(s) to limit the search by.\n", - "- __sg_schoenflies__ (*str or list, optional*) The space group Schoenflies identifier(s) to limit the search by.\n", - "- __keyword__ (*str, optional*) If given, will limit the search to all records that contain the keyword substring. Cannot be combined with any of the above parameters.\n", - "- __verbose__ (*bool, optional*) If True, info messages will be printed during operations. Default value is False.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Multiple matching crystal prototypes found.\n", - "1 A3'--alpha-La--double-hcp\n", - "2 A3--Mg--hcp\n", - "Select which one: 2\n" - ] - } - ], - "source": [ - "prototype = potdb.get_crystal_prototype(keyword='hcp')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The returned CrystalPrototype object(s) have attributes associated with their metadata information as well as an atomman.System of the unit cell." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "A3--Mg--hcp\n", - "avect = [ 1.000, 0.000, 0.000]\n", - "bvect = [-0.500, 0.866, 0.000]\n", - "cvect = [ 0.000, 0.000, 1.633]\n", - "origin = [ 0.000, 0.000, 0.000]\n", - "natoms = 2\n", - "natypes = 1\n", - "symbols = (None,)\n", - "pbc = [ True True True]\n", - "per-atom properties = ['atype', 'pos']\n", - " id | atype | pos[0] | pos[1] | pos[2]\n", - " 0 | 1 | 0.000 | 0.000 | 0.000\n", - " 1 | 1 | 0.000 | 0.577 | 0.816\n" - ] - } - ], - "source": [ - "print(prototype.id)\n", - "print(prototype.ucell)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3.2.3. download_crystal_prototypes\n", - "\n", - "The download_crystal_prototypes method will download all entries in the remote to the local.\n", - "\n", - "- __localpath__ (*path-like object, optional*) Path to a local directory where the files will be saved to. If not given, will use the localpath value set during object initialization.\n", - "- __prototypes__ (*list of CrystalPrototype, optional*) A list of crystal prototypes to download. If not given, all prototypes will be downloaded.\n", - "- __format__ (*str, optional*) The file format to save the record files as. Allowed values are 'xml' and 'json' (default).\n", - "- __indent__ (*int, optional*) The indentation spacing size to use for the locally saved record files. If not given, the JSON/XML content will be compact.\n", - "- __verbose__ (*bool, optional*) If True, info messages will be printed during operations. Default value is False." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "#potdb.download_crystal_prototypes(format='json', indent=4, verbose=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3.2.4. crystal_prototypes and crystal_prototypes_df\n", - "\n", - "Calling load_crystal_prototypes builds crystal_prototypes, a numpy array containing all CrystalPrototype objects, and crystal_prototypes_df, a pandas DataFrame of the prototype metadata. Combined, these allow for more involved custom explorations of the loaded prototypes. " - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
keyidnameprototypepearsonstrukturberichtsg_numbersg_hmsg_schoenfliesucellcrystal_familynatypesabcalphabetagammanatoms
0d30980ad-ae18-425d-84cb-abf08577bdc8A1--Cu--fccface-centered cubicCucF4A1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic11.01.01.00000090.090.090.04
2f4101896-1e17-4736-a4d1-308b8934e8ceA15--Cr3Sibeta-tungstenCr3SicP8A15223P m -3 nOh^3avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic21.01.01.00000090.090.090.08
1e0126715-c7db-4d79-be80-707c572bebd6A15--beta-Wbeta-tungstenb-WcP8A15223P m -3 nOh^3avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic11.01.01.00000090.090.090.08
3bc13827d-e1e6-4d70-8c3a-59399ad78b0fA2--W--bccbody-centered cubicWcI2A2229I m -3 mOh^9avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic11.01.01.00000090.090.090.02
4154d1a2b-04da-4477-8962-a0ca0c17c8fcA3'--alpha-La--double-hcpdouble hcpLahP4A3'194P 6_3/m m cD6h^4avect = [ 1.000, 0.000, 0.000]\\nbvect = [-...hexagonal11.01.03.26598690.090.0120.04
54dab7fbb-108a-425e-8adb-d55de7b1134bA3--Mg--hcphexagonal close-packedMghP2A3194P 6_3/m m cD6h^4avect = [ 1.000, 0.000, 0.000]\\nbvect = [-...hexagonal11.01.01.63299390.090.0120.02
612654c83-c153-4b58-8805-f6dce43b7842A4--C--dcdiamond cubicCcF8A4227F d -3 mOh^7avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic11.01.01.00000090.090.090.08
7821526c5-561e-4f09-8a04-680419dc1495A5--beta-Snwhite tinb-SntI4A5141I 4_1/a m dD4h^19avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...tetragonal11.01.00.55000090.090.090.04
876cbf2c1-fa86-41c4-85ae-c24f55c9f13aA6--In--bctbody-centered tetragonalIntI2A6139I 4/m m mD4h^17avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...tetragonal11.01.01.50000090.090.090.02
9c1e15cf8-6998-40ce-afbd-0b1cb6271a1fA7--alpha-Asalpha Asa-AshR6A7166R -3 mD3d^5avect = [ 1.000, 0.000, 0.000]\\nbvect = [-...hexagonal11.01.02.77700090.090.0120.06
10ceb6d7cc-b20e-4878-8b2b-1e62185d16afAh--alpha-Po--scsimple cubica-PocP1Ah221P m -3 mOh^1avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic11.01.01.00000090.090.090.01
11133ca871-c927-4073-ae46-b8a27e035f4bB1--NaCl--rock-saltrock saltNaClcF8B1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic21.01.01.00000090.090.090.08
127398b231-fd55-4378-b6b2-6607262d3090B2--CsClcesium chlorideCsClcP2B2221P m -3 mOh^1avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic21.01.01.00000090.090.090.02
13ce517a32-6bca-47d0-82a2-2ee48956cff9B3--ZnS--cubic-zinc-blendecubic zinc-blendec-ZnScF8B3216F -4 3 mTd^2avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic21.01.01.00000090.090.090.08
1474171ba0-6605-4956-b8d5-0059672ee7e2C1--CaF2--fluoritefluoriteCaF2cF12C1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic21.01.01.00000090.090.090.012
158a2eb4b8-1302-46d9-992d-4296c227d966D0_3--BiF3BiF3BiF3cF16D0_3225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic21.01.01.00000090.090.090.016
16f7b8d5d9-b0eb-401a-9cc3-038170e3ac1cL1_0--AuCuAuCuAuCutP2L1_0123P 4/m m mD4h^1avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...tetragonal21.01.01.30960090.090.090.02
17942ce385-85ab-4cb9-8adc-4bdaaf145831L1_2--AuCu3AuCu3AuCu3cP4L1_2221P m -3 mOh^1avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic21.01.01.00000090.090.090.04
180fb6d590-5ce5-4476-a1bf-7130f96f2af1L2_1--AlCu2Mn--heuslerheuslerAlCu2MncF16L2_1225F m -3 mOh^5avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ...cubic31.01.01.00000090.090.090.016
\n", - "
" - ], - "text/plain": [ - " key id \\\n", - "0 d30980ad-ae18-425d-84cb-abf08577bdc8 A1--Cu--fcc \n", - "2 f4101896-1e17-4736-a4d1-308b8934e8ce A15--Cr3Si \n", - "1 e0126715-c7db-4d79-be80-707c572bebd6 A15--beta-W \n", - "3 bc13827d-e1e6-4d70-8c3a-59399ad78b0f A2--W--bcc \n", - "4 154d1a2b-04da-4477-8962-a0ca0c17c8fc A3'--alpha-La--double-hcp \n", - "5 4dab7fbb-108a-425e-8adb-d55de7b1134b A3--Mg--hcp \n", - "6 12654c83-c153-4b58-8805-f6dce43b7842 A4--C--dc \n", - "7 821526c5-561e-4f09-8a04-680419dc1495 A5--beta-Sn \n", - "8 76cbf2c1-fa86-41c4-85ae-c24f55c9f13a A6--In--bct \n", - "9 c1e15cf8-6998-40ce-afbd-0b1cb6271a1f A7--alpha-As \n", - "10 ceb6d7cc-b20e-4878-8b2b-1e62185d16af Ah--alpha-Po--sc \n", - "11 133ca871-c927-4073-ae46-b8a27e035f4b B1--NaCl--rock-salt \n", - "12 7398b231-fd55-4378-b6b2-6607262d3090 B2--CsCl \n", - "13 ce517a32-6bca-47d0-82a2-2ee48956cff9 B3--ZnS--cubic-zinc-blende \n", - "14 74171ba0-6605-4956-b8d5-0059672ee7e2 C1--CaF2--fluorite \n", - "15 8a2eb4b8-1302-46d9-992d-4296c227d966 D0_3--BiF3 \n", - "16 f7b8d5d9-b0eb-401a-9cc3-038170e3ac1c L1_0--AuCu \n", - "17 942ce385-85ab-4cb9-8adc-4bdaaf145831 L1_2--AuCu3 \n", - "18 0fb6d590-5ce5-4476-a1bf-7130f96f2af1 L2_1--AlCu2Mn--heusler \n", - "\n", - " name prototype pearson strukturbericht sg_number \\\n", - "0 face-centered cubic Cu cF4 A1 225 \n", - "2 beta-tungsten Cr3Si cP8 A15 223 \n", - "1 beta-tungsten b-W cP8 A15 223 \n", - "3 body-centered cubic W cI2 A2 229 \n", - "4 double hcp La hP4 A3' 194 \n", - "5 hexagonal close-packed Mg hP2 A3 194 \n", - "6 diamond cubic C cF8 A4 227 \n", - "7 white tin b-Sn tI4 A5 141 \n", - "8 body-centered tetragonal In tI2 A6 139 \n", - "9 alpha As a-As hR6 A7 166 \n", - "10 simple cubic a-Po cP1 Ah 221 \n", - "11 rock salt NaCl cF8 B1 225 \n", - "12 cesium chloride CsCl cP2 B2 221 \n", - "13 cubic zinc-blende c-ZnS cF8 B3 216 \n", - "14 fluorite CaF2 cF12 C1 225 \n", - "15 BiF3 BiF3 cF16 D0_3 225 \n", - "16 AuCu AuCu tP2 L1_0 123 \n", - "17 AuCu3 AuCu3 cP4 L1_2 221 \n", - "18 heusler AlCu2Mn cF16 L2_1 225 \n", - "\n", - " sg_hm sg_schoenflies \\\n", - "0 F m -3 m Oh^5 \n", - "2 P m -3 n Oh^3 \n", - "1 P m -3 n Oh^3 \n", - "3 I m -3 m Oh^9 \n", - "4 P 6_3/m m c D6h^4 \n", - "5 P 6_3/m m c D6h^4 \n", - "6 F d -3 m Oh^7 \n", - "7 I 4_1/a m d D4h^19 \n", - "8 I 4/m m m D4h^17 \n", - "9 R -3 m D3d^5 \n", - "10 P m -3 m Oh^1 \n", - "11 F m -3 m Oh^5 \n", - "12 P m -3 m Oh^1 \n", - "13 F -4 3 m Td^2 \n", - "14 F m -3 m Oh^5 \n", - "15 F m -3 m Oh^5 \n", - "16 P 4/m m m D4h^1 \n", - "17 P m -3 m Oh^1 \n", - "18 F m -3 m Oh^5 \n", - "\n", - " ucell crystal_family natypes \\\n", - "0 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 1 \n", - "2 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 2 \n", - "1 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 1 \n", - "3 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 1 \n", - "4 avect = [ 1.000, 0.000, 0.000]\\nbvect = [-... hexagonal 1 \n", - "5 avect = [ 1.000, 0.000, 0.000]\\nbvect = [-... hexagonal 1 \n", - "6 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 1 \n", - "7 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... tetragonal 1 \n", - "8 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... tetragonal 1 \n", - "9 avect = [ 1.000, 0.000, 0.000]\\nbvect = [-... hexagonal 1 \n", - "10 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 1 \n", - "11 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 2 \n", - "12 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 2 \n", - "13 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 2 \n", - "14 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 2 \n", - "15 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 2 \n", - "16 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... tetragonal 2 \n", - "17 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 2 \n", - "18 avect = [ 1.000, 0.000, 0.000]\\nbvect = [ ... cubic 3 \n", - "\n", - " a b c alpha beta gamma natoms \n", - "0 1.0 1.0 1.000000 90.0 90.0 90.0 4 \n", - "2 1.0 1.0 1.000000 90.0 90.0 90.0 8 \n", - "1 1.0 1.0 1.000000 90.0 90.0 90.0 8 \n", - "3 1.0 1.0 1.000000 90.0 90.0 90.0 2 \n", - "4 1.0 1.0 3.265986 90.0 90.0 120.0 4 \n", - "5 1.0 1.0 1.632993 90.0 90.0 120.0 2 \n", - "6 1.0 1.0 1.000000 90.0 90.0 90.0 8 \n", - "7 1.0 1.0 0.550000 90.0 90.0 90.0 4 \n", - "8 1.0 1.0 1.500000 90.0 90.0 90.0 2 \n", - "9 1.0 1.0 2.777000 90.0 90.0 120.0 6 \n", - "10 1.0 1.0 1.000000 90.0 90.0 90.0 1 \n", - "11 1.0 1.0 1.000000 90.0 90.0 90.0 8 \n", - "12 1.0 1.0 1.000000 90.0 90.0 90.0 2 \n", - "13 1.0 1.0 1.000000 90.0 90.0 90.0 8 \n", - "14 1.0 1.0 1.000000 90.0 90.0 90.0 12 \n", - "15 1.0 1.0 1.000000 90.0 90.0 90.0 16 \n", - "16 1.0 1.0 1.309600 90.0 90.0 90.0 2 \n", - "17 1.0 1.0 1.000000 90.0 90.0 90.0 4 \n", - "18 1.0 1.0 1.000000 90.0 90.0 90.0 16 " - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Display the metadata for all prototypes\n", - "potdb.crystal_prototypes_df" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "A5--beta-Sn\n", - "A6--In--bct\n", - "L1_0--AuCu\n" - ] - } - ], - "source": [ - "# Find the listings in df that are tetragonal\n", - "is_tetragonal = potdb.crystal_prototypes_df.crystal_family == 'tetragonal'\n", - "\n", - "# Use is_tetragonal mask to retrieve the associated prototypes\n", - "for prototype in potdb.crystal_prototypes[is_tetragonal]:\n", - " print(prototype.id)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.3. Exploring relaxed crystals\n", - "\n", - "The Database object has built-in methods for exploring the relaxed crystals in a similar manner as the crystal prototypes:\n", - "\n", - "- load_relaxed_crystals() builds listings for all relaxed crystals from local and/or remote\n", - "- relaxed_crystals and relaxed_crystals_df are the listings built by load_relaxed_crystals()\n", - "- get_relaxed_crystals() and get_relaxed_crystal() retrieve matching entries\n", - "- download_relaxed_crystals() downloads all remote entries to local\n", - "\n", - "__HOWEVER__, many of these operations are incredibly slow due to the large number of relaxed crystal entries. There are two suggested methods to best reduce the processing time, which are listed below." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3.3.1. Remote-only searches\n", - "\n", - "The simplest method is to call get_relaxed_crystals() or get_relaxed_crystal() without calling load_relaxed_crystals(). This will send queries to the remote database to retrieve matching records. Giving parameters that limit the search to as few entries as possible will reduce the amount of information that needs to be downloaded. \n", - "\n", - "Limitations: Requires internet access, no user-defined local entries will be included, and each search involves a separate internet request.\n", - "\n", - "Parameters for get_relaxed_crystals and get_relaxed_crystal\n", - "\n", - "- __key__ (*str or list, optional*) UUID4 key(s) to search for. Each entry has a unique random-generated UUID4 key.\n", - "- __method__ (*str or list or None, optional*) The relaxation method used. Allowed values are dynamic, static and box. Default value is dynamic (the most rigorous relaxation method). All will be loaded if set to None.\n", - "- __standing__ (*str or list or None, optional*) \"good\" records are the unique crystals found with the most rigorous relaxation, and with known prototypes over DFT structures. \"bad\" are records filtered out, usually for being duplicates. Default value is \"good\". All will be loaded if set to None.\n", - "- __family__ (*str or atomman.library.CrystalPrototype or list, optional*) The crystal family associated with the relaxed crystal - either crystal prototype name or MP/OQMD database entry name.\n", - "- __parent_key__ (*str or list, optional*) The UUID4 key(s) assigned to the calculation that the record is based on.\n", - "- __potential__ (*atomman.lammps.Potential or list, optional*) A loaded LAMMPS potential object to limit the search by.\n", - "- __potential_LAMMPS_id__ (*str or list, optional*) The id for a LAMMPS implemented potential to limit the search by.\n", - "- __potential_LAMMPS_key__ (*str or list, optional*) The UUID4 for a LAMMPS implemented potential to limit the search by.\n", - "- __potential_id__ (*str or list, optional*) The id for a potential to limit the search by.\n", - "- __potential_key__ (*str or list, optional*) The UUID4 for a potential to limit the search by.\n", - "- __symbols__ (*str or list, optional*) Element symbols in the crystal to limit the search by.\n", - "- __natypes__ (*int or list, optional*) The number of unique element model symbols in the crystal to limit the search by.\n", - "- __natoms__ (*int or list, optional*) The number of unique atoms in the crystal's unit cell to limit the search by.\n", - "- __keyword__ (*str, optional*) If given, will limit the search to all records that contain the keyword substring. Cannot be combined with any of the above parameters.\n", - "- __verbose__ (*bool, optional*) If True, info messages will be printed during operations. Default value is False." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "alat Ecoh potential_LAMMPS_id\n", - "4.0685 -4.2994 2012--Norman-G-E--Au--LAMMPS--ipr1\n", - "4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr2\n", - "4.0801 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr2\n", - "4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr1\n", - "4.0798 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr1\n", - "4.0800 -3.9300 1986--Foiles-S-M--Au--LAMMPS--ipr1\n", - "4.0800 -3.9300 1986--Foiles-S-M--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1\n", - "4.0780 -3.9300 2017--Purja-Pun-G-P--Au--LAMMPS--ipr1\n", - "4.0800 -3.9300 1989--Adams-J-B--Au--LAMMPS--ipr1\n", - "4.0800 -3.9300 1989--Adams-J-B--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1\n", - "4.0701 -3.9242 2005--Grochola-G--Au--LAMMPS--ipr1\n", - "4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr1\n", - "4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr2\n", - "4.0800 -3.8100 2010--Olsson-P-A-T--Au--LAMMPS--ipr1\n", - "4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr2\n", - "4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr1\n", - "4.1529 -3.0332 2017--OBrien-C-J--Pt-Au--LAMMPS--ipr1\n", - "6.2107 -0.6133 2012--Norman-G-E--Au--LAMMPS--ipr1\n" - ] - } - ], - "source": [ - "# Fetch all records for fcc gold\n", - "fcc_gold = potdb.get_relaxed_crystals(family='A1--Cu--fcc', symbols=['Au'])\n", - "\n", - "# List the matches, the a lattice constant and the associated potential\n", - "print('alat Ecoh potential_LAMMPS_id')\n", - "for crystal in fcc_gold:\n", - " print(f'{crystal.ucell.box.a:.4f} {crystal.cohesive_energy:.4f} {crystal.potential_LAMMPS_id}')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3.3.2. Local-only searches\n", - "\n", - "The other recommended method is to load only records from the local and then perform the get searches. Doing this, of course, requires that any relaxed crystal records first be downloaded to the local library directory, which can be done one of two ways\n", - "\n", - "1. First performing a remote-only search as mentioned above, then passing the list of matching records as parameters to the download_relaxed_crystals() method. This allows for records of interest to be saved for accessing later.\n", - "\n", - "2. If you want all available entries in the local copy, download or clone the git repository at https://github.com/lmhale99/potentials-library to the local library directory. While all the entries can be downloaded using download_relaxed_crystals(), doing so is incredibly slow.\n", - "\n", - "Either way, once the crystal records are in the local directory they can be loaded with load_relaxed_crystals(remote=False), and then the get_relaxed_crystals() and get_relaxed_crystal() methods will work without needing internet access. \n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded 59326 local relaxed crystals\n" - ] - } - ], - "source": [ - "potdb.load_relaxed_crystals(remote=False, verbose=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "alat Ecoh potential_LAMMPS_id\n", - "4.0800 -3.9300 1989--Adams-J-B--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1\n", - "4.0800 -3.8100 2010--Olsson-P-A-T--Au--LAMMPS--ipr1\n", - "7.8429 -0.8357 2020--Starikov-S--Si-Au-Al--LAMMPS--ipr1\n", - "4.0701 -3.9242 2005--Grochola-G--Au--LAMMPS--ipr1\n", - "4.0800 -3.9300 1986--Foiles-S-M--Au--LAMMPS--ipr1\n", - "4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr1\n", - "4.0685 -4.2994 2012--Norman-G-E--Au--LAMMPS--ipr1\n", - "4.1499 -3.8612 2020--Starikov-S--Si-Au-Al--LAMMPS--ipr1\n", - "4.0780 -3.9300 2017--Purja-Pun-G-P--Au--LAMMPS--ipr1\n", - "4.1529 -3.0332 2017--OBrien-C-J--Pt-Au--LAMMPS--ipr1\n", - "4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr2\n", - "4.0798 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr1\n", - "4.0800 -3.9300 1986--Foiles-S-M--Ag-Au-Cu-Ni-Pd-Pt--LAMMPS--ipr1\n", - "4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr1\n", - "4.0780 -3.7890 1987--Ackland-G-J--Au--LAMMPS--ipr2\n", - "4.0801 -3.9300 2004--Zhou-X-W--Au--LAMMPS--ipr2\n", - "4.0800 -3.9300 1989--Adams-J-B--Au--LAMMPS--ipr1\n", - "6.1962 -1.4338 2020--Starikov-S--Si-Au-Al--LAMMPS--ipr1\n", - "6.2107 -0.6133 2012--Norman-G-E--Au--LAMMPS--ipr1\n", - "4.0650 -3.8100 2009--Zhakhovskii-V-V--Au--LAMMPS--ipr2\n", - "4.0801 -3.9300 2004--Zhou-X-W--Cu-Ag-Au--LAMMPS--ipr1\n", - "4.1820 -3.9024 2018--Starikov-S-V--Si-Au--LAMMPS--ipr2\n" - ] - } - ], - "source": [ - "# Fetch all records for fcc gold\n", - "fcc_gold = potdb.get_relaxed_crystals(family='A1--Cu--fcc', symbols=['Au'])\n", - "\n", - "# List the matches, the a lattice constant and the associated potential\n", - "print('alat Ecoh potential_LAMMPS_id')\n", - "for crystal in fcc_gold:\n", - " print(f'{crystal.ucell.box.a:.4f} {crystal.cohesive_energy:.4f} {crystal.potential_LAMMPS_id}')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.4. Exploring potentials\n", - "\n", - "The Database object allows for searching potential entries by citation and searching lammps implementations of the potentials.\n", - "\n", - "Methods and attributes for exploring potential listings:\n", - "\n", - "- **widget_search_potentials** provides a Jupyter GUI for exploring potential entries.\n", - "- **potentials** is a list of the entries as objects. This is generated if load_potentials() is called.\n", - "- **potentials_df** is a pandas.DataFrame containing the content of the listings. This is generated if load_potentials() is called.\n", - "- **load_potentials()** builds potentials and potentials_df based on entries found in the local and/or remote databases.\n", - "- **get_potentials() and get_potential()** retrieves all potentials or one potential, respectively, that match with any given parameters. \n", - "- **download_potentials** will download all potential entries from remote to local. \n", - "- **save_potentials** saves user-defined entries to local.\n", - "- **upload_potential** uploads a new/updated potential listing to remote. Requires write permission for the remote database.\n", - "- **delete_potential** will delete a listing from local and/or remote (if permissions are allowed).\n", - "\n", - "Methods and attributes for exploring LAMMPS potential listings:\n", - "\n", - "- **widget_lammps_potential** provides a Jupyter GUI for exploring LAMMPS potential entries and retrieving any associated parameter files.\n", - "- **lammps_potentials** is a list of the entries as objects. This is generated if load_lammps_potentials() is called.\n", - "- **lammps_potentials_df** is a pandas.DataFrame containing the content of the listings. This is generated if load_lammps_potentials() is called.\n", - "- **load_lammps_potentials** builds lammps_potentials and lammps_potentials_df based on entries found in the local and/or remote databases.\n", - "- **get_lammps_potentials and get_lammps_potential** retrieves all LAMMPS potentials or one LAMMPS potential, respectively, that match with any given parameters. \n", - "- **download_lammps_potentials** will download all LAMMPS potential entries from remote to local.\n", - "- **get_lammps_potentials_files** will download any parameter files associated with one or more LAMMPS potentials to local.\n", - "- **save_lammps_potentials** saves user-defined entries to local.\n", - "- **upload_lammps_potential** uploads a new/updated LAMMPS potential listing to remote. Requires write permission for the remote database.\n", - "- **delete_lammps_potential** will delete a listing from local and/or remote (if permissions are allowed).\n", - "\n", - "See the documentation notebooks for the [potentials package](https://github.com/usnistgov/potentials) for more details on interacting with the potentials records." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/doc/html/tutorial/4.4._Dislocation_solution_and_generator.html b/doc/html/tutorial/4.4._Dislocation_solution_and_generator.html deleted file mode 100644 index 6eeacffe..00000000 --- a/doc/html/tutorial/4.4._Dislocation_solution_and_generator.html +++ /dev/null @@ -1,1499 +0,0 @@ - - - - - - - - - Introduction to atomman: Dislocation solution and generator — atomman 1.4.7 documentation - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -
-

Introduction to atomman: Dislocation solution and generator

-

Lucas M. Hale, lucas.hale@nist.gov, Materials Science and Engineering Division, NIST.

-

Disclaimers

-
-

1. Introduction

-

This Notebook outlines the use of the classes and methods in atomman for obtaining elastic solutions for perfectly straight dislocations and constructing atomic configurations based on them.

-
    -
  • Section #2 details the theory used to obtain the dislocation solutions and construct the atomic systems.

  • -
  • Section #3 describes the VolterraDislocation classes that provide the elastic dislocation solutions and the various properties that can be obtained from them. This is useful if you want a dislocation solution but don’t want to construct an atomic configuration.

  • -
  • Section #4 introduces the Dislocation class that provides a convenient means of constructing atomic configurations of dislocations.

  • -
  • Section #5 shows how the Dislocation class can be used to generate dislocation monopole configurations.

  • -
  • Section #6 shows how the Dislocation class can be used to generate periodic array of dislocations configurations.

  • -
-
-
[1]:
-
-
-
-# Standard Python libraries
-import os
-import datetime
-
-# http://www.numpy.org/
-import numpy as np
-
-# https://github.com/usnistgov/atomman
-import atomman as am
-import atomman.unitconvert as uc
-
-# https://matplotlib.org/
-import matplotlib.pyplot as plt
-%matplotlib inline
-
-# Show atomman version
-print('atomman version =', am.__version__)
-
-# Show date of Notebook execution
-print('Notebook executed on', datetime.date.today())
-
-
-
-
-
-
-
-
-atomman version = 1.4.7
-Notebook executed on 2022-10-12
-
-
-
-
-

2. Theory

-

The Dislocation class is meant to provide a simple and convenient means of generating dislocation monopole and periodic array of dislocations atomic configurations. The dislocation configurations generated by this class contain a single dislocation which is inserted into an otherwise perfect crystalline system by applying displacements corresponding to a Volterra dislocation solution. The boundary conditions are then handled differently based on whether the system is to be a dislocation monopole -configuration or a periodic array of dislocations configuration.

-
-

2.1. Dislocation solutions

-

Dislocation theory is based on computing and using elasticity solutions of dislocations to define what they look like and how they interact with the surrounding material. The Volterra dislocation model assumes that the discontinuity in the crystal due to the dislocation exists as a line singularity. While this assumption does not hold true in real materials, the Volterra solution still provides a decent guess for the long-range stress and strain fields of compact dislocation cores. It also -provides a useful starting point for developing more complicated dislocation solutions, and can provide good initial guesses for constructing atomic dislocation configurations.

-

Solutions of straight dislocations are always defined relative to three orthogonal unit vectors \(\hat{m}\), \(\hat{n}\), and \(\hat{\xi}\)

-
    -
  • \(\hat{m}\) is the direction in the slip plane perpendicular to the dislocation’s line direction.

  • -
  • \(\hat{n}\) is the normal of the dislocation’s slip plane.

  • -
  • \(\hat{\xi}\) is parallel to the dislocation’s line direction.

  • -
-

Based on these three vectors, we can define a Cartesian coordinate system for the dislocation solution with positions, \(x_i\), given by

-
-\[x_i = x_1 \hat{m} + x_2 \hat{n} + x_3 \hat{\xi}\]
-

For straight dislocations, the elasticity solutions are independent of the \(x_3\) direction and therefore only depend on \(x_1\) and \(x_2\).

-
-

2.1.1. Isotropic solution

-

For isotropic materials, the elastic solution for a Volterra dislocation can be given as analytical equations. Variations of the analytical solutions can be found in every textbook on dislocation theory. The particular equations used in atomman match those found in Elementary Dislocation Theory by Weertman and Weertman except with flipped signs. This choice provides the best correspondence of the isotropic solution to the anisotropic solutions described below.

-

Isotropic elastic constants can be represented using only two independent terms. The two isotropic elastic constants typically used for dislocation solutions are the shear modulus, \(\mu\), and the Poisson’s ratio, \(\nu\).

-

The isotropic displacements, \(d_i\), for a dislocation centered at \(x_1 = x_2 = 0\) are

-
-\[u_1 = \frac{b_1}{2 \pi} \left[ \theta + \frac{x_1x_2}{2 (1 - \nu) (x_1^2 + x_2^2)} \right]\]
-
-\[u_2 = \frac{b_1}{2 \pi} \left[ -\frac{1 - 2 \nu} {4 (1 - \nu)} \ln(x_1^2 + x_2^2) - + \frac{y^2} {2 (1 - \nu) (x^2 + y^2)} \right]\]
-
-\[u_3 = \frac{b_3}{2 \pi} \theta.\]
-

Here (and below), \(\theta\) is the radial angle coordinate

-
-\[\theta=\tan^{-1} (x_2/x_1),\]
-

which is taken to range from \(-\pi\) to \(\pi\).

-

The isotropic stress, \(\sigma_{ij}\), is given by the equations

-
-\[\sigma_{11} = -\frac{\mu b_1}{2 \pi (1 - \nu)} \frac{x_2 (3 x_1^2 + x_2^2)} { (x_1^2 + x_2^2)^2}\]
-
-\[\sigma_{22} = \frac{\mu b_1}{2 \pi (1 - \nu)} \frac{x_2 (x_1^2 - x_2^2)} { (x_1^2 + x_2^2)^2}\]
-
-\[\sigma_{33} = \nu(\sigma_{11} + \sigma_{22})\]
-
-\[\sigma_{12} = \frac{\mu b_1}{2 \pi (1 - \nu)} \frac{x_1(x_1^2 - x_2^2)) }{ (x_1^2 + x_2^2)^2}\]
-
-\[\sigma_{13} =-\frac{\mu b_3}{2 \pi} \frac{x_2}{(x_1^2 + x_2^2)}\]
-
-\[\sigma_{23} = \frac{\mu b_3}{2 \pi} \frac{x_1}{(x_1^2 + x_2^2)}\]
-

The energy coefficient tensor, \(K_{ij}\), depends on the elastic constants. Only normal components are non-zero for the isotropic case

-
-\[K_{11}^{iso} = K_{22}^{iso} = K_{edge}^{iso} = \frac{\mu}{1 - \nu}\]
-
-\[K_{33}^{iso} = K_{screw}^{iso} = \mu.\]
-

Caution: \(K_{ij}\) may be defined slightly differently in other works depending on if they contain multiplicative factors. If you are comparing atomman’s values to other works, be sure to double check how \(K_{ij}\) and the self-energy equations below are defined.

-

The dislocation’s self-energy is the energy per unit length within a ring region around the dislocation line. It depends on \(K_{ij}\) and \(b_i\)

-
-\[\frac{W}{l} = \frac{b_i K_{ij} b_j}{4 \pi} \ln{ \left( \frac{R}{r_0} \right)}.\]
-

The energy coefficient tensor can also be reduced down to a single coefficient, \(K\)

-
-\[K = \frac{b_i K_{ij} b_j} {b_k b_k},\]
-

which the self-energy expression then becomes

-
-\[\frac{W}{l} = \frac{K b^2}{4 \pi} \ln{ \left( \frac{R}{r_0} \right)},\]
-

Alternatively, everything in the self-energy expression outside the ln term can be grouped together as the pre-ln factor

-
-\[\frac{W}{l} = a \ln{ \left( \frac{R}{r_0} \right)}.\]
-
-
-

2.1.2. Anisotropic solution

-

The elasticity solution for Volterra dislocations in anisotropic materials was first introduced by Eshelby. Starting with the fundamental equations of elasticity

-
-\[\sigma_{ij} = C_{ijkl} \epsilon_{kl}\]
-
-\[\epsilon_{ij} = \frac{1}{2} \left(\frac{\partial u_i}{\partial x_j} + \frac{\partial u_j}{\partial x_i}\right)\]
-
-\[\frac{\partial \sigma_{ij}}{\partial x_j} = 0\]
-

Combining these and taking the solution to be independent of \(x_3\) generates the partial differential equation

-
-\[C_{ijkl} \frac{ \partial^2 u_k}{\partial x_j \partial x_l} = 0\]
-

Solutions of the partial differential equation are of the form

-
-\[u_k = A_k f(x_1 + p x_2)\]
-

Values of \(A_k\) and \(p\) can be found by solving

-
-\[\left[C_{i1k1} + \left(C_{i1k2} + C_{i2k1} \right) p + C_{i2k2} p^2 \right] A_k = 0\]
-

The determinate expression is a sixth-order polynomial expression resulting in six complex roots, \(p_\alpha\) with \(\alpha\) ranging 1 to 6. There is also one \(A_{k \alpha}\) corresponding to each root.

-

Later, Stroh introduced a method for easily solving for the six roots. Another vector, \(L_i\) is defined for each \(\alpha\) root as

-
-\[L_{i \alpha} = \left(C_{i2k1} + p_{\alpha} C_{i2k2} \right) A_{k \alpha}\]
-

and a normalization factor, \(k_{\alpha}\), is introduced as

-
-\[k_{\alpha} = \frac{1}{2 A_{j \alpha} L_{j \alpha}}\]
-

Stroh’s method then expresses the problem as an eigenvector problem in which the eigenvalues give \(p_{\alpha}\) and the eigenvectors give \(A_{i \alpha}\) and \(L_{i \alpha}\). Properties of the dislocation can then be computed using these solution parameters

-
-\[u_j = \frac{1}{2 \pi i} \sum_{\alpha} \pm k_{\alpha} A_{j \alpha} (L_{l \alpha} b_l) \ln{\eta_{\alpha}}\]
-
-\[\sigma_{ij} = \frac{1}{2 \pi i} \sum_{\alpha} \pm k_{\alpha} C_{ijkl}[m_l + p_{\alpha} n_l] A_{k \alpha} (L_{m \alpha} b_m) \frac{1}{\eta_{\alpha}}\]
-
-\[K_{jl} = i \sum_{\alpha} \pm k_{\alpha} L_{j \alpha} L_{l \alpha}\]
-

For the displacement and stress equations, \(\eta\) is an imaginary coordinate that combines \(x_1\) and \(x_2\) using the computed eigenvalues \(p_{\alpha}\)

-
-\[\eta_{\alpha} = x_1 + p_{\alpha} x_2\]
-
-
-

2.1.3. Linear displacement solution

-

The periodic array of dislocations configuration uses an additional solution based on applying a linear gradient of displacements to the atoms to generate a geometrically necessary dislocation inside the system.

-
-\[u_j = \frac{b_j}{2} - \text{sign}(x_2)\left[ \frac{x_1 b_j}{2l} + \frac{b_j}{4}\right],\]
-

where \(l\) is the full periodic length of the system in the \(\hat{m}\) direction. By applying opposite displacements above and below the slip plane, the atomic disregistry linearly varies from 0 to \(b\) across the system.

-

While this does not give a good approximation of a real dislocation, it does have a couple of benefits besides its simplicity. First, the solution is independent of the dislocation’s position along the slip plane. This makes it a good choice of displacements for the non-periodic surfaces if the atoms are held rigidly as the interaction between the dislocation and the boundaries will remain constant as the dislocation moves. Also, since \(u_j\) depends on \(\text{sign}(x_2)\) rather than -\(x_2\) the solution on each side of the slip plane only depends on \(x_1\).

-
-
-
-

2.2. Dislocation definition

-

A type of dislocation can be fully defined relative to a unit cell, ucell, by specifying the Miller slip plane, \(n_{(hkl)}\), the Miller Burgers vector, \(b_{[uvw]}\), and the Miller line direction, \(\xi_{[uvw]}\). Defining dislocations using Miller planes and vectors rather than Cartesian planes and vectors is more convenient as the definitions hold true for all crystals associated with a given crystal prototype. This is also how dislocations are typically defined by materials -scientists.

-

The dislocation’s character (screw, edge, mixed) is given by the angle between \(b_{[uvw]}\) and \(\xi_{[uvw]}\). Screw dislocations have \(\xi_{[uvw]}\) parallel to \(b_{[uvw]}\), and therefore a character angle of 0\(^{\circ}\) or 180\(^{\circ}\), while edge dislocations have the two directions perpendicular for a character angle of 90\(^{\circ}\). For atomic configurations, the line direction must be a crystal vector, which limits the character angles that -can be explored. This is done as the system is periodic along the line direction vector and atomic compatibility is only possible if the direction is a lattice vector or a multiple of one.

-

The orientation of the dislocation solution with respect to the final atomic configuration is handled by specifying the dislocation solution axes \(\hat{m}\) and \(\hat{n}\) as Cartesian unit vectors. For simplicity, the Dislocation class restricts \(\hat{m}\), \(\hat{n}\), and \(\hat{\xi} = \hat{m} \times \hat{n}\) to each be aligned with one of the three Cartesian axes of the atomic configuration.

-

The slip plane normal relative to the unit cell, \(n_{ucell}\), is identified by converting \(n_{(hkl)}\) into Cartesian units. Using \(n_{ucell}\), three Miller crystal vectors are identified that determine how to rotate the unit cell

-
    -
  • \(\xi_{[uvw]}\).

  • -
  • An in-plane vector with \(|u|,|v|,|w|\) values less than some maximum that is closest to perpendicular to \(\xi_{[uvw]}\).

  • -
  • An out-of-plane vector with \(|u|,|v|,|w|\) values less than some maximum that is closest to being parallel to \(n_{ucell}\).

  • -
-

These three vectors are used as the box rotation vectors, \(a_{[uvw]}\), \(b_{[uvw]}\), and \(c_{[uvw]}\), for orienting the final configuration. How the identified vectors are associated with the rotation vectors depends on the Cartesian axes that \(\hat{m}\), \(\hat{n}\) and \(\hat{\xi}\) correspond to

-
    -
  • In the final configuration, \(a_{[uvw]}\) has its primary component along the \(x\)-axis, \(b_{[uvw]}\) along the \(y\)-axis, and \(c_{[uvw]}\) along the \(z\)-axis.

  • -
  • \(\xi_{[uvw]}\) is positioned along the Cartesian axis specified by \(\hat{\xi}\). This alignment means that the associated rotation vector will only have a component along that Cartesian direction. For example, if \(\hat{\xi}=x\), then \(a_{[uvw]}\) will only have an \(x\) component.

  • -
  • The identified out-of-plane vector will correspond to the box rotation vector with the primary component along the Cartesian axis specified by \(\hat{n}\).

  • -
  • The identified in-plane vector is taken as the final box rotation vector. As this vector is necessarily normal to \(\hat{n}\), it cannot have a component along the Cartesian axis associated with \(\hat{n}\).

  • -
-

Note that the out-of-plane vector need not be parallel to the slip plane normal. Rather, it simply needs to be the only box vector with a component in the \(\hat{n}\) direction. This is because the slip plane is defined by the cross product of \(\xi_{[uvw]}\) and the identified in-plane vector, not the out-of-plane vector.

-

A rotated cell, rcell, is then created using ucell and the rotation vectors. This rotated cell serves as the seed for constructing the larger atomic configurations in which the dislocation is inserted. As rcell is constructed, the Cartesian transformation matrix, \(T\), associated with transforming from the ucell orientation to the rcell orientation is also identified. The unit cell and \(T\) are then used to convert \(b_{[uvw]}\) to the Cartesian \(b\) vector.

-

Finally, a rigid body shift, \(\delta\) is defined relative to rcell. This is used to adjust the atomic positions such that the mathematical position of the dislocation line and/or slip plane can be properly placed relative to the atoms. For dislocations defined relative to crystal prototypes, \(\delta\) can be expressed in reduced coordinates relative to ucell. Alternatively, rcell itself can be used to identify shifts normal to the slip plane that place the mathematical slip plane -halfway between all atomic planes in rcell. This allows for dislocations to be easily generated either from pre-defined parameters or based on optimum shift recommendations.

-
-
-

2.3. Boundary conditions

-
-

2.3.1. Dislocation monopoles

-

A dislocation monopole is an atomic configuration that contains a single straight dislocation.

-
    -
  • The box direction parallel to the dislocation line is made periodic. The other two box directions are non-periodic.

  • -
  • A boundary region is defined that encompasses the atoms near the non-periodic boundaries. This region is identified by changing the atype values of the atoms in those geometric regions.

  • -
-

The Dislocation class constructs the atomic configurations but leaves it up to users to define how to relax the system. Typically, the atoms in the boundary region are held fixed while the remaining atoms near the core are relaxed using molecular dynamics steps and/or an energy or force minimization. Relaxations can either be rigid boundary relaxations or flexible boundary relaxations depending on if the boundary atoms are adjusted during the relaxation process.

-

A rigid boundary relaxation is one in which the boundary atoms are never adjusted after the initial system construction. As the atoms are held at a dislocation solution, the initial positions tend to be a decent guess for dislocations with compact cores. However, a misfit force will arise at the interface between the boundary and non-boundary atoms that can influence the dislocation structure, energies and behavior. The influence of the misfit force can be minimized by constructing large atomic -configurations and keeping investigations to dislocations with compact cores that remain positioned near the center of the systems.

-

A flexible boundary relaxation is one in which the boundary atoms are subjected to an alternative relaxation method, such as the lattice Greens function. This alternative relaxation method allows for the misfit forces at the interface between the boundary and non-boundary atoms to be reduced while preventing the atoms at the non-periodic box boundaries from forming free surfaces. This method is preferred for expensive atomistic methods like DFT as it gives good structure predictions as long as -the dislocation core itself remains in the non-boundary region.

-
-
-

2.3.2. Periodic array of dislocations

-

A periodic array of dislocations atomic configuration is one in which the system itself only contains one dislocation, but the system’s box boundary conditions are such that it represents an infinite array of equally spaced dislocations.

-
    -
  • The two box directions in the slip plane are made periodic while the out-of-plane box direction is non-periodic.

  • -
  • The box dimensions are modified to ensure that the atoms remain compatible and coherent across the two periodic box directions.

  • -
  • For dislocations with edge components, the atomic compatibility requires that a half-plane of atoms either be inserted or deleted. This is handled here by shrinking the box dimensions and identifying the half-plane of atoms to delete as those that have nearly identical positions with other atoms in the shrunken system.

  • -
  • A boundary region is identified at the non-periodic surface. The atoms in the boundary region are identified by changing their atype values, and are given coordinates that correspond to the global linear displacements rather than the local dislocation displacements.

  • -
-

The choice of displacing the atoms in the boundary region by a linear gradient of displacements rather than the dislocation solution displacements is done as the linear gradient is independent of the dislocation’s position. There will be misfit forces at the interface between the boundary and non-boundary regions, but those forces will be (mostly) independent of the dislocation’s position in the system. The slip behavior of dislocations can therefore be studied by applying shear strains/stresses -to the system by adding displacements/forces to the boundary atoms. Some examples:

-
    -
  • Quasistatic calculations in which energy/force relaxations are used after incremental displacements of the boundaries. This can be used to estimate the Peierls barrier, with good estimates requiring very small force relaxation tolerances and very small displacements at each iteration.

  • -
  • Strain-controlled simulations in which a constant displacement rate is applied to the boundary atoms. Simulations can either have rigid boundaries, in which the boundary atoms only move in the displacement direction, or free-surface boundaries, in which motion in the displacement direction is fixed but MD motions in perpendicular directions are allowed.

  • -
  • Stress-controlled simulations in which a constant force is applied to the boundary atoms. Simulations can either have rigid boundaries, in which the boundary is treated as a rigid block that the force acts on, or free-surface boundaries, in which the boundary atoms are subjected to MD steps but each has an extra constant force applied to it.

  • -
-
-
-
-
-

3. Volterra solutions

-

Skip to Section #4 if you want to construct atomic configurations!

-

A Volterra dislocation solution can be obtained with the solve_volterra_dislocation() function.

-

Update Version 1.3.2: ξ_uvw, slip_hkl, and box parameters added to make defining systems easier, especially for non-cubic crystals. axes renamed to transform for clarity.

-

Parameters

-
    -
  • C (atomman.ElasticConstants) The medium’s elastic constants.

  • -
  • burgers (array-like object) The dislocation’s Burgers vector.

  • -
  • ξ_uvw (array-like object) The Miller crystal vector associated with the dislocation’s line direction. Must be given with slip_hkl to identify the transformation matrix to use on C and burgers.

  • -
  • slip_hkl (array-like object) The Miller plane indices associated with the dislocation’s slip plane. Must be given with slip_hkl to identify the transformation matrix to use on C and burgers.

  • -
  • transform (array-like object, optional) A 3x3 set of orthogonal Cartesian vectors that define the transformation matrix to use on C and burgers to convert from the standard (unit cell) and dislocation orientations. The 3 vectors will automatically be converted into unit vectors. Using this is an alternative to using ξ_uvw and slip_hkl.

  • -
  • axes (array-like object, optional) Same as transform. Retained for backwards compatibility.

  • -
  • box (atomman.Box, optional) The unit cell’s box that crystal vectors are taken with respect to. If not given, will use a cubic box with a=1 meaning that burgers, ξ_uvw and slip_hkl will be interpreted as Cartesian vectors.

  • -
  • m (array-like object, optional) The m Cartesian unit vector for the solution giving the \(x_1\) direction. m, n, and \(\xi\) (dislocation line direction) should be right-hand orthogonal. Default value is [1,0,0] (Cartesian x-axis).

  • -
  • n (array-like object, optional) The n Cartesian unit vector for the solution giving the \(x_2\) direction. m, n, and \(\xi\) (dislocation line direction) should be right-hand orthogonal. Default value is [0,1,0] (Cartesian y-axis).

  • -
  • tol (float) Tolerance parameter used to round off near-zero values. Default value is 1e-8.

  • -
-

Returns

-
    -
  • (atomman.defect.VolterraDislocation) The dislocation solution. This will be an atomman.defect.IsotropicVolterraDislocation object or an atomman.defect.Stroh object depending on if the elastic constants used are isotropic or anisotropic.

  • -
-
-

3.1. Build solution

-

Specify materials properties, namely the unit cell box and the elastic constants.

-
-
[2]:
-
-
-
-# Rough values for fcc Cu
-
-# Build box
-a = uc.set_in_units(3.6, 'angstrom')
-box = am.Box.cubic(a=a)
-
-# Isotropic Cij values
-#E = uc.set_in_units(130, 'GPa')
-#Poisson = 0.34
-#C = am.ElasticConstants(E=E, nu=Poisson)
-
-# Anisotropic values for Cu
-C11 = uc.set_in_units(169, 'GPa')
-C12 = uc.set_in_units(122, 'GPa')
-C44 = uc.set_in_units(75.4, 'GPa')
-C = am.ElasticConstants(C11=C11, C12=C12, C44=C44)
-
-print('Cij in GPa:')
-print(uc.get_in_units(C.Cij, 'GPa'))
-
-
-
-
-
-
-
-
-Cij in GPa:
-[[169.  122.  122.    0.    0.    0. ]
- [122.  169.  122.    0.    0.    0. ]
- [122.  122.  169.    0.    0.    0. ]
- [  0.    0.    0.   75.4   0.    0. ]
- [  0.    0.    0.    0.   75.4   0. ]
- [  0.    0.    0.    0.    0.   75.4]]
-
-
-

Specify the dislocation type. Using box (above) allows for these values to be given as Miller crystal vectors.

-
-
[3]:
-
-
-
-# fcc a/2[1 0 -1](1 1 1)
-burgers = 0.5 * np.array([1, 0, -1])
-slip_hkl = np.array([1, 1, 1])
-
-# The dislocation's line direction (ξ_uvw) determines character
-ξ_uvw = [ 1,-2, 1] # 90 degree edge
-#ξ_uvw = [1, -1, 0] # 60 degree mixed
-#ξ_uvw = [1, 1, -2] # 30 degree mixed
-#ξ_uvw = [1, 0, -1] # 0 degree screw, i.e. parallel to burgers
-
-
-
-

Specify the orientation for the solution.

-
-
[4]:
-
-
-
-m = [1, 0, 0] # align edge component with the x-axis
-n = [0, 1, 0] # align slip plane normal with the y-axis
-
-
-
-

Create the solution

-
-
[5]:
-
-
-
-solution = am.defect.solve_volterra_dislocation(C, burgers, ξ_uvw=ξ_uvw, slip_hkl=slip_hkl, box=box, m=m, n=n)
-
-
-
-
-

3.2. Compute properties

-

Check configuration

-
-
[6]:
-
-
-
-print('Dislocation configuration:')
-print('m:        ', solution.m)
-print('n:        ', solution.n)
-print('ξ:        ', solution.ξ)
-print('Burgers:  ', uc.get_in_units(solution.burgers, 'angstrom'), 'angstrom')
-print('|Burgers|:', uc.get_in_units(np.linalg.norm(solution.burgers), 'angstrom'), 'angstrom')
-print('Character:', solution.characterangle(), 'degrees')
-print()
-print('Transformation matrix from standard orientation to dislocation orientation:')
-print(solution.transform)
-
-
-
-
-
-
-
-
-Dislocation configuration:
-m:         [1. 0. 0.]
-n:         [0. 1. 0.]
-ξ:         [0. 0. 1.]
-Burgers:   [2.54558441 0.         0.        ] angstrom
-|Burgers|: 2.545584412271571 angstrom
-Character: 90.0 degrees
-
-Transformation matrix from standard orientation to dislocation orientation:
-[[ 0.70710678  0.         -0.70710678]
- [ 0.57735027  0.57735027  0.57735027]
- [ 0.40824829 -0.81649658  0.40824829]]
-
-
-

View solution parameters

-
-
[7]:
-
-
-
-if isinstance(solution, am.defect.IsotropicVolterraDislocation):
-    print('Solution is isotropic')
-    print(f'mu -> {uc.get_in_units(solution.mu, "GPa"):.3f} GPa')
-    print(f'nu -> {solution.nu:.3f}')
-
-elif isinstance(solution, am.defect.Stroh):
-    print('Solution is anisotropic')
-    print('p ->')
-    print(solution.p)
-    print('A ->')
-    print(solution.A)
-    print('L ->')
-    print(solution.L)
-    print('k ->')
-    print(solution.k)
-
-
-
-
-
-
-
-
-Solution is anisotropic
-p ->
-[ 5.74325108e-01+1.48063821j  5.74325108e-01-1.48063821j
- -5.74325108e-01+1.48063821j -5.74325108e-01-1.48063821j
- -5.55111512e-17+0.39392852j -5.55111512e-17-0.39392852j]
-A ->
-[[ 4.92478068e-01+2.92695902e-01j -1.86741173e-01+9.77580274e-02j
-   6.67206634e-01+0.00000000e+00j]
- [ 4.92478068e-01-2.92695902e-01j -1.86741173e-01-9.77580274e-02j
-   6.67206634e-01-0.00000000e+00j]
- [-4.92478068e-01+2.92695902e-01j -1.86741173e-01-9.77580274e-02j
-   6.67206634e-01+0.00000000e+00j]
- [-4.92478068e-01-2.92695902e-01j -1.86741173e-01+9.77580274e-02j
-   6.67206634e-01-0.00000000e+00j]
- [ 3.55985935e-16+1.47294255e-01j -7.89087414e-01+0.00000000e+00j
-  -4.27766816e-01-1.31098024e-16j]
- [ 3.55985935e-16-1.47294255e-01j -7.89087414e-01-0.00000000e+00j
-  -4.27766816e-01+1.31098024e-16j]]
-L ->
-[[ 1.87773573e-01-2.53391120e-01j  1.05996344e-01+1.67934295e-01j
-  -2.23781767e-02-2.06874267e-01j]
- [ 1.87773573e-01+2.53391120e-01j  1.05996344e-01-1.67934295e-01j
-  -2.23781767e-02+2.06874267e-01j]
- [ 1.87773573e-01+2.53391120e-01j -1.05996344e-01+1.67934295e-01j
-   2.23781767e-02-2.06874267e-01j]
- [ 1.87773573e-01-2.53391120e-01j -1.05996344e-01-1.67934295e-01j
-   2.23781767e-02+2.06874267e-01j]
- [ 1.50398047e-01-1.50200901e-17j -1.18890059e-17+3.81790193e-01j
-   1.59422563e-16+6.54039958e-02j]
- [ 1.50398047e-01+1.50200901e-17j -1.18890059e-17-3.81790193e-01j
-   1.59422563e-16-6.54039958e-02j]]
-k ->
-[ 8.78792266e-01+1.74127681j  8.78792266e-01-1.74127681j
- -8.78792266e-01+1.74127681j -8.78792266e-01-1.74127681j
-  2.92248361e-17+1.62818332j  2.92248361e-17-1.62818332j]
-
-
-

\(K_{ij}\), \(K\), and pre-ln factor

-
-
[8]:
-
-
-
-print('K_tensor (in GPa) ->')
-print(uc.get_in_units(solution.K_tensor, 'GPa'))
-print()
-
-print(f'K_coeff -> {uc.get_in_units(solution.K_coeff, "GPa"):.3f} GPa')
-print(f'preln -> {uc.get_in_units(solution.preln, "eV/Å"):f} eV/Å')
-
-
-
-
-
-
-
-
-K_tensor (in GPa) ->
-[[74.09648694  0.          0.        ]
- [ 0.         74.9325418  -8.62796136]
- [ 0.         -8.62796136 44.21693456]]
-
-K_coeff -> 74.096 GPa
-preln -> 0.238480 eV/Å
-
-
-

Construct a grid of points for evaluating displacement and stress

-
-
[9]:
-
-
-
-# Generate spacial grid of points
-xy_max = 15
-num_xy = 100
-xvals = yvals = np.linspace(-xy_max, xy_max, num_xy)
-xvals, yvals = np.meshgrid(np.linspace(-xy_max, xy_max, 100), np.linspace(-xy_max, xy_max, num_xy))
-
-# Convert points to coordinates relative to dislocation system
-coords = np.outer(xvals, m) + np.outer(yvals, n)
-
-# Identify x, y directions
-if np.isclose(m[0], 1.0):
-    xlabel = '$x_1$'
-elif np.isclose(m[1], 1.0):
-    xlabel = '$x_2$'
-elif np.isclose(m[2], 1.0):
-    xlabel = '$x_3$'
-if np.isclose(n[0], 1.0):
-    ylabel = '$x_1$'
-elif np.isclose(n[1], 1.0):
-    ylabel = '$x_2$'
-elif np.isclose(n[2], 1.0):
-    ylabel = '$x_3$'
-
-
-
-

Displacements

-
-
[10]:
-
-
-
-# Compute displacements
-disp = solution.displacement(coords)
-
-# Plot
-disp_max = np.abs(disp.max())
-fig, axes = plt.subplots(figsize=(16,4), ncols=3)
-
-for i in range(3):
-    im = axes[i].pcolormesh(xvals, yvals, disp[:,i].reshape(num_xy, num_xy), vmin=-disp_max, vmax=disp_max)
-    axes[i].set_title(f'$u_{{{i+1}}}$')
-    axes[i].set_xlabel(xlabel, fontsize='large')
-    axes[i].set_ylabel(ylabel, fontsize='large')
-    fig.colorbar(im, ax=axes[i])
-
-print('Coordinates and displacements in Angstroms')
-plt.show()
-
-
-
-
-
-
-
-
-Coordinates and displacements in Angstroms
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_24_1.png -
-
-

Stress

-
-
[11]:
-
-
-
-# Compute stress states
-stress = uc.get_in_units(solution.stress(coords), 'GPa')
-
-# Plot
-stress_max = np.abs(stress.max()) / 10
-fig, axes = plt.subplots(figsize=(16,14), ncols=3, nrows=3)
-
-for i in range(3):
-    for j in range(3):
-        im = axes[i, j].pcolormesh(xvals, yvals, stress[:, i, j].reshape(num_xy, num_xy), vmin=-stress_max, vmax=stress_max)
-        axes[i, j].set_title(f'$\sigma_{{{i+1}{j+1}}}$')
-        axes[i, j].set_xlabel(xlabel, fontsize='large')
-        axes[i, j].set_ylabel(ylabel, fontsize='large')
-        fig.colorbar(im, ax=axes[i, j])
-
-print('Stress components in GPa, coordinates in Angstroms')
-plt.show()
-
-
-
-
-
-
-
-
-Stress components in GPa, coordinates in Angstroms
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_26_1.png -
-
-
-
-
-
-

4. Dislocation initialization

-

The Dislocation class is initialized by giving it parameters associated with the crystal information and the dislocation definition.

-

Crystal parameters

-
    -
  • ucell (atomman.System) The unit cell to use as the seed for generating the dislocation monopole system.

  • -
  • C (atomman.ElasticConstants) The elastic constants associated with the bulk crystal structure for ucell.

  • -
-

Dislocation parameters

-
    -
  • burgers (array-like object) The dislocation’s Burgers vector given as a Miller or Miller-Bravais vector relative to ucell.

  • -
  • ξ_uvw (array-like object) The dislocation’s line direction given as a Miller or Miller-Bravais vector relative to ucell.

  • -
  • slip_hkl (array-like object) The dislocation’s slip plane given as a Miller or Miller-Bravais plane relative to ucell.

  • -
  • m (array-like object, optional) The m unit vector for the dislocation solution. m, n, and ξ (dislocation line) should be right-hand orthogonal. Default value is [0,1,0] (y-axis).

  • -
  • n (array-like object, optional) The n unit vector for the dislocation solution. m, n, and ξ (dislocation line) should be right-hand orthogonal. Default value is [0,0,1] (z-axis). n is normal to the dislocation slip plane.

  • -
  • tol (float) A cutoff tolerance used with obtaining the dislocation solution. Only needs to be changed if there are issues with obtaining a solution.

  • -
-

Shift parameters

-
    -
  • shift (float, optional) A rigid body shift to apply to the rotated cell prior to inserting the dislocation. Should be selected such that the ideal slip plane does not correspond to any atomic planes. Is taken as absolute if shiftscale is False, or relative to the rotated cell’s box vectors if shiftscale is True. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.

  • -
  • shiftindex (float, optional) The index of the identified optimum shifts based on the rotated cell to use. Different values allow for the selection of different atomic planes neighboring the slip plane. Note that shiftindex values only apply shifts normal to the slip plane; best shifts for non-planar dislocations (like bcc screw) may also need a shift in the slip plane. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.

  • -
  • shiftscale (bool, optional) If False (default), a given shift value will be taken as absolute Cartesian. If True, a given shift will be taken relative to the rotated cell’s box vectors.

  • -
-
-

4.1. Define the Dislocation

-

This is similar to what is done in Section #3 with the main differences being that the full unit cell is created rather than the box, and m and n are left as their default values. The default m=\([0,1,0]\) and n=\([0,0,1]\) values are left alone as this is the optimal choice for LAMMPS calculations and allows for the construction of any perfect straight dislocation type for any crystal structure.

-

Specify materials properties, namely the unit cell and the elastic constants.

-
-
[12]:
-
-
-
-# Rough values for fcc Al
-
-ucell = am.load('prototype', 'A1--Cu--fcc', a=4.05, symbols='Al')
-print(ucell)
-print()
-
-C = am.ElasticConstants(C11 = uc.set_in_units(105, 'GPa'),
-                        C12 = uc.set_in_units(70, 'GPa'),
-                        C44 = uc.set_in_units(45, 'GPa'))
-print('Cij (GPa) =')
-print(uc.get_in_units(C.Cij, 'GPa'))
-
-
-
-
-
-
-
-
-avect =  [ 4.050,  0.000,  0.000]
-bvect =  [ 0.000,  4.050,  0.000]
-cvect =  [ 0.000,  0.000,  4.050]
-origin = [ 0.000,  0.000,  0.000]
-natoms = 4
-natypes = 1
-symbols = ('Al',)
-pbc = [ True  True  True]
-per-atom properties = ['atype', 'pos']
-     id |   atype |  pos[0] |  pos[1] |  pos[2]
-      0 |       1 |   0.000 |   0.000 |   0.000
-      1 |       1 |   0.000 |   2.025 |   2.025
-      2 |       1 |   2.025 |   0.000 |   2.025
-      3 |       1 |   2.025 |   2.025 |   0.000
-
-Cij (GPa) =
-[[105.  70.  70.   0.   0.   0.]
- [ 70. 105.  70.   0.   0.   0.]
- [ 70.  70. 105.   0.   0.   0.]
- [  0.   0.   0.  45.   0.   0.]
- [  0.   0.   0.   0.  45.   0.]
- [  0.   0.   0.   0.   0.  45.]]
-
-
-

Define the dislocation

-
-
[13]:
-
-
-
-# FCC a/2<101>{111} dislocation
-burgers = np.array([0.5, 0.0, -0.5])
-slip_hkl = np.array([1,1,1])
-
-# Line direction determines dislocation character
-#ξ_uvw = [ 1,-2, 1] # 90 degree edge
-#ξ_uvw = [1, -1, 0] # 60 degree mixed
-ξ_uvw = [1, 1, -2] # 30 degree mixed
-#ξ_uvw = [1, 0, -1] # 0 degree screw, i.e. parallel to burgers
-
-
-
-

Initialize the Dislocation object using the above parameters

-
-
[14]:
-
-
-
-disl = am.defect.Dislocation(ucell, C, burgers, ξ_uvw, slip_hkl)
-
-
-
-
-
-

4.2. Check the solution

-

The Dislocation object has a number of attributes that describe the basic setup.

-
    -
  • transform is the Cartesian transformation matrix associated with rotating from the unit cell orientation to the rotated cell orientation. This can be used to transform any other vectors between the two orientations.

  • -
  • uvws are the Miller vectors relative to the unit cell that are used for the rotated cell’s box vectors.

  • -
  • ucell is the unit cell.

  • -
  • rcell is the cell obtained after rotating ucell.

  • -
  • dislsol is the VolterraDislocation solution that will be used to displace the atoms

  • -
  • shifts provides a list of all “ideal” delta shift values that will position the slip plane halfway between two atomic planes. There is no guarantee that the planes are symmetrically unique and no shifting in the plane is accounted for either.

  • -
  • shift is the shift value currently set. The default value is the first value in shifts.

  • -
-
-
[15]:
-
-
-
-print('Transformation matrix =')
-print(disl.transform)
-print()
-
-print('Rotation uvws =')
-print(disl.uvws)
-print()
-
-print('Unit cell =')
-print(disl.ucell)
-print()
-
-print('Rotated cell =')
-print(disl.rcell)
-print()
-
-
-
-
-
-
-
-
-Transformation matrix =
-[[ 0.40824829  0.40824829 -0.81649658]
- [-0.70710678  0.70710678  0.        ]
- [ 0.57735027  0.57735027  0.57735027]]
-
-Rotation uvws =
-[[ 1.  1. -2.]
- [-1.  1.  0.]
- [ 1.  1.  1.]]
-
-Unit cell =
-avect =  [ 4.050,  0.000,  0.000]
-bvect =  [ 0.000,  4.050,  0.000]
-cvect =  [ 0.000,  0.000,  4.050]
-origin = [ 0.000,  0.000,  0.000]
-natoms = 4
-natypes = 1
-symbols = ('Al',)
-pbc = [ True  True  True]
-per-atom properties = ['atype', 'pos']
-     id |   atype |  pos[0] |  pos[1] |  pos[2]
-      0 |       1 |   0.000 |   0.000 |   0.000
-      1 |       1 |   0.000 |   2.025 |   2.025
-      2 |       1 |   2.025 |   0.000 |   2.025
-      3 |       1 |   2.025 |   2.025 |   0.000
-
-Rotated cell =
-avect =  [ 9.920,  0.000,  0.000]
-bvect =  [ 0.000,  5.728,  0.000]
-cvect =  [ 0.000,  0.000,  7.015]
-origin = [ 0.000,  0.000,  0.000]
-natoms = 24
-natypes = 1
-symbols = ('Al',)
-pbc = [ True  True  True]
-per-atom properties = ['atype', 'pos']
-     id |   atype |  pos[0] |  pos[1] |  pos[2]
-      0 |       1 |   7.440 |   4.296 |   0.000
-      1 |       1 |   7.440 |   1.432 |   0.000
-      2 |       1 |   9.094 |   1.432 |   2.338
-      3 |       1 |   9.094 |   4.296 |   2.338
-      4 |       1 |   2.480 |   1.432 |   0.000
-      5 |       1 |   4.960 |   0.000 |   0.000
-      6 |       1 |   2.480 |   4.296 |   0.000
-      7 |       1 |   4.960 |   2.864 |   0.000
-      8 |       1 |   4.134 |   4.296 |   2.338
-      9 |       1 |   4.134 |   1.432 |   2.338
-     10 |       1 |   6.614 |   2.864 |   2.338
-     11 |       1 |   6.614 |   5.728 |   2.338
-     12 |       1 |   5.787 |   1.432 |   4.677
-     13 |       1 |   8.267 |   5.728 |   4.677
-     14 |       1 |   5.787 |   4.296 |   4.677
-     15 |       1 |   8.267 |   2.864 |   4.677
-     16 |       1 |   9.920 |   2.864 |   0.000
-     17 |       1 |   9.920 |   0.000 |   0.000
-     18 |       1 |   1.653 |   0.000 |   2.338
-     19 |       1 |   1.653 |   2.864 |   2.338
-     20 |       1 |   0.827 |   4.296 |   4.677
-     21 |       1 |   0.827 |   1.432 |   4.677
-     22 |       1 |   3.307 |   2.864 |   4.677
-     23 |       1 |   3.307 |   5.728 |   4.677
-
-
-
-

A Volterra dislocation solution is also obtained, which is accessible as the dislsol attribute

-
-
[16]:
-
-
-
-print(f'character angle = {disl.dislsol.characterangle()} degrees')
-print(f'K_coeff = {uc.get_in_units(disl.dislsol.K_coeff, "GPa"):.3f} GPa')
-print('burgers =', uc.get_in_units(disl.dislsol.burgers, "angstrom"), 'angstrom')
-
-
-
-
-
-
-
-
-character angle = 30.000000000000004 degrees
-K_coeff = 33.399 GPa
-burgers = [ 2.48010836 -1.43189123  0.        ] angstrom
-
-
-

The shift values should be selected such that the dislocation falls between atomic positions. For planar dislocations, the slip plane should be placed roughly halfway between atomic planes. The class automatically identifies all such shifts relative to rcell and stores them as the attribute shifts.

-

The initialization parameters allow for shifts to be defined in one of three ways:

-
    -
  1. Giving shiftindex indicates which of the identified shifts relative to rcell to use. If neither shift or shiftindex is specified, then shiftindex=0 is used.

  2. -
  3. Giving shift with shiftscale=False allows for an absolute Cartesian shift to be specified.

  4. -
  5. Giving shift with shiftscale=True allows for a shift relative to rcell’s box vectors to be specified.

  6. -
-

For non-planar screw dislocations, the dislocation core should be placed in the proper location where the involved slip planes intercept. This can be handled by specifying shifts using options 2 or 3.

-

Note that the shift can be changed when calling the monopole and periodicarray methods.

-
-
[17]:
-
-
-
-print('Identified shifts =')
-print(disl.shifts)
-print()
-
-print('The shift currently set to be used =', disl.shift)
-
-
-
-
-
-
-
-
-Identified shifts =
-[[0.         0.         1.1691343 ]
- [0.         0.         3.50740289]
- [0.         0.         5.84567148]]
-
-The shift currently set to be used = [0.        0.        1.1691343]
-
-
-
-
-
-

5. Dislocation Monopole Configuration

-

System size parameters

-
    -
  • sizemults (tuple, optional) The size multipliers to use when generating the system. Values are limited to being positive integers. The multipliers for the two non-periodic directions must be even. If not given, the default multipliers will be 2 for the non-periodic directions and 1 for the periodic direction.

  • -
  • amin (float, optional) A minimum thickness to use for the a box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both amin and sizemults is given, then the larger multiplier for the two will be used.

  • -
  • bmin (float, optional) A minimum thickness to use for the b box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both bmin and sizemults is given, then the larger multiplier for the two will be used.

  • -
  • cmin (float, optional) A minimum thickness to use for the c box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both cmin and sizemults is given, then the larger multiplier for the two will be used.

  • -
-

Shift parameters

-
    -
  • shift (float, optional) A rigid body shift to apply to the rotated cell prior to inserting the dislocation. Should be selected such that the ideal slip plane does not correspond to any atomic planes. Is taken as absolute if shiftscale is False, or relative to the rotated cell’s box vectors if shiftscale is True. Cannot be given with shiftindex. If neither shift nor shiftindex is given will use the shift set during class initialization.

  • -
  • shiftindex (float, optional) The index of the identified optimum shifts based on the rotated cell to use. Different values allow for the selection of different atomic planes neighboring the slip plane. Note that shiftindex values only apply shifts normal to the slip plane; best shifts for non-planar dislocations (like bcc screw) may also need a shift in the slip plane. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used then will use the -shift set during class initialization.

  • -
  • shiftscale (bool, optional) If False (default), a given shift value will be taken as absolute Cartesian. If True, a given shift will be taken relative to the rotated cell’s box vectors.

  • -
-

Boundary parameters

-
    -
  • boundaryshape (str, optional) Indicates the shape of the boundary region to use. Options are ‘cylinder’ (default) and ‘box’. For ‘cylinder’, the non-boundary region is defined by a cylinder with axis along the dislocation line and a radius that ensures the boundary is at least boundarywidth thick. For ‘box’, the boundary region will be exactly boundarywidth thick all around.

  • -
  • boundarywidth (float, optional) The width of the boundary region to apply. Default value is 0.0, i.e. no boundary region. All atoms in the boundary region will have their atype values changed.

  • -
  • boundaryscale (bool, optional) If False (Default), the boundarywidth will be taken as absolute. If True, the boundarywidth will be taken relative to the magnitude of the unit cell’s a box vector.

  • -
-

Return options

-
    -
  • return_base_system (bool, optional) If True then the dislocation-free base system corresponding to the dislocation system will also be returned. The base system is used as a reference state for most of the dislocation analysis tools.

  • -
-
-

5.1. Small atomic system example, easy to see atomic positions

-
-
[18]:
-
-
-
-base_system, disl_system = disl.monopole(bmin=30, cmin=30,
-                                         boundarywidth=1, boundaryscale=True,
-                                         return_base_system=True)
-
-
-
-
-
[19]:
-
-
-
-fig = plt.figure(figsize=(6,6))
-for atype in disl_system.atypes:
-    plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],
-             disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')
-plt.xlim(-20, 20)
-plt.ylim(-20, 20)
-plt.show()
-
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_45_0.png -
-
-
-
-

5.2. Large atomic system example, more useful for simulations

-
-
[20]:
-
-
-
-base_system, disl_system = disl.monopole(bmin=300, cmin=300,
-                                         boundarywidth=1, boundaryscale=True,
-                                         return_base_system=True)
-
-
-
-
-
[21]:
-
-
-
-fig = plt.figure(figsize=(6,6))
-for atype in disl_system.atypes:
-    plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],
-             disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')
-plt.xlim(-160, 160)
-plt.ylim(-160, 160)
-plt.show()
-
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_48_0.png -
-
-
-
-

5.3. Dislocation property evaluations

-

The dislocation characterization methods all compare defect configurations to a defect-free base system. The monopole method automatically returns a compatible base system that can be used for the characterization methods.

-

See the 4.6. Dislocation analysis tools Notebook for more dislocation property evaluations.

-

NOTE: The characterizations shown here are simply for demonstration purposes. For real problems, the returned dislocation system should be atomically relaxed prior to characterizing it.

-
-
[22]:
-
-
-
-# Plot disregistry
-xi, disreg = am.defect.disregistry(base_system, disl_system, m=[0,1,0], n=[0,0,1])
-
-fig = plt.figure(figsize=(8,6))
-
-plt.plot(xi, disreg[:, 0], label='x-disregistry', linewidth=3)
-plt.plot(xi, disreg[:, 1], label='y-disregistry', linewidth=3)
-plt.plot(xi, disreg[:, 2], label='z-disregistry', linewidth=3)
-
-plt.xlabel('$\\xi$-coordinate ($\AA$)', size='x-large')
-plt.ylabel('disregistry ($\AA$)', size='x-large')
-plt.legend(fontsize='xx-large')
-
-plt.legend()
-plt.show()
-
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_50_0.png -
-
-
-
-
-

6. Periodic Array of Dislocations Configuration

-

System size parameters

-
    -
  • sizemults (tuple, optional) The size multipliers to use when generating the system. Values are limited to being positive integers. The multipliers for the two non-periodic directions must be even. If not given, the default multipliers will be 2 for the non-periodic directions and 1 for the periodic direction.

  • -
  • amin (float, optional) A minimum thickness to use for the a box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both amin and sizemults is given, then the larger multiplier for the two will be used.

  • -
  • bmin (float, optional) A minimum thickness to use for the b box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both bmin and sizemults is given, then the larger multiplier for the two will be used.

  • -
  • cmin (float, optional) A minimum thickness to use for the c box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both cmin and sizemults is given, then the larger multiplier for the two will be used.

  • -
-

Shift parameters

-
    -
  • shift (float, optional) A rigid body shift to apply to the rotated cell prior to inserting the dislocation. Should be selected such that the ideal slip plane does not correspond to any atomic planes. Is taken as absolute if shiftscale is False, or relative to the rotated cell’s box vectors if shiftscale is True. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.

  • -
  • shiftindex (float, optional) The index of the identified optimum shifts based on the rotated cell to use. Different values allow for the selection of different atomic planes neighboring the slip plane. Note that shiftindex values only apply shifts normal to the slip plane; best shifts for non-planar dislocations (like bcc screw) may also need a shift in the slip plane. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.

  • -
  • shiftscale (bool, optional) If False (default), a given shift value will be taken as absolute Cartesian. If True, a given shift will be taken relative to the rotated cell’s box vectors.

  • -
-

Boundary parameters

-
    -
  • boundarywidth (float, optional) The width of the boundary region to apply. Default value is 0.0, i.e. no boundary region. All atoms in the boundary region will have their atype values changed and will be displaced by linear displacements.

  • -
  • boundaryscale (bool, optional) If False (Default), the boundarywidth will be taken as absolute. If True, the boundarywidth will be taken relative to the magnitude of the unit cell’s a box vector.

  • -
-

Method options

-
    -
  • linear (bool, optional) If True, then only linear displacements will be used and not the dislocation solution. Using only linear displacements is useful for screw dislocations and dislocations with large stacking fault distances. If False (default) then the dislocation solution will be used for the middle displacements and linear displacements only in the boundary region.

  • -
  • cutoff (float, optional) Cutoff distance to use for identifying duplicate atoms to remove. For dislocations with an edge component, applying the displacements creates an extra half-plane of atoms that will have (nearly) identical positions with other atoms after altering the boundary conditions. Default value is 0.5 Angstrom.

  • -
-

Return options

-
    -
  • return_base_system (bool, optional) If True then the dislocation-free base system corresponding to the dislocation system will also be returned. The base system is used as a reference state for most of the dislocation analysis tools.

  • -
-
-

6.1. Small atomic system example, easy to see atomic positions

-
-
[23]:
-
-
-
-base_system, disl_system = disl.periodicarray(bmin=30, cmin=30,
-                                              boundarywidth=3, boundaryscale=True,
-                                              return_base_system=True)
-
-
-
-
-
[24]:
-
-
-
-fig = plt.figure(figsize=(6,6))
-for atype in disl_system.atypes:
-    plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],
-             disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')
-plt.xlim(-20, 20)
-plt.ylim(-20, 20)
-plt.show()
-
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_54_0.png -
-
-
-
-

6.2. Large atomic system example, more useful for simulations

-
-
[25]:
-
-
-
-base_system, disl_system = disl.periodicarray(bmin=300, cmin=300,
-                                              boundarywidth=3, boundaryscale=True,
-                                              return_base_system=True)
-
-
-
-
-
[26]:
-
-
-
-fig = plt.figure(figsize=(6,6))
-for atype in disl_system.atypes:
-    plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],
-             disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')
-plt.xlim(-160, 160)
-plt.ylim(-160, 160)
-plt.show()
-
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_57_0.png -
-
-
-
-

6.3. Dislocation property evaluations

-

The dislocation characterization methods all compare defect configurations to a defect-free base system. The periodicarray method automatically returns a compatible base system that can be used for the characterization methods. This is especially important for PAD systems of dislocations with edge components as the deleted atoms are appropriately handled.

-

See the 4.6. Dislocation analysis tools Notebook for more dislocation property evaluations.

-

NOTE: The characterizations shown here are simply for demonstration purposes. For real problems, the returned dislocation system should be atomically relaxed prior to characterizing it.

-
-
[27]:
-
-
-
-# Plot disregistry
-xi, disreg = am.defect.disregistry(base_system, disl_system, m=[0,1,0], n=[0,0,1])
-
-fig = plt.figure(figsize=(8,6))
-
-plt.plot(xi, disreg[:, 0], label='x-disregistry', linewidth=3)
-plt.plot(xi, disreg[:, 1], label='y-disregistry', linewidth=3)
-plt.plot(xi, disreg[:, 2], label='z-disregistry', linewidth=3)
-
-plt.xlabel('$\\xi$-coordinate ($\AA$)', size='x-large')
-plt.ylabel('disregistry ($\AA$)', size='x-large')
-plt.legend(fontsize='xx-large')
-
-plt.legend()
-plt.show()
-
-
-
-
-
-
-
-../_images/tutorial_4.4._Dislocation_solution_and_generator_59_0.png -
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/doc/html/tutorial/4.4._Dislocation_solution_and_generator.ipynb b/doc/html/tutorial/4.4._Dislocation_solution_and_generator.ipynb deleted file mode 100644 index c2ddadd7..00000000 --- a/doc/html/tutorial/4.4._Dislocation_solution_and_generator.ipynb +++ /dev/null @@ -1,1394 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Introduction to atomman: Dislocation solution and generator\n", - "\n", - "__Lucas M. Hale__, [lucas.hale@nist.gov](mailto:lucas.hale@nist.gov?Subject=ipr-demo), _Materials Science and Engineering Division, NIST_.\n", - " \n", - "[Disclaimers](http://www.nist.gov/public_affairs/disclaimer.cfm) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Introduction\n", - "\n", - "This Notebook outlines the use of the classes and methods in atomman for obtaining elastic solutions for perfectly straight dislocations and constructing atomic configurations based on them. \n", - "\n", - "- [Section #2](#section2) details the theory used to obtain the dislocation solutions and construct the atomic systems.\n", - "- [Section #3](#section3) describes the VolterraDislocation classes that provide the elastic dislocation solutions and the various properties that can be obtained from them. This is useful if you want a dislocation solution but don't want to construct an atomic configuration.\n", - "- [Section #4](#section4) introduces the Dislocation class that provides a convenient means of constructing atomic configurations of dislocations.\n", - "- [Section #5](#section5) shows how the Dislocation class can be used to generate dislocation monopole configurations.\n", - "- [Section #6](#section6) shows how the Dislocation class can be used to generate periodic array of dislocations configurations." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "atomman version = 1.4.7\n", - "Notebook executed on 2022-10-12\n" - ] - } - ], - "source": [ - "# Standard Python libraries\n", - "import os\n", - "import datetime\n", - "\n", - "# http://www.numpy.org/\n", - "import numpy as np\n", - "\n", - "# https://github.com/usnistgov/atomman\n", - "import atomman as am\n", - "import atomman.unitconvert as uc\n", - "\n", - "# https://matplotlib.org/\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "\n", - "# Show atomman version\n", - "print('atomman version =', am.__version__)\n", - "\n", - "# Show date of Notebook execution\n", - "print('Notebook executed on', datetime.date.today()) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Theory\n", - "\n", - "The Dislocation class is meant to provide a simple and convenient means of generating dislocation monopole and periodic array of dislocations atomic configurations. The dislocation configurations generated by this class contain a single dislocation which is inserted into an otherwise perfect crystalline system by applying displacements corresponding to a Volterra dislocation solution. The boundary conditions are then handled differently based on whether the system is to be a dislocation monopole configuration or a periodic array of dislocations configuration.\n", - "\n", - "### 2.1. Dislocation solutions\n", - "\n", - "Dislocation theory is based on computing and using elasticity solutions of dislocations to define what they look like and how they interact with the surrounding material. The Volterra dislocation model assumes that the discontinuity in the crystal due to the dislocation exists as a line singularity. While this assumption does not hold true in real materials, the Volterra solution still provides a decent guess for the long-range stress and strain fields of compact dislocation cores. It also provides a useful starting point for developing more complicated dislocation solutions, and can provide good initial guesses for constructing atomic dislocation configurations.\n", - "\n", - "Solutions of straight dislocations are always defined relative to three orthogonal unit vectors $\\hat{m}$, $\\hat{n}$, and $\\hat{\\xi}$\n", - "\n", - "- $\\hat{m}$ is the direction in the slip plane perpendicular to the dislocation's line direction.\n", - "- $\\hat{n}$ is the normal of the dislocation's slip plane.\n", - "- $\\hat{\\xi}$ is parallel to the dislocation's line direction.\n", - "\n", - "Based on these three vectors, we can define a Cartesian coordinate system for the dislocation solution with positions, $x_i$, given by\n", - "\n", - "$$ x_i = x_1 \\hat{m} + x_2 \\hat{n} + x_3 \\hat{\\xi} $$\n", - "\n", - "For straight dislocations, the elasticity solutions are independent of the $x_3$ direction and therefore only depend on $x_1$ and $x_2$.\n", - "\n", - "#### 2.1.1. Isotropic solution\n", - "\n", - "For isotropic materials, the elastic solution for a Volterra dislocation can be given as analytical equations. Variations of the analytical solutions can be found in every textbook on dislocation theory. The particular equations used in atomman match those found in Elementary Dislocation Theory by Weertman and Weertman except with flipped signs. This choice provides the best correspondence of the isotropic solution to the anisotropic solutions described below.\n", - "\n", - "Isotropic elastic constants can be represented using only two independent terms. The two isotropic elastic constants typically used for dislocation solutions are the shear modulus, $\\mu$, and the Poisson's ratio, $\\nu$.\n", - "\n", - "The isotropic displacements, $d_i$, for a dislocation centered at $x_1 = x_2 = 0$ are\n", - "\n", - "$$ u_1 = \\frac{b_1}{2 \\pi} \\left[ \\theta + \\frac{x_1x_2}{2 (1 - \\nu) (x_1^2 + x_2^2)} \\right]$$\n", - "\n", - "$$ u_2 = \\frac{b_1}{2 \\pi} \\left[ -\\frac{1 - 2 \\nu} {4 (1 - \\nu)} \\ln(x_1^2 + x_2^2)\n", - " + \\frac{y^2} {2 (1 - \\nu) (x^2 + y^2)} \\right]$$\n", - "\n", - "$$ u_3 = \\frac{b_3}{2 \\pi} \\theta.$$\n", - "\n", - "Here (and below), $\\theta$ is the radial angle coordinate\n", - "\n", - "$$\\theta=\\tan^{-1} (x_2/x_1),$$\n", - "\n", - "which is taken to range from $-\\pi$ to $\\pi$.\n", - "\n", - "The isotropic stress, $\\sigma_{ij}$, is given by the equations\n", - "\n", - "$$ \\sigma_{11} = -\\frac{\\mu b_1}{2 \\pi (1 - \\nu)} \\frac{x_2 (3 x_1^2 + x_2^2)} { (x_1^2 + x_2^2)^2}$$\n", - "\n", - "$$ \\sigma_{22} = \\frac{\\mu b_1}{2 \\pi (1 - \\nu)} \\frac{x_2 (x_1^2 - x_2^2)} { (x_1^2 + x_2^2)^2}$$\n", - "\n", - "$$ \\sigma_{33} = \\nu(\\sigma_{11} + \\sigma_{22})$$\n", - "\n", - "$$ \\sigma_{12} = \\frac{\\mu b_1}{2 \\pi (1 - \\nu)} \\frac{x_1(x_1^2 - x_2^2)) }{ (x_1^2 + x_2^2)^2}$$\n", - "\n", - "$$ \\sigma_{13} =-\\frac{\\mu b_3}{2 \\pi} \\frac{x_2}{(x_1^2 + x_2^2)} $$\n", - "\n", - "$$ \\sigma_{23} = \\frac{\\mu b_3}{2 \\pi} \\frac{x_1}{(x_1^2 + x_2^2)} $$\n", - "\n", - "The energy coefficient tensor, $K_{ij}$, depends on the elastic constants. Only normal components are non-zero for the isotropic case\n", - "\n", - "$$K_{11}^{iso} = K_{22}^{iso} = K_{edge}^{iso} = \\frac{\\mu}{1 - \\nu}$$\n", - "$$K_{33}^{iso} = K_{screw}^{iso} = \\mu.$$\n", - "\n", - "__Caution__: $K_{ij}$ may be defined slightly differently in other works depending on if they contain multiplicative factors. If you are comparing atomman's values to other works, be sure to double check how $K_{ij}$ and the self-energy equations below are defined.\n", - "\n", - "The dislocation's self-energy is the energy per unit length within a ring region around the dislocation line. It depends on $K_{ij}$ and $b_i$\n", - "\n", - "$$\\frac{W}{l} = \\frac{b_i K_{ij} b_j}{4 \\pi} \\ln{ \\left( \\frac{R}{r_0} \\right)}.$$\n", - "\n", - "The energy coefficient tensor can also be reduced down to a single coefficient, $K$\n", - "\n", - "$$ K = \\frac{b_i K_{ij} b_j} {b_k b_k},$$\n", - "\n", - "which the self-energy expression then becomes\n", - "\n", - "$$\\frac{W}{l} = \\frac{K b^2}{4 \\pi} \\ln{ \\left( \\frac{R}{r_0} \\right)}, $$\n", - "\n", - "Alternatively, everything in the self-energy expression outside the ln term can be grouped together as the pre-ln factor\n", - "\n", - "$$\\frac{W}{l} = a \\ln{ \\left( \\frac{R}{r_0} \\right)}. $$\n", - "\n", - "#### 2.1.2. Anisotropic solution\n", - "\n", - "The elasticity solution for Volterra dislocations in anisotropic materials was first introduced by [Eshelby](https://doi.org/10.1016/0001-6160(53)90099-6). Starting with the fundamental equations of elasticity\n", - "\n", - "$$ \\sigma_{ij} = C_{ijkl} \\epsilon_{kl} $$\n", - "\n", - "$$ \\epsilon_{ij} = \\frac{1}{2} \\left(\\frac{\\partial u_i}{\\partial x_j} + \\frac{\\partial u_j}{\\partial x_i}\\right) $$\n", - "\n", - "$$ \\frac{\\partial \\sigma_{ij}}{\\partial x_j} = 0 $$\n", - "\n", - "Combining these and taking the solution to be independent of $x_3$ generates the partial differential equation\n", - "\n", - "$$ C_{ijkl} \\frac{ \\partial^2 u_k}{\\partial x_j \\partial x_l} = 0 $$\n", - "\n", - "Solutions of the partial differential equation are of the form\n", - "\n", - "$$ u_k = A_k f(x_1 + p x_2) $$\n", - "\n", - "Values of $A_k$ and $p$ can be found by solving\n", - "\n", - "$$ \\left[C_{i1k1} + \\left(C_{i1k2} + C_{i2k1} \\right) p + C_{i2k2} p^2 \\right] A_k = 0 $$\n", - "\n", - "The determinate expression is a sixth-order polynomial expression resulting in six complex roots, $p_\\alpha$ with $\\alpha$ ranging 1 to 6. There is also one $A_{k \\alpha}$ corresponding to each root.\n", - "\n", - "Later, [Stroh](https://doi.org/10.1080/14786435808565804) introduced a method for easily solving for the six roots. Another vector, $L_i$ is defined for each $\\alpha$ root as\n", - "\n", - "$$ L_{i \\alpha} = \\left(C_{i2k1} + p_{\\alpha} C_{i2k2} \\right) A_{k \\alpha} $$\n", - "\n", - "and a normalization factor, $k_{\\alpha}$, is introduced as\n", - "\n", - "$$ k_{\\alpha} = \\frac{1}{2 A_{j \\alpha} L_{j \\alpha}} $$\n", - "\n", - "Stroh's method then expresses the problem as an eigenvector problem in which the eigenvalues give $p_{\\alpha}$ and the eigenvectors give $A_{i \\alpha}$ and $L_{i \\alpha}$. Properties of the dislocation can then be computed using these solution parameters\n", - "\n", - "$$ u_j = \\frac{1}{2 \\pi i} \\sum_{\\alpha} \\pm k_{\\alpha} A_{j \\alpha} (L_{l \\alpha} b_l) \\ln{\\eta_{\\alpha}}$$\n", - "\n", - "$$ \\sigma_{ij} = \\frac{1}{2 \\pi i} \\sum_{\\alpha} \\pm k_{\\alpha} C_{ijkl}[m_l + p_{\\alpha} n_l] A_{k \\alpha} (L_{m \\alpha} b_m) \\frac{1}{\\eta_{\\alpha}} $$\n", - "\n", - "$$ K_{jl} = i \\sum_{\\alpha} \\pm k_{\\alpha} L_{j \\alpha} L_{l \\alpha} $$\n", - "\n", - "For the displacement and stress equations, $\\eta$ is an imaginary coordinate that combines $x_1$ and $x_2$ using the computed eigenvalues $p_{\\alpha}$\n", - "\n", - "$$ \\eta_{\\alpha} = x_1 + p_{\\alpha} x_2 $$\n", - "\n", - "#### 2.1.3. Linear displacement solution\n", - "\n", - "The periodic array of dislocations configuration uses an additional solution based on applying a linear gradient of displacements to the atoms to generate a geometrically necessary dislocation inside the system.\n", - "\n", - "$$u_j = \\frac{b_j}{2} - \\text{sign}(x_2)\\left[ \\frac{x_1 b_j}{2l} + \\frac{b_j}{4}\\right],$$\n", - "\n", - "where $l$ is the full periodic length of the system in the $\\hat{m}$ direction. By applying opposite displacements above and below the slip plane, the atomic disregistry linearly varies from 0 to $b$ across the system.\n", - "\n", - "While this does not give a good approximation of a real dislocation, it does have a couple of benefits besides its simplicity. First, the solution is independent of the dislocation's position along the slip plane. This makes it a good choice of displacements for the non-periodic surfaces if the atoms are held rigidly as the interaction between the dislocation and the boundaries will remain constant as the dislocation moves. Also, since $u_j$ depends on $\\text{sign}(x_2)$ rather than $x_2$ the solution on each side of the slip plane only depends on $x_1$.\n", - "\n", - "### 2.2. Dislocation definition\n", - "\n", - "A type of dislocation can be fully defined relative to a unit cell, ucell, by specifying the Miller slip plane, $n_{(hkl)}$, the Miller Burgers vector, $b_{[uvw]}$, and the Miller line direction, $\\xi_{[uvw]}$. Defining dislocations using Miller planes and vectors rather than Cartesian planes and vectors is more convenient as the definitions hold true for all crystals associated with a given crystal prototype. This is also how dislocations are typically defined by materials scientists.\n", - "\n", - "The dislocation's character (screw, edge, mixed) is given by the angle between $b_{[uvw]}$ and $\\xi_{[uvw]}$. Screw dislocations have $\\xi_{[uvw]}$ parallel to $b_{[uvw]}$, and therefore a character angle of 0$^{\\circ}$ or 180$^{\\circ}$, while edge dislocations have the two directions perpendicular for a character angle of 90$^{\\circ}$. For atomic configurations, the line direction must be a crystal vector, which limits the character angles that can be explored. This is done as the system is periodic along the line direction vector and atomic compatibility is only possible if the direction is a lattice vector or a multiple of one.\n", - "\n", - "The orientation of the dislocation solution with respect to the final atomic configuration is handled by specifying the dislocation solution axes $\\hat{m}$ and $\\hat{n}$ as Cartesian unit vectors. For simplicity, the Dislocation class restricts $\\hat{m}$, $\\hat{n}$, and $\\hat{\\xi} = \\hat{m} \\times \\hat{n}$ to each be aligned with one of the three Cartesian axes of the atomic configuration.\n", - "\n", - "The slip plane normal relative to the unit cell, $n_{ucell}$, is identified by converting $n_{(hkl)}$ into Cartesian units. Using $n_{ucell}$, three Miller crystal vectors are identified that determine how to rotate the unit cell\n", - "\n", - "- $\\xi_{[uvw]}$.\n", - "- An in-plane vector with $|u|,|v|,|w|$ values less than some maximum that is closest to perpendicular to $\\xi_{[uvw]}$.\n", - "- An out-of-plane vector with $|u|,|v|,|w|$ values less than some maximum that is closest to being parallel to $n_{ucell}$.\n", - "\n", - "These three vectors are used as the box rotation vectors, $a_{[uvw]}$, $b_{[uvw]}$, and $c_{[uvw]}$, for orienting the final configuration. How the identified vectors are associated with the rotation vectors depends on the Cartesian axes that $\\hat{m}$, $\\hat{n}$ and $\\hat{\\xi}$ correspond to\n", - "\n", - "- In the final configuration, $a_{[uvw]}$ has its primary component along the $x$-axis, $b_{[uvw]}$ along the $y$-axis, and $c_{[uvw]}$ along the $z$-axis.\n", - "- $\\xi_{[uvw]}$ is positioned along the Cartesian axis specified by $\\hat{\\xi}$. This alignment means that the associated rotation vector will only have a component along that Cartesian direction. For example, if $\\hat{\\xi}=x$, then $a_{[uvw]}$ will only have an $x$ component.\n", - "- The identified out-of-plane vector will correspond to the box rotation vector with the primary component along the Cartesian axis specified by $\\hat{n}$.\n", - "- The identified in-plane vector is taken as the final box rotation vector. As this vector is necessarily normal to $\\hat{n}$, it cannot have a component along the Cartesian axis associated with $\\hat{n}$.\n", - "\n", - "Note that the out-of-plane vector need not be parallel to the slip plane normal. Rather, it simply needs to be the only box vector with a component in the $\\hat{n}$ direction. This is because the slip plane is defined by the cross product of $\\xi_{[uvw]}$ and the identified in-plane vector, not the out-of-plane vector.\n", - "\n", - "A rotated cell, rcell, is then created using ucell and the rotation vectors. This rotated cell serves as the seed for constructing the larger atomic configurations in which the dislocation is inserted. As rcell is constructed, the Cartesian transformation matrix, $T$, associated with transforming from the ucell orientation to the rcell orientation is also identified. The unit cell and $T$ are then used to convert $b_{[uvw]}$ to the Cartesian $b$ vector.\n", - "\n", - "Finally, a rigid body shift, $\\delta$ is defined relative to rcell. This is used to adjust the atomic positions such that the mathematical position of the dislocation line and/or slip plane can be properly placed relative to the atoms. For dislocations defined relative to crystal prototypes, $\\delta$ can be expressed in reduced coordinates relative to ucell. Alternatively, rcell itself can be used to identify shifts normal to the slip plane that place the mathematical slip plane halfway between all atomic planes in rcell. This allows for dislocations to be easily generated either from pre-defined parameters or based on optimum shift recommendations.\n", - "\n", - "### 2.3. Boundary conditions\n", - "\n", - "#### 2.3.1. Dislocation monopoles\n", - "\n", - "A dislocation monopole is an atomic configuration that contains a single straight dislocation.\n", - "\n", - "- The box direction parallel to the dislocation line is made periodic. The other two box directions are non-periodic.\n", - "- A boundary region is defined that encompasses the atoms near the non-periodic boundaries. This region is identified by changing the atype values of the atoms in those geometric regions.\n", - "\n", - "The Dislocation class constructs the atomic configurations but leaves it up to users to define how to relax the system. Typically, the atoms in the boundary region are held fixed while the remaining atoms near the core are relaxed using molecular dynamics steps and/or an energy or force minimization. Relaxations can either be rigid boundary relaxations or flexible boundary relaxations depending on if the boundary atoms are adjusted during the relaxation process.\n", - "\n", - "A rigid boundary relaxation is one in which the boundary atoms are never adjusted after the initial system construction. As the atoms are held at a dislocation solution, the initial positions tend to be a decent guess for dislocations with compact cores. However, a misfit force will arise at the interface between the boundary and non-boundary atoms that can influence the dislocation structure, energies and behavior. The influence of the misfit force can be minimized by constructing large atomic configurations and keeping investigations to dislocations with compact cores that remain positioned near the center of the systems.\n", - "\n", - "A flexible boundary relaxation is one in which the boundary atoms are subjected to an alternative relaxation method, such as the lattice Greens function. This alternative relaxation method allows for the misfit forces at the interface between the boundary and non-boundary atoms to be reduced while preventing the atoms at the non-periodic box boundaries from forming free surfaces. This method is preferred for expensive atomistic methods like DFT as it gives good structure predictions as long as the dislocation core itself remains in the non-boundary region.\n", - "\n", - "#### 2.3.2. Periodic array of dislocations\n", - "\n", - "A periodic array of dislocations atomic configuration is one in which the system itself only contains one dislocation, but the system's box boundary conditions are such that it represents an infinite array of equally spaced dislocations.\n", - "\n", - "- The two box directions in the slip plane are made periodic while the out-of-plane box direction is non-periodic.\n", - "- The box dimensions are modified to ensure that the atoms remain compatible and coherent across the two periodic box directions.\n", - "- For dislocations with edge components, the atomic compatibility requires that a half-plane of atoms either be inserted or deleted. This is handled here by shrinking the box dimensions and identifying the half-plane of atoms to delete as those that have nearly identical positions with other atoms in the shrunken system.\n", - "- A boundary region is identified at the non-periodic surface. The atoms in the boundary region are identified by changing their atype values, and are given coordinates that correspond to the global linear displacements rather than the local dislocation displacements.\n", - "\n", - "The choice of displacing the atoms in the boundary region by a linear gradient of displacements rather than the dislocation solution displacements is done as the linear gradient is independent of the dislocation's position. There will be misfit forces at the interface between the boundary and non-boundary regions, but those forces will be (mostly) independent of the dislocation's position in the system. The slip behavior of dislocations can therefore be studied by applying shear strains/stresses to the system by adding displacements/forces to the boundary atoms. Some examples:\n", - "\n", - "- Quasistatic calculations in which energy/force relaxations are used after incremental displacements of the boundaries. This can be used to estimate the Peierls barrier, with good estimates requiring very small force relaxation tolerances and very small displacements at each iteration.\n", - "- Strain-controlled simulations in which a constant displacement rate is applied to the boundary atoms. Simulations can either have rigid boundaries, in which the boundary atoms only move in the displacement direction, or free-surface boundaries, in which motion in the displacement direction is fixed but MD motions in perpendicular directions are allowed.\n", - "- Stress-controlled simulations in which a constant force is applied to the boundary atoms. Simulations can either have rigid boundaries, in which the boundary is treated as a rigid block that the force acts on, or free-surface boundaries, in which the boundary atoms are subjected to MD steps but each has an extra constant force applied to it.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Volterra solutions\n", - "\n", - "__Skip to [Section #4](#section4) if you want to construct atomic configurations!__\n", - "\n", - "A Volterra dislocation solution can be obtained with the solve_volterra_dislocation() function.\n", - "\n", - "*Update Version 1.3.2: ξ_uvw, slip_hkl, and box parameters added to make defining systems easier, especially for non-cubic crystals. axes renamed to transform for clarity.*\n", - "\n", - "Parameters\n", - "\n", - "- **C** (*atomman.ElasticConstants*) The medium's elastic constants.\n", - "- **burgers** (*array-like object*) The dislocation's Burgers vector.\n", - "- **ξ_uvw** (*array-like object*) The Miller crystal vector associated with the dislocation's line direction. Must be given with slip_hkl to identify the transformation matrix to use on C and burgers.\n", - "- **slip_hkl** (*array-like object*) The Miller plane indices associated with the dislocation's slip plane. Must be given with slip_hkl to identify the transformation matrix to use on C and burgers.\n", - "- **transform** (*array-like object, optional*) A 3x3 set of orthogonal Cartesian vectors that define the transformation matrix to use on C and burgers to convert from the standard (unit cell) and dislocation orientations. The 3 vectors will automatically be converted into unit vectors. Using this is an alternative to using ξ_uvw and slip_hkl.\n", - "- **axes** (*array-like object, optional*) Same as transform. Retained for backwards compatibility.\n", - "- **box** (*atomman.Box, optional*) The unit cell's box that crystal vectors are taken with respect to. If not given, will use a cubic box with a=1 meaning that burgers, ξ_uvw and slip_hkl will be interpreted as Cartesian vectors.\n", - "- **m** (*array-like object, optional*) The m Cartesian unit vector for the solution giving the $x_1$ direction. m, n, and $\\xi$ (dislocation line direction) should be right-hand orthogonal. Default value is [1,0,0] (Cartesian x-axis).\n", - "- **n** (*array-like object, optional*) The n Cartesian unit vector for the solution giving the $x_2$ direction. m, n, and $\\xi$ (dislocation line direction) should be right-hand orthogonal. Default value is [0,1,0] (Cartesian y-axis).\n", - "- **tol** (*float*) Tolerance parameter used to round off near-zero values. Default value is 1e-8.\n", - "\n", - "Returns\n", - "\n", - "- (*atomman.defect.VolterraDislocation*) The dislocation solution. This will be an atomman.defect.IsotropicVolterraDislocation object or an atomman.defect.Stroh object depending on if the elastic constants used are isotropic or anisotropic. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.1. Build solution" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Specify materials properties, namely the unit cell box and the elastic constants." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cij in GPa:\n", - "[[169. 122. 122. 0. 0. 0. ]\n", - " [122. 169. 122. 0. 0. 0. ]\n", - " [122. 122. 169. 0. 0. 0. ]\n", - " [ 0. 0. 0. 75.4 0. 0. ]\n", - " [ 0. 0. 0. 0. 75.4 0. ]\n", - " [ 0. 0. 0. 0. 0. 75.4]]\n" - ] - } - ], - "source": [ - "# Rough values for fcc Cu\n", - "\n", - "# Build box\n", - "a = uc.set_in_units(3.6, 'angstrom')\n", - "box = am.Box.cubic(a=a)\n", - "\n", - "# Isotropic Cij values\n", - "#E = uc.set_in_units(130, 'GPa')\n", - "#Poisson = 0.34\n", - "#C = am.ElasticConstants(E=E, nu=Poisson)\n", - "\n", - "# Anisotropic values for Cu\n", - "C11 = uc.set_in_units(169, 'GPa')\n", - "C12 = uc.set_in_units(122, 'GPa')\n", - "C44 = uc.set_in_units(75.4, 'GPa')\n", - "C = am.ElasticConstants(C11=C11, C12=C12, C44=C44)\n", - "\n", - "print('Cij in GPa:')\n", - "print(uc.get_in_units(C.Cij, 'GPa'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Specify the dislocation type. Using box (above) allows for these values to be given as Miller crystal vectors." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# fcc a/2[1 0 -1](1 1 1)\n", - "burgers = 0.5 * np.array([1, 0, -1])\n", - "slip_hkl = np.array([1, 1, 1])\n", - "\n", - "# The dislocation's line direction (ξ_uvw) determines character\n", - "ξ_uvw = [ 1,-2, 1] # 90 degree edge\n", - "#ξ_uvw = [1, -1, 0] # 60 degree mixed\n", - "#ξ_uvw = [1, 1, -2] # 30 degree mixed\n", - "#ξ_uvw = [1, 0, -1] # 0 degree screw, i.e. parallel to burgers" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Specify the orientation for the solution." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "m = [1, 0, 0] # align edge component with the x-axis\n", - "n = [0, 1, 0] # align slip plane normal with the y-axis" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Create the solution" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "solution = am.defect.solve_volterra_dislocation(C, burgers, ξ_uvw=ξ_uvw, slip_hkl=slip_hkl, box=box, m=m, n=n)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 3.2. Compute properties" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check configuration" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dislocation configuration:\n", - "m: [1. 0. 0.]\n", - "n: [0. 1. 0.]\n", - "ξ: [0. 0. 1.]\n", - "Burgers: [2.54558441 0. 0. ] angstrom\n", - "|Burgers|: 2.545584412271571 angstrom\n", - "Character: 90.0 degrees\n", - "\n", - "Transformation matrix from standard orientation to dislocation orientation:\n", - "[[ 0.70710678 0. -0.70710678]\n", - " [ 0.57735027 0.57735027 0.57735027]\n", - " [ 0.40824829 -0.81649658 0.40824829]]\n" - ] - } - ], - "source": [ - "print('Dislocation configuration:')\n", - "print('m: ', solution.m)\n", - "print('n: ', solution.n)\n", - "print('ξ: ', solution.ξ)\n", - "print('Burgers: ', uc.get_in_units(solution.burgers, 'angstrom'), 'angstrom')\n", - "print('|Burgers|:', uc.get_in_units(np.linalg.norm(solution.burgers), 'angstrom'), 'angstrom')\n", - "print('Character:', solution.characterangle(), 'degrees')\n", - "print()\n", - "print('Transformation matrix from standard orientation to dislocation orientation:')\n", - "print(solution.transform)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "View solution parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Solution is anisotropic\n", - "p ->\n", - "[ 5.74325108e-01+1.48063821j 5.74325108e-01-1.48063821j\n", - " -5.74325108e-01+1.48063821j -5.74325108e-01-1.48063821j\n", - " -5.55111512e-17+0.39392852j -5.55111512e-17-0.39392852j]\n", - "A ->\n", - "[[ 4.92478068e-01+2.92695902e-01j -1.86741173e-01+9.77580274e-02j\n", - " 6.67206634e-01+0.00000000e+00j]\n", - " [ 4.92478068e-01-2.92695902e-01j -1.86741173e-01-9.77580274e-02j\n", - " 6.67206634e-01-0.00000000e+00j]\n", - " [-4.92478068e-01+2.92695902e-01j -1.86741173e-01-9.77580274e-02j\n", - " 6.67206634e-01+0.00000000e+00j]\n", - " [-4.92478068e-01-2.92695902e-01j -1.86741173e-01+9.77580274e-02j\n", - " 6.67206634e-01-0.00000000e+00j]\n", - " [ 3.55985935e-16+1.47294255e-01j -7.89087414e-01+0.00000000e+00j\n", - " -4.27766816e-01-1.31098024e-16j]\n", - " [ 3.55985935e-16-1.47294255e-01j -7.89087414e-01-0.00000000e+00j\n", - " -4.27766816e-01+1.31098024e-16j]]\n", - "L ->\n", - "[[ 1.87773573e-01-2.53391120e-01j 1.05996344e-01+1.67934295e-01j\n", - " -2.23781767e-02-2.06874267e-01j]\n", - " [ 1.87773573e-01+2.53391120e-01j 1.05996344e-01-1.67934295e-01j\n", - " -2.23781767e-02+2.06874267e-01j]\n", - " [ 1.87773573e-01+2.53391120e-01j -1.05996344e-01+1.67934295e-01j\n", - " 2.23781767e-02-2.06874267e-01j]\n", - " [ 1.87773573e-01-2.53391120e-01j -1.05996344e-01-1.67934295e-01j\n", - " 2.23781767e-02+2.06874267e-01j]\n", - " [ 1.50398047e-01-1.50200901e-17j -1.18890059e-17+3.81790193e-01j\n", - " 1.59422563e-16+6.54039958e-02j]\n", - " [ 1.50398047e-01+1.50200901e-17j -1.18890059e-17-3.81790193e-01j\n", - " 1.59422563e-16-6.54039958e-02j]]\n", - "k ->\n", - "[ 8.78792266e-01+1.74127681j 8.78792266e-01-1.74127681j\n", - " -8.78792266e-01+1.74127681j -8.78792266e-01-1.74127681j\n", - " 2.92248361e-17+1.62818332j 2.92248361e-17-1.62818332j]\n" - ] - } - ], - "source": [ - "if isinstance(solution, am.defect.IsotropicVolterraDislocation):\n", - " print('Solution is isotropic')\n", - " print(f'mu -> {uc.get_in_units(solution.mu, \"GPa\"):.3f} GPa')\n", - " print(f'nu -> {solution.nu:.3f}')\n", - "\n", - "elif isinstance(solution, am.defect.Stroh):\n", - " print('Solution is anisotropic')\n", - " print('p ->')\n", - " print(solution.p)\n", - " print('A ->')\n", - " print(solution.A)\n", - " print('L ->')\n", - " print(solution.L)\n", - " print('k ->')\n", - " print(solution.k)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$K_{ij}$, $K$, and pre-ln factor" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "K_tensor (in GPa) ->\n", - "[[74.09648694 0. 0. ]\n", - " [ 0. 74.9325418 -8.62796136]\n", - " [ 0. -8.62796136 44.21693456]]\n", - "\n", - "K_coeff -> 74.096 GPa\n", - "preln -> 0.238480 eV/Å\n" - ] - } - ], - "source": [ - "print('K_tensor (in GPa) ->')\n", - "print(uc.get_in_units(solution.K_tensor, 'GPa'))\n", - "print()\n", - "\n", - "print(f'K_coeff -> {uc.get_in_units(solution.K_coeff, \"GPa\"):.3f} GPa')\n", - "print(f'preln -> {uc.get_in_units(solution.preln, \"eV/Å\"):f} eV/Å')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Construct a grid of points for evaluating displacement and stress" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate spacial grid of points\n", - "xy_max = 15\n", - "num_xy = 100\n", - "xvals = yvals = np.linspace(-xy_max, xy_max, num_xy)\n", - "xvals, yvals = np.meshgrid(np.linspace(-xy_max, xy_max, 100), np.linspace(-xy_max, xy_max, num_xy))\n", - "\n", - "# Convert points to coordinates relative to dislocation system\n", - "coords = np.outer(xvals, m) + np.outer(yvals, n)\n", - "\n", - "# Identify x, y directions\n", - "if np.isclose(m[0], 1.0):\n", - " xlabel = '$x_1$'\n", - "elif np.isclose(m[1], 1.0):\n", - " xlabel = '$x_2$'\n", - "elif np.isclose(m[2], 1.0):\n", - " xlabel = '$x_3$'\n", - "if np.isclose(n[0], 1.0):\n", - " ylabel = '$x_1$'\n", - "elif np.isclose(n[1], 1.0):\n", - " ylabel = '$x_2$'\n", - "elif np.isclose(n[2], 1.0):\n", - " ylabel = '$x_3$'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Displacements" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Coordinates and displacements in Angstroms\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA74AAAEYCAYAAAB7pCrbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABpQ0lEQVR4nO29f/A1WV3f+f7c7zzDMARw2GFhYAaBiGW5IKNiKlWooEktEnddzJY/qEWFQMZVS6oAWTS6iEaESBLjL4xDuTVipcQVNEsgaDaQgbipsDVBA4JxR5yBDI7giMIwzMzzPN979o/b3bf79PmcH92nf537flXd535v9/l1+95+P7f7fT6fI8YYEEIIIYQQQgghpbJbegCEEEIIIYQQQsiU8MKXEEIIIYQQQkjR8MKXEEIIIYQQQkjR8MKXEEIIIYQQQkjR8MKXEEIIIYQQQkjR8MKXEEIIIYQQQkjR8MKXEEIIIYQQQkjR8MKXTI6IvFZE/lnr9fUicp+I8PtHCCkGah0h5FSg3pEtwi8nmYMbAfzn1uunA/iwMWa/zHAIIWQSbgS1jhByGtwI6h3ZGLzwJXNwI4APtl4/HcAHReSCiPxHEbkkIn+2zNAIISQbN8Ktdc8WkT8SkQdE5HYRec4ywyOEkGzcCLfefamI3CkiD4rIn4jI/7zM8AjpwwtfMiki8mgAjwHw4dbmp+Nwl9AA+C0A711gaIQQko2A1l0F4HUAvgLAZwD80uwDJISQTAT07rMAXgLgbwK4D8BrZx8gIQq88CVT898BuN0Y8wAAiMgVAL4OwAeNMZeNMf8IwF1LDpAQQjLg07rfNsbcYoz5CID/BOChC46TEELG4tO7u4wx/xbAH+Bwo+8PlxsmIV144UumRgBcLSJXVAkPfgrAo9GdHkMIIVsnqHUi8lQA/wuAX11miIQQkgWv3onI9+Lg9v4NAG9dbJSEWPDCl0zNv8dBCP8LgP8bwMcB3GWM+ctFR0UIIXnxap2IPKXa/j4AP7jUIAkhJAOh33b/AsBXAfgPAH5RRGSRURJiIcaYpcdAThgR+RIcYt++GsDXAPi4Mebzy46KEELyISI3APhdAJ8G8C0AHgBwtzHmfNGBEUJIZkTkmQDOcdC7XwDwdGPMf7vsqAg5cMXSAyAnzx9af38dgFuXGQohhEzC3wLwhOpxe7XtSQDuXGpAhBAyEU8G8E8APALAHwP4rmWHQ8gROr6EEEIIIYQQQoqGMb6EEEIIIYQQQopmNRe+IvKzIvJJETEi8o7W9jurbfXj9xccJiGEjIJaRwg5Bah1hJC1sbYY37cAeKlj+/sA/GL1N7MBE0K2DrWOEHIKUOsIIathNRe+xpiXisgT4RbIOwC80xhzb2x7V19zpfmCx13d2uLOpD4kwtkobanlR4RRp/Z1qBNifFb5KULDh7xXva0cjfjHM+y7k1p+wDFROhky3nv/v0/dY4x5dEqd53zdw8xffDouWe1/+uCDv2OM+YYBQ9ssubXu7OqHmQtf8Kgcp3VeZhhP4BTNy1LHd8Y0HDJHX2tLK1KN58G776LWZSa71j3sYeaKRz0q1/AIOUku3nXaWreaC98A3wngu0TkzwH8kDHml12FROQmADcBwCOveyhu+vVnNfvOjXtW91755XTumQWu1dkrdc49v860to77lTY9v8KGttkpE/iV53tPqX0dy0a2GfELNMsxCLWhjMNXT/3uJG4f0v+QPt7z9T/9MXWnwj2fPsf7f+f6qLIXrvvotantF06y1l3xyGvwxO9+uX4ROOTeSWxbnrZ7bShlY8sd9nWvmqLrOrYnH68hF772leSQK3XtQlHZ3rt49V1oWvv6dbUPLaLf2D48bUa/xxCe8nVbf/Sal1Pr5iVd6665Bte/7GXT3jxZ240ZmylvwK3l5ik/30nb/pNXvOKktW41Mb4e3gTgWwF8B4CLAH5JRJ7kKmiMudkY8wxjzDOuvubKzr4z2eNM9r06OzHYOf4XPcO+ecTW2WGPnaP8mRicKf9Ta22NYYo2yZE9xHnRuTcSffE+BVr/qdtD+8IYnJt91IN0GKR1Z1c/bM4xbgtB/A8JrWxSG6b7SN0/xbhSxk8SodYNZJDW7R5Wad0pf6cNprt4m7Ltpftf+r0tSZbzpRytW73ja4x5bf23iHw5gJcD+GIcpskQQlaGAbA/2f9hhkOtI2RbUOuGQa0jZFuUpHWrufAVkW8E8NTq5Q0i8hIA7wfwkwDehcNYvxPA/QA+tMggCSFR7B0zH8gBah0h5UCt06HWEVIOpWjdai58AbwSQB2U+2U4TIX5BwDOAPw4gKsBfATADxtj/jTUmADYwfSmpNbTne2Y33pqsGt6Zz3d2Y771erU053tmN/2dGc7RlZtqxqvHZN6Vt158cX6amhtplC/l9hY3y0xxXTlXHG3MfHNQ9sO7YvFwODSBqa7LEhWrQtSy84Up2pK21OOY0nGhJXUdQvU0WhzYMPxfNS6IPNq3SmxFl3P2d/W2j4hStK61Vz4GmOerex63ZzjIISMwwA45/82KtQ6QsqAWueHWkdIGZSkdau58J2KXfVBLeH8Ls2YcWnHbeuMcblzZVEeUsf3OURnwx4wzqGUEguyJXKah6UakUnvJ1Q2ZwLBmANe7wp0WzdRYn7DKQ75WKh1CxJ5ThTNVp3fqT+zU/5O1GT+3ErRuuIvfAkh82IAnE+x0DMhhKwIah0h5BQoSeuKvvA9k33j6O6sOxW1gxZyfoG+I6Y5vzZarO+hX3eM7NBY38N4CrNnLEpzn9vkdHrt7UOcXjPS6isjEoT0SHAASnWNJ7VSiz1oCYdtY7+tqHVkFczlzo5tn/G8m6UUrSv6wpcQMj/GGFws5M4gIYRoUOsIIadASVpX/IWv6uhaMaxaOUB3YW3nNzXL86Hf5bIj58juvDaGxqt643FniO0d26dr3xJOL1Cv90aWQjUNt5JVee5xTtiP/RlMYhbPGee4ld89nnHm/AyodSsh5zmw9bjhnO6sr/3Utun0+sn5WU3wuZekdcVf+BJC5kaKn3ZPCCHUOkLIaVCO1p3Mhe+Uzm9suV3rfonL/Y1qw+PSamv7rjXr9CkxNqPylE6vy+UdE09tAOxLuANL4kNOt+Imx6C9hwirMHScoh3g9o5epXp7cDjrJmH8a81QTa1bGaWcG7mYMyuzNsNoSvg5H5n4/96StO5kLnwJIfNRyp1BQgjxQa0jhJwCpWhdsRe+IgY72fezICc6v86yloOaY33f1CzPczF2Pd9d6zguGUus9T1XbG90G4hzb1P6m8vpbdpFOQJJpmfriYzHjHvra+5uddy5oNaRTTDHjJw5teDEdWcJStK6Yi98CSHLYABcKihhGiGEuKDWEUJOgZK0jhe+hJCsGEhwjWtCCNk61DpCyClQktYVf+HbnmoLHKe8xk559pYdMeVZW+IodnmjnEmuxixrtORyTGshy9TnyCkkOZJc2VOcc0xvDo2FTIxBbxrbpMsajWlja4mwlPm8Ob/i3inPW5sLPnQaYo7pi0ob3inZI/ul1q0QJrlyszXtteHn2WfGz7IUrSv+wpcQMi8lxYIQQogGtY4QcgqUpHVl+NYKZ47bQzvZd1zgM9l3Elk15WCaR6hsv9994/6G2GHfWeZILSemcWxJn72RbHej9hCnCxrbh6+cvS+2r6Q2rdfGSOfh67uuO+54Cs7NLuoRbEnkZ0XkkyJiROQdnnLPE5E/FpEHRORWEXnSwMETB2KGJzIaU5dsn7K/O9S6YhFs1xkNYbAt93Rr401hM9+zcrSu6AtfQsj8GACXcBb1iOQtvp0i8tiqzGcBvBLAVwL4lTHvgRBCQlDrCCGnQElaV/xUZz3etRvXqsXxAvpSR3VZLXbWjvltO7a9OFsr5jc11rf9Xo79u9/7KTFkGaP4tscvXxQqNyam17VcEZC2ZNIQjJGou35xbZmXisgTAbzUU+z5AB4C4HXGmN8Qka8C8B0i8teNMR/NMpAtoMRvBWN9HXVGjyFnm1Nhjy9yvFOGOSUtb2THMW4lrnGK8S0Q2wtQ65bASMIsgPa5uvbzYgnWHvPLz0xnwGc2aum9grSOji8hJDv1NOrQA8C1InJb63HTgO7q6S+fqJ7vqp6fPPZ9EEKID2odIeQUKEXrinV8BQc3tHF0rVtHtQu6hPPrK2tjO7++erHZmUPZnV1tuLJdz8USfXb6n8KtDbiuKZmiczq9Wt0UDkkQou+p3WOMecboTrtsxfvaPmt3DMawtuDSrWV3jmVlhzkFat0yJM2MqFn5kQq9l0lP+7Xp+Ayf0aLHewwzO71NGyhH64q98CWELEW+KTFqDyJXAdgbYy4CuKPafH31/Pjq+Y5eRUIIyQa1jhByCpSjdcVPda6zOPeyOcN0XGAt27Mv47Nd9thWfAZmu+wUWZ7t93rKaNmKrWkaSW2kZEC2+xiTKVrL3pzapzPj84iszgaovsXhRwgR+UYA31a9vEFEXiIiTwFwP4APVNvfAuAigFeJyPcD+GYAv3sqMW89lAyY3gy5kVkz159l142R8Xe9c7SR2teomKwZx5uT+jsW9T2b8LseA7VuWWb5jk+YdTflu94um3SOnDhDj9ukx1cw6feqJuf5UZLWFX/hSwiZFwPBRXMW9YjglQBeX/39ZQDeBOCZnf6MuRuHRAhfAOAfA/g9AC/M9HYIIcQJtY4QcgqUpHWc6kwIyU4ozjwWY8yzlV23WOV+E8BvZumUEEIiodYRQk6BUrSu4Avf7vReNZmVteSPK0GUPd25SWaVmOyqTnJ16C+QgGrg8kbae3CXi0uwtWb0JFDjT9CUZFWhcrFLCIX6jElIpU3XjkmCleO7kJgEgZSKlTCll5spcT9ZEGvKn3MKYKhMgdMyqXUbZAVJrnJOoc2a825pzZ3guORsZ9Gfygv/P1iS1hV84UsIWQIDibpBQwghW4ZaRwg5BUrSumIvfLXljFKd33aZmp6zO2CZI3uJo7HLG8XUTSHWNdbGtRXGLJUUdGcT2p7C6dW+D716EyxrFJPggGTEoH9HWLl7P8mqOHM5BYPWMUnEanvQcQrVSRh+7y3PsazRHDo+wUfoTWg10Tiodcszy/JGK3CKfbje++DTeG7nd+Qx3UySryn+L3EwlXyXonXFXvgSQpbBGPc62IQQUhLUOkLIKVCS1hV/4Zsa02vvb5epacoOdH4PbXTjfjXn1471TSHmvSW3ab3HrZDihg9xX6dqOyouN+D0au7tFE4vcJgScykusx9ZG5F3+ucwHTdJ7PFYuXu0BEmuzUqOG7VuXcwxIWRLjNbpKZ3fDJ8RP+cjU/9fXJLWrebyXUR+VkQ+KSJGRN7R2v5MEfmgiDwoIh8Qka9YcpyEkDDn2EU9ThFqHSHlQK3TodYRUg6laN3aRviW9gsRuQrA2wA8HMDLADwGwFtFJOq2QzuL8k72Hef2rMr6XD/q/fXD3t/OEN1rS/adzM87mMYZde0/tGE6DvAZ9tZ4u/vrpaGPbZomrlarE8vQernYG8kWn7w3u6i45D0km2ttj9/Vdq9M4mtjxBnT2+4nVKfeXz+M46G1lYKB9PrSHidMVq0DcLiDrmXbdWwXc3zMSc4+lxh/fxCtx9C6C7P1z0TtUzsnQvsiodZFkVfrIg6lkQQHbCXn4JSMPicNspwvnbZGsArdn5rI7+Vc3/WStG41F77GmJcC+Glr83NxEMU3GmPeCOCXATwJwLPnHR0hJIVS7gxOAbWOkHKg1ulQ6wgph1K0bu0xvk+qnj9RPd9VPT8ZwLvtwiJyE4CbAOCaxz0EQNf1PRTqvkzJ6hyMD46M+e2UUdb6jY35bbu+dqbnps6IWN/U7M5bxbn2bmo8bkRW5bExvS6XOlgncf+hTG9TNAblf18mYLDWXfHIa7o7tbislHitobG+7e+NvU1rK7Se79Ss/wa1nxnjhQetzRuoM0ls74RZnO2mqHXJDNa6s2sqrYv8zrc1JPg9iz2P2nqxMdcxi7YOjfs95ZjelGMVWTbpM8zwf1xJWrf2C18brzQZY24GcDMAPOGpj9jqKULIpikpCcKCRGvdVY+7gVpHyAJQ67IQrXUPuYFaR8gSlKR1a7/wvaN6vr56fry1XUVgIrMox2d1zuX8OstEruM7JVOtCTwULQZ3VIbmyLVuc7d5Ck5vmzGZw0+UwVqXg1VnaXa5yHN0G+rLsz9Ut+dcRLhNi2SsXfllxhocIGpdMvm0LmG2Q/T5kzKDYsbZFjmZ1fml05u17NxOb5tStG41F74i8o0Anlq9vEFEXgLg/QA+BeB7ROReAC8GcCeAW5cYIyEkjDFSzJSYKaDWEVIG1Do/1DpCyqAkrVvTu3glgNdXf38ZgDcB+EoA3wLgcwB+Bgex/BZjzPkiIySERHFudlGPE4VaR0ghUOu8UOsIKYRStG41jq8x5tme3U8b0uYZ9r0kUccO/Umv0Prw1CnNA6c8A/2EV/aXJTXJ1aGtajwTJLmycU3fLoXQNOQx9YZOcXZPSx43tdk1rTnH52kytVMqubVOcJgK1vuKzJjkKqrumLY2Quw0tEWmLc/NkERYsW2llvPUH/MZUOv8TPG7zskUU55PgEmnPJ/yFOcJWHKKM1CW1q3mwpcQUgqyibt+hBAyDmodIeQUKEfrir3wFVRuqnXHSHNQtaRXADru76Fxyy1W9mvOL+Bb6mgXGJfb+T201V3i6HzUbbwua1/WyB5XagKqQQmpEpJvxTq9oXHaLm5MmZDT63ofrn5iMUAx2f9OjaEOwJB66lJIUU60YtvM4SpbbY+R2d7bmCtZjuqMxlrW/U2p7swYN2ctThC1bmakemiff07n9wSSXNVkdX4zsJbzezAZ3dnozySm3Jj/q1CO1hV74UsIWQYDWUVWcEIImRJqHSHkFChJ6wq+8DUHV7XnzlrFxHIwTddhBQbE9tadKM4voC91NNT59TEk1nfo8kpTuM1LE+seD3GRczi9Yx3eGBc5lf2q8uadBupd+5gYrNglKWY8rXMusTT7ck0hy2KGgeR0TRZzYFYa29uGWrcAIYfVdXopZbM6vxtn6WXtNu/0xhJxfMcspzeqrIdStK7gC19CyBIYU9aND0IIcUGtI4ScAiVpXfEXvpqjet64nW4ntZf1GVAzP8c6vy7GOr/d99rN9BzK8rw1cox7iCvbbA+4siltpjq9w7I6W2NAnEOcg61+x0og2flNaSOyXqfuVrI7J9oNzmMT24Z1gAdlml3antEIZHOeJbZ3Bqe3hlq3IBnjcLM4v5HjWXtm6bmlZa3HAcicTXmjTm9NKVpX/IUvIWReDrEgZUyJIYQQDWodIeQUKEnrir3wFenG1IYzM9sNOD5go2R+DmV1dsbQdvsf6vy2x6mt8avF3aoONdoutt8lXno939Rszno7Cc6v4pj63GRtfV67bMravGNjed0ucm9TMofsf2UI5MmguLCjMi9HktRH7DinYE6Ja/c1oRuiOi2R2ydxalIyRi/sFFHrVoIvf4FWdqzz6+tnjrjgISn0S2Mtx2ANTu/E/z+VpHXFXvgSQpainDuDhBCiQ60jhJwC5Whd0Re+7TVutfjc437dAQ7G/2pte9b7teOCm+2K81ujrT986K/rCtvOr9ZGCmPW811yLeCY2F61LPyOrrbdmS1ZaUtzY1Nc2lSH1+Xujlm/t9PX6gI4C8cg3gUd4KgOKRd0ctca6xugdzxdTkL08csQ67sWxsb2prznRAfY2/fIY02tmxlnIgG7TL3f146/zBznYnv4k57z9nGK7GzKmTSD3u+MMaZzdTWL05vpy1WK1hV94UsImZ+Ssv8RQogGtY4QcgqUpHW88CWEZKeUKTGEEOKDWkcIOQVK0bpiL3wFpknqBCB6enI/qRTCia8CSa+c05pDU63tctYyTL7pytq+2CRXgDsh11wMmU4Rm9Qqdrpyu405pjjHb+81rU5xDtV1jTPHVGcDweVCBHJTpCZ+an8fAh/7HMmjtD68MxtD8xHnnk4d288cyW9qYvpQPljtsM41FXvs8kVTTnE+NEGtW5SQMGVIROWVmNB5POd5nkLiPO6Y2eWxrH2KcxIDpyFHvZ0VTXEGytK6Yi98CSHLYFDOem+EEKJBrSOEnAIlaV2xF74Cd+KnBs0Bdt3RiF36aECbvaWE7O32kkmK89vuX0vGNSbJ1ZiEWGPpO6vxd51ilyTq7Au4xbFOb7udXE6va2x6Yix/OacznSu5VSF3BksiybWdM8nVkLZDbYxweqNPgZy2Z8KHMzjpTpTzO6KuUnaWpFYWcyYHo9atAPsDd51Hvhkv7f1rd35z/gYbkPRq6OyfpHNyit+ZObOVLeH0BvucXvRK0bpiL3wJIQthpJg7g4QQokKtI4ScAgVpXdEXvrsBcbpNvGvbHY1d+khzlZ2ORWDJo0Tn9zD2rsN7bju8tQNejbOO9T26xsex2E60HetrxwXbyy9p8cRTExvba2931bMd3lSnt10+dbki262t24xxaeu6IYfXtzTSGAzKSXu/SYa4nVoda/sksb4J4w2G9M0Qi9zvNHJbG21pp5kImQNjY2vH4Ow7hxM9po6nKWrdvEQtARQjBNq5F+n8OvsfcT5HG5JTilyCKxo7jMWd3prIgYwawkqd3hyHtSStK/rClxCyDKXcGSSEEB/UOkLIKVCK1hV74SswVoyvVSDSAXbXVRzg2Njfdpta5udE5xdwxP2arsMbm+W5PY61z+lPjeH1ZXGOLWO7tfZdMJebOzaWVyvfrpPq8Lrc3TxZnYHL+3V/b4rCHG76qlmblTAu50cd6b4OiduNrTPI0MgZv2WTMo7o+ODqOWa4U7rCied7Spbk1NjeNGfIvVltw9P2mK8MtW5Zgqd9TDrikPMLZb+v/4FusrfNOcng/K7G6c05hERXVm1zTF/N/nmc3qYtlKN1xV74EkKWwaCcWBBCCNGg1hFCToGStK6My3eFMzHHB/adx066D3t/u+4FOccFOccOe+ywx5l0HzsY7GB62499md7DHscZTOdhb++N1+q73X9Nv6+q/+p92LTHpxHaPyV7s1Md6D1EjdNtP7R6drl2WXu7qR5a3Wa/Y5u9z5iD83puBOetNuty5/sdzve7XnljgP1esN/323b1b9c9PKpy+13zsNsY/FlBoh4hROSZIvJBEXlQRD4gIl+hlDPW418OHnxpGDgdBjHHx9A21HJDYy+1+M7QvjE07Yv3FnmzuzlwiMvu2X4Eyx3arvvynoJNIeQ7BmO3j+lrRFn1e5zj2ASg1i1P+3zRXTbjF73Queo5h9V+B7S1KoIidCR0eNW2134xNeA7kfx9sPtx1vUfYPscmOKwlqJ1dHwJIXkxeWJBROQqAG8DcD+AlwH4YQBvFZGnGGPOHVXeBuCt1d93jR4AIYT4oNYRQk6BgrSu2AtfgcEFudyKez1sr7M1n+FwfJv41oh4jjpWVqt7VhU7t+Jv61jjdgZmO/63dmqbTMx2DG8os7SjzrlVp4l5tmOPrSzPbeyY41B256WJjc+1My873WBrnx3TG4rb9cf4otPWkLV4Y2N4Q7G/TqNkhMAZx1gG8lwAjwHwvxlj3igijwXwvwN4NoB3O8p/BMC/Msbcl6PzrRGMjfXE4UbH7Frbh8Tj5oj1Te7X9LtovvcJ/TrR7uz7ytrvOcGVDMWxNvsHOJ1a2ymxs6kTgnrlc8QRR7rEY6HWrROfZvQ2jIn9tf9/tnRxkrZIVgbF4Xqc/1xtHfe7vwBzG+Ulad06rlYIIUXhmjquTCe/VkRuaz1uajXzpOr5E9VzfbfvyUq3PwLgcyLyMRH5H/K/K0II6UKtI4ScAqVoXbGOLyFkGQwOscmR3GOMeUZkWZ8/9o8A/EcAjwbwTwD8mog8xhjz+diBEEJICtQ6QsgpUJLWFXvhK6im9oamMCvTl9tJoo7Tj+Pq2ksVHcu3pidXbZ2J3Uc9/dhqw57arG137nMvZ6Qte9RGm9pQ1+21Wb2xHAtdxyxVFOrHnq6sTVP21dGmOOtLEvW3xy5TpE1tdk09jpkO7XxtteOc1jxyelWmhc7vqJ6vr54fX2+v4kT2xpiLAGCM+cG6koh8A4C/C+AGAH+UYyBbYtByQBqe6dHBPgN11XH66oXGUzUmVUFtOvNk2P3Y09R6/0dMPaBjH52hhL4cA6YQL7F80RByTx2l1m0DfRqyco42++vtjkaVfclTnkP7XAwReq3tUBPtPsaeQHOMt1M2NfYifV/yFGdvH/7xLpkLrBStK/bClxCyDCZTEgQA7wLwKQDfIyL3AngxgDsB3ArgMoAPA3iqiPwdAC+otl+DQwzJn+MosIQQkh1qHSHkFChJ6zZx4SsidwL4wtam/2yMuTFU77DMz8GNre9U2EmkeomnHK6nloCqXhJob9WtHeBmv52wCsBOuuM6Ohlu57euufclvQq6wt22zyNCvI9LF/mTXOVAu5sUkzir5+wGklxp9dp/xzq9uvPb6gdxZTWHV3N3XWWbNgLlXHdTxyS1yt2OMeYBEfkWAL8A4GdwEMS/b4w5F+m0/zEA1wH4KRxyzN0G4BX1XcOtMVTveu0McFSj60Q6wUkEkly5xtWMt9mQcTxjCGWJWvK2fRuXG9xiTPKooWOJ6Sd1XFMmCKLWDWeQ1glGff80DVE32LM0Ovvg3med5knOr92U1kYKibMxvDo6dEAx50lskxn+/xmVvFBrY+0O78i2StG6TVz4VrwPwC9Wf//lkgMhhPjIt9C5MeZ9AJ7m2C6tvz8M4OuydLgeqHeErB5qXQaodYSsnnK0bksXvncAeKcx5t6YwiKmE6fbi7eF5Y5Wh9u19FDsUkixDnC7LduVbfpvXGUrlra5U+iI8Y2OB3YvZ9S8bm1zLXHkYo5ljcacdNryRS7Hd6jT61uiKJfD61vOSHV4gzHAyIoBUpIgEDdJegeD4bG06Ncd6vw63dklYn3nQKxnoH/3Xn1PyhuYI+bXxxROaii2N/Q6pr+M40uBWpeFNK0DwrlbEoh2gF2/PzTn1toedH7bbShtBmOUc1qDMfoa6/zmdHpTSF0GKNa9dbWR6vR6jtmaHN42JWndlt7FdwL4rIh8SkRe7CogIjfV6bP/6i9c6yATQibHHC6mYx5Exat3ba27/Hku5UnIIlDrchCtdeefo9YRsggFad1WHN834ZDF6yoArwfwSyLyHmPMHe1CxpibAdwMAF/yZVeZCzg/urRVTG0dm3pW1amdXS0W+FDHHw+c6gAfBnvY1zilqB1WO4YX3bpa1udOnZHOr7atGmm3rWqrcpvqrHVnK9Y9DtGOBQ45uLFOb8edrerUd7dCDq9dz5fVOdbhjY3bdZVNdXjdWZ3HfVaZsv+dKkG9a2vdQ6+74fCJDnVWPXWjzQRH/V7dWJfW43w0m7Q2TLdkL7tzi2BbYwg5ABP8OGik1no+bm8NKtB/r63Ier6yQac3ZjyBPoLlB/bvg1o3iiSte8gTbnB/ahM4wMHY305hpX/F+XU2qelkrPM7BWOc35CwznyBNNTp9b6NaOc3/GZH/z80gwyVonWbuPA1xry2/ltEvhzAywF8MZjJkJDVYaBcTJMoqHeEbANq3TiodYRsg5K0bvUXviLyNAA/iUMK7CtwmBZzP4AP+WseYnxtl7bJjhzpBB/q+DNDN21X34mz6laWvSbwrjWz/Kyua7mutgNcx/iqsb+tuOG6/X21b1e7nb1bhgHnF+g5zOfNkZmeIbG8Q53e+rNzxvgmxvL6XNtcDm+n3Fhn13Gc80xTyZcE4dQYrnctYp3VMXUT+oh1fgc5xKZbZNDXLvV4JTgAqsOjOb9DHOER56zq7Ab68BoYKWU99bKVzVm3B7VuKEO1rn241e+Wb1ZLJMHY3/bGXmGrT8URdr6XSOc3eiw5cDnTvTKR/U7p9KbY4EOc3ljXODCeLB9RQht5vhLlaN3qL3wB3IPD9eiPA7gawEcA/LAx5k8XHRUhRGULcR4rhXpHyIag1g2GWkfIhihF61Z/4WuMuRvA31l6HISQOIwB9oVk/5sb6h0h24FaNxxqHSHboSStW/2F71AExynHgGtKc9wU6G4dWHXOq7Ldach128epx90kWIey3TJDpz5fbH+EWuKrqo0L1ea6zUv7Kzr7O0m+Td3vWfUe7Vs97iRX9vYxwfB7axqyPX3Z/ttVpje1eb9zlnMtPWSaOt3+Q1ObXXEQsWWbmYdKwipX26lTmnt37Vw5O8YmtypkSsymGZuwKqaObzrewK9ATBKu4NRmLclVxLTpYKIaG8d0tqYfa5+px2Os/b6BJSZ26g2rbjvibn1o6nOWhDoJSa5S+0tNgpUDat1yaIfePS3Zrjy+r955bBdO0MtejqjAlOekJFdDQig0hobS5DwHx0zzTZ3inDTlebmpzXPIUClaV+yFLyFkOUqZEkMIIT6odYSQU6AUrSv2wldgcEHOjw5qRZMUqkk85XeCD3UOhBJi7UydcKpu250EC3Akwop0gG0390q53LSpJb6q27yEbl3sDnX7zu/xXe+a24vu5Y32C5wILsc3mMRKcXrr7W7HF506ttO737tdW9dyR7bDqyatUpNdocexTrqj6+rDVzaVUrL/lYw43IbjhrqQu05UeWtbavKqpnxno79MvBOst5llvRCtbo4ENFrd2ERVrWH0ljxS2hyyPFBw+aIhrvKUTvRAqHUzIjh82IFj7nVn2205K8cPR09eF3CAPXo52vn1Crub0Pnjm30TnQgxsU+138jGZnF6p3B4I+sO6mOkUJaidcVe+BJClsFAihFIQgjRoNYRQk6BkrSu2AtfwcFNbcfVAi2XVurXlrNZcea4TXWOfef1zlgxvJYTfCxXxeVKt363/9rpDTnAptrejf1tvwd76SP7zlyzvJGpvOrK+d2brpvb5lLta1vLG9Xxwjliem1CSxPFlLGd3ua1EsfbLhuK5T26xd1xu+J3e7G7ah339qilh4Kxvr0m3OXGYsqJBdkMBmEHw/ORJDm5MeXbdUY6v2r7njp9t1h3cXtltXHGDC/kGgyJz6ubUs533a2VuHKONqNdL0e5VTm9A5zqJKh1y6A5qh6ilicCRsUCBx1gLfbX1ZY2rFjn19XvQIbMDppldoadQyHKpVXKxji+Kf3GsmKHtzuAcrSu2AtfQsiCLDj1kBBCZoNaRwg5BQrRumIvfAXAhZbDWruwvRjfgCN82LZz120cXrcTXFNnRLad4EPZrhusOcCo+6rdxirW9pI5foS2C9w4wFXbF6uye3u81bgutbZdgJva+bUd8TrWd9fcYarGUrvKDnS31o4j9ji+Vd3LlpMbcnptt7Ydfx3r8Gpxu77Y2VRn1+fqDnZ0veKV545eKVNiNkXIOZ3T+Y3oP9b5jXEb7CZCTrC3bOxx3HnK1e9RO/XsPurn/qQgvX9le4qzOziL8xCnV2GTTm+7GWrd8mhfCM9nM6cDHIz9bfcTcnTVzhxNarbxiO9+1GwfT71RKG/e6/TaGpzq9HoGnnzqj5k9pLY539VoKVpX7IUvIWQ5Ssn+RwghPqh1hJBToBStK/rCt7OObxM7W7u13U/QdoQ77Vif9rl1G38Hy+GF3XYVr+uIobXd4NoBvlA5vI1jqTjBZy2LwHaBNQf4UhOfW712uLJ75fbdvnfb8VB3r8T6do6n1G04m3aMoXucbYcY0J3ey6abrbnebq/J64rTHezwBlzdblmljOYEK/vjymi3Sd2bg/sCGNeYyHxkcH5T23a6AKHYr0Tnt1MW7jJqludjCbVwUzbgFvfG6SjU/Bdh/T8jdf4AuzGrrZib+Kpbq8X2tqV4qGscM84xdX31Y5jR6a2botbNjCD+M3R9yZTPK3Ted/rvVfYPIzr7s9pBv6te1mfHWI4/1xTbeArnVyk3CsWF9bq3mtO7Moc3vc0xH9rwqiVpXdEXvoSQBTAYoOaEELIxqHWEkFOgIK0r9sL3sI7v8c6Iz9EFHK5u69aI7Q7vrNsmsY5wO+a4cSgrV7aOqa2d3X2TxbnrBGuxwEDfBa4d4Dpm9mIdn1u1YTu9bff4kvbVOC5qXD1V46vesx3r63J360zQWvxv7Nq87b9tp/fo8NZrKHfd2vO9/fp4HDWHd285KSnxupqzG3Jr4+JzY8r4tucXMxMTq0hWS6ZkoFUjdaMZ2qqbsp3fZseINmwXZEjq5dB4RrmZbnc4Kba312aGNmL7yMCS6/VqUOsWIDSbxVtXKRTpBEeZtIkOcKfdyAWHo0r1jF63sKtS53sf2owddLentGWPp18u4PS2tseUabdpMyyLsn93UpsLObs+StG6Yi98CSFLUc56b4QQokOtI4ScAuVoHS98CSH5WaEzQwgh2aHWEUJOgUK0rtgLXxHgggDn9dRbLVlT9Xxm3cjop6E6Ep7a7J8K3a5jT3E+Jsaql0qSzn57CvR5a6RNwiapp/dWdarXO1NPMa6nSVdJt+plmlrvo55aXdepn5sDZk15br35aruV9Ar+pY3a47KXN7psTWO+3JqWXE9RvlT1Zyexao5BPV253m4lrtq3pzrXz4GpzWqiKm0ac7txpY8jkdOXffu0qVtD2krBlJMEYdOEphi3P+vYhE6BtmOWHtKW7UhJctXDTpwU6LK9tZ7+V58XTVlr+m/UqdFMp7Mag709NCeuX0VLVnV8LXHl2u3Hnu/28XXVi5zaOCSp1ejli6b6wUatWxdjQgt8Sw2FN3ebGDAVO5gAK7CeUYxcHstYpceESYQiQsace5aehhJUdY6hNtW5ed0dWNo0ZP/uYdOkBx6oueSnIK0r9sKXELIghdwZJIQQL9Q6QsgpUIjWFXvhKxCcQXpObs15kwjKzc5ji+2tNi9YSyXVr/fWHbF2wqyj01vXqZceEmt7VU66zqXb8XW7wXWbF+zljioX90pzcJcvthzZXXN89p3nurudHeXeGMK1y9xd3igFO4mV7fTW7i7QcnzPK8fXSlZlO7x7K6mVnbCqvS/Z2U1weoOObu+1fqdN/aoGXZAp796VcWewCNKsACepzm9SnVjn19FPaIkhn3lstEJ2ATvzi3c9I7sje0ADrAJbozS3NugI98s2w4rUkKiENafg9Hag1q2WGM1T6yoFfP8Xe2bAOMeT4gDHpbPqllLcWM35tU1mF9EzcxTt8P3s6Dm6mtPrcnjtMeRyeCPKxbc1QpBWITOrGMRoir3wJYQsSCHZ/wghxAu1jhByChSidcVe+AqAC4676+d17Kpy50KL+e20odym67nE0m3zQqteijt8eO12hNvFGoe3dj2r91/HuV6q/O0LVfzwBTnr7L/QcnwvWS7wg+ZC5z0+uK+8aMvQbWJsq753rTtcdV37vWnLFWlOb+3uAsDl8+4+zeGt2zSW49u4uo7ljKId3Z51ZG/3bLOXFYiMk/O10Yxmwbi3UtZ7I5EMcX4DbTjrKf2E3GWfeVyfz02sr92m4pzaOtEdUPW0s1wGe7qQ4s664nFDsb1RTq89zJxO78g+Ngm1bn6c0zZGttNmqBMM9P8/D8ygcY4h0mhWHWDH8QmZslmc30A5H4OdXvvZ03EOh3ezzm6ONgvSumIvfAkhy+FNoEUIIYVArSOEnAKlaF2xF74C4AJ2PXd2F4ix2kfcQtwpRS5YDq9NeywXrH7OA+OoXVK77bZ7arvCzfbqPV+q3NueE2w5v8DRHa7jgR/Ydx3gK+UyAGC3fwiAdjbqavy1e9s63s3fVtxvnc25dngvVu7txcrZffD8MIbL593th211Fufq+bzreh8d3qprK5tz48C0hh/MtKzG2AXcW2eb7rpRNwyDju6Au3O5hK0QgdwKYtId1SFlot3bGGLGg+65EIor62Vg9sTcmd4flvNrn+eNLhj39m5jzv57qPG7rYoBp1fd3+urNayhTq+PTOd8Hu3L3F+mvkhmEmJmZ2lzRGbo1IzQ/fhW4xhC1wW2Na03q8WeeuiaKmONRyvSm3ESE49bO7277vagw2s7xDEEyqa1VaDD66IQrSv2wpcQsiCFTIkhhBAv1DpCyClQiNYVfeG7g6ixvBoxjm/t7GqxvlqbFxxjqWOOL1i7+s5u9/baedP1cQx1HXtd4fom3rl01wauXdGLlbu7b32pa2e3doOvkosAgAfMldX+S9W4D23eJwfndyfdke9bQcCXLAvUXq/3ouXoPnD5EEd88XJ3+6XL/azOtXPbZG1utqOzv+/mOtxdp5PjcHADjq/3JmCk8xtdL3edMRhACkmCQBJpf9cS43C9KZgTUdfe9cUg24WqE75JUG/FHtfp/U17CpCly70Y33PrIDROiztOt91/33m2xmMT6wSnENLAFkXH9tZQ69bFHA5wSvsJmaEHxQM7xtBdy9Z2gf0O8LGRbqed77iiAb3hacfGMfGv0VB7Xw6Hdw3O7pTXi3NdixakdUVf+BJClkCKuTNICCE61DpCyClQjtYVe+ErkCZrcQz7Zr3a+A/2gvX6PCHyu3GBle40N3mv3l7r9390gLu39WrToQ5vPa8ijPet6hetDNEXm5jfBwAAD1RZnh+2exAAcHUV63vv+UOr92VHLR/X2L24737t6pjeB6pY3vsuHtp64PLh9cVLh/11jO/+vBU3fN51fI8xu/7YOW9GVjtLaoXuYCgf4hDHd2g5bxsLiFVJrs4pEnAZssb6Jowheg1Jra0WWhPNa8vRbZxfO+106y64NFmbKw3pJYSQbjnbza2dX4fDIlY+gmAW55RzMKR1M5zPWWJ7l2CNYyIHXLqQ8/Ma6jBPmRna0fQxRtZygKVboJnV0sxy0QW2+YkXmtlhubjN81l7Wkt3nx3z23sfGp79s2RkjhjHqtsOUYjWFXvhSwhZkEIEkhBCvFDrCCGnQCFatwsXcSMiOxF5Qs7BEEIKwUQ+NgC1jhCiUpDWAdQ7QohCIVoX5fiKyH8P4J8DeCiANwP4IQDXAbgDQPx84hmJnep8XmU/2mV4G1coUxBiEmZp7NXFkQ50pjf3EmS5+z23pnLU5dpt1f2eN/suV9sPHKc8V9OUd9U05bND8qt794cpz/VU6AOPAgDcf36YJn15fxUA4HOXDnX+8v6rAQCff+Dw+vLlaomiaqqzqac4t+esWMsV9aYForu9mcZsb3eVjd3eK5c+FyVL4hmNuYXIYLOxIFvUupro6cex04MnYpZp0jF9WVEj6pTnuo19dz8cS+M1U/WqsmdnXf0+P8afHJqon+0pzu3p04Epza6EWG0m1ZYV9Nchoe9syb42qnXAtvVuMFMkwMrZ9sAlkYJJsFrjCS2FZJqlJ/tjqnWwThxbrWzZS3zURJtV36L9FaaueNjett2sqc1jpjTb/Qfh1OY4Nq51bWId358H8BcA/i8A31s9X4WZPhIReaaIfFBEHhSRD4jIV8zRLyFkGLKPewTbiTz3ReR5IvLHIvKAiNwqIk8aOHRqHSEkmg1rHbCg3lHrCNkWG9e6htgY3xsAfJMx5r+IyM8D+DcA/k/M4CWJyFUA3gbgfgAvA/DDAN4qIk8xxvQzKNX1AOwirut3Mni296I0TvCI/55qt7vB0ZbtGtsOdO0S73G47XcJ9bJHnwUAfP7Cp5qyn7jy8Pf78CUAgNs/+2gAwMf+/OAEX77/4ASby103BFZSF2eimtilhDYwDSM3izowI4g990XksQDeAuAjAF4J4CcB/AqArx3Q7ea0brWkOssJ5bMkuYoeVz1LpHIjmkRUdTOthir3w1ysZqucW/+/VNul1jglyVXnnE29y54zqVWOPsbUOREW0jpgIb1bldbZGrK2tiOnyLh2987ngCNtJ8Fq2PULnVfJqXaVo3t2f7fx/VXVb8P6KqNJXBXp6rYJlB1kRNLpXYQFta4h9qrvYwD+BgAYY/4AwLMAXDu280ieC+AxAN5ojHkjgF8G8CQAz56pf0JIImLiHgFiz/3nA3gIgNcZY34OwG8B+BoR+esDhk6tI4REs2GtA5bTO2odIRtj41rX4HV8ReSsugL/bhymvwAAjDG3i8gzAfytsQOIoLa2P1E931U9PxnAu9sFReQmADcBwFW4Gs953NNnGN5CZHCqZRdjreysl3ZgSbW/2i5n1e2/Kw5fLbmytejTw/8aAODiDdcAAD77hYdlix7ymEPds0OIbxMT0jzH3Cnsxay4386oEIWt3oFbYtzxB/paEbmt9fpmY8zN1d+x576v3EdjBrFlrbvwiGtmGBohxMnGtA5Yhd4N0rqzR33BxMMihKhsUOtchKY6/7aIfLMx5r32DmPMXTjYznOjTh6pDuzNAPAIeRQnVhGyBGmZ/e4xxjwjsmzsxLEhE8w2q3UPve4Gah0hS7BNrQPWp3dRWveQL6TWEbII29W6HqEL398H8P+IyHONMX8KACLytQBea4z5mrGdR3JH9Xx99fx4a7tOhCsa5XqOZYQ7Gxyfr22trpWNVHa7/nZ7W+3o1v2dVc+Vs4srKnv2QhWnWzm9+6uvbJq8/PDD35f+2qHOhfsO39+rP3nYf+lhVezIwQjG/kL32Zwd9ruyAR5jU9Av4ypnbe9uc59X8VkCI8uNrRPJIon48vw8Uc/9Kk5kb4y56CuX0NfvY8tat0ZSv3cJ5aPO45F9HOtYM03q5yY7aSvjaZ259MpD0G4vq3O13Vh5C5o4YUc4n7g2esdbDya9bN1FcLrakJ8gU8ZSLsn2tA5YXu/Wo3VTfh9ztB153keFrAbKHDPEW/rUlrE6q3Odp+ByXbnb1u7BOldLVa3J6lz/pmx33B1A7y0HYpVd7z28ukGs2PnacI8nC1O2PZRtal0P74WvMeaVIvJRHATyhwC8GMDTALxhbMcJvAvApwB8j4jcW43hTgC3zjgGQkgCMZn9IvCd+5cBfBjAU3FIgPB6AK8SkccA+GYAv2uMiZ4OQ60jhAxha1oHrELvqHWEbIwtap2LmKzO/wHAZwH8Cxymv3yTMeb+sR3HYox5QES+BcAvAPgZHA7K3w9m/hM5xptGkMX5TXF2g06ue3/jzsbUcTm5rb7Fis/tlKuPXeP4+p1ec6F6vvKwfV8/X3X8DM4fUpWph7U/3D46u2gNr7qTaDu+eyv2t/232XWfGzfGdmng337YJt0y3c091DuLvo848i5jDrdWG/ekZLgz6Dv3pfWmjDF3i8jzcfjR9o8BvB/AiwZ0uU2tq+tP6XpmZM4ZCN6+tNki2mtLY2qn15y1vuz131WZXlbnXbecnVi/t854q0xvaU24X2uZWufK7j53fx0SXOVs49ym1gEL6t1YrRvX+crbHuvwRoyhV1dzeOvX58cx1fvE+qR6s+xMt1y97q+xNPBQqG6j/m3qHmgvi79Ne6aMooM91AWREwg40qOYsu1Utqt1HULJrX4Th0xb/wzAqwG8EcDXA3hnjs5jMca8D4e7kYSQlROZ2S8K7dw3pvu/lTHmNwH85tB+qHWEkFS2qHXAOvSOWkfIdtiq1rkIOb63A3iJMebTACAifwLg7SLyRGPML+QeDCGkEBYJLB4FtY4Qks72tA6g3hFCUtmm1vUIxfi+ynr9IRH5ahzuCq5aHAVImurckDLlOXIOadL05GYcO385xzh7U5ftuva0Zft1u16zKvmuU8bUSazqRFMXrKnO1f79lYfy51ce34e5wjGlGsCuSo5wnCpzuK0k+25yBLmibudY157irE55tqY+H6fSdLe3t/XyKygJdcR6rZbv1HXv7M266dXztKn2tcCcw40lsNmy1k1C4Hs2y/9/jj5GJ7VqlQ9Oca6TVjWvq/3W9naSlrpOnZCqSWJ1LNEtV2tuPbWwnj7dGmh9+jZ1qjaDU55h7fBhNdKbBpwwhXgoUVOPZxhHMmsaSyQno3dTfzZD208Q0OB/3ylTm+1+Tfe5N8W5/g3WCsnoxXn6wsbaxXrxoa1prbW2NVpXF+n+yDrqUWQSLFddu0rwh167rcgPvNSpzxvUOhcxMb4djDGfEJG5spwSQjZIpiQIi0KtI4SEKEHrAOodIcRPKVqXfOELAMaYe3MPJDuCg4OZmNnH6842hQJtam346lkurdiJslwJqOzXWjKr+vWZtd9emqiT3KpyeOs2r3C/3jdOb+VCNNvr8q27ekoOAVPngzmvbzO67Yf6pNu3Tj4tuZX93CSGae4kuvd3xqkcRm9irE6FyG2t7c07j/naxrpyKfZcjruHGWNBlmYTWrcmPN+f6CRwGb6DvXM0ZlzNs+L0Wue/7Qh3/670sOf4Wie63VatdW09apIBWuOr+7A398aCTjln2Vh89nJsUq01urZDKUjrgAL0borPYkybMzu7vXZCDq/q+FpOb8QsDHW2Wi+RltVXu7R9ENTfXNItrjnArv4DXTbVnG0pn2fow4uZxTIUj8udlYK0btCFLyGEeClEIAkhxAu1jhByChSidQVf+CrLGQ11a2PaUOKDe+6tq6zPyW2Py47XddWx3WHN2bVem7O+e9xzfOvY3toRtrbvr7Cc3naboZtldSxvtWFnWQOmuTvZcpGru4aq82vF4Wmxvu1U/Gr8r+YehbaHtrVoxhVZ3ltmiCOdS9gKEcitkGOGQEyZrLG9kW05+1TqhmZjuGL5badXPd8tJ7i33dmhvqvbpu0Et5f66O47aoRlu9b7tWG1XeRQGS3W10cmJ7f9Gan9hvpKGMvo7zS1bjk26vB6z6chzq7Wd8Dh7W8X5373AKxuFXNZPSLG9XftNHe1OPibzHaAey8ch2eAEzzJkkhTxOxOFQdciNYVfOFLCFmKUqbEEEKID2odIeQUKEXryr3wFQF8WZ2Dzq++3+nguuqEXFxAz96s1dXcXOc+cdZtXNyz7n7THsuZu2zj9DavrWfLUW3fCNPvllnxbfXJVS+UbpvfrdtO9bJfTRNarK/SZi9+Dv27iXZsb+juY8+17b3ovx6TRVUNOxni+BIyBM93KdpRU86JmH5C8cMuV+K4ze30aq+j4odrPbJjfLU78Z5xavpzlIp6/NKp2nNcPA5GsvM7QJ+KjvUl87H0rKQF4nadbQXid511I53emAuc2MMQM2ukyfdy3FL9a6zt7b2t7U57uTtAsVrRf48qnUF/D9GZoaMOrLJ9zO81amyHci98CSHLYFBM9j9CCFGh1hFCToGCtK7sC1+R4Lq80e6t3a7vdWgNXl8b6hq81lq7LmdYcYVrJ0B1eM/6bRnb8a3a3F/R7eNYzh4XhtPchTz8Ib3MqO2y1q0+7c5mHQtsZ3u2HA2g77D0Y/r8z736bTSnN9IRdqHuCt2dnDIbIO8wroeYzzRQJjoj85A6oe96Sh+Rrq13HL1nO9Nowl17+8SOjfl12QyatioSqDq/jrqjnV9fx/XLAc5v0C0KucZzuMrUuvUyQ7xum0UcXut1N6tzoEwOpzek847fWBrJzq+iff4B1a8GOsD9pnrHLToW2NdIzDgcY5mUQrSu7AtfQsgyFCKQhBDihVpHCDkFCtG6ci98Bd2szgHnNyoet2kr4OhGxfYqVl/I2dVifdFydpt1JxWHt96/68brdtrSHF1l+/HZfn+Ixo7tberug/kB0butaN3BbMZlO8J1k+2PVLujqaznqbq1Ke6SUi4qy3OsOxxyT4AswiahPsg8hM69iHMz1en13tXP6PSqbYec3s45mRbbGzWenpOiWAFB57ffZC/WF/brrqj5DNjeW4kdj88h1izmNTm/vjIDoNatjBkc3qjPe8A41HYjY3l7cbzeMpE65COg30PyAfRo6vidX9eQ1O56wmnaT8f6ET83tbaT1gbWdsYKy5Qz96wmS9G6ci98CSHLUYhAEkKIF2odIeQUKETreOFLCMmLKefOICGEqFDrCCGnQEFaV/CFrwBnjsRV2hRme/qyr04wuZWy35VIy5esqv1aS1i1c5XducsoU57tBFaHbfWzMsW5GQc6z019z1SL4IwiOzGVsr3z997eYE3lqZ/tpFb2FOh2h/bHdd7dryXBUqdAx5RJfY3+8VTbTJnKM3aqTCHZ/06VAXlddCaYdhW1pFBqG7Be5/hfPucPBTvJlZbUKqVPZRZl1h84Y6Y6WsQsjTI71Lr5mTFp1RRTm/3hRspJab3uJ7/Sx9Kb4hw7nhHhMN5EeAFcSUfbG45LuNXbHW3YVfXenJ27jkn0b1d/03Ftrm1JJKAYrSv4wpcQshSr+mFKCCETQa0jhJwCpWhd2Re+besrZokhbXuso9u8tvrSElm1t4Wc3aYtq17rfQWTW/WWM1L2o3WzadcdR/Pc68N6r3Y77bKRNEsQ1TnKTP82YLOuWD0e2/ltilq2iO30upJb+RJgtYbTvC2f+xTp9Ea7t/DcUQ05uz7XJJc7U4hAbpLQaTbmrm/g7n5UP6HZITGzRULjUGZjOL/0yrmntm3VcxUy9VJsViGjOS+eYxJKlNKbEWMJgstwUZ3dkHts6YNznJqGKHXVPlxthIjRr4wOdNZ2SBwpxzvB3Y3+UT9l4ipX+1qCKnt/itObcfZFbLlRF009bYl3fu3fO+Fh6DZtUgIsV2euS4DURFhDk2C5xpNKIVpX9oUvIWR+DIoRSEIIUaHWEUJOgYK0rtwLXxGgvZxRe7vvdY1r+aPQ0kOhPiKWNQq5tlExvnYZKy63uatvO8Dt4dlO71m3rrNO+3XM3UDLlDXouiT2Xbyes9H6U3N+a2da6iWR6ve177yNLpqDG3CAvXf3Aq5wtBPc6iMUHzzIEc4kbKVMidkUGZzerMsXBdqIdXpjYtFjdce4zkmlzVCfTqfFdjV7A1Beh9xSX//W9qg4XbusMr6UpYdi9cbG6wgFNGvw8kYJ4wtBrVsBA5ISTOnwqn14k5/4XzuXK/KVi+ljANH/R6Ses1Gdu/tyxgQr/Vimsa69vYL9DtVYZA2fxrm7OFaNdYB9jYykFK0r98KXELIYUkgSBEII8UGtI4ScAqVoXdkXviLxjm4oTjeqjmLbeWJ8Bzu8jr7ULM5W/LAdn3uM9e2Py3Z6VZfG5ZCPpXZ6Lff2GCjXcoftOvVrzfm1YpU7J7TmzmquUoRzpcYDK3323G6PM63duYx1ejt38XJ9jIXcGdwMEa6oj2xOr28GhVZ3iGsc6+w2z/oXUnOLh2S27jkAmusw4PzQHFU9Htcd6+vtP+DaeMtrsbshZ6V+ubTzOxRq3fxsxeFt2rTFJdyvGssbW97V70AGrQAx9JxNwWqs3WbI0U2Vum4ber+dvmOIiAMe3MeYeGBne+Oqr4WyL3wJIfNTUCwIIYSoUOsIIadAQVpX7oWvIG4dXy0Ds7eO8lpxhHuZmYF4hzdQvp2JuVdXrO0Bp7fTZ1O23mf30X9Lc9G5q2fFBduxdarzW5fYu9zuapPYday2993ysJvyOKnGGmDPHVFcMVcMS2ysr73fub5easyKA+kPgayQIXfx53R6Y+J21SzOGqL83SmTMRBulBWgoAWWJVgYdkZo3TUO7Hf1n8n59Y1nUhcpAWrdzBhEnUNTrL2b1I+6uG14DKOd3gEaM0iWYutEnOejcQiAOvtGeR0s72zD7ahmdYCbtp1dpfUx4qCXpHXlXvgSQpajkDuDhBDihVpHCDkFCtG6si9821ZYyNmNyfYcGbvrzLjcG89Ah1eL9W3vU5xee93entPbGm9vPLbTWz/v3NuzGhv1azvWF44bb1b8hub8HsdvqnLHAWvObmzsr8up6rnAthtm/dGLBXbVUxyW2FhfZxxiJueklOx/mybVtfUQ7fRmOO+TsjgHytVfxKj3nOJmt3FYlEft6lYe5M4ojkkofvXo6jrEI1jHXS6Lsxrp/A7pb5K1gQNQ65Yj6dhP+X9arMPr2Z4lplcj53d0qMYH9CoJ5XeUs9tczq+rTm/7BA5wU0nps9uVu2omq7YUrSv7wpcQsgyFZP8jhBAv1DpCyClQiNbxwpcQkhdTzp1BQghRodYRQk6BgrTOkf1pPYjIa0TEWI8bI2sfpjefnR0eOzk8znaHR73U0W53eGivpVXHasPsqofI4XF2eKB+2G22HnZd7HB41HXtclbbzfadNI96fHXZ5lHvb97T4fDYfTfvo1MmcxKCGIxBe8milDpSn5zVI/h6Xz9M/2GVDbehP1A/rDaaMvVrVDNY6va1eq26vXEo+3tt2eVddYbiOG7OB2kYp3fthjBuOlrstODIPnoaotSNLecaxyidSj1evu+utU+sczbYxpDzYsTn3Ry3UBvWfu/xTinrqZetbM66Lqh1yYzROuf5ZJPh+Kvnbqcf5ctt96mMJUobYsc/5Y+1KI2IOWAR7YyhPgYxxyFwnJ1vQ/tOqXruHot9qAZdUCZ8v0f3pfW5Ua3biuP7/Nbfdy41CEJIHKXcGVwI6h0hG4FaNwpqHSEboRSt28qF79sBPGiMOY+uIeguZxRKXhVKdgWEE1DZdbWkV666oQRZgaWKAPSXK7LLiLvtXpuOusGkVhquJGEjkVacQX+pIVO9rsYHe7//dWfbvvqrd/y6m3tLfljtdNo33TZgH3q7Easx42g0lLzK/gRitGu0wBUikAuRrndA8C561uWLIuqnLl+klnPpUqiundTKfo5pawwuYWlvn6LLwPkuLkVSxqMmuXKJm4amRwPaCiatsrZHJcVKeS8+qHVjGKZ1Nhk/g+Qlinz9W9uDLnVEm7NefETN1AgMVDturh9dE6IOJ/Cj0PX2gomyYG+3rxH6jYYOVxDXMcz9f1whWrfqqc4tPgfgfhH5dRG5WiskIjeJyG0ictvF8/tnHB4hpI1rKk+W6T2nQVDv2lp3+fP3zTw8QkgNtW4USVp3/jlqHSFLUYrWLe74ishdAB7v2PUiAB8A8N0A7gbw9wB8K4A/APAPXW0ZY24GcDMAPPKqxxrn8kE1isPbc3UB/7JE7deRrq23X83hbcpb+9tjG+n0duPrEm8VTeme1GguSkLdmBt1/TKVe1TtCd3cc47TdoutsiEHuOcyt/cp/apteN58FhfMoJjsf7nJpXdtrXvodTfYq+Z0y2r7ctSxXjvrDXWiBzjUs+L8D946yULuUb1/LT8Wgs5Fd7NjJadgm0Ed8jhBkzq/Q6DWqUyhdQ95wg31f8b5xhlqa0qn17U91emdYurKGKdXK+cbZ67ZF22Uk3+o8+ttIzTDp7ddF84sSx/Z/TeNj2yrEK1b/MIXwLMAXHBsv9sY85n6hYjcCeB5AL50nmERQoYg2MZdv4Wg3hFSCNQ6L9Q6QgqhJK1b/MLXGPNRbZ+I/AaADwH4OIAXVJvfH9eyHOyxQOyuGrfrqhOIEw46vO143EC8sC+WF0AvnvdQxx6ve1xOV1tBi+2dAu1OXFTsQ8/RNdVrywUP1GttSnd+NcfV0aYWhxvr3nbq2q6b7SIFHBbnzcexH3MhApmb6fTO0deMTm8WlDa9houtT2tBsxpnT5EfwDKeteHGOqw5xuKdfjNwXFHO9FCodU4m07qRx3uww+url+zSBsYQ00YKofM1RZaGDijF+a3JMd4Rw+mNIfTbNFYnOz8OlUbdL/M6wHPXXwlrj/H9QwAvBPDPAXwxgNcD+LklB0QICSPGRD1G9SHycBH5NRG5T0T+TER+wFP2FsfyGV8wagD5od4RsjGodYOg1hGyMUrRusUdXx/GmFcDePWgyoKDOxnr8IayPju29Rxeu1xKVme7jOXeGqUPZ1yu4vT2aMr1xxK6q6TeFM1paNQnUM/SPP5ZZ3juHR+rDTXLsy9+wy7bvLacX6ug67SPdXrVthxObKjNpo2ADrk+slHSZcY2EM1PAPh2AD8G4OkA3iAiHzDGvEcpfw+A72+9XlWmlFF6124n5zkY2dZqYnu1bM5zESMw7XJz4NAlsUVDqRPtYLSaGhzr6yOjw5zUb7AxUOsGkEvrUhgcIzuX05v6PRoi9EP1MOc0iZT0xTn0O/WE9816U/ZFxw3b25374hzg2ScPFaR1q77wJYRsE5knCcJ3AfiIMeY1IvJkHOLEXgRAE8j7ALwDwH3GjLwtSQghoNYRQk6DUrRu7VOdR2F2OxiRw+Ps8MAOh8eZHB4S/1DbqsvsdodHqHyrTlNmd3gcIshb+3eVm9kbS3XHp7P9ULdus3c86u1NOasNF/V4duKO7633r4XqrpSWVr3ZbpdrPyLL9qZ1+Nq0Hlrbsdt9baptAE2CgmBb+3Eil5D2/tp6qYrqcVNU+yKPAvBIAJ+oNt1VPT/ZU+0JAO4F8HkR+XkRKUr/mvNZw3Ou9upqZa3twT5H9OVrO7lfS/OMYFC/7sG0HvY2rWyonK87bXw9XUeyNmtth/oc851Qvw9jvn8R733Id9cFtW59RC2xEvoChM5h3++LKdsiWUn+zDz7crZ13O/+ni6xhFApWkfHlxCSn3ghvscY8wxtp2dJjFfYRQM9vwfAvwPwVwB+AMD34ZBM5VejR0oIITbUOkLIKVCI1vHClxCSl7x3IJ8FZUkMHGLErq9e1yJ6BwCIyAUAZwAeNAfeXFcUkT2ArwaXzyCEjIFaRwg5BQrSurIvfNuGdyh5VUwiqkDd6MRZ7bLiLmMvV9Sb6WDX9/Rv9zUmMdWSq3H4gvq1JFfHRFXVH0qiLOlvajbGJrs61he9TXvcVoFegiptu2Of2rYyBrHfiGecyWRqKLAkxpsBfL+I/CiAG6vNt1TPb8IhVuSrANwmIv8OwLtwSITwfVWZwUsFbYoR53uojcHlUuqGpm+PpdFg/5f2qAPWieMbQ+x5UJerPpS4hE+WIo0557T76qnbx/Q1ouysyy71Os/UDLVuMFHny5gkVoH9ycmstjKFOeFKJ5CTyd/22pZ5a9N+H9qPKuW9Rye7svtx9uU/wK7jnf2wFqJ1ZV/4EkJmRzBbzMmPAHgMgFfhEOPxg8aYdytlb8ch89+jcYgfebkx5l/OMUhCSJlQ6wghp0BJWlfuha+g6+6lOLxAklscWtbIlWgql9PrbFtxevtj8NwOWvENuA7aHTR1u6k2K8cXfYdXa1s3Q0y1XVrb3MPr9a22qdfT3GG1nK+tTJ+77KdXSGPMZwF8m7LvhTisE1m/jkqusEl8CX4cBBNgRdDXpXx1Bt2lnvJ/ZN9d+qFlU4Y75amUuDaGd2UQS6SWWN4o6Px66gyFWrccwe9K1DS2xO0x/U/R5pyMcHrt7UmzVxZ0fqOGkPh7M+j8dgpH9tXsDx/g3Ie1FK0r98KXELIMBtuZykUIIUOh1hFCToGCtK7gC1/xOr4p8bhD63od19rRVV1iZQwpTq9F02ZvnPV2RyXXEkaOsup4ZyYY66vdketsdO9rTAYlxK+//diqsQ5YKPQsR2hIMMQmoq2hzLTeG3ExyDGN2z7JDfmENoNhekvIjisGLDW2d2ZCZkG0W+NxUofS/gztMOYsscZD6viao9bNSpZ4XmCwK+vtf8R3KtpknVLkMji9WrnFnd/IgYwaQqrzG1E3p/M7llK0ruALX0LIYhRyZ5AQQrxQ6wghp0AhWlf2hW/LdfTG8LbL+jIwB+r2yikOK5DR6W21o/U/JovzkLLZMbWFehhEUjLAQKyv05kO3HlLdX4P+6q437q/iDrtAk5n2j/M6LhiX1tDWUWcEumwVBbnIfHAwXKhNkZ8kaPv+CdZGZFtRTC4uxh3NoezapVNjfVNaVsj50cTglq3AsY4vJH7Rzm9Ob8jOV3RAV/eod0Ocn7HduprcwxBF9a9P4vzC22/a7ZqXnEqRevKvvAlhMyPmScJAiGELAq1jhByChSkdUVf+A5Zi3dI3Vin13gyRWvxtzFObw81Xi8uXvfQ/nIW76AbmtZdsuhYXyvLc3dfp8nh2zv7/M6v/XZsvHG5AXd4iAM8mDL0cVukzuxY2YyPQTNTQreg55axkBNgl5uDGJdUEV3NpZnLUU2ONU4ZZ65YX2rdcoxdmzeizGqc3pwknrg59X+Qdqwg67OTkc4v4HlLA9vulsks1Gv9PidS9IUvIWR+BOVMiSGEEA1qHSHkFChJ63jhSwjJizHHGGpCCCkVah0h5BQoSOvKvfAVdKcDp0xtBtxTiUNJrOxyoenVCE9x7mG12RmL2PvcTYyaLTKi7rIJsqpnezqwJx9ArinP7n1dAWmWO4pIZnUcqL9sam6EYH8JlHJncDM4PsxBU5znTGq1sllrsfT1QRw7IxuzDtKmzxt76vASSa4CU56d/Y/8Hm76M9siORJZRZQpKjHawI6m/M3mPSc1pkh6Fehq6t+twX5yTnkeSSlaV+6FLyFkOQoRSEII8UKtI4ScAoVoXdkXvh03NNHhjVnWKCaJldqWsq/n2opzfM32GKcnNqmVI6FVMHfEwq6N5s6Gklz1aE/hsJZNst9jqiPc3gd7V+OCVEmvrJK+Nm1iHV7tWB3GobcfjQHkvBCFPBViZ4dMcL4n9THFLJZYYhNX5exr6m40FzbSUR3k2oToTJXp9hM9zrmg1q2DlI9grNObwU3OQin22xjWcgwyuLLZnN9Oo3p/yRSkdWVf+BJClqEMfSSEED/UOkLIKVCI1pV/4TvQ6e2VA9RY3qZtta3wuJKdXgchp3dpd3Y0tSvrOQbhNqpnX6yv1k9knLC7TaUu7O2V8xtY7shVNzg+pS2nljHubbMsuXyRW+uGj2NWEpd+cJ/nkW3kiO1dq6CPjfX1MHZ5o7H9O7ui1i3HRp3etX9n5paWuZZHG0LU0kNNgbrSwP1Q/l9JbGNQ2QjW+PkMofwLX0LI/BSS/Y8QQrxQ6wghp0AhWlf2ha9IcizvpE5vRNvRTu8Y9yZDbK/KGDd2pQTjiFX39thGel238+uKx401P5qxBPbHtBmilDuDWyLZ6U05VRc4rXO6DrOboytwY3O6KIs5MrExvJExyW1yvSdq3QLkcGcrsji9hbC0bK3Z+c1K+/0pxzza+Q200ynLmXwASr/wJYTMj8FJ/VgghJwo1DpCyClQkNYVe+FrULm9WjbfkNMrnrJB19i/v9d+u/9EpzcqfjgHyxsYXpKzOyvOa7eNbqxvqI9jA/3tya5xs1txfl11A7F1wfKOMkMQlJP979TIGtubWifJgVa+X3PoVIx2RNJ7G3OdNqpDGrIZ9Pqpbs0ssb4TQ62bmdCP76Wc3o1/BbI4vVHJQ+JYy/k9mIxxuNHrCUe4yGM+k5K0rtgLX0LIckghsSCEEOKDWkcIOQVK0bpyL3wFXfc0xeF1lAcyOL2OuzBaluYcTu+Q2N5Ylo4FmZK+I9p1fuPrtXcGygT2i+NWnbbm73G/nylie5tGytDHTWCg6YFSYa7Y3jGO7kaJNkxP4fwIzUAZ01ZqufbnYe0b9X8ZtW4d5HR6T4hJnF57+yk7vxmJdn6BbDG9vTYL+RzKvfAlhCyEQSnZ/wghRIdaRwg5BcrROi0CdjZE5Lki8iER2YuIEZFrW/seLiK/JiL3icificgPLDlWQkgcYuIepwb1jpCyoNa5odYRUhalaN0aHN+rAbwPwFUAvsja9xMAvh3AjwF4OoA3iMgHjDHviWrZNV15rVOcF78Fsb7py+rUjvZdp1Air8QkV4PGFZquHFMmcf+hjJL4amDSK3XsqZhykiBMwHR6N4K1nfsdFhpb9HISrtyFqV//iPKL/KDIMF1xShafCkmt8zG91k0xxfkEklpNOsVZK3eKU54zJrmqWWzKc0Fat/jlljHmbcaY7wPwCcfu7wLwEWPMawC8otr2ornGRggZiDFxjxODekdIYVDrnFDrCCmMQrRuDY6vExF5FIBHAvh/q013Vc9P9tS5CcBNAHDVlY8EEOHwHit3XvZcXleZRKfXmchq7PJFTlfbLmP3mWJvxhfdNO1zVXVMqw2Ryxu5l0gK9RG5v1Mmk/Pbb3o469e+VZGqd22tu+KR11g7tU5SBhRXLGpJolBbMYn7piTnXfElmPFc6zkvnqRRDQHdSXJzxia5SmkjFmpdEmO07uyaSusij3mSQziFI7wyZnV6tXp0frOUXcT53dpxV5jF8RWRu6oYD/vxwpRmqmf10BtjbjbGPMMY84wLFx42asyEkOGIMVGPEplD79pad3Y1tY6QpaDWzah1D6PWEbIUpWjdXI7vswBccGy/W6tgjPm0iHwGwPXVpsdXz3fEdtpxTwNOaSiOt9tuoOxanN5IFo/vy+i4RC8nYsf65uwzJnZ2rPPrLBPn/NrVu2/GtzOBDYjfhCyid6lO71Lnfc5+F9cuwDkLY1DdBcnppCzhyqh9zuH8Uuvm1bqIwz2J07thRutkTp09Zec3hSmd36EUonWzXPgaYz6q7RORp+AgntdVm14gIrcbY94J4M0Avl9EfhTAjdX+WyYcKiFkLAbAfulBLAf1jpATgVpHrSPkFChI69YQ4/tMAG9qvf5pAO8F8E4APwLgMQBeBeBeAD9ojHl3UusZnF71Tkqq0+twF5Od3hTGxPYqrMJhGcKIGItQrG8KuZxffxnF+YVdzmrH0dYQBAayL0Qh8zOt3o1laGwvORB7/pRx4zwrk8T6Tgy1zsvsWle0AziAVTm9vrYHfm4n4fxG4vxtmLP9grRu8QtfY8wtUO70GWM+C+Db5hwPISQDhUyJyQ31jpDCoNY5odYRUhiFaN3iF76T0r7rkej0eu+YzOD0xvY9mfOS2u4A93MNjIr1jc3yDMQ7QJHOb0wZO8lATOyvc+ypFDQlZjO4vl9zxvbOdfrPcWvfshEGrW2dcZi9tzyH3Z5lQe9QH9VzxmMVjPV19TfmLVLrVsEgWUits/Lf/FlP1bl/zo3UAtd7X6ULPGRG3YA6k8h3QVpX9oUvIWQRtpDZjxBCxkKtI4ScAqVoXdkXvq543SFOr+ZmJjq9zuzOCjFZnFVOKU5PibfNcscrJrOyg7gMzEpbsc5vbJlOOX/WZ++4UilEIMkIQvkKEveTBbG0xemshsqsJC43O9S6bbGCj2uKLOpZWFpzM2pErmO8mt/JGfKvjB/DCk6eDJR94UsIWQBTjEASQogOtY4QcgqUo3W88CWE5MUAOC9DIAkhRIVaRwg5BQrSuiEpfTaF2XUfDSKd6bFGrCkN9X7XFGNBZ7qBEelOY94h/sj22oqbWhFb7jAeybKUUREYOKfRyP74CCHGmj5jEu6EWf332ortM6WtXjnTjdUwrjLjpgjVfYQeYxCR54rIh0RkLyJGRK71lH2ciLxLRB4QkY+JyAtGdb5mLE2p8WqGUiepjRUz9vucq43UvsadgytN8BKg/o5Ffc8m/K7HQq1bjlm+48pvhixNJ3zX22WTzpETZ+hxm/T4On5zTUHu86MUrSv+wpcQsgD1zYDQYxxXA3gfgI9GlP1FAF8P4B8A+BiAXxGRLxo7AELIiUOtI4ScAoVoXbkXvqI4vLFOr9LmEKe3V87Rlv4+AuMd0KbahmDYHfSJWdy5iL0zZ530Xtcm5LBqzrSrzVzOb7vMmLuRBsDexD1GYIx5mzHm+wB8wldORB4F4H8E8G+NMf8UwGtwOFO/a9QASHb3bFWszVJZ23hyseXvELVuEQb9JpjBYRuD5kzOctqv7RycYTyLHu8xDPgeZ/kNXZDWMcaXEJKZpLt+14rIba3XNxtjbs48oCfi8N9oLaR3Vc9PztwPIeSkoNYRQk6BcrSu/Atfxb1NWi7I2hVatkgt5+li8PJFvmKM641eNihr2yPKqksTuULNA2Xjl0w6ilnKklte9tErnd9jjHmGtlNE7gLweMeuFxljbhkwMqDUhVWUj847Q2SmMawS+9yK1IRsS3552o7CLruVb/MUZ5/SpndJk1zjoNbNyqhzhHRZu14X9+3NyIDfsKNd30K0rvwLX0LIvNRTYvLwLAAXHNvv9lUSkQsAzgA8CODOalTXV7trwb0jzxAJIScJtY4QcgoUpHVlX/g63KtoZ9UZ5xp3ayXFNYt1DVYdc7AGatcyg2NZZ3Y2tpMfe4fNM5ZYR3cK57cZnqfNsRn5moZN9J1Bf0vGqAkOROQpOAjoddWmF4jI7caYdwJ4Ew6xHl9ljLlNRN4B4Dki8nIAzwOwB/DmLIM8AcboD7XrtPG6rhPWnQdqXbGs9juXga1pcsnOb4bZh/NQjtaVfeFLCFmGeRY6fyYOQljz0wDeC+CdjrLfA+D/APCTAD6Fw5Sa2ycfISGkbKh1hJBToBCtK/7CV49vy+D07iLLKVmSk8YV0WaDEts7SaxfrpjQDaPH0rZEInScot3kdseBcaS6yTH9x5B3SozezSEW5BZl3wsBvLD1+hMAnjP5oJYiSWOm6W+Wukug2I45Y329jubWLPOh7kwOVycQ6ws4jvWYw0utWyclOoM52JiU9CjZ+R3KXI5xQVpX/IUvIWQB5rkzSAghy0KtI4ScAoVoXdEXvu61auNcWW+c7ginVyU2+/TMjO1/6fHXDMnunBrrmyXLc2xmZs84Yss5285y99CkZP8jJ85aNGIobQcx9b2sN3Y1Dq+TehJQ68gGmENjtd8yU/Z1kpqzFOVoXdEXvoSQBTAoRiAJIUSFWkcIOQUK0jpe+BJC8lPIlBhCCPFCrSOEnAKFaN3pXPhOMMVZ78u9OWUa3KDENKlJrch8KEscxU6PTpnynDqt2zlVc6y+FSKQp060dpSkMdp0/4i1ddSlw5T9+hg8B7SUUytBa1a9rBG1bj3wo+gypS6H2p5j6jOnPB/JnaTU2UcZB/p0LnwJITNhZsn+Rwghy0KtI4ScAuVoXfkXvhM6vb06Q5zeJZcDKsmlqVGc1XC91t/2x5ozyVXs+FLcWaXOoIReOZZoMYDJtNA5SWfSZYzmYO5xTrgcxCwO5Zy/RbbisHjGmdU9ptatg5zfx7V/t0NMrZ9D259SO7aiSz5y/j80xf9pBWld+Re+hJD5OS9DIAkhxAu1jhByChSidQVf+ErXVVPdWGWHJ57X6w53ynl2pi5fpG1X4npLJIsbuVKyurMZnd9BmHLS3hOLHHkKts6UAafFHrSEw+ZaXm2tUOvIWlgynndIW1M6v1O1f8oUpHUFX/gSQhajkCQIhBDihVpHCDkFCtG68i9853B6V3qTfox5UKrxMMY1Hhrr6+wvNctzhrjcYNtK+0MwhdwZ3BI5z9nSz38g4j2G4qRyOr8xBzyym1VmPs7EFId8bFvUugUp+LsezVacXl/bjPudhsyxvqVoXfkXvoSQmTHF3BkkhBAdah0h5BQoR+vKvfAVOO9yzOH06nG6+m2XWWN7c9z9WTIb9dRMkBFPd1sHOr9AeHyDsk5Hth3q9/x8RAMkK2txBEqVjPaJlGoflmqtA/GOy5azvVLryFKsRddz9rdFDTgVCtI6z+XePIjIc0XkQyKyFxEjIte29r2m2tZ+3LjgcAkhAQwAszdRj1ODekdIOVDrdKh1hJRDSVq3Bsf3agDvA3AVgC9Syjy/9fedUw+IEDICY4BC1nubAOodIaVArfNBrSOkFArSusUvfI0xbwPwNhG5Fbo4vh3Ag8aYwT576hRn75JFc0xxHkHJs+fWQGqSq7lITYwVNeV5IFu467cEc+kdqUg5J7WySW14Mty59segnUqxpxhPxUmh1rmZVOtO+ZCXNMVZ659TnvOS6bdpKVq3+FTnSD4H4H4R+XURuVorJCI3ichtInLbxYv3zTg8QkgHs497EBdBvWtr3fnnqXWELAa1bgxJWre/j1pHyGIUonViZsjSJSJ3AXi8Y9eLjDG3VGVuBfAsAI82xtxTbfsmAI8FcDeAvwfgeQBebYz5hxF9/jmA+wDcM/4djOZarGMcAMfiYi3jANY3locZYx6dUklEfruqG8M9xphvSB7Ziplb76h1KhxLn7WMA1jfWKh1iZy41gHr+Q6vZRwAx+JiLeMAqHWzTXV+FoALju13+yoZY95e/y0id+Igjl8a06Ex5tEicpsx5hnxw5yGtYwD4FjWPA5glWN5Ymq9NQveTMyqd9Q6NxzLescBrHIsT0ytR607Xa0D1vMdXss4AI5lzeMAqHXATBe+xpiPavtE5Ck4iOd11aYXiMjtxph3ishvAPgQgI8DeEG1//2TDpYQQkZAvSOEnALUOkLI1lg8uRWAZwJ4U+v1TwN4L4B3AvhDAC8E8DgAnwLwegA/N/P4CCEkF9Q7QsgpQK0jhKyOxS98qziQW5R9rwbw6hHN3zyibk7WMg6AY3GxlnEAHEvRTKh3a/ms1jIOgGNxsZZxABxL0ZyA1gHrGctaxgFwLC7WMg5gXWNZhFmSWxFCCCGEEEIIIUuxleWMCCGEEEIIIYSQQfDClxBCCCGEEEJI0RR34SsizxWRD4nIXkSMiFzb2veaalv7ceMC43i4iPyaiNwnIn8mIj8wxRiUcc12DDxjeKaIfFBEHhSRD4jIV8zZvzWWO61j8fsz9fuzIvLJqs93tLbPfmw8Y1nk2JA4qHVRY1tU76h11DoynrVoXcRYTva3HbWOWrcVFk9uNQFXA3gfgKsAfJFS5vmtv+9cYBw/AeDbAfwYgKcDeIOIfMAY856JxuJijmPQQ0SuAvA2APcDeBmAHwbwVhF5ijHmfK5xWLwPwC9Wf//ljP2+BcBL6xcLH5vOWFosdWxIGGpdPLPrHbWuA7WOjGEtWhcayxr0jlp3gFpHrXNjjCnyAeBWAAbAta1tr6m2XQ3gbMFx/BWAD1d/P7na/6szjWf2Y2D1/81V/6+sXv949fpvLfQ9uROHzJMPX6DvJ1bv/R1LHxt7LEsfGz6SPjtqnT6mxfSOWtfpm1rHR47PbhVa5xnLYnpHreuMh1rnGMvSx2Ytj+KmOkfyOQD3i8ivi8jVc3YsIo8C8EgAn6g23VU9P3nOcWC5Y/Ck6nnp99/mOwF8VkQ+JSIvXnAcPDYkN9S6A0scB57POjw2JDeLaR2wKr2j1h1Yy/nMY7MyNnnhKyJ3OWIZjIi8MFD1AwC+G8D/hMMi6t8K4BULjKPTTPWcbV2pwLiyHoMcw62el1pX6004HIPvAHARwC+JyJP8VWaDx+bEodaNHtua9I7nsw6PzYmzFq0bOZZOM9XzKf624/msw2OzMFuN8X0WgAuO7Xf7Khlj3l7/LSJ3AngegC+dcxzGmE+LyGcAXF9tenz1fMeIcUSPyxjzmfpFpmOQSv0+p3z/0RhjXlv/LSJfDuDlAL54ofHw2BAbat2IsS2sdzyfdXhsiM1atG7QWE78tx3PZx0em5WxyQtfY8xHtX0i8hQcxOG6atMLROR2Y8w7ReQ3AHwIwMcBvKDa//65xwHgzQC+X0R+FMCN1f5bho4jcVxZj8EA3gXgUwC+R0TuBfBiHGIObp1xDAAAEXkagJ+sxnQFDtM/7sfh+Ezd9zcCeGr18gYReQkOn8Psx8YzlkWODTlCrRs9tiX1jloHah2JYy1aN2YsON3fdtQ6UOs2w9JBxrkfAF6IwxSC9uPWat+PA/gTAA/gIA6vw0RJAALjeASAXwfweQCfBPCqGY/PbMfAM4avxeFEuwjg9wA8Y6HvynUA/jWAe6rP4jYAz5mp71sd348XLnFslLH80FLHho/oz41aFx7bonpHraPW8ZHlc1uF1kWM5WR/21HrqHVbeUh1gAghhBBCCCGEkCLZZHIrQgghhBBCCCEkFl74EkIIIYQQQggpGl74EkIIIYQQQggpGl74EkIIIYQQQggpGl74EkIIIYQQQggpGl74EkIIIYQQQggpGl74kskRkZ8Skd9qvX6DiLxbRC4sOS5CCMkJtY4QcipQ78gW4Tq+ZHJE5L8B8FEAzwbwNwF8H4CvNsZ8ZslxEUJITqh1hJBTgXpHtggvfMksiMhrAPxdAI/EQRj/a3VX8N8D+EoAf2GMeeyCQySEkNFQ6wghpwL1jmwNTnUmc/F7AJ4G4IeMMf+12mYA/BaA9y42KkIIyQu1jhByKlDvyKag40smR0SeBuB3APwbANcbY/62tf8WAN/Au4KEkC1DrSOEnArUO7JF6PiSSRGRxwP4VwD+VwDfC+BpIvLsJcdECCG5odYRQk4F6h3ZKrzwJZMhIo8A8K8B/FNjzNuNMZ8H8AYAr112ZIQQkg9qHSHkVKDekS3Dqc5kUUTkSwC8DsBXA/gaAB+vRJQQQoqBWkcIORWod2St8MKXLIqI2F/ArzPG3LrEWAghZCqodYSQU4F6R9YKL3wJIYQQQgghhBQNY3wJIYQQQgghhBQNL3wJIYQQQgghhBQNL3wJIYQQQgghhBQNL3wJIYQQQgghhBQNL3wJIYQQQgghhBQNL3wJIYQQQgghhBQNL3wJIYQQQgghhBQNL3wJIYQQQgghhBTN/w+1Dc9gJkc8YQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Compute displacements\n", - "disp = solution.displacement(coords)\n", - "\n", - "# Plot\n", - "disp_max = np.abs(disp.max())\n", - "fig, axes = plt.subplots(figsize=(16,4), ncols=3)\n", - "\n", - "for i in range(3):\n", - " im = axes[i].pcolormesh(xvals, yvals, disp[:,i].reshape(num_xy, num_xy), vmin=-disp_max, vmax=disp_max)\n", - " axes[i].set_title(f'$u_{{{i+1}}}$')\n", - " axes[i].set_xlabel(xlabel, fontsize='large')\n", - " axes[i].set_ylabel(ylabel, fontsize='large')\n", - " fig.colorbar(im, ax=axes[i])\n", - "\n", - "print('Coordinates and displacements in Angstroms')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Stress" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Stress components in GPa, coordinates in Angstroms\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Compute stress states\n", - "stress = uc.get_in_units(solution.stress(coords), 'GPa')\n", - "\n", - "# Plot\n", - "stress_max = np.abs(stress.max()) / 10\n", - "fig, axes = plt.subplots(figsize=(16,14), ncols=3, nrows=3)\n", - "\n", - "for i in range(3):\n", - " for j in range(3):\n", - " im = axes[i, j].pcolormesh(xvals, yvals, stress[:, i, j].reshape(num_xy, num_xy), vmin=-stress_max, vmax=stress_max)\n", - " axes[i, j].set_title(f'$\\sigma_{{{i+1}{j+1}}}$')\n", - " axes[i, j].set_xlabel(xlabel, fontsize='large')\n", - " axes[i, j].set_ylabel(ylabel, fontsize='large')\n", - " fig.colorbar(im, ax=axes[i, j])\n", - "\n", - "print('Stress components in GPa, coordinates in Angstroms')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. Dislocation initialization\n", - "\n", - "The Dislocation class is initialized by giving it parameters associated with the crystal information and the dislocation definition.\n", - "\n", - "Crystal parameters\n", - "\n", - "- __ucell__ (*atomman.System*) The unit cell to use as the seed for generating the dislocation monopole system.\n", - "- __C__ (*atomman.ElasticConstants*) The elastic constants associated with the bulk crystal structure for ucell.\n", - "\n", - "Dislocation parameters\n", - "\n", - "- __burgers__ (*array-like object*) The dislocation's Burgers vector given as a Miller or Miller-Bravais vector relative to ucell.\n", - "- __ξ_uvw__ (*array-like object*) The dislocation's line direction given as a Miller or Miller-Bravais vector relative to ucell.\n", - "- __slip_hkl__ (*array-like object*) The dislocation's slip plane given as a Miller or Miller-Bravais plane relative to ucell.\n", - "- __m__ (*array-like object, optional*) The m unit vector for the dislocation solution. m, n, and ξ (dislocation line) should be right-hand orthogonal. Default value is \\[0,1,0\\] (y-axis).\n", - "- __n__ (*array-like object, optional*) The n unit vector for the dislocation solution. m, n, and ξ (dislocation line) should be right-hand orthogonal. Default value is \\[0,0,1\\] (z-axis). n is normal to the dislocation slip plane.\n", - "- __tol__ (*float*) A cutoff tolerance used with obtaining the dislocation solution. Only needs to be changed if there are issues with obtaining a solution.\n", - "\n", - "Shift parameters\n", - "\n", - "- __shift__ (*float, optional*) A rigid body shift to apply to the rotated cell prior to inserting the dislocation. Should be selected such that the ideal slip plane does not correspond to any atomic planes. Is taken as absolute if shiftscale is False, or relative to the rotated cell's box vectors if shiftscale is True. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.\n", - "- __shiftindex__ (*float, optional*) The index of the identified optimum shifts based on the rotated cell to use. Different values allow for the selection of different atomic planes neighboring the slip plane. Note that shiftindex values only apply shifts normal to the slip plane; best shifts for non-planar dislocations (like bcc screw) may also need a shift in the slip plane. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.\n", - "- __shiftscale__ (*bool, optional*) If False (default), a given shift value will be taken as absolute Cartesian. If True, a given shift will be taken relative to the rotated cell's box vectors." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.1. Define the Dislocation\n", - "\n", - "This is similar to what is done in Section #3 with the main differences being that the full unit cell is created rather than the box, and m and n are left as their default values. The default m=$[0,1,0]$ and n=$[0,0,1]$ values are left alone as this is the optimal choice for LAMMPS calculations and allows for the construction of any perfect straight dislocation type for any crystal structure." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Specify materials properties, namely the unit cell and the elastic constants." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "avect = [ 4.050, 0.000, 0.000]\n", - "bvect = [ 0.000, 4.050, 0.000]\n", - "cvect = [ 0.000, 0.000, 4.050]\n", - "origin = [ 0.000, 0.000, 0.000]\n", - "natoms = 4\n", - "natypes = 1\n", - "symbols = ('Al',)\n", - "pbc = [ True True True]\n", - "per-atom properties = ['atype', 'pos']\n", - " id | atype | pos[0] | pos[1] | pos[2]\n", - " 0 | 1 | 0.000 | 0.000 | 0.000\n", - " 1 | 1 | 0.000 | 2.025 | 2.025\n", - " 2 | 1 | 2.025 | 0.000 | 2.025\n", - " 3 | 1 | 2.025 | 2.025 | 0.000\n", - "\n", - "Cij (GPa) =\n", - "[[105. 70. 70. 0. 0. 0.]\n", - " [ 70. 105. 70. 0. 0. 0.]\n", - " [ 70. 70. 105. 0. 0. 0.]\n", - " [ 0. 0. 0. 45. 0. 0.]\n", - " [ 0. 0. 0. 0. 45. 0.]\n", - " [ 0. 0. 0. 0. 0. 45.]]\n" - ] - } - ], - "source": [ - "# Rough values for fcc Al\n", - "\n", - "ucell = am.load('prototype', 'A1--Cu--fcc', a=4.05, symbols='Al')\n", - "print(ucell)\n", - "print()\n", - "\n", - "C = am.ElasticConstants(C11 = uc.set_in_units(105, 'GPa'),\n", - " C12 = uc.set_in_units(70, 'GPa'), \n", - " C44 = uc.set_in_units(45, 'GPa'))\n", - "print('Cij (GPa) =')\n", - "print(uc.get_in_units(C.Cij, 'GPa'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define the dislocation " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "# FCC a/2<101>{111} dislocation\n", - "burgers = np.array([0.5, 0.0, -0.5])\n", - "slip_hkl = np.array([1,1,1])\n", - "\n", - "# Line direction determines dislocation character\n", - "#ξ_uvw = [ 1,-2, 1] # 90 degree edge\n", - "#ξ_uvw = [1, -1, 0] # 60 degree mixed\n", - "ξ_uvw = [1, 1, -2] # 30 degree mixed\n", - "#ξ_uvw = [1, 0, -1] # 0 degree screw, i.e. parallel to burgers" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Initialize the Dislocation object using the above parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "disl = am.defect.Dislocation(ucell, C, burgers, ξ_uvw, slip_hkl)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.2. Check the solution" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Dislocation object has a number of attributes that describe the basic setup.\n", - "\n", - "- __transform__ is the Cartesian transformation matrix associated with rotating from the unit cell orientation to the rotated cell orientation. This can be used to transform any other vectors between the two orientations.\n", - "- __uvws__ are the Miller vectors relative to the unit cell that are used for the rotated cell's box vectors.\n", - "- __ucell__ is the unit cell.\n", - "- __rcell__ is the cell obtained after rotating ucell.\n", - "- __dislsol__ is the VolterraDislocation solution that will be used to displace the atoms\n", - "- __shifts__ provides a list of all \"ideal\" delta shift values that will position the slip plane halfway between two atomic planes. There is no guarantee that the planes are symmetrically unique and no shifting in the plane is accounted for either. \n", - "- __shift__ is the shift value currently set. The default value is the first value in shifts. " - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Transformation matrix =\n", - "[[ 0.40824829 0.40824829 -0.81649658]\n", - " [-0.70710678 0.70710678 0. ]\n", - " [ 0.57735027 0.57735027 0.57735027]]\n", - "\n", - "Rotation uvws =\n", - "[[ 1. 1. -2.]\n", - " [-1. 1. 0.]\n", - " [ 1. 1. 1.]]\n", - "\n", - "Unit cell =\n", - "avect = [ 4.050, 0.000, 0.000]\n", - "bvect = [ 0.000, 4.050, 0.000]\n", - "cvect = [ 0.000, 0.000, 4.050]\n", - "origin = [ 0.000, 0.000, 0.000]\n", - "natoms = 4\n", - "natypes = 1\n", - "symbols = ('Al',)\n", - "pbc = [ True True True]\n", - "per-atom properties = ['atype', 'pos']\n", - " id | atype | pos[0] | pos[1] | pos[2]\n", - " 0 | 1 | 0.000 | 0.000 | 0.000\n", - " 1 | 1 | 0.000 | 2.025 | 2.025\n", - " 2 | 1 | 2.025 | 0.000 | 2.025\n", - " 3 | 1 | 2.025 | 2.025 | 0.000\n", - "\n", - "Rotated cell =\n", - "avect = [ 9.920, 0.000, 0.000]\n", - "bvect = [ 0.000, 5.728, 0.000]\n", - "cvect = [ 0.000, 0.000, 7.015]\n", - "origin = [ 0.000, 0.000, 0.000]\n", - "natoms = 24\n", - "natypes = 1\n", - "symbols = ('Al',)\n", - "pbc = [ True True True]\n", - "per-atom properties = ['atype', 'pos']\n", - " id | atype | pos[0] | pos[1] | pos[2]\n", - " 0 | 1 | 7.440 | 4.296 | 0.000\n", - " 1 | 1 | 7.440 | 1.432 | 0.000\n", - " 2 | 1 | 9.094 | 1.432 | 2.338\n", - " 3 | 1 | 9.094 | 4.296 | 2.338\n", - " 4 | 1 | 2.480 | 1.432 | 0.000\n", - " 5 | 1 | 4.960 | 0.000 | 0.000\n", - " 6 | 1 | 2.480 | 4.296 | 0.000\n", - " 7 | 1 | 4.960 | 2.864 | 0.000\n", - " 8 | 1 | 4.134 | 4.296 | 2.338\n", - " 9 | 1 | 4.134 | 1.432 | 2.338\n", - " 10 | 1 | 6.614 | 2.864 | 2.338\n", - " 11 | 1 | 6.614 | 5.728 | 2.338\n", - " 12 | 1 | 5.787 | 1.432 | 4.677\n", - " 13 | 1 | 8.267 | 5.728 | 4.677\n", - " 14 | 1 | 5.787 | 4.296 | 4.677\n", - " 15 | 1 | 8.267 | 2.864 | 4.677\n", - " 16 | 1 | 9.920 | 2.864 | 0.000\n", - " 17 | 1 | 9.920 | 0.000 | 0.000\n", - " 18 | 1 | 1.653 | 0.000 | 2.338\n", - " 19 | 1 | 1.653 | 2.864 | 2.338\n", - " 20 | 1 | 0.827 | 4.296 | 4.677\n", - " 21 | 1 | 0.827 | 1.432 | 4.677\n", - " 22 | 1 | 3.307 | 2.864 | 4.677\n", - " 23 | 1 | 3.307 | 5.728 | 4.677\n", - "\n" - ] - } - ], - "source": [ - "print('Transformation matrix =')\n", - "print(disl.transform)\n", - "print()\n", - "\n", - "print('Rotation uvws =')\n", - "print(disl.uvws)\n", - "print()\n", - "\n", - "print('Unit cell =')\n", - "print(disl.ucell)\n", - "print()\n", - "\n", - "print('Rotated cell =')\n", - "print(disl.rcell)\n", - "print()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A Volterra dislocation solution is also obtained, which is accessible as the dislsol attribute" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "character angle = 30.000000000000004 degrees\n", - "K_coeff = 33.399 GPa\n", - "burgers = [ 2.48010836 -1.43189123 0. ] angstrom\n" - ] - } - ], - "source": [ - "print(f'character angle = {disl.dislsol.characterangle()} degrees')\n", - "print(f'K_coeff = {uc.get_in_units(disl.dislsol.K_coeff, \"GPa\"):.3f} GPa')\n", - "print('burgers =', uc.get_in_units(disl.dislsol.burgers, \"angstrom\"), 'angstrom')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The shift values should be selected such that the dislocation falls between atomic positions. For planar dislocations, the slip plane should be placed roughly halfway between atomic planes. The class automatically identifies all such shifts relative to rcell and stores them as the attribute shifts.\n", - "\n", - "The initialization parameters allow for shifts to be defined in one of three ways:\n", - "\n", - "1. Giving shiftindex indicates which of the identified shifts relative to rcell to use. If neither shift or shiftindex is specified, then shiftindex=0 is used.\n", - "2. Giving shift with shiftscale=False allows for an absolute Cartesian shift to be specified.\n", - "3. Giving shift with shiftscale=True allows for a shift relative to rcell's box vectors to be specified.\n", - "\n", - "For non-planar screw dislocations, the dislocation core should be placed in the proper location where the involved slip planes intercept. This can be handled by specifying shifts using options 2 or 3.\n", - "\n", - "Note that the shift can be changed when calling the monopole and periodicarray methods." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Identified shifts =\n", - "[[0. 0. 1.1691343 ]\n", - " [0. 0. 3.50740289]\n", - " [0. 0. 5.84567148]]\n", - "\n", - "The shift currently set to be used = [0. 0. 1.1691343]\n" - ] - } - ], - "source": [ - "print('Identified shifts =')\n", - "print(disl.shifts)\n", - "print()\n", - "\n", - "print('The shift currently set to be used =', disl.shift)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 5. Dislocation Monopole Configuration\n", - "\n", - "\n", - "System size parameters\n", - "\n", - "- __sizemults__ (*tuple, optional*) The size multipliers to use when generating the system. Values are limited to being positive integers. The multipliers for the two non-periodic directions must be even. If not given, the default multipliers will be 2 for the non-periodic directions and 1 for the periodic direction.\n", - "- __amin__ (*float, optional*) A minimum thickness to use for the a box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both amin and sizemults is given, then the larger multiplier for the two will be used.\n", - "- __bmin__ (*float, optional*) A minimum thickness to use for the b box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both bmin and sizemults is given, then the larger multiplier for the two will be used.\n", - "- __cmin__ (*float, optional*) A minimum thickness to use for the c box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both cmin and sizemults is given, then the larger multiplier for the two will be used.\n", - "\n", - "Shift parameters\n", - "\n", - "- __shift__ (*float, optional*) A rigid body shift to apply to the rotated cell prior to inserting the dislocation. Should be selected such that the ideal slip plane does not correspond to any atomic planes. Is taken as absolute if shiftscale is False, or relative to the rotated cell's box vectors if shiftscale is True. Cannot be given with shiftindex. If neither shift nor shiftindex is given will use the shift set during class initialization.\n", - "- __shiftindex__ (*float, optional*) The index of the identified optimum shifts based on the rotated cell to use. Different values allow for the selection of different atomic planes neighboring the slip plane. Note that shiftindex values only apply shifts normal to the slip plane; best shifts for non-planar dislocations (like bcc screw) may also need a shift in the slip plane. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used then will use the shift set during class initialization.\n", - "- __shiftscale__ (*bool, optional*) If False (default), a given shift value will be taken as absolute Cartesian. If True, a given shift will be taken relative to the rotated cell's box vectors.\n", - "\n", - "Boundary parameters\n", - "\n", - "- __boundaryshape__ (*str, optional*) Indicates the shape of the boundary region to use. Options are 'cylinder' (default) and 'box'. For 'cylinder', the non-boundary region is defined by a cylinder with axis along the dislocation line and a radius that ensures the boundary is at least boundarywidth thick. For 'box', the boundary region will be exactly boundarywidth thick all around. \n", - "- __boundarywidth__ (*float, optional*) The width of the boundary region to apply. Default value is 0.0, i.e. no boundary region. All atoms in the boundary region will have their atype values changed.\n", - "- __boundaryscale__ (*bool, optional*) If False (Default), the boundarywidth will be taken as absolute. If True, the boundarywidth will be taken relative to the magnitude of the unit cell's a box vector.\n", - "\n", - "Return options\n", - "\n", - "- __return_base_system__ (*bool, optional*) If True then the dislocation-free base system corresponding to the dislocation system will also be returned. The base system is used as a reference state for most of the dislocation analysis tools." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 5.1. Small atomic system example, easy to see atomic positions" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "base_system, disl_system = disl.monopole(bmin=30, cmin=30,\n", - " boundarywidth=1, boundaryscale=True,\n", - " return_base_system=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig = plt.figure(figsize=(6,6))\n", - "for atype in disl_system.atypes:\n", - " plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],\n", - " disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')\n", - "plt.xlim(-20, 20)\n", - "plt.ylim(-20, 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 5.2. Large atomic system example, more useful for simulations" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "base_system, disl_system = disl.monopole(bmin=300, cmin=300,\n", - " boundarywidth=1, boundaryscale=True,\n", - " return_base_system=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAFlCAYAAAANjFSwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAf6UlEQVR4nO3dbYwd1X3H8d/fd3myRFaysGgCpraVRGoUCIF9gQRqECBVNERJX0AeAMexUyJaJRIkKWmTYozygIREBFGpYoRrQUhIA6qUmkaVbEQIUkBauxE05EWIvTFLHryRm+UxNt49fXFn2Lvre+/M3DsP55z5fqTV9d6Z3XvG157/nfn/5ow55wQAaKdVTQ8AANAcigAAtBhFAABajCIAAC1GEQCAFqMIAECLTTQ9gKLOOOMMt379+qaHAQDB2Ldv3x+cc2v7LQuuCKxfv17T09NNDwMAgmFmvx60jNNBANBiwR0JnGD3zdK+XZJbaHokAOABk6a2SFfdlWvtsIvA7pul6fubHgUAeMQt7RdzFIKwTwft29X0CADATzn3j6UUATO7x8x+b2bOzHb3PD+TPJd+/axn2cVm9qyZHTWz/WZ2QeEX5hQQAPSXc/9Y5pHAwwOef1LSx5OvWyTJzE6V9Kik0yXdJOlMSY+YWSf3qz377+OMFQDiZvl276X0BJxznzOz9ZI+12fxQUmPOede6XnuSnV3/P/gnLvXzP5M0j9LulTS3lwvuvf2cYYMAHGbOC3XanX0BDZJetnMDpvZ1uS5DcnjS8njbPK4MfdvnX+xnNEBQIzefD3XalUXgfskXSPpeknHJH3bzDb0Wc+Sx753uDGzG8xs2sym5+bmqhkpAMRk8uxcq1UaEXXOfS39s5m9X9LNkt6t7ikiSUpHeVbyeFB9OOd2SNohSVNTU9wKDQCyXH5rrtVKKQJm9kFJ702+XWdmn5b0jKSvS/pR8jqbJL0h6TlJRyQdlnSjmb0iaaukGUlP5H/RDukgjCSkO6qaZa8D9HXoaem8azJXK+tI4IuSPpD8+Tx1TwP9k6SOpNslrZb0vKQvO+d+I0lmdrWkf5F0t6SfS/pb5wrs1S/czIViKMw56YGFK7Tt+Jamh5Jp+8RObersoRBgNPt25bpYrKx00KUDFn1jyM88KenckV/0nIsoApCU/5O9k/RgIAVA0lvjvLbzuDpaLPSzFA7kPVMS7rQRRESRWNAqvfPod5oeRiW2Hd9SuGi9cMp1mihYNNBe4U4bQUQU6h4FPLRwWdPD8MpDC5cF1fdAs8I9EkArDNuZhXZ6py7p38f1nT0adlaIU0aRm1yXazWKALwVUhPXN1mnkWg6t0DOiGi4p4MKTDMEvzl34tciBaBS245v0QMLV2ixz989p5IicejpXKuZC+wdn5qactPT09xLIBJ82vcPRwmRsI607Uj3j2b7nHNT/VYL90jgnIuaHgEKWvlp87hbRQHwUHqUcNyt4gghZERE4ZuYo5yx6ddTIHoap3CPBIiIBoUoZ/iInsYp3CMBeGvljmJBq/TQwmWc9gncsCuY6R94iIgomkCjN279ThPRSPYUEVFUjUYvJBrJ3iIiiirxiR9ZXjjlOk0YjeTGEBFFmfjEj6JoJDeMiCjKRLwTRQ1qJNM78Eu4RwLzs9nroBTEOzGqbce36J1Hv6MNR7+rDUe/qwcWruDowDPhFoGTVzc9gqgxhw+q0G/OIlQk+ojosdebHkG0aPqiSr0xU+KlFYo+Iio+QpSNpi/qtjJeihLljIiGWwS4TqB0afOXAoA6pX2DhYB3R17atyvXauH+ra+/pOkRRIXmL5pGpLRk0UdEjxxoegRB6/3Pxtw+8AGR0maEWwSIiI6Mxi98tXJuIhrH1Qv3dBAR0cKIfCI0KyOlKCBnRDTcIkBEtJD00//Go9+lACAo245v0UYuNCuOiCi44Asx4aigoOhnEd2+Jnf3u62OO+b7QZyYoTSH6GcRJSI6FJFPxIw4aQ5ERNvJOSKfiF/6b/v6zh6lwSESRCtYvs/44R4JcKP5E6TNX676RRukDWNmJx1g4rR8q1U8jGrsvrnpEXiFT/9ou5UXmnFUIOnNfAnKMBvDHzpAU7gHDWBgCU3jxOQ66ab/lRRjY5gC8BYawMByNI0TazbmWi3M00HWaX0h4BQQ0B+nhhIzT+VaLcwjgQs3Nz2CRtEABoZLp6dudcM45wflMIvAORcp1KGPg5u+AMWkVxm3shDkjIiGeTpo7+2S2tX4YeZPYDTp/5nWzUYadUS0ZdcIUACA8ay8uKwVxSBnRLR951QCtKBVFABgTOnFZa25jeXk2blWa8nfRriIgALlak2ElIho2JzrTpb9IKeBgFK15tQQEdFwcQMYoFqtuFFNnRFRM7vHzH5vZs7Mdvc8f7GZPWtmR81sv5ldkGdZpkgjotwABqjXtuNb4r09VQOziD687PXNTpX0qKTTJd0k6UxJj5hZZ9iyXK8UYUSUT/9AMx6M9WggZ0S0lCLgnPucpG+uePpKdXfu9zrn7pV0v6QNki7NWJYt0ogoO3+gfukFZcfdqriKgQcR0Q3J40vJ42zyuDFjWSu1JrYGeCidZiKq/4ceRkTTHny/WjtsmczsBjObNrPpubm5SgbXJGKggB+iio9efmuu1aosAgeTx7QcndXz/LBlJ3DO7XDOTTnnptauXduNiEaAuYAAv0Q119Chp3OtVsp1Amb2QUnvTb5dZ2aflvSMpMOSbjSzVyRtlTQj6QlJJw1Zlu3CzdL0/WUMvTFMBQH4KZq5hvbtkq66K3O1so4EvijpjuTP50m6T9KFkq6W9Kqku9Xd6V/tnFtwzv1p0LJcrxZ4RJQCAPgtPSJYdAr3qCDn7jTM20te+6egE0LcDhIIR9C3q7xtXlKMt5cMuADQBAbCElWzuI8wi0DAnLgeAAhJsFcVT67LtRpFoEbOda9OBBCWIK8q9iAiWp3AIqJEQYGwBRkdzRkRDbMIBDSLKDeFB+IQXCHYtyvXamEWgUAiokRBgbgEFR2tcyrp2gUyiyi3hQTiE9ttKsPcigAiokRBgbjFEh0NswgEgCgoEDfvo6NERJtDFBRoB6+jo0REm0EzGGgPrxNDRETrRwEA2mfb8S1+NomJiDaDAgC0j5dNYiKi9fPy0wCAynnfJB4izL3W/Gz2OjUjEgq0m9dN4iHCLAInr256BMvQCwDgXZM46ojosdebHsFbKAAAUl4Vgqgjop6dfaMAAEh5sz+IOiLq0XUCNIMBrOTFfiHqiOj6S5oegSSawQD68yIyGnVE9MiBpkdALwDAQF71BjKEWQQajohSAABkCaUQhFkEGo6IMkMogDwavYiMiGg1mCEUQBGNXURGRLSCV+U0EICCGjstRES0fNwuEsAoGplpNOqIaANTSRMHBTCO2mOjUUdEG5hKmmYwgHHU3iS2fPvIMItAzVNJ0wwGUIZam8QTp+VaLcwiMP9ibS9FMxhAWWptEr+ZL0UZZhGoEc1gAGWqrUk8eXau1SgCQ9AMBlCFWprEazbmWi3MIlBTRJRmMIAq1LJfmXkq12phFoEaIqI0gwEEjYjo6GgGA6ha5X0BIqKj4zQQgKpV3hcgIjo6q/S3A0ANcVEioqPz4tZwAKJXaVyUiOhoiIUCqFNlp4WIiI6GfgCAOlW2vyEiWhyxUADRICJaDLFQAE2ppC/gS0TUzGbMzPV8/Sx5/mIze9bMjprZfjO7IPcvrSAiymkgAE2ppC+QMyI6UfLLDvKkpH9N/vx/ZnaqpEclvSHpJklflvSImb3LuRzHMBVERImFAmhK+gF0U2ePrKydkWcR0YOSHnPOPeyc+29JV0o6U9K9zrl7Jd0vaYOkS2sazwmIhQJoUulxUc8iopskvWxmh81sq7o7fEl6KXmcTR7zZZpKRiwUgA9KPS3kUUT0PknXSLpe0jFJ39aJZ1/S7/tuvpndYGbTZjY9NzdXekSUfgAAH5R6C8qDP5Z235y5WuVFwDn3NefcI86570j6vqSOlj75p8crZyWPBwf8jh3OuSnn3NTatWsbudE8ANSh1FtQ7tuVuUqlRcDMzjWz/zSzvzOzz6l7WugNST+RdFjSjWZ2o6StkmYkPZHrF5ccEaUpDMAXpZ6VyJGzqfpI4A/qfvK/XdIdkn4t6W+cc7+RdLWkVyXdrW5BuDpXMkgqPSJKUxiAT+rcJ1UaEXXO/VbSXw9Y9qSkc0f6xSVGRGkKA/DNQwuXlRsXHaLVH4G5ShiAj0rbJ02uy1yl1UVAIhUEIFKrOtLlt2avVsNQyldSRJReAABfjb1/WlyQDj2duVqYe8ESIqL0AgD4rJQLx5qOiFampIgop4IA+KqU2096EBGtRsU3mgcAH9TxQTXMIlDxjeYBoC3CLAIloCkMIARjtQWIiPZHUxhA9IiI9scFYgBCMvJFw0REB6MAAAjFWKeuiYgCQNjGul6AiOiJaAgDCEnVZy7C3CPOz2av0wcNYQBYLswicPLqkX6M20gCCNHIZzCijYgee73pEQBAbUbqC0QdER3x8gluIwkgRCPNIxR1RLSkqaQBIBQjncqONiK6/pKmRwAA/os2InrkQNMjAIAohFkERoyIAgCWC7MIjBgR5UIxACErHIkhIrqEC8UAtAoR0Z61mTkUQAQKxdyJiC5HAQAQusKntKONiI45lTQAhKjwlcPRRkQLTiU91u3ZAMAT245vKbY/s+z9ZJhFYIyppAGgNSZOy1wlzCIw/2Kh1ZkzCEAsCu3P3sxOUoZZBAAA2SbPzlyFIgAAsVqzMXOVMItAwYgoVwoDaKWZpzJXCXPvWCAiypXCAFqLiCi3lAQQFyKiEhFRAMiDiCjxUABxISIKAMiHiCgAtBgRUQBoMSKiANBiRESZQRRAXIiISkREASAP3yOiZnaxmT1rZkfNbL+ZXZDrB4mIAmipaCKiZnaqpEclnS7pJklnSnrEjK4vAAxSaC40zyOiV6q747/XOXevpPslbZB0aYNjAgCv5b7F5KqOdPmt2auNP6SRbUgeX0oeZ5PH7GBrgYMFGsMAYrLt+BY9sHBFdiFYXJAOPZ35+3xqDKenuk7YNDO7wcymzWx6bm6OiCgA5LFvV+YqTRaBg8ljetLqrBXPv8U5t8M5N+Wcm1q7dq101V3S1NZc8ScawwBisn1ipzZ19sjy7Nw8v07gR5IOS7rRzG6UtFXSjKQncv30VXdJbzsrez0AiMi1ncfzFYCcGisCzrk/Sbpa0quS7la3IFztXI7SlSp4w3kACF2n5GukJkr9bQU5556UdG6TYwCAaE2uy1zFp8YwAKAsAUREx5cjKkpEFEBMcu/TAoyIFkdUFAAG8zwiOr5zLspchYgogJgU2qd5HhEd397bmx4BAAQt7CIwP5u9DgBgoLCLwMmrc622fWJnxQMBgHoUCrtEHxE9lj1Xtln3CjsAaJVWRERz1sSyr7ADgKbkbgy3IiLK/WcAYLDoI6LrL2l6BADgr+gjokcOND0CAAha2EWAiCgAjCXsIpAzIsr8QQBiQUS0V46IKAC0EhHRJcwfBCAG2yd2EhFdpkBElKuGAYSu8K0liYh2mUmbOnsoBACCVvjCVyKiS5g+AgBOFHYRKBgRZfoIAFgu7CKQMyKaIioKIGSF92FERAGgpYiInoioKICQFdqHEREFgJaLPiJ64eamRwAAtRgp4h59RPSciwqtTmMYQIi2T+zUps6eYheKSZJl7+LDLgJ7by+0Oj0BACEqfKVwauK0zFXCLgLzLxb+Ea4aBhCaka9xejM7QRl2ESiIq4YBtMrk2ZmrtKoISFw1DCAsY529WLMxc5WwiwARUQCRG7kfIEkzT2WuEnYRGDEiSl8AQCjGOntBRPRETCsNICRjRduJiPZHgxhAKxARHYwGMYAQjHV9ExFRAGgxIqIAEK6xepetmEp6zIgozWEAvhp5vqBUK6aSHmMWUZrDAHw21vUBqeinkh4hItqL5jAAX5Wyf4r+OoERI6K9OCUEoM3CLgJjREQlLhwD4Kc690mVFQEzu83M3Iqv85Nlp5vZ98zsNTP7nZl9oapxZI+T3gAAv5TSD5CkyXWZq0yU8DJZPt7z55nk8auSPiZpu6T3SbrTzPY75xrZG9MbAOCL7RM7y9kneRQR/aGkHzjnHnbO/TF57pOSnnfO3Sbp88lznyr8m0uaRZTbTgLwwdix0F4eRURflfSGmX3fzFab2RpJk5JeSpbPJo/ZE1+vxI3mAUSktNNAqaojomY22+e8vzOzzZL2S/qMpA9LekzSNVr61L/s1ySPAz+Qm9kNZjZtZtNzc3NLC8aMiPYOgOYwgKaVfmo6R0R03J7ABySd1Of53zrn5tNvzGxG0kckvcc5d8TM5iWlk1qclTweHPQizrkdknZI0tTU1FKxKCEi2h1ftwJvO76llN8HAKEYqwg45341aJmZ/UDSc5IOSbouefqZ5PEBSZ81s22Szk+e21V4AGNGRHvRHAbQpKbORlSZDvqFpM2S3iHpsKQ7JH0rWfYVSWdKukXSK5K+5JzbW+FYAMBrpfcDpGYjos65WyX1zSc5516W9NGqXntU2yd2ckoIQCNKPxvhUUS0OiXeaJ6rhwE0qfSoukcR0eqUHBE1k67v7Cn1dwJAlu0TO8e7g9ggzCJaHHFRAHUq9QKxlZhFtDjmEgJQp0oawgWEXQTmZ7PXGUFHixwNAKhF0/H0sIvAyasr+bU0iQHUofJ9TI6IaNhF4Njrlf1qTgsBqFKlvQCpJRHRiuf/bPowDUCcKi8AUksioiVeJwAAdamtGRx9RHT9JZW/BH0BAGWr7SxD9BHRIwcq/fX0BQDELuwiUFFEtBdxUQAxC7sIVBQR7UVcFECZat2XEBEtB3MKAShDLamgFBHRcjGnEIBx1FoAJCKipb8UTWIAY2hkjqDoI6IlTyWdhSYxgFE1cvFp9BHRCqaSHoYmMYBRNLbPsOxdfNhFoIKppLPQJAZQRO29gF4Tp2WuEnYRmH+xkZelSQwgj0YLgCS9mZ2gDLsINITTQgDyuL7JAiBJk2dnrkIRGBGFAMAwld03uIg1GzNXCbsINDyLKLFRAIM0fdtISdLMU5mrhF0Eao6I9sM9BwCstH1ipx/7BiKi9eCUEIBU483gXkREq0dkFECvxpvBvYiI1oPIKADJk2ZwLyKi9SApBMCr00ApIqL1oRAA7eVlAZCIiNaNyCjQTl7EQfshIlo/L2JhAGrl7f97IqLN4JQQ0B5e/38nIlo/egNAe3jbC0gREW0GhQCIn/cFQCIi2iSaxEDcvG0G9yIi2ixvm0UARrZ9YqdeOOU6//9/r+pIl9+avVoNQ6mOZxHRfjglBMQjPQU0YYv+HwUsLkiHns5cLewi4GFEtFfaGzhwyicoBkAEvJoXKI99uzJXCbsIeBoR7WUmraJRDATPu3mB8oj+OgEPI6KDkBgCwhVEEmhEYRcBTyOig1AIgPDEXACk0ItAgIiOAmEJIgo6yOS6zFXGKgJmdqWZPWdmi2bmzOyMnmWnm9n3zOw1M/udmX0hz7I28D5aBiCcKOggNUVEV0t6UtKv+iz7qqSPSbpT0k8l3Wlml+VYll8AEdFBOCUE+CuoKOggdUREnXOPOuf+XtJLfRZ/UtLzzrnbJH0+ee5TOZbl53lEdBCio4DfgouCDtJURNTM1kia1FJxmE0eNw5bVviFAoiIDkJ0FPBTkFHQQcqIiJrZbHK+f+XX5gJDSf9OXcFl6RhuMLNpM5uem5tbWhBQRHQQGsWAX4JuBI8gz5HAByT9RZ+v/xj0A865I5LmJaWzF52VPB4ctmzI79vhnJtyzk2tXbt2acH87KAfCUpHixwNAA3bPrFTB075RLiN4BFNZK3gnOvX9JUkmdm71C0Sb0+eus7Mfumce0zSA5I+a2bbJJ2fLN+VPA5blt/Jq6VjrxX+Md+kPQJJ2nZ8S8OjAdon2msBckREM4tAhosl3dfz/Tcl/VjSY5K+IulMSbdIekXSl5xze5P1hi3L71j2XNmhSAvBtZ3H9dDCZRQDoCbRFoCcEdGxioBzbpcGfIJ3zr0s6aNFlxUcwfi/wiNm0oQWOSoAahJtAZCWIqLnXTN0tbCvGA74OoFh0qOCF065jl4BUIH0QrBoC0Aq+llE11/S9AgqYyZN2CIRUqBkUVwIllf0s4geOdD0CCpHhBQoV9sioFnCLgKBzSI6qrZF1oAqBD8XUEXCLQK7b256BLXilBAwuladAupV9SyijcrR8IgFcw0Bo2lNA7if6G80n6PhERPmGgKKae2n/1T0N5qPNB6ahUYxkE80M4GOI+qIaMTx0CwdLXJqCBgiqplAx5HjjMm400Y0pwXx0EHMulOvcmUx0B8x0PzCPRKIZAbRcdAwBpZr60yg4wi3CJy8uukReIGGMdCVNoJXmTgKSNUwi2hzIppBtAzpUcH1nT16cOEKThEhetsndurazuPLPvWz8+8RfUQ0shlEy8BRAdpiZfzT+PR/IiKi7UWMFLGj8ZtT1BHRCzc3PQKvdbSog6d8QgdP+QRTUiMazP9TUNSziJ5zkUIeftV6D5GZkhoxaP0VwKOw7H1kuHvRvbdLfBrIjRvVIFStnv9nXBOnZa9SwzCq0ZJppMvE7SsRmqhv/1iHN7NTlOEWAYwsPSrY1NkjJxEphVe2T+zszvuTfE8BGMPk2ZmrUARaKv2PxfQT8Amf/Eu2ZmPmKuH2BIiIloZIKXxB9LNkM09lrhJuESAiWipmJkWTmPOnIkREkRdXG6MpzPlToRwR0XB7AkREK9HbNJakBa3SQwuX0S9AaZjzp0ZERDGK3v+QREpRJhq/NcsREeV8CjLROEZZaPzWjIgoypLORcR1BSiq3+kf1CRHRDTcImCdXJ1vlIPrCjAKTv80LEdENNwicOFmafr+pkfRSiubx5I4QsDAT/wUgAYREUVVemcpJV6KQTd5oQA0jIgo6kS8tB34xB8QIqKoG/HSuHGOPzBERNE04qVxIeIZGCKi8EEaL+1FI9l/RDsDt6ojXX5r9mo1DKUazCIajJWNQhrJ/qPRG4HFBenQ05mrmXOuhtGUZ2pqyk1PT0u7byYiGoFB//xoKtdj5Q1cerHDj4B1pG1HZGb7nHNT/VYJ90iAiGgU+h0lmEkTtsiRQsVWzt7JJ/4IRX2dABHR6NFUrkY6dz8pH0ghN4aJiLZCv6ZyilNGw3GqB3mEWwTQCsN2VlyHMBh5fkiSJtdlrkIRQND6zWM0SOhHDsM+2fdDAWi5OiKiZnalmT1nZotm5szsjJ5ltyXP9X6dnyw73cy+Z2avmdnvzOwLxV+ciCi6BjWXY2o2ZzVxaeziBDkjouMeCayW9KSkUyW9c8A6H+/580zy+FVJH5O0XdL7JN1pZvudc/m7gMwiihEUOXLwDTt2FLZvl3TVXUNXGasIOOcelfSomT2hwUXgh5KOOrcsq/RJSc87524zs42SPiLpU5LyF4FzLpKm/00khFAUO1O0hicR0VclvWFm3zez1Wa2RtKkpJeS5bPJY/YtcHoREQWAsWUWATOb7XNu35nZ5owf3S/pM5I+LOkxSddI+ny/l0geB166bGY3mNm0mU3Pzc11n5yfHbQ6ACCnPKeDPiDppD7P/3bYDznnfpj+2cxm1D3l8x7n3BEzm5eUTm93VvJ4cMjv2iFph9SdNkKSdPJq6dhrOYYPAC1VRkTUOferQcvM7F3qFom3J09dZ2a/dM49ZmY/kPScpEOSrkuWP5M8PiDps2a2TdL5yXO7Mkfb61j2PNkA0FonnZYrIjpuOuhiSff1fP9NST9W9/TPLyRtlvQOSYcl3SHpW8l6X5F0pqRbJL0i6UvOub3FXjqsie8AoFYfukc675rM1cZNB+3SgE/wzrlbJfUtQ865lyV9dJzXlnVydb4BoHWsk6sASCFPIHfh5qZHAAB+KrB/DHfaiPQCiH27OCIAgNTU1swLxHqFWwSk7oYW2FgAwHLhng4CAIyNIgAALRbcPYbNbE7Sr3OseoakP1Q8nDrFtj1SfNvE9vgvtm3Kuz1/7pxb229BcEUgLzObHnRj5RDFtj1SfNvE9vgvtm0qY3s4HQQALUYRAIAWi7kI7Gh6ACWLbXuk+LaJ7fFfbNs09vZE2xMAAGSL+UgAAJAh6CLQ6I3uK5KxTQPH7fM29Qr1fRnGzC42s2fN7KiZ7TezC5oeU1FmNrPiPflZ8nwQ22Zm95jZ75Ox7+55fuD4fd+2IdvU971KlhXepqCLgJZudD/wngfq3ug+/ZpJnktvdH+npJ+qe6P7y6obZiHDtmnYuH3epn5Ce1/6MrNTJT0q6XRJN6k7RfojZtZpdGCjeVJL78ktAW7bw73fDBt/QNv28IDnl71X0hj/Fp1zwX9JekLdGwyc0fPcbclzqyV1Vqz/R0k/T/68MVnvwaa3I8c2DRx3CNsUw/vSZ3v+JhnnF5Pvb0++v7zpsRXcjhl1p4U/PdRtk7Q+Gd/urPGHsm0rt2nQezXO+xX6kUAe1dzovmbDxh3oNkXxvkjakDyGNu5+Nkl62cwOm9lWhb9tw8Yf+ratfK+kEbfJ+yJgHtzovmxjbNOyX5M89ht37du07MWHb5+370tJQh33feq+F9dLOibp21rallSo25by9v9MQSe8V2a2oc96ubYphKmkG7/RfQUKb9OwcXuyTb0Gbp9zbj79xsP3ZRTp+EIb9zLOua+lfzaz90u6WUufJEPdtmHvzduGLPPagPfq3Rrx36L3RcD5eqP7MYy6TRo+7ka3qVfG9nn7vozoR+reQ/tGM3tF0lZ1z9k+0eCYCjGzcyV9Xd1tmVD3VMMbkn6iQLbNzD4o6b3Jt+vM7NPq/rsaNP6ThizzwpBt6vdePSfpiEbZpqYbH2M2TTare6jT+/VET1PkgKQ/qbvD+YaSRqS6nwK+L+l1Sb+XdEvT25JzmwaO2+dtWrF9Qb4vGdv0l8l/wmOS/kfSVNNjKjj+t0v6L3Vno3xd0rSkvwpp27QUpOj92jxs/L5v24Bt+sdB79Wo28QVwwDQYt43hgEA1aEIAECLUQQAoMUoAgDQYhQBAGgxigAAtBhFAABajCIAAC32/9hndn7djjYBAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig = plt.figure(figsize=(6,6))\n", - "for atype in disl_system.atypes:\n", - " plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],\n", - " disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')\n", - "plt.xlim(-160, 160)\n", - "plt.ylim(-160, 160)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 5.3. Dislocation property evaluations\n", - "\n", - "The dislocation characterization methods all compare defect configurations to a defect-free base system. The monopole method automatically returns a compatible base system that can be used for the characterization methods.\n", - "\n", - "See the [4.6. Dislocation analysis tools Notebook](4.6._Dislocation_analysis_tools.html) for more dislocation property evaluations.\n", - "\n", - "__NOTE__: The characterizations shown here are simply for demonstration purposes. For real problems, the returned dislocation system should be atomically relaxed prior to characterizing it." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot disregistry\n", - "xi, disreg = am.defect.disregistry(base_system, disl_system, m=[0,1,0], n=[0,0,1])\n", - "\n", - "fig = plt.figure(figsize=(8,6))\n", - "\n", - "plt.plot(xi, disreg[:, 0], label='x-disregistry', linewidth=3)\n", - "plt.plot(xi, disreg[:, 1], label='y-disregistry', linewidth=3)\n", - "plt.plot(xi, disreg[:, 2], label='z-disregistry', linewidth=3)\n", - "\n", - "plt.xlabel('$\\\\xi$-coordinate ($\\AA$)', size='x-large')\n", - "plt.ylabel('disregistry ($\\AA$)', size='x-large')\n", - "plt.legend(fontsize='xx-large')\n", - "\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 6. Periodic Array of Dislocations Configuration\n", - "\n", - "System size parameters\n", - "\n", - "- __sizemults__ (*tuple, optional*) The size multipliers to use when generating the system. Values are limited to being positive integers. The multipliers for the two non-periodic directions must be even. If not given, the default multipliers will be 2 for the non-periodic directions and 1 for the periodic direction.\n", - "- __amin__ (*float, optional*) A minimum thickness to use for the a box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both amin and sizemults is given, then the larger multiplier for the two will be used.\n", - "- __bmin__ (*float, optional*) A minimum thickness to use for the b box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both bmin and sizemults is given, then the larger multiplier for the two will be used.\n", - "- __cmin__ (*float, optional*) A minimum thickness to use for the c box vector direction of the final system. Default value is 0.0. For the non-periodic directions, the resulting vector multiplier will be even. If both cmin and sizemults is given, then the larger multiplier for the two will be used.\n", - "\n", - "Shift parameters\n", - "\n", - "- __shift__ (*float, optional*) A rigid body shift to apply to the rotated cell prior to inserting the dislocation. Should be selected such that the ideal slip plane does not correspond to any atomic planes. Is taken as absolute if shiftscale is False, or relative to the rotated cell's box vectors if shiftscale is True. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.\n", - "- __shiftindex__ (*float, optional*) The index of the identified optimum shifts based on the rotated cell to use. Different values allow for the selection of different atomic planes neighboring the slip plane. Note that shiftindex values only apply shifts normal to the slip plane; best shifts for non-planar dislocations (like bcc screw) may also need a shift in the slip plane. Cannot be given with shiftindex. If neither shift nor shiftindex is given then shiftindex = 0 is used.\n", - "- __shiftscale__ (*bool, optional*) If False (default), a given shift value will be taken as absolute Cartesian. If True, a given shift will be taken relative to the rotated cell's box vectors.\n", - "\n", - "Boundary parameters\n", - "\n", - "- __boundarywidth__ (*float, optional*) The width of the boundary region to apply. Default value is 0.0, i.e. no boundary region. All atoms in the boundary region will have their atype values changed and will be displaced by linear displacements.\n", - "- __boundaryscale__ (*bool, optional*) If False (Default), the boundarywidth will be taken as absolute. If True, the boundarywidth will be taken relative to the magnitude of the unit cell's a box vector.\n", - "\n", - "Method options\n", - "\n", - "- __linear__ (*bool, optional*) If True, then only linear displacements will be used and not the dislocation solution. Using only linear displacements is useful for screw dislocations and dislocations with large stacking fault distances. If False (default) then the dislocation solution will be used for the middle displacements and linear displacements only in the boundary region.\n", - "- __cutoff__ (*float, optional*) Cutoff distance to use for identifying duplicate atoms to remove. For dislocations with an edge component, applying the displacements creates an extra half-plane of atoms that will have (nearly) identical positions with other atoms after altering the boundary conditions. Default value is 0.5 Angstrom.\n", - "\n", - "Return options\n", - "\n", - "- __return_base_system__ (*bool, optional*) If True then the dislocation-free base system corresponding to the dislocation system will also be returned. The base system is used as a reference state for most of the dislocation analysis tools." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 6.1. Small atomic system example, easy to see atomic positions" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "base_system, disl_system = disl.periodicarray(bmin=30, cmin=30,\n", - " boundarywidth=3, boundaryscale=True,\n", - " return_base_system=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig = plt.figure(figsize=(6,6))\n", - "for atype in disl_system.atypes:\n", - " plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],\n", - " disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')\n", - "plt.xlim(-20, 20)\n", - "plt.ylim(-20, 20)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 6.2. Large atomic system example, more useful for simulations" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "base_system, disl_system = disl.periodicarray(bmin=300, cmin=300,\n", - " boundarywidth=3, boundaryscale=True,\n", - " return_base_system=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig = plt.figure(figsize=(6,6))\n", - "for atype in disl_system.atypes:\n", - " plt.plot(disl_system.atoms.pos[disl_system.atoms.atype==atype, 1],\n", - " disl_system.atoms.pos[disl_system.atoms.atype==atype, 2], 'o')\n", - "plt.xlim(-160, 160)\n", - "plt.ylim(-160, 160)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 6.3. Dislocation property evaluations\n", - "\n", - "The dislocation characterization methods all compare defect configurations to a defect-free base system. The periodicarray method automatically returns a compatible base system that can be used for the characterization methods. This is especially important for PAD systems of dislocations with edge components as the deleted atoms are appropriately handled.\n", - "\n", - "See the [4.6. Dislocation analysis tools Notebook](4.6._Dislocation_analysis_tools.html) for more dislocation property evaluations.\n", - "\n", - "__NOTE__: The characterizations shown here are simply for demonstration purposes. For real problems, the returned dislocation system should be atomically relaxed prior to characterizing it." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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BgYOHMi+++7Lb37zG+bPn0/nzp1ZsGABEydOJBRKz3d9JQYiklElneMTA9UYSMsNHjyYwYMHc+6557J27VoefPBBpk+fzv333w/A9ddfHxuM6IorruC8887jq6++Sjr+wdChQ3nmmWd44YUXOPDAA7nkkkvqbL/66qv52c9+BsBpp51GdXU1U6dOjW2PDp08f/58DjvsMH75y1+yePFinn766YTvN2TIEEKhEO+++y6dOnXiyCOPZP/9948NC927d+/YOBDRxODcc89lwoQJAJSWlnLTTTcxffp0+vXrByQfLyIVSgxEJKN6dy6KzetWgqTLjTfeyPTp05kyZQqnn346I0eO5IwzzgC8D976H8oN9ZR4yy23cMQRRzBnzhzuvfdebr75ZsrKymLb44c7BujTp0+dHg4LCwtjx2/KeCD7778/H374Ic8++yyvvvoqt956K/fccw8nnXRS0n3iY+jfvz8//OEPefjhhxk4cCAHHnggI0aMaPR9m0qJgYhkVLfifPLDRlWNY8uOanZU1VCUH851WJImyar7M+npp5+OVe3vueeePPLIIxx88MF1hl2OHwK5pqaG6dOnJz1esiGQEzn++OOZMWMGTz31FPvvvz/z5s0jFApx+OGHM3LkSN58802mTp3K66+/nvT9Xn/9dZ588kmGDx/OyJEjee6551i5ciVdunQhFArx+eef89BDD/Gd73wn6TEuuuginnjiCdatW8dtt93W8AVrJjU+FJGMCoWMXnENEFdvVq2BtMy8efNwzvH5558zduxYxo4dy6uvvlqnzP7778/UqVP55ptvuPPOOznqqKOSHi/ZEMiJ3HbbbZx//vn87W9/4+c//zlvvfUWhx12GOA1itxnn32YNm1a7Bt8oiGXi4uL+fe//82ll17K7bffzg9+8AMuvPBC8vPzmThxIhs3buSMM85oMLk46qij2GOPPcjLy4s1lkyXwA+7bGZDgbuB/YAC4C3gQufcFwnKnghMA/r75c5xzi1p6Pgadlkk835053/4oGwTALMuOpRRcWMoSOsThGGXg2j27NmsWrWKnj17MmPGDB566CHuuOMOLr300rS+z6ZNm3jjjTcYN24chx9+OLNmzWqwfHOHXW4NNQb98OK8HpgOfB/4S/1CZtYHeATYDEwERgH3Zy9MEUmmTgNE1RhIG7Vu3TquuOIKjjvuOObM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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Plot disregistry\n", - "xi, disreg = am.defect.disregistry(base_system, disl_system, m=[0,1,0], n=[0,0,1])\n", - "\n", - "fig = plt.figure(figsize=(8,6))\n", - "\n", - "plt.plot(xi, disreg[:, 0], label='x-disregistry', linewidth=3)\n", - "plt.plot(xi, disreg[:, 1], label='y-disregistry', linewidth=3)\n", - "plt.plot(xi, disreg[:, 2], label='z-disregistry', linewidth=3)\n", - "\n", - "plt.xlabel('$\\\\xi$-coordinate ($\\AA$)', size='x-large')\n", - "plt.ylabel('disregistry ($\\AA$)', size='x-large')\n", - "plt.legend(fontsize='xx-large')\n", - "\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " " - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -}