From 198014a17f0391f6ed8c0835c7ad447df21250de Mon Sep 17 00:00:00 2001 From: Andrew Salij <43274224+andrewsalij@users.noreply.github.com> Date: Mon, 12 Feb 2024 13:35:54 -0600 Subject: [PATCH 01/15] Create initial subfolder for rewote Creation of new branch (andrewsalij) and subfolder (andrewsalij) for rewote incorporating k-point convergence --- andrewsalij/Convergence-Tracker.md | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 andrewsalij/Convergence-Tracker.md diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md new file mode 100644 index 00000000..cbd01009 --- /dev/null +++ b/andrewsalij/Convergence-Tracker.md @@ -0,0 +1,37 @@ +# K-point convergence tracker (Materials) + +> Ideal candidate: scientists skilled in Density Functional Theory and proficient in python. + +# Overview + +The aim of this task is to create a python package that implements automatic convergence tracking mechanism for a materials simulations engine. The convergence is tracked with respect to the k-point sampling inside a reciprocal cell of a crystalline compound. + +# Requirements + +1. automatically find the dimensions of a k-point mesh that satisfy a certain criteria for total energy (eg. total energy is converged within dE = 0.01meV) +1. the code shall be written in a way that can facilitate easy addition of convergence wrt other characteristics extracted from simulations (forces, pressures, phonon frequencies etc) +1. the code shall support VASP or Quantum ESPRESSO + +# Expectations + +- correctly find k-point mesh that satisfies total energy convergence parameters for a set of 10 materials, starting from Si2, as simplest, to a 10-20-atom supercell of your choice +- modular and object-oriented implementation +- commit early and often - at least once per 24 hours + +# Timeline + +We leave exact timing to the candidate. Must fit Within 5 days total. + +# User story + +As a user of this software I can start it passing: + +- path to input data (eg. pw.in / POSCAR, INCAR, KPOINTS) and +- kinetic energy cutoff + +as parameters and get the k-point dimensions (eg. 5 5 5). + +# Notes + +- create an account at exabyte.io and use it for the calculation purposes +- suggested modeling engine: Quantum ESPRESSO From 8a6e03052b383097bb2f9a95d0552b829fc3039c Mon Sep 17 00:00:00 2001 From: Andrew Salij <43274224+andrewsalij@users.noreply.github.com> Date: Mon, 12 Feb 2024 13:56:28 -0600 Subject: [PATCH 02/15] docs: initial dependencies added Dependencies added to documentation, both in README and their licenses have been reproduced in the folder andrewsalij/Licenses --- andrewsalij/Convergence-Tracker.md | 9 +++ andrewsalij/Licenses/ase_LICENSE.txt | 12 +++ andrewsalij/Licenses/matplotlib_LICENSE | 99 +++++++++++++++++++++++++ andrewsalij/Licenses/numpy_LICENSE.txt | 30 ++++++++ andrewsalij/Licenses/pymatgen_LICENSE | 20 +++++ andrewsalij/Licenses/scipy_LICENSE.txt | 30 ++++++++ andrewsalij/convergence_tracker.py | 0 7 files changed, 200 insertions(+) create mode 100644 andrewsalij/Licenses/ase_LICENSE.txt create mode 100644 andrewsalij/Licenses/matplotlib_LICENSE create mode 100644 andrewsalij/Licenses/numpy_LICENSE.txt create mode 100644 andrewsalij/Licenses/pymatgen_LICENSE create mode 100644 andrewsalij/Licenses/scipy_LICENSE.txt create mode 100644 andrewsalij/convergence_tracker.py diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md index cbd01009..29dfaa80 100644 --- a/andrewsalij/Convergence-Tracker.md +++ b/andrewsalij/Convergence-Tracker.md @@ -1,5 +1,14 @@ # K-point convergence tracker (Materials) +Dependencies for this project may be installed by running in the following install script. + +```bash +pip install numpy matplotlib scipy +pip install pymatgen +pip install ase +``` + + > Ideal candidate: scientists skilled in Density Functional Theory and proficient in python. # Overview diff --git a/andrewsalij/Licenses/ase_LICENSE.txt b/andrewsalij/Licenses/ase_LICENSE.txt new file mode 100644 index 00000000..d09fccda --- /dev/null +++ b/andrewsalij/Licenses/ase_LICENSE.txt @@ -0,0 +1,12 @@ +ASE is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 2.1 of the License, or +(at your option) any later version. + +ASE is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with ASE. If not, see . diff --git a/andrewsalij/Licenses/matplotlib_LICENSE b/andrewsalij/Licenses/matplotlib_LICENSE new file mode 100644 index 00000000..ec51537d --- /dev/null +++ b/andrewsalij/Licenses/matplotlib_LICENSE @@ -0,0 +1,99 @@ +License agreement for matplotlib versions 1.3.0 and later +========================================================= + +1. This LICENSE AGREEMENT is between the Matplotlib Development Team +("MDT"), and the Individual or Organization ("Licensee") accessing and +otherwise using matplotlib software in source or binary form and its +associated documentation. + +2. Subject to the terms and conditions of this License Agreement, MDT +hereby grants Licensee a nonexclusive, royalty-free, world-wide license +to reproduce, analyze, test, perform and/or display publicly, prepare +derivative works, distribute, and otherwise use matplotlib +alone or in any derivative version, provided, however, that MDT's +License Agreement and MDT's notice of copyright, i.e., "Copyright (c) +2012- Matplotlib Development Team; All Rights Reserved" are retained in +matplotlib alone or in any derivative version prepared by +Licensee. + +3. In the event Licensee prepares a derivative work that is based on or +incorporates matplotlib or any part thereof, and wants to +make the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to matplotlib . + +4. MDT is making matplotlib available to Licensee on an "AS +IS" basis. MDT MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, MDT MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB +WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. MDT SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR +LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING +MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF +THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between MDT and +Licensee. This License Agreement does not grant permission to use MDT +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using matplotlib , +Licensee agrees to be bound by the terms and conditions of this License +Agreement. + +License agreement for matplotlib versions prior to 1.3.0 +======================================================== + +1. This LICENSE AGREEMENT is between John D. Hunter ("JDH"), and the +Individual or Organization ("Licensee") accessing and otherwise using +matplotlib software in source or binary form and its associated +documentation. + +2. Subject to the terms and conditions of this License Agreement, JDH +hereby grants Licensee a nonexclusive, royalty-free, world-wide license +to reproduce, analyze, test, perform and/or display publicly, prepare +derivative works, distribute, and otherwise use matplotlib +alone or in any derivative version, provided, however, that JDH's +License Agreement and JDH's notice of copyright, i.e., "Copyright (c) +2002-2011 John D. Hunter; All Rights Reserved" are retained in +matplotlib alone or in any derivative version prepared by +Licensee. + +3. In the event Licensee prepares a derivative work that is based on or +incorporates matplotlib or any part thereof, and wants to +make the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to matplotlib. + +4. JDH is making matplotlib available to Licensee on an "AS +IS" basis. JDH MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, JDH MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB +WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. JDH SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR +LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING +MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF +THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between JDH and +Licensee. This License Agreement does not grant permission to use JDH +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using matplotlib, +Licensee agrees to be bound by the terms and conditions of this License +Agreement. \ No newline at end of file diff --git a/andrewsalij/Licenses/numpy_LICENSE.txt b/andrewsalij/Licenses/numpy_LICENSE.txt new file mode 100644 index 00000000..014d51c9 --- /dev/null +++ b/andrewsalij/Licenses/numpy_LICENSE.txt @@ -0,0 +1,30 @@ +Copyright (c) 2005-2023, NumPy Developers. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of the NumPy Developers nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/andrewsalij/Licenses/pymatgen_LICENSE b/andrewsalij/Licenses/pymatgen_LICENSE new file mode 100644 index 00000000..5533d21a --- /dev/null +++ b/andrewsalij/Licenses/pymatgen_LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) +Copyright (c) 2011-2012 MIT & The Regents of the University of California, +through Lawrence Berkeley National Laboratory + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/andrewsalij/Licenses/scipy_LICENSE.txt b/andrewsalij/Licenses/scipy_LICENSE.txt new file mode 100644 index 00000000..0da54cc8 --- /dev/null +++ b/andrewsalij/Licenses/scipy_LICENSE.txt @@ -0,0 +1,30 @@ +Copyright (c) 2001-2002 Enthought, Inc. 2003-2023, SciPy Developers. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py new file mode 100644 index 00000000..e69de29b From 0ce2b100df19808c5d0e962ee775222d1c765af3 Mon Sep 17 00:00:00 2001 From: Andrew Salij <43274224+andrewsalij@users.noreply.github.com> Date: Mon, 12 Feb 2024 14:21:36 -0600 Subject: [PATCH 03/15] feat: class construction Classes for convergence testing constructed--functionality to be added later --- .../createConvergenceTester.cpython-38.pyc | Bin 0 -> 1008 bytes andrewsalij/Tests/createConvergenceTester.py | 12 ++++++++ .../convergence_tracker.cpython-38.pyc | Bin 0 -> 1399 bytes andrewsalij/convergence_tracker.py | 26 ++++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 andrewsalij/Tests/__pycache__/createConvergenceTester.cpython-38.pyc create mode 100644 andrewsalij/Tests/createConvergenceTester.py create mode 100644 andrewsalij/__pycache__/convergence_tracker.cpython-38.pyc diff --git a/andrewsalij/Tests/__pycache__/createConvergenceTester.cpython-38.pyc b/andrewsalij/Tests/__pycache__/createConvergenceTester.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c70020c624da3baece6768acf5e348d258407b4e GIT binary patch literal 1008 zcmbtTL5tKd6i(81rj9cUj)w(V&}%)+MewkQD5I<(48ppXS_s)DYGyr^+>5(c zub%a|f5o4Wt0(`0C*Nxq>@W&~fxINm_rCYu_tK-$XuxoMKK*7g!Ps{?bVrDX2RQ9M z8qG9cvb0@!DN@1N0n71R$3TU6F5 zOvCRywAO$t>gq8-4TF(2Kby2x3EuoLM5ED|s6++%v$Q425wt$U%t+|TO%UThSU{VBY zC8mF^b;EI%L_U_XQl*j752P$>y}Nv-JIL-sV(Y|iQfVZK@3nc~ Qrys+T8ZjS=aX;q202r$au>b%7 literal 0 HcmV?d00001 diff --git a/andrewsalij/Tests/createConvergenceTester.py b/andrewsalij/Tests/createConvergenceTester.py new file mode 100644 index 00000000..f58235be --- /dev/null +++ b/andrewsalij/Tests/createConvergenceTester.py @@ -0,0 +1,12 @@ +import unittest +import andrewsalij.convergence_tracker as convergence_tracker + +class CreateConvergenceTester(unittest.TestCase): + def test_base_creation(self): + convergence_tester = convergence_tracker.ConvergenceTester(path="") + assert isinstance(convergence_tester,convergence_tracker.ConvergenceTester) + def test_k_pt_creation(self): + k_point_convergence_tester = convergence_tracker.KPointConvergenceTester(path="") + assert isinstance(k_point_convergence_tester,convergence_tracker.KPointConvergenceTester) +if __name__ == '__main__': + unittest.main() diff --git a/andrewsalij/__pycache__/convergence_tracker.cpython-38.pyc b/andrewsalij/__pycache__/convergence_tracker.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..156794969a223259c6a3dd188bbc1bf1d139ddfb GIT binary patch literal 1399 zcmZ`(PjAyO6t~kf?Z&!4LIT9e+KC?6gKh+}$E>sCmme@y!A2yp*2@LG9bFi-?=B=jT=Th-~%m%eP@kgzQS zINvGvhFN-{^qEQ{^+_44baC)T7{#JQ7{ex+W>Jk`79eqY#!NO<%v=F}8ezy~!!hdSqK9~tDrfeqc=K(Xe z-Z+94W-~U46QG}^R>Y~}>S*4V%F6Gk-zt6d8tyhS=1FX9xU*c5{6ZwTy7NlksAQrs z*E^!y@cI35I2fN8rOjBRQmgUXEXt=UwPt)6+jsftcq;4*Eyh}1W}st*x-^jam+{g+ zRDoM9qI0DWW>;mGbI8GRjsZ*nh6Di(Xz_Gd7o{rO!4kSw4+^JTJ@9rd)Gt}2VleEl;uFduxwKAuTC$D(WEa`V#T0FXk~Mq)(a!2R^QV|C)`^*>b5I` z375N*IF-Bs+lE!+E?rRUH|Q^P_#Zy%2dHBTnQ>ljaz4#up5S(WO4^Zn(9zmxv&2hJk6m#9K0L=W zS)AIngoKgU~y#aWQKRo>a%@!K;Q}z}SB9$b|C@$0v oLR`EajPU Date: Mon, 12 Feb 2024 22:46:25 -0600 Subject: [PATCH 04/15] feat: k point array construction Construction of k point arrays from scalar that may be iterated arbitrarily over some axis. Certain values may be forced (e.g., in 2D materials). Outline of input/output code, no real functionality there yet. --- .../create_k_points.cpython-38.pyc | Bin 0 -> 2311 bytes andrewsalij/Tests/create_k_points.py | 35 ++++++++++++++++ .../convergence_tracker.cpython-38.pyc | Bin 1399 -> 2731 bytes andrewsalij/convergence_tracker.py | 39 ++++++++++++++++++ andrewsalij/io.py | 24 +++++++++++ 5 files changed, 98 insertions(+) create mode 100644 andrewsalij/Tests/__pycache__/create_k_points.cpython-38.pyc create mode 100644 andrewsalij/Tests/create_k_points.py create mode 100644 andrewsalij/io.py diff --git a/andrewsalij/Tests/__pycache__/create_k_points.cpython-38.pyc b/andrewsalij/Tests/__pycache__/create_k_points.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30832e810ee546c45ec8bde34e05fdf1d28b37a0 GIT binary patch literal 2311 zcma);&u<$=6vtDPA%u6zh1uxS_8~((5{K zPqD+`h;bbIh}HcG`eDsFFRp$2-5|~M<{;Zv&{kQZ9;;j{NT|c?;owaJfB8BZ#X>F_ zhUU_F$wJo#4TbcikN2J|$pBklF3B>sCAlms*aotS!E4238}vRvyt@f1*6AQiIQl&~ zC>U~JoA}E=N26JXQ?LWR&$V;tj?s1mKEbo?YEQZc&XJSf(f$jZ7zPo|2|2_Smb+1k z3ySpsjyX*i;bg;N*<42I*(mN6o_+3Om!ft*&lS*& zzXBLQ-6=$_dRs-QYeye5cne+s{b=*c))VZRx8h8KYCRYvqrS>?-g=noZ$?jB{aD|H zxCLrwpw+b3P9FEtPK&l6Z_UpwUmNZgW$dY=r*WPpJ_gB27mQc<-pvI>*Umc6!F6#= zfIkCw11~f?M2tuL0sHX_!rO7BGvP%|nrb}&iW&Mb#93Pz{6Jd_OJqp?uuP_crtU%&n}VlMqh|!vniYCn zGYd1`(?sRuAg36N*YMoCeIbj}As6##pc~5rSL?RjBO^E@g4#wV{(*bO1gQy9I`u;F zt!r;8zNIG6&b+#74!7~@&p+r08WXclBTUyof-BgsxT?0cRHD;u744|B{nJ#4lXvjt zWEIV^Z|GS}#CQhXEHK{=Ur24)P_rF~?iASyU*UVJ7b3I$=XlZ5PWAIW-n_w!^hD)J z7=DgXlqbcQj~yf^_FbbYvK;y0n<>HODZ!u#muQ*S$Xq5vQ75FUV{t|f-o*z+Z7Y4Q z4qUQKBZz+A|49duNn{iAs1vOjNVt^LciC76<0?HWnut z?Vv;2mMI&7<;P()=Dgnf?7!H|`IrMWr>U>e`*}@Cfq6%j>ECp8l8GCqI>Jm`pd&*R z-X{(ppqWr~BN+IQuFjR4#TbT2`917?DiLuak^hf@d^GDzMG!?<+*eUll%uFWkfR=5 zSE7i%KK2ce9N{V%DhTiqnUBeQLgsAB=8DQBP(h}IF*6K!;06LuKM>{(1?|Ua7DY6H zQI=}j?a<3c{o$^y)vM;qWxq*l$=N@INJE@-71(cR@EFH!#`vkDfbc1rLXhW0lPZFB UyS{r=1ary_oEfh;mu>|7A2OyPZ~y=R literal 0 HcmV?d00001 diff --git a/andrewsalij/Tests/create_k_points.py b/andrewsalij/Tests/create_k_points.py new file mode 100644 index 00000000..5d4bf81c --- /dev/null +++ b/andrewsalij/Tests/create_k_points.py @@ -0,0 +1,35 @@ +import unittest +import numpy as np +from andrewsalij.convergence_tracker import KPointConvergenceTester + +class KPointArrayCreation(unittest.TestCase): + def test_basic(self): + k_array = KPointConvergenceTester.create_k_point_array(k_iterator=1) + assert np.array_equal(k_array,np.array([1,1,1],dtype=int)) + def test_k_indices(self): + for i in np.arange(3): + k_array = KPointConvergenceTester.create_k_point_array(k_iterator=2,k_index=i) + assert np.array_equal(k_array,np.array([2,2,2],dtype=int)) + def test_weight(self): + weight = np.array([1,2.4,3.1]) + k_array = KPointConvergenceTester.create_k_point_array(k_iterator=10,k_index = 0,effective_weight_array=weight) + assert np.array_equal(k_array,np.array([10,24,31])) + def test_k_force(self): + weight = np.array([3,2.4,2]) + k_force_array = np.array([None,None,1]) #for 2D (xy) materials + k_array = KPointConvergenceTester.create_k_point_array(k_iterator=5,k_index =1,effective_weight_array=weight, + fixed_k_points=k_force_array) + assert np.array_equal(k_array, np.array([6, 5, 1])) + def test_k_force_invalid_warn(self): + k_force= 1 #should warn--scalar does not work + self.assertWarns(Warning,KPointConvergenceTester.create_k_point_array,5, + k_index =1,effective_weight_array = np.array([3.6,3.1,6.3]),fixed_k_points = k_force) + def test_k_force_invalid_pass(self): + weight = np.array([3,2.4,2]) + k_force_array = 1 #should pass with warning + k_array = KPointConvergenceTester.create_k_point_array(k_iterator=5,k_index =1,effective_weight_array=weight, + fixed_k_points=k_force_array) + assert np.array_equal(k_array, np.array([6, 5, 4])) + +if __name__ == '__main__': + unittest.main() diff --git a/andrewsalij/__pycache__/convergence_tracker.cpython-38.pyc b/andrewsalij/__pycache__/convergence_tracker.cpython-38.pyc index 156794969a223259c6a3dd188bbc1bf1d139ddfb..e4ac631011aec7071378e564932258326ec9349c 100644 GIT binary patch literal 2731 zcmaJ@OK%%D5GMDfwQM=g14;8hx=k+?+6F{wWxWFUw3kYkVbF@L2$VXr;qFZ9$I?#fc6I9zbV$8b2$k9yi_H3>BK_dnv#HA4Qy z$zpS0@({ZE3J52hrX-~1*9xu2gj?J`BHW%@p$#*KyD)QwJ+(uJ(`$!HJ^BmI0kPRFHS) z`=_VtU@WT7MXICiIfoQ_B(wR#uJKmek}jwdo?kg?wky&Aj&iG;WSlLqorhIrlFl37 zT2R0C!!rAB+e1HQU>Rd&ld(b0M=6ds7<(~_(t4-C7|&zIB>GxH%~oMuQb*#&7zh&$ zpE}fEGixiAh{|JAKLJ^+#8;$CO*Q(VBV6tX@3_HT{Cf5Y}m^$ zCR1`u3wlB+Kond_ciUF!s?ku$%1fA0Z)my3n7Iy|hpv%mx?#8hgDO;X9Gs!;Y2r#u z)VD}>V-!4V7!MR{a`-h2G@#0qYCw}IwaA1{h_;UH!a8;|=nCsrL9fEzb#g){PT>^f z5`jIOxrNPXe@*^1z5{1mZk^Ca@p?z zX$%&GiIU$)X8lSE7yROkvw6N(@YH7s)KR2!InVsMSYRvT;^oS^=ypY{lYPMsMACb% z7Z_G*=q(0m{Phn}1__)V20383OgO?_KQQ42?2Z5k`F6lXHyWh|wgDXxPXKKLgJY`g zmp0@^>2}jR(xsIROE;1-IxM|N>BFIbU%-K$DE)&-BAlwy!4Vv6&TT9kwNd5eWh40-8XJ~ITPe3aIL%mBy6OS z)=4bdw#1iLUI9{G>`g3EHx&Z=kGsd}o2Gq}+w` zY6A#yeYyn>$8UV^EGK_RRE!ufYdFSke7x|2U7J_jvQO$4h8ioEjF7iL)&uA>So-`! z8qVA?a~w79Zf{8Zb0^o4pvkg@1aYd|P&$Gjz$^MZ=kqwo069KIf(n$a8Zl#$rZdzu z(22NP;pZldFolg%@uAtUEqe1}b6w(2+b!K}G#DOMcOavAhRo)I&8K)=`uD4c?*V$V Ke!YBW^V0wAJi4O* delta 440 zcmY*VOG*SW5KYp_m~N+AMHE37;zDfj2qNy>34^$4kT@jq1F;9v>Pl1?Vb+pU46eL} zc!EBKJ2x(@iocnHs^nE(B`@!J=_4zS@;oCDquW>e$)1X}tqnl?#1KOtA&0CqJx zv1FK3)bK-6ikI^TDjAT+#EbAwPpAkz_O>UWRWi?EsTTC0zOnwy*4ip#-BsV?@ptLK zuAM)Q@jMuQ zw;3Nn%9ysPQrh*KMyY>s9tkT!itYQd<5K`0z4EhIx>%6V=0Bs_I`=ys1 Date: Wed, 14 Feb 2024 20:53:48 -0600 Subject: [PATCH 05/15] feat: PWInput running PWInputs can run with QEJob driver. Tests kept outside repository to keep file sizes manageable and to avoid reproducing pseudopotentials --- .../__pycache__/test_pwscf_io.cpython-310.pyc | Bin 0 -> 1356 bytes .../__pycache__/test_pwscf_io.cpython-38.pyc | Bin 0 -> 1203 bytes andrewsalij/Tests/test_pwscf_io.py | 26 ++++++++++++++++++ andrewsalij/__pycache__/io.cpython-310.pyc | Bin 0 -> 1980 bytes andrewsalij/__pycache__/io.cpython-38.pyc | Bin 0 -> 1981 bytes andrewsalij/io.py | 19 ++++++++++++- 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 andrewsalij/Tests/__pycache__/test_pwscf_io.cpython-310.pyc create mode 100644 andrewsalij/Tests/__pycache__/test_pwscf_io.cpython-38.pyc create mode 100644 andrewsalij/Tests/test_pwscf_io.py create mode 100644 andrewsalij/__pycache__/io.cpython-310.pyc create mode 100644 andrewsalij/__pycache__/io.cpython-38.pyc diff --git a/andrewsalij/Tests/__pycache__/test_pwscf_io.cpython-310.pyc b/andrewsalij/Tests/__pycache__/test_pwscf_io.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d44864d4310aba5c92ec747666d93e958834e2ee GIT binary patch literal 1356 zcmZ`(OK%i85VqZqafX>>cnCsR5JG^|95NDTgm}#o&}vvRBO&@?HDd=nkM64t!4<2at{Q7gxHkika$Wxio6G`=A(AGnJRNyRCMMQVo?Y z?IO1N=BCa^xZ`MJFu4QWUIn2@N+n5|q>_CkfHsgJjDSbRFh;U5APIMCC4>~OM>?NZ zrO?HQ!rsG%0g;aT(CrNnF9Ga7^gS)flJ3!cO35BsvNG7CAHX&a$I-qg2tu=d5*%Q# z1B`M2Op_#b@zb7o{N$cntL8E*m6(Wmq2YY4lUb`wIjrVW)q7oKQx}z}yT~JRtx4@D zUK%YE=0dBcJB}aj|4hs(Wcaf68~PsVa;tjL1x|rQ`#-%lo9c1bbK3PZ%y;c*2T0hQ zzjJMGIgGyo!EFqJ(dI&te_si41xbDeH8+52!4C*;$Ox^^y)}vZKt}dP4HN3PdaL0&i^<{yn!0tNeChPw zj?}!=MSj_2+A0Yb&kF1KESo5)jdg)la~F=`E*u~B21D`S(Y8U<<|GIg?qquUnVJ?_ zkmy>h;abxleb?wxwP9}Ybuqd@|DZAL(8b2FOnLX;({vqTEE-s4_(*;^K9uy4t0d?r_URPkWDx7d0(>2;uH$@Wc>0<4v+ZR}Q?W`An$5*n3L z`v^Qha_qbC1bgL_SLlfuFD)r5j&|a)$KQPO&1^RsH3F;u?5F%;5%LS2#pQtW50K5M_>?4*n9SOnv*F#qBBa#5t&-KeMFDpZ0HQ#nJE{* zo!%V5=7=)4!L+^7+wAg<53ks2k%=&ue4l4&l;pZ>g<4CM_ls;Ky9Y%$D%~9SrE8e6 z`hFG2_f#a>R_SOt+GYOv`%|J;Aj8?_+S6bgfOHThLdoEDIw)cZ34-+~e_QMXahN|* zVW8wVh03d_u?|PkFzAC4Ixu=!Drg-Q{VAjbB6eF7$uyy z>!n{LQI2F-(@b17OPwe!tte$HhGrJ3FxJdXia0xD{+oC2yL_wvk-3}QjdaI!uJrqW ru@=JUVp??*OzB{j1yKw?(?$PzRn`lfDUI6sv`&E|bzms3w|x2=K%5=$ literal 0 HcmV?d00001 diff --git a/andrewsalij/Tests/test_pwscf_io.py b/andrewsalij/Tests/test_pwscf_io.py new file mode 100644 index 00000000..b5b23ca5 --- /dev/null +++ b/andrewsalij/Tests/test_pwscf_io.py @@ -0,0 +1,26 @@ +import unittest +import andrewsalij.io as io +import os +TEST_DIR = "/home/andrew/Documents/RewoteTests" +FILE_STR = "si2.in" +FILE_PATH = os.sep.join((TEST_DIR,FILE_STR)) +QE_JOB = io.QEJob(FILE_PATH) +class test_qcinput_io(unittest.TestCase): + def test_k_points(self): + k_points = [1,2,3] + QE_JOB.update_k_points(k_points) + self.assertTupleEqual(tuple(k_points),QE_JOB.input.kpoints_grid) + def test_write(self): + try: + os.makedirs(os.sep.join((TEST_DIR,"save")),exist_ok=True) + QE_JOB.save(os.sep.join((TEST_DIR,"save/si2.in"))) + except: + self.fail("Exception raised") + def test_run(self): + try: + QE_JOB.run() + except: + self.fail("Exception raised") + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/andrewsalij/__pycache__/io.cpython-310.pyc b/andrewsalij/__pycache__/io.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..026e5f4654c5c3cfe259f201b377f24f9c071738 GIT binary patch literal 1980 zcmZ`(PjB2r6rb_fyWY)avk7e@IDn}T-~+n{4oC=96(Mb?(2A-cB&*WM@pu!bUfZ1+ zlhoRr5~(L7K0^iA?!6HvMFG$$^ z3$&1s8m~H4$!wb7cD*s!Jch15fFUIj6$HMZ5fdG&oJOwjP?2HJ%ERW%egN&;SfxRd z$4UjWQU-A_%knhPWgzP!Na8%H^H^tPq3rD^34XF_xOSlLL09OC1zivh=w6U(I=!aG ztzvzA&5Wzkd?q_^!*q4Y^D-9KMBQpV|D$cW$Nmh=lH^%2YD>BXbCjO3Q^l38yVB?hlEO-)nc(I7*Dd(oo`MeZ$j_U#E zuj@EpO1hkjGT~efK#w(SZP>sw#M*n)j4%S117 zQ?I4?f<_(D75*iOx}qogF#BR8HpTFgM!mPhB~c$Z+cw_wePr#x^00S97|>K?#ZmCQ zjtgDSgMC%WRH^b7cjI9HOs9oV0jT&q{2waOa)hZqgh7)F@{R(b&Xq&Sg1mDU^a|-^ zNUy}Zp=&%Nw4Fs7+3(+Op`Y zDhJ?a+VoX@SjjShBsL6GhMkt{4bTMv&e2__4@o}D&bZRjxQ9@}4a2v?*C}7VMbRCv z$kb>y2Xx12dM*3#mBdmSI#c-&=M6c8Np9hQjLU5tFaym%K_F(yJk`gg zkeDv=BOFk<{l#o96F&i*tK_%ghYTc^H?9H s#W*W%63b6PAV0wY``@&+{t*@sTQ~;9r#^M)(7V_92Pu`Vi5#Qvzr!$(M1px5DXBCC})+(l9r^J ztl*pyU|%CS<`wz^z4Qrq?WwQOQ)ejKbyAc7DUw5z^Ue3o_-J#pPoVw&@{ja4kB~oc zvEE!*>_S&NFbE=OPG&Ts6z5LvM2`Kkh`lC)3HO=^_sWS}Sb3rYt4``(vB(q7Aql&G z!5t)|#;eX%G94$lTyG2(yU^9=Fr*}+g1`ebVxnU&r;#f>yvVR0%j4#GKY;dKtkNLK zW2J&=DT6qeW_cRuGLUrpeqc-oX!acY=`8Ij_;^( zt60CiW5!i!K9wCf5p{LR^D-89MD}3)_wL?{$&pH>n#6^W>E!z|sb^`S)#P=i59;H| zEY{CuJdx>nsnf-&a~0>==_D&h)qCS}o)wwqd=uS3e+X>`fN-=lj6?b=^zdL2&r;4! zpYvHM>Kx|-&fnE>zOZyT7iGe^+<K+uQsq4gN5TGuP79#|xZ<1ee;7s25v2MW22HNW4Fz7ETZfW4 zxpC(77FlM^z@W(~1#ieLg}Bh>*-!AS3V#0O2Yfgvk5AJ?2UA(jtfEnf zA(N<%sJl26_0Y^w@Dh@Doo?&kBiMTkz10+J`mKA2FR?NM8#Z(c17Tgm+|!TwR^D+kfCwtSd>x!TxL48)W8;kwAJH5E<#;_r%U?w&G%VN&pbR^uvapP=svPiM zXv0)m8TS;FVfv~*u4I`&8XE=|h8-J-XajBniE|8C)Q2>mW*1y(Y20I|<%YpE(ePc$ z7r#Z*gSg3O0RJh54Rub~BkGfF`q*iDtpe~dsF==JehKDqLt?&3EU$8i!xj#hzGk36 zidiyC_1jWNOc;rpl3(C}ub9n6>L+QQFVo)&@)JB_^9*%_S1P<5E9#Irw9kCkXA*5; wC)%jq!~eiZT8y&NCb2~KbWJf7w?09V{RUl{BC}^*h7PKeKwqM*si- literal 0 HcmV?d00001 diff --git a/andrewsalij/io.py b/andrewsalij/io.py index f94f41d3..4b7b68e6 100644 --- a/andrewsalij/io.py +++ b/andrewsalij/io.py @@ -1,5 +1,6 @@ from pymatgen.io import pwscf - +import subprocess +import os '''Input and output handling Formats supported: Quantum Espresso (PWscf input) ''' @@ -20,5 +21,21 @@ def __init__(self,path,to_load = False): self.input = self.load(path) #PWInput object @staticmethod def load(path): + '''Loads PWInput object from filepath''' return pwscf.PWInput.from_file(path) + def update_k_points(self,k_points): + '''Updates kpoints_grid for PWInput''' + k_points_tuple = tuple(k_points) #force type + self.input.__setattr__("kpoints_grid",k_points_tuple) + def save(self,path): + '''Saves a Quantum Espresso input file for self.input at path''' + self.input.write_file(path) + def run(self,output_path = None,prefix_str = ""): + #TODO: check in Linux bash + '''Saves and runs self.input''' + base, ext = os.path.splitext(self.path) + if (output_path is None):output_path = base+".out" + qe_process_str = prefix_str+" pw.x -i "+self.path+" > "+output_path + #TODO: add parallelism + subprocess.run(qe_process_str,shell=True) From 627cd64a3fb1a998ab2219dcf263fd85e43b0826 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Wed, 14 Feb 2024 22:06:46 -0600 Subject: [PATCH 06/15] feat: convergence test loading --- andrewsalij/Scripts/run_si2_sweep.py | 26 ++++++++++++++++++ .../createConvergenceTester.cpython-310.pyc | Bin 0 -> 1310 bytes .../__pycache__/test_params.cpython-310.pyc | Bin 0 -> 293 bytes .../__pycache__/test_pwscf_io.cpython-310.pyc | Bin 1356 -> 1891 bytes andrewsalij/Tests/createConvergenceTester.py | 6 ++++ andrewsalij/Tests/test_params.py | 4 +++ andrewsalij/Tests/test_pwscf_io.py | 24 ++++++++++------ .../convergence_tracker.cpython-310.pyc | Bin 0 -> 3514 bytes andrewsalij/__pycache__/io.cpython-310.pyc | Bin 1980 -> 2377 bytes andrewsalij/convergence_tracker.py | 22 +++++++++++---- andrewsalij/io.py | 22 ++++++++++++--- 11 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 andrewsalij/Scripts/run_si2_sweep.py create mode 100644 andrewsalij/Tests/__pycache__/createConvergenceTester.cpython-310.pyc create mode 100644 andrewsalij/Tests/__pycache__/test_params.cpython-310.pyc create mode 100644 andrewsalij/Tests/test_params.py create mode 100644 andrewsalij/__pycache__/convergence_tracker.cpython-310.pyc diff --git a/andrewsalij/Scripts/run_si2_sweep.py b/andrewsalij/Scripts/run_si2_sweep.py new file mode 100644 index 00000000..57e1458f --- /dev/null +++ b/andrewsalij/Scripts/run_si2_sweep.py @@ -0,0 +1,26 @@ +import andrewsalij.io +import os +import copy +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +si2_input = "si2.in" + +filepath = os.sep.join((INPUT_BASE_FOLDER,si2_input)) + +run_sub_dir = "Si2_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +os.makedirs(run_directory,exist_ok=True) + +job_init = andrewsalij.io.QEJob(filepath) +job = copy.deepcopy(job_init) +input = job.input + +control_dict= input.sections["control"] + +structure = input.structure + + +save_test_path = os.sep.join((run_directory,"si2_saved.in")) +job.save(save_test_path) diff --git a/andrewsalij/Tests/__pycache__/createConvergenceTester.cpython-310.pyc b/andrewsalij/Tests/__pycache__/createConvergenceTester.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3255663f7c87c32da9083293424910f8b476bc7d GIT binary patch literal 1310 zcmah}%}x|S5bo}o-JSgbVIf(AF?#Sa9GDj{2D2)NW|69kQaGRP|p~O?_WgPcb*wA~3}17kT6n@)bAL;lpMfM85_l zh@fK+%xJmxV&C1>vN|J_WR18%$p#Tjcqc@7l8l05FK)_~@DG?;mE^2_4t9d> zI0>ENg$1oSzpWX8{56+>yo=5ssma4coppznT(QL zDET3JQVge=%#DsVQnNYTi{P*@QeWQdWSov7M5m+S-$AcUKH4sL7`~Ti$(>bN+h~S2fGh!g^c9o?1iyVdkAQkc3IHw HQ2*yI$|qkp literal 0 HcmV?d00001 diff --git a/andrewsalij/Tests/__pycache__/test_params.cpython-310.pyc b/andrewsalij/Tests/__pycache__/test_params.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8702aa1d35e2b7cb58c94210835575f5c9962d5d GIT binary patch literal 293 zcmd1j<>g`kg4Eu#sZ~JwF^Gc|km=-cdv8FHvGib8B1gd24t5VX>$j?pHPs~dxN-fuS$xklLP0cGQ)(=W8&o4<0 zNi8lZu3{_BG}6n=(`38FlwW*{Bg8d0B;Lg{=oW{Yr;lrVa7fTC=Hk?XTP#`mnR&N3 z!GZyfAs#Ckia3CFfQesjIP7uHEb%B!(g#`&w5}NHj^f0e%q)Gd<@!L;lK6teqQu-{ gy@JYH95%W6DWy57c8oxyi$UgdFt9MPFp4k&0K(T%X8-^I literal 0 HcmV?d00001 diff --git a/andrewsalij/Tests/__pycache__/test_pwscf_io.cpython-310.pyc b/andrewsalij/Tests/__pycache__/test_pwscf_io.cpython-310.pyc index d44864d4310aba5c92ec747666d93e958834e2ee..7941d0125f1a5f1dcac0a3e2715fc835d00c3ca6 100644 GIT binary patch literal 1891 zcmZ`(OK%%D5GJ_~(|Xu$P^3l@r)mnc-5w;MD0(W2w22zWD3pf<1l47+7HOBV_F-~W z$AWvQbIql{KyttxrHl{bB3D^y>_%dY)MbBCjAi#|l8kLo;@k!M8vFb zN#7NyFwmQIwBqNTDH7^v)^^`g6z??tPY<;LyO}m zY`vl<(Mbvx{qAl*e*E;MUI8@v76|L_Cu;nT>LzONCMvOkdo|~LtW_x+ur^q8jNYU7 zX-GHd^v+T$o%zi?eg-k7z|)Lk$z0w84K`cW;4>Jgi&1|7%!$;VoeCdm5_=Z+VpO#pOvM zmxCMUiMRq6Sf+BzQ5l1u-h>!-^~a|_b>rvX_qT5bTy+QMcO=2{BXGRHeY?W_@lxDZ z9{+=njlh+{eVANcV99_6R}5#&G>tXeL+wd(O!_V*9~wlq#})9Kx%$yb)Wh+7`VS(3^)wzW7;b1@m?yb;IPpsF4H z0R+<+RwE$&DT>cgT)iDP!&1-)9*f3cA#g~7`#j`9BXB!-UYe*Zj-w6BCz&cSKf6|S zGuN%!D%UOW)gOYe_2MK=$^)698Xtz;TD0wBXRA6>QI&4sRMq_luIlvzjD|TuU4#9j o1llmBslPy-kNGTvV)?ffA>UztGnfu14a#YQ-g1L)HmLvae-Vz(>;M1& delta 652 zcmZ8e&x_MQ6rMLTNvAcAu0wIJSl>>-L)b`n}AS+PNb%{N~J8U zpjQtiR}bmYlYfE#fIsk_t0(^jFFF&Us2Scz-uK@7-j~dG`%BG^>-8E^&(_IT(IyLf z2S$r)ty4UpoD2*>#%5j-R2WBi2?Hi@UKLEe)eaD++<1eyA<+2DYcjAzotw|G+!ZLd zmk1CCuMDU1LoevfFT107BHUrbrI@*U@!@nLqBL>)Viu>u7fG7T%_Q8t5k`v-O}Mi7 z)TSPCSVrJ8*x5ID3f1g7KG^Rmx%qaA#-IY{B&8g*KaM$hivguZZmud+SC#$K zNzXB}mf7w$bnCW;i~kOl`u7Xtapyt&?2mb-@9Ew!5v8!aq+6-h{_8tdmI`)z d67%V?xC5#$(c%nQz}A7P(|{VBRfz@k*KcF+j!pmo diff --git a/andrewsalij/Tests/createConvergenceTester.py b/andrewsalij/Tests/createConvergenceTester.py index f58235be..5f7453c6 100644 --- a/andrewsalij/Tests/createConvergenceTester.py +++ b/andrewsalij/Tests/createConvergenceTester.py @@ -1,5 +1,7 @@ import unittest import andrewsalij.convergence_tracker as convergence_tracker +import andrewsalij.io +import andrewsalij.Tests.test_params as test_params class CreateConvergenceTester(unittest.TestCase): def test_base_creation(self): @@ -8,5 +10,9 @@ def test_base_creation(self): def test_k_pt_creation(self): k_point_convergence_tester = convergence_tracker.KPointConvergenceTester(path="") assert isinstance(k_point_convergence_tester,convergence_tracker.KPointConvergenceTester) + def test_convergence_loaded(self): + k_point_convergence_tester = convergence_tracker.KPointConvergenceTester(test_params.FILE_PATH) + assert isinstance(k_point_convergence_tester.base_job,andrewsalij.io.Job) + if __name__ == '__main__': unittest.main() diff --git a/andrewsalij/Tests/test_params.py b/andrewsalij/Tests/test_params.py new file mode 100644 index 00000000..2729dc8f --- /dev/null +++ b/andrewsalij/Tests/test_params.py @@ -0,0 +1,4 @@ +import os +TEST_DIR = "/home/andrew/Documents/RewoteTests" +FILE_STR = "si2.in" +FILE_PATH = os.sep.join((TEST_DIR,FILE_STR)) \ No newline at end of file diff --git a/andrewsalij/Tests/test_pwscf_io.py b/andrewsalij/Tests/test_pwscf_io.py index b5b23ca5..0b4b2acf 100644 --- a/andrewsalij/Tests/test_pwscf_io.py +++ b/andrewsalij/Tests/test_pwscf_io.py @@ -1,10 +1,9 @@ import unittest import andrewsalij.io as io import os -TEST_DIR = "/home/andrew/Documents/RewoteTests" -FILE_STR = "si2.in" -FILE_PATH = os.sep.join((TEST_DIR,FILE_STR)) -QE_JOB = io.QEJob(FILE_PATH) +from pymatgen.io import pwscf +import andrewsalij.Tests.test_params as test_params +QE_JOB = io.QEJob(test_params.FILE_PATH) class test_qcinput_io(unittest.TestCase): def test_k_points(self): k_points = [1,2,3] @@ -12,15 +11,22 @@ def test_k_points(self): self.assertTupleEqual(tuple(k_points),QE_JOB.input.kpoints_grid) def test_write(self): try: - os.makedirs(os.sep.join((TEST_DIR,"save")),exist_ok=True) - QE_JOB.save(os.sep.join((TEST_DIR,"save/si2.in"))) + os.makedirs(os.sep.join((test_params.TEST_DIR,"save")),exist_ok=True) + QE_JOB.save(os.sep.join((test_params.TEST_DIR,"save/si2.in"))) except: - self.fail("Exception raised") + self.fail("Exception raised in saving QEJob") def test_run(self): try: QE_JOB.run() except: - self.fail("Exception raised") - + self.fail("Exception raised in running QEJob") + def test_load_qejob(self): + try: + io.load_job(test_params.FILE_PATH,job_type="pwscf") + except: + self.fail("Exception raised in loading QEJob") + def test_output(self): + QE_JOB.run() + assert isinstance(QE_JOB.output,pwscf.PWOutput) if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/andrewsalij/__pycache__/convergence_tracker.cpython-310.pyc b/andrewsalij/__pycache__/convergence_tracker.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0442f5debee4914e81d86f7746af67ee6515dacb GIT binary patch literal 3514 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 diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index 5b93b191..05b9ee3f 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -1,27 +1,39 @@ import numpy as np import warnings - - +import os +import andrewsalij.io '''Convergence tracking of k points''' class ConvergenceTester: '''Base class for convergence testing some system''' - def __init__(self,path): + def __init__(self,path,output_dir = None,job_type = "pwscf"): ''' Initializes general convergence tester :param path: str + :param output_dir: str or None + :param job_type : str Path to file containing system for convergence testing ''' self.path = path self.convergence_list = [] self.converged_value = None + if (path): + self.init_directory, self.filename = os.path.split(self.path) + self.base_output_directory = self._initialize_convergence_output_dir(output_dir=output_dir) + self.base_job= andrewsalij.io.load_job(self.path,job_type=job_type) def find_convergence(self,convergence_delta): ''' Convergence parameter tolerance in units of parameter - :param convergence_delta: + :param convergence_delta: float :return: ''' - return None + return None + def _initialize_convergence_output_dir(self,output_dir = None): + '''Initializes the convergence testing by creating output directory. If output_dir = None, makes directory 'conv' in self.path''' + if output_dir is None: + output_dir = os.sep.join((self.init_directory,"conv")) + os.makedirs(output_dir,exist_ok=True) + return output_dir class KPointConvergenceTester(ConvergenceTester): '''Subclass for k-point convergence testing''' diff --git a/andrewsalij/io.py b/andrewsalij/io.py index 4b7b68e6..1fdd4f16 100644 --- a/andrewsalij/io.py +++ b/andrewsalij/io.py @@ -6,19 +6,32 @@ ''' #TODO: add additional format support +def load_job(path,job_type = "pwscf"): + ''' + General function for loading a job from an input--handles various job types (e.g., 'pwscf', ...) + :param path: str + :param job_type: str + ''' + job_type = job_type.lower() #to avoid capitalization input issues + if (job_type=="pwscf"): + job = QEJob(path) + else: + ValueError("Unsupported job_type "+job_type) + return job class Job(): ''' Base class for a file to run calculations ''' - def __init__(self,path,to_load = False): + def __init__(self,path): self.path = path class QEJob(Job): ''' Class for running Quantum Espresso calculations. Extends Job() ''' - def __init__(self,path,to_load = False): - super().__init__(path,to_load) + def __init__(self,path): + super().__init__(path) self.input = self.load(path) #PWInput object + self.output = None @staticmethod def load(path): '''Loads PWInput object from filepath''' @@ -31,11 +44,12 @@ def save(self,path): '''Saves a Quantum Espresso input file for self.input at path''' self.input.write_file(path) def run(self,output_path = None,prefix_str = ""): - #TODO: check in Linux bash '''Saves and runs self.input''' base, ext = os.path.splitext(self.path) if (output_path is None):output_path = base+".out" qe_process_str = prefix_str+" pw.x -i "+self.path+" > "+output_path #TODO: add parallelism subprocess.run(qe_process_str,shell=True) + self.output = pwscf.PWOutput(output_path) + From c797021a64acf8e6c7163ed9807a42e19d6ef0b0 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Thu, 15 Feb 2024 13:16:04 -0600 Subject: [PATCH 07/15] feat convegence testing working K point convergence MVP working (K points [8,8,8 for -.001 Ry for Si2). Dependency added via pydantic (MIT) for deep dictionary updating --- andrewsalij/Convergence-Tracker.md | 1 + andrewsalij/Licenses/pydantic_LICENSE | 21 ++++ andrewsalij/Scripts/run_si2_sweep.py | 21 ++-- .../qe_job_updating.cpython-310.pyc | Bin 0 -> 1291 bytes andrewsalij/Tests/qe_job_updating.py | 21 ++++ andrewsalij/__pycache__/io.cpython-310.pyc | Bin 2377 -> 3256 bytes andrewsalij/convergence_tracker.py | 99 ++++++++++++++++-- andrewsalij/io.py | 14 ++- 8 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 andrewsalij/Licenses/pydantic_LICENSE create mode 100644 andrewsalij/Tests/__pycache__/qe_job_updating.cpython-310.pyc create mode 100644 andrewsalij/Tests/qe_job_updating.py diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md index 29dfaa80..e2939353 100644 --- a/andrewsalij/Convergence-Tracker.md +++ b/andrewsalij/Convergence-Tracker.md @@ -6,6 +6,7 @@ Dependencies for this project may be installed by running in the following insta pip install numpy matplotlib scipy pip install pymatgen pip install ase +pip install pydantic ``` diff --git a/andrewsalij/Licenses/pydantic_LICENSE b/andrewsalij/Licenses/pydantic_LICENSE new file mode 100644 index 00000000..488c6260 --- /dev/null +++ b/andrewsalij/Licenses/pydantic_LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 to present Pydantic Services Inc. and individual contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/andrewsalij/Scripts/run_si2_sweep.py b/andrewsalij/Scripts/run_si2_sweep.py index 57e1458f..13f8acca 100644 --- a/andrewsalij/Scripts/run_si2_sweep.py +++ b/andrewsalij/Scripts/run_si2_sweep.py @@ -1,26 +1,31 @@ import andrewsalij.io import os import copy +import andrewsalij.convergence_tracker as convergence_tracker + + +'''Script for testing that Si2 k sweeping is working''' + INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" os.makedirs(RUN_BASE_FOLDER,exist_ok=True) si2_input = "si2.in" + filepath = os.sep.join((INPUT_BASE_FOLDER,si2_input)) run_sub_dir = "Si2_k_sweep" run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) -os.makedirs(run_directory,exist_ok=True) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) -job_init = andrewsalij.io.QEJob(filepath) -job = copy.deepcopy(job_init) -input = job.input +base_job = convergence_tester.base_job +update_job = copy.deepcopy(base_job) +sections = update_job.input.sections -control_dict= input.sections["control"] -structure = input.structure +convergence_tester.find_convergence(-.001) +convergence_list = convergence_tester.convergence_parameter_list +convergence_energy_list = convergence_tester.convergence_energy_list -save_test_path = os.sep.join((run_directory,"si2_saved.in")) -job.save(save_test_path) diff --git a/andrewsalij/Tests/__pycache__/qe_job_updating.cpython-310.pyc b/andrewsalij/Tests/__pycache__/qe_job_updating.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87ef3ecc7828182be94eeeeb852081599f53f038 GIT binary patch literal 1291 zcmZ`(OK%e~5VpPEWSef%mq024#DzmHjf6NN#49`^6sRbdy;$4Wl-(w~!QNHXD!l+d zB;m%N;RpE2seb_p!HnIaRDf3=KgKij`J3^U?RJYm`^(+!!n#KsVPxD1s;e0hR1CNdg&24kMT08`5pqjotpB z+WP9dy=PhVyx#A@W(m>G^(Gx>c@HTuy$?#{<-Tz6vf^N8dTh547ew%gJn$6= zVvwy4ZP9D=vDpTI-{%UBRIn!$ILCMsc(Ud1j3t5H?zW7`~+MWxHJZIpEd+fWaDRKo2d zsnir_Isy##%6VcO(H?)xuMLJPJ*p?8JQr2Uf$3kFLd5zu# z_xc73ESx2Qs5CwbM}n~bviM&<4e$$ z*iKg3)upu!i+TdYV;upPICoV8b!VIC1ST5)NS1+R=t|74Jbm%9FJ3>~d+rk!?ZLsv rDZClPs&C?Pj?k8_;%??xj_!FH?&BjhS3%&V{1?*>-K0?*Q~v8W-~V5@ literal 0 HcmV?d00001 diff --git a/andrewsalij/Tests/qe_job_updating.py b/andrewsalij/Tests/qe_job_updating.py new file mode 100644 index 00000000..df476597 --- /dev/null +++ b/andrewsalij/Tests/qe_job_updating.py @@ -0,0 +1,21 @@ +import copy +import unittest +import test_params +import andrewsalij.io +import numpy as np +import numpy.testing as np_test +QE_JOB = andrewsalij.io.QEJob(test_params.FILE_PATH) +class QEJobUpdateTester(unittest.TestCase): + def test_k_array_update(self): + new_k_points = np.array([1,7,4]) + QE_JOB.update_k_points(new_k_points) + np_test.assert_array_equal(new_k_points,np.array(QE_JOB.input.kpoints_grid)) + def test_section_update(self): + new_directory = "/home/new_directory" + section_dict_update = {'control':{'outdir':new_directory}} + QE_JOB_copy = copy.deepcopy(QE_JOB) + QE_JOB_copy.update_input_sections(section_dict_update) + new_outdir = QE_JOB_copy.input.sections['control']['outdir'] + assert new_outdir == new_directory +if __name__ == '__main__': + unittest.main() diff --git a/andrewsalij/__pycache__/io.cpython-310.pyc b/andrewsalij/__pycache__/io.cpython-310.pyc index 5360d15c42ec33e2184deeed3b77200a4373c599..5f52baf3929e7c9f6d72f436632c5d69bf86c9c2 100644 GIT binary patch delta 1143 zcmZuw&1(}u6yKTs$ZnFxH2t!))h#GxZ5#UGp(t3vs_3DpMZ_S6?arj#knS$ClS)cU z53TfE1_UqCinpG;`7ekd=t)*QdGqMelW#VSTInqNoA)*E&HU!g`_j9?LfF-nRbYH| zKhh7@eqk6@_Q%g(Aqv3_t)i#1QOQ^eK|~|^E~=Qf6=IOgu0k?9xMG235(_koT03eb z`8-74fx|>0It+g9UrKhN?oh#o9GZrsj3qM z8Suu)!-%+?#y0Ui?uUWPT6S2o?>)K`L`}Zv7>OCRh#PR{7La{1Ia zF{EH~K8Bn-%ls$hL<->4kQWa5Iwqj>3TW!HUg8J3WX!R`!Fj zReQx>rvaGkm^NzV$mOf743!;?O~J$rfJBd@hR@lwwCioc%w;#GKo?62ZC*O%lAe=# zRR*#-@yY1f?pdL{8aBD)u@iq4lE$)12^W!xHU`^Vo)US2DoNWPs!E`6azI?h+?HKq;aaDSpo?%2C3@;eyp%5yEG=Q{ROk1JezbFSUGTBK^LDbBdK6&SCLW1lN zc1^;9cx8@nkAN8W1DJ}2@+#J{$W%?uRI{pS7Ih}yk&{buQEScRD>NwkA(P$7W+cd~ zO!T0+7PZ*Cl)F0*rMx~}PM-<8AOmv}@)Bgizb`?Yvj+Pm&3VOyTaq6}S-p_&HGTsC CB`${m delta 273 zcmdlXc~XckpO=@50SK=3oK00{pU5Y}=rvJWUW=0g&~E# znJJ1D$m2-i1oAjjS(}-o*fzGzWMt%=EXVYiQF1a9a~h-QFGq5m3aRoDI@=yN7e1lPb@@1AqjLMVCSno2bPYz)-nOw=<$*4Vdk02IOgSPoBYT#HI>l7HLnu&#i4K4P+Jz00|BT7DgUsCKfJ6 z4rUG(A?6|$kb3r8+y#}ni6!Z&d3u@oMNA-#S|CDWaxRal5Fe1q!@$AF!N|nO#mdJc G!Uh1g0yy^o diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index 05b9ee3f..fd9ebfee 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -1,3 +1,5 @@ +import copy + import numpy as np import warnings import os @@ -14,8 +16,11 @@ def __init__(self,path,output_dir = None,job_type = "pwscf"): Path to file containing system for convergence testing ''' self.path = path - self.convergence_list = [] - self.converged_value = None + self.convergence_energy_list = [] + self.convergence_parameter_list = [] + self.output_list = [] + self.converged_energy = None + self.converged_parameter = None if (path): self.init_directory, self.filename = os.path.split(self.path) self.base_output_directory = self._initialize_convergence_output_dir(output_dir=output_dir) @@ -26,7 +31,7 @@ def find_convergence(self,convergence_delta): :param convergence_delta: float :return: ''' - + #TODO write general convergence handling return None def _initialize_convergence_output_dir(self,output_dir = None): '''Initializes the convergence testing by creating output directory. If output_dir = None, makes directory 'conv' in self.path''' @@ -37,8 +42,8 @@ def _initialize_convergence_output_dir(self,output_dir = None): class KPointConvergenceTester(ConvergenceTester): '''Subclass for k-point convergence testing''' - def __init__(self,path): - super().__init__(path) + def __init__(self,path,output_dir = None,job_type = "pwscf"): + super().__init__(path,output_dir=output_dir,job_type=job_type) @staticmethod def create_k_point_array(k_iterator,k_index = 0,effective_weight_array = np.array([1,1,1]),fixed_k_points = None): @@ -68,10 +73,88 @@ def get_effective_k_point_weight(self,weight_type = "uniform"): if weight_type=="uniform": effective_weight_array = np.array([1,1,1]) #no special weighting if weight_type=="lattice": - lattice_array = self.get_lattice_vectors() #a,b,c (in real space) + lattice_array = self.base_job.get_lattice_vectors() #a,b,c (in real space) effective_weight_array = 1/lattice_array #now in reciprocal space return effective_weight_array - def get_lattice_vectors(self): + def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = int(1),k_index = 0, + fixed_k_points = None,weight_type = "uniform",run_prefix_str = "",max_iterations = 20,talk = True): ''' - :return: + Finds the converged energy + ''' + k_iterator_init,k_step = int(k_iterator_init),int(k_step) + if (convergence_delta > 0): + warnings.warn("convergence_delta must be negative. Negativity imposed") + convergence_delta = -1*np.abs(convergence_delta) + cur_convergence_delta = convergence_delta-1 # initial value that must be lower that converged value + cur_k_iterator = k_iterator_init #index for k array construction + effective_weight_array = self.get_effective_k_point_weight(weight_type = weight_type) + run_counter = 0 #index for convergence lists + convergence_flag = False + while (cur_convergence_delta < convergence_delta): #absolutes taken in case convergence + if run_counter >= max_iterations: + print("Max iterations "+str(max_iterations)+" reached. Terminating convergence run") + break + self._run_convergence_iteration(cur_k_iterator, + prefix_str=run_prefix_str,k_index = k_index, + effective_weight_array=effective_weight_array,fixed_k_points=fixed_k_points,talk = talk) + if (run_counter>=int(1)): + cur_convergence_delta = self.convergence_energy_list[run_counter]-self.convergence_energy_list[int(run_counter-1)] + + if cur_convergence_delta>0: + print("Energy increased in final convergence step. Terminating convergence run") + break + if (cur_convergence_delta>convergence_delta): + convergence_flag=True + break + cur_k_iterator = cur_k_iterator + k_step + run_counter = int(run_counter + 1) + if (convergence_flag): + self.converged_energy = self.convergence_energy_list[run_counter] + self.converged_parameter = self.convergence_parameter_list[run_counter] + else: + self.converged_energy,self.converged_parameter = None, None + return self.converged_parameter #returns None if run does not converge + def _run_convergence_iteration(self,k_iterator,prefix_str = "",k_index = 0,effective_weight_array=np.array([1,1,1]),fixed_k_points = None,talk = True): + '''Creates directory for convergence iteration, runs jobs, parses output + :param k_iterator : int ''' + iter_k_array = self.create_k_point_array(k_iterator,k_index = k_index,effective_weight_array=effective_weight_array,fixed_k_points=fixed_k_points) + k_array_str_init = str(iter_k_array) + k_array_str = self._clean_k_array_string(k_array_str_init) + if talk: + print("Testing K array: "+k_array_str_init) + iteration_subdir = os.sep.join((self.base_output_directory,"K_"+k_array_str)) + os.makedirs(iteration_subdir,exist_ok=True) + conv_iter_job = copy.deepcopy(self.base_job) + conv_iter_job.update_k_points(iter_k_array) + iteration_output_dir = os.sep.join((iteration_subdir,"out")) + os.makedirs(iteration_output_dir,exist_ok=True) + conv_iter_job.update_input_sections({'control':{'outdir':iteration_output_dir}}) + new_input_path = os.sep.join((iteration_subdir,self.filename)) + conv_iter_job.save(new_input_path) + conv_iter_job.path = new_input_path + output_filename = conv_iter_job.get_output_filename() + iteration_output_filepath= os.sep.join((iteration_subdir,output_filename)) + conv_iter_job.run(output_path=iteration_output_filepath,prefix_str=prefix_str) + iter_output = conv_iter_job.output + self.output_list.append(iter_output) + self.convergence_parameter_list.append(iter_k_array) + self.convergence_energy_list.append(iter_output.final_energy) + if talk: + print("Iteration Energy: "+str(iter_output.final_energy)) + @staticmethod + def _clean_k_array_string(k_array_string, + char_list_to_underscore = [","], + char_list_to_remove = [" ","(",")","[","]"]): + ''' + Prepares k_array_string for use in directory names + :param k_array_string: str + ''' + k_array_string = k_array_string.lower() + for char in char_list_to_underscore: + k_array_string = k_array_string.replace(char,"_") + for char in char_list_to_remove: + k_array_string = k_array_string.replace(char,"") + return k_array_string + + diff --git a/andrewsalij/io.py b/andrewsalij/io.py index 1fdd4f16..66723446 100644 --- a/andrewsalij/io.py +++ b/andrewsalij/io.py @@ -1,6 +1,8 @@ from pymatgen.io import pwscf import subprocess import os +import numpy as np +import pydantic.v1.utils '''Input and output handling Formats supported: Quantum Espresso (PWscf input) ''' @@ -40,6 +42,9 @@ def update_k_points(self,k_points): '''Updates kpoints_grid for PWInput''' k_points_tuple = tuple(k_points) #force type self.input.__setattr__("kpoints_grid",k_points_tuple) + def update_input_sections(self,update_dict): + '''Updates dictionary of PWInput''' + self.input.sections = pydantic.v1.utils.deep_update(self.input.sections,update_dict) def save(self,path): '''Saves a Quantum Espresso input file for self.input at path''' self.input.write_file(path) @@ -51,5 +56,12 @@ def run(self,output_path = None,prefix_str = ""): #TODO: add parallelism subprocess.run(qe_process_str,shell=True) self.output = pwscf.PWOutput(output_path) - + def get_output_filename(self): + '''Returns pwscf filename corresponding to input '.in' given in self.path''' + base_dir, input_filename = os.path.split(self.path) + input_filename_base, ext = os.path.splitext(input_filename) + return input_filename_base+".out" + def get_lattice_vectors(self): + '''Returns lattice vectors a np.ndarray from PWInput''' + return np.array(self.input.structure.lattice.abc) From b2124b771773826e2200d8278073d5ede869fb56 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Thu, 15 Feb 2024 14:47:19 -0600 Subject: [PATCH 08/15] feat convergence figure plotting make_report_figure() works for KPointConvergenceTester --- andrewsalij/Convergence-Tracker.md | 13 ++++++++++ andrewsalij/Scripts/run_si2_sweep.py | 4 ++- andrewsalij/Scripts/si2_k_converged.png | Bin 0 -> 22852 bytes andrewsalij/convergence_tracker.py | 32 +++++++++++++++++++++++- 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 andrewsalij/Scripts/si2_k_converged.png diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md index e2939353..51871fc0 100644 --- a/andrewsalij/Convergence-Tracker.md +++ b/andrewsalij/Convergence-Tracker.md @@ -9,6 +9,19 @@ pip install ase pip install pydantic ``` +Tests have been run on a variety of materials, whose provenance is below: + +Materials Project (DOI 10.17188/1190959) +(CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) +Si2 (mp-149) + +Pseudopotentials Tested: +NC SR 0.4.1 from Pseudo Dojo + Paper: 10.1016/j.cpc.2018.01.012 arxiv preprint + Method Paper: 10.1103/PhysRevB.88.085117 + License: (CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) + (see https://github.com/PseudoDojo/pseudodojo) + > Ideal candidate: scientists skilled in Density Functional Theory and proficient in python. diff --git a/andrewsalij/Scripts/run_si2_sweep.py b/andrewsalij/Scripts/run_si2_sweep.py index 13f8acca..1d9a3872 100644 --- a/andrewsalij/Scripts/run_si2_sweep.py +++ b/andrewsalij/Scripts/run_si2_sweep.py @@ -24,8 +24,10 @@ sections = update_job.input.sections -convergence_tester.find_convergence(-.001) +convergence_tester.find_convergence(-.005) convergence_list = convergence_tester.convergence_parameter_list convergence_energy_list = convergence_tester.convergence_energy_list +convergence_tester.make_report_figure("si2_k_converged.png",x_axis_type="convergence_parameter") + diff --git a/andrewsalij/Scripts/si2_k_converged.png b/andrewsalij/Scripts/si2_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..111eb068887aeabafd779ef947dd1463e93ed825 GIT binary patch literal 22852 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 UY0bBRCmJ(&y85}Sb4q9e0J7U0qW}N^ literal 0 HcmV?d00001 diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index fd9ebfee..5a069e8d 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -1,5 +1,5 @@ import copy - +import matplotlib.pyplot as plt import numpy as np import warnings import os @@ -156,5 +156,35 @@ def _clean_k_array_string(k_array_string, for char in char_list_to_remove: k_array_string = k_array_string.replace(char,"") return k_array_string + def make_report_figure(self,filename,output_directory = None,x_axis_type = "iteration_number",x_label = "Convergence Iteration",y_label = "Energy (Ry)", + plot_params = {},to_show = True): + ''' + Creates basic report figure for k point convergence testing. Plot parameters may be + overridden via matplotlib.pyplot.rcParams.update() + ''' + fig, ax = plt.subplots() + if output_directory is not None: + full_filename = os.sep.join((output_directory,filename)) + else:full_filename = filename + n_its = len(self.convergence_energy_list) + iteration_array = np.linspace(1, n_its, n_its) + energy_array = np.array(self.convergence_energy_list) + ax.plot(iteration_array,energy_array,**plot_params) + ax.set_ylabel(y_label) + ax.set_xlabel(x_label) + if (x_axis_type == "iteration_number"): + #No additional functionality at present--kept for case switching + dummy_var = None + elif (x_axis_type == "convergence_parameter"): + x_ticks = ax.get_xticks()[1:-1]# removing edge indices that give left and right bounds of axis + x_labels = self.convergence_parameter_list + x_tick_indices = (x_ticks-1).astype(int) #shifting index from iteration 1 to pythonic 0 + x_labels_subset = [x_labels[idx] for idx in list(x_tick_indices)] + ax.set_xticks(x_ticks,labels = x_labels_subset) + else: + ValueError("Invalid x_axis_type: "+str(x_axis_type)) + + fig.savefig(full_filename) + if to_show: fig.show() From e28871aa3624bf27d3ffcc62aa5002e6bc1ffc5e Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Thu, 15 Feb 2024 17:19:15 -0600 Subject: [PATCH 09/15] test second suite of convergence tests calculations for Os4Ru MoS2_2D Graphene_2D Some minor bugfixes for report figure also docs for full test suite --- andrewsalij/Convergence-Tracker.md | 27 ++++++++++++++++-- .../Graphene_2D/graphene_2d_k_converged.png | Bin 0 -> 22296 bytes .../Scripts/Graphene_2D/run_sweep_graphene.py | 21 ++++++++++++++ .../Scripts/MoS2_2D/mos2_2d_k_converged.png | Bin 0 -> 23118 bytes andrewsalij/Scripts/MoS2_2D/run_sweep.py | 21 ++++++++++++++ .../Scripts/Os4Ru/os4ru_k_converged.png | Bin 0 -> 29128 bytes andrewsalij/Scripts/Os4Ru/run_sweep.py | 21 ++++++++++++++ .../Scripts/{ => Si2}/run_si2_sweep.py | 0 .../Scripts/{ => Si2}/si2_k_converged.png | Bin .../convergence_tracker.cpython-310.pyc | Bin 3514 -> 7588 bytes andrewsalij/convergence_tracker.py | 15 ++++++---- 11 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 andrewsalij/Scripts/Graphene_2D/graphene_2d_k_converged.png create mode 100644 andrewsalij/Scripts/Graphene_2D/run_sweep_graphene.py create mode 100644 andrewsalij/Scripts/MoS2_2D/mos2_2d_k_converged.png create mode 100644 andrewsalij/Scripts/MoS2_2D/run_sweep.py create mode 100644 andrewsalij/Scripts/Os4Ru/os4ru_k_converged.png create mode 100644 andrewsalij/Scripts/Os4Ru/run_sweep.py rename andrewsalij/Scripts/{ => Si2}/run_si2_sweep.py (100%) rename andrewsalij/Scripts/{ => Si2}/si2_k_converged.png (100%) diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md index 51871fc0..51e55bb9 100644 --- a/andrewsalij/Convergence-Tracker.md +++ b/andrewsalij/Convergence-Tracker.md @@ -11,12 +11,33 @@ pip install pydantic Tests have been run on a variety of materials, whose provenance is below: -Materials Project (DOI 10.17188/1190959) +Materials Project (DOI: doi:10.1063/1.4812323) (CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) -Si2 (mp-149) +Si2 (mp-149) (DOI 10.17188/1190959) + +Materials Cloud three-dimensional crystals database (MC3D) +(CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) +DOI:10.24435/materialscloud:rw-t0 + +GaN (mc3d-3763/pbe) +BN (mc3d-13290/pbe) +O4Ru2 (mc3d-1930/pbe) +Br4Ca2 (mc3d-30836/pbe) +Cs2La2Te6Zn2 (mc3d-11071/pbe) +C2Ce2Os4P2 (mc3d-10335/pbe) + +Materials Cloud two-dimensional crystals database (MC2D) +(CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) +DOI:10.24435/materialscloud:az-b2 +DOI:10.24435/materialscloud:36-nd + +C (graphene, from graphite exfoliation) (https://www.materialscloud.org/discover/mc2d/details/C, graphite (2H) initial) +MoS2 (https://www.materialscloud.org/discover/mc2d/details/MoS2-MoS2) +AgCO2 (https://www.materialscloud.org/discover/mc2d/details/AgCO2) + Pseudopotentials Tested: -NC SR 0.4.1 from Pseudo Dojo +PBEsol (standard accuracy) NC SR ONCVPSP 0.4.1 from Pseudo Dojo Paper: 10.1016/j.cpc.2018.01.012 arxiv preprint Method Paper: 10.1103/PhysRevB.88.085117 License: (CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) diff --git a/andrewsalij/Scripts/Graphene_2D/graphene_2d_k_converged.png b/andrewsalij/Scripts/Graphene_2D/graphene_2d_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..3aac987432ca77bdcbf6bbf27a3fd6c69b21cd4a GIT binary patch literal 22296 zcmb@u1yojD*DkyP5k(Ob6e$&vP*GZ15eWsP8x)joxG5p}pgM+lQF!eS2$jD|>SjeMX0ewss~~mRy(lFLPdG zG`6?5wiDpsu=w`{m#u7#I2bo~zQaTITT5x!VHo9o^gmIOXrc**sXmv!d0p8lV!GGa zNqM-pV*U|x&4WlLF)HFS_x;bmytqF;CRp~_YaDxa&d=Y(64%-9vavjgd3mBmHTz>4 z@oTD0syuz~7=10$hsWMt+DHE7*{6r{jNK8depg5yGci2~=q!z%47*+b%eij7_RRZk zyQm)zPI{ez#;hI8!XJRYV$EkUVmLfW%!py0erNtq59S?lM19qUS*%=KN`r%goS}Ep zFOy-I(~)mil<(e+SzB`otz9mQmc-1NLPJAkq@=8Ir!cJCo9>$J%`~mNbVotrd*}93 zQidq6lNsb_>S$A7*c|iv`Z~JwkI%+gjQ8lKfgZk92HS&SKEG{?La*+Ff0b7r#)vS? z^&rvV|EmWLB&WPSwDZw7k$7xs7W|0+`!y$tW60psG*^C{ar<;msk_NeTjvlo^vWJF z%HV*L=cT)BUt;?(Y~lqr_F;<1dh$N%-XsR%m=`j#DF;0T-G8cRJg@!H3L_wY16#T~ zt@(_VlS#~|+Po_=bauiP#)9k&=E9QI8K-OEbnqZN$`2d+QnyU<%faS6d|}{WOjv!w z`P^fQZ`L+Ea6-w+4eQCZ2=_X8>f_I!Qao0D+Q*ph+`WJQeq^_N1iu1vptQ%<5X0$= zpEdR>lTz#9vI4qyKQh?L6&2EA*ua@$0nE_QaH4QBUFpRkx}{b%J(Jonp01Kdc@;jV z)e=``OE=R?w-#>ysI26({1C#*-ypA}B_Z{Z0ezTY#vxCSf0PMs>;-Pv3o3AbWnWQ=*mmM&UpaBqW%81ocZn84H(6+f1j zi-p#XmKs`He_|S6tQXD5jI1?m9&3!{aoe!RO?TxqPMW{8Be`y?qXnHicT$%QBcq^+ zOHI9aNjv{;e0+R$RaN7gQ(R2al794QnY|1QkbR_@*W$3?=ERE2UaPMhEZKqk9qlWUnTpQGha0H@>H+3F`nl>@UHf4 zsa(B9fE_HadP7bj>z%j9F363wBrE02G^gtblJ4Crkn2Y$n9$I0H}np(Mw)7xc7ftK zN#Ek6UWVN@N!dt&92v3Hq@=f<=BhVtJUK)spgg?}AEB(M_`9R7zFrMZE-WlO$kCi! zr4=$KF2sV{GhXD>E;z zYQR#LSq3W$iXr;W(dW;foAegq!bIE(qg*CfC2rjkSQ+mr$U+^XWmTe5 z8_uV;I8uwJJ;%r>W@BSB0iAG6O^t{*~3wzm4RxTUPYf=|+ zjqTz^<%@^mEHPHnzs>^?O5(-80WN)VQ5_&!hF1iKn* zQnEGH-8%(`B3SHk*I@Niz~k?DMr#NkJ$pX$@)cN;^h6B@I@?JNCBPour6Z1^)@MSe zDd6<7>9O;H(gOA=>KDjm2!_j=YmXSm@guY`zE=kW)TzLfX}`h7;%WUJH}ChvuoyOI zm+hT>ZZ97*{&V!%Z%<#ae+JjX6PMG$QRW|mD@>a&-n{gcSVi-GbNU-0wGa{v>)A)t za2sZK{3k-A_7XLC|Ep2fBG9PY(gJ)(JFXn0Rznw)!p}ILJhq1Z)Txh(ZXTb1whm)3 ztk4rBwonq>)eCRc!iCTD0X$UlQJV`M;s&nDdWH$Q85f-Jc7ABabueE zJy*bXDX)NVyXhV=hK6*Bq_g70%8HiFQL*cP$L%Ch1KIo9gvAXa!=is*cwdj&iG3R; z!JISPHkeQ1#4qV}KcDcs44i2cKBGwF&K$|Y(nxtNQ3tsU>odeLe*4Jhl-k$!NjJUw zwnVZAD-VH&ymZsxN5*lWd!MHW6OaFi>(CQK4T&AISOOjU-JMWQLZ4|r$Hv66_T)_0oOfNp%vQYZSkt5_36e_cQCBacqeS1#umD2C`U*HN4@_(c$ zx%k)rG<^T>{f}AEQ!>hlFtc<8WDz=zqD|nh%TlA{iQ~sxxS#WVzUy69n0+whyAF(_ ztA82(fbpIG;*dgXgEbth0?rpsq~Prb%877e4IjE3{Dc->TILV#72aNI_FVL5(hFPrA(eT;Xmg**C?)yFK}oI!#tjVIlWrP~_RzIB9bTJ2DY|u+PSBwR z%;t$>$6`g?HpWU;`^;Vkgx`@-9DdE%Lj+y6>V(5+xsBg`{`@)HdhkZ@yLW6CE=Y12 z{(8$qC+w2l#arpepmzWM2V_4fPV?R|Yfo=Y%j-+&wk(p}U9a~r6;hLyezmZ;h%fF5 zg*gfn@n5zjhSm827ID?U>khM0T87)^N;2H6S?XF4@9Jw1|XyuEBE$9;QJZ?YrP0ERla>OoUhy~yO+){RS=*>B6r z$^rrd@x}e|w?k+cPTy|&70Shfn^3NFaCa~5eo-Fuoh7Z$Sy_v6I7x4l>Tic1@jK|* z*x2~m*Ed})yrV;1y2&h~Bq1h-k>V6*T-P=+2}x^_qZN336=#p#oo$&rcT(rqsJtbp zyyJCw3N%xMv4mzyuzY&I{fRz_=sFFOE>E`00~pfGvy4oTk4{gFa*^@(_xE)ZaGXgc zJwP?qrezh(BpWTFQ?@nCft${0HytQ{teIu#vje?90iR=68)D4F`YM>@dM;g^f34w9 zbKZjdvl!NJ9Ib(_Y-ziZUkWgS=z$@6?i#U@e(9g(H8sP)N7Hua^||2RUDWu9UIlRE zZlYWyf<`)awLG#q?y(b1oZ4p|yH|@UrCa$?rzmOX<8Om;k}U_gJ~(l)U(Zp}UputG_Vxkis%o+y2Muo9_|R{*%&ngnW)`{O0vnz7L`u2>!ZipJ%?*UC-#k z3Q4Je+=Q%)fWiB`u$QLSn4gKd8u z$+B68PkAljT+;D1@Xc~Jv70_q+gKj`-#edSFKOVJa)}71_o1UsvL~*QQTPS&a6%{5 z-GCbeDxR?m{nYyrf1)cyWq=TVK!Bleju3vlKLifmN*ueHrZ{!%#xdjyX!eM;ye4!U z12Lm%E4Vdx!$8i(Iu@?g?7z(rgUfGR+ClUBD8VCAK~E@}>T^jGx{8$OaL5COeF*22 z3m(R7q*t)~QRC9rGS!5L&zOan@iMCjr~3Sn>nWd3b=ferBP8It_bm2NPBCB%O{6>+ z2RX&An=<-0jG?=Thz{cdTviSZmWaHfX5j? zxMi>AmoHyr`-@qg6|v(|qY|4oZn~t>}dQ5Ax~WA~i~pwHRjks8saVgxpc7Ee6BArU+rOh)1JI zUxOzZm}teHID9yUTF+G>QUIq2PB!O3)zLJ~92v4hv`Lx0UKFRf9j4SNPF@j{mX;2? za{o!8<7_%0Y@YkeGgYM*d#DH?BNN>3yPzPJD_8CsE*4~*qNTkky|J}eZ)V;O_}*>q z3t9EgpKtG<)GTu^S()w6n9L|EZ8URmT*0K!WEBcgBP+lDbT2DA`|ShNmz7OSl5K5m zxeY1~N;g4VVP>A^G_QaD!Ua5TvW@)U!In?=zb*at=9qv0BrQ|+UyiLxm7)wH!bn4QP=&rk2J zND((pc&5v0uOpA^nsw#oYLA_t``RE`nnqSa*J5x`P*U8Vo}V2MhJiz6;oy*0#pjgj zHKz3z>Em}w*l$x(Or|~}%XUQbV=dx;9<6=;%o!XUtYiP8p}t<8H$1IkNb4e%#>ICo zt$&ggkH#*|>S!2A5)&3HH~sp)e1Z=I6d=2~I@|8eQJPd0c){$;6Vlgj-q=qy7uXq< zY|az~FyUKMcD6UoHkQUWrn2gnwpaVjIzK;j*9*aHi+5rQ-SZ^B@`FiZFj1sYbS?t8JV^uDOA_h zsp{*09I21acy;UoFK*p3+06CX#T~=p<00ckffA++bR!c1U}lAZ&v1qJaun1*cg%zk zJllS}se-L)h;$>owFDQ(OIO|2CVmZB6QMWlqQtj`q@)D|&u|l9sSTLdi^-$Q0H(31 z=h(}dCcNxJOvve@)HR8CLcr2O1{UZ%8~5GmSn=~V)ZpIa#j)=Xvp5b^65In77@%+i zk#cdu3#6YWKCY^*Z7rHD#qVymMczBIaf0bI_WknPigz=oljp_yx*d?Cu|MxuPQsvo^Dx6|A`WH=_pCe|yF;M2Drvuj+xKjDC};%F(3JPX8~ko=S8au%0X!ZI#T98|oL>-wiRyH+-8ec)Oo9!tMjXYg3Wliw zMn3|()A0S(v1Pz#tXHop@bx*x_BoHz1&4$P4sly65rB@7&BS*LfQw-QxD&K5DbwYGKH^~t{=+`vxDyH6Xs^jV9XdhYA-ZRt9bzm&dG#6{>Fy*#b{ctI|N^(=q+j}s7fcJZIb zN*C({H4E*NMK;FH!FWuTZq78*Ire-22Chl}q}{J9c6Q9tl3ul@Ym!G?dB?#?q?_*13wHJS;Cwn=|UdYg*z0WZZmIpPwZ z%5n&_g%kIb1GJogRi+Bo9$)M+^6M19Y$?UzxCVfrgzKj!iLDToJFr4Sivj!hL0)uQ z8KMFe35n-S$*HM#JT{u6gMxzM00yUgk@&hDA2m&uzb%zs&2Ij8c_dtS!$fzt?0TJs ze5&i~Ltr+Unx?$FtdpW;Ss<~qv*R+AS&2N0Q7bv0gT$TpU!QIPp{5P7Bdr|?K*!bQ z7(vf0!`dbazMhy!K}S;{eY%RBvn)%NRfX681a`qJWR{Caf>;VY!jLz-Wzt-<{L+i} zhaqft1Xs6K%hzw*ma0*>P|Xf>rV!8wC{m-js{br&;wf3C{61OadwR5<65o@P^VQ5Y zK9g+wRuTxi^x_4X#N&JG4H)))mAXf`WRwU^dx*Z6q`mI5T)HGHAt9l%QULKFjSG#F z=RXl?sN=2Bg2WRHRYM+dm%>w$fq^eiAD;9w*sM5h6~qKBIOTOFu!p{B}npk-)&}=Z8g7`yDuOO~LKU%<#N~=x;IwYkr27CYh{aC8NzXkzO_N@8hw`Hc1*AWC5+I=yYlBDuaof9bA*bO8a)v=&TZ9T4?wkMNZ> zj?{*m^;`gd;;~+%XFnXQX4;yfLb&bSkuRnvPNkBEf1s1JC2$N$6%R#;`{47D)jcEb z#R8lkD=RC^IkmfY--4sgHmawe?kmwMaanF^mKRMsZJGZi6!*<%S>}!6tr-)GYZ0;T zbej2yS+IUwQ%cfN>})5zIh7^gvXq2kD;=93Cj^`q;!3wyw4|Go6k?I{wdl$BpBptG z4CiXwfXTflPoJVSrn>7XUfqeUEe|4`_RBEPn;oXhs9A#yqZm%0@;N(GgFNZ^;VzHj za)RMFa2Ol3-*GowHb2IScy+=mI8Dq*BOwE5lCb^-0TwF6T{#TaK5sY(Q&(30^X6N* z_Y&L@C@oWexo!T*UluQ-l9lKRP@j&yxDXMT-A1&BbjxXu$H-+41|XK*v&iPZu~JS~ zfUw^C1c03C|HMFLF{g5T{)bxX@m3;xd{a`=46T9!yTmBB6%Dto`ARgIe-91uJX$e7 zK}{{V2>GLA@Y}O>znViolM~{QsR$Yj(Zq?-?wVCqRbde5BfBOqvVOB(Xz>j)hP}2m zmymVSo=mzY@j^>k^}g{ar85EQMzjvZ4={~KI`%a-#ou0Tlw@GNc1;7|O7u+r(4oIf zEx4{i`|;mzn!kv@2da+w)_8x>=j>tYT=$mTP(mDPtB4hYrCY}9ZOiDn&Odiqoza;V znV+9``QtAM_RZ;SP!^FjJIQsJAgAT_djkEgA|)l2wz-Fl%nYd9I(|AK#EI&ZrHxe zvpy9&d+ywc6DM$u?3|p62yx%J(*oe*K~^WB9bz6?g%@th1mx1!Iapi;=M@l0Jn;Ep z&2a{Xj28^<>a!)QQQ$6xg}3Iu!IBBqbs0Y|`~J%HdePlt#Jw0r9HM7lo_f}x6^i(S zyn!Ie@|qBicCLD%SiP;^)V{0kD_POWT6vZ(05q4YE<`5*m<|*5D5ZB_yKfY6l>U3> z*?k0CFc2i@d79V!Zhe$6hfA4JeNYj#JCsRKP%HM94}eY;;MZnKH!V+4Q3>QY=;>2>_D8ZPI{Xvs zLZ|QFzu#rKRgJ@C7m_zBkQ`td2dDn}^=sRTaax(%w*j$A^*)*{X?53CQ1}2I51*Z_ z3=M2p7_P}N@8kqGS=2VQO}7DTm{mQ$E?j5(giZIvcXK3bc@yb zdaR#P!K=WPC%TjA`8P4kkoi)Z)(q0>gwRf+Xm!p+u7Jd;S(c9#EIYa!P)2ZMWLosj zQX)#|SQgLUl5PSxfd^>Nb}A8{1@Tr24B~4aVQPM_Lv$&Cyukt%Rq!HGXzqe^yN+Yz zFTuuR&^IFKZoj+O2z*(DLSXZQhYwZudj!ySYiMZj zYN+BO0x?XM==>JMY zM1)KOm#IHf?fa{+Mv~jwOWigj97K#XKHYl^^bak^qkc(c)9$m%wKqsqG%cIce-UVQ zPkFm)i}!*v`LSKs8AA-ZvQ4_cPo!lyOn0@8t3$#?033Dj>Qp!UlPC9@`<7GiYIRKw z^pFlTF6^3J0^+DLAotXgd`s^>XJ`w)wzIOFU|VlrvtZ3{*L@_50F|Pm;&B=p&Edt3 zrEPCtUsXsaaaAkAnDf9?rW1AVnOAp&M9^o=Gzf&#Gi5C;({n9*Q-XqyOE-c2Vgt4m z=+PFZ%icfEdjI$xR9K>7s)#V^9l)r@#dvQbto+5b^Vm#R&TVi;0Zh~VWo6YyU@lH2 zCaJ>uK;s$}mHzrQxkZ1ePC&~CaWY6gjc-h5sM*?nz6Du7WF}z@pyS^$%ZB~gXNIDa z_g4*;&{9>wt4=hnEX18CP z1G7i0`_-MydUu|9IP$X6O>0l&)5}-+hY#I@pdnb$!=baY^N!CGwvXQ~$(Ylh{RXMg z(aVe&mOc=Ktp!GJ-OMQ4DKzMQz*%LOH9npg-B$jXB+`c5>By!|c^V-naz0{V-x~S_ z5LwQ{8Y*DWC%`t9IL!8?O--4*&HtdT<0mba0*a|5>(Wz5^m%&2`v-#6bd$F?S0};j zHUgkb{rK^0uS2)R227dOQnyE_=}bJy3x@_ECC8TWiIDYi^;4R`WE7#N>7D-^F`_%9 zn<{SqKK1$z;%7@F545D=o*}rV^<~9`{2F~3e-frb7wVgMeAtuHevLl+vtk>oSQSNqS zsx#KIw~&=FW@15?uh%{hJTXTzUN*>K=WSxzi_f@!V6107#B#Kv?!`c~s{-z}ft%(yW(6sk;o;$HxzXT{het*Pa^)ih;{W{l;{{_?=T2>1 zbB3OT1Zz-+YegaM0+NM4H`;ZfifwTR!b0{-m(tEa4`pQ>DCUWTc_5}_au?%17~5ts zpy-m5e9%*mp-$nsPc#GKx81No#mJ$rCuqhJp9I)Wi>eaX&$;~+jQc3QUE#Lu;n%oGCEWzH2Di=co6o(xWE6vU9*fDkoWC``NOB=( z+1htz&E_LvK~D0pV7_#Mxz#HW8`?CA7*xD5`N=v!qBwo-F{P27zC1w6gYd@NA(wHg zbaVHGyKh!M2mrFUZGMaEb>`lJLMB8nKNTCW9lTC7as2dULK>8tl$f#SiJOQRBBEpF zfg7h%JQgnf`w%QF*~i$vynE2?j)qZnK`MkCBqG`^Kj4%<>3_Y%hQE?MBt_ti%kk(= zn1(3!Zn(M6)A}?kWaeM&^TaT2W_X2H3By3!zggAtM{qfBVTIO-0HU1EM zu;w1Id>>3St1!YoI1&4~`a#23O?4#MOyhUeU7J-CPHZ$sWqoqL=| zU*~`SBq98ry@5T`D*UYSjClK(fQEX?(v&`m-#pdMU|%nhlCF(ctE&DDJ+h#^xr%{d z(gC@I_#^Qw_SNF*8E(ive2XO+*jis~MFI)P!f|qb?s98tZbm#II%a0R)to4==Ire3 zQz>LW_7-8g9E)yMz_h0Qr6nW3LSvhnnr>}SB}r%S1{3{bTFvN#f9^C#z_k?|Cs3QW zhbsNl6cqdcUA1)R?H_%0D32xC`Q@QVwl<*ADW;AOAueu?ocY^S$>+hWLMJx=^gqYrzO|;g zs`C#9%Xs$e8FO-DH}2)3K%Sp^i8XB5v&N4J>zqBmm#*BTIl-hS--aOaDH5P#hwLjr zkd%eKOoK|==vHQ+0!hdYDVMo#FIBT=XfJ4U8P&A_P^aq#mD@A13s=HrWu)IUZDb$o zvgOz6)s)Oft6wOpo3wmv%veHFQgB!ulDw@jwQyT&Hb1^A`!ec4Rx?!<4{262^ALak z5Af-1=g&)kJqhk~9X}mU$c+AA#l@!B5nYjV)a`9Uq4mIg&&&~Px46VaGoaRGA;pfW|CjX3pz87)IkAWpo*N;uPY>5!(-!pj*&OZOD$ciRJdDhh zHR}k`Gx>W+5fTBiAiuXRxeNoq`hp7d7WPc?Q$JD9BW}It=Z6Ufp&p%k>Ag=8Bs`r5 zO&c5J}w&AN+;6|_-m7hS&W6R(DBN+O(bD!tj$rWr3l5=e4zjPs!Gz{j! zz}`2Djk`e}p55h9>o?VN#p?&UN>KG%t!m{CX$NQ57nm)P=7b*+p4br3`78F!ci3El;L zX$asezZUPu&`xb$xF-NYn*Ze8%Cq2l|A3)1a`G$edHHw1z7teRPRHR=MNldAYDq$b zPWu}@YWX^Jnr-UewA%z^Z2cZG?7st9w-|T$Ms;w7G6CRX;*_4BPrn4HoDy~N>x27S zPF%eo5N9!7@b9ydS&+c}SJz*In~h7lBIy1yfD>=v!SBM9uN{71bSp}xnq3+m!H=KIo`nMaQYhoegwAe;U7z-R~BjAZ&DAU{mK8?O!hy+aM-#ZB;HF{Xgz}tqZ>pW26DBpW*xJ{pOK;}=Nvj9 z86afw?y?gz7JCr{OwMfhzfiV^8XghrX8-=|6B7Hv)EkfdM*cR93eJBs=S@}%mm+vF zF$?H1wq)sACTT5#=&R)!wlBkWN9x|UD}>IPc?HK!ka^jvWqvputpLOzp|iAL&f)iv zZ6uo&s}Sh>yT_mzax%X=-97h+VOWX;_N?9J&c0d%SP2KxNCLYF0!($q8I`t*)7*A_x6rOROX%FtHE-_Bub0RrsO# zv_*hTomadoDvCe`SPR1AZvW5t4!KH{&dC5~!RXx^=C6h2FuuRQZ}$|~A$bg>E7Q8_ zA?JvPyo>RV*C!?#V_&!fcRm3O1|f|GE?UzM9l+x*%~Ajo2RjeCT1TI0u&F2xodosGU7*V%>r_Al3$~DrBi|Q>v31vl+R3j ztv6S!=k*VWBLrYEKm7OJO=T45<5mz1Kg?85DUJ>cOHqiuWwO37+?t!Eevvxo zu~|IRt#Ob3sFt>G*JyhAst9g~x92i;OHz_uK%k4Y64`&mQv)(#2Z$7qZP_aT+E|qA z>K=joQu{G^p}~$i$fASZYI&vG3NIfmBA0wXcBn^+K+al=MVPSk?BL3sY zuUFOdK-7GkiYfsT*Sf%>(tzeF%6-G+;lqdj@@PYry$Q16+=jnSx-C>)K-?hkC`!Y$ zAQ}pYTbb@gxog>t?S?C0lB&!D+<#t6Ggvn|Zbo5?lLiw&nl}ll&@7{RRp9%0jOu8C zr%M6SZvy;Wu6gHKX#haYkgW%@GZ9#w317jP2B0OlA+b?;6>^CX&n5t^q~=D!9dO0F zOrTQZ{8c(omX30r^7=x1%7;-@R1Y%EK-&bin&NQRL?#u zc_x||*UgOydX~q7zR?gVK1ab8w@#5997 z2EsVn!u2I60Jv~dieTH15*-#f%aa+(gaQ;XuoIF9BYWDx{rgM0l=qg;%2SOi-+x7D zR1P|O`cCSFQ~#Rjq9ciq|S=Lq@y0nR;QYX<|X2!a~0yMCDv6AmASSbU%e-o`rGPsDxj z8&cs9fTCqBh+PZlnEq5HiFg6mln%l-9fkA9z00E0O;4P8h4_+E@XOJ5Ggqy1z1g8F zdEhzMR{K&x9yS`zwcDLpOZ|FRW1Y17M6TUzXPw*3+SHRFU8hvr zaM_0^yku(XGlsNvS|5sJNpptZ;S6O9Y2_a8$sKZ&HneN42N(Z~xhgJe*S=V37QdnSYovNnxh!K_-N@{kRX^LPf6A2Bv~%4qz3;5bw)0G3LR#4K zy}Y%Qn!@Otx^ng*DhN`hCh~@*FewTF$Wq+PI#n&Kld#qN(CC}o!=%g?@lE96)%BKY z>#1KIc=tu-x$!1NGWbp$ucjU4WD{3iFSs{6ZtnHKj!ArmyshQ*k*OR4pzNAGi1I`Xg9i|v)){# zkLy9whMNVo>j=NQ#b{%v0ZmG`^Mjv;fkRx8+rJ!i(+UTQSFFthXN7z<&3RfbZeFd! z|4?0i^o*>)>X&VQwdXBEN>6!@Z28&QpUR^h*0|RP)JF5GJ$Naz@(XX4vj?kn*rz0A zcQHB^58Me}^_F3uz)dxXiIQ$aGgw~UC+BWR8bKknGqOR(x|zHCJX+;+bzS7-*4t5| zbXVnl`Dmq?bp+dN)a;fjK~U~MTh$6OW)%^uBUDLpHiHw#&2Z1Yvg?04e)Ol_>46)N z1KqVRkUJjLIRE6pOp}iF=;fmP>@Ighp8bH?n1!So2dN}pXt3>?ctrO4W@@$wwR{xw z*jOaS-RC^{yP4&`MsuoaAx~+7p#5XY{wohp7<;HbhCeKjEpN*5#&458eZ8@!9nfYM^dYpcqr3Ee*So-M&Ue2 zEV;v1vShVYIgZpUhz_TgO1!eRk@%WX4rA`ADm1ew|ZCzNhy%(c!wgs`r~$FK|R8 zFzZ3YqgGT_#dIF}hjT0rkPb*IIDan)tvviz_dK7A$Ez^n_lEEj3W}wou|qmDbXsgWH8S+`MTp1TcD;R$OY~59c7i8)oZ+< zO3L(z>NfW3faDi1&G#&{VncuXEG+E)NdX&&Fq+Mn!0k#lJ)`Or20EG(M+Z)t>qoZ~ zBJkD2^1UV3yrZDmess{06MKDLoa7x9IkHA}40zm~e13y&%GEcs%r6 zWp8BM!xLjp*QIkd$<{(!LOgnw20erT3RTdVj*P5FVTbgNkXWQ@*Zdt zZ~4+DBMb(4(vq=7NG4G*h-gD@tn1T#lqE^IYEXgFA&_E!;8UrSV;WrH$B=O$+EwxC zUJ6BL=K_>hd#^_d66GqVA3~l;K=hPSB&nyThi!Iuvwyb@$?1Rny7Qw#)mK~l^MhCP zE@NjR`E71Ie*Bo44qsfXjkK78j_JVp&D5m7a)tn3%zyyhB+ElS+YH?TtXX?xhsgw# zWuU%kpXn{aTVz>u^FDm=0CeYgz?G(*pW{&^qPuYD-oFHt&|5wJpu|i~O=TOD4=@m9 zXUBK(_PecuMnAKXzByGR3(+hfeK9HbBmya3`n>i5s*86a(J>VK_U%BN73Aaxv@NMI zqhIeq=b}7m29%+XgL`IaLJtJ$W0+22aVgg(**axwJDHIX_Icg>p z@4tz}d9|xi<0s@*K?UK8u`kyqTHbjI0anMIqra7wnoknj7@$V3Y=AELTAR36IZl+jRIF65Qy{vuX!aucEHbB3-z%F&PZv zJ0w-D^rhPvi}m9+Yr7~L#$9ETX9>xj2`FaciA8$b|$4*$&g1K){ZJm>`(R zhxS?%kKS>ZVy}8;4&8J61&T9J4LF*wPIW2;WdHw57;5EPf7sgIMkRPiUh1~7)Cft< zl%%AjgiRo>FrV-2Kx#?;0sAt!z&cDN)7ZJEZLfVjH9j~naTU7`;!mo^hdj|w~ zY1=dWg)KAgKu@k(Nt~>S?MwPXvhC zGY9j%>b~I2`O`nxS<{_P&&(Jc?pe<=I1CN`Pl<8Ni_hv8!?=um4WtFN>EY=%6p>FS zJFKZ0Cz%9%MK84d+F%4)jK@k1qK z^iE=+jDm*YcEsI4RmFX;97BBd?sH9`e?j(=HaBMt>Wr~>T9z>1G=trEt@=_St=u}w zUhw^SyA4bqB&mee6a&gO+<21&lG>RHS3qm*L3V=&4KDeiL#jZyq975XzP1i#(0Hu& zdz1;_CQxY+qER8C=ZSLin@mhhV<4stXk?Fh>(5fRh1YTFKS5_#&0}(W6JX zofrPxPB(A^`9m^jQDCSQ!6KpQ14G-EU&f~+p1e`k>;NSvioj<~F5k|Gi@OQhi~K(v zXRHc+TXn=YISLo`*wxZgm-$Cu9Ne5tPK-*i@vtiM3djawhz_n*1wHl7oi~tDx34k) zX_o>rg~rB7z&fXwtZ2eSEv(osS$C`ftxd|d26yNkNQgS+RIY)H*wj4Bd2z(FJAc8* zKUgdbm=07@d)Z|-y=bNhG8gecBe#w7L)wCd*Ze(7&O=tMExFcXXORKcASxwR1*?k$ zHaZ^L%Sbs04DoqsFbk$YNB5S!_11Qx%LAdo`}Zf))H81Y2ZBsF^PTq)HH*qd2^Dl1 zOm*jhPFj|uZ0oat{aB1nk%P(B+B_Q@TN98rDHegDp~+yek&qJT0i^Fm;zT&JJ;bp4 zmI){uRv_|$3#i-uEoVQ-!yR5*2sKp8-;c?&fQ16FeM6jdU=V0dP^C}B&_P=MyHFVR z2`PTxyg3M>+_L7EN6uy6|K?@7x|(3d(z@lS8Gv#=sCPl+nzT6Y4!(n3L_}B6VJZnH z3M0d#^9>BGX~(DgzSBQ{{=7|Z2KiPRNW2;d3JDcgxRq?vh=2^wWhB%H6_qWIH%o$T zhtIp4R@n(+qoLL6-#@&EXJ<1|eOlr7_k6pS>%$x#8pB3+1AwJTgwzA%p%S_bmOzGt zYNi+ZV*Nx?khUy2Ik`30X1xC6<6G@z9v(w^W!n}$(eN~7$Tr~M6hpmY5E z9cybtev`OV5TKj{U8?C_;l8b+;kEgpTTrz=4|0I^^?Wesw?NZ!)vB-9rL|dE)LV#n z<@$Rq!LV_t)nKRCIN9GwfVyc(ftUW6m26uBavcHZ_utm#zKau>bSZpQalU z^4gFE4A$4zM>W|{t)2pw*zvU1 zpCxLj1aBa`Ht@6%L{IqXqCexj<{dF0NY{dm1mG6PS{cv({;^SO<*qc!dqF;`1+-hb z8H@Qv-Bx8fAYwzD8Q6oJjrKC#&$Z%|!f{aAjy?l)B`&+$tCOxGRz+Ut&!0yYG6yCs zSh@r`i-X@9@@wqp%crGXkp022cbkXYk5yXGvj8X96$Cw*k=!6`>n0 z+YGNRbb!6yOG%#!g~3S9jWb2I7BZA6dS&h|;A1CRps-U6xilxIe8Tz_p0RgC+XMjW zvMd~DF4(W59IBlgntI=D`--`_kGIA9@acU6@SzgQX#j#r zLJ3CM?zTMSZ!>ah(FPh&Z1OcT68ama^2Bsrzbb@9ra~cndX)!|fDXi2@Z@Dv1Kw~m z+B8<@S)O88`{$)0;p%(k9XK->OSY?5GrM>pU;)rqW=tM}#8io*+a^Av3oHGX0#MZt zymJ=t(e=n~_)g@pe!ahnBezZ8&|ty}8(^r>MX*Z;poFfgt4OH_3IV)DU~q6eoQ3T{ z!~&MUbg}>pg{*RN=Fl|w(j}<)7zZuA8q5lUZXek1<%#+MUx+5+q1Ft=MyTLps0cY{ z0fE9UUQo`XZ1T}#$8wAt&qBcUbzVcZ+2zmZ=p<4I+Sp{OrmBAcsb{5-Gk^ymvFsN3 z%miS)m)S!x$ns3D7I=8H=Lsqi23w#BpWT|fK7r53c3w0@#kwG;Z32_A3?V`aWZ@xO zVU=T1yiOxi$nqyr$XO9I&Ou=bR|`I6#JGjMfB>W2>B5ijj3Ee|hgPL^| zyb#RPtov%w-?@owH+ak>0GJ40DJ9%#M3p1}`%Sx@7I~&RGGi@E*A2H<^2%D-Gm6hb zsTML2psl6hx4xHS0YDhF`kLKH(xcTGl&Av1Vmh?(TEf|6U-0~ykD$(n;7ZczqTM%= zOLuo3_1e`7hxD`uBlAXG2upnl>}_RcZ(!`G1A3j*Yfirztuk(4P5P!S2-YeTsZvOzH~ zf`=dgX?04h2+z2$v@kMx@}K%g=rPdmpv4X9`cBQwQO%1~XiF7P7QaVnL)gMaHk32I zO(eC?l_I|S2p)Cu+~Bu|yy2|?FHpr^Taf~)wFHwMizJbN%K>AwgB04d_|YZj)mf?{ zfU7Eby$)KDBOiszWWm?B6xfa4o|&wUmLQHf0Pi(gwp;`k(^_O_tRpb|D5a)=9tFXx z9ua#Fo*c+&w}GzUk?YeA1f|_LDz;ENZB^>kS`aZC9u#C>#oOmfHyzm1E}5ZQa=CMM z=?1j*JcPN3t7t_tGQ$D&%(BPUm@Cm=7C4g$QP&fghmmTg^4k&-|%{OLB698;pUyN(b?&I}L_yM{_pWgsp z17QyXNCz$frqzaZs|-0{*t4L8?Y1NE2a~Xek*d1-djLD`^WJ)6P>|wz9YnkiYnUId<6>p$$#* zhw@mc7hsa66kd7@y7MF`XUH*Ym-7?ZNHX}^|FGtr2^f>EOoJCgt`Mf$X^$>45P1NQ zqJiBpphTz@YKu@o2Fz67`bvmVP`w#=UKG<3enX_pWh|r$!!8KoCW1h%{sySI&u!b# zk~j3iE+^Zy?R+vpAv{#WQN|65^*2z_D!2l+()S1zm0=Hve=A@d47NZ$%mZ=g8vrn{ z1I@Reb#=VpmVEp~ck-)Y&xcv?Y8m%)G<~4Sr^qPjxuF)&jOqOOQ^=mg`Y@eiX0C98 zeInj~M4RRXB?B+mz59DeNl#^ztc3Z$duRA7Qn3A#X4)+%X`q`%KSC_sqz-K2Jiydb zc-1sc5UCqp)XMz@Z(rNloTZQ^gf*>rwbS5$DPED%X!t=R2zP@~B09&--GXAKH{jq;qavS1Z~_LPWb++jVrHgM#kZ%6f%rfA7I=Vp(8;wd z1dC|lTqFmZ$nod#M+~Oh^aC>yKP{7gs_JMg?}UouDtsgs`7&7Kqs13IJiSZOpeM8jK>A^QSOG1k`i}U!Uz)=>r76WAwh(aA;|~ z+1DYj$M&|*XeJ^9{R0AicSLa+$pue7aCFC9!J@nYUOV>Fr-u1;n7zhu(>Zqb8uZmr zU1$uugb1#j0%hnt==c``c!-it`FRrYM=DgFU`F*dAYf!O(_+4G0hLg}g2xqy!1@K; zQRx7S42cRWS5Ofj>`wxmnp8la>!R%Tgj$(xs$ii(@9+MP>{#x%wOoY>13}OP zScoi>K<0<`A+z;u*Ynu^XxGvXEHNyY&uo=+5T!uSi{MJ7JGCygvu&dIqs=*f7wu8PzPp7JhQ4 z$7}}gfkr?%zP`WSeFfAOAJB$AX#2X|omEjZK)&?{V3P;O8EsTJKusse!t!%|c9hJ& z@YAZwCUo&fm?p~WQ(NV>gN~n8zhrs57#JA19W{i~5U|WsTn#hTCseF(l{*kR#{$PV z@Ub44@S(NU0~s|y!|<54u+&Bhsv)5(Q1K|NF^Y0dxW3%-N6}*k?fkc|d>pbULe>hNKWl4IO&FB!eT2%LF;MOJ7I{8enNonN8&HByx|YIzIjG4lU|n%&*CVto zpUbkXYad>X1E`KfmftXo`VPiwO z7|2@8NJIl`U!$MNA}p)}#-eP>ZqMGmDIY(6tbT+lNTI-M!c7Np2VlK~7k-}eT|LAg z;##$+lLXN$5MrSKqG?6XAsYiFR=|2HXM|xblrTrRU!#pIpuBIR(a${&BAamt&0E11 zpo$qh=yC(%pv+tj9C|aFppXzjDpc?~3a|+f-fc=f9P~!x(C;mPRUH&gqOu)bk8K?4 zT~yQtPs*_!mVu28@ofeWg>R#RIkcaI8%!w|n4{SMr`ckSfnCC*oqCYo2)xHK7!Kp{ zrg#^Ccaz$iu&8q&9Dv?&Lj_x4j1xn2U8I2#QHEFr0DZqnbr37sf$0#vP!b?s6Nug6 z&^fZ+9~K%+t1?v84m&WMSMmMRi18&0Xr*zJhxTZwnIrhAH=EP zTJC^n+5qUGGn@sp(R6vDRkO$;4H4r&xKz4;{|I{jUVZYaqz_FzxZDZHvdu_Dvw%0% zML2k&V=d~@Oe2b!FXQwQn&;=dFT|{H==Dspjy9ek`|)hW@t|fRP=yC`gTh3;u-*9NwnF8y!*njWk|yy zX_l+2Yg%RDctSWgi2HyS)<6}A5K$~aIH%eT)(5keneQIo=<3YjGpFB*!8J!P?z^PQklqi)rpZ_0CN_La{mj4iFHiM_DpUXO@ GgeCxoX|4kR literal 0 HcmV?d00001 diff --git a/andrewsalij/Scripts/Graphene_2D/run_sweep_graphene.py b/andrewsalij/Scripts/Graphene_2D/run_sweep_graphene.py new file mode 100644 index 00000000..81a06c26 --- /dev/null +++ b/andrewsalij/Scripts/Graphene_2D/run_sweep_graphene.py @@ -0,0 +1,21 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for 2D material (graphene)''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "graphene_2d" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.002,fixed_k_points=[None,None,2]) + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/MoS2_2D/mos2_2d_k_converged.png b/andrewsalij/Scripts/MoS2_2D/mos2_2d_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a6c9f4cc1e4895cccd776a16e3238634ef61be GIT binary patch literal 23118 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≻W zG>#D1J_mp?SGzG-_OAke%G1XD2!=pvS|)yK1@aB z;3#tQ=FOoh7mI|&g}QBfzwP-7i?Uje#Zh4gn(FfsTprA;WNOyBq2YoIJ;_;TeWC$I zDw*(*H@@{aT95;I=DmCO0Fhh&5`3YDt*EBNg?jj_zby>z6I-+K!icQ3nIp&9#GW8kGoOK_rpt~ zoq8WH=9bu3P?#fm5F zoTNUT%=Rp$LjdpY*5T`NV`+@wwIk>+soLyg?y&8{_z=b!j6Bwy zp8uASyWOuqAtMMbAwLW`Se-?GeCZiS75=yE7m)XyL9RB1pU*PVa}{=JVVD2>7JySV zcbsBhbzt*f(Mul|%Ux|-V9BF8Y-Z_~Ga6w7ac7bD_TCS-tnR44$l(YQSF}K(F}kkq zZjIxRHqSyDoLqJUG1ls*eEgz%Fg<_p<4|P4FbWvQj~xtro4Y1mz2IFjjjA=R2RcetVo9M_I8u~K zkd%kvrRZZNt|!`?&wmyvu)F#ZHBl559t=J?O>GkKYmgL6PZdMO3Gs5Eyg zxVd#C?~4@kP%PvLV8H+*Dci=dQd;X|5wH%Z3E19;Z_)y5`M!Eag9pWiZGg}l>AqG! z5Z?648NczU4(m36w}Mr8ljnlHc?g}h3pMv2D-Zy(0m!i4x5kY>aJby$FteSQH)K`%DVJ>bMq1li*&&6R-;%i z0imQP4{Qj>!MHWlHSx>pXs<+%fcJInRur7A+g`}^@PqvA*zx1NZ{(@-^(vHdHS@!P z7eILg9UZ|N>YAF?UFov4SMGi|fZd(VOzMGnigFpJPoLhJVBF8TnB=P(u!}RYb2b#x ztAC8F&Hl)I%7%y2RSME{H2QY$?jP{p{1yz1PLc4K!@%2XQbFV@nwn9msi{n|dgZoX z0||&qeKzdZ=6YK(^T(A%Q{v;#gq-Hh7&S5Y{8zZ)FsiG0w|#<|nw^{bHn{o22M=1R z`xMONNBXRO52weZ>-p?1j;7!}WVMxjkmH<4Aaz%TgVCdh4==H@%AP!V5)hP{s%rS% zyLWr?^#pP5t2__k8BZ>Wv_*0Rf=l>steJ#%DXgt=BWi1T>~@mGc`Gh1ba_ z*%RJV?cu;-fKgvq;LkL?eLJ~1;-byB_m33o$SQyo@Pp~u+F9x7s2-{DTH*6q|H)ED zz$)4))94*!>1KXURlp23Q|-LLF^E{%%^rx0v$N~QhzGl4Khvo8*=BFVc`5tlbO26gii{86y{cepEf-^-;4AtXK zRE*+z_wV1w<0mRFZ*Se`jy3W-utgl9+3D#Y zFk!|t#oCuq@?hup3cp#)E0?|^VA(<##B>2jS4_1h_`GuwIo^Q?j6PXrGuRpKXUomg zT;6TutCW9RD^G|d_wox$@l}y|V$1CgA3Ah(Q9xW=9Ayb%Be}l2t;NpArw-hXB1dj$ zSC=XvjTi+MoJU#fDfzbN$87owG~C?E-2AMqa}0fd-2})i{qp6@X;F7+>7atj?}ta6 zn&=e|2Uy0s8!pH_CsTu<^~UxK3qpu=5-Tncii_}6JN4%yJoIO1HXTGK}%U-#1<>|9$CI06xTmZi5BsF#B_;{@2 z%YV^0dKLD)aGx72)!a)N1{FiY#O38>*G=vc_0k}mO=b`_KJBmlS!BC>$`O`|&#dJ{ zzHV8|sbHJ8|JS_EB+8)$Q!)0ve?)eYfx&*4{4~#psp-ch6pOvr=yz*f^Ga3O-5Kz; z0U`Rh=R}*$7n3Z(M{EIFMR%rR4A0GqG5_lG=g-@!n8bbL4OHCNp~mv>S0_bw7DkNj zjr@r+nv+K+5T)1L*OGjfpA?srxGmOh%mD(|0zTAjzO0|^>Qx;L4UKY3lD9btwD!M4 zrGzzg|G*PY0s4c&u)blU%Z~*dM)S0c{4|ULcFXK*eo5cFaRcRo**MIW3PE_Zve-l$^4Jr4Fj9+sR=Kmpda z+>-JIQwSYR%5?oeL5NOM>Bi?nZi}7mC<8ct!q%B|31GMSjT;X&3k~yu2NYXsAaZ-3 z#02A>2@BXsI$DH_9Qvjz#4mcBLW*7;UNap;*RsH7DatD-RlU7*^f_hfCH z$AqHUO&WXJyA??fx0V|3tDu25P|Z>k(J!-(^xjy=cbfP#o0D761)&Tjz}Im7%JBN~ zM6apS^g@menq`C*zka!PYwX&PtSL>I9f9|z>kuqKjOpvuGRkj@6U2c5e}$@n8@LVJ z@9CueayzUmEHkjxP4M%z93Wh5T?&*mHI44r0IbPFD$QC?iS4d-!w%^NCJ{2gRamLn zPjn8Y8h#B2c5{3lpC_z!+cAxdTD*gPDku6%*e`RPDG$N2f_ZsB$TNTV(7c^kZd!^y7CA5M!Dp~_88 z*FWcPh$o4Idw(KA=3ib5H#+G1%$J2TMKr_DVPJU4gM$jakD_|tb;w`X?opy>Y6UPBFCRfP{^Fd} z>h{>aAy63-(*oemx0)pOQXp^R&@Ii%RwST+nt_FE*Tpzz(;{vZ#;jR6Q!l{+@Odog zqsidt=qP3;_1TG|N6$GpIM9oEtAi(11OG=t#gG?m=q(Gos*D3iGRM!7k+xGi66u$x zfLlLhZP{@IO}zpet(NHxLzy<=QDSU7kpJIFn<^9xYg?^&{fG6k#%gLc{S6m%_nVAbo4VW3 zjdMq>t?fu#>>*;u8`K^Yn$vd}BVTD*4VH`IjkfU|lG=6!R@>9sy7HA`jUOe_5Ca5J zM1jN_iux&WoxlFn$(kU8i9-pik9b~9T(K38SA|Z*5jPyas5J1MJ5aILo#>(iO6>)9 z4>BR{b3L+Z846!>G;(d7gc?{1=#QME5{xLHJY^$eScC@^#sf?UCm<>)DPg`pW$(#U zW<QYxnoI=Z4C13u@PO!N26@ zLqg0GXgN9lX`;^md|BM0holL z;;ZBLrDcNII-8_^f1K1UnZ`4E4d({bJ-<6QPooNYn z@UzER6yBP-G#v1%s-DH%119_{njcVj=$&DLe_gEGE{NhZ$bss{NWlIsX1*K?%$ezk z`M_Ia;0=myx=5z!Gmhzy1$^#`)>~Qq`H-z_rMTJ12TV0eaRC{H@b~obTo`5s zDT8OS(q=^Zl8@v zUs|0LlX<1}0Y&`%<`D=Dp7k3q5x;ir+VZboDiCk@ZTc=lJxPy`lutMMh!Mr?smqO7 zr;kBhRttVmdFLG=>YlSR6T1LAr9x5bhO*e&D~RB0eR>YFi9QQoafS5-)P|n#PPGvz zs*14OS^o5(_+12)GK4tdYAAn?`Yg_N1niaguf&aM*8`J<>!}Y2sNG%1ZULv(1K7PS zK|~9EC`T+Y?fl%{x7anSAbgQFQ`_m~J-jQbe%nmn07JbbF20wyI59C%21J!?mszv{ z%J-mymrV`}{`AQ;9I6v2zdw$#J%*&Erb6-2wQoaKRu<140tI?WNN4~ZspdA%Enrk~ za=chhBIB{PT?ckr*bDJ>*=QsG>~m5@eMK-H1#0kbQzi!o2LlYSeWn|z`Bj4FwwM(54>gIVZw+e$>13PbSo_=!<|7S9 zV-zxkO$Z5*ackSg%dJ0;B+hTc_sGI&_`-YOpUd2YGS*7{l9l36ZBH=i| zd0Qu%WDNreAyu0I&f8!bm;iOZ^zPXN;S|1-ZV;l3t zf|V^--kry1#JNSX$mL6yI)SxD9gKnBS}!==NG3E9@CF{!?kn*fm%UL243B`qF*LW< ze+I9HlK14dZz*6Mzqj_5xpy4`w)Hr4ia(rEL^$q#ABReS_`iy4`VSQo3G~ZtW6+)6 zo*>fyyAG(gq56P&j#xzZgITR`7En5&uU_G>3BhZ)0VUKV15a7NzPqRt4+4-vO=IH} z;3#ds5_g^-9{EBmf%4fu6j2)AkwV~5;05XDo%MTbT)5(9)9{aXzshsfrhiS7!NNBE z*yBzFy8-HS?0C4t(ZNEn1pcZEk^?XsEtHcE*lc8k1Tqu6krG$kW-3Q)R{wC73qNFR zzqhv7E?vqRwd*T1D!gLy>C&Z3w@~i()~(y#-rluXb93{Sv9bO5rW_5(-9CJ{0lWEg zYpXm6Q@qFTkwU?J_zUlSu@6C{Sq>KiG}LugfB!{9JS&k!o&y#E!*Crmi?-U?{3Y!4 z{UHl{F%(v_Ejkj*EmI94#lg&G#JP_7ZS+>xrKjHjE5V*=!S^(=~y+D}J z3C`G&fF+HBysrXWk=V{sBUGKW6BY$wYr-DA#LkX>N_aYlUb$sMAi+?rPlfl|mf3pn z#YE5RAm^dwHCL!@!o27=3NYZR-zla%Bh)$W2N>%l4Grih&L1Eq=F1Tq&@}uiOX2s8 z?sU-V$V6H%GrkrUnhT{^76$_Pt|F7BRd51;w4{o)=O{CsfS|?Z#7NI#D+;e)zm6&# zG84V!pkn?%)ecZr`p1tS(iIUGqNkasO%ASp=!O zYrlbq)#lQ-t#84MrQU1Sz&^~z+7uKiX$k(D9D>eow6JzPR=|EZtEWeOey~IavX{?Z z6-j~)iG)N%`AI|eRzg7!{f(E`T)X$~tJ-}LHb*PAmRAJ4NZuM$yAKtcJ@a0j`TFxd z<^Py=+x0ux+ZTM9ip|qgQAt6|TFlI|5L`5G-+loLlDAD0bne;5^H8>LOOh}GOk;I> z1jr)P643(x($bQ5MfM`)9d-2+9fqZ!7Ay+PZoa=_DIc{vy8v#ViO3 zcOZ@eBI)eBO{dQMr;O1*+mdTg;HTs?KU9`eP*7f=47HPITy<16qnWL!08Jv=;c zNH3&jZlP7ijU<1x6FT+sva(+RhFQ&f??LAJDk-TDw$f*K3@~HfJHMLveK(hcxuP3> zlh2<{RU$BK;o|InN+0}+Mr(gWACOH9_}89nHD+0tsV`S;5}HkOT!P!8%-iF$H%5Ir zFlQJUxny;V?mm(Zp?w1a4GzN^ZB&H>y9Z7CL2UuGvG|g>a`8V^k4(2g(D3YUHc9aL zZMjB9M+3~SSyBStGj+=RU|h`s@>1si)B?P%f+Pi?q%O(@O#*mHX^*P}eg+sH zJEh}+2KqqP6LzMC47wLUr3GsPnIXp2DxtzKDPZrn@WdX#tzIv8O2<*!;)?icwGa*pbBFn`gt0r{>S#bp#@}!o>&Cf`=sbJ#S#cRfRLdI^nNsP(8uE z6A@x50%?&=rn$(9NHRwyPkF>n&9K{&WsJa232Ss4yp1srA+n?iVo^@CO&IwOnjs8K zb8mrxi0pLINg_wrQ3iVqCgAm6#kXX%K*T(P#iFT{ZK{q3vRFAmi3-x7Ky;X#yvMF$ zBm=-F&Ka0MH@p+mOh$_n-4r|E_Y?ALV+h)SDz|IH5N$40FG3R6aL!<;wiaYPuOJBm zu|j_t(fOY!o7eV9{%nKS>oyj}$AyRdSkYK#dEsDS!vP3rg~M*zGIE{;fUI`VORIA; znZR{x*j*_VNX>7gy4u}AdW=(^N4L%)X($t?GpC*{eOz^Y$r00 z^|DqU3k|n6CjlBW<|uNHBvwdBRkdxn0j)GRniESV-z#{$a47&P4W|im<9)zrxsW|00S~UCt zUkZvBzOVl&R7iezFi`Ti*WZN-v>?6Vllr?*!IB1ELjE5@1tC)O^1lle+M&k5*ZmKn z0w+3QYX1}}oM9w5^7h`p3l$t~i6t9I{zIs6h7P^)A3}vDX@uDJ$3KJ$y z|0!I*WO|d~M12Gq_k?*Sdo5HsW%lAn$ROU@guoCEFnz*<)TFTZ+gpEuRC@IKrdJhv ziqY%8%3_qD>MeZ%Gxc%yYEBkfVF{c7{V#{9XUCC8TRyXvR&O*HMDhBtw=gJ<5C2_% zMXQrd*AQae&NV2=ZkunPI~j>b^jD4`_fDOlJDNPh4PZ@gbuj7-o(BNsOXqhM{4MW< z{(tCK*H|xIx(!JSXaHS-zx|X%JXG`R!Fe+QS&4axoZSN#@nz!n|AYF=hF4xoi=1LC zpDci1OLYp55w~a(a+=N`E|S>(e=7n9nmEoOLLm20OcFQP-QFnl*afOz9TKOjE>l?! zV|8==g-PaZv2Q@y2sMlP_J8R;*5bx?GTzPCLmmo{@HKR?Ae4MtEezO|H+PBKyYil-;Ag*VU7~#p+vQ&6?J!jF5%|oeyZPf^ zNDR2*$%%;z5)u-SUEDD8|NRD3i_E>Eje>s@paSwj%UqCJ>KH&MaTJ@JoP>{8iKR-^ka0q8t*wg1h zy%LRKfe|oAns@HpiQs+cL)O!C`5%(i{A-HgZi9D=ZiV-Ol6Y>;XyH?OM#kJnYNMW5 zew!1gPwOl?QFG{;);_q@OU};=#R9+m-Ho}ylIg3szeKVw%4A9{ZMIz?SJ>LF@F}&# z1B^R@l>G;WX>@dSP>CuOIzX6$5;(wGLpUGAKat{IKd=={K|jIsPy`NDn<2B9-EG;3Hot4i;;B9wtIM zG2qbYpZ|xv0pGA8vVn3tQ>F#9LTI$s zY_8pJ{J^fGHv-zg88m=I4o#ICBGFgpfc&F+LUo*L^u#1G%rI zEc|`1hoqr5M&^}~Zx{ZzFh%2%n4r?`j|LCSuB7+yq2NK6gy4uHcRv-X|LiPA-&s{2 z@KAK*%g{>?eXKLSuOpcP;tVBAXTOxmUF*ys6A)hn&O<;Y<@<-cp|cO>i+kXgTaZTxW&NkT!BPqx*}uyh$^nC&8Tg01!48B$j(7ecZx}cT z7ajjDZwM?8gcnu*Q{E6bbpbxK{crMyKnnP#i?{zx-jEDTdEjxH|CBexgCNC`@bB`5 zHW+98hY#=g36{Vl+1PUNz{3J8A^yhSv;%yg4RSoj5+QqBnGV)JFazdX$#f_AV2nZ+ z$b8(A-}ayqiue<7+xc(z#A*9@Z-l>k57mu87W7v0yS|Eoj(qhC??e@q?G$fonh4E zuDb1>=$>~1xdU34i=ZUo(77BWU_p)Ym{Im^-5oMY+Wj$#U68M!sOi|&Bi8eun?fTA zk=SR*%m=7qum%}lTDkos%C@b$%g$>k)<08XcOSB|06<#_96b}x514~t!r!Rz8r(GnfyMX zS;bq?Mg$apmzyqm(_h}0JyVDFj94=meYIPMr?CTamyEqiLbN>%7FvTkXyc6b0Iwvno~TK%D8c=uSO;QWhV4};e^30a4wEq z14U8yz-y($=ANe!OE*^nd6e8^0J%oVbu2Vh@tJ-;0t^N#zxxr8RiI(Ve%Qjf5_6Wh&<$dt4;ofQ8a@&Gbnmc>$bJQw7I}+ zxcz)24Rr=c230-JHnxJc&T*D=ob2DIxu;JL15RQEEe$XsbA9=7Zq=x!H7!iME6$;A zFl$0NPC$`f*tL^6T0a%~PGqQCy8Z>v2+kx7+N%0S-x2fDc&;fbAScgQr{5hgA_Kh? zfLV06UGACt#ipdJMA_`b<*rpk#sCrUq_&j=iI<5>ya?Ru-}t(4w7UF8KDuS3cB+T$ zuP!D1%C{+~EUCp&w0mP#6EUGt$lB?%m+HwZ9FL3NE*JWyo`)QY!OXVZWt z`Bno|Dk^V9l>i{2X|IB!GEj;EUQuX46ELPLL7JkF>rOfj4UH%x|1wv~ z^`fA6&oCssHRK4NTAU9FTBQf-T4+%~%zO1k<}?>oViJ2P%G^P*N%aq(H@X08hYH7F z?NG53s14Lrm*qVo|0$s%>D`4QJ8sCPuov`6uz0=6ex4*p>@-w#+Lm}A@Xlfl+=8QL z$32FYc*I0Lch@RPJRw9lQi0+9h6((KD!G5wI|nq$m&4P`Z2EIBThRgWz@`41CfU|e z55&cw?Xh>InG!bnrhLQeQoGf6! zD~$K2>xVQ%xPrGMi4nVSwf*w8mKIegAb@^Z-M|19M#!qdW<_&4Qpw#yf2UHWV*0GjajEd#)qiN4FS^U&rOUJ9*DlTiHBs^5yNsjXcD zWx_0~L@)^x>l406DRh)kSpjEW-G`C+LlEl~P6be;wtiXSLG+0UI-dX+^@)`&zeiAHxy;liu@38}eUY7`&n;!o zkd_WB`(*e1YA(Y$axS7|#S4h=70A(D-<;IgvhO$MXv^|)`mx!}h7$(bYF9WT;@Fm3 z*QDR|N!)DDVl_d7&cQ$>;9mx$Z)%_h%(Gm2`GS#*oPUf{6O_kVl_|J*SuhcVequkh zS&;z}{9p*Mx#cuNuiQ$fLcT-4hr2j3x-J z^de4E9WL*LAnOIdN+32q?$mYdO9 zk#=%@Edhq%Xo-*S#6K?<&cMdk>{i@q?0A$TZs!@pIq#=Da{6cb=B1!$0+dfdKT0Sl z?IPQ1Td0(7?90qWcX~~)Ua&9MJbFWx0tgyZf^aXY0|(4Ne5T{ca_l#=DAONSzt^RN z4fk4?cnHcGTR%LST^>zY{^eR?@&?gA{pb6eG*!%?>p-Ry-F|lX?S~TvjlT5SY}Ug{ zC7{}1#=sp);?CihV_X#U&;COJVEg%AE#mI$ODNVtmyUk-G~CvD{?BdkV6oClMQb77 z4SqBCxv@mJszl#mUd=sim?8hTke>ZOr{+;40UF0F>HNj@Q&GPc{xTCXr@6dmhp2Af zt>&gcpX^tD6)$YKYY7j~F-H9LNGv3U zGr0NRa5GF6qsm7sxcBfOKwgXOG$%pjl#Ppu=u|KV`kN*fab6Jh5h{G ztbJ7Q;AIcNh~W{1W$w6HVUpN)+~gX1yg_HXk{^<_JR*Fvha*?xe~{;F?8Efpt&)B zy~7+j(0?qLm-{c83-tPWSo?%^_a)SY#r=+UTd<$vUBBvAT~aTyGO*CMFXrLXXZMBQ zZpHbz3op5p#;J*#Yje?)pAKXXP3Cm>_xcQ%glW(%=O}HvfN#r>^vwvJDUdKcjy>PR zf?v)5=(2mgZ9A|o|ue?~9Fz_eOOO3E3oJnhMH$ zMkBAxiMh}3Wjbgb7to(bI)kI{?0!EPGZv$m!MpIdm%_MxuVguoLSezYDz0r=bZvUb z@rM_iLN7_SaI3w!7p9+NDb~@=`|Yx$h)7oNA+xD&EKkD8fp*a--qCyZAW3$(7mFYQ zcX?uzM%-Tb{@CFP?hy~r(6}hsw^PV}x$ih_2YIwc6b9%2yJRxYL`$oG%+PPUN1RU6 zP4iZPp5B^ON=+U1l166xuXI}E5np>|9-EhFUj~T#5|ruyZ`;C*pywUb?LH{}}zx69ZLPFXz z_?~>U3JHK2BsXY*8+3~8!q_|jq0dfnSbt&t#%EzTwz}$ya>{@-QT-Bh>Fq5?*T-+r zpq=vu9wTo+e%A`cL@}TB9>{IfRaBhX{SK3ntpR$<0Wul=Q8cH)YNr%cc2?GBjH0^w zD^OyuLCt$;%G97UroSRNSrRl1AliBXGY0hJY6B6KzT?6oWKG#{NW=2_x~8XRrT<3t z80*E0)A3jrKRp@0`Xn3B7U9nV*$SHgjuSd3XYSv7fWvyvRevf=!L4?XGWt4>PQ?3{ zq_3~MC*z8D@$oS*F(-67TUS>HBNV}Hv#MoSj$qt|YP?(?gsSQ4=73xSj)s^6m9cH7 z_?Z88KH47-la!T{BZms63Tl?+>_FHFRp$sM$k}qB4S+)8T#wV#+Q0WZz+~x`n1?J> zO*2$gRn6WbWyso~fg1h`s1jox>On;BZ3WUER6MT~FO-6I(~tTAqlnhV;g6d|MMbC> z2371${`m1n4FwNky?j{#4qhmiaH576^2fE&O8D1+AnYoPgpHS1tvf?e4Pfmk=;mA) zETDYvJ(rz%f`Osn=TBR)^#K#iuTOMvu0X7J#q?HrsLQT@R65${2%^;6?(Xgn!Zv~> zcCLZh!%-U&i|+bkeJ%wyJ5ZElyK?0#=FEu`uJ26RVt8fX?1(bXZ8(L)MX%bxgox7k z$LE)y_IJnj6I^z|1fD~hA~5%wT{DlH=`?f!+PR7aQ_}M=okr)gEp)bp)78%g)%JY? zMwia*C&)jWXGUv%($;^E?eAH5dV8ZJyIY+@%NQ@;&eq-}SHKlvkA>kZlgx|^T3{8R zncs3rT;B*QJhrxr9osX14)TsoP#@6lRR01E05>FBAwUsJg%?3}Ub?q&t*q9?z(iIW zlnH5}y=6996J`B|HkxAjP9d{|(zVtOVlGXEZa|LnZ&{4?_`&x0v7mHO(x$n&S;g78 zSUU8~;5gojwjkn3>I$oV7`{s(mIxWefW{GLgmSCwiCV{}+58MOGmRbD5tJFAR#u>hyP z_Tjkl3=H*wA$0JrEUbLK5N6qvr9#VnClK9oyT3aE`ards0=*Dq<^8eXRUZp8c#adG zM^Kt?K=DjtWNmr_@q!bDruKC7|K~~^vDTby&aV4jq@Crf? z&?>aOZyslmk&&rEIpI?XT_$uc=sDD`MS(x;s8$9GLDhDsT$<5$=^m^B8G7u=^hhuc zi$M=02@~JC1%1G1a|f_BOuhQmKshD2Btgmy8Y6l5ClI|xGtGj+q>tWX*lBdVvM%%+ zNZNbfJs_n!F{Lz?32qGhw#cG;zF&w}AQEnkVPWuHy7neL-4c4K=SFL*Yvr8}fhYwf zM(|xZ(9KRUbWub^54x87ph-O)?U=dN!2rT{w7JaC&~OWmu$i2n9~tiYN(`OK;k0XE zGE(c`V9IYkJC&W6_XShqzw3>5YK#T!*Ltu2)L9eq@W4Oe1i7@lOG)4f*$Y#s(F-B08fOpq|0<9iggT5 zyk9Fz`uL2RT|&aBeyg|e$NYSLVcnKohs1sjT9b8IC;_Q1+MWkX76q1vR_bQEGjX6x zRdaN7tlb{K(H=+Whk;VchbD`@Kk}g=paie(AN`H$U~GgHAMg&t6z9KvY;;y%6Zqj`9a6UE_9kc2I8BCt9`8 ze|HP*WhwSJtqEqnxq}rBNoZjlI!tTf=%qQ32td1Jnd_`7s8kgJ<-GNHGOeMb z!wLkHPxLoOXp@iSw;!sSDkAB0t|U5`+&c`xA1YE?K(wI^ep$*%;;7~T-1|%6?u$TG zqte&ql@&E;)Ide-mn0;{Fm>xnT@Ys+;HV2l&{ko9+HwP&FN?}{PeNbGvyZBoyT2xy zY(PobHwm&w3IbyfE}j?g&)DMpi7NPFo5p|P=m3D z^E=SOGPor;_UKJ8gZC}aI=?Mg1o}MDZ(RosbkND#DYh|uLDu{GlZ$Au05Nh7K&-9q zq&-u5QGe)+ixu-J@9OT(pNFHk8n#@-Ysox86M*NrCnnOMg$9jQP~I*oND}obMte?C zzzI7I`Wn9i>zQXqV2KbRy3nt1&zL9X`7{XdYOrv=105Vl#=}|tlg9)Q&?h(-+zl$Dhy(8h)Cy;+bh zk9bJK;ue9z*aV!~Cph=)IauE54$+n8Zj7?hAeIY(x>~940CCR|kLqJGF19)8; zICY>&U&h2(mD=>TdqSh(a}d{_204iUz>p9i&h^5&A-r5Td$z$7Y5>ncoPU9rw;RUn z30NZpP9CB2*;wEg-(6Kp1K9lu&@Jc^jX~c`3uqwgYoU>ZjSn<}_9eLh5e@HBQB}SB zFgRGRa30uu6W7Jjk;;isk-Yga=rKiS+zC43Xt5Ozf*@zG-Q3!uU77BX=oq_fNS+<@*wi-d{wc`QXE_j5SV<}@rx;f96l z@( zxQ*Xm#b&Po@};9TaDD0K1%eMZf2A@dsz8_x!TS#$guoGjxGe~%!`yLg($E!aOv6v` z78-e_p^3vSF3uj)ya}i2_`HindXmX#By+iGg>XM$jF3ZUSQNBE^Ac3Rbf;+ZiATtD1sG+NC zE!Ga=8vV>VXx5$!m*>o08JTSb$IzK5=7WmCd#|pe4h&7d2OU6Y65Y+Iy{~Qpu+rb&_3+IM>g8Z%@J?ZC+Ab=i#Y+zz#_8wCmH^aqumZT^c#r2Ji zjlutRL*&iR%gd84tA|ruQ11o4uEZY}%n=%x=7+1gw+!n2cYgrxF%VzbA`+4?BqZo$ zgNhqRM6+oLwOG6F=|)qYUau)wpMnTu8nkbnAF7e4CdeChLmp0EP7YewZ588%e&w0? z`1t7U`+6U-dOT#&y9e!BGXM$mOBPleoTsk#h(FNsp@ixfwe1A#aV=9*(*!rzf+0B- zbtaIb)b~qKiMjS+I1Mn``@T~hW-wL^Of^3|9zApk&H_MTHQI$Hn49QQ)wxFM=nsTd zek$bf(7n+KmC0=Ix-)r*)6an`uzsv?HUcT-nND!>c^(86cGwIM4?!bu`MY^9AD{oP zm2-V*I*!8lx|r`81VuQdLLw>%LefwxyQo;CLZ-dY>Rqy>qM>1BlLk_mX-H%jHJwc? z-2$~~Hl3L=Y zI56shmCuYD5bLlB)IwXb%M&X;M<`jnSk;*?n`wf*^)ZE>zgjd7LVg_Z*DB*!(Z`X} zN=Ba(I`q9;QCWm1-aK2NqPJzg-RO6?U+Ox6n+Z#qgsUEnh({E>fgU#aPCd0m4D|Pl zFj@p70pA;d0E^!?bDk@~w$lA&V)?3JweynyD0$pV5PfKjFBcbu99M6awBlu}!?q>O z1x(sDF{MOiW&@rCM1LVJd!%^pWKnEASmij?pj#w%?XNx!-HqTA3rE;8OGn8mds)i8 zvvHV1O&3?nP@O81M7pUf@;TdpuF0qgjsA6$;>W{u)q-af&Wm^G)f=h18MLr!okq(p zT_-0c`~b8}J8|0}6&si<{2l%6PN|u4S%HKVswfYsd>9eSm^+e3%^->$yWJjL@a<~T zy{KZG2=p>!Wq2q`6&WhREnH z0dCr2rn(M_TAuNn%mqE?`{rw-3q2$5b1VKuk%2P&xhr2U@DHbmG)xjgVv1UOe~+sy zTmz)_lP_Nz8rq6QRc7B}z+}@WD#gs9BG-3)yD^ny(TPr294!k+3D^lxy_LEs)B6Qa zM&Cz`$ztHP*Ui+3*j0v(!s&=S?AMgz3AJSGdn6_uJpqF9m~0RrW-#$L)Px1d?xIfP zvo==(n+;HUSp|ceL&&j$iKb3k^ZjUBJSp0_YH{ksJ5*ROp0d0&l~4fqRE@NsNr7fM z{J7gcJ85=_gh;v-%GfT}=Fm8CrnFU7T5dVvY^X`0z!s;Q_u1^@Wvbj%z`h&~Dvkx% zkv-ns^h#nJNpm1M!9l%6J9J|aG9_~M1*68n?1^f-qV$3wViJ;YDmggoKHSgvQ4!M6 z(UGQIns?ofVz3>lLB6 w5y2x5{8&RbU0S{g!v#eb3*7(lMa_~jsAVYZ{f?m5P`iqx_~b*z1E;V20Sh!c4FCWD literal 0 HcmV?d00001 diff --git a/andrewsalij/Scripts/MoS2_2D/run_sweep.py b/andrewsalij/Scripts/MoS2_2D/run_sweep.py new file mode 100644 index 00000000..35796310 --- /dev/null +++ b/andrewsalij/Scripts/MoS2_2D/run_sweep.py @@ -0,0 +1,21 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for 2D material (MoS2)''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "mos2_2d" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.002,fixed_k_points=[None,None,2]) + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/Os4Ru/os4ru_k_converged.png b/andrewsalij/Scripts/Os4Ru/os4ru_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..7f23392e6ebc9bf94f23c9566437c74b2d805e9b GIT binary patch literal 29128 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 O)xrGik8($=pZi}hs6<2n delta 1323 zcmZuwZ)+4s7@wJ)-J83;e<6uUYp79MakULrlok}LL|SMe6$OPwSeBj1NLp~%u@{~SgaO%SJK&}j#WRH<2ifXUc^N}-j zr1KbAb@Lnj??R*GgSc2L+ey~nQo5u1iHg#0UX-oziHx@5bW@qO^V7+ImpoVLs`elp z%@JIHBcf-_bLW9CK*-wwo-p%#nf_}Y@?UPwz(K(DG%V%R*ep7dDlKA->JiK$qrKYg z%V>f&XD+y}R{~lJ^#eo}W$S^ft4MWnH7I#6>-M#eve<~%mF(*L*xM+=ckSy2Fi)9n z@9S#7RmH7xyapZRZl9MF9l3fYu3=^xOrD(kXwK*HK1!b#}g zBSFhdiRHZn-H!+EF?O7`;sx0!hja*LDLlA)M4tjpz)CmY94M_ZyKz-8*dtn2qbNz^ zJddKc)wjI!XcHZ@>F(lpcc8q*a@IFrOts7_FyH0 z4e(|ZYaQ=gGI>a>&dp|NHbhT0(DSC5?-sn<#5HaP()WSwhWpM-|br zHri52kwJU;=rQ@*s@qvBqGAV9yo&6`m}$LEG;!AaUOzqe6>#!8fN+~s*pJiQD`shG z-q6OvnS_FFJaCV58K#~C2-xn2<{!TBDP|l{8^fdvN; z>Ut3teH!5m!dV1tS6R=C7>cr?inUC>Es4H{j9Uokt!y0kF;Qtc?xpR?Ii%pj-P0cf zqL?=U@a5Jia~5cAy6szCAWFBtxiQ!ox%nJeqhG8U_oY_bd7O58OWjPjP=jy7UYp4N c|G%UZ*Ece`nW`IDJnOJ2$f($iHtEdb8^r1s;Q#;t diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index 5a069e8d..e3f32cce 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -77,7 +77,8 @@ def get_effective_k_point_weight(self,weight_type = "uniform"): effective_weight_array = 1/lattice_array #now in reciprocal space return effective_weight_array def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = int(1),k_index = 0, - fixed_k_points = None,weight_type = "uniform",run_prefix_str = "",max_iterations = 20,talk = True): + fixed_k_points = None,weight_type = "uniform",run_prefix_str = "",max_iterations = 20,talk = True, + force_energy_decrease = False): ''' Finds the converged energy ''' @@ -90,7 +91,7 @@ def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = in effective_weight_array = self.get_effective_k_point_weight(weight_type = weight_type) run_counter = 0 #index for convergence lists convergence_flag = False - while (cur_convergence_delta < convergence_delta): #absolutes taken in case convergence + while (not convergence_flag): #absolutes taken in case convergence if run_counter >= max_iterations: print("Max iterations "+str(max_iterations)+" reached. Terminating convergence run") break @@ -100,10 +101,11 @@ def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = in if (run_counter>=int(1)): cur_convergence_delta = self.convergence_energy_list[run_counter]-self.convergence_energy_list[int(run_counter-1)] - if cur_convergence_delta>0: + if cur_convergence_delta>0 and force_energy_decrease: print("Energy increased in final convergence step. Terminating convergence run") break - if (cur_convergence_delta>convergence_delta): + if (cur_convergence_delta>convergence_delta and cur_convergence_delta<0): + print("Run converged") convergence_flag=True break cur_k_iterator = cur_k_iterator + k_step @@ -178,12 +180,13 @@ def make_report_figure(self,filename,output_directory = None,x_axis_type = "iter elif (x_axis_type == "convergence_parameter"): x_ticks = ax.get_xticks()[1:-1]# removing edge indices that give left and right bounds of axis x_labels = self.convergence_parameter_list - x_tick_indices = (x_ticks-1).astype(int) #shifting index from iteration 1 to pythonic 0 + x_tick_indices = np.unique((x_ticks-1).astype(int)) #shifting index from iteration 1 to pythonic 0 + x_ticks = x_tick_indices+1 #resetting after removing duplicates x_labels_subset = [x_labels[idx] for idx in list(x_tick_indices)] ax.set_xticks(x_ticks,labels = x_labels_subset) else: ValueError("Invalid x_axis_type: "+str(x_axis_type)) - + plt.tight_layout() fig.savefig(full_filename) if to_show: fig.show() From 141980f61a568dfaff90e4279a46d6b4deb3ab97 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Thu, 15 Feb 2024 17:45:04 -0600 Subject: [PATCH 10/15] docs KPointConvergenceTester.findconvergence() --- andrewsalij/convergence_tracker.py | 35 +++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index e3f32cce..c51e21de 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -80,7 +80,40 @@ def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = in fixed_k_points = None,weight_type = "uniform",run_prefix_str = "",max_iterations = 20,talk = True, force_energy_decrease = False): ''' - Finds the converged energy + Finds the converged energy for a given convergence delta for the input from the initialization. + Creates and runs in subdirectories within self.output_dir scf calculations for target system. + Convergence defined where the latest decrease in energy is less than the provided convergence_delta. + Convergence iterates over a single k point index (default: first lattice dimension) from k_iterator_init (default: 1) + in increments of k_step (default: 1). Terminates after set max_iterations (default: 20). + :param convergence_delta : float (in units of method energy) + Tolerance for convergence + :param k_iterator_init : int (default: 1) + Initial value to begin the iterated k_index + :param k_step: int (default: 1) + Value to increase the k_iterator by each iteration + :param k_index: int (default: 0) + Scalar index of k points to iterate over + :param fixed_k_points: (value, value, value) where value is int or None + Optional parameter to fix certain k point values to arbitrary integers. + None either as a whole parameter or in the given tuple index implies that k point + value increases with iteration. + :param weight_type: str (default: "uniform") + Scaling type for k point iteration: + "uniform": + All free (not in fixed_k_points) indices are identical + "lattice": + K points scaled according to integers closed to reciprocal lattice vectors + :param run_prefix_str (default: "") + String to inset (e.g. "mpirun -np 4", before method call (e.g., "pw.x")). + Enables support for method parallelism + :param max_iterations: int (default: 20) + Number of iterations to run before killing convergence + :param talk: bool (default: True) + If True, outputs progress to console + :param force_energy_decrease: bool (default: False) + If True, kills convergence if energy ever increases + :return: np.ndarray (size 3, type int) or None + returns None if run failed to converge ''' k_iterator_init,k_step = int(k_iterator_init),int(k_step) if (convergence_delta > 0): From 213ef1c0b260605741cf2d93294340f1b6b281c8 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Thu, 15 Feb 2024 17:57:39 -0600 Subject: [PATCH 11/15] docs method docstrings io.py and convergence_tracker.py Additional information for method doctstrings --- andrewsalij/convergence_tracker.py | 26 ++++++++++++++++++-------- andrewsalij/io.py | 18 ++++++++++++++---- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index c51e21de..393df9f7 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -4,7 +4,7 @@ import warnings import os import andrewsalij.io -'''Convergence tracking of k points''' +'''Convergence tracking of parameters, particularly testing for k point convergence.''' class ConvergenceTester: '''Base class for convergence testing some system''' def __init__(self,path,output_dir = None,job_type = "pwscf"): @@ -43,15 +43,24 @@ def _initialize_convergence_output_dir(self,output_dir = None): class KPointConvergenceTester(ConvergenceTester): '''Subclass for k-point convergence testing''' def __init__(self,path,output_dir = None,job_type = "pwscf"): + '''Initializes KPointConvergenceTester as an instance of ConvergenceTester + :param path: str + :param output_dir: str or None + :param job_type: str + "pwscf": Quantum Espresso calculation (pw.x) + ''' super().__init__(path,output_dir=output_dir,job_type=job_type) @staticmethod def create_k_point_array(k_iterator,k_index = 0,effective_weight_array = np.array([1,1,1]),fixed_k_points = None): ''' - :param k_iterator: - :param k_index: - :param effective_weight: - :return: + Static method for the creation of a np.ndarray (size 3). See find_convergence() for details + :param k_iterator: int + :param k_index: int + :param effective_weight_array: np.ndarray (size 3) (default: np.array([1,1,1])) + Array for weighting of k indices. Defaults to uniform weighting. + :param fixed_k_points: (value, value, value) where value is int or None + :return: np.ndarray (size 3, type int) ''' k_index,k_iterator = int(k_index), float(k_iterator) normalized_weight_array = np.array((effective_weight_array.astype(float))/float(effective_weight_array[k_index])) #normalized to iterator @@ -65,10 +74,11 @@ def create_k_point_array(k_iterator,k_index = 0,effective_weight_array = np.arra warnings.warn("Manually overriding k points failed: defaulting to initial values") pass return k_point_array - def get_effective_k_point_weight(self,weight_type = "uniform"): + def _get_effective_k_point_weight(self,weight_type = "uniform"): ''' + See find_convergence() for weight_type descriptions :param weight_type: str - :return: + :return: np.ndarray (size 3, type int) ''' if weight_type=="uniform": effective_weight_array = np.array([1,1,1]) #no special weighting @@ -121,7 +131,7 @@ def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = in convergence_delta = -1*np.abs(convergence_delta) cur_convergence_delta = convergence_delta-1 # initial value that must be lower that converged value cur_k_iterator = k_iterator_init #index for k array construction - effective_weight_array = self.get_effective_k_point_weight(weight_type = weight_type) + effective_weight_array = self._get_effective_k_point_weight(weight_type = weight_type) run_counter = 0 #index for convergence lists convergence_flag = False while (not convergence_flag): #absolutes taken in case convergence diff --git a/andrewsalij/io.py b/andrewsalij/io.py index 66723446..f1c6967f 100644 --- a/andrewsalij/io.py +++ b/andrewsalij/io.py @@ -25,21 +25,27 @@ class Job(): Base class for a file to run calculations ''' def __init__(self,path): + ''' + :param path: str + ''' self.path = path class QEJob(Job): ''' Class for running Quantum Espresso calculations. Extends Job() ''' def __init__(self,path): + ''' + :param path: str + ''' super().__init__(path) self.input = self.load(path) #PWInput object self.output = None @staticmethod def load(path): - '''Loads PWInput object from filepath''' + '''Loads PWInput object from filepath (str)''' return pwscf.PWInput.from_file(path) def update_k_points(self,k_points): - '''Updates kpoints_grid for PWInput''' + '''Updates kpoints_grid for PWInput with given k_points arraylike size 3, type int''' k_points_tuple = tuple(k_points) #force type self.input.__setattr__("kpoints_grid",k_points_tuple) def update_input_sections(self,update_dict): @@ -49,11 +55,15 @@ def save(self,path): '''Saves a Quantum Espresso input file for self.input at path''' self.input.write_file(path) def run(self,output_path = None,prefix_str = ""): - '''Saves and runs self.input''' + '''Saves and runs self.input. No return value + :param output_path: str or None (default: None) + Optional parameter for output .out file. If None given, defaults to same directory as input (self.path) + :param prefix_str: str (default: "") + Optional parameter for prefix for running job (e.g., "mpirun -np 4"). + ''' base, ext = os.path.splitext(self.path) if (output_path is None):output_path = base+".out" qe_process_str = prefix_str+" pw.x -i "+self.path+" > "+output_path - #TODO: add parallelism subprocess.run(qe_process_str,shell=True) self.output = pwscf.PWOutput(output_path) def get_output_filename(self): From 706b7c272011746eca9fef3a434517bd8bba2bf9 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Thu, 15 Feb 2024 18:22:15 -0600 Subject: [PATCH 12/15] tests create remaining tests also: docs: remove extraneous imports and licenses not used --- andrewsalij/Convergence-Tracker.md | 5 ++- andrewsalij/Licenses/ase_LICENSE.txt | 12 ------- andrewsalij/Licenses/scipy_LICENSE.txt | 30 ------------------ .../Scripts/AgCO2_2D/run_sweep_agco2.py | 21 ++++++++++++ andrewsalij/Scripts/BN/run_sweep_bn.py | 22 +++++++++++++ .../Scripts/Br4Ca2/run_sweep_br4ca2.py | 22 +++++++++++++ .../Scripts/CCeOSP/run_sweep_cceosp.py | 21 ++++++++++++ .../Scripts/CsLaZnTe/run_sweep_cslaznte.py | 21 ++++++++++++ andrewsalij/Scripts/GaN/gan_k_converged.png | Bin 0 -> 23891 bytes andrewsalij/Scripts/GaN/run_sweep_gan.py | 21 ++++++++++++ .../convergence_tracker.cpython-310.pyc | Bin 7588 -> 10411 bytes andrewsalij/__pycache__/io.cpython-310.pyc | Bin 3256 -> 3673 bytes 12 files changed, 130 insertions(+), 45 deletions(-) delete mode 100644 andrewsalij/Licenses/ase_LICENSE.txt delete mode 100644 andrewsalij/Licenses/scipy_LICENSE.txt create mode 100644 andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py create mode 100644 andrewsalij/Scripts/BN/run_sweep_bn.py create mode 100644 andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py create mode 100644 andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py create mode 100644 andrewsalij/Scripts/CsLaZnTe/run_sweep_cslaznte.py create mode 100644 andrewsalij/Scripts/GaN/gan_k_converged.png create mode 100644 andrewsalij/Scripts/GaN/run_sweep_gan.py diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md index 51e55bb9..3f9e96c7 100644 --- a/andrewsalij/Convergence-Tracker.md +++ b/andrewsalij/Convergence-Tracker.md @@ -3,13 +3,12 @@ Dependencies for this project may be installed by running in the following install script. ```bash -pip install numpy matplotlib scipy +pip install numpy matplotlib pip install pymatgen -pip install ase pip install pydantic ``` -Tests have been run on a variety of materials, whose provenance is below: +Tests (see Scripts folder) have been run on a variety of materials, whose provenance is below: Materials Project (DOI: doi:10.1063/1.4812323) (CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) diff --git a/andrewsalij/Licenses/ase_LICENSE.txt b/andrewsalij/Licenses/ase_LICENSE.txt deleted file mode 100644 index d09fccda..00000000 --- a/andrewsalij/Licenses/ase_LICENSE.txt +++ /dev/null @@ -1,12 +0,0 @@ -ASE is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 2.1 of the License, or -(at your option) any later version. - -ASE is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with ASE. If not, see . diff --git a/andrewsalij/Licenses/scipy_LICENSE.txt b/andrewsalij/Licenses/scipy_LICENSE.txt deleted file mode 100644 index 0da54cc8..00000000 --- a/andrewsalij/Licenses/scipy_LICENSE.txt +++ /dev/null @@ -1,30 +0,0 @@ -Copyright (c) 2001-2002 Enthought, Inc. 2003-2023, SciPy Developers. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py b/andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py new file mode 100644 index 00000000..04129cae --- /dev/null +++ b/andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py @@ -0,0 +1,21 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for 2D material AgCo2.''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "agco2_2d" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.001,run_prefix_str="mpirun -np 8") + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/BN/run_sweep_bn.py b/andrewsalij/Scripts/BN/run_sweep_bn.py new file mode 100644 index 00000000..16d96d83 --- /dev/null +++ b/andrewsalij/Scripts/BN/run_sweep_bn.py @@ -0,0 +1,22 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for boron nitride.''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "br4ca2" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.001,run_prefix_str="mpirun -np 8", + k_index=2,k_step=2,k_iterator_init=3) + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py b/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py new file mode 100644 index 00000000..44fafa86 --- /dev/null +++ b/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py @@ -0,0 +1,22 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for Br4Ca2. Also tests that lattice weighting is working +and that k iteration varies well ''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "br4ca2" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.002,run_prefix_str="mpirun -np 8",weight_type = "lattice",k_index=1,k_step=2,k_iterator_init=2) + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py b/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py new file mode 100644 index 00000000..5a471630 --- /dev/null +++ b/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py @@ -0,0 +1,21 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for rare-earth complex (C2Ce2Os4P2). Also tests that lattice weighting is working''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "cceosp" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.002,run_prefix_str="mpirun -np 8",weight_type = "lattice") + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/CsLaZnTe/run_sweep_cslaznte.py b/andrewsalij/Scripts/CsLaZnTe/run_sweep_cslaznte.py new file mode 100644 index 00000000..c48bf705 --- /dev/null +++ b/andrewsalij/Scripts/CsLaZnTe/run_sweep_cslaznte.py @@ -0,0 +1,21 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for rare-earth complex (Cs2La2Te6Zn2). Also tests parallelism of run command''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "cslaznte" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.002,run_prefix_str="mpirun -np 4") + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/GaN/gan_k_converged.png b/andrewsalij/Scripts/GaN/gan_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..acc20b8cdfa219a3115b07ff5ea8faa9f25da3b3 GIT binary patch literal 23891 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 Ang9R* literal 0 HcmV?d00001 diff --git a/andrewsalij/Scripts/GaN/run_sweep_gan.py b/andrewsalij/Scripts/GaN/run_sweep_gan.py new file mode 100644 index 00000000..b656cf30 --- /dev/null +++ b/andrewsalij/Scripts/GaN/run_sweep_gan.py @@ -0,0 +1,21 @@ +import os +import andrewsalij.convergence_tracker as convergence_tracker + +'''Script for testing that k sweeping is working for GaN''' + +INPUT_BASE_FOLDER = "/home/andrew/Documents/MaterialsDB/pwscf_files/" +RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" +os.makedirs(RUN_BASE_FOLDER,exist_ok=True) + +compound_str = "gan" + +input = compound_str+".in" +filepath = os.sep.join((INPUT_BASE_FOLDER,input)) + +run_sub_dir = compound_str+"_k_sweep" +run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) +convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) + +k_array_conv = convergence_tester.find_convergence(-.002) + +convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/__pycache__/convergence_tracker.cpython-310.pyc b/andrewsalij/__pycache__/convergence_tracker.cpython-310.pyc index d436722fad9fdc50b2c28f8a720a25dbc4244fe7..b982b9360e3c8a21877fe308f103e3836b9aeb48 100644 GIT binary patch delta 2895 zcma)8O>f*p7>?7Vq?Xu0N$v6b@x0IT%-p~H z@b+SI{CH~$*N^wVm)9Xm% zWI$JwcvI@3#D707J|FE#s3FSa!k#%p~y3VKPm+^DAJMNG1x#G&eSX=Z7llab?*da44)rZMJMnO{(b zh(pp@%s`UK)nKTAFBf8s~D}| zTWg#ae4vp|Ebh^&)FTy_;13WK09zV~ZNIFTY1H`Q!ntnQU-58e=>zK1AW8)CBNrr9 zrm3u>gl=38i*z-K00X-n3$+0qTSH#<;tZmZve6NTsC=}N9HhJ^hse%DsW1*1AI7tm zPNnD#*MAxRkOY@FJgz&eb2bTw9ut9sBW49Tt?iH$!FrVs2(g{zSl%4OxyjB~V9!EV zb9TN|`ijfr0%HdNHTKv1zg;MQmJM-hA3I+V5jl&KJZ|)f927_mkB)0XI+t@+DfF7M zT4<;swsI)788e(?ve%IWA>o8>PlKW`=0*yPx|&ew7B)-qzNEYwr4g$e%Cb+B*BEek zR|poDnk;Q#jQqHiVsYVg-k55;viSDFIq=rtypl;+E6@!A!|YF_uft3}=E|-_5#)$n zuM;PhI~?Q_TSk{#vJ{bPP(i#j5PDC&o5d?`2UF}TGaugIq ziNQ-u5l)$_R3}(n8^@+|PgAF?gaC*2acaQap$OdsZ9iI8*9qAdIZ9F;LLymqH^Uj;keSPb`DZxe8)R$hiL@3*qi8W;(!HJprbLgiJ(8!C#pzlIU*PijT9(WkW}K}+>f zWL0N!l2$hdgoinf2T8^|lOarE$OkhX4dNR}Vt;J39Z0|QN$edZ!w)38AtG~VHYDQ) z%((m<#;OKSH!aCKO)Z>p@@E`JSedqa;1t84mS37u@<_x`4sfz72^b_t%j4_by~WGZ z^Pli(;s&2&-rW1+g*!9ey}kEe`quNl+xz>}Z`0nddq2N?a@u=TJbv}b^T(FF)~UsX QmN)IS{yBTIc(U~1Uo*FqHUIzs delta 249 zcmZ1-xWt+-pO=@50SFA+&ZV-dZ{(}x5Ml^s&}8z{WGZ3-iWjj0iOH>;mW+&(_jA5t zs>+*e$Spj1zc4$a6_6z{*_T@Z$U4U&y}6o4o{`%CsJvJXNC~APsIHL)kXJmkwiLEZ^*=upQ{4&HogiGV$&NNizWn5r!%|kSUuvRNpf)E}Z;B a?GHb*3?r8?A2$~x6C>9@IgQE88Y=(-J3AQw diff --git a/andrewsalij/__pycache__/io.cpython-310.pyc b/andrewsalij/__pycache__/io.cpython-310.pyc index 5f52baf3929e7c9f6d72f436632c5d69bf86c9c2..e3fafacfb150c827e33eeec9279a65a1121c4f27 100644 GIT binary patch delta 635 zcmZ8fF>4e-7~Su7_inSdIn*K`Dt;`2cX+Nvf+W{nVWC2T#M)!@X79#qW|!I7(+hz# z0qqp#7YH^A7Lvv?c2Ee{~Rxz5U8x zwm)``8$H;z-Zl0@9~WbgF~xQ(*f z1&;aY454eTx?vN$gzcH3y9PJR%zXe`=8KCFJ`;M16EWiwcScz%q|T8k#pa3F;h2j( zj;npt^NgdA=C_-`E%UJX2Ug9n^%-s(+k17u9)V?Tvl%C-9HS~^jyX@_NXV?v5pJfa zxGt2$8A}RYJ6Kpt3r%IC+99TjAd+Ku%wtw0dQfe9HLgr%E7KyCETLcyC?Br5!kB<3 zWEjzku}FA?cjFVb%48oGoH^sJYK|-?k0gb%D%F>Q&K^DOgW|DxKB6$I zZj>5NMTX&7^?wroRhU%_l~_tj3OT{2>0|8jXcF}?+|2|X<4u|2TG)$f)8>Qs{`^MS z+w#X;Xq|%<=)lo*=@P&lbLjtqdq%Y1T*0zrg(lB(Ag~)PA3WQ0JlnUuz+4Yr!_r@S C=CtJi delta 221 zcmca9vqO?EpO=@50SImuP;&1%A^I(Y$Wpn^hZK}uptYOz9gL4IalNpXC7 zQD%xlT7Hp2K)7dKLFr@%wj4&y$!po(FzQa8#eR^{U~&vcKU02^xcJ z0J%wsNq|v|k&kIJC$}^sqxED}o+peBleu^o%F2S2hye)>1{OvhW+oOcMh<2U77k`E OW)6 Date: Thu, 15 Feb 2024 18:36:26 -0600 Subject: [PATCH 13/15] docs additional data souce links --- andrewsalij/Convergence-Tracker.md | 20 ++++++++++++------- .../Scripts/Br4Ca2/run_sweep_br4ca2.py | 2 +- .../Scripts/CCeOSP/run_sweep_cceosp.py | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md index 3f9e96c7..a1fe8bff 100644 --- a/andrewsalij/Convergence-Tracker.md +++ b/andrewsalij/Convergence-Tracker.md @@ -10,13 +10,18 @@ pip install pydantic Tests (see Scripts folder) have been run on a variety of materials, whose provenance is below: -Materials Project (DOI: doi:10.1063/1.4812323) -(CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) -Si2 (mp-149) (DOI 10.17188/1190959) +Materials Project +link: https://legacy.materialsproject.org/ +(DOI: 10.1063/1.4812323) +(CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode), see https://legacy.materialsproject.org/terms + +Si2 (mp-149) (DOI 10.17188/1190959) (https://legacy.materialsproject.org/materials/mp-149/) Materials Cloud three-dimensional crystals database (MC3D) +link: https://archive.materialscloud.org/record/2022.38 +(DOI: 10.24435/materialscloud:rw-t0) (CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) -DOI:10.24435/materialscloud:rw-t0 + GaN (mc3d-3763/pbe) BN (mc3d-13290/pbe) @@ -26,10 +31,11 @@ Cs2La2Te6Zn2 (mc3d-11071/pbe) C2Ce2Os4P2 (mc3d-10335/pbe) Materials Cloud two-dimensional crystals database (MC2D) -(CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) +link: https://archive.materialscloud.org/record/2020.158 DOI:10.24435/materialscloud:az-b2 -DOI:10.24435/materialscloud:36-nd - +DOI:10.24435/materialscloud:36-nd (expansion) +(CC-BY 4.0, https://creativecommons.org/licenses/by/4.0/legalcode) + C (graphene, from graphite exfoliation) (https://www.materialscloud.org/discover/mc2d/details/C, graphite (2H) initial) MoS2 (https://www.materialscloud.org/discover/mc2d/details/MoS2-MoS2) AgCO2 (https://www.materialscloud.org/discover/mc2d/details/AgCO2) diff --git a/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py b/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py index 44fafa86..cb4e8064 100644 --- a/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py +++ b/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py @@ -17,6 +17,6 @@ run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) -k_array_conv = convergence_tester.find_convergence(-.002,run_prefix_str="mpirun -np 8",weight_type = "lattice",k_index=1,k_step=2,k_iterator_init=2) +k_array_conv = convergence_tester.find_convergence(-.005,run_prefix_str="mpirun -np 8",weight_type = "lattice",k_index=1,k_step=2,k_iterator_init=2) convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py b/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py index 5a471630..dc8ed8b7 100644 --- a/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py +++ b/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py @@ -16,6 +16,6 @@ run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) -k_array_conv = convergence_tester.find_convergence(-.002,run_prefix_str="mpirun -np 8",weight_type = "lattice") +k_array_conv = convergence_tester.find_convergence(-.005,run_prefix_str="mpirun -np 8",weight_type = "lattice") convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file From 2e00fb5e44c14ce44751815cdf930c0a91df53f1 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Thu, 15 Feb 2024 19:08:43 -0600 Subject: [PATCH 14/15] docs make figure docstring details --- andrewsalij/convergence_tracker.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index 393df9f7..fb70d861 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -206,6 +206,20 @@ def make_report_figure(self,filename,output_directory = None,x_axis_type = "iter ''' Creates basic report figure for k point convergence testing. Plot parameters may be overridden via matplotlib.pyplot.rcParams.update() + :param filename: str + Figure filename to save. Passed to matplotlib.pyplot.Figure.savefig() + :param output_directory: str or None + If None, outputs figure to working directory + :param x_axis_type: str + "iteration_number": + X axis tick labels relate to the number of the convergence iterations + "convergence_parameter": + X axis tick labels are the k point arrays + :param x_label: str (default: "Convergence Iteration") + :param y_label: str (default: "Energy (Ry)") + :param plot_params: dict + Dictionary to pass to matplotlib.pyplot.Axis.plot() + :param to_show: bool (default: True) ''' fig, ax = plt.subplots() if output_directory is not None: From 9b67c83c5c909c9b4d6c94bd03a69c16c650a3c6 Mon Sep 17 00:00:00 2001 From: Andrew Salij Date: Fri, 16 Feb 2024 02:27:01 -0600 Subject: [PATCH 15/15] test final runs KPointConvergenceTester Final test runs for k point convergence have passed . --- andrewsalij/Convergence-Tracker.md | 2 +- .../Scripts/AgCO2_2D/agco2_2d_k_converged.png | Bin 0 -> 28423 bytes .../Scripts/AgCO2_2D/run_sweep_agco2.py | 2 +- andrewsalij/Scripts/BN/bn_k_converged.png | Bin 0 -> 25307 bytes andrewsalij/Scripts/BN/run_sweep_bn.py | 6 ++--- .../Scripts/Br4Ca2/br4ca2_k_converged.png | Bin 0 -> 27742 bytes .../Scripts/Br4Ca2/run_sweep_br4ca2.py | 2 +- .../Scripts/CsLaZnTe/cslaznte_k_converged.png | Bin 0 -> 26303 bytes .../Scripts/CsLaZnTe/run_sweep_cslaznte.py | 2 +- .../F2Fe2O8S2/ffeos_simple_k_converged.png | Bin 0 -> 25848 bytes .../run_sweep_ffeos.py} | 6 +++-- .../create_k_points.cpython-310.pyc | Bin 0 -> 2329 bytes .../convergence_tracker.cpython-310.pyc | Bin 10411 -> 11633 bytes andrewsalij/convergence_tracker.py | 22 +++++++++++++----- 14 files changed, 27 insertions(+), 15 deletions(-) create mode 100644 andrewsalij/Scripts/AgCO2_2D/agco2_2d_k_converged.png create mode 100644 andrewsalij/Scripts/BN/bn_k_converged.png create mode 100644 andrewsalij/Scripts/Br4Ca2/br4ca2_k_converged.png create mode 100644 andrewsalij/Scripts/CsLaZnTe/cslaznte_k_converged.png create mode 100644 andrewsalij/Scripts/F2Fe2O8S2/ffeos_simple_k_converged.png rename andrewsalij/Scripts/{CCeOSP/run_sweep_cceosp.py => F2Fe2O8S2/run_sweep_ffeos.py} (71%) create mode 100644 andrewsalij/Tests/__pycache__/create_k_points.cpython-310.pyc diff --git a/andrewsalij/Convergence-Tracker.md b/andrewsalij/Convergence-Tracker.md index a1fe8bff..3d4f1a4d 100644 --- a/andrewsalij/Convergence-Tracker.md +++ b/andrewsalij/Convergence-Tracker.md @@ -28,7 +28,7 @@ BN (mc3d-13290/pbe) O4Ru2 (mc3d-1930/pbe) Br4Ca2 (mc3d-30836/pbe) Cs2La2Te6Zn2 (mc3d-11071/pbe) -C2Ce2Os4P2 (mc3d-10335/pbe) +F2Fe2O8S2 (mc3d-14425/pbe) Materials Cloud two-dimensional crystals database (MC2D) link: https://archive.materialscloud.org/record/2020.158 diff --git a/andrewsalij/Scripts/AgCO2_2D/agco2_2d_k_converged.png b/andrewsalij/Scripts/AgCO2_2D/agco2_2d_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1919d4a2ec1230d4a890a8aa9bef43a7344cda GIT binary patch literal 28423 zcmb4r2RN7g_y2A0y*D2-vLhoRLKz`N_DCXoC9-#!m64RJjK~O)y+tV5D^m6>tC0V> zJ>TE=`}^#HTb_5V+-(tUD^FKP7f(lfYff)lcMp3PXGswm5sA~Bw>>>w zJ>*11o&J4+h>N?ODCfc7Hn<6qtHuov1fj4(|HsNdpJ$IC&YqW4l?{B-*QW0JTpcpC-mxAw2Nu zfcXFCmo0JD#w$st-g||Xm5CP>7mHiBMKSNCXz*N9q!%?e&6{IC=R>LBw;NVdBg@Lh zwl(dyky%|`J-uPGJXnyR!DG~L|6YB(GK^?E7;97f&(2EZ&}&1(-{Zr@CgN`2RO_|} zG^<@_vE$g}BNj3O8#?BA`S}ff4uAHD!nYX}d_9Zf{bpP6NZI6QLkTE4e*ao1bDL9J zovfjGYuEo~#BZ|7iA5(}2FuQF!MBnhrYOv<8~bN>O{mDYvT$HGD+|-y-hOd^DKCTB z^KiB`k^~2zH2;fRYfDR5Q&SW1g!lU7DMltHq8m4E6gsKLu~PZ&Ec2qjc=P5>3yVt~ z*Z1$=4Q{6-ByhsC2vbBY=qIP9!fkt!r52AUVPWTOC@dA8%ikrBj*d>aoV)q!SLox% zG!djsAw4OgBYzn0ZcMkoF{|C|7AhHBswNJ{R#Q`>i?elfj0p+BPFL`wM_hl+Ym>5{ zW6V~M?`VI>fKHE9!IxI@)<@k+J;9_@88^(d|DIWe%h!em3u1H=B}jvIJXeN=k*2zP zzr^hNSPy?MWRzA_sWk>1B_t&jNyCPg+{{+Nvv+&dgaS1>yCRhPp7z4SVV;UaxOKp*-XG;xxM(AkdUyc@Y-w6 zM2*sWzvhjfucTN6H1BWC32o00%~xMh{LKT_6H{s%0}(PaH<#^j=l1QWWMLDGh{$@`f~@;@!mR9U@q0hN6Hnano4oP%78f@+ zj+>jC&*ltP1O*2C5aA`b}K6mci@?JYP>`E~wO)a8rV`GEE!oo7-0Y8jROk{hl4AbqB5E2GuW^%#P zKfg8`IP)o)ltwf0% z!*ce`bm!DtI|{|4?W+Q`#GcE8MDpINO$l5o1|@e_N2wyo*;)uV?gvfR`>9akRyYh1 z_bVP0r8N?x-pvX1i`ERNUs2VL3{?V8_a9d`s}Lmc+)wn>DWduL`E;6i`0Pv?Ct+7# zU&PzDZyo-AeQ%B6COmn9TVpEX&4k{flAeQu!q9NUx6&5DwRCnSf4NO!Z)L^hE`@$N z)YIJ^Vk%Tzcl zWwO;`LkbE`4Zkrv81;W!UT$e`AN}#8)-(v_5Y2}w!UX3_1*5jwNZu9T}E-PELX+O(Py znORtf1lKqRM&3yxTBmC>0pmsw9luU`)9TpU&+onNpw=-E@Q_}(`TrM)L(XYH>WWUxu15-J0)}lKc8`CR}yz+N8|edeXsk;4;Tki(je`eeAVbw zzcF1wuZGqnc%tenw>?DKQ18+W#=mRgsVpBpeHbEs{==5ytWbs6T+~gtgM%D=kLMIO zN5>!EE)ju_ƽ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

