{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Instruction\n", "0. Install siman - sudo pip3 install siman\n", "1. Prepare file with crystall structure in one of the following formats: cif, VASP, abinit\n", "2. Prepare file with input parameters (INCAR) or use pre-defined sets: 'static'\n", "3. Prepare POTCAR - potentials files\n", "4. For correct work of pip you may need to install visual studio from http://landinghub.visualstudio.com/visual-cpp-build-tools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import libraries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({},\n", " {'aks': ,\n", " 'static': ,\n", " 'opt': ,\n", " 'gaus_sp': ,\n", " '1m': ,\n", " '1u': ,\n", " None: ,\n", " 'static_low': ,\n", " 'opts_low': },\n", " 48)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from siman import header\n", "from siman.header import db\n", "from siman.SSHTools import SSHTools\n", "from siman.calc_manage import add, res\n", "from siman.database import write_database, read_database\n", "from siman.set_functions import read_vasp_sets\n", "from siman.calc_manage import smart_structure_read\n", "%matplotlib inline\n", "read_database() # read saved database if available" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set configuration parameters (skip this part if you already setup the template)\n", "Configuration of siman package for each project can be provided in project_conf.py file, wich should be located in your project working directory. The example of this file can be found [here](https://github.com/dimonaks/siman/blob/master/project_template/project_conf.py). For global configuration put project_conf.py into your home directory (~) and rename to *simanrc.py*. \n", "\n", "Pay attention that *project_conf.py* has higher priority and will overwrite specified parameters from *simanrc.py* \n", "Eventually all configuration parameters are available under the siman.header modul\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "#for the moment we need to provide path to VASP potentials \n", "header.PATH2POTENTIALS = '/ssd2/scientific_projects/PAW_PBE_VASP' #path to VASP POTENTIALS\n", "\n", "#and tell siman about remote cluster used for calculations\n", "user = \"d.aksenov\"\n", "host = \"10.30.16.168\"\n", "header.DEFAULT_CLUSTER = '1'\n", "header.CLUSTERS['1'] = {\n", "'address':user+'@'+host, # this is used for ssh, make sure you have created passwordless [setup](https://www.thegeekdiary.com/centos-rhel-how-to-setup-passwordless-ssh-login/)\n", "'vasp_com':'mpirun vasp_std', # command on your cluster to run VASP\n", "'homepath':'/home/'+user, # your home folder on cluster\n", "'schedule':'SLURM', # job scheduler on your cluster; other options: 'PBS', 'SGE', 'none' (no scheduler)\n", "'walltime':'72:00:00', # time required for job\n", "'corenum':16, # number of cores required for job\n", "'modules':'module load Compiler/Intel/17u8; module load Q-Ch/VASP/5.4.4_OPT; module load ScriptLang/python/3.6i_2018u3; \\nulimit -s unlimited\\n',\n", "}\n", "\n", "#Instead of passwordless setup or for Windows you can use ssh_object (paramiko module is used):\n", "header.ssh_object = SSHTools()\n", "header.ssh_object.setup(user=user, host=host, pkey=\"/home/d.aksenov/.ssh/id_rsa\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sets (paprameters of your calculation used in VASP)\n", "Siman has predefined sets for VASP calculations, they can be found in *header.varset* dictionary" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- s.params['ISTART'] = 0 \n", "-- s.params['NELM'] = 50 \n", "-- s.params['EDIFF'] = 1e-05 \n", "-- s.params['NSW'] = 0 \n", "-- s.params['EDIFFG'] = 0 \n", "-- s.params['IBRION'] = 1 \n", "-- s.params['ISIF'] = 2 \n", "-- s.params['PREC'] = Normal \n", "-- s.params['ALGO'] = Normal \n", "-- s.params['ENCUT'] = 400 \n", "-- s.params['ENAUG'] = 700.0 \n", "-- s.params['KSPACING'] = 0.2 \n", "-- s.params['KGAMMA'] = .TRUE. \n", "-- s.params['LREAL'] = Auto \n", "-- s.params['ISMEAR'] = 0 \n", "-- s.params['SIGMA'] = 0.1 \n", "-- s.params['LPLANE'] = .TRUE. \n", "-- s.params['NPAR'] = 1 \n", "-- ngkpt: None \n", "\n", "-- POTDIR: {300: 'void', 200: 'octa', 0: 'n', 1: 'H', 2: 'He', 3: 'Li', 4: 'Be', 5: 'B', 6: 'C', 7: 'N', 8: 'O', 9: 'F', 10: 'Ne', 11: 'Na', 12: 'Mg', 13: 'Al', 14: 'Si', 15: 'P', 16: 'S', 17: 'Cl', 18: 'Ar', 19: 'K', 20: 'Ca', 21: 'Sc', 22: 'Ti', 23: 'V', 24: 'Cr', 25: 'Mn', 26: 'Fe', 27: 'Co', 28: 'Ni', 29: 'Cu', 30: 'Zn', 31: 'Ga', 32: 'Ge', 33: 'As', 34: 'Se', 35: 'Br', 36: 'Kr', 37: 'Rb', 38: 'Sr', 39: 'Y', 40: 'Zr', 41: 'Nb', 42: 'Mo', 43: 'Tc', 44: 'Ru', 45: 'Rh', 46: 'Pd', 47: 'Ag', 48: 'Cd', 49: 'In', 50: 'Sn', 51: 'Sb', 52: 'Te', 53: 'I', 54: 'Xe', 55: 'Cs', 56: 'Ba', 57: 'La', 58: 'Ce', 59: 'Pr', 60: 'Nd', 61: 'Pm', 62: 'Sm', 63: 'Eu', 64: 'Gd', 65: 'Tb', 66: 'Dy', 67: 'Ho', 68: 'Er', 69: 'Tm', 70: 'Yb', 71: 'Lu', 72: 'Hf', 73: 'Ta', 74: 'W', 75: 'Re', 76: 'Os', 77: 'Ir', 78: 'Pt', 79: 'Au', 80: 'Hg', 81: 'Tl', 82: 'Pb', 83: 'Bi', 84: 'Po', 85: 'At', 86: 'Rn', 87: 'Fr', 88: 'Ra', 89: 'Ac', 90: 'Th', 91: 'Pa', 92: 'U', 93: 'Np', 94: 'Pu', 95: 'Am', 96: 'Cm', 97: 'Bk', 98: 'Cf', 99: 'Es', 100: 'Fm', 101: 'Md', 102: 'No', 103: 'Lr', 104: 'Rf', 105: 'Db', 106: 'Sg', 107: 'Bh', 108: 'Hs', 109: 'Mt', 110: 'Ds', 111: 'Rg', 112: 'Cn', 114: 'Uuq', 116: 'Uuh'} \n" ] } ], "source": [ "header.varset['static'].printme()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run new calculation add()\n", "The function will:\n", "1. Read crystall structure from Bi2Se3_mp-541837_computed.POSCAR\n", "2. Create all VASP files in folder 'Bi2Se3/Bi2Se3.static'\n", "3. Copy files to CEE cluster into 'topologic/Bi2Se3/Bi2Se3.static' folder\n", "4. Use run = 1 to submit the calculation" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- Attention!, cluster None is not found, using default 1 \n", "\n", "-- Warning! This calculation was already submitted. Use run = 2 to submit it again \n", "\n", "-- Warning! run = 2, the calculation is resubmitted \n", "\n", "-- check_kpoints(): Kpoint mesh is: [9, 9, 9] \n", "\n", "-- check_kpoints(): The actual k-spacings are ['0.19', '0.19', '0.19'] \n", "\n", "-- POSCAR was written to Bi2Se3//Bi2Se3.static/1.POSCAR \n", "\n", "-- Attention! ngkpt = [9, 9, 9] is adopted from struct_des which you provided for it Bi2Se3 and kspacing = 0.2 \n", "\n", "\n", "Calculation db[('Bi2Se3', 'static', 1)] successfully created\n", "\n", " \n", "\n", "JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n", " 213435 AMG-mediu LC.104.i a.boev PD 0:00 1 (AssocGrpCpuLimit)\n", " 213436 AMG-mediu LC.104.i a.boev PD 0:00 1 (AssocGrpCpuLimit)\n", " 213440 AMG-mediu LC104_7. a.boev PD 0:00 1 (AssocGrpCpuLimit)\n", " 213408 AMG-mediu LC104.7. a.boev R 5:08:48 1 node-amg06\n", " 213434 AMG-mediu LC.104.i a.boev R 2:53:58 1 node-amg04\n", " 213439 AMG-mediu bulk.def a.burov R 10:15:33 1 node-amg08\n", " 213433 AMG-mediu LC.104.i a.boev R 4:20:44 1 node-amg12\n", " 213406 AMG-mediu LC104.7. a.boev R 20:35:28 1 node-amg05\n", " 213275 AMG-long LMO_test a.boev R 6-23:02:38 1 node-amg03\n", " 213404 AMG-mediu LC.104.i a.boev R 1-05:35:57 1 node-amg10\n", " 213399 AMG-mediu LC104_7. a.boev R 1-06:02:36 1 node-amg01\n", "Submitted batch job 213450\n", " JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n", " 213450 AMG-mediu Bi2Se3.s d.akseno PD 0:00 1 (None)\n", " 213435 AMG-mediu LC.104.i a.boev PD 0:00 1 (AssocGrpCpuLimit)\n", " 213436 AMG-mediu LC.104.i a.boev PD 0:00 1 (AssocGrpCpuLimit)\n", " 213440 AMG-mediu LC104_7. a.boev PD 0:00 1 (AssocGrpCpuLimit)\n", " 213408 AMG-mediu LC104.7. a.boev R 5:08:48 1 node-amg06\n", " 213434 AMG-mediu LC.104.i a.boev R 2:53:58 1 node-amg04\n", " 213439 AMG-mediu bulk.def a.burov R 10:15:33 1 node-amg08\n", " 213433 AMG-mediu LC.104.i a.boev R 4:20:44 1 node-amg12\n", " 213406 AMG-mediu LC104.7. a.boev R 20:35:28 1 node-amg05\n", " 213275 AMG-long LMO_test a.boev R 6-23:02:38 1 node-amg03\n", " 213404 AMG-mediu LC.104.i a.boev R 1-05:35:57 1 node-amg10\n", " 213399 AMG-mediu LC104_7. a.boev R 1-06:02:36 1 node-amg01 \n", "\n", "-- To read results use res_loop('Bi2Se3', ['static'], [1], show = 'fo' ) # , on 2024-04-01 ; possible options for show: fit, fo, fop, en, mag, magp, smag, maga, occ, occ1, mep, mepp \n", "\n" ] }, { "data": { "text/plain": [ "'Bi2Se3'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "st = smart_structure_read(input_geo_file = 'Bi2Se3_mp-541837_computed.POSCAR')\n", "\n", "add('Bi2Se3', 'static', 1, input_st = st, it_folder = 'Bi2Se3', run = 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use *run=1* to run your job" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Read results res()\n", "The function get OUTCAR files from server and parse them" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "\n", "\n", "Max. F. tot (meV/A) = [59] \n", "\n", "-- db['Bi2Se3.static.1'] | -20.1854 |10.27, 10.27, 10.27| 12,12,19 | 1,12, 12 \n" ] }, { "data": { "text/plain": [ "([\"db['Bi2Se3.static.1'] | -20.1854 |10.27, 10.27, 10.27| 12,12,19 | 1,12, 12 \"],\n", " [])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res('Bi2Se3', 'static', 1, check_job = 0) # check_job = 0 skips checking job status in queue" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Optimize cell volume\n", "Make sure that ~/tools/fit_tool.py is on cluster;\n", "To copy the file on linux you should run something like this \n", "\n", "*scp siman/cluster_tools/fit_tool.py user@cluster_addres:~/tools/*\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- Attention!, cluster None is not found, using default ut1 \n", "\n", "-- add_loop_scale(): Preparing scale calculation ... \n", "\n", "-- inherit_ngkpt(): the k-grid from Bi2Se3 was inherited to Bi2Se3.su \n", "\n", "-- File xyz/Bi2Se3.static.1.end_used_for_scaling.xyz was written \n", "\n", "-- Scale_region is (-5, 5) \n", "\n", "Scales are [-5. -3.33333333 -1.66666667 0. 1.66666667 3.33333333\n", " 5. ] \n", "\n", "-- Warning! File ./Bi2Se3/Bi2Se3.su/Bi2Se3.su.auto_created_scaled_image.1.geo was replaced \n", "\n", "-- File xyz/Bi2Se3.su.1.xyz was written \n", "\n", "-- Warning! File ./Bi2Se3/Bi2Se3.su/Bi2Se3.su.auto_created_scaled_image.2.geo was replaced \n", "\n", "-- File xyz/Bi2Se3.su.2.xyz was written \n", "\n", "-- Warning! File ./Bi2Se3/Bi2Se3.su/Bi2Se3.su.auto_created_scaled_image.3.geo was replaced \n", "\n", "-- File xyz/Bi2Se3.su.3.xyz was written \n", "\n", "-- Warning! File ./Bi2Se3/Bi2Se3.su/Bi2Se3.su.auto_created_scaled_image.4.geo was replaced \n", "\n", "-- File xyz/Bi2Se3.su.4.xyz was written \n", "\n", "-- Warning! File ./Bi2Se3/Bi2Se3.su/Bi2Se3.su.auto_created_scaled_image.5.geo was replaced \n", "\n", "-- File xyz/Bi2Se3.su.5.xyz was written \n", "\n", "-- Warning! File ./Bi2Se3/Bi2Se3.su/Bi2Se3.su.auto_created_scaled_image.6.geo was replaced \n", "\n", "-- File xyz/Bi2Se3.su.6.xyz was written \n", "\n", "-- Warning! File ./Bi2Se3/Bi2Se3.su/Bi2Se3.su.auto_created_scaled_image.7.geo was replaced \n", "\n", "-- File xyz/Bi2Se3.su.7.xyz was written \n", "\n", "-- 7 scale images have been created. \n", "\n", "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.1'] | -19.4364 |9.75;9.75;9.75| 11309,11321,10881 | 1,12, 12 \n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [0.23 0.23 0.23] \n", "\n", "-- POSCAR was written to /home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.su.static/1.POSCAR \n", "\n", "\n", "Calculation ('Bi2Se3.su', 'static', 1) successfully created\n", "\n", " \n", "\n", "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.2'] | -19.8495 |9.92;9.92;9.92| 6357,6365,6100 | 1,13, 13 \n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [0.23 0.23 0.23] \n", "\n", "-- POSCAR was written to /home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.su.static/2.POSCAR \n", "\n", "\n", "Calculation ('Bi2Se3.su', 'static', 2) successfully created\n", "\n", " \n", "\n", "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.3'] | -20.0802 |10.09;10.09;10.09| 2443,2446,2330 | 1,13, 13 \n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [0.22 0.22 0.22] \n", "\n", "-- POSCAR was written to /home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.su.static/3.POSCAR \n", "\n", "\n", "Calculation ('Bi2Se3.su', 'static', 3) successfully created\n", "\n", " \n", "\n", "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.4'] | -20.1543 |10.27;10.27;10.27| -680,-680,-657 | 1,13, 13 \n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [0.22 0.22 0.22] \n", "\n", "-- POSCAR was written to /home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.su.static/4.POSCAR \n", "\n", "\n", "Calculation ('Bi2Se3.su', 'static', 4) successfully created\n", "\n", " \n", "\n", "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.5'] | -20.0988 |10.44;10.44;10.44| -3124,-3126,-3036 | 1,13, 13 \n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [0.21 0.21 0.21] \n", "\n", "-- POSCAR was written to /home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.su.static/5.POSCAR \n", "\n", "\n", "Calculation ('Bi2Se3.su', 'static', 5) successfully created\n", "\n", " \n", "\n", "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.6'] | -19.9327 |10.61;10.61;10.61| -5000,-5005,-4839 | 1,13, 13 \n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [0.21 0.21 0.21] \n", "\n", "-- POSCAR was written to /home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.su.static/6.POSCAR \n", "\n", "\n", "Calculation ('Bi2Se3.su', 'static', 6) successfully created\n", "\n", " \n", "\n", "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.7'] | -19.6756 |10.78;10.78;10.78| -6438,-6444,-6214 | 1,13, 13 \n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [0.21 0.21 0.21] \n", "\n", "-- POSCAR was written to /home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.su.static/7.POSCAR \n", "\n", "-- Attention! ngkpt = [8, 8, 8] is adopted from struct_des which you provided for it Bi2Se3.su and kspacing = 0.235 \n", "\n", "\n", "Calculation ('Bi2Se3.su', 'static', 7) successfully created\n", "\n", " \n", "\n", "Your job 26370 (\"Bi2Se3.su.static.run\") has been submitted\n", "job-ID prior name user state submit/start at queue slots ja-task-ID \n", "-----------------------------------------------------------------------------------------------------------------\n", " 26370 0.00000 Bi2Se3.su. aksenov qw 11/23/2018 16:07:05 24 \n", "\n", "-- To read results use res_loop('Bi2Se3.su', ['static'], [1, 2, 3, 4, 5, 6, 7], show = 'fo' ) # , on 2018-11-23 ; possible options for show: fit, fo, fop, en, mag, magp, smag, maga, occ, occ1, mep, mepp \n", "\n" ] }, { "data": { "text/plain": [ "'Bi2Se3.su'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "st = smart_structure_read(input_geo_file = 'Bi2Se3_mp-541837_computed.POSCAR')\n", "add('Bi2Se3', 'static', 1, input_st = st, it_folder = 'Bi2Se3', \n", " calc_method = 'uniform_scale', scale_region = (-5, 5), run = 1) # it_folder is a name of directory for this calculation" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- name | energy(eV)| Vector lenghts (A) | Stresses (MPa) | N MD, N SCF \n", "-- db['Bi2Se3.su.static.1'] | -19.4364 |9.75;9.75;9.75| 11309,11321,10881 | 1,12, 12 \n", "-- db['Bi2Se3.su.static.2'] | -19.8495 |9.92;9.92;9.92| 6357,6365,6100 | 1,13, 13 \n", "-- db['Bi2Se3.su.static.3'] | -20.0802 |10.09;10.09;10.09| 2443,2446,2330 | 1,13, 13 \n", "-- db['Bi2Se3.su.static.4'] | -20.1543 |10.27;10.27;10.27| -680,-680,-657 | 1,13, 13 \n", "-- db['Bi2Se3.su.static.5'] | -20.0988 |10.44;10.44;10.44| -3124,-3126,-3036 | 1,13, 13 \n", "-- db['Bi2Se3.su.static.6'] | -19.9327 |10.61;10.61;10.61| -5000,-5005,-4839 | 1,13, 13 \n", "-- db['Bi2Se3.su.static.7'] | -19.6756 |10.78;10.78;10.78| -6438,-6444,-6214 | 1,13, 13 \n", "-- db['Bi2Se3.su.static.100'] | -20.1544 |10.27;10.27;10.27| -799,-800,-774 | 1,13, 13 \n", "alpha, energy: 23.56, -19.436\n", "alpha, energy: 23.56, -19.849\n", "alpha, energy: 23.56, -20.080\n", "alpha, energy: 23.56, -20.154\n", "alpha, energy: 23.56, -20.099\n", "alpha, energy: 23.56, -19.933\n", "alpha, energy: 23.56, -19.676\n", "alpha, energy: 23.56, -20.154\n", "-- Image saved to figs/angle.eps \n", "\n", "\n", " v0 = 152.10466285102348 A^3\n", " a0 = 5.338027939754223 A\n", " E0 = -20.15465796451521 eV\n", " B = 0.34134080321758825 eV/A^3 \n", "\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "-- fit results are saved in figs/Bi2Se3.su.static.100.png \n", "\n" ] }, { "data": { "text/plain": [ "([\"db['Bi2Se3.su.static.100'] | -20.1544 |10.27;10.27;10.27| -799,-800,-774 | 1,13, 13 \"],\n", " [])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res('Bi2Se3.su', 'static', list(range(1,8))+[100], up = 'up', show = 'fit', analys_type = 'fit_a', check_job = 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Change SET parameters" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "read_vasp_sets([('ion_relax', 'static', {'ISIF':2, 'NSW':20, 'EDIFFG':-0.025}, 'override')]) #new set 'ion_relax' from 'static' with 'NSW' = 20\n", "print('NSW = ', header.varset['ion_relax'].vasp_params['NSW'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "add('Bi2Se3', 'ion_relax', 1, input_geo_file = 'Bi2Se3_mp-541837_computed.POSCAR', run = 1) # no need" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculate relaxation energy" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "res('Bi2Se3', 'ion_relax', 1)\n", "print('Relaxation energy = {:.6} meV'.format(1000*(db['Bi2Se3','ion_relax', 1].energy_sigma0 - db['Bi2Se3', 'static', 1].energy_sigma0)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inherit optimized structure and relax atomic positions" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- Attention!, cluster None is not found, using default default \n", "\n", "-- Directory ./Bi2Se3/Bi2Se3.ifn was created \n", "\n", "-- File xyz/Bi2Se3.static.1.end.xyz was written \n", "\n", "-- inherit_ngkpt(): the k-grid from Bi2Se3 was inherited to Bi2Se3.ifn \n", "\n", "-- check_kpoints(): Kpoint mesh is: [8, 8, 8] \n", "\n", "-- check_kpoints(): The actual k-spacings are [ 0.22 0.22 0.22] \n", "\n", "-- POSCAR was written to /hdd/home/aksenov/Simulation_wrapper/siman/tutorials/Bi2Se3//Bi2Se3.ifn.ion_relax/1.POSCAR \n", "\n", "-- Attention! ngkpt = [8, 8, 8] is adopted from struct_des which you provided for it Bi2Se3.ifn and kspacing = 0.235 \n", "\n", "\n", "Calculation ('Bi2Se3.ifn', 'ion_relax', 1) successfully created\n", "\n", " \n", "\n", "JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n", " 3126 AMG Cu310A2C emily R 2-10:07:39 1 node-amg01\n", " 3127 AMG Cu310A2C emily R 2-10:07:39 1 node-amg02\n", " 3281 AMG tetracen n.tukach R 19:08 1 node-amg05\n", " 3145 AMG p2_molec n.tukach R 18:42:20 1 node-amg11\n", " 3140 AMG F4TCNQ_o n.tukach R 19:16:11 1 node-amg09\n", " 3137 AMG p2_molec n.tukach R 19:24:22 1 node-amg07\n", " 3136 AMG p1_molec n.tukach R 19:30:29 1 node-amg04\n", " 3135 AMG beryl+H2 n.tukach R 21:52:24 1 node-amg06\n", " 3130 AMG xfpceOH. d.akseno R 1-18:50:09 1 node-amg03\n", "Submitted batch job 3294\n", " JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)\n", " 3294 AMG Bi2Se3.i d.akseno PD 0:00 1 (None)\n", " 3126 AMG Cu310A2C emily R 2-10:07:39 1 node-amg01\n", " 3127 AMG Cu310A2C emily R 2-10:07:39 1 node-amg02\n", " 3281 AMG tetracen n.tukach R 19:08 1 node-amg05\n", " 3145 AMG p2_molec n.tukach R 18:42:20 1 node-amg11\n", " 3140 AMG F4TCNQ_o n.tukach R 19:16:11 1 node-amg09\n", " 3137 AMG p2_molec n.tukach R 19:24:22 1 node-amg07\n", " 3136 AMG p1_molec n.tukach R 19:30:29 1 node-amg04\n", " 3135 AMG beryl+H2 n.tukach R 21:52:24 1 node-amg06\n", " 3130 AMG xfpceOH. d.akseno R 1-18:50:09 1 node-amg03 \n", "\n", "-- To read results use res_loop('Bi2Se3.ifn', ['ion_relax'], [1], show = 'fo' ) # , on 2019-06-28 ; possible options for show: fit, fo, fop, en, mag, magp, smag, maga, occ, occ1, mep, mepp \n", "\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Bi2Se3 = db['Bi2Se3.static.1'] # structure from database\n", "\n", "Bi2Se3.run('ion_relax', run = 1)\n", "\n", "#you can also use the command below, but it is deprecated\n", "# add('Bi2Se3.su', 'ion_relax', 100, inherit_option = 'full', run = 0, override = 1)\n", "# res('Bi2Se3.su.if', ['ion_relax'], [100], show = 'fo' )" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#To read results run again\n", "Bi2Se3.run('ion_relax')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# you may need to recalculate your job, for this use\n", "Bi2Se3.run('ion_relax', up = 'up2', add = 1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#several inherit options are available with iopt keyword: \n", " #full - full inherit including magnetic moments \n", " #full_nomag - inherit structure, but magnetic moments are initialized with default values for chosen set\n", " #full_chg - inherit charge file\n", " \n", " \n", "Bi2Se3.run('ion_relax', iopt = 'full') \n", "#By default iopt = 'full_nomag'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inherit structure and create supercell 222" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "add('Bi2Se3.su', 'static', 100, inherit_option = 'supercell', run = 0, mul_matrix = [[2,0,0],[0,2,0],[0,0,2]])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#or step by step\n", "Bi2Se3 = db['Bi2Se3.static.1']\n", "mul_matrix = [[2,0,0],[0,2,0],[0,0,2]]\n", "sc = create_supercell(Bi2Se3, mul_matrix)\n", "add('Bi2Se3.sc', 'static', 1, input_st = sc, it_folder = 'Bi2Se3', run = 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Write result in compact binary form - write_database()\n", "The function creates several files called calc.gdbm3 and only_calc.gdbm3 in the current folder.\n", "On the next run the function read_database() will read them and you can access you results using res_loop() or calc dictionary" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Database has been successfully updated\n", "\n" ] } ], "source": [ "write_database()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.6" } }, "nbformat": 4, "nbformat_minor": 1 }