a#vz@2Vn^)l&p^2QCVs0B z0-f856HLUSjSxgo{dWM76Cx*2+A`3B5wx}^ZVNy~V|YJ-S2E{&cXt~I^1JZf;B$(- z0`hLHNZ%f1Ma2pLZh7!gfXgATl?23L2Aq!ABrgx1G-oyxgaE5M)<-*FOXLlwzjidGmGFC$ufP)Xb7>N&<6ZIkwl=bvRFa3EN;QT9{s5lYE@4 zW!u+klL3fY5N56JD+8E zlhy{+B(sCR($tjO`FF1bbxZ|rhuD~YJceF^WHOtXNci%qaX8GRs z_Ip=7E*{$%-j&kXH_GDk`PSXiHRqq-G=*=XPsT&{F+xH&1X&!}C92!Yk*s z#2s_+liB*Rg7AgzJ7F;&0C z(@5;TF@7=0iXL5+X;mO7CME_JOoc~{dT39N3#Alij#Qd=jSjIU$w4NCkzcVx)nb5^ z@)s|-2#AMixuKY46RUEj%))Pptw0+fE-=RxQ^C_TyL2-_z6cPAd`g>6pHIDEbl|`| zc-$>>gopLVHXzp4KD#BX5}pv_Z_$$fft7K>5WHGh@XKusyy|>YF6#ty-Y|t z=IQ9@uuxA4fpZ6O2s;?}EQA7qw=?~DSe}LGR4}{h(nI1lyDkWt8jfydu~q>7>DO`4 zp_<=7?ipc%)*b?6&V@k3j}-_;(%J>TE5Y`f#0?-6apAoi<-)lu9!-Q*F3tHSAb;H; z#P_nwN^P?uzg#ry$RLo7P8N?mf`ZxC0G{2Nii!%-vBU3U zR*476E!*m~?`gn9UN+ogK@QU#Ls2$Qlb3iwuuvrlBB*4k+E`mBbafX3rIBAHBcp>= zGz!Q=CS8ik3kb z>kF}5j1G;-{0*bhv_7<4u^Fp!9eiQz(z zO(3rX6H_LN5QfW2E`hm864yDNLAhe0S_!0VZr21<$DU>^iw;hDW4Q3fJB>fDTNL`_ z@bdB|`E5gwWP#276Fi)y$o321MzLf6{>xp%Rs~-3jna&F@7cr0ep``}k0pBk{5c~4 zW)8t9LPv6x_zcSjmdL}>(cpE|N<7~JxF^`HGeq@*7|6nwX3!9taL3C*b#J8BBL7k2 znyLu#2-HyU$)!*NCwe!ljehdDqPusdJ0Caf2+EmJ(3+`pK)VC8cx|$(DnQZ#U166m z&%Qqw|1sa=$Jb-RdjXx5yUZMo@vr>IbhxwwC5~yTIK4|9y+nJIWF~>(Km}K#qeDsQ zrcxEFA^a2=uRlZ{GZkbO_L{SB;;+ z2O+r^^LLXb@JN%4W%-sb&ush%tB3EMooNXgzsC6u+gK93l8jv3Q39r1DlMrh`Rqn? zVnh6=fd)7*dj)BcphjHZQ}*!4YvZhruU~DaC&vjAx$6LFPTKUe8*f_ppnqN9RKV~*5i!>H6dNVaI=jyw<>a6glP{hcu|S#p$cTMhB5${fF8Dxef&Ivg=#kx|-G zG;Lrdq4hz%#cn6|2jDwJ?; zU`CK4nsjjnA3Esa_KOG{0Tx11+R{pRU#}!M4Oq1br^Icz%fzK2n+>)YX#+8?g##Rc zsJ&-luzMTFHtb2bbL22rH{v4_k}9c!NeOQWD-E1-CNhJwl|T3m`xCc?L;ScL5WIqD zaP6NjQ1j`hAoCI&&kN=>bN>(qxUy-`tEYj@+1Z)Y&-!Wu?B;nc7w||Q$4`-da(Fm5cFO>w_(7j_sLar`kb(4l z134T3HB~qqSZwRIjU-Zlozn>F5-b$rykL=i!I7VH;2ZY$WJF4*ZnQpFaz$`N*R!U~=Dss3F0! zb*f_spg5#lA5jwn?-tV{!h2@H4hq)iTtLT4V%_K=Xae%16@3~T5hmnw(1^AR3DAxZ zBW;J|pqXj3k;_rmSa+%bku*GU6-Um88IKTgA|kzunW>hUx?cf&hHclla*NXAKyVX< z9X#Awa=d!YbM~%~q@FAUB0RYt)>y=&2d5YvWgaBit&5kb&{5J6&t}laFf#4Dg-eY7 z@^~leFkE&NhQ^5Tme?5h6cY|UreYhH0iOQvQRjby%>Q#v`u8_aY7BHKhgo-qdgD?$ O%AQ^OwI1xSJ@YS(a~LcD literal 0 HcmV?d00001 diff --git a/andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py b/andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py index 04129cae..6c29e682 100644 --- a/andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py +++ b/andrewsalij/Scripts/AgCO2_2D/run_sweep_agco2.py @@ -16,6 +16,6 @@ run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) -k_array_conv = convergence_tester.find_convergence(-.001,run_prefix_str="mpirun -np 8") +k_array_conv = convergence_tester.find_convergence(-.03,run_prefix_str="mpirun -np 4") convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/BN/bn_k_converged.png b/andrewsalij/Scripts/BN/bn_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8d91dcfe764c88cf775214006716142d494ba9 GIT binary patch literal 25307 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 literal 0 HcmV?d00001 diff --git a/andrewsalij/Scripts/BN/run_sweep_bn.py b/andrewsalij/Scripts/BN/run_sweep_bn.py index 16d96d83..37777930 100644 --- a/andrewsalij/Scripts/BN/run_sweep_bn.py +++ b/andrewsalij/Scripts/BN/run_sweep_bn.py @@ -7,7 +7,7 @@ RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" os.makedirs(RUN_BASE_FOLDER,exist_ok=True) -compound_str = "br4ca2" +compound_str = "bn" input = compound_str+".in" filepath = os.sep.join((INPUT_BASE_FOLDER,input)) @@ -16,7 +16,7 @@ run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) -k_array_conv = convergence_tester.find_convergence(-.001,run_prefix_str="mpirun -np 8", - k_index=2,k_step=2,k_iterator_init=3) +k_array_conv = convergence_tester.find_convergence(-.001,run_prefix_str="mpirun -np 4", + k_index=2,k_step=1,k_iterator_init=3) convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/Br4Ca2/br4ca2_k_converged.png b/andrewsalij/Scripts/Br4Ca2/br4ca2_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..381e01b777142cb30bddacce6135bb6cf78b9283 GIT binary patch literal 27742 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

U{!pv! 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 literal 0 HcmV?d00001 diff --git a/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py b/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py index cb4e8064..df1ca678 100644 --- a/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py +++ b/andrewsalij/Scripts/Br4Ca2/run_sweep_br4ca2.py @@ -17,6 +17,6 @@ run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) -k_array_conv = convergence_tester.find_convergence(-.005,run_prefix_str="mpirun -np 8",weight_type = "lattice",k_index=1,k_step=2,k_iterator_init=2) +k_array_conv = convergence_tester.find_convergence(-.005,run_prefix_str="mpirun -np 4",weight_type = "lattice",k_index=1,k_step=1,k_iterator_init=1) convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Scripts/CsLaZnTe/cslaznte_k_converged.png b/andrewsalij/Scripts/CsLaZnTe/cslaznte_k_converged.png new file mode 100644 index 0000000000000000000000000000000000000000..0b470a43a5d2c362249fddce7e74923483bbda6e GIT binary patch literal 26303 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 literal 0 HcmV?d00001 diff --git a/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py b/andrewsalij/Scripts/F2Fe2O8S2/run_sweep_ffeos.py similarity index 71% rename from andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py rename to andrewsalij/Scripts/F2Fe2O8S2/run_sweep_ffeos.py index dc8ed8b7..cfb51f36 100644 --- a/andrewsalij/Scripts/CCeOSP/run_sweep_cceosp.py +++ b/andrewsalij/Scripts/F2Fe2O8S2/run_sweep_ffeos.py @@ -7,7 +7,9 @@ RUN_BASE_FOLDER = "/home/andrew/Documents/QE_Runs" os.makedirs(RUN_BASE_FOLDER,exist_ok=True) -compound_str = "cceosp" +compound_str = "ffeos_simple" +#TODO add parser support for magnetization +#there is a bug in the pymatgen parser that prevents 'scf' calculations running w/ magnetization input = compound_str+".in" filepath = os.sep.join((INPUT_BASE_FOLDER,input)) @@ -16,6 +18,6 @@ run_directory = os.sep.join((RUN_BASE_FOLDER,run_sub_dir)) convergence_tester = convergence_tracker.KPointConvergenceTester(filepath,output_dir = run_directory) -k_array_conv = convergence_tester.find_convergence(-.005,run_prefix_str="mpirun -np 8",weight_type = "lattice") +k_array_conv = convergence_tester.find_convergence(-.1,run_prefix_str="mpirun -np 4",weight_type = "uniform",max_iterations=10) convergence_tester.make_report_figure(compound_str+"_k_converged.png",x_axis_type="convergence_parameter") \ No newline at end of file diff --git a/andrewsalij/Tests/__pycache__/create_k_points.cpython-310.pyc b/andrewsalij/Tests/__pycache__/create_k_points.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a84ed6822e4368d536e96c0bb6882a0c2cdcd8ea GIT binary patch literal 2329 zcma);-EP}96vs)4k`>4Hy0%-JZB5dw8>V54FLqlD-cqbXHy8t2V1R)^P(|96KO~ow zlg4mvw%+C)lHU1U))&z2E(*WGfGs#X=%fPvDLMEtidRGNVv_}OTw8TZRZcW;fexxI+naE$eDLe zD6D;~Z{MAOFH-kue(R@S(m2Tu(&SLcmPjJ;M5s*22q!FG77S`|tNUOCX;4mJd&;es zq+y$l8;m>Lg|Wj6+=JHT8@vc@fp78>v>q=%CVnNqVK)6v%JBF=iZF}QB%whRdO|bn%pQSlvlc}Bie?UHr`EZpK6pfahhxDOPJM#zAiiQJh#{OX zOQmm1WVtY7nmar@?hD_QxMO}Z!o!H56Z8>E5aI!IE9vK(x*Le+gRq-B=D7`1d@E;4 zbenmhV`h(ud=Fgx{iymZ?TKoba4C+e57KDR6G^735992|!P6={Of#XT?^W21+f@Xw zs;fs(`~Bm*2s5+bX{h4J1>XvzDA7GS++M?Re=&IlsSS%fxHZxmbTV=VNYCj5^4o2M z+P1khqTD{UPAquGMqt|xAZCEr<&H*t2N6GaG-S6vL8lW$=UdW&1~J457cYSI4Hz#O zJh@+x8#v1iWtg;thA#0?5>r5KqA7ua)n#aM8p{ekL!!o9!^agJqTVTvghH1Jy;Nw0 z?o#&eaPLYk^F?p5nad6Jjcg!t`U?2W*l-XX2+dy5(Q_P}1LFH+EpvrV_%oYIU$M7_-G~*Y7&yrX9_5|aT zd$SdC8+xz|Lzjp%FL#1wDkEW1cP+EhRBL+P`>;r%Kv8K$YEk!M+Zyg(iEiqCg&qEE zs92qcUqXk2!bYS`vS|)-nz1v?J1A}ERBO(K(rwC`DP9v5ah)m=%swn z#eOLW@UvsyNYtQ2*m4)m7ihjhgP+NzBkRLsxs+I>F>MsqQjd7lvpoiXZi(r4xNR?t zlOVt&43ap*A31lDL9c&o3igiqj_L2zezf>sA;@GHb%ZpZPwxq=I|xB(xTUOu$r*ZH ZcdXpIZzB8_%i;WNC3@ZR?vyCI_z$l}AH@Iw literal 0 HcmV?d00001 diff --git a/andrewsalij/__pycache__/convergence_tracker.cpython-310.pyc b/andrewsalij/__pycache__/convergence_tracker.cpython-310.pyc index b982b9360e3c8a21877fe308f103e3836b9aeb48..afe34609b3f1c5cde3c7d27b0082905fee66e3a1 100644 GIT binary patch delta 2041 zcma)7O>7%Q6yCADwqvjD#I#LfN6jRp)NX@O4&>n^ zJ5K6ot+a}IK%!jcjFd<{6oEj<7m$hs2P95NTzV)+euMylxWEMhZ`O&E@FTI-KF_>) z-+OP~d~f#c3%^`VI*CL~foJj8&*`_5?}1lHA3qMDOY^0T*<5Lw_;x)l|2d3#jpj2XPDw>G%*zqICOy z;wVBV#n;ITs3;~ZMKQdct?m~1_LFo?o?3SRel@k8p^isl7c2~W8WDH-Zr)Jhtt zl`_JuUa!}E-Aj4Vn#zhiY(#j(i>{)6#fbJRtB|HW1E{E%@FHHwOTw0VjGnt;q)7FvykJh28 z?3Nd2t`Tqb+F>80u%?`Oz3dj?G#{ryBEf#8mFR?#DYjBzaTwk=x6{yLFphUp(lr=o zw2O+7cqQN|a>-YLCZ8lDF>#=8L#@mcdrllmPhQ74?%;~EP^T9B*^89TQM*DhXlE(5 z=^WwaB8}nA$FyIStqk)BG#a%r2SzYCAl z2_p+#^KQItd*Ka?3zpe;30H`X=gA_)1cNtI=7CMS!YFa&08<;1ZDNbMF6OYIo%wIZ zCbrQ{UG6~CvwJUN)9qwb*tK@H+R=_x%kq?y1`2>4PT1-eWDa8>GkAh^@WhL=2Gllv@ ze|D_n>!@5mElSxjG%ae`>`->A;{R5{JJ}pG%e&c$_*KBUWf19c@pJajz#bGrVH5=! z0vUi;L!s|O{q6kFZ)jKAhxeC`p9A1>`s~(GJ^I;Td(Pa zG1Ams&P;oby&&G(|3T&%X(s)!9W{~DX>oh_WA#NCzSAz@GYFj#Z;aGb9TcCnH%8h> zB~}pbhxX%ZE5#0Ls-{J4vOtR%LhL%bk~!C46ppH6AUWp(a|-x8ab0T2`2yi}%i)$e zTc|hXsL%lwq+!*Z%jLTsH^Vs%UT<*SFe8jsxWk&FFR-s9X#`X$J2oB19TOJ<`|%;n zlEZ4Sdu#xKe9+&$-qguW(-q@A11sGg((T5=EM=p`uCa_FpUYTUV{TSz*dnvka)F%| z;eLbidFW6diJdC60NvRE+a2oe@;ch>a$$~XEB`Mhf#OR4HRwdshIW?+z3q3iU^jI? zMgMqk&Y)G&uy_%Vp4xG*bjdX8*L%g^FuEi#;hG8d$;fAWAkx;yVI!NoKjE&CrWc3ZqWmPKd9(wLR_ z9T@8dKA;WZj`;G4q4+~-Q2?Rs5rKo(;A>VnI5|883RaTB zzXpcnNVWr$Ex_)J4-cLg?N4ek=+xN8{+Yl~C=f>4Ml=yZ=|5QxjPe@0CNjC<^lLDA RqyiP{P5%;M6Jk1d?JwU_J)Qsn delta 896 zcmY*XO=uKJ6t36Pf75?68O0>_Oq@hT$3#~Jjb@Dr#6%M{U=-HK`V*~D*666!lVvwl zlfxi_B8czgK}bZxvf@EnK?KF4$g+!j^dKI*EQqiN@fLm6IjGgtS5@zOKi{ja|Bu`| z5M1zmhtYU-_wVYi%@2Ye%gL%UjpzxES;w{0+2oOROoN-a)ag4cGaRNs?4E9|YqJK| z=3o~)nvYGHk!CB4Eor6vwmOqm1Ee9%9qiKDpO`cbGDyF=IcxFE8~__nt%|AW$y4VQ zAbKNU;~TGxhW{knMj{Gs5rX8U|06&@nz;k89S`UFVL#r=9a-+CIu{{Ni%oNYX0#do z{Eit{YOyETSrWmG>k#`K;((iRPUfN+8AyB55IuF1TXjp?4QOWEZe|Snyr|kx#UNz%%hh=Lvdfm9Fj;shmL-p59DR?Nmvj%7}TK z>FVoP7I+SI=Pa}hYeii%!CSC>9SWbtT5_s*;uyZ|T2Z({hu21J>iosu(|Z+Luxb5? EFNu23pa1{> diff --git a/andrewsalij/convergence_tracker.py b/andrewsalij/convergence_tracker.py index fb70d861..699c3d6a 100644 --- a/andrewsalij/convergence_tracker.py +++ b/andrewsalij/convergence_tracker.py @@ -65,6 +65,7 @@ def create_k_point_array(k_iterator,k_index = 0,effective_weight_array = np.arra k_index,k_iterator = int(k_index), float(k_iterator) normalized_weight_array = np.array((effective_weight_array.astype(float))/float(effective_weight_array[k_index])) #normalized to iterator k_point_array = (normalized_weight_array*k_iterator).astype(int) + k_point_array = np.where(k_point_array<1,1,k_point_array) #removing 0 indices-->imposing 1 minimum if fixed_k_points is not None: #for fixed k points, overrides calculated k point array try: for i in np.arange(3): @@ -88,11 +89,12 @@ def _get_effective_k_point_weight(self,weight_type = "uniform"): return effective_weight_array def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = int(1),k_index = 0, fixed_k_points = None,weight_type = "uniform",run_prefix_str = "",max_iterations = 20,talk = True, - force_energy_decrease = False): + force_energy_decrease = False,allow_convergence_pos_delta= True): ''' Finds the converged energy for a given convergence delta for the input from the initialization. Creates and runs in subdirectories within self.output_dir scf calculations for target system. - Convergence defined where the latest decrease in energy is less than the provided convergence_delta. + Convergence defined where the latest change in energy is less than the provided convergence_delta (to compel convergence to be negative + in final iteration, set allow_covergence_pos_delta to False. Convergence iterates over a single k point index (default: first lattice dimension) from k_iterator_init (default: 1) in increments of k_step (default: 1). Terminates after set max_iterations (default: 20). :param convergence_delta : float (in units of method energy) @@ -122,6 +124,10 @@ def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = in If True, outputs progress to console :param force_energy_decrease: bool (default: False) If True, kills convergence if energy ever increases + :param allow_convergence_pos_delta: bool (default: True) + If True, final convergence step can have a positive increase in energy less than convergence_delta and + force_energy_decrease is False. + If False, requires that final step is a negative change in energy :return: np.ndarray (size 3, type int) or None returns None if run failed to converge ''' @@ -147,10 +153,14 @@ def find_convergence(self,convergence_delta,k_iterator_init = int(1),k_step = in if cur_convergence_delta>0 and force_energy_decrease: print("Energy increased in final convergence step. Terminating convergence run") break - if (cur_convergence_delta>convergence_delta and cur_convergence_delta<0): - print("Run converged") - convergence_flag=True - break + if (np.abs(cur_convergence_delta)