├── README.md ├── ecb ├── eAtoms.py ├── eneb │ ├── __init__.py │ ├── eneb.py │ ├── fire_essneb.py │ ├── minimizer_essneb.py │ ├── qm_essneb.py │ └── util.py └── read_LOCPOT.py ├── example ├── 0.CON ├── 6.CON ├── constV_md.py ├── constV_opt.py ├── results │ ├── 1.CON │ ├── 2.CON │ ├── 3.CON │ ├── 4.CON │ ├── 5.CON │ └── fe.out ├── run_eneb-vasp.py └── sbatch.LC └── scripts ├── Full_Hessian ├── DISPLACECAR ├── K_eff.py ├── curvature.py ├── dym_parse.sh └── dymmatrix_no_mass.pl ├── center_slab.py ├── initial.py ├── move2o.py └── run_vasp.py /README.md: -------------------------------------------------------------------------------- 1 | # Electrochemical-barrier 2 | This package performs structure optimization and saddle search under constant potential. The geometry and number of electrons are optimized simultaneously without adding significant overhead compared to constant-charge calculations. The current implementation is based on ASE and VASPsol. 3 | 4 | Install: 5 | 1. Make sure VASPsol is compided 6 | 2. pip3 install --upgrade --user ase 7 | 3. Set ASE with VASPsol as the binary, see script/run_vasp.py for the srun/mpirun setting 8 | (potcar files and others, see https://wiki.fysik.dtu.dk/ase/ase/calculators/vasp.html#environment-variables) 9 | 4. In bash_profile: export PYTHONPATH=$PYTHONPATH:your_path/Electrochemical-barrier/ 10 | 11 | Usage: 12 | 1. Before doing any calculation, first set the vacuum/solution along the z axis and move the slab to the center of the simulation box using scripts/center_slab.py (do not run the script separately for the initial and final states because there could be some small mismatch for the substrate.) 13 | 2. Optimize the end points with optimization/constV_opt.py 14 | - grep FIRE slurm... to check the magnitude of residual forces (force, mu_e) 15 | - grep electron slurm... for number of electrons and mu_e 16 | 3. Copy the initial and final structures to 0.CON and 6.CON for an eNEB run 17 | 4. Set the optimized number of electrons for the initial and fianl states in ne1=... and ne2=... in example/run_eneb-vasp.py 18 | 5. Submit the slurm job to run run_eneb-vasp.py 19 | - fe.out shows the residual force after each iteration 20 | - structure of each image, ?.CON, is updated on the fly. To continue from an existing path, uncomment the lines in run_eneb_vasp.py that read in the path from ?.CON and resubmit the script again. 21 | 6. Check the MEP: 22 | - tail -7 mep.out > neb.dat 23 | - nebspline.pl (from the VTSTSCRIPTS) 24 | - The above two commands will produce mep.eps as from a regular NEB run in VTSTcode 25 | 26 | 27 | References: 28 | Z. Duan and P. Xiao, Simulation of Potential-Dependent Activation Energies in Electrocatalysis: Mechanism of O−O Bond Formation on RuO2, *J. Phys. Chem. C* 2021, 125, 28, 15243 29 | -------------------------------------------------------------------------------- /ecb/eAtoms.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | Generalized Atoms calss for optimization of geometry and number of electrons simultaneously under constant voltage 4 | Contact: Penghao Xiao (pxiao@dal.ca, pxiao@utexas.edu) 5 | Version: 1.0 6 | Usage: first set the vacuum/solution along z axis and move the slab to the center of the simulation box 7 | Please cite the following reference: 8 | ''' 9 | 10 | from ase import * 11 | from ase.io import read,write 12 | from ase import units 13 | from .read_LOCPOT import align_vacuum 14 | import numpy as np 15 | 16 | class eAtoms(Atoms): 17 | def __init__(self, atomsx, voltage=0.0, Ef_ref=-4.6, solPoisson=True, weight=1.0, e_only=False, slab_norm='z'): 18 | """ relaxation under constant electrochemical potential 19 | voltage ... real, applied voltage wrt the reference electrode 20 | Ef_ref ... real, Fermi level of the reference electrode. Default: -4.6 for SHE. 21 | solPoisson ... bool, 22 | True : compensate charge in the solvent, where VASPsol is required with lambda_d_k=3.0; 23 | False: uniform background charge; 24 | weight ... real >0, 25 | weight of the number of electrons vs. atomic positions, 26 | e_only ... bool, 27 | True: only optimize the number of electrons, corresponding to weight=infinity. 28 | slab_norm ... string in ('x', 'y', 'z') 29 | along which direction the vacuum is 30 | 31 | """ 32 | self.atomsx = atomsx 33 | 34 | #electrochemical potential: the work function of the counter electrode under the given voltage 35 | # i.e. voltage vs. SHE + workfunction of SHE 36 | self.epotential= -voltage + Ef_ref 37 | self.natom = atomsx.get_number_of_atoms() 38 | self.ne = np.zeros((1,3)) # number of electrons 39 | self.mue = np.zeros((1,3)) # electron mu, dE/dne 40 | self.vtot = 0.0 # shift of the electrostatic potential due to the compensating charge in DFT 41 | self.direction = slab_norm 42 | self.solPoisson = solPoisson 43 | self.weight = weight 44 | self.e_only = e_only 45 | self.jacobian = self.weight 46 | 47 | Atoms.__init__(self,atomsx) 48 | 49 | def get_positions(self): 50 | r = self.atomsx.get_positions() 51 | Rc = np.vstack((r, self.ne * self.jacobian)) 52 | return Rc 53 | 54 | def set_positions(self,newr): 55 | ratom = newr[:-1] 56 | self.ne[0][0] = newr[-1][0] / self.jacobian 57 | self.atomsx.set_positions(ratom) 58 | self._calc.set(nelect = self.ne[0][0]) 59 | 60 | def __len__(self): 61 | return self.natom+1 62 | 63 | def get_forces(self,apply_constraint=True): 64 | f = self.atomsx.get_forces(apply_constraint) 65 | self.get_mue() 66 | if self.e_only: 67 | Fc = np.vstack((f*0.0, self.mue / self.jacobian)) 68 | else: 69 | Fc = np.vstack((f, self.mue / self.jacobian)) 70 | return Fc 71 | 72 | def get_potential_energy(self, force_consistent=False): 73 | E0 = self.atomsx.get_potential_energy(force_consistent) 74 | 75 | # get the total number of electrons at neutral. 76 | # should have been done in __ini__, but self._calc is not accessible there 77 | try: 78 | self.n0 79 | except: 80 | # from ASE 3.22.0 81 | self.n0 = self._calc.default_nelect_from_ppp() # number of electrons at 0 charge 82 | print("zero charge electrons, n0:", self.n0) 83 | 84 | if self.ne[0][0] < 0.01: self.ne[0][0] = self._calc.get_number_of_electrons() 85 | E0 += (self.ne[0][0]-self.n0) * (-self.epotential + self.vtot) 86 | return E0 87 | 88 | def get_mue(self): 89 | # the initial guess for ne is passed through the calculator 90 | self.ne[0][0] = self._calc.get_number_of_electrons() 91 | 92 | # aligh the vacuum level and get the potential shift due to the compensating charge 93 | # vacuumE is used when the charge is compensated in solvent by VSAPsol 94 | # vtot_new is integrated when the charge is compensated by uniform background charge 95 | vacuumE, vtot_new = align_vacuum(direction = self.direction, LOCPOTfile='LOCPOT') 96 | 97 | if self.solPoisson: 98 | self.vtot = -vacuumE 99 | else: 100 | # start from zero charge for absolute reference 101 | try: self.vtot0 += 0 # if vtot0 exists, do nothing 102 | except: self.vtot0 = vtot_new # save the first vtot_new as vtot0 103 | self.vtot = (self.vtot0 + vtot_new)*0.5 104 | 105 | self.mue[0][0] = self.epotential - (self._calc.get_fermi_level() - vacuumE) 106 | print("mu of electron: ", self.mue) 107 | print("number of electrons: ", self.ne) 108 | 109 | 110 | def copy(self): 111 | """Return a copy.""" 112 | import copy 113 | atomsy = self.atomsx.copy() 114 | atoms = self.__class__(atomsy, self.epotential) 115 | 116 | atoms.arrays = {} 117 | for name, a in self.arrays.items(): 118 | atoms.arrays[name] = a.copy() 119 | #atoms.constraints = copy.deepcopy(self.constraints) 120 | #atoms.adsorbate_info = copy.deepcopy(self.adsorbate_info) 121 | return atoms 122 | 123 | -------------------------------------------------------------------------------- /ecb/eneb/__init__.py: -------------------------------------------------------------------------------- 1 | from .eneb import eneb 2 | from .qm_essneb import qm_essneb 3 | from .fire_essneb import fire_essneb 4 | from .util import * 5 | 6 | 7 | -------------------------------------------------------------------------------- /ecb/eneb/eneb.py: -------------------------------------------------------------------------------- 1 | """ 2 | The (electrochemical) nudged elastic path, (e)neb, module. 3 | Contact: Penghao Xiao (pxiao@dal.ca) 4 | Version: 1.0 5 | Reference: J. Phys. Chem. C 2021, 125, 28, 15243-15250 6 | Usage: move the slab to the center of the box first, as in eAtoms.py 7 | 8 | NEB under constant electrochemical potential, U, where number of electrons is 9 | an additional variable 10 | 11 | When "parallel=True" is set, (e)neb is parallelized over images through mpi4py. 12 | Each image can only use one processor, because the MPI comminicator cannot be 13 | passed to the calculator. The command to run the neb script should look like: 14 | 15 | mpirun -np N python filename.py 16 | 17 | where N equals the number of intermedia images, excluding the two end points. 18 | 19 | The other parallel version of (e)neb, pssneb.py, parallelizes over images through 20 | python pool and then each image invokes mpirun when calling the calculator. 21 | pssneb has only been tested for the VASP calculator. 22 | """ 23 | 24 | 25 | import numpy 26 | import os,sys 27 | from copy import deepcopy 28 | from math import sqrt, atan, pi 29 | from .util import vmag, vunit, vproj, vdot, sPBC, vmag2 30 | from ase import atoms, units 31 | from ..read_LOCPOT import align_vacuum 32 | 33 | class eneb: 34 | """ 35 | The generalized nudged elastic path (eneb) class. 36 | """ 37 | 38 | def __init__(self, p1, p2, numImages = 7, k = 5.0, tangent = "new", \ 39 | dneb = False, dnebOrg = False, method = 'normal', \ 40 | onlyci = False, weight = 1, parallel = False, ss = False, \ 41 | eneb = True, voltage=0.0, Ef_ref = -4.6, ne1=0.0, ne2=0.0, ne0=0.0, eweight=0.0, solPoisson=True, slab_norm='z', \ 42 | express = numpy.zeros((3,3)), fixstrain = numpy.ones((3,3)) ): 43 | """ 44 | The neb constructor. 45 | Parameters: 46 | p1.......... one endpoint of the path 47 | p2.......... the other endpoint of the path 48 | numImages... the total number of images in the path, including the 49 | endpoints 50 | k........... the spring force constant 51 | tangent..... the tangent method to use, "new" for the new tangent, 52 | anything else for the old tangent 53 | dneb........ set to true to use the double-nudging method 54 | dnebOrg..... set to true to use the original double-nudging method 55 | method...... "ci" for the climbing image method, anything else for 56 | normal NEB method 57 | ss........ boolean, cell change or not 58 | express..... external press, 3*3 lower triangular matrix in the 59 | unit of GPa 60 | fixstrain... 3*3 matrix as express. 61 | eneb........ boolean, number of electrons change or not 62 | voltage..... applied voltage wrt the reference electrode 63 | Ef_ref...... Fermi level of the reference electrode. Default: -4.6 for SHE 64 | ne0......... number of electrons at zero charge 65 | ne1......... number of electrons for the initial state at epotential 66 | ne2......... number of electrons for the final state at epotential 67 | vtot........ average Coulomb potential, to compensate the background charge in VASP 68 | solPoisson.. True - set compensate charges in the solvent, where VASPsol is required with lambda_d_k=3.0; 69 | False - use uniform background charges and the correction scheme from the Neurock group (PRB 73, 165402 (2006)); 70 | False needs to start the integration from zero charge for a common reference, still under test. 71 | slab_norm... string in ('x', 'y', 'z'), along which direction the vacuum is 72 | """ 73 | 74 | self.numImages = numImages 75 | self.k = k * numImages 76 | self.tangent = tangent 77 | self.dneb = dneb 78 | self.dnebOrg = dnebOrg 79 | self.method = method 80 | self.onlyci = onlyci 81 | self.weight = weight 82 | self.parallel = parallel 83 | self.ss = ss 84 | self.express = express * units.GPa 85 | if express[0][1]**2+express[0][2]**2+express[1][2]**2 > 1e-3: 86 | express[0][1] = 0 87 | express[0][2] = 0 88 | express[1][2] = 0 89 | if (not self.parallel) or (self.parallel and self.rank == 0): 90 | print("warning: xy, xz, yz components of the external pressure will be set to zero") 91 | self.fixstrain = fixstrain 92 | self.eneb = eneb 93 | self.epotential= -voltage + Ef_ref #electrochemical potential: the work function of the conter electrode under voltage 94 | self.ne0 = ne0 # number of electrons at zero charge 95 | self.eweight = eweight 96 | self.solPoisson = solPoisson 97 | self.direction = slab_norm # slab norm direction 98 | 99 | # check the orientation of the cell, make sure a is along x, b is on xoy plane 100 | if self.ss: 101 | for p in [p1,p2]: 102 | cr = p.get_cell() 103 | if cr[0][1]**2+cr[0][2]**2+cr[1][2]**2 > 1e-3: 104 | if (not self.parallel) or (self.parallel and self.rank == 0): 105 | print("check the orientation of the cell, make sure a is along x, b is on the x-y plane") 106 | sys.exit() 107 | 108 | # parallel over images through mpi4py 109 | if self.parallel: 110 | from mpi4py import MPI 111 | self.comm = MPI.COMM_WORLD 112 | self.size = self.comm.size 113 | self.rank = self.comm.rank 114 | self.MPIDB= MPI.DOUBLE 115 | 116 | # set the path by linear interpolation between end points 117 | n = self.numImages - 1 118 | self.path = [p1] 119 | self.path+= [p1.copy() for i in range(self.numImages-2)] 120 | self.path+= [p2] 121 | cell1 = p1.get_cell() 122 | cell2 = p2.get_cell() 123 | dRB = (cell2 - cell1) / n # path for cell 124 | # don't use get_scaled_positions() or apply sPBC() here 125 | # if the atoms can move over half of the lattice from initial to final 126 | icell = numpy.linalg.inv(cell1) 127 | vdir1 = numpy.dot(p1.get_positions(),icell) 128 | icell = numpy.linalg.inv(cell2) 129 | vdir2 = numpy.dot(p2.get_positions(),icell) 130 | dR = sPBC(vdir2 - vdir1) / n # path for direct coordinates 131 | calc = p1.get_calculator() 132 | # electrochemical or not 133 | if self.eneb: 134 | if ne0 == 0: 135 | print("Please set the total number electrons at zero charge, ne0") 136 | sys.exit() 137 | if ne2 == 0 or ne1 == 0: 138 | print("Please set the total number electrons in initial (ne1) and final (ne2) states at the desired voltage (epotential)") 139 | sys.exit() 140 | dne = (ne2-ne1) / (n + 0.0) 141 | for i in range(1, n): 142 | # making a directory for each image, which is nessecary for vasp to read last step's WAVECAR 143 | # also, it is good to prevent overwriting files for parallelizaiton over images 144 | fdname = '0'+str(i) 145 | if (not self.parallel) or (self.parallel and self.rank == 0): 146 | if not os.path.exists(fdname): os.mkdir(fdname) 147 | cellt = cell1 + dRB * i 148 | vdirt = vdir1 + dR * i 149 | rt = numpy.dot(vdirt,cellt) 150 | self.path[i].set_cell(cellt) 151 | self.path[i].set_positions(rt) 152 | self.path[i].set_calculator(calc) 153 | self.path[i].st = numpy.zeros((3,3)) 154 | # electrochemical or not 155 | if self.eneb: 156 | self.path[i].ne = ne1 + dne * i 157 | self.path[i].mue = numpy.zeros((1,3)) 158 | self.Umaxi = 1 159 | 160 | # calculate the Jacobian so that a cell move have the same units and weight as an atomic move 161 | vol1 = self.path[0].get_volume() 162 | vol2 = self.path[self.numImages-1].get_volume() 163 | vol = (vol1+vol2)*0.5 164 | self.natom = len(self.path[0]) 165 | avglen = (vol/self.natom)**(1.0/3.0) 166 | self.jacobian = avglen * self.natom**0.5 * self.weight 167 | 168 | # add some new properties 169 | for i in [0,n]: 170 | fdname = '0'+str(i) 171 | backfd = '../' 172 | if self.parallel: 173 | fdname += '/'+str(self.rank)+str(i) 174 | backfd = '../../' 175 | if not os.path.exists(fdname): os.makedirs(fdname) 176 | os.chdir(fdname) 177 | # electrochemical 178 | if self.eneb: 179 | self.path[i].ne = ne1 + dne * i 180 | self.path[i]._calc.set(nelect = self.path[i].ne) 181 | print(i, self.path[i].ne) 182 | self.path[i].u = self.path[i].get_potential_energy() 183 | self.path[i].f = self.path[i].get_forces() 184 | if self.ss: stt = self.path[i].get_stress() 185 | if self.eneb: 186 | self.path[i].mue = numpy.zeros((1,3)) 187 | self.get_mue(i) 188 | # calculate the eU term and energy correction in electrochemical constant voltage setting 189 | self.path[i].u += (self.path[i].ne-self.ne0) * (-self.epotential + self.path[i].vtot) 190 | os.chdir(backfd) 191 | self.path[i].cellt = self.path[i].get_cell() * self.jacobian 192 | self.path[i].icell = numpy.linalg.inv(self.path[i].get_cell()) 193 | self.path[i].vdir = self.path[i].get_scaled_positions() 194 | self.path[i].st = numpy.zeros((3,3)) 195 | # solid-state or not 196 | if self.ss: 197 | vol = self.path[i].get_volume()*(-1) 198 | self.path[i].st[0][0] = stt[0] * vol 199 | self.path[i].st[1][1] = stt[1] * vol 200 | self.path[i].st[2][2] = stt[2] * vol 201 | self.path[i].st[2][1] = stt[3] * vol 202 | self.path[i].st[2][0] = stt[4] * vol 203 | self.path[i].st[1][0] = stt[5] * vol 204 | self.path[i].st -= self.express * (-1)*vol 205 | self.path[i].st *= self.fixstrain 206 | 207 | # calculate the PV term in the enthalpy E+PV, setting image 0 as reference 208 | dcell = self.path[i].get_cell() - self.path[0].get_cell() 209 | strain = numpy.dot(self.path[0].icell, dcell) 210 | pv = numpy.vdot(self.express, strain) * self.path[0].get_volume() 211 | #if (not self.parallel) or (self.parallel and self.rank == 0): 212 | #print "i,pv:",i,pv 213 | self.path[i].u += pv 214 | 215 | def get_mue(self, imgi): 216 | #self.path[imgi].ne = self.path[imgi]._calc.get_number_of_electrons() 217 | 218 | # aligh the vacuum level and get the potential shift due to the compensating charge 219 | # vacuumE is used when the charge is compensated in solvent by VSAPsol 220 | # vtot_new is integrated when the charge is compensated by uniform background charge 221 | vacuumE, vtot_new = align_vacuum(direction = self.direction, LOCPOTfile='LOCPOT') 222 | 223 | if self.solPoisson: 224 | self.path[imgi].vtot = -vacuumE 225 | else: 226 | try: self.vtot0 += 0 # if vtot0 exists, do nothing 227 | except: self.vtot0 = vtot_new # save the first vtot_new as vtot0 228 | # start from zero charge for absolute reference 229 | self.path[imgi].vtot = (self.vtot0 + vtot_new)*0.5 230 | self.path[imgi].mue[0][0] = self.epotential - (self.path[imgi]._calc.get_fermi_level() - vacuumE) 231 | print("image {}, mu of electron: {}, number of electrons: {} ".format(imgi, self.path[imgi].mue[0][0], self.path[imgi].ne)) 232 | #print "done." 233 | 234 | def forces(self): 235 | """ 236 | Calculate the forces for each image on the path. Applies the force due 237 | to the potential and the spring forces. 238 | Parameters: 239 | force - the potential energy force. 240 | """ 241 | 242 | # Calculate the force due to the potential on the intermediate points 243 | 244 | #=========================== Begin potential energy evaluation ============================== 245 | #--------------------------- MPI version ------------------------- 246 | if self.parallel: 247 | imgi = self.rank+1 248 | fdname = '0'+str(imgi) 249 | os.chdir(fdname) 250 | self.path[imgi].u = self.path[imgi].get_potential_energy() 251 | self.path[imgi].f = self.path[imgi].get_forces() 252 | if self.ss: stt = self.path[imgi].get_stress() 253 | os.chdir('../') 254 | 255 | try: 256 | self.path[imgi].st 257 | except: 258 | self.path[imgi].st = numpy.zeros((3,3)) 259 | # solid-state or not 260 | if self.ss: 261 | vol = self.path[imgi].get_volume()*(-1) 262 | self.path[imgi].st[0][0] = stt[0] * vol 263 | self.path[imgi].st[1][1] = stt[1] * vol 264 | self.path[imgi].st[2][2] = stt[2] * vol 265 | self.path[imgi].st[2][1] = stt[3] * vol 266 | self.path[imgi].st[2][0] = stt[4] * vol 267 | self.path[imgi].st[1][0] = stt[5] * vol 268 | self.path[imgi].st[0][1] = 0.0 269 | self.path[imgi].st[0][2] = 0.0 270 | self.path[imgi].st[1][2] = 0.0 271 | self.path[imgi].st -= self.express * vol*(-1) 272 | self.path[imgi].st *= self.fixstrain 273 | 274 | ui = self.path[imgi].u 275 | fi = self.path[imgi].f 276 | sti = self.path[imgi].st 277 | msg_s = numpy.vstack((fi, sti, [ui,0.0,0.0])) 278 | msg_r = numpy.zeros((self.size, self.natom+4,3)) 279 | 280 | #The following pypar send and receive are equivalent to Allgather() 281 | #msg_r=pypar.gather(msg_s,0,buffer=msg_r) 282 | #msg_r=pypar.broadcast(msg_r,0) 283 | self.comm.Allgather([msg_s, self.MPIDB], [msg_r, self.MPIDB]) 284 | 285 | for i in range(1, self.numImages - 1): 286 | self.path[i].f = msg_r[i-1][:-4] 287 | self.path[i].st = msg_r[i-1][-4:-1] 288 | self.path[i].u = msg_r[i-1][-1][0] 289 | #--------------------------- Serial version ------------------------- 290 | else: 291 | for i in range(1, self.numImages - 1): 292 | # writing input and do the calculation in images' directories respectively 293 | fdname = '0'+str(i) 294 | os.chdir(fdname) 295 | # electrochemical 296 | if self.eneb: 297 | self.path[i]._calc.set(nelect = self.path[i].ne) 298 | self.path[i].u = self.path[i].get_potential_energy() 299 | self.path[i].f = self.path[i].get_forces() 300 | if self.ss: stt = self.path[i].get_stress() 301 | if self.eneb: 302 | self.get_mue(i) 303 | # calculate the eU term and energy correction in electrochemical constant voltage setting 304 | self.path[i].u += (self.path[i].ne-self.ne0) * (-self.epotential + self.path[i].vtot) 305 | os.chdir('../') 306 | # solid-state or not 307 | if self.ss: 308 | vol = self.path[i].get_volume()*(-1) 309 | self.path[i].st[0][0] = stt[0] * vol 310 | self.path[i].st[1][1] = stt[1] * vol 311 | self.path[i].st[2][2] = stt[2] * vol 312 | self.path[i].st[2][1] = stt[3] * vol 313 | self.path[i].st[2][0] = stt[4] * vol 314 | self.path[i].st[1][0] = stt[5] * vol 315 | self.path[i].st[0][1] = 0.0 316 | self.path[i].st[0][2] = 0.0 317 | self.path[i].st[1][2] = 0.0 318 | self.path[i].st -= self.express * vol*(-1) 319 | self.path[i].st *= self.fixstrain 320 | #=========================== End potential energy evaluation ============================== 321 | 322 | for i in range(1, self.numImages - 1): 323 | self.path[i].cellt = self.path[i].get_cell() * self.jacobian 324 | self.path[i].icell = numpy.linalg.inv(self.path[i].get_cell()) 325 | self.path[i].vdir = self.path[i].get_scaled_positions() 326 | 327 | # calculate the PV term in the enthalpy E+PV, setting image 0 as reference 328 | dcell = self.path[i].get_cell() - self.path[0].get_cell() 329 | strain = numpy.dot(self.path[0].icell, dcell) 330 | pv = numpy.vdot(self.express, strain) * self.path[0].get_volume() 331 | if (not self.parallel) or (self.parallel and self.rank == 0): 332 | #print "i,pv:",i,pv 333 | print("i,mue:", i, self.path[i].mue) 334 | self.path[i].u += pv 335 | 336 | if i == 1 or self.path[i].u > self.Umax: 337 | self.Umax = self.path[i].u 338 | self.Umaxi = i 339 | 340 | # Loop over each intermediate point and calculate the tangent. 341 | for i in range(1, self.numImages - 1): 342 | 343 | # Here st should be the Cauchy stress tensor times cell volume. 344 | # Timing box volume should have been done. 345 | self.path[i].totalf = numpy.vstack((self.path[i].f, self.path[i].st / self.jacobian)) 346 | # electrochemical 347 | if self.eneb: 348 | tmpw = self.eweight if self.eweight else 1.0 349 | self.path[i].totalf = numpy.vstack((self.path[i].totalf, self.path[i].mue / tmpw)) 350 | # realtf that needed by nebspline.pl is saved for output 351 | self.path[i].realtf = deepcopy(self.path[i].totalf) 352 | 353 | # If we're using the 'old' tangent, the tangent is defined as the 354 | # vector from the point behind the current image to the point in 355 | # front of the current image. 356 | # Haven't implemented for ssneb 357 | if self.tangent == 'old': 358 | self.path[i].n = (self.path[i + 1].r - self.path[i - 1].r) 359 | 360 | # Otherwise, we're using the 'new' tangent. 361 | # Ref: 362 | # G. Henkelman and H. Jonsson, Improved tangent estimate in the 363 | # nudged elastic path method for finding minimum energy paths and 364 | # saddle points, J. Chem. Phys. 113, 9978-9985 (2000) 365 | else: 366 | # UPm1: is the previous image higher in energy 367 | # UPp1: is the next image higher in energy 368 | UPm1 = self.path[i - 1].u > self.path[i].u 369 | UPp1 = self.path[i + 1].u > self.path[i].u 370 | 371 | # if V(i+1)>V(i)>V(i-1) 372 | # or V(i+1) Up1): 418 | dr_dir = sPBC(self.path[i + 1].vdir - self.path[i].vdir) 419 | avgbox = 0.5*(self.path[i + 1].get_cell() + self.path[i].get_cell()) 420 | sn = numpy.dot(dr_dir,avgbox) * Umin 421 | dr_dir = sPBC(self.path[i].vdir - self.path[i - 1].vdir) 422 | avgbox = 0.5*(self.path[i].get_cell() + self.path[i - 1].get_cell()) 423 | sn += numpy.dot(dr_dir,avgbox) * Umax 424 | 425 | dh = self.path[i + 1].cellt - self.path[i].cellt 426 | snb1 = numpy.dot(self.path[i].icell, dh)*0.5 + numpy.dot(self.path[i + 1].icell, dh)*0.5 427 | dh = self.path[i].cellt - self.path[i - 1].cellt 428 | snb2 = numpy.dot(self.path[i].icell, dh)*0.5 + numpy.dot(self.path[i - 1].icell, dh)*0.5 429 | snb = snb1 * Umin + snb2 * Umax 430 | self.path[i].n = numpy.vstack((sn,snb)) 431 | # electrochemical 432 | if self.eneb: 433 | sne1 = numpy.zeros((1,3)) 434 | sne1[0][0] = (self.path[i + 1].ne - self.path[i].ne) * self.eweight 435 | sne2 = numpy.zeros((1,3)) 436 | sne2[0][0] = (self.path[i].ne - self.path[i - 1].ne) * self.eweight 437 | sne = sne1 * Umin + sne2 * Umax 438 | self.path[i].n = numpy.vstack((self.path[i].n, sne)) 439 | else: 440 | dr_dir = sPBC(self.path[i + 1].vdir - self.path[i].vdir) 441 | avgbox = 0.5*(self.path[i + 1].get_cell() + self.path[i].get_cell()) 442 | sn = numpy.dot(dr_dir,avgbox) * Umax 443 | dr_dir = sPBC(self.path[i].vdir - self.path[i - 1].vdir) 444 | avgbox = 0.5*(self.path[i].get_cell() + self.path[i - 1].get_cell()) 445 | sn += numpy.dot(dr_dir,avgbox) * Umin 446 | 447 | dh = self.path[i + 1].cellt - self.path[i].cellt 448 | snb1 = numpy.dot(self.path[i].icell, dh)*0.5 + numpy.dot(self.path[i + 1].icell, dh)*0.5 449 | dh = self.path[i].cellt - self.path[i - 1].cellt 450 | snb2 = numpy.dot(self.path[i].icell, dh)*0.5 + numpy.dot(self.path[i - 1].icell, dh)*0.5 451 | snb = snb1 * Umax + snb2 * Umin 452 | self.path[i].n = numpy.vstack((sn,snb)) 453 | # electrochemical 454 | if self.eneb: 455 | sne1 = numpy.zeros((1,3)) 456 | sne1[0][0] = (self.path[i + 1].ne - self.path[i].ne) * self.eweight 457 | sne2 = numpy.zeros((1,3)) 458 | sne2[0][0] = (self.path[i].ne - self.path[i - 1].ne) * self.eweight 459 | sne = sne1 * Umax + sne2 * Umin 460 | self.path[i].n = numpy.vstack((self.path[i].n,sne)) 461 | 462 | # Normalize each tangent 463 | if (not self.parallel) or (self.parallel and self.rank == 0): 464 | print("==========!tangent contribution!==========") 465 | print("Jacobian:", self.jacobian) 466 | print("ImageNum atom cell") 467 | for i in range(1,self.numImages-1): 468 | self.path[i].n = vunit(self.path[i].n) 469 | if (not self.parallel) or (self.parallel and self.rank == 0): 470 | print(i, vmag(self.path[i].n[:-3]), vmag(self.path[i].n[-3:])) 471 | 472 | # Loop over each intermediate image and adjust the potential energy, 473 | # force, and apply the spring force. 474 | for i in range(1, self.numImages - 1): 475 | 476 | # push the climbing image uphill 477 | if self.method == 'ci' and i == self.Umaxi: 478 | self.path[i].totalf -= 2.0 * vproj(self.path[i].totalf, self.path[i].n) 479 | self.path[i].fPerp = self.path[i].totalf 480 | 481 | # and for the non-climbing images... 482 | else: 483 | 484 | # Calculate the force perpendicular to the tangent. 485 | self.path[i].fPerp = self.path[i].totalf - vproj(self.path[i].totalf, \ 486 | self.path[i].n) 487 | # Calculate the spring force. 488 | Rm1 = sPBC(self.path[i - 1].vdir - self.path[i].vdir) 489 | avgbox = 0.5*(self.path[i - 1].get_cell() + self.path[i].get_cell()) 490 | Rm1 = numpy.dot(Rm1,avgbox) 491 | dh = self.path[i - 1].cellt - self.path[i].cellt 492 | Rm1b = numpy.dot(self.path[i].icell, dh)*0.5 + numpy.dot(self.path[i - 1].icell, dh)*0.5 493 | Rm1 = numpy.vstack((Rm1,Rm1b)) 494 | # electrochemical 495 | if self.eneb: 496 | Rm1e = numpy.zeros((1,3)) 497 | Rm1e[0][0] = (self.path[i - 1].ne - self.path[i].ne) * self.eweight 498 | Rm1 = numpy.vstack((Rm1,Rm1e)) 499 | 500 | Rp1 = sPBC(self.path[i + 1].vdir - self.path[i].vdir) 501 | avgbox = 0.5*(self.path[i + 1].get_cell() + self.path[i].get_cell()) 502 | Rp1 = numpy.dot(Rp1,avgbox) 503 | dh = self.path[i + 1].cellt - self.path[i].cellt 504 | Rp1b = numpy.dot(self.path[i].icell, dh)*0.5+numpy.dot(self.path[i + 1].icell, dh)*0.5 505 | Rp1 = numpy.vstack((Rp1,Rp1b)) 506 | # electrochemical 507 | if self.eneb: 508 | Rp1e = numpy.zeros((1,3)) 509 | Rp1e[0][0] = (self.path[i + 1].ne - self.path[i].ne) * self.eweight 510 | Rp1 = numpy.vstack((Rp1,Rp1e)) 511 | 512 | self.path[i].fsN = (vmag(Rp1) - vmag(Rm1)) * self.k * self.path[i].n 513 | #print i, vmag(Rp1),vmag(Rm1) 514 | 515 | # For dneb use total spring force -spring force in the grad direction. 516 | if self.dneb: 517 | self.path[i].fs = (Rp1 + Rm1) * self.k 518 | self.path[i].fsperp = self.path[i].fs - \ 519 | vproj(self.path[i].fs, self.path[i].n) 520 | self.path[i].fsdneb = self.path[i].fsperp - \ 521 | vproj(self.path[i].fs, self.path[i].fPerp) 522 | 523 | # dneb modification so that it will converge 524 | if not self.dnebOrg: 525 | FperpSQ = vmag2(self.path[i].fPerp) 526 | FsperpSQ = vmag2(self.path[i].fsperp) 527 | if FsperpSQ > 0: 528 | self.path[i].fsdneb *= 2.0/pi*atan(FperpSQ/FsperpSQ) 529 | 530 | # Not using double-nudging, so set the double-nudging spring 531 | # force to zero. 532 | else: 533 | self.path[i].fsdneb = 0 534 | 535 | # The final force is the sum of these forces. 536 | self.path[i].totalf = self.path[i].fsdneb + self.path[i].fsN + \ 537 | self.path[i].fPerp 538 | 539 | # only move the climing image 540 | if(self.method == 'ci' and self.onlyci): 541 | self.path[i].totalf *= 0.0 542 | 543 | -------------------------------------------------------------------------------- /ecb/eneb/fire_essneb.py: -------------------------------------------------------------------------------- 1 | 2 | from .util import vdot,vmag,vunit 3 | from .minimizer_essneb import minimizer_ssneb 4 | import numpy as np 5 | 6 | class fire_essneb(minimizer_ssneb): 7 | 8 | def __init__(self, path, maxmove = 0.2, dt = 0.1, dtmax = 1.0, 9 | Nmin = 5, finc = 1.1, fdec = 0.5, astart = 0.1, fa = 0.99): 10 | """ 11 | path - neb object to optimize 12 | 13 | Fire initializer function, called in script before min 14 | Optional arguments: 15 | dt: initial dynamical timestep 16 | dtmax: maximum timestep 17 | Nmin: ??? 18 | finc: ??? 19 | fdec: ??? 20 | astart: ??? 21 | fa: ??? 22 | maxmove: maximum amount the point can move during optimization 23 | """ 24 | 25 | minimizer_ssneb.__init__(self, path) 26 | self.maxmove=maxmove 27 | self.dt=dt 28 | self.dtmax=dtmax 29 | self.Nmin=Nmin 30 | self.finc=finc 31 | self.fdec=fdec 32 | self.astart = astart 33 | self.a=astart 34 | self.fa=fa 35 | self.Nsteps=0 36 | 37 | #self.v contains the velocity for both atoms and box for one image 38 | i = self.band.numImages-2 39 | #j = self.band.natom+3 40 | # electrochemical, add number of electrons in the variable vector 41 | if self.band.eneb: 42 | j = self.band.natom+4 43 | else: 44 | j = self.band.natom+3 45 | self.v = np.zeros((i,j,3)) 46 | 47 | 48 | def step(self): 49 | """ 50 | Fire step 51 | """ 52 | self.band.forces() 53 | totalf = self.v.copy() 54 | for i in range(1, self.band.numImages - 1): 55 | totalf[i-1] = self.band.path[i].totalf 56 | Power = vdot(totalf,self.v) 57 | 58 | if Power > 0.0: 59 | self.v = (1.0-self.a)*self.v + self.a*vmag(self.v)*vunit(totalf) 60 | if(self.Nsteps>self.Nmin): 61 | self.dt = min(self.dt*self.finc,self.dtmax) 62 | self.a *= self.fa 63 | self.Nsteps += 1 64 | else: 65 | # reset velocity and slow down 66 | self.v *= 0.0 67 | self.a = self.astart 68 | self.dt *= self.fdec 69 | self.Nsteps = 0 70 | 71 | # Euler step 72 | self.v += self.dt * totalf 73 | # check for max step 74 | #if vmag(self.v) > self.maxmove/self.dt : 75 | # self.v = self.maxmove/self.dt * vunit(self.v) 76 | 77 | for i in range(1, self.band.numImages - 1): 78 | dR = self.dt * self.v[i-1] 79 | if vmag(dR) > self.maxmove: 80 | dR = self.maxmove * vunit(dR) 81 | # move R 82 | rt = self.band.path[i].get_positions() 83 | #rt += dR[:-3] 84 | # electrochemical, add number of electrons in the variable vector 85 | if self.band.eneb: 86 | rt += dR[:-4] 87 | else: 88 | rt += dR[:-3] 89 | self.band.path[i].set_positions(rt) 90 | 91 | # move box and update cartesian coordinates 92 | ct = self.band.path[i].get_cell() 93 | #ct += np.dot(ct, dR[-3:]) / self.band.jacobian 94 | # electrochemical, add number of electrons in the variable vector 95 | if self.band.eneb: 96 | ct += np.dot(ct, dR[-4:-1]) / self.band.jacobian 97 | else: 98 | ct += np.dot(ct, dR[-3:]) / self.band.jacobian 99 | self.band.path[i].set_cell(ct, scale_atoms=True) 100 | 101 | # electrochemical, add number of electrons in the variable vector 102 | if self.band.eneb: 103 | tmpw = self.band.eweight if self.band.eweight else 1.0 104 | dne = dR[-1][0] / tmpw 105 | print("imagei and dne: ", i, dne) 106 | self.band.path[i].ne += dne 107 | 108 | -------------------------------------------------------------------------------- /ecb/eneb/minimizer_essneb.py: -------------------------------------------------------------------------------- 1 | ''' 2 | ssneb mimizer superclass 3 | ''' 4 | 5 | from .util import vmag, sPBC 6 | from ase import io 7 | from numpy import dot,sqrt,vdot 8 | 9 | class minimizer_ssneb: 10 | ''' 11 | Neb minimizer superclass 12 | ''' 13 | 14 | def __init__(self, band): 15 | self.band = band 16 | 17 | def minimize(self, forceConverged = 0.01, maxIterations = 1000): 18 | ''' 19 | Minimize the neb 20 | forceConverged - stopping criterion; magnitue of the force vector 21 | maxForceCalls - maximum number of force calls allowed 22 | maxIterations - maximum number of iterations allowed 23 | ''' 24 | fMax = 1e300 25 | iterations = 0 26 | if (not self.band.parallel) or (self.band.parallel and self.band.rank == 0) : 27 | print("Iteration Total Force Perp Force MaxU MaxI Stress on CI ") 28 | print("---------------------------------------------------------------------------------------") 29 | feout = open('fe.out','a') 30 | feout.write('Iteration Total Force Perp Force MaxU MaxI Stress on CI \n') 31 | feout.write('------------------------------------------------------------ \n') 32 | mepout = open('mep.out','a') 33 | while fMax > forceConverged and iterations < maxIterations: 34 | self.step() 35 | fMax = 0.0 36 | fPMax = 0.0 37 | for i in range(1, self.band.numImages - 1): 38 | fi = vmag(self.band.path[i].totalf) 39 | fPi = vmag(self.band.path[i].fPerp) 40 | #fi = np.max(abs(self.band.path[i].totalf)) 41 | #fPi = np.max(abs(self.band.path[i].fPerp))/self.band.jacobian 42 | if fi > fMax: 43 | fMax = fi 44 | if fPi > fPMax: 45 | fPMax = fPi 46 | if (not self.band.parallel) or (self.band.parallel and self.band.rank == 0) : 47 | #if iterations % 50 == 0: 48 | io.write(str(i)+'.CON',self.band.path[i],format='vasp') 49 | 50 | maxi=self.band.Umaxi 51 | fci =self.band.path[maxi].st 52 | fci =vmag(fci) 53 | #fci =np.max(abs(fci))/self.band.jacobian 54 | output = str(iterations+1)+' '+str(fMax)+' '+str(fPMax)+' ' \ 55 | +str(self.band.Umax-self.band.path[0].u)+' '+str(self.band.Umaxi) \ 56 | +' '+str(fci) + ' '+str(self.dt) 57 | 58 | if (not self.band.parallel) or (self.band.parallel and self.band.rank == 0) : 59 | print("-------------------------SSNEB------------------------------") 60 | print(output) 61 | feout.write(output+'\n') 62 | mepout.write("Image ReCoords E RealForce Image \n") 63 | feout.flush() 64 | mepout.flush() 65 | 66 | iterations += 1 67 | 68 | # write data for MEP every step 69 | for i in range(self.band.numImages): 70 | if i==0: 71 | Rm1 = 0.0 72 | R20 = 0.0 73 | realtotalf = 0.0 74 | else: 75 | Rm1 = sPBC(self.band.path[i - 1].vdir - self.band.path[i].vdir) 76 | avgb = 0.5*(self.band.path[i - 1].get_cell() + self.band.path[i].get_cell()) 77 | Rm1 = dot(Rm1,avgb) 78 | dh = self.band.path[i - 1].cellt - self.band.path[i].cellt 79 | Rm1b = dot(self.band.path[i].icell, dh) 80 | Rm1 = sqrt(vdot(Rm1,Rm1)+vdot(Rm1b,Rm1b)) 81 | if self.band.eneb: 82 | dne = self.band.path[i - 1].ne - self.band.path[i].ne 83 | Rm1e = (dne*self.band.eweight) 84 | Rm1 = sqrt(Rm1**2 + Rm1e**2) 85 | if i==self.band.numImages-1: 86 | realtotalf = 0 87 | else: 88 | realtotalf = vdot(self.band.path[i].realtf,self.band.path[i].n) 89 | R20 += Rm1 90 | if (not self.band.parallel) or (self.band.parallel and self.band.rank == 0) : 91 | mepout.write( "%3i %13.6f %13.6f %13.6f %3i %s" % (i,float(R20),float(self.band.path[i].u-self.band.path[0].u),float(realtotalf),i,'\n')) 92 | 93 | # write data for neb.dat 94 | if (not self.band.parallel) or (self.band.parallel and self.band.rank == 0) : 95 | print("-----------------------SSNEB Finished------------------------------") 96 | feout.write("-----------------------SSNEB Finished------------------------------\n") 97 | feout.close() 98 | mepout.close() 99 | 100 | -------------------------------------------------------------------------------- /ecb/eneb/qm_essneb.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Nudged elastic band quick-min optimizer module 3 | ''' 4 | 5 | from .util import vproj,vdot,vmag,vunit 6 | from .minimizer_essneb import minimizer_ssneb 7 | import numpy as np 8 | 9 | class qm_essneb(minimizer_ssneb): 10 | ''' 11 | Class containing a quick-min optimizer for nudged elastic bands 12 | ''' 13 | 14 | def __init__(self, path, maxmove=0.2, dt=0.05): 15 | ''' 16 | Constructor 17 | path - neb object to optimize 18 | pot - potential energy surface to optimize on 19 | maxmove - maximum distance that the optimizer can move in one step 20 | dt - differential timestep 21 | ''' 22 | minimizer_ssneb.__init__(self, path) 23 | self.maxmove = maxmove 24 | self.dt=dt 25 | 26 | #self.v contains the velocity for both atoms and box for one image 27 | i = self.band.numImages-2 28 | #j = self.band.natom+3 29 | # electrochemical, add number of electrons in the variable vector 30 | if self.band.eneb: 31 | j = self.band.natom+4 32 | else: 33 | j = self.band.natom+3 34 | self.v = np.zeros((i,j,3)) 35 | 36 | 37 | def step(self): 38 | ''' 39 | Take a step 40 | ''' 41 | self.band.forces() 42 | for i in range(1, len(self.band.path) - 1): 43 | totalf = self.band.path[i].totalf 44 | Power = vdot(totalf,self.v[i-1]) 45 | if Power > 0.0 : 46 | self.v[i-1] = vproj(self.v[i-1], totalf) 47 | else: 48 | self.v[i-1] *= 0.0 49 | #self.dt *= 0.999 50 | # Euler step 51 | self.v[i-1] += self.dt * totalf 52 | 53 | # check for max step 54 | if vmag(self.v[i-1]) > self.maxmove/self.dt : 55 | self.v[i-1] = self.maxmove/self.dt * vunit(self.v[i-1]) 56 | dR = self.dt * self.v[i-1] 57 | # move R 58 | rt = self.band.path[i].get_positions() 59 | #rt += dR[:-3] 60 | # electrochemical, add number of electrons in the variable vector 61 | if self.band.eneb: 62 | rt += dR[:-4] 63 | else: 64 | rt += dR[:-3] 65 | self.band.path[i].set_positions(rt) 66 | # move box and update cartesian coordinates 67 | ct = self.band.path[i].get_cell() 68 | #ct += np.dot(ct, dR[-3:]) / self.band.jacobian 69 | # electrochemical, add number of electrons in the variable vector 70 | if self.band.eneb: 71 | ct += np.dot(ct, dR[-4:-1]) / self.band.jacobian 72 | else: 73 | ct += np.dot(ct, dR[-3:]) / self.band.jacobian 74 | self.band.path[i].set_cell(ct, scale_atoms=True) 75 | # electrochemical, add number of electrons in the variable vector 76 | if self.band.eneb: 77 | tmpw = self.band.eweight if self.band.eweight else 1.0 78 | dne = dR[-1][0] / tmpw 79 | print("imagei and dne: ", i, dne) 80 | self.band.path[i].ne += dne 81 | 82 | 83 | -------------------------------------------------------------------------------- /ecb/eneb/util.py: -------------------------------------------------------------------------------- 1 | """ 2 | Various utility functions for the neb. 3 | """ 4 | 5 | 6 | import numpy 7 | from math import sqrt, sin, cos, log, pi, ceil 8 | 9 | def sPBC(vdir): 10 | return (vdir % 1.0 + 1.5) % 1.0 - 0.5 11 | 12 | 13 | def DBC(r, box = None, ibox = 0): 14 | """ 15 | Applies periodic boundary conditions. 16 | Parameters: 17 | r: the vector the boundary conditions are applied to 18 | box: the box that defines the boundary conditions 19 | ibox: the inverse of the box 20 | """ 21 | if box is None: 22 | printf("No box given", ERR) 23 | return r 24 | if ibox is 0: 25 | ibox = numpy.linalg.inv(box) 26 | vdir = numpy.dot(r, ibox) 27 | vdir = (vdir % 1.0 + 1.5) % 1.0 - 0.5 28 | return numpy.dot(vdir, box) 29 | 30 | 31 | def vproj(v1, v2): 32 | """ 33 | Returns the projection of v1 onto v2 34 | Parameters: 35 | v1, v2: numpy vectors 36 | """ 37 | mag2 = vmag2(v2) 38 | if mag2 == 0: 39 | printf("Can't project onto a zero vector", ERR) 40 | return v1 41 | return v2 * (vdot(v1, v2) / mag2) 42 | 43 | 44 | def vunit(v): 45 | """ 46 | Returns the unit vector corresponding to v 47 | Parameters: 48 | v: the vector to normalize 49 | """ 50 | mag = vmag(v) 51 | if mag == 0: 52 | printf("Can't normalize a zero vector", ERR) 53 | return v 54 | return v / mag 55 | 56 | 57 | def vmag(v): 58 | """ 59 | Returns the magnitude of v 60 | """ 61 | return numpy.sqrt(numpy.vdot(v,v)) 62 | #return sqrt((v * v).sum()) 63 | 64 | 65 | def vmag2(v): 66 | """ 67 | Returns the square of the magnitude of v 68 | """ 69 | return (v * v).sum() 70 | 71 | 72 | def vdot(v1, v2): 73 | """ 74 | Returns the dot product of v1 and v2 75 | """ 76 | return (v1 * v2).sum() 77 | 78 | def v2rotate(V1, V2, tTh): 79 | """ 80 | Rotate V1 and V2 in their plane by the angle tTh 81 | """ 82 | cTh = cos(tTh) 83 | sTh = sin(tTh) 84 | V1tmp = V1 85 | V1 = V1 * cTh + V2 * sTh 86 | V2 = V2 * cTh - V1tmp * sTh 87 | 88 | 89 | -------------------------------------------------------------------------------- /ecb/read_LOCPOT.py: -------------------------------------------------------------------------------- 1 | ''' 2 | the VaspoLocpot class is contributed by Nathan Keilbart 3 | https://gitlab.com/nathankeilbart/ase/-/blob/VaspLocpot/ase/calculators/vasp/vasp_auxiliary.py 4 | ''' 5 | from ase import Atoms 6 | import numpy as np 7 | from typing import Optional 8 | 9 | class VaspLocpot: 10 | """Class for reading the Locpot VASP file. 11 | 12 | Filename is normally LOCPOT. 13 | 14 | Coding is borrowed from the VaspChargeDensity class and altered to work for LOCPOT.""" 15 | def __init__(self, atoms: Atoms, pot: np.ndarray, 16 | spin_down_pot: Optional[np.ndarray] = None, 17 | magmom: Optional[np.ndarray] = None) -> None: 18 | self.atoms = atoms 19 | self.pot = pot 20 | self.spin_down_pot = spin_down_pot 21 | self.magmom = magmom 22 | 23 | @staticmethod 24 | def _read_pot(fobj, pot): 25 | """Read potential from file object 26 | 27 | Utility method for reading the actual potential from a file object. 28 | On input, the file object must be at the beginning of the charge block, on 29 | output the file position will be left at the end of the 30 | block. The pot array must be of the correct dimensions. 31 | 32 | """ 33 | # VASP writes charge density as 34 | # WRITE(IU,FORM) (((C(NX,NY,NZ),NX=1,NGXC),NY=1,NGYZ),NZ=1,NGZC) 35 | # Fortran nested implied do loops; innermost index fastest 36 | # First, just read it in 37 | for zz in range(pot.shape[2]): 38 | for yy in range(pot.shape[1]): 39 | pot[:, yy, zz] = np.fromfile(fobj, count=pot.shape[0], sep=' ') 40 | 41 | @classmethod 42 | def from_file(cls, filename='LOCPOT'): 43 | """Read LOCPOT file. 44 | 45 | LOCPOT contains local potential. 46 | 47 | Currently will check for a spin-up and spin-down component but has not been 48 | configured for a noncollinear calculation. 49 | 50 | """ 51 | import ase.io.vasp as aiv 52 | with open(filename,'r') as fd: 53 | try: 54 | atoms = aiv.read_vasp(fd) 55 | except (IOError, ValueError, IndexError): 56 | return print('Error reading in initial atomic structure.') 57 | fd.readline() 58 | ngr = fd.readline().split() 59 | ng = (int(ngr[0]), int(ngr[1]), int(ngr[2])) 60 | pot = np.empty(ng) 61 | cls._read_pot(fd, pot) 62 | # Check if the file has a spin-polarized local potential, and 63 | # if so, read it in. 64 | fl = fd.tell() 65 | # Check to see if there is more information 66 | line1 = fd.readline() 67 | if line1 == '': 68 | return cls(atoms,pot) 69 | # Check to see if the next line equals the previous grid settings 70 | elif line1.split() == ngr: 71 | spin_down_pot = np.empty(ng) 72 | cls._read_pot(fd, spin_down_pot) 73 | elif line1.split() != ngr: 74 | fd.seek(fl) 75 | magmom = np.fromfile(fd, count=len(atoms), sep=' ') 76 | line1 = fd.readline() 77 | if line1.split() == ngr: 78 | spin_down_pot = np.empty(ng) 79 | cls._read_pot(fd, spin_down_pot) 80 | fd.close() 81 | return cls(atoms, pot, spin_down_pot=spin_down_pot, magmom=magmom) 82 | 83 | def get_average_along_axis(self,axis=2,spin_down=False): 84 | """ 85 | Returns the average potential along the specified axis (0,1,2). 86 | 87 | axis: Which axis to average long 88 | spin_down: Whether to use the spin_down_pot instead of pot 89 | """ 90 | if axis not in [0,1,2]: 91 | return print('Must provide an integer value of 0, 1, or 2.') 92 | average = [] 93 | if spin_down: 94 | pot = self.spin_down_pot 95 | else: 96 | pot = self.pot 97 | if axis == 0: 98 | for i in range(pot.shape[axis]): 99 | average.append(np.average(pot[i,:,:])) 100 | elif axis == 1: 101 | for i in range(pot.shape[axis]): 102 | average.append(np.average(pot[:,i,:])) 103 | elif axis == 2: 104 | for i in range(pot.shape[axis]): 105 | average.append(np.average(pot[:,:,i])) 106 | return average 107 | 108 | def distance_along_axis(self,axis=2): 109 | """ 110 | Returns the scalar distance along axis (from 0 to 1). 111 | """ 112 | if axis not in [0,1,2]: 113 | return print('Must provide an integer value of 0, 1, or 2.') 114 | return np.linspace(0,1,self.pot.shape[axis],endpoint=False) 115 | 116 | def is_spin_polarized(self): 117 | return (self.spin_down_pot is not None) 118 | 119 | def align_vacuum(direction='Z', LOCPOTfile='LOCPOT'): 120 | 121 | ''' 122 | aligh the vacuum level to the avg LOCPOT at the end of the simulation box 123 | (make sure it is vacuum there) 124 | returns: 125 | the vacuum level () 126 | the average electrostatic potential (vtot_new) 127 | ''' 128 | # the direction to make average in 129 | # input should be x y z, or X Y Z. Default is Z. 130 | allowed = "xyzXYZ" 131 | if allowed.find(direction) == -1 or len(direction)!=1 : 132 | print("** WARNING: The direction was input incorrectly." ) 133 | print("** Setting to z-direction by default.") 134 | if direction.islower(): 135 | direction = direction.upper() 136 | filesuffix = "_%s" % direction 137 | 138 | # Open geometry and density class objects 139 | #----------------------------------------- 140 | axis_translate = {'X':0, 'Y':1, 'Z':2} 141 | ax = axis_translate[direction] 142 | #vasp_charge = VaspChargeDensity(filename = LOCPOTfile) 143 | vasp_locpot = VaspLocpot.from_file(filename = LOCPOTfile) 144 | average = vasp_locpot.get_average_along_axis(axis=ax) 145 | average = np.array(average) 146 | 147 | # lattice parameters and scale factor 148 | #--------------------------------------------- 149 | cell = vasp_locpot.atoms.cell 150 | # Find length of lattice vectors 151 | #-------------------------------- 152 | latticelength = np.dot(cell, cell.T).diagonal() 153 | latticelength = latticelength**0.5 154 | # Print out average 155 | #------------------- 156 | averagefile = LOCPOTfile + filesuffix 157 | #print("Writing averaged data to file %s..." % averagefile,) 158 | #sys.stdout.flush() 159 | outputfile = open(averagefile,"w") 160 | outputfile.write("# Distance(Ang) Potential(eV)\n") 161 | xdis = vasp_locpot.distance_along_axis(axis=ax) * latticelength[ax] 162 | for xi, poti in zip(xdis, average): 163 | outputfile.write("%15.8g %15.8g\n" % (xi,poti)) 164 | outputfile.close() 165 | del vasp_locpot 166 | 167 | vacuumE = average[-1] 168 | vtot_new = np.average(average-vacuumE) 169 | 170 | return vacuumE, vtot_new 171 | 172 | -------------------------------------------------------------------------------- /example/0.CON: -------------------------------------------------------------------------------- 1 | Cu O C 2 | 1.00000000000000 3 | 7.7663105829041044 0.0000000000000000 0.0000000000000000 4 | 0.0000000000000000 7.7663105829041044 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 23.6610437459507992 6 | Cu O C 7 | 27 2 2 8 | Selective dynamics 9 | Direct 10 | 0.0000000000000000 0.0000000000000000 0.4226348602937975 F F F 11 | 0.3333338788560241 0.0000000000000000 0.4226348602937975 F F F 12 | 0.6666677578408056 0.0000000000000000 0.4226348602937975 F F F 13 | 0.0000000000000000 0.3333338788560241 0.4226348602937975 F F F 14 | 0.3333338788560241 0.3333338788560241 0.4226348602937975 F F F 15 | 0.6666677578408056 0.3333338788560241 0.4226348602937975 F F F 16 | 0.0000000000000000 0.6666677578408056 0.4226348602937975 F F F 17 | 0.3333338788560241 0.6666677578408056 0.4226348602937975 F F F 18 | 0.6666677578408056 0.6666677578408056 0.4226348602937975 F F F 19 | 0.1666669394923943 0.1666669394923943 0.5000000000000000 F F F 20 | 0.5000008183484113 0.1666669394923943 0.5000000000000000 F F F 21 | 0.8333346972044353 0.1666669394923943 0.5000000000000000 F F F 22 | 0.1666669394923943 0.5000008183484113 0.5000000000000000 F F F 23 | 0.5000008183484113 0.5000008183484113 0.5000000000000000 F F F 24 | 0.8333346972044353 0.5000008183484113 0.5000000000000000 F F F 25 | 0.1666669394923943 0.8333346972044353 0.5000000000000000 F F F 26 | 0.5000008183484113 0.8333346972044353 0.5000000000000000 F F F 27 | 0.8333346972044353 0.8333346972044353 0.5000000000000000 F F F 28 | 0.0000000598748997 0.9995280087070171 0.5738921992665098 T T T 29 | 0.3306184583372342 0.9964655134286176 0.5759123117264764 T T T 30 | 0.6693806282737569 0.9964668572765945 0.5759115175152587 T T T 31 | 0.0000008959444386 0.3334255739081868 0.5740144545968917 T T T 32 | 0.3314753736338290 0.3372687366786948 0.5763309871770446 T T T 33 | 0.6685255678865261 0.3372699627364639 0.5763307755063494 T T T 34 | 0.0000009563807097 0.6666446980384535 0.5728446998599210 T T T 35 | 0.3299131540369729 0.6672108210992036 0.5723356838813487 T T T 36 | 0.6700879823960051 0.6672109487339739 0.5723331292691469 T T T 37 | 0.5000026153552639 0.9076352239419663 0.6847382425937951 T T T 38 | 0.5000008385495107 0.4077726138811286 0.6871393950957199 T T T 39 | 0.4999991006089104 0.9331007413797892 0.6351385467089656 T T T 40 | 0.4999974564056515 0.3838172923172181 0.6375864073355828 T T T 41 | 42 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 43 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 44 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 45 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 46 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 47 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 48 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 49 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 50 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 51 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 52 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 53 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 54 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 55 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 56 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 57 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 58 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 59 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 60 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 61 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 62 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 63 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 64 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 65 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 66 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 67 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 68 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 69 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 70 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 71 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 72 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 73 | -------------------------------------------------------------------------------- /example/6.CON: -------------------------------------------------------------------------------- 1 | Cu O C 2 | 1.00000000000000 3 | 7.7663105829041044 0.0000000000000000 0.0000000000000000 4 | 0.0000000000000000 7.7663105829041044 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 23.6610437459507992 6 | Cu O C 7 | 27 2 2 8 | Selective dynamics 9 | Direct 10 | 0.0000000000000000 0.0000000000000000 0.4226348602937975 F F F 11 | 0.3333338788560241 0.0000000000000000 0.4226348602937975 F F F 12 | 0.6666677578408056 0.0000000000000000 0.4226348602937975 F F F 13 | 0.0000000000000000 0.3333338788560241 0.4226348602937975 F F F 14 | 0.3333338788560241 0.3333338788560241 0.4226348602937975 F F F 15 | 0.6666677578408056 0.3333338788560241 0.4226348602937975 F F F 16 | 0.0000000000000000 0.6666677578408056 0.4226348602937975 F F F 17 | 0.3333338788560241 0.6666677578408056 0.4226348602937975 F F F 18 | 0.6666677578408056 0.6666677578408056 0.4226348602937975 F F F 19 | 0.1666669394923943 0.1666669394923943 0.5000000000000000 F F F 20 | 0.5000008183484113 0.1666669394923943 0.5000000000000000 F F F 21 | 0.8333346972044353 0.1666669394923943 0.5000000000000000 F F F 22 | 0.1666669394923943 0.5000008183484113 0.5000000000000000 F F F 23 | 0.5000008183484113 0.5000008183484113 0.5000000000000000 F F F 24 | 0.8333346972044353 0.5000008183484113 0.5000000000000000 F F F 25 | 0.1666669394923943 0.8333346972044353 0.5000000000000000 F F F 26 | 0.5000008183484113 0.8333346972044353 0.5000000000000000 F F F 27 | 0.8333346972044353 0.8333346972044353 0.5000000000000000 F F F 28 | 0.0000008645414198 0.9988085666859305 0.5730636310126656 T T T 29 | 0.3324037945109595 0.9965314954779529 0.5757101121802606 T T T 30 | 0.6675977966981037 0.9965311505710091 0.5757102915828582 T T T 31 | 0.0000008208681237 0.3343025823917358 0.5730774660215587 T T T 32 | 0.3322993987500951 0.3368194626309560 0.5756514937158030 T T T 33 | 0.6677021913907595 0.3368198008882146 0.5756515397405906 T T T 34 | 0.0000007872061971 0.6667301863919661 0.5725823263834968 T T T 35 | 0.3305384949864560 0.6667893594604593 0.5721213301486330 T T T 36 | 0.6694626795600200 0.6667892604678016 0.5721196839252869 T T T 37 | 0.5000007727188631 0.9816589082936389 0.6839484805588469 T T T 38 | 0.5000018399908868 0.3528932318290927 0.6837860893501215 T T T 39 | 0.5000007422024808 0.0667601103998905 0.6394265771773178 T T T 40 | 0.5000005806802150 0.2673580675837499 0.6393548738111363 T T T 41 | 42 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 43 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 44 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 45 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 46 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 47 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 48 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 49 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 50 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 51 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 52 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 53 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 54 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 55 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 56 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 57 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 58 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 59 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 60 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 61 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 62 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 63 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 64 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 65 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 66 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 67 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 68 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 69 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 70 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 71 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 72 | 0.00000000E+00 0.00000000E+00 0.00000000E+00 73 | -------------------------------------------------------------------------------- /example/constV_md.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | MD with a discrete voltage control 4 | ''' 5 | 6 | from ase.optimize.fire import FIRE 7 | from ase.io import read,write 8 | from ecb.eAtoms import eAtoms 9 | from ase.calculators.vasp import Vasp 10 | import os 11 | 12 | steps_cc = 2 # md steps with constant charge. Number of electrons is optimized (voltage control) every ncc steps. 13 | steps_total = 6 # total MD steps. 14 | nloops = int(steps_total/steps_cc) # number of outmost loops 15 | maxne = 1 # max number of steps for optimizing number of electrons 16 | 17 | p1 = read('0.CON',format='vasp') 18 | 19 | calc = Vasp(prec = 'Normal', 20 | ediff = 1e-5, 21 | #kpts = (2,2,1), 22 | kpts = (1,1,1), 23 | gamma= True, 24 | xc = 'rPBE', 25 | #lvdw = True, 26 | lcharg = False, 27 | isym = 0, 28 | ncore = 16, 29 | nsim = 4, 30 | algo = 'Fast', 31 | lreal= 'Auto', 32 | #lreal= False, 33 | lplane = True, 34 | encut= 400, 35 | ismear = 0, 36 | sigma = 0.05, 37 | #lmaxmix = 4, 38 | lvhar = True, 39 | ispin = 1, 40 | nelm = 60, 41 | lsol= True, 42 | eb_k=80, 43 | tau=0, 44 | lambda_d_k=3.0, 45 | nelect = 317.2, #initial number of electrons 46 | # md: 47 | ibrion = 0, 48 | potim = 0.5, 49 | nsw = steps_cc, 50 | mdalgo = 1, 51 | andersen_prob = 0.1, 52 | tebeg = 300, 53 | ) 54 | p1.set_calculator(calc) 55 | p1.get_potential_energy() 56 | 57 | # temporary folder for optimize ne 58 | tmpdir = 'tmp' 59 | if not os.path.exists(tmpdir): 60 | os.mkdir(tmpdir) 61 | # MD with a discrete voltage control 62 | for i in range(nloops): 63 | # ASE optimizor for ne, for ase.3.15 and later 64 | os.chdir(tmpdir) 65 | os.system('cp ../WAVECAR ./') 66 | p1ext = eAtoms(p1, voltage=-1.0, e_only=True) 67 | p1ext._calc.set(nsw = 0) 68 | dyn = FIRE(p1ext, maxstep = 0.1, dt = 0.1, dtmax = 0.1, force_consistent = False) 69 | dyn.run(fmax=0.01, steps=maxne) 70 | 71 | p1._calc.set(nelect = p1ext.ne[0][0]) 72 | p1._calc.set(nsw = steps_cc) 73 | os.chdir('../') 74 | os.system('cp CONTCAR POSCAR') 75 | 76 | trajdir = 'traj_'+str(i) 77 | if not os.path.exists(trajdir): 78 | os.mkdir(trajdir) 79 | os.system('cp XDATCAR OUTCAR INCAR '+trajdir) 80 | # constant charge MD by vasp 81 | p1._calc.write_incar(p1) 82 | # Execute VASP 83 | command = p1._calc.make_command(p1._calc.command) 84 | with p1._calc._txt_outstream() as out: 85 | errorcode = p1._calc._run(command=command, 86 | out=out, 87 | directory=p1._calc.directory) 88 | # Read output 89 | atoms_sorted = read('CONTCAR', format='vasp') 90 | # Update atomic positions and unit cell with the ones read from CONTCAR. 91 | p1.positions = atoms_sorted[p1._calc.resort].positions 92 | 93 | write("CONTCAR_Vot.vasp",p1,format='vasp',vasp5=True, direct=True) 94 | 95 | -------------------------------------------------------------------------------- /example/constV_opt.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | 4 | Structure optimization example under constant voltage with respect to SHE 5 | 6 | The code will use the last line in LOCPOT_Z to aligh the Fermi level, so 7 | 1. make sure the vacuum is in the third (c or z) axis 8 | 2. put the slab in the center of c 9 | 10 | ''' 11 | 12 | from ase.optimize.fire import FIRE 13 | from ase.io import read,write 14 | from ecb.eAtoms import eAtoms 15 | from ase.calculators.vasp import Vasp 16 | 17 | p1 = read('0.CON',format='vasp') 18 | 19 | calc = Vasp(prec = 'Normal', 20 | ediff = 1e-5, 21 | #kpts = (2,2,1), 22 | kpts = (1,1,1), 23 | gamma= True, 24 | xc = 'rPBE', 25 | #lvdw = True, 26 | lcharg = False, 27 | isym = 0, 28 | ncore = 16, # change according to your machine 29 | nsim = 4, 30 | algo = 'All', 31 | lreal= 'Auto', 32 | #lreal= False, 33 | lplane = True, 34 | encut= 400, 35 | #ismear = 0, 36 | #sigma = 0.05, 37 | #lmaxmix = 4, 38 | lvhar = True, 39 | ispin = 2, 40 | nelm = 60, 41 | lsol= True, 42 | eb_k=80, 43 | tau=0, 44 | lambda_d_k=3.0, 45 | nelect = 317.1999 46 | ) 47 | p1.set_calculator(calc) 48 | #print p1.get_potential_energy() 49 | 50 | p1box = eAtoms(p1, voltage = -1.0) 51 | 52 | # for ase.3.15 and later 53 | dyn = FIRE(p1box,maxmove = 0.1, dt = 0.1, dtmax = 0.1, force_consistent = False) 54 | #dyn = MDMin(p1box, dt=0.1, force_consistent = False) 55 | dyn.run(fmax=0.01, steps=1) 56 | 57 | write("CONTCAR_Vot.vasp",p1,format='vasp',vasp5=True, direct=True) 58 | 59 | -------------------------------------------------------------------------------- /example/results/1.CON: -------------------------------------------------------------------------------- 1 | Cu O C 2 | 1.0000000000000000 3 | 7.7663105829041044 0.0000000000000000 0.0000000000000000 4 | 0.0000000000000000 7.7663105829041044 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 23.6610437459507992 6 | 27 2 2 7 | Selective dynamics 8 | Cartesian 9 | 0.0000000000000000 0.0000000000000000 9.9999819179753473 F F F 10 | 2.5887744310000147 0.0000000000000000 9.9999819179753473 F F F 11 | 5.1775488629999993 0.0000000000000000 9.9999819179753473 F F F 12 | 0.0000000000000000 2.5887744310000147 9.9999819179753473 F F F 13 | 2.5887744310000147 2.5887744310000147 9.9999819179753473 F F F 14 | 5.1775488629999993 2.5887744310000147 9.9999819179753473 F F F 15 | 0.0000000000000000 5.1775488629999993 9.9999819179753473 F F F 16 | 2.5887744310000147 5.1775488629999993 9.9999819179753473 F F F 17 | 5.1775488629999993 5.1775488629999993 9.9999819179753473 F F F 18 | 1.2943872160000198 1.2943872160000198 11.8305218729753996 F F F 19 | 3.8831616469999792 1.2943872160000198 11.8305218729753996 F F F 20 | 6.4719360779999935 1.2943872160000198 11.8305218729753996 F F F 21 | 1.2943872160000198 3.8831616469999792 11.8305218729753996 F F F 22 | 3.8831616469999792 3.8831616469999792 11.8305218729753996 F F F 23 | 6.4719360779999935 3.8831616469999792 11.8305218729753996 F F F 24 | 1.2943872160000198 6.4719360779999935 11.8305218729753996 F F F 25 | 3.8831616469999792 6.4719360779999935 11.8305218729753996 F F F 26 | 6.4719360779999935 6.4719360779999935 11.8305218729753996 F F F 27 | 0.0000060924363476 7.7616581243194673 13.5801557358858833 T T T 28 | 2.5707607021670746 7.7340883857206100 13.6315447740258957 T T T 29 | 5.1954188023436858 7.7341496227274691 13.6314767356949513 T T T 30 | -0.0000780608043548 2.5896402028156764 13.5812667984266291 T T T 31 | 2.5714159348305752 2.6212878826623491 13.6325932461637169 T T T 32 | 5.1949483966541408 2.6212395726320117 13.6325222418387639 T T T 33 | 0.0002076883115772 5.1773583633306615 13.5534304172214686 T T T 34 | 2.5624122564001222 5.1787858730641787 13.5366395605747147 T T T 35 | 5.2037501876729193 5.1789028015245648 13.5366240038804229 T T T 36 | 3.8831349033239042 7.2581414374186428 16.2590136986562825 T T T 37 | 3.8833215909494356 3.0907408656496962 16.2618495679420541 T T T 38 | 3.8831135583366416 7.4004589931389519 15.0792869067005402 T T T 39 | 3.8832124229021652 2.9467738076832033 15.0824913256540984 T T T 40 | -------------------------------------------------------------------------------- /example/results/2.CON: -------------------------------------------------------------------------------- 1 | Cu O C 2 | 1.0000000000000000 3 | 7.7663105829041044 0.0000000000000000 0.0000000000000000 4 | 0.0000000000000000 7.7663105829041044 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 23.6610437459507992 6 | 27 2 2 7 | Selective dynamics 8 | Cartesian 9 | 0.0000000000000000 0.0000000000000000 9.9999819179753473 F F F 10 | 2.5887744310000147 0.0000000000000000 9.9999819179753473 F F F 11 | 5.1775488629999993 0.0000000000000000 9.9999819179753473 F F F 12 | 0.0000000000000000 2.5887744310000147 9.9999819179753473 F F F 13 | 2.5887744310000147 2.5887744310000147 9.9999819179753473 F F F 14 | 5.1775488629999993 2.5887744310000147 9.9999819179753473 F F F 15 | 0.0000000000000000 5.1775488629999993 9.9999819179753473 F F F 16 | 2.5887744310000147 5.1775488629999993 9.9999819179753473 F F F 17 | 5.1775488629999993 5.1775488629999993 9.9999819179753473 F F F 18 | 1.2943872160000198 1.2943872160000198 11.8305218729753996 F F F 19 | 3.8831616469999792 1.2943872160000198 11.8305218729753996 F F F 20 | 6.4719360779999935 1.2943872160000198 11.8305218729753996 F F F 21 | 1.2943872160000198 3.8831616469999792 11.8305218729753996 F F F 22 | 3.8831616469999792 3.8831616469999792 11.8305218729753996 F F F 23 | 6.4719360779999935 3.8831616469999792 11.8305218729753996 F F F 24 | 1.2943872160000198 6.4719360779999935 11.8305218729753996 F F F 25 | 3.8831616469999792 6.4719360779999935 11.8305218729753996 F F F 26 | 6.4719360779999935 6.4719360779999935 11.8305218729753996 F F F 27 | 0.0000893851975533 7.7622457726185070 13.5792556319730426 T T T 28 | 2.5721789523272758 7.7300013032292236 13.6331540452519882 T T T 29 | 5.1939853791366684 7.7300321634514138 13.6330844596266250 T T T 30 | 0.0001358989473423 2.5896075936895113 13.5804736380818536 T T T 31 | 2.5720454127998500 2.6254647425307596 13.6334928521271692 T T T 32 | 5.1941241952309340 2.6254236153692836 13.6334048956749854 T T T 33 | 0.0005298125755269 5.1774542949744777 13.5524861535665426 T T T 34 | 2.5628719223521341 5.1783203978787977 13.5319313665542467 T T T 35 | 5.2033785150660616 5.1786062145770586 13.5320538993191324 T T T 36 | 3.8831068205020949 7.4176153468496038 16.2852765434096121 T T T 37 | 3.8831388334323345 2.9395639926257466 16.2854588767032631 T T T 38 | 3.8830570282248984 7.5034776136812020 15.1010595802074015 T T T 39 | 3.8831805362685077 2.8525411759558610 15.1013034234261134 T T T 40 | -------------------------------------------------------------------------------- /example/results/3.CON: -------------------------------------------------------------------------------- 1 | Cu O C 2 | 1.0000000000000000 3 | 7.7663105829041044 0.0000000000000000 0.0000000000000000 4 | 0.0000000000000000 7.7663105829041044 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 23.6610437459507992 6 | 27 2 2 7 | Selective dynamics 8 | Cartesian 9 | 0.0000000000000000 0.0000000000000000 9.9999819179753473 F F F 10 | 2.5887744310000147 0.0000000000000000 9.9999819179753473 F F F 11 | 5.1775488629999993 0.0000000000000000 9.9999819179753473 F F F 12 | 0.0000000000000000 2.5887744310000147 9.9999819179753473 F F F 13 | 2.5887744310000147 2.5887744310000147 9.9999819179753473 F F F 14 | 5.1775488629999993 2.5887744310000147 9.9999819179753473 F F F 15 | 0.0000000000000000 5.1775488629999993 9.9999819179753473 F F F 16 | 2.5887744310000147 5.1775488629999993 9.9999819179753473 F F F 17 | 5.1775488629999993 5.1775488629999993 9.9999819179753473 F F F 18 | 1.2943872160000198 1.2943872160000198 11.8305218729753996 F F F 19 | 3.8831616469999792 1.2943872160000198 11.8305218729753996 F F F 20 | 6.4719360779999935 1.2943872160000198 11.8305218729753996 F F F 21 | 1.2943872160000198 3.8831616469999792 11.8305218729753996 F F F 22 | 3.8831616469999792 3.8831616469999792 11.8305218729753996 F F F 23 | 6.4719360779999935 3.8831616469999792 11.8305218729753996 F F F 24 | 1.2943872160000198 6.4719360779999935 11.8305218729753996 F F F 25 | 3.8831616469999792 6.4719360779999935 11.8305218729753996 F F F 26 | 6.4719360779999935 6.4719360779999935 11.8305218729753996 F F F 27 | -0.0000133184683518 7.7625083445332699 13.5766881771912775 T T T 28 | 2.5749459985505236 7.7279986351779275 13.6362387446192272 T T T 29 | 5.1913135032045368 7.7279416452809642 13.6362628463819497 T T T 30 | 0.0000739207768464 2.5902013237388566 13.5781165841772573 T T T 31 | 2.5751035802605036 2.6274889262626289 13.6363757249883761 T T T 32 | 5.1912853134038297 2.6277511741438651 13.6363763353087570 T T T 33 | 0.0000201935365210 5.1779177652266135 13.5491769955076826 T T T 34 | 2.5642275214733923 5.1783296824202383 13.5277597790794974 T T T 35 | 5.2019684473584382 5.1786000776402590 13.5277377318186076 T T T 36 | 3.8831314252673086 7.5249777192672385 16.3043188153455105 T T T 37 | 3.8833240897120578 2.8257186944259591 16.3037346298103856 T T T 38 | 3.8831895449700808 7.6399727813307816 15.1241229971840454 T T T 39 | 3.8832364064829910 2.7131820150743367 15.1232488505117342 T T T 40 | -------------------------------------------------------------------------------- /example/results/4.CON: -------------------------------------------------------------------------------- 1 | Cu O C 2 | 1.0000000000000000 3 | 7.7663105829041044 0.0000000000000000 0.0000000000000000 4 | 0.0000000000000000 7.7663105829041044 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 23.6610437459507992 6 | 27 2 2 7 | Selective dynamics 8 | Cartesian 9 | 0.0000000000000000 0.0000000000000000 9.9999819179753473 F F F 10 | 2.5887744310000147 0.0000000000000000 9.9999819179753473 F F F 11 | 5.1775488629999993 0.0000000000000000 9.9999819179753473 F F F 12 | 0.0000000000000000 2.5887744310000147 9.9999819179753473 F F F 13 | 2.5887744310000147 2.5887744310000147 9.9999819179753473 F F F 14 | 5.1775488629999993 2.5887744310000147 9.9999819179753473 F F F 15 | 0.0000000000000000 5.1775488629999993 9.9999819179753473 F F F 16 | 2.5887744310000147 5.1775488629999993 9.9999819179753473 F F F 17 | 5.1775488629999993 5.1775488629999993 9.9999819179753473 F F F 18 | 1.2943872160000198 1.2943872160000198 11.8305218729753996 F F F 19 | 3.8831616469999792 1.2943872160000198 11.8305218729753996 F F F 20 | 6.4719360779999935 1.2943872160000198 11.8305218729753996 F F F 21 | 1.2943872160000198 3.8831616469999792 11.8305218729753996 F F F 22 | 3.8831616469999792 3.8831616469999792 11.8305218729753996 F F F 23 | 6.4719360779999935 3.8831616469999792 11.8305218729753996 F F F 24 | 1.2943872160000198 6.4719360779999935 11.8305218729753996 F F F 25 | 3.8831616469999792 6.4719360779999935 11.8305218729753996 F F F 26 | 6.4719360779999935 6.4719360779999935 11.8305218729753996 F F F 27 | 0.0000368338608039 7.7620999644471684 13.5722272108571040 T T T 28 | 2.5754687737732085 7.7319185780935600 13.6357199939878662 T T T 29 | 5.1907103846392930 7.7320026089898173 13.6357632881549016 T T T 30 | 0.0001394865605542 2.5911043434618359 13.5733752808819670 T T T 31 | 2.5755638422344940 2.6228993796886209 13.6362260110047870 T T T 32 | 5.1908563705513950 2.6229602437064621 13.6362071789104444 T T T 33 | 0.0000806761864576 5.1780904437088848 13.5451919095356139 T T T 34 | 2.5624747807375057 5.1781524134175960 13.5303608214732005 T T T 35 | 5.2037474732441229 5.1783008903120544 13.5303439407495407 T T T 36 | 3.8830930268879422 7.5471839939748087 16.2996278205594187 T T T 37 | 3.8833634595790070 2.8054782224083641 16.3003714558245321 T T T 38 | 3.8830965287228607 7.8199888373591886 15.1450882054340479 T T T 39 | 3.8832401089730069 2.5341606863369992 15.1455388176728007 T T T 40 | -------------------------------------------------------------------------------- /example/results/5.CON: -------------------------------------------------------------------------------- 1 | Cu O C 2 | 1.0000000000000000 3 | 7.7663105829041044 0.0000000000000000 0.0000000000000000 4 | 0.0000000000000000 7.7663105829041044 0.0000000000000000 5 | 0.0000000000000000 0.0000000000000000 23.6610437459507992 6 | 27 2 2 7 | Selective dynamics 8 | Cartesian 9 | 0.0000000000000000 0.0000000000000000 9.9999819179753473 F F F 10 | 2.5887744310000147 0.0000000000000000 9.9999819179753473 F F F 11 | 5.1775488629999993 0.0000000000000000 9.9999819179753473 F F F 12 | 0.0000000000000000 2.5887744310000147 9.9999819179753473 F F F 13 | 2.5887744310000147 2.5887744310000147 9.9999819179753473 F F F 14 | 5.1775488629999993 2.5887744310000147 9.9999819179753473 F F F 15 | 0.0000000000000000 5.1775488629999993 9.9999819179753473 F F F 16 | 2.5887744310000147 5.1775488629999993 9.9999819179753473 F F F 17 | 5.1775488629999993 5.1775488629999993 9.9999819179753473 F F F 18 | 1.2943872160000198 1.2943872160000198 11.8305218729753996 F F F 19 | 3.8831616469999792 1.2943872160000198 11.8305218729753996 F F F 20 | 6.4719360779999935 1.2943872160000198 11.8305218729753996 F F F 21 | 1.2943872160000198 3.8831616469999792 11.8305218729753996 F F F 22 | 3.8831616469999792 3.8831616469999792 11.8305218729753996 F F F 23 | 6.4719360779999935 3.8831616469999792 11.8305218729753996 F F F 24 | 1.2943872160000198 6.4719360779999935 11.8305218729753996 F F F 25 | 3.8831616469999792 6.4719360779999935 11.8305218729753996 F F F 26 | 6.4719360779999935 6.4719360779999935 11.8305218729753996 F F F 27 | 0.0000506024990319 7.7614297601645772 13.5684593480011060 T T T 28 | 2.5736687568799197 7.7382667045329816 13.6322932638484406 T T T 29 | 5.1927340590213058 7.7382549535978731 13.6323899698856117 T T T 30 | 0.0000902408976863 2.5918405006550786 13.5696194681737552 T T T 31 | 2.5736647570318771 2.6165064994955820 13.6327432070090904 T T T 32 | 5.1925765530592392 2.6162874785569232 13.6327551044912632 T T T 33 | -0.0000386214948245 5.1782092535677151 13.5434292649827146 T T T 34 | 2.5592016370279609 5.1782919029797352 13.5352398238883502 T T T 35 | 5.2068937803410495 5.1783310916314580 13.5351381033614384 T T T 36 | 3.8831277918666616 7.5286264194990373 16.2762373402559390 T T T 37 | 3.8834050913820630 2.8237384334138986 16.2772597478904153 T T T 38 | 3.8831576080659880 8.0097112880515287 15.1749234844000913 T T T 39 | 3.8832804435298938 2.3440517592327486 15.1753593036205636 T T T 40 | -------------------------------------------------------------------------------- /example/results/fe.out: -------------------------------------------------------------------------------- 1 | Iteration Total Force Perp Force MaxU MaxI Stress on CI 2 | ------------------------------------------------------------ 3 | 1 1.5654305762389744 1.5654305762389744 0.7959252978062921 4 0.0 0.1 4 | 2 1.363508654315977 1.3635065433482108 0.7852040977250141 4 0.0 0.1 5 | 3 1.4441228278907987 1.4441121258596419 0.7775581250888024 4 0.0 0.1 6 | 4 2.1054116993629353 2.1050304391444934 0.7694987425061868 4 0.0 0.1 7 | 5 1.7636337507962385 1.7631058685458887 0.7645687140169315 4 0.0 0.1 8 | 6 1.3186616203276256 1.3164100467303372 0.7602810175653332 4 0.0 0.1 9 | 7 1.09975240012278 1.099706915643826 0.757165315385933 4 0.0 0.1 10 | 8 1.1797911912208263 1.1797599738880031 0.7534727443745055 4 0.0 0.1 11 | 9 1.3273685530532688 1.3272562982022205 0.7498449049723206 4 0.0 0.1 12 | 10 1.053452320225293 1.0533193954793934 0.7470392994958672 4 0.0 0.1 13 | 11 0.9042625273357361 0.9025585603209982 0.7443741824392447 4 0.0 0.1 14 | 12 0.9640622754787538 0.9621710582108431 0.7414609358740734 4 0.0 0.1 15 | 13 1.11889155161841 1.1166876650437425 0.7383992678756925 4 0.0 0.1 16 | 14 0.8885532641379332 0.8860684393175348 0.7360601657122174 4 0.0 0.1 17 | 15 0.7650353094058441 0.7583529455500603 0.7336239865403513 4 0.0 0.1 18 | 16 0.8013918910476334 0.7947500801749255 0.730887828676785 4 0.0 0.1 19 | 17 0.929369161596927 0.9232151993279971 0.7280129485485105 4 0.0 0.1 20 | 18 0.7921608174193762 0.7915710798689852 0.7258326457723427 4 0.0 0.1 21 | 19 0.6488822946679039 0.6448245332792703 0.723735603551944 4 0.0 0.1 22 | 20 0.6781952042760785 0.6663805729544828 0.7207455842980579 4 0.0 0.1 23 | 21 0.7902183511824051 0.7795482242142017 0.718001171836093 4 0.0 0.1 24 | 22 0.7077214837937361 0.7076925151294542 0.7159846632768989 4 0.0 0.1 25 | 23 0.5734931830507567 0.571913537830814 0.7138839099179961 4 0.0 0.1 26 | 24 0.5748890704453462 0.558131350606087 0.7108735690229651 4 0.0 0.1 27 | 25 0.6671877479799476 0.6533581687527609 0.7083482805395818 4 0.0 0.1 28 | 26 0.5934629623629872 0.593364018630416 0.7065363168635201 4 0.0 0.1 29 | 27 0.4851844544042515 0.48484618746391966 0.7044078992796727 4 0.0 0.1 30 | 28 0.4930529583363665 0.4730486641990314 0.7014592995071354 4 0.0 0.1 31 | 29 0.5712713507600019 0.556283554385038 0.6992404955462064 4 0.0 0.1 32 | 30 0.522642687790511 0.5222322325247283 0.6975297037493249 4 0.0 0.1 33 | 31 0.4253515669427545 0.4253471935898107 0.6956184436077422 4 0.0 0.1 34 | 32 0.42807396436278067 0.4068219674685528 0.6927619227139417 4 0.0 0.1 35 | 33 0.5005548299070421 0.4855244607315587 0.6907995090877677 4 0.0 0.1 36 | 34 0.4342791801769397 0.43352978205356635 0.689083404913859 4 0.0 0.1 37 | 35 0.3634827955106588 0.3623287800417172 0.6874160381620271 4 0.0 0.1 38 | 36 0.3778673454992533 0.3570050199847225 0.6847979208812092 4 0.0 0.1 39 | 37 0.4303874810703472 0.41534397864236905 0.6829724338165306 4 0.0 0.1 40 | 38 0.37897138960659443 0.3779382614062262 0.6815167865292864 4 0.0 0.1 41 | 39 0.32570278472100084 0.31038201009054145 0.6799999061940554 4 0.0 0.1 42 | 40 0.33627783728024324 0.3171458026526508 0.6776113199242673 4 0.0 0.1 43 | 41 0.38164145187916 0.3682580619876195 0.6759959553066324 4 0.0 0.1 44 | 42 0.3339848920425679 0.33288670137974863 0.6747134392331446 4 0.0 0.1 45 | 43 0.29675669765598744 0.27955838620926027 0.6733667086835311 4 0.0 0.1 46 | 44 0.3005140496461125 0.28419078383342106 0.6713503658623807 4 0.0 0.1 47 | 45 0.3364389173236537 0.3245555127578546 0.6699163897108775 4 0.0 0.1 48 | 46 0.298454549012562 0.2964184111688754 0.6687862112311649 4 0.0 0.1 49 | 47 0.2685600569551654 0.25390359913041444 0.6675909907136912 4 0.0 0.1 50 | 48 0.2689834181322664 0.2551043583044998 0.6657864685408583 4 0.0 0.1 51 | 49 0.3013576819410889 0.2918556475341113 0.6646151242790381 4 0.0 0.1 52 | 50 0.2747335938641576 0.2653543045279203 0.6635891040610602 4 0.0 0.1 53 | 51 0.24627232391501558 0.23437266818604363 0.6625256381665707 4 0.0 0.1 54 | 52 0.24139208502020576 0.22994139348621548 0.6609974149395441 4 0.0 0.1 55 | 53 0.2679991388062356 0.26038440233600785 0.660024167363261 4 0.0 0.1 56 | 54 0.25247698497443233 0.24507859064338913 0.659111085557825 4 0.0 0.1 57 | 55 0.22563606804196915 0.21574525475395556 0.6581359099870809 4 0.0 0.1 58 | 56 0.2179844147911707 0.20877619312192983 0.6568330297213407 4 0.0 0.1 59 | 57 0.24223978135443028 0.23618686697407767 0.6559855102620418 4 0.0 0.1 60 | 58 0.2335524308375512 0.22786225747250838 0.6551851133236397 4 0.0 0.1 61 | 59 0.20740540330055762 0.19953536163703878 0.6543314918640277 4 0.0 0.1 62 | 60 0.19879168479580564 0.1913632991284453 0.6532151066328851 4 0.0 0.1 63 | 61 0.22181840079206766 0.2170288685421171 0.6524800543900966 4 0.0 0.1 64 | 62 0.21818551486269508 0.2138696878070209 0.6517619128500485 4 0.0 0.1 65 | 63 0.19320068673055316 0.1869134066492899 0.6510052492641023 4 0.0 0.1 66 | 64 0.1814912126755778 0.17580522240035978 0.6501276436432732 4 0.0 0.1 67 | 65 0.20142165747873506 0.1975543017015813 0.6494936647569034 4 0.0 0.1 68 | 66 0.20253751662057765 0.1992381289406583 0.6488716353916857 4 0.0 0.1 69 | 67 0.17891276057230304 0.1734305200083594 0.6481186504767749 4 0.0 0.1 70 | 68 0.1676232075583055 0.1632920904770762 0.647385478754714 4 0.0 0.1 71 | 69 0.1867035799261505 0.18376496133606143 0.6468460509605336 4 0.0 0.1 72 | 70 0.1895769496878831 0.1871914331722749 0.6463354421565413 4 0.0 0.1 73 | 71 0.16584276250868088 0.16172194307011828 0.6456821046789969 4 0.0 0.1 74 | 72 0.15434102809374892 0.15090341709375038 0.6450345787917797 4 0.0 0.1 75 | 73 0.17486669876139133 0.1726157082556809 0.6445505273177616 4 0.0 0.1 76 | 74 0.18139788361825615 0.17965681132236974 0.6441173723321896 4 0.0 0.1 77 | 75 0.15710734511532093 0.1543153030301351 0.6436767022937744 4 0.0 0.1 78 | 76 0.13971314568549006 0.13685563769379408 0.6430959131650127 4 0.0 0.1 79 | 77 0.15048540784992526 0.14869227830309234 0.6426826094811844 4 0.0 0.1 80 | 78 0.17387392245972486 0.17278448191530463 0.6423241959895023 4 0.0 0.1 81 | 79 0.15142748588388152 0.1492613549924055 0.6419027738553922 4 0.0 0.1 82 | 80 0.13069188159948586 0.12849315262429942 0.6414002321024981 4 0.0 0.1 83 | 81 0.1399993424642033 0.13853310090885596 0.6410085312976577 4 0.0 0.1 84 | 82 0.1597511064004475 0.1589983997093514 0.6407143914771893 4 0.0 0.1 85 | 83 0.14650429527049125 0.1450643405502877 0.6403816446063502 4 0.0 0.1 86 | 84 0.1258856789456607 0.12448809704410815 0.640033730784296 4 0.0 0.1 87 | 85 0.1303703793303287 0.12909439253982527 0.6396699416163187 4 0.0 0.1 88 | 86 0.14441130609288003 0.14376116581749343 0.639402471451632 4 0.0 0.1 89 | 87 0.13751741179192659 0.13655016450766044 0.6391510768383881 4 0.0 0.1 90 | 88 0.11830261417251398 0.11735471568068312 0.638865937545944 4 0.0 0.1 91 | 89 0.12385246365348401 0.12288045712037457 0.6385522469906704 4 0.0 0.1 92 | 90 0.13680762375225491 0.13631869885778417 0.6383211808459635 4 0.0 0.1 93 | 91 0.1269371570636546 0.12616856223294007 0.6381084763652893 4 0.0 0.1 94 | 92 0.10900226720794494 0.10835280135780678 0.6379092867463925 4 0.0 0.1 95 | 93 0.11486061814954009 0.11412897732847262 0.6376076250930538 4 0.0 0.1 96 | 94 0.1312827836885066 0.13090031785362774 0.637332275456231 4 0.0 0.1 97 | 95 0.12678887455109486 0.1261702677542258 0.6371230747823518 4 0.0 0.1 98 | 96 0.10774512123442273 0.10737971754015005 0.6369571019850753 4 0.0 0.1 99 | 97 0.10723627801806884 0.10669945169171713 0.6368056276296983 4 0.0 0.1 100 | 98 0.11583835087169768 0.11551950441539086 0.6366004881939205 4 0.0 0.1 101 | 99 0.12110054368307434 0.1206419170009401 0.6363934560490918 4 0.0 0.1 102 | 100 0.10424438513354106 0.1039472561993936 0.6362681810200002 4 0.0 0.1 103 | 101 0.1000294876661247 0.0994765306230748 0.6360439401050968 4 0.0 0.1 104 | 102 0.1057531264052577 0.10553457624299704 0.6358871306960765 4 0.0 0.1 105 | 103 0.11791266769970632 0.11734574148847068 0.6355661058740623 4 0.0 0.1 106 | 104 0.10207087515434046 0.1019184555868345 0.635516934170596 4 0.0 0.1 107 | 105 0.09360754260584993 0.09323501073266831 0.6353874505102652 4 0.0 0.1 108 | 106 0.09849746839365878 0.09833591496657244 0.6352775771618155 4 0.0 0.1 109 | 107 0.1101085229624221 0.10977903272452025 0.6350796655314781 4 0.0 0.1 110 | 108 0.09856512029310853 0.09841271742281961 0.634962569602024 4 0.0 0.1 111 | 109 0.08987135834189643 0.08944429109959694 0.6347835393573575 4 0.0 0.1 112 | 110 0.0930225144660208 0.09290638075480391 0.6347386876664558 4 0.0 0.1 113 | 111 0.10264299014444213 0.10240361547850045 0.6345953649344267 4 0.0 0.1 114 | 112 0.09298625801435445 0.09284189384958114 0.6344696903075402 4 0.0 0.1 115 | 113 0.08082143473599149 0.080469777799823 0.6343125551237279 4 0.0 0.1 116 | 114 0.08235328169605342 0.08229551337553506 0.6342548105222647 4 0.0 0.1 117 | 115 0.10018750741747867 0.0998954674189222 0.6341101707586603 4 0.0 0.1 118 | 116 0.09167583631827227 0.09162580086029369 0.6340417435916379 4 0.0 0.1 119 | 117 0.07795484267495391 0.07761674474109675 0.6339019830557504 4 0.0 0.1 120 | 118 0.07737271585311839 0.07733195030069986 0.6338185347200493 4 0.0 0.1 121 | 119 0.09160313448241166 0.09128766144079338 0.6336710729705004 4 0.0 0.1 122 | 120 0.09353508591832851 0.09353167564469966 0.6336431102830034 4 0.0 0.1 123 | 121 0.07936956950916232 0.07905223797739627 0.6335158458708321 4 0.0 0.1 124 | 122 0.07262050865728359 0.07257694074737177 0.6334783476446972 4 0.0 0.1 125 | 123 0.07859413416308243 0.07831602230429345 0.6333272182287146 4 0.0 0.1 126 | 124 0.0868086674143719 0.08680834886151206 0.6332860032636205 4 0.0 0.1 127 | 125 0.08099093196617463 0.08073405585855394 0.6331963583537714 4 0.0 0.1 128 | 126 0.07008946547669119 0.07005746316591387 0.6331581303455067 4 0.0 0.1 129 | 127 0.07071461800872876 0.07047592207780033 0.6330446188671459 4 0.0 0.1 130 | 128 0.07590794025814106 0.07589804814881317 0.6330079679358533 4 0.0 0.1 131 | 129 0.07982558440245328 0.07956036691330588 0.6328645288309644 4 0.0 0.1 132 | 130 0.06614885854373677 0.06613724858987918 0.6328554143859577 4 0.0 0.1 133 | 131 0.06593396277964525 0.06573480631376788 0.6327863631760948 4 0.0 0.1 134 | 132 0.07132907405885978 0.07132141372099204 0.6327226062696525 4 0.0 0.1 135 | 133 0.07571480608264274 0.07544305707373755 0.6325973831113885 4 0.0 0.1 136 | 134 0.06300839138656476 0.06300839080826923 0.6326053863418792 4 0.0 0.1 137 | 135 0.05934453953961942 0.059021473936829286 0.6325121224518853 4 0.0 0.1 138 | 136 0.0618430552375953 0.06184261318549751 0.6325012105801449 4 0.0 0.1 139 | 137 0.0772044799620361 0.07701407777695635 0.6323974533915901 4 0.0 0.1 140 | 138 0.06687383256552053 0.06686970153307562 0.632359832070307 4 0.0 0.1 141 | 139 0.0565780070086412 0.05634960868995593 0.6322370927091896 4 0.0 0.1 142 | 140 0.056060211766190526 0.05605804498013068 0.6322217815499158 4 0.0 0.1 143 | 141 0.06556666017937689 0.06508003358085933 0.6319923532151677 4 0.0 0.1 144 | 142 0.07073277428656762 0.07059454169887895 0.6321702772402062 4 0.0 0.1 145 | 143 0.060631830978239785 0.06021754887802372 0.6319252631203938 4 0.0 0.1 146 | 144 0.051330959188408916 0.05133024383421216 0.6319686207520192 4 0.0 0.1 147 | 145 0.05515886105744828 0.05467942580125858 0.6318902004014859 4 0.0 0.1 148 | 146 0.0646745580720469 0.06457773530971503 0.6318640769788431 4 0.0 0.1 149 | 147 0.07013158912994574 0.0692976419059573 0.6317074769352331 4 0.0 0.1 150 | 148 0.04952343289946138 0.04945232133302736 0.6317166171909605 4 0.0 0.1 151 | 149 0.04788760150463834 0.04765678868521419 0.631612327508833 4 0.0 0.1 152 | 150 0.04934778910600064 0.04934479279154143 0.631582410706514 4 0.0 0.1 153 | 151 0.06800230177866112 0.06776698243282848 0.6314412853321585 4 0.0 0.1 154 | 152 0.06229162780336102 0.06229162494105282 0.631447807440864 4 0.0 0.1 155 | 153 0.05127778067707438 0.05096829554521585 0.6313672099132503 4 0.0 0.1 156 | 154 0.04551027519269043 0.04550626307506343 0.6313503659978892 4 0.0 0.1 157 | 155 0.04336436934004448 0.04289190670788089 0.631300646724128 4 0.0 0.1 158 | 156 0.040917236229114515 0.04088295906866197 0.6312649530222814 4 0.0 0.1 159 | 157 0.04556272333781851 0.045244563752996354 0.6311369082159075 4 0.0 0.1 160 | 158 0.042964750207487155 0.04243963648466109 0.6311895333952009 4 0.0 0.1 161 | 159 0.07498198481337928 0.07418588765693461 0.6309048913357884 4 0.0 0.1 162 | 160 0.056373776366135005 0.056373770341075914 0.6310243752553504 4 0.0 0.1 163 | 161 0.045286152860914364 0.04512382439944593 0.6309274627785868 4 0.0 0.1 164 | 162 0.03811175881489848 0.03805090244056414 0.6309121838698104 4 0.0 0.1 165 | 163 0.0395334928870677 0.03946397559550993 0.6308758085627062 4 0.0 0.1 166 | 164 0.046898122011428414 0.046835270886052764 0.6308413882753712 4 0.0 0.1 167 | 165 0.044889219797183896 0.0448458314462732 0.6307994645245145 4 0.0 0.1 168 | 166 0.03924277754743511 0.039240670798986854 0.6307544287079878 4 0.0 0.1 169 | 167 0.04064483739306046 0.04060078822408905 0.6307229558090768 4 0.0 0.1 170 | 168 0.03444313201047619 0.03439872738038624 0.6306825495469752 4 0.0 0.1 171 | 169 0.03877091378016277 0.0387197939679734 0.6306400077013024 4 0.0 0.1 172 | 170 0.038626755273799766 0.03860172669497551 0.6305949481709519 4 0.0 0.1 173 | 171 0.0429038931654077 0.042805603882145576 0.6305500921033058 4 0.0 0.1 174 | 172 0.03613795669540493 0.03611768294887659 0.6305229816023399 Iteration Total Force Perp Force MaxU MaxI Stress on CI 175 | ------------------------------------------------------------ 176 | 1 1.2553574417784037 1.2553574417784037 0.6427989649588284 5 0.0 0.1 177 | 2 1.171189416748631 1.171189416748631 0.6603020427785395 5 0.0 0.1 178 | 3 0.9968258123988724 0.9968258123988724 0.6902855495973199 5 0.0 0.1 179 | 4 1.1014324429235465 1.0791912999454991 0.7256413531319907 5 0.0 0.1 180 | 5 1.785705407943434 1.785705407943434 0.7466428279770554 5 0.0 0.1 181 | 6 1.5908939794935288 1.5186703443300014 0.7404404667069571 5 0.0 0.1 182 | 7 1.0062951665546378 0.9520340519107405 0.7420731676428431 5 0.0 0.1 183 | 8 0.800098963170846 0.6761899185452239 0.7455667039928215 5 0.0 0.1 184 | 9 0.6446307639054372 0.47318719599629205 0.749068658627607 5 0.0 0.1 185 | 10 0.5603671974988675 0.49478554348932174 0.7518790951449859 5 0.0 0.1 186 | 11 0.4959012245636943 0.4163217141218528 0.7522428269499954 5 0.0 0.1 187 | 12 0.5735224683424376 0.5305789702953659 0.7535237073947911 5 0.0 0.1 188 | 13 0.47661063757976235 0.37826317303813617 0.7548928486251896 5 0.0 0.1 189 | 14 0.4262301019976331 0.3351116889997229 0.7562089382672355 5 0.0 0.1 190 | 15 0.40405982069596996 0.36069991308448496 0.7563162392637253 5 0.0 0.1 191 | 16 0.4520534348790252 0.41822506143448085 0.7566995162551535 5 0.0 0.1 192 | 17 0.36939713610739383 0.3147723512707036 0.7573014278766124 5 0.0 0.1 193 | 18 0.3438903305591876 0.3099784197685635 0.7579597609948223 5 0.0 0.1 194 | 19 0.36039509166407196 0.3408190015553328 0.7579982337419011 5 0.0 0.1 195 | 20 0.3980085245706548 0.38341216922180743 0.7581209830984648 5 0.0 0.1 196 | 21 0.32596065984076494 0.3011669261697385 0.758379978205312 5 0.0 0.1 197 | 22 0.29066838962787495 0.26618602293102706 0.7587131141646637 5 0.0 0.1 198 | 23 0.2944937399761387 0.28719060098236365 0.7587659195224745 5 0.0 0.1 199 | 24 0.3220319921750436 0.3147453341577029 0.7588308534682824 5 0.0 0.1 200 | 25 0.28692368475308133 0.2766842693066639 0.7588561286433304 5 0.0 0.1 201 | 26 0.2534406685051558 0.24454729264793543 0.7589883500082664 5 0.0 0.1 202 | 27 0.2591835544606038 0.2552829240082357 0.7590489483872318 5 0.0 0.1 203 | 28 0.2895345097557811 0.28645237119413824 0.7591688323657877 5 0.0 0.1 204 | 29 0.26606816837332076 0.26230989043685854 0.7591496096557222 5 0.0 0.1 205 | 30 0.2332277199638278 0.23027088107366114 0.759223715836896 5 0.0 0.1 206 | 31 0.23242995582834183 0.23035898581467706 0.759204792200805 5 0.0 0.1 207 | 32 0.2627580945318376 0.26195587788220737 0.7592488430895514 5 0.0 0.1 208 | 33 0.2518899729366225 0.2505761906632393 0.7593219696434517 5 0.0 0.1 209 | 34 0.21927059423429474 0.21791273674992775 0.7592841174641904 5 0.0 0.1 210 | 35 0.21501899273121167 0.21429451687475923 0.7593293907625451 5 0.0 0.1 211 | 36 0.24140208328138826 0.24127884238643632 0.7592977168831254 5 0.0 0.1 212 | 37 0.23903499937361727 0.23884200237698117 0.7593142494004894 5 0.0 0.1 213 | 38 0.20596573127996326 0.20591949940076235 0.7592980797138296 5 0.0 0.1 214 | 39 0.19747497034902595 0.19736664397352585 0.7593075134267764 5 0.0 0.1 215 | 40 0.21648793895478086 0.21648630967706378 0.7593000440930808 5 0.0 0.1 216 | 41 0.2277364151398641 0.22773077481000983 0.7592974541101682 5 0.0 0.1 217 | 42 0.19613265055835777 0.19612162908101002 0.7593057183573109 5 0.0 0.1 218 | 43 0.18312561191845741 0.18304554514205787 0.7592779410752257 5 0.0 0.1 219 | 44 0.1980936486823548 0.19803184201002927 0.759295097029181 5 0.0 0.1 220 | 45 0.215707811446165 0.215707562339033 0.7592800921282645 5 0.0 0.1 221 | 46 0.18869527366773545 0.1886418710458124 0.7592893997321823 5 0.0 0.1 222 | 47 0.1699110540875071 0.16989453461858753 0.759271596918623 5 0.0 0.1 223 | 48 0.18139048754297699 0.1812896196326819 0.759280689064525 5 0.0 0.1 224 | 49 0.20330373600795384 0.2033007686272524 0.7592608775169651 5 0.0 0.1 225 | 50 0.18324283523026583 0.1832064915267427 0.759272103772048 5 0.0 0.1 226 | 51 0.15855258189300953 0.15852192395134557 0.7592668402384959 5 0.0 0.1 227 | 52 0.17032937675962692 0.1703293299178694 0.7592582813450832 5 0.0 0.1 228 | 53 0.1886689211052599 0.18866183761099062 0.7591669004735024 5 0.0 0.1 229 | 54 0.1778380089754729 0.17781686912624886 0.759316470364567 5 0.0 0.1 230 | 55 0.15011489805066658 0.1501138287694692 0.7593505420237108 5 0.0 0.1 231 | 56 0.1661999185451958 0.16619438660571412 0.7592812529324249 5 0.0 0.1 232 | 57 0.17719841086180135 0.17719779607710387 0.7593067507108344 5 0.0 0.1 233 | 58 0.16845363104282732 0.16842852921664844 0.7592846416987271 5 0.0 0.1 234 | 59 0.14150835309820764 0.14149263077031587 0.7592992568025352 5 0.0 0.1 235 | 60 0.15481785513888308 0.15481643065294387 0.7592972829379363 5 0.0 0.1 236 | 61 0.16189787534538538 0.16189699513115377 0.7593018368151689 5 0.0 0.1 237 | 62 0.16274507194848156 0.1627312830281861 0.7592927341375315 5 0.0 0.1 238 | 63 0.13459857470947853 0.13458232656946037 0.7592470401749694 5 0.0 0.1 239 | 64 0.14441430885924994 0.144405590329271 0.7593131699083671 5 0.0 0.1 240 | 65 0.1488445342900931 0.1488435626689136 0.7593161863291584 5 0.0 0.1 241 | 66 0.15959436019796103 0.1595902873563858 0.759305450687279 5 0.0 0.1 242 | 67 0.13101590878730687 0.1310107496729771 0.7592689292067121 5 0.0 0.1 243 | 68 0.1352779742424077 0.1352767912554398 0.7593081315364003 5 0.0 0.1 244 | 69 0.1366106424347179 0.13660847206469182 0.7593443506223281 5 0.0 0.1 245 | 70 0.15129764295531575 0.15129453460290196 0.7592693214907484 5 0.0 0.1 246 | 71 0.12678781976998496 0.12678133827513288 0.7593009976132521 5 0.0 0.1 247 | 72 0.1281117668727416 0.12810722186015072 0.759348366717461 5 0.0 0.1 248 | 73 0.1270300090085174 0.12700485156212124 0.7592845576957927 5 0.0 0.1 249 | 74 0.14249098060133936 0.14248640653949018 0.7591989943497026 5 0.0 0.1 250 | 75 0.12705822282233636 0.12705437804308245 0.7593322939115836 5 0.0 0.1 251 | 76 0.120247892544997 0.12024698891647956 0.7593389875215024 5 0.0 0.1 252 | 77 0.1230727166460108 0.12306845289288035 0.7592982921174638 5 0.0 0.1 253 | 78 0.1301067601747138 0.13010669877007103 0.759171769024718 5 0.0 0.1 254 | 79 0.1306575648607433 0.13065746155363905 0.7593588069858583 5 0.0 0.1 255 | 80 0.11302848377794276 0.11302749265801294 0.7594011527114759 5 0.0 0.1 256 | 81 0.11797345411617004 0.11796211281360698 0.7593050787912432 5 0.0 0.1 257 | 82 0.11446383388841991 0.1144631857993766 0.7593190290718752 5 0.0 0.1 258 | 83 0.12354633939892698 0.12354631542591867 0.7592997232140704 5 0.0 0.1 259 | 84 0.10583526563799647 0.10582644840040635 0.7592679808162615 5 0.0 0.1 260 | 85 0.11175168722897294 0.11174943478083421 0.7593258257375624 5 0.0 0.1 261 | 86 0.10673822532949398 0.10673796361888273 0.7593913643755172 5 0.0 0.1 262 | 87 0.11662427568720096 0.11662329793692022 0.759285853821865 5 0.0 0.1 263 | 88 0.1025548710991741 0.1025547255239034 0.7591943880752865 5 0.0 0.1 264 | 89 0.10467032636940572 0.10465517756937147 0.759335771551676 5 0.0 0.1 265 | 90 0.1003166260950096 0.10030687060610645 0.7593703302473926 5 0.0 0.1 266 | 91 0.10908041211551382 0.10907799474094786 0.7592916750229364 5 0.0 0.1 267 | 92 0.09936998061989363 0.09936817903189986 0.7593087797749689 5 0.0 0.1 268 | 93 0.09243554966928949 0.09243415511059117 0.7593133673351105 5 0.0 0.1 269 | 94 0.1037745590447078 0.10374871306794788 0.7593007065353135 5 0.0 0.1 270 | 95 0.09647065971599653 0.09645525556118914 0.7592004788954227 5 0.0 0.1 271 | 96 0.10448496969770273 0.10448428463145201 0.7593396056709736 5 0.0 0.1 272 | 97 0.0853067964132437 0.0852614293097623 0.7593755904521373 5 0.0 0.1 273 | 98 0.09727658907312578 0.09726069743340615 0.759302683845533 5 0.0 0.1 274 | 99 0.10089252014258188 0.1008894592830122 0.7593250645364407 5 0.0 0.1 275 | 100 0.10629415338465746 0.1062940827218983 0.7592969280994737 5 0.0 0.1 276 | 101 0.08582987444416688 0.08582064551413622 0.7593018748551685 5 0.0 0.1 277 | 102 0.08344548455041124 0.08343098650994489 0.7593224642411798 5 0.0 0.1 278 | 103 0.09690937055940664 0.09690649728879826 0.7593930727204707 5 0.0 0.1 279 | 104 0.09337644742341952 0.09337565195608852 0.7592988689398652 5 0.0 0.1 280 | 105 0.09284719801492458 0.09283888828113945 0.7592414497819391 5 0.0 0.1 281 | 106 0.07642236768201223 0.07637612861032587 0.7593172786988731 5 0.0 0.1 282 | 107 0.09290542112400664 0.09290393008104429 0.7593030497847906 5 0.0 0.1 283 | 108 0.08693537781547465 0.08685991666485929 0.7593172168680269 5 0.0 0.1 284 | 109 0.08537288557068058 0.08531827279636094 0.759314062043984 5 0.0 0.1 285 | 110 0.09070106673518666 0.09069614777219825 0.7593066134226802 5 0.0 0.1 286 | 111 0.07475814550807922 0.07475807178122294 0.7592639935863588 5 0.0 0.1 287 | 112 0.0838932517878209 0.08383328117134033 0.759339630759726 5 0.0 0.1 288 | 113 0.07736968896021922 0.07736728018797463 0.7593759820289847 5 0.0 0.1 289 | 114 0.08363261215014313 0.08362886965482118 0.7593057405857877 5 0.0 0.1 290 | 115 0.07109127455158969 0.07105697534077479 0.7591986761476477 5 0.0 0.1 291 | 116 0.07671622182225588 0.07662579801824089 0.7593516879604181 5 0.0 0.1 292 | 117 0.08263025677739042 0.08263010260386477 0.7593095271834329 5 0.0 0.1 293 | 118 0.07176936992539765 0.07176863603484075 0.7593355503817918 5 0.0 0.1 294 | 119 0.0792219544302268 0.07918568032100287 0.7593748389599284 5 0.0 0.1 295 | 120 0.06672495128911493 0.06671584905633324 0.7593074085244069 5 0.0 0.1 296 | 121 0.0827343828358908 0.08273434574514112 0.7593301727659707 5 0.0 0.1 297 | 122 0.07187202665444752 0.07183115867048398 0.7593120667334574 5 0.0 0.1 298 | 123 0.05933015012227841 0.059312850856415404 0.7592825533820502 5 0.0 0.1 299 | 124 0.08543914696924398 0.08543009930446677 0.7593243198166562 5 0.0 0.1 300 | 125 0.06510395655643957 0.06507226764021412 0.759376001357353 5 0.0 0.1 301 | 126 0.08522106667305447 0.08521570509361842 0.7592925145875284 5 0.0 0.1 302 | 127 0.0779342265694556 0.07793269363905465 0.7591990300339972 5 0.0 0.1 303 | 128 0.06292815733041748 0.0627614496564887 0.7593471785061467 5 0.0 0.1 304 | 129 0.06852680351823577 0.0684640963418481 0.7593970122638183 5 0.0 0.1 305 | 130 0.06169624320143862 0.06167337736005397 0.7592945700698834 5 0.0 0.1 306 | 131 0.06730312937747479 0.06730312376472268 0.7593174869178085 5 0.0 0.1 307 | 132 0.07216733126829802 0.07214758540896887 0.7592944652601403 5 0.0 0.1 308 | 133 0.0573315403950145 0.05733150911456685 0.7593040035580998 5 0.0 0.1 309 | 134 0.04856292261059862 0.04851202245657758 0.7593096690165311 5 0.0 0.1 310 | 135 0.049727513325854115 0.049688467041845125 0.7593464200851372 5 0.0 0.1 311 | 136 0.07251166935947981 0.07251065100959732 0.7592896146666988 5 0.0 0.1 312 | 137 0.0824767822262104 0.08247130435592734 0.7592532875907239 5 0.0 0.1 313 | 138 0.0653956562051662 0.06531685753355684 0.7593220998195847 5 0.0 0.1 314 | 139 0.05136071946228201 0.051358132775489916 0.7593182373659317 5 0.0 0.1 315 | 140 0.04367614867220442 0.04357247582166489 0.7593100215197097 5 0.0 0.1 316 | 141 0.04291664257290715 0.0429144276161237 0.7592912426769516 5 0.0 0.1 317 | 142 0.05211471640064679 0.05210446365236401 0.7593111171279077 5 0.0 0.1 318 | 143 0.07592396566039077 0.07592057167841314 0.7593061955873424 5 0.0 0.1 319 | 144 0.05756276648790515 0.05756245783290971 0.7593183847598368 5 0.0 0.1 320 | 145 0.04609346181648776 0.04606964905488026 0.7593263879295478 5 0.0 0.1 321 | 146 0.042916365976324755 0.04291628263034118 0.7593034182341398 5 0.0 0.1 322 | 147 0.047812502891786 0.04775699039434872 0.7592349483978325 5 0.0 0.1 323 | 148 0.055609739269841356 0.055606456513438395 0.7593500879592483 5 0.0 0.1 324 | 149 0.049282474117883994 0.04927045247722611 0.7593132371962525 5 0.0 0.1 325 | 150 0.043075989169560416 0.04307560119978056 0.7592889647070535 5 0.0 0.1 326 | 151 0.04022789053237364 0.04018969321557962 0.7593272048441406 5 0.0 0.1 327 | 152 0.040135905590210824 0.04013412405108741 0.759382739224975 5 0.0 0.1 328 | 153 0.04721931261374105 0.0472129581282406 0.7593001645122968 5 0.0 0.1 329 | 154 0.06180145204431317 0.061755827708736 0.7591729868377541 5 0.0 0.1 330 | 155 0.04845859607769431 0.048442382497120774 0.7593471169682147 5 0.0 0.1 331 | 156 0.04080354121951474 0.040675294490137646 0.7593060827006468 5 0.0 0.1 332 | 157 0.045011592190078734 0.04492712034510214 0.759329440663322 5 0.0 0.1 333 | 158 0.04620020214584865 0.04617258667706867 0.7593305741569623 5 0.0 0.1 334 | 159 0.037908520406443165 0.037902068227350295 0.759313777106513 5 0.0 0.1 335 | 160 0.04133088049083196 0.0413299513056143 0.7592517690284808 5 0.0 0.1 336 | 161 0.05174037972954574 0.051660744804787766 0.7593337689102384 5 0.0 0.1 337 | 162 0.03957257423730882 0.03957252027991309 0.7593174667288878 5 0.0 0.1 338 | 163 0.04847030563324434 0.04841167277847854 0.7593266210223533 5 0.0 0.1 339 | 164 0.034894134231124106 0.03489090290360559 0.7593568312656629 5 0.0 0.1 340 | 165 0.032646025839329774 0.03264122051500944 0.7593141430144499 5 0.0 0.1 341 | 166 0.04019734107071914 0.04018189028809795 0.7592384594855588 5 0.0 0.1 342 | 167 0.033556283634764913 0.0335146191629687 0.7593576377967111 5 0.0 0.1 343 | 168 0.03273145949767559 0.03269061341710306 0.7593833109047097 5 0.0 0.1 344 | 169 0.04555345128856995 0.0455508084306618 0.7593175551896252 5 0.0 0.1 345 | 170 0.044851387645329234 0.0448056607293774 0.7591859703710782 5 0.0 0.1 346 | 171 0.03241231301162628 0.03231552129851685 0.7593696667019145 5 0.0 0.1 347 | 172 0.03323873462929851 0.03318487955177541 0.7593283498458447 5 0.0 0.1 348 | 173 0.03159710392480484 0.031586985374884496 0.7593510769877696 5 0.0 0.1 349 | 174 0.036491461460062734 0.036481971653722446 0.7593767966444176 5 0.0 0.1 350 | 175 0.03995044613917107 0.039935757550866736 0.7593223426637792 5 0.0 0.1 351 | 176 0.030348939165792673 0.030348318378004436 0.7593408656936731 5 0.0 0.1 352 | 177 0.03300184736335991 0.032938654765938574 0.759326313874837 5 0.0 0.1 353 | 178 0.029158071529260584 0.02915786602226635 0.7592916890578181 5 0.0 0.1 354 | 179 0.03442408175434554 0.03442366260667589 0.7593320685238041 5 0.0 0.1 355 | 180 0.04322187539648897 0.043210092387183624 0.7593735397861394 5 0.0 0.1 356 | 181 0.030814325582531398 0.030793163740561 0.759311639309999 5 0.0 0.1 357 | 182 0.03737726257463841 0.03737726257463841 0.7592293715759126 5 0.0 0.1 358 | 183 0.03169422847874987 0.03162854484170526 0.7593645094557928 5 0.0 0.1 359 | 184 0.028809907688293442 0.02871368686427596 0.759415390907975 5 0.0 0.1 360 | 185 0.04255095945284238 0.04255095945284238 0.7593286124843956 5 0.0 0.1 361 | 186 0.032410602919887 0.03239499522635347 0.7593422190537922 5 0.0 0.1 362 | 187 0.042701010585772664 0.042701010585772664 0.7593155144811874 5 0.0 0.1 363 | 188 0.04061895015949121 0.040601997784480766 0.7593110692932186 5 0.0 0.1 364 | 189 0.02784580764353241 0.027838860570843327 0.7593198125212268 5 0.0 0.1 365 | 190 0.02868293848729398 0.028679334401589318 0.7593054347441353 5 0.0 0.1 366 | 191 0.02582428540345206 0.025784651016240303 0.7593111278468996 5 0.0 0.1 367 | 192 0.031047256504482045 0.031045516303854905 0.759266422727066 5 0.0 0.1 368 | 193 0.048785174957701544 0.048785174957701544 0.759323044004887 5 0.0 0.1 369 | 194 0.04196316132125705 0.041887097376385796 0.7593092438046085 5 0.0 0.1 370 | 195 0.030847330963044328 0.030847330963044328 0.7593404883172639 5 0.0 0.1 371 | 196 0.0284143299789434 0.028357444424279322 0.7593197318102796 5 0.0 0.1 372 | 197 0.024405424730336037 0.02436302851734451 0.7593448450228237 5 0.0 0.1 373 | 198 0.025418304673273422 0.025412424637361014 0.7593429577877941 5 0.0 0.1 374 | 199 0.0245543766978222 0.024552646500560334 0.7593224134457586 5 0.0 0.1 375 | 200 0.03833884572514725 0.03833884572514725 0.7592827633604173 5 0.0 0.1 376 | 201 0.026773714552984045 0.026693270784571874 0.7593641620773468 5 0.0 0.1 377 | 202 0.03156714135124384 0.031566791400847165 0.759331469573084 5 0.0 0.1 378 | 203 0.025832872879270365 0.025783648982085548 0.7593137920574264 5 0.0 0.1 379 | 204 0.030111394172807858 0.03011115812081456 0.7593396670911972 5 0.0 0.1 380 | 205 0.04726828792184809 0.0472548724900745 0.7593818618318551 5 0.0 0.1 381 | 206 0.03215411329124301 0.032147991844126984 0.759319433611978 5 0.0 0.1 382 | 207 0.029936536488443504 0.02993014714725267 0.7593304497666651 5 0.0 0.1 383 | 208 0.03222791440846981 0.03222791440846981 0.7593446321778288 5 0.0 0.1 384 | 209 0.02702833655353921 0.02698521063446723 0.7593158276336283 5 0.0 0.1 385 | 210 0.026480085435546186 0.02647103152796458 0.7591815634571191 5 0.0 0.1 386 | 211 0.0410066736288839 0.04091729104642346 0.7593580942132832 5 0.0 0.1 387 | 212 0.028822387262202098 0.02879307261708703 0.7594197715392852 5 0.0 0.1 388 | 213 0.03696945044771112 0.036957889907462196 0.7593090092277066 5 0.0 0.1 389 | 214 0.027013086390214706 0.027011902268885175 0.7593316319007215 5 0.0 0.1 390 | 215 0.0334167659700929 0.03340932418619841 0.7593069596150457 5 0.0 0.1 391 | 216 0.057222876689838276 0.057207517172290785 0.7592396754297965 5 0.0 0.1 392 | 217 0.02769063902593677 0.027666668780308355 0.7593378874007897 5 0.0 0.1 393 | 218 0.021287143194524853 0.021283803076502194 0.7594084080069479 5 0.0 0.1 394 | 219 0.030777426434778973 0.030739726363957356 0.759295298166009 5 0.0 0.1 395 | 220 0.02191024677860689 0.021909401696551836 0.7593135511738893 5 0.0 0.1 396 | 221 0.033970048532366556 0.03394707816656108 0.759297111153117 5 0.0 0.1 397 | 222 0.03293328535368172 0.032923370116060086 0.7593032383577452 5 0.0 0.1 398 | 223 0.029068400669154604 0.029040465622309553 0.7593103030234545 5 0.0 0.1 399 | 224 0.04582538402948775 0.04582538402948775 0.7593672176837032 5 0.0 0.1 400 | 225 0.02848981900987522 0.028455575957243216 0.7592837857918653 5 0.0 0.1 401 | 226 0.0197182390358294 0.01969005020717295 0.7593090271912644 5 0.0 0.1 402 | 227 0.04359044933165098 0.04359044933165098 0.7593560109268651 5 0.0 0.1 403 | 228 0.04058927806169931 0.04058293021390567 0.7592785593623859 5 0.0 0.1 404 | 229 0.022406388716537468 0.022382197446111963 0.7591777100726347 5 0.0 0.1 405 | 230 0.03708856589015061 0.03708032942330089 0.7593254331934389 5 0.0 0.1 406 | 231 0.021622663440321207 0.021611211877615163 0.7592921093609846 5 0.0 0.1 407 | 232 0.030006200519696182 0.02997008747296185 0.7593161603295755 5 0.0 0.1 408 | 233 0.02008242153957058 0.020037121091756496 0.7593170922255865 5 0.0 0.1 409 | 234 0.02629720530640117 0.026248841181048928 0.7593068001609709 5 0.0 0.1 410 | 235 0.02967224203931872 0.02967224203931872 0.7592607768407049 5 0.0 0.1 411 | 236 0.023281601339316737 0.023202228602503348 0.7593195783818203 5 0.0 0.1 412 | 237 0.04652703188554413 0.046521216183347806 0.759376988658417 5 0.0 0.1 413 | 238 0.03985324831242414 0.03981650545611476 0.7592837351722039 5 0.0 0.1 414 | 239 0.02046279588355998 0.02045719796431201 0.7591845723574977 5 0.0 0.1 415 | 240 0.03393116583059891 0.03379833627323129 0.7593293236648577 5 0.0 0.1 416 | 241 0.024339193382497144 0.0242617337994179 0.7593790190105238 5 0.0 0.1 417 | 242 0.04148390736535386 0.04147168566838389 0.759285761013615 5 0.0 0.1 418 | 243 0.03946255766072136 0.03942072422380603 0.7593075115533452 5 0.0 0.1 419 | 244 0.018077004371327244 0.018076999953383625 0.7592858394735345 5 0.0 0.1 420 | 245 0.042759200721180946 0.042742081815137674 0.7592437114159765 5 0.0 0.1 421 | 246 0.018032026607805098 0.017944638341986365 0.7593115081158004 5 0.0 0.1 422 | 247 0.024343007409847385 0.02427876765056086 0.7593681345082501 5 0.0 0.1 423 | 248 0.03454514060778044 0.03450813794987872 0.7592836322281613 5 0.0 0.1 424 | 249 0.019416930891113567 0.019335390927899005 0.759208247747722 5 0.0 0.1 425 | 250 0.042246166713012005 0.04221052708256737 0.7593175324148547 5 0.0 0.1 426 | 251 0.016968633470078272 0.01686887536815141 0.7594063647854199 5 0.0 0.1 427 | 252 0.0264572642280021 0.026405144925730827 0.7592729862723218 5 0.0 0.1 428 | 253 0.04128786953024912 0.04128727244149273 0.7592975023298294 5 0.0 0.1 429 | 254 0.02955967783954138 0.029559481511269248 0.7592714904683078 5 0.0 0.1 430 | 255 0.0221910467698113 0.022177863208101375 0.7592738929106986 5 0.0 0.1 431 | 256 0.040709685227638175 0.040688356473169096 0.7592930578929469 5 0.0 0.1 432 | 257 0.04384848210802016 0.04384848210802016 0.7593368553622923 5 0.0 0.1 433 | 258 0.04594678004103822 0.04592846630057677 0.7592659151566608 5 0.0 0.1 434 | 259 0.020029064897588787 0.02000572562719354 0.7592932039740248 5 0.0 0.1 435 | 260 0.03574796095478051 0.03573655110510447 0.7593321366371839 5 0.0 0.1 436 | 261 0.03206492169199677 0.03205940687295249 0.7592776528123153 5 0.0 0.1 437 | 262 0.028112941586552143 0.028064207155150355 0.7591949114247853 5 0.0 0.1 438 | 263 0.02270224804192861 0.022663034514170937 0.7593100261002093 5 0.0 0.1 439 | 264 0.025564517240274084 0.02547057557791173 0.7593413093744346 5 0.0 0.1 440 | 265 0.01872765906774623 0.01866102846256753 0.7592843193351797 5 0.0 0.1 441 | 266 0.029070651194852734 0.02905621156476582 0.7592996263298346 5 0.0 0.1 442 | 267 0.018791745101378477 0.018791745101378477 0.7593458527536114 5 0.0 0.1 443 | 268 0.045192332865755414 0.04516331081550839 0.7592841544492472 5 0.0 0.1 444 | 269 0.02518839128845815 0.025162837136791967 0.7593073199311533 5 0.0 0.1 445 | 270 0.026460024963404095 0.026460024963404095 0.7592863652409108 5 0.0 0.1 446 | 271 0.027748595311029158 0.027735936142432152 0.7592365153931553 5 0.0 0.1 447 | 272 0.03936751310549694 0.039349078130261 0.75930710046174 5 0.0 0.1 448 | 273 0.03427409136495396 0.03427337497204545 0.7593700396955825 5 0.0 0.1 449 | 274 0.01811608512259727 0.018100473777665493 0.759273419704769 5 0.0 0.1 450 | 275 0.02009738129628753 0.020088805151818996 0.7591796047320685 5 0.0 0.1 451 | 276 0.039394609054598705 0.03936656360835875 0.7593202537341455 5 0.0 0.1 452 | 277 0.03714659246262591 0.03714130674601208 0.7592827346196742 5 0.0 0.1 453 | 278 0.0406191149524944 0.04059344456673774 0.7592143681808778 5 0.0 0.1 454 | 279 0.030882912269469015 0.030840050206548134 0.7593134963342862 5 0.0 0.1 455 | 280 0.032679428015274875 0.032619307978913166 0.7593896633324988 5 0.0 0.1 456 | 281 0.035183148753952696 0.03513206526953409 0.75925920574835 5 0.0 0.1 457 | 282 0.031023511487977065 0.031016617469433086 0.7592856566150203 5 0.0 0.1 458 | 283 0.06544534266981118 0.06543872079161388 0.7593096038396681 5 0.0 0.1 459 | 284 0.015076647545827292 0.014980292860955037 0.7592682800150357 5 0.0 0.1 460 | 285 0.048849785657181136 0.04883811251105375 0.7591698902221538 5 0.0 0.1 461 | 286 0.037492829761318354 0.037463134047892796 0.759313122706061 5 0.0 0.1 462 | 287 0.0327575041748394 0.03269792583027015 0.7593690210146065 5 0.0 0.1 463 | 288 0.018500521390282146 0.018393186638909213 0.7592744780939995 5 0.0 0.1 464 | 289 0.021111515694942868 0.02103925626576978 0.759294095238289 5 0.0 0.1 465 | 290 0.04082295943801155 0.04078398494873832 0.7593110428793182 5 0.0 0.1 466 | 291 0.03671519839832478 0.03669444811949411 0.7592815590764701 5 0.0 0.1 467 | 292 0.02946984719635058 0.029449718749227027 0.7591581804985594 5 0.0 0.1 468 | 293 0.03373570770380589 0.0335089041623729 0.7593306064327123 5 0.0 0.1 469 | 294 0.022433003786652476 0.022379315023588933 0.7592956876825099 5 0.0 0.1 470 | 295 0.04927290156872353 0.049239290406320364 0.7593188812036402 5 0.0 0.1 471 | 296 0.017712103621589165 0.017674649177437246 0.7593200824089479 5 0.0 0.1 472 | 297 0.03472202437433158 0.03468138134766166 0.759305029432511 5 0.0 0.1 473 | 298 0.04224482303490317 0.042234061891913574 0.7592670797332346 5 0.0 0.1 474 | 299 0.02492098877155601 0.024856182753339222 0.7593203148357475 5 0.0 0.1 475 | 300 0.03343088555426034 0.03342850953398998 0.7593721950669874 5 0.0 0.1 476 | -----------------------SSNEB Finished------------------------------ 477 | Image ReCoords E RealForce Image 478 | 0 0.000000 0.000000 0.000000 0 479 | 1 0.266558 0.006314 -0.043705 1 480 | 2 0.533067 0.029564 -0.151015 2 481 | 3 0.799524 0.108635 -0.615758 3 482 | 4 1.065937 0.436472 -1.673454 4 483 | 5 1.332338 0.759372 -0.005399 5 484 | 6 1.765535 0.320325 0.000000 6 485 | Iteration Total Force Perp Force MaxU MaxI Stress on CI 486 | ------------------------------------------------------------ 487 | 1 0.44498497523335157 0.44498375109736577 0.7606861186559399 5 0.0 0.1 488 | 2 0.3617724273988218 0.36172410773531416 0.7606547561214683 5 0.0 0.1 489 | 3 0.3239256921100094 0.3228520821593947 0.7605031915147435 5 0.0 0.1 490 | 4 0.33566205222204987 0.33520573744379845 0.7605341141211568 5 0.0 0.1 491 | 5 0.36146636521613845 0.3591035621995507 0.7603975201313915 5 0.0 0.1 492 | 6 0.3014505286001779 0.3002646776503234 0.7604437101328898 5 0.0 0.1 493 | 7 0.2632516306507358 0.26109775546154346 0.7602768839906702 5 0.0 0.1 494 | 8 0.2590069564105592 0.2587682670246109 0.7602681770149928 5 0.0 0.1 495 | 9 0.2740898951980536 0.27358943560539273 0.760253162532635 5 0.0 0.1 496 | 10 0.2313561108365052 0.23066545245139733 0.7601476822421489 5 0.0 0.1 497 | 11 0.20845087755373776 0.20603027353787376 0.7601618388145539 5 0.0 0.1 498 | 12 0.21245397361665913 0.21116267029323554 0.7600385213749945 5 0.0 0.1 499 | 13 0.2356513986212042 0.2354074049649223 0.7600162571112037 5 0.0 0.1 500 | 14 0.18963861375395216 0.18952333522755668 0.7600024427672736 5 0.0 0.1 501 | 15 0.16094607442384215 0.16016002067040327 0.7599932679308239 5 0.0 0.1 502 | 16 0.16060845882951252 0.16041847435131454 0.7599596108999407 5 0.0 0.1 503 | 17 0.18495614175814787 0.18461197816207967 0.7599009428642773 5 0.0 0.1 504 | 18 0.15418979724074325 0.15416654336346317 0.7599255929408599 5 0.0 0.1 505 | 19 0.12755046327325062 0.12704992859225236 0.7598750867509949 5 0.0 0.1 506 | 20 0.12330252987606467 0.12326591116227 0.7598782815337728 5 0.0 0.1 507 | 21 0.13677483200576476 0.13662415547387535 0.7598297243251722 5 0.0 0.1 508 | 22 0.12226094924970818 0.12226011502869384 0.759844286942581 5 0.0 0.1 509 | 23 0.10914850584618334 0.10896061922971466 0.7597846322482837 5 0.0 0.1 510 | 24 0.09804691566006477 0.09803627330940623 0.7598085541957147 5 0.0 0.1 511 | 25 0.1061571417354578 0.10604244461857686 0.7597502751127081 5 0.0 0.1 512 | 26 0.10159459596495464 0.10156291280403008 0.7597664053738811 5 0.0 0.1 513 | 27 0.09584874428716164 0.09575896871078353 0.7597273462412915 5 0.0 0.1 514 | 28 0.0816298126343535 0.08161478674634261 0.7597274225742439 5 0.0 0.1 515 | 29 0.08722638619175711 0.08687178957724924 0.7596538359078835 5 0.0 0.1 516 | 30 0.08969083797154306 0.08969001243540825 0.7596679819948946 5 0.0 0.1 517 | 31 0.08331090140175729 0.08329650956056202 0.7596006959774542 5 0.0 0.1 518 | 32 0.07352808094368832 0.07349850142203063 0.7596101223797831 5 0.0 0.1 519 | 33 0.0863213248401575 0.08629915415106161 0.7595526636944641 5 0.0 0.1 520 | 34 0.08030623154353407 0.08019802873450671 0.7595936580614762 5 0.0 0.1 521 | 35 0.0742290628226328 0.07422747464017394 0.7595730885703915 5 0.0 0.1 522 | 36 0.068901784157234 0.06889891238399647 0.7595854634652142 5 0.0 0.1 523 | 37 0.06730630572615635 0.06730563207238482 0.7595330784278076 5 0.0 0.1 524 | 38 0.07438457806822664 0.07436259723536008 0.7595710215352653 5 0.0 0.1 525 | 39 0.06580270620873563 0.06577803765251936 0.759611500323814 5 0.0 0.1 526 | 40 0.06374072435223892 0.06368765792603322 0.7595150981615575 5 0.0 0.1 527 | 41 0.04985421621860772 0.04985418153827091 0.7595406582593967 5 0.0 0.1 528 | 42 0.06017000549239488 0.06016501375099865 0.7595427844465519 5 0.0 0.1 529 | 43 0.06335392106316207 0.06334241781980417 0.7595266594266548 5 0.0 0.1 530 | 44 0.06280479575596332 0.06266409357857262 0.7594288774374292 5 0.0 0.1 531 | 45 0.05678733934071303 0.05678702496489943 0.7595606562992714 5 0.0 0.1 532 | 46 0.04964781799898482 0.04963746098291657 0.759512914417968 5 0.0 0.1 533 | 47 0.05603986031380812 0.056038743843641346 0.7595450251451155 5 0.0 0.1 534 | 48 0.05255018577988951 0.05254746081326367 0.7595097374978366 5 0.0 0.1 535 | 49 0.04926874524973185 0.04906867939217724 0.7595295969089051 5 0.0 0.1 536 | 50 0.04966399201852631 0.049663628298186546 0.7594944588332169 5 0.0 0.1 537 | 51 0.051608915870076114 0.05159070116890317 0.7595060241575453 5 0.0 0.1 538 | 52 0.057934735796197956 0.05792696852823814 0.7594533056173418 5 0.0 0.1 539 | 53 0.04411999042664127 0.04410503194887577 0.759514372891914 5 0.0 0.1 540 | 54 0.04499215487922538 0.044973681505352955 0.7594900419722279 5 0.0 0.1 541 | 55 0.03908738129296346 0.039080387838121386 0.759509430690045 5 0.0 0.1 542 | 56 0.04588763219428174 0.045879521038901874 0.7594817740002924 5 0.0 0.1 543 | 57 0.0584478116784253 0.05836496032482456 0.7595084767481666 5 0.0 0.1 544 | 58 0.04397231993885997 0.04392198907306333 0.7595216048800921 5 0.0 0.1 545 | 59 0.038493490144526264 0.038427486293107986 0.7594867175885156 5 0.0 0.1 546 | 60 0.04049848631166399 0.04043689443451707 0.7594139429460682 5 0.0 0.1 547 | 61 0.038553541754405396 0.03849657925286715 0.7595090443465153 5 0.0 0.1 548 | 62 0.03912829638059794 0.03895083094040116 0.7594778614101756 5 0.0 0.1 549 | 63 0.03882258705334793 0.03853836760832432 0.7594950400835359 5 0.0 0.1 550 | 64 0.06243489827371708 0.06235570763713391 0.7594847117555901 5 0.0 0.1 551 | 65 0.04453174926786043 0.04440285555742047 0.7594823355123879 5 0.0 0.1 552 | 66 0.034212572419380444 0.03405393155039284 0.7595028913276707 5 0.0 0.1 553 | 67 0.04105921357291059 0.041038424389825016 0.7594715952266711 5 0.0 0.1 554 | 68 0.03428161778004595 0.03398977297952419 0.7594180820815382 5 0.0 0.1 555 | 69 0.03450716135050334 0.034386909195020604 0.7594816212268825 5 0.0 0.1 556 | 70 0.036047335426406334 0.03562410298502942 0.7595608805301737 5 0.0 0.1 557 | 71 0.04019544107094082 0.04005959959911652 0.7594398559433557 5 0.0 0.1 558 | 72 0.03773583641769376 0.037414074922702344 0.7594661878304265 5 0.0 0.1 559 | 73 0.03139853097690728 0.03128959062086696 0.759436930495923 5 0.0 0.1 560 | 74 0.03439873804302602 0.034190024409470374 0.7593756210199558 5 0.0 0.1 561 | 75 0.03428179997640975 0.034093977047729276 0.7594627383653147 5 0.0 0.1 562 | 76 0.0333380630954264 0.033017887916351366 0.7594367039672107 5 0.0 0.1 563 | 77 0.032416626005505475 0.03220534041122522 0.7594503990568597 5 0.0 0.1 564 | 78 0.037214269846501606 0.037141490504460244 0.7594437599045847 5 0.0 0.1 565 | 79 0.03295011670354836 0.032714279935175394 0.7594390761658332 5 0.0 0.1 566 | 80 0.035369189791842094 0.035247753398596315 0.7593976156666002 5 0.0 0.1 567 | 81 0.033907608907690304 0.033564034475926194 0.7594448089696897 5 0.0 0.1 568 | 82 0.033086339616435916 0.032782018481196336 0.7594320196932216 5 0.0 0.1 569 | 83 0.031091073906054433 0.03073161958551283 0.7594474548485408 5 0.0 0.1 570 | 84 0.03241407783643694 0.0320556699460195 0.7594277673029097 5 0.0 0.1 571 | 85 0.026879895982463924 0.026475889620470726 0.7594380299336478 5 0.0 0.1 572 | 86 0.04041605165393753 0.04017950251394468 0.7594796566268798 5 0.0 0.1 573 | 87 0.03146963620923928 0.031202120559931663 0.7594202313031815 5 0.0 0.1 574 | 88 0.0314425487090383 0.031027479669784575 0.7593636166591153 5 0.0 0.1 575 | 89 0.039045478636498585 0.039045478636498585 0.7594393048686925 5 0.0 0.1 576 | 90 0.029180074482866487 0.02875562434362369 0.7594079554057487 5 0.0 0.1 577 | 91 0.030770227627651487 0.030770227627651487 0.7594295565899927 5 0.0 0.1 578 | 92 0.03281906169302716 0.032457243020528326 0.7593876110935298 5 0.0 0.1 579 | 93 0.028136793408705424 0.027649286428626615 0.7594276163026592 5 0.0 0.1 580 | 94 0.03209185029453024 0.03159651255197074 0.759414922820298 5 0.0 0.1 581 | 95 0.02768803112727966 0.02768803112727966 0.7594324720191707 5 0.0 0.1 582 | 96 0.02639938010634779 0.025993383280380998 0.7593827365956116 5 0.0 0.1 583 | 97 0.04189782824189835 0.041471865414153146 0.7594320682153182 5 0.0 0.1 584 | 98 0.035173683559867566 0.035173683559867566 0.7594830992993451 5 0.0 0.1 585 | 99 0.029960243280918897 0.02951684487656275 0.759394350884719 5 0.0 0.1 586 | 100 0.03732667026578954 0.03725351361496201 0.7593319307011797 5 0.0 0.1 587 | 101 0.02751837095866353 0.027037521538627186 0.7594331893872521 5 0.0 0.1 588 | 102 0.02953702883473873 0.029082983021305506 0.7595253110379758 5 0.0 0.1 589 | 103 0.045073468852502456 0.04493678805515753 0.7593858395573534 5 0.0 0.1 590 | 104 0.03261900294929865 0.032294317541940946 0.7594118851987162 5 0.0 0.1 591 | 105 0.027641865591293842 0.027641865591293842 0.7593824835583689 5 0.0 0.1 592 | 106 0.02747724533553298 0.02740594034445324 0.7593731200294656 5 0.0 0.1 593 | 107 0.02439896897942961 0.023945149761978257 0.7594005239300969 5 0.0 0.1 594 | 108 0.04663340966542423 0.04663340966542423 0.7594476354462927 5 0.0 0.1 595 | 109 0.05101673156768486 0.05095965457554292 0.7593775488474108 5 0.0 0.1 596 | 110 0.03291065932479557 0.03249642150594056 0.7592825880158642 5 0.0 0.1 597 | 111 0.031091881583372248 0.03080650181598055 0.7594292912276188 5 0.0 0.1 598 | 112 0.023802956556891273 0.02328140116150269 0.7593928581233769 5 0.0 0.1 599 | 113 0.03383735749006576 0.033712510594486406 0.7594155834944871 5 0.0 0.1 600 | 114 0.02251462805495177 0.02200878252433094 0.7594141503362408 5 0.0 0.1 601 | 115 0.053282773428496175 0.05306099293299297 0.7594041533640166 5 0.0 0.1 602 | 116 0.022455336964890295 0.021952442767985823 0.7593459182666322 5 0.0 0.1 603 | 117 0.04745229436515947 0.04721677500881612 0.7594190967335237 5 0.0 0.1 604 | 118 0.030575401264227624 0.030371617395739854 0.7594240169155881 5 0.0 0.1 605 | 119 0.021388063070753673 0.020856739819604193 0.7593929571592497 5 0.0 0.1 606 | 120 0.04750680960671813 0.04744037920635051 0.75930342372925 5 0.0 0.1 607 | 121 0.02096240081632376 0.02050188358006994 0.7594368288773836 5 0.0 0.1 608 | 122 0.027597131460833205 0.027373677121705024 0.7595034898217676 5 0.0 0.1 609 | 123 0.022032640696043538 0.021873348353493034 0.7593883742166696 5 0.0 0.1 610 | 124 0.021584540671628127 0.02107320238660924 0.7594162510686289 5 0.0 0.1 611 | 125 0.02386430926726859 0.02386430926726859 0.7593863221785 5 0.0 0.1 612 | 126 0.020871977438019888 0.020383537550955958 0.7593741372645155 5 0.0 0.1 613 | 127 0.027993398794171283 0.027942315811364162 0.7594033802070186 5 0.0 0.1 614 | 128 0.05001570970875406 0.05000509148188861 0.7594683599081549 5 0.0 0.1 615 | 129 0.021697178776584357 0.021622694185591023 0.7593697844186238 5 0.0 0.1 616 | 130 0.03320863861319246 0.03315676147060783 0.7592564481260808 5 0.0 0.1 617 | 131 0.033641369823029274 0.03346785659293896 0.7594225675250499 5 0.0 0.1 618 | 132 0.042019963936383596 0.04191978404029327 0.7593852303192108 5 0.0 0.1 619 | 133 0.03293657989686469 0.03282834808196874 0.759411393749204 5 0.0 0.1 620 | 134 0.017056122771397134 0.016591140162545502 0.7594186772390543 5 0.0 0.1 621 | 135 0.04014897226533554 0.03998659045348285 0.7593977051820247 5 0.0 0.1 622 | 136 0.03569161250410084 0.035558919248845 0.7594097140234197 5 0.0 0.1 623 | 137 0.037562202521216906 0.037413397226911504 0.7593876289889181 5 0.0 0.1 624 | 138 0.023275893560049124 0.023275893560049124 0.7593971933578132 5 0.0 0.1 625 | 139 0.022328120809745243 0.022296665021031132 0.7593878386649493 5 0.0 0.1 626 | 140 0.023263820246015702 0.022981163923948215 0.7593864143405824 5 0.0 0.1 627 | 141 0.03464527366587136 0.034628418944142106 0.7593317537041315 5 0.0 0.1 628 | 142 0.027388225686357688 0.027128165056685895 0.7594035355043474 5 0.0 0.1 629 | 143 0.02827050816384623 0.028099226591146175 0.7594602453998789 5 0.0 0.1 630 | 144 0.03997775239230471 0.039975470793166865 0.7593686189130011 5 0.0 0.1 631 | 145 0.03396222178992547 0.03393224786606827 0.7593223005518439 5 0.0 0.1 632 | 146 0.030040154520888977 0.030040154520888977 0.7593927278167882 5 0.0 0.1 633 | 147 0.026719892628762103 0.02668411937903492 0.7593745717901896 5 0.0 0.1 634 | 148 0.020725115585898055 0.02038099607625446 0.7593943511205055 5 0.0 0.1 635 | 149 0.03430557949657742 0.034305009086087954 0.7593790111708785 5 0.0 0.1 636 | 150 0.049584422098632966 0.04949192756212107 0.7593292561518012 5 0.0 0.1 637 | 151 0.02878861271413401 0.028516607493637443 0.7594082055513525 5 0.0 0.1 638 | 152 0.051642730183445965 0.051642730183445965 0.7594718645819398 5 0.0 0.1 639 | 153 0.0258575951366216 0.025544528994154457 0.7593523302750782 5 0.0 0.1 640 | 154 0.028694712192724313 0.028673053612072626 0.7593798361690034 5 0.0 0.1 641 | 155 0.03986219233437778 0.03986219233437778 0.759390551892551 5 0.0 0.1 642 | 156 0.01804900853822969 0.01801745040453007 0.7593619500540854 5 0.0 0.1 643 | 157 0.047143529313918714 0.04713530662940014 0.7592495758027553 5 0.0 0.1 644 | 158 0.020891479630087122 0.02070537389498395 0.7594173640454471 5 0.0 0.1 645 | 159 0.023058730458445365 0.022746303557851216 0.759373203016068 5 0.0 0.1 646 | 160 0.027252897195620254 0.02721953125982287 0.7593219649335339 5 0.0 0.1 647 | 161 0.022217454926450293 0.02187822407932678 0.7593991350266549 5 0.0 0.1 648 | 162 0.032817548146481204 0.03280852636717517 0.7593744989370776 5 0.0 0.1 649 | 163 0.05151778758735426 0.05143586006808858 0.7593183376909707 5 0.0 0.1 650 | 164 0.03171641003265521 0.03168535050220774 0.7593996419759605 5 0.0 0.1 651 | 165 0.03958106343383138 0.03957362245767258 0.7594608763088502 5 0.0 0.1 652 | 166 0.016565987775440504 0.016565987775440504 0.7593566670107066 5 0.0 0.1 653 | 167 0.04704020038685546 0.04691407685537761 0.7592389320686834 5 0.0 0.1 654 | 168 0.039526852269441366 0.039405219287946734 0.7593943433998476 5 0.0 0.1 655 | 169 0.02223180198225116 0.02217121897835019 0.7593730849186215 5 0.0 0.1 656 | 170 0.026765555473644488 0.02658406188537641 0.7593908826349036 5 0.0 0.1 657 | 171 0.02770543326583673 0.02768718883338763 0.7594441500516069 5 0.0 0.1 658 | 172 0.04411336463876413 0.0440867138138234 0.7593650782826842 5 0.0 0.1 659 | 173 0.057065400173852705 0.05695871036367154 0.759379726784772 5 0.0 0.1 660 | 174 0.024128143452671325 0.02402168579134857 0.7593633451401445 5 0.0 0.1 661 | 175 0.03433443416647231 0.034196578191615326 0.7593584968991962 5 0.0 0.1 662 | 176 0.01957984726893124 0.019564128397485628 0.7593683311262112 5 0.0 0.1 663 | 177 0.04759777557823593 0.04754559429716362 0.7593959146711882 5 0.0 0.1 664 | 178 0.030773082081227917 0.030769163722755954 0.7593604107815679 5 0.0 0.1 665 | 179 0.035271927756112556 0.035253988301884094 0.7593789654668939 5 0.0 0.1 666 | 180 0.027817664798087817 0.027817664798087817 0.7593647693851437 5 0.0 0.1 667 | 181 0.02537422237938131 0.02534869314446938 0.7593661610538334 5 0.0 0.1 668 | 182 0.02712641835980582 0.026839926242209336 0.7593645144075225 5 0.0 0.1 669 | 183 0.04255162116288686 0.04254516817997253 0.7593765417361169 5 0.0 0.1 670 | 184 0.02903089507033375 0.0287256522450088 0.7593644826151689 5 0.0 0.1 671 | 185 0.03271180172787992 0.03261758716080651 0.7593617188397559 5 0.0 0.1 672 | 186 0.029075680352227837 0.029070523701356092 0.7593530693919348 5 0.0 0.1 673 | 187 0.016396785721090393 0.01623222370286269 0.7593659776744346 5 0.0 0.1 674 | 188 0.04011636828975028 0.04011636828975028 0.7593145438349183 5 0.0 0.1 675 | 189 0.03074675420128284 0.03071344178151062 0.7593725955349413 5 0.0 0.1 676 | 190 0.028729533998846087 0.028478583223810233 0.7593607762911176 5 0.0 0.1 677 | 191 0.02140671218343534 0.02140671218343534 0.7593679512625897 5 0.0 0.1 678 | 192 0.027408914461561035 0.027184200306343644 0.7593352205268928 5 0.0 0.1 679 | 193 0.02432213903113764 0.024221281322885393 0.7593591423515136 5 0.0 0.1 680 | 194 0.034796065077402454 0.03477533833675645 0.7593736467934065 5 0.0 0.1 681 | 195 0.016555244900776596 0.01618070559777859 0.7593491446017424 5 0.0 0.1 682 | 196 0.03591106562681402 0.03589733927343035 0.7593442378534974 5 0.0 0.1 683 | 197 0.03638674660047539 0.03638648831183172 0.759354476868296 5 0.0 0.1 684 | 198 0.03990599746365438 0.03990599746365438 0.7593661228512758 5 0.0 0.1 685 | 199 0.035121268858859356 0.03509700098160712 0.7593434077435148 5 0.0 0.1 686 | 200 0.01599130442973966 0.015551890270218484 0.7593559476323009 5 0.0 0.1 687 | 201 0.028990194112366977 0.028736758560767017 0.7593492412300691 5 0.0 0.1 688 | 202 0.024496524359200036 0.02445846124986014 0.7593526189754272 5 0.0 0.1 689 | 203 0.03566867804339228 0.035661424668798215 0.7593275188111193 5 0.0 0.1 690 | 204 0.04195318872732931 0.04195318872732931 0.7593600156250773 5 0.0 0.1 691 | 205 0.0226786516457686 0.02258858861016056 0.7593375610354798 5 0.0 0.1 692 | 206 0.04155447098732484 0.041438088163418735 0.7593575169708515 5 0.0 0.1 693 | 207 0.03996361711713586 0.03988284914226311 0.7593314447360626 5 0.0 0.1 694 | 208 0.024697565795715998 0.024569241269456882 0.7593621127355448 5 0.0 0.1 695 | 209 0.03409050695563917 0.03409050695563917 0.7593730742427454 5 0.0 0.1 696 | 210 0.02810237998032508 0.028050713041408194 0.7593433166810968 5 0.0 0.1 697 | 211 0.019878601961044132 0.01984188547436424 0.7593580348277129 5 0.0 0.1 698 | 212 0.026212464814534445 0.026149168677445378 0.7593535331485839 5 0.0 0.1 699 | 213 0.03228324343156183 0.032157486370168444 0.7593573652980012 5 0.0 0.1 700 | 214 0.032164355406353234 0.03213892317258664 0.7593558339282822 5 0.0 0.1 701 | 215 0.018537730418978264 0.018373013036631726 0.7593647649356541 5 0.0 0.1 702 | 216 0.035478659318565205 0.0353746626763806 0.759344630355443 5 0.0 0.1 703 | 217 0.03712570471604905 0.03712398357161935 0.7593085198444385 5 0.0 0.1 704 | 218 0.029160188231085682 0.02900668378718511 0.7593666985769687 5 0.0 0.1 705 | 219 0.03294926758127924 0.03294926758127924 0.7594076103713121 5 0.0 0.1 706 | 220 0.030549046996571242 0.030545609679536987 0.7593288414592081 5 0.0 0.1 707 | 221 0.02663846080761167 0.026427975675458855 0.7592388275521245 5 0.0 0.1 708 | 222 0.03271497012607263 0.03265025723079409 0.7593860268619892 5 0.0 0.1 709 | 223 0.03294332613456364 0.03279938115964928 0.7594605769831873 5 0.0 0.1 710 | 224 0.03371904603177226 0.03368640672537592 0.7593336572565335 5 0.0 0.1 711 | 225 0.026412873251780447 0.026243589598069234 0.7593586293260302 5 0.0 0.1 712 | 226 0.023902560065450256 0.023902560065450256 0.759338333474119 5 0.0 0.1 713 | 227 0.044995089262312334 0.0449804264159357 0.7592968621434864 5 0.0 0.1 714 | 228 0.016983308845821093 0.016890763617992747 0.7593619723964338 5 0.0 0.1 715 | 229 0.024182151089669833 0.024182151089669833 0.75942695730933 5 0.0 0.1 716 | 230 0.03435375691085474 0.03429758045336915 0.7593270546849453 5 0.0 0.1 717 | 231 0.023032646242164133 0.02278864232851087 0.7592592204610895 5 0.0 0.1 718 | 232 0.034417259294673486 0.034379749172968 0.7593727024523957 5 0.0 0.1 719 | 233 0.052195074333890874 0.05214291323346216 0.7593429802094107 5 0.0 0.1 720 | 234 0.042793444986883825 0.042793444986883825 0.7593023895150708 5 0.0 0.1 721 | 235 0.0417843923542478 0.04176118007492257 0.7593677623892887 5 0.0 0.1 722 | 236 0.02800394100412899 0.02800394100412899 0.759442021316687 5 0.0 0.1 723 | 237 0.03308480190817603 0.03304827359404071 0.7593237274720508 5 0.0 0.1 724 | 238 0.028978994815944386 0.028976468763384017 0.7592112140767711 5 0.0 0.1 725 | 239 0.04572125414229455 0.04563297572160072 0.7593701550991483 5 0.0 0.1 726 | 240 0.020126525588667767 0.020010263765640288 0.7593435688909409 5 0.0 0.1 727 | 241 0.03695221329860115 0.03687563791986041 0.7593601153882901 5 0.0 0.1 728 | 242 0.02587881990138479 0.025865053635728205 0.7593425943129404 5 0.0 0.1 729 | 243 0.036532996009859466 0.036532996009859466 0.7593120137889571 5 0.0 0.1 730 | 244 0.025111121041916415 0.025110447208276328 0.7593599723352042 5 0.0 0.1 731 | 245 0.019834608950434224 0.019834608950434224 0.7594521665708243 5 0.0 0.1 732 | 246 0.03478114048588369 0.03467218174029388 0.7593278209331515 5 0.0 0.1 733 | 247 0.011004152880381987 0.010791820697430942 0.7593570166353771 5 0.0 0.1 734 | 248 0.055098435887908116 0.055095683514510635 0.7593313553867489 5 0.0 0.1 735 | 249 0.039835771967660735 0.039835735637000574 0.7593299990408866 5 0.0 0.1 736 | 250 0.0288458154354082 0.02883406595119253 0.7593338551290998 5 0.0 0.1 737 | 251 0.03305100017416763 0.033040935485466445 0.7593331046429626 5 0.0 0.1 738 | 252 0.02844388480400152 0.02833648138994623 0.7593542737197225 5 0.0 0.1 739 | 253 0.020253393374594524 0.020253393374594524 0.7594053866261419 5 0.0 0.1 740 | 254 0.04357920344945302 0.04357669395257725 0.759335744197827 5 0.0 0.1 741 | 255 0.020075944664905008 0.020069720766258462 0.7592558789201007 5 0.0 0.1 742 | 256 0.0370843362220472 0.03701553200952609 0.7593656603384602 5 0.0 0.1 743 | 257 0.02303558128454308 0.02303558128454308 0.7594299306576744 5 0.0 0.1 744 | 258 0.01697200835635678 0.01687513873616509 0.7593250853194036 5 0.0 0.1 745 | 259 0.042086830508820054 0.04200632891248039 0.7592256617577249 5 0.0 0.1 746 | 260 0.03062341630147944 0.030611724766529447 0.7593749949783017 5 0.0 0.1 747 | 261 0.025648960435152114 0.025517358630658585 0.7593511897210874 5 0.0 0.1 748 | 262 0.017126800790404385 0.017044156658607264 0.7593703098055045 5 0.0 0.1 749 | 263 0.03699141353136276 0.036974927918021434 0.7593961221596999 5 0.0 0.1 750 | 264 0.03175708246015953 0.031728433452345085 0.7593431893491953 5 0.0 0.1 751 | 265 0.033973385377525145 0.033973385377525145 0.7592352963394688 5 0.0 0.1 752 | 266 0.02396979366370055 0.023789049806259795 0.7593927157695788 5 0.0 0.1 753 | 267 0.02137509807100294 0.021308829603225343 0.7593539206607431 5 0.0 0.1 754 | 268 0.03451192334225235 0.03448315178051478 0.7593769473031813 5 0.0 0.1 755 | 269 0.03824689815464712 0.038142943811372655 0.7593574395531846 5 0.0 0.1 756 | 270 0.033659072757160416 0.03363466596388866 0.7593556041783103 5 0.0 0.1 757 | 271 0.03080881636881043 0.03080881636881043 0.7593090575372514 5 0.0 0.1 758 | 272 0.04787419936299336 0.04780624497336077 0.7593775466286701 5 0.0 0.1 759 | 273 0.029456646152388053 0.029453474379912775 0.7594541167310069 5 0.0 0.1 760 | 274 0.021062058625457625 0.021062058625457625 0.7593371125551585 5 0.0 0.1 761 | 275 0.03575894008935408 0.03575874175583934 0.7592725142454952 5 0.0 0.1 762 | 276 0.027915738708782077 0.027908077034981826 0.7593705966625492 5 0.0 0.1 763 | 277 0.03291287720896057 0.032872755589409185 0.7593473229181882 5 0.0 0.1 764 | 278 0.01610913619674638 0.016084396202656413 0.7593606524820729 5 0.0 0.1 765 | 279 0.023509311118327162 0.023360737897223535 0.7593879906285821 5 0.0 0.1 766 | 280 0.02536231365408183 0.025309580418444288 0.759339408949856 5 0.0 0.1 767 | 281 0.03953370376394238 0.039532946759542054 0.7592495960467431 5 0.0 0.1 768 | 282 0.03094809454501315 0.03092049036103765 0.7593722640231704 5 0.0 0.1 769 | 283 0.024782105435734492 0.024743684219448777 0.7594235388990427 5 0.0 0.1 770 | 284 0.03991208291596012 0.03986432742439552 0.7593411427528451 5 0.0 0.1 771 | 285 0.02732308813830755 0.027314218704329228 0.75935700639873 5 0.0 0.1 772 | 286 0.018470970021652152 0.018470970021652152 0.7593393106502759 5 0.0 0.1 773 | 287 0.030152670596999182 0.03013497884325657 0.7593584481218585 5 0.0 0.1 774 | 288 0.024317391914064727 0.024317391914064727 0.7593599351454401 5 0.0 0.1 775 | 289 0.01382669467735397 0.013635290121808917 0.759350009603466 5 0.0 0.1 776 | 290 0.05036117449453936 0.05035612634750444 0.7592809346399321 5 0.0 0.1 777 | 291 0.03053324066023249 0.03053324066023249 0.7593646160180185 5 0.0 0.1 778 | 292 0.04213185897238 0.04211015930088209 0.7593442127359111 5 0.0 0.1 779 | 293 0.03961123600405655 0.03961123600405655 0.7593626815669836 5 0.0 0.1 780 | 294 0.016823499397724623 0.01669723814647171 0.7593108224956779 5 0.0 0.1 781 | 295 0.03660718319256689 0.03658274676436675 0.7593733541848309 5 0.0 0.1 782 | 296 0.041171235387908234 0.041171235387908234 0.7593940037636884 5 0.0 0.1 783 | 297 0.030819333651942574 0.030799570043068124 0.7593298176597614 5 0.0 0.1 784 | 298 0.040200494600002364 0.04017648399338745 0.7592448713357669 5 0.0 0.1 785 | 299 0.01658907151295141 0.01658907151295141 0.7593811294293147 5 0.0 0.1 786 | 300 0.0366107123178282 0.036595612148679256 0.7594709108152102 5 0.0 0.1 787 | -----------------------SSNEB Finished------------------------------ 788 | Image ReCoords E RealForce Image 789 | 0 0.000000 0.000000 0.000000 0 790 | 1 0.288892 0.006156 -0.049511 1 791 | 2 0.561189 0.035233 -0.194361 2 792 | 3 0.792922 0.135367 -0.601772 3 793 | 4 1.051299 0.447828 -1.438035 4 794 | 5 1.335621 0.759471 -0.008587 5 795 | 6 1.768783 0.320322 0.000000 6 796 | -------------------------------------------------------------------------------- /example/run_eneb-vasp.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | ''' 4 | Neb optimization example 5 | ''' 6 | 7 | from ecb.eneb import eneb, qm_essneb 8 | #from tsase.calculators.vasp_ext import Vasp 9 | from ase.calculators.vasp import Vasp 10 | from ase.io import read 11 | import os 12 | 13 | p1 = read('0.CON',format='vasp') 14 | p2 = read('6.CON',format='vasp') 15 | 16 | #calc = LAMMPS(parameters=parameters, tmp_dir="trash") 17 | calc = Vasp(prec = 'Normal', 18 | ediff = 1e-5, 19 | kpts = (2,2,1), 20 | gamma = True, 21 | xc = 'rPBE', 22 | lcharg = False, 23 | isym = 0, 24 | ncore = 16, 25 | nsim = 4, 26 | lreal= 'Auto', 27 | algo= 'Normal', 28 | encut= 400, 29 | lplane=True, 30 | isif = 0, 31 | ispin = 2, 32 | nelm = 60, 33 | lvhar = True, 34 | lsol= True, 35 | eb_k=80, 36 | tau=0, 37 | lambda_d_k=3.0 38 | ) 39 | p1.set_calculator(calc) 40 | p2.set_calculator(calc) 41 | 42 | #################################################### 43 | calc.initialize(p1) 44 | calc.write_potcar() 45 | nelect0 = calc.default_nelect_from_ppp() 46 | #################################################### 47 | 48 | nim = 7 49 | band = eneb(p1, p2, numImages = nim, ne1=317.6758, ne2=318.2161, ne0=nelect0, voltage=-1.0, method='ci') 50 | # read images from the last run 51 | ''' 52 | for i in range(1,nim-1): 53 | filename = str(i)+'.CON' 54 | b = read(filename,format='vasp') 55 | band.path[i].positions=b.get_positions() 56 | #band.path[i].set_positions(b.get_positions()) 57 | #band.path[i].set_cell(b.get_cell()) 58 | ''' 59 | 60 | opt = qm_essneb(band, maxmove = 0.1, dt = 0.1) 61 | #opt = fire_essneb(band, maxmove =0.1, dtmax = 0.1, dt=0.1) 62 | opt.minimize(forceConverged=0.01, maxIterations = 300) 63 | os.system('touch movie.con') 64 | for p in range(len(band.path)): 65 | os.system('cat '+str(p)+'.CON >>movie.con') 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /example/sbatch.LC: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH -N 3 3 | #SBATCH -p pdebug 4 | #SBATCH -A your_account 5 | #SBATCH -t 00:30:00 6 | #SBATCH -J eneb_test 7 | 8 | #python constV_opt.py 9 | python run_eneb-vasp.py 10 | -------------------------------------------------------------------------------- /scripts/Full_Hessian/DISPLACECAR: -------------------------------------------------------------------------------- 1 | 0 0 0 1 15.925406765753 2 | 0 0 0 2 15.6871859017925 3 | 0 0 0 3 15.7880280274189 4 | 0 0 0 4 15.8565990243541 5 | 0 0 0 5 12.8724391199273 6 | 0 0 0 6 9.72515431637409 7 | 0 0 0 7 9.32994358718179 8 | 0 0 0 8 12.57652216469 9 | 0 0 0 9 9.49851961187436 10 | 0 0 0 10 12.5568833817819 11 | 0 0 0 11 12.642991097373 12 | 0 0 0 12 9.61206421335939 13 | 0 0 0 13 6.90829981495542 14 | 0.02 0.02 0.02 14 4.09891139934126 15 | 0.02 0.02 0.02 15 3.04282768312676 16 | 0 0 0 16 6.34713203093408 17 | 0.02 0.02 0.02 17 3.6104746950318 18 | 0 0 0 18 6.27432481519323 19 | 0 0 0 19 6.44675394490501 20 | 0.02 0.02 0.02 20 3.88981348434918 21 | 0.02 0.02 0.02 21 4.2001554450273 22 | 0 0 0 22 17.1996965159173 23 | 0 0 0 23 14.0105113289485 24 | 0 0 0 24 13.7391283770587 25 | 0 0 0 25 16.9793633891958 26 | 0 0 0 26 14.7703219305202 27 | 0 0 0 27 14.513153716333 28 | 0 0 0 28 15.6751248305987 29 | 0 0 0 29 15.7441875649217 30 | 0 0 0 30 15.8818665925567 31 | 0 0 0 31 15.950034172012 32 | 0 0 0 32 10.995106113264 33 | 0 0 0 33 7.89761305010578 34 | 0 0 0 34 7.37680058348425 35 | 0 0 0 35 10.6471394893013 36 | 0 0 0 36 8.6613913631264 37 | 0 0 0 37 11.5984703939807 38 | 0 0 0 38 11.2691497613064 39 | 0 0 0 39 8.21516410109656 40 | 0 0 0 40 9.30965006202972 41 | 0 0 0 41 12.8739764825494 42 | 0 0 0 42 12.9579772378955 43 | 0 0 0 43 9.42547016875192 44 | 0 0 0 44 9.65369008650921 45 | 0 0 0 45 12.5046460145175 46 | 0 0 0 46 12.5911109745316 47 | 0 0 0 47 9.76543065670678 48 | 0 0 0 48 5.28833706589807 49 | 0.02 0.02 0.02 49 4.53885414040861 50 | 0.02 0.02 0.02 50 3.79815220333635 51 | 0 0 0 51 5.62701868289497 52 | 0.02 0.02 0.02 52 4.99719996328215 53 | 0.02 0.02 0.02 53 2.43594958093451 54 | 0.02 0.02 0.02 54 3.06881613809708 55 | 0 0 0 55 6.90267376298293 56 | 0 0 0 56 7.05770458286966 57 | 0.02 0.02 0.02 57 3.40570746151627 58 | 0.02 0.02 0.02 58 4.03267409449278 59 | 0 0 0 59 6.20129217007893 60 | 0 0 0 60 6.37116738621747 61 | 0.02 0.02 0.02 61 4.30882578104883 62 | 0.02 0.02 0.02 62 1.78666638048525 63 | 0.02 0.02 0.02 63 3.29879339696819 64 | 0.02 0.02 0.02 64 0 65 | 0.02 0.02 0.02 65 2.63805018349343 66 | 0.02 0.02 0.02 66 1.31419991077769 67 | 0.02 0.02 0.02 67 1.02393483889713 68 | 0.02 0.02 0.02 68 3.11280009483463 69 | 0.02 0.02 0.02 69 3.05535113585074 70 | 0.02 0.02 0.02 70 3.28328536923964 71 | 0.02 0.02 0.02 71 4.18913746392962 72 | -------------------------------------------------------------------------------- /scripts/Full_Hessian/K_eff.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | import numpy as np 3 | from tsase.neb.util import vmag 4 | from ase.io import read, write 5 | 6 | #with open(r"df_unit.pickle", "rb") as output_file: 7 | # df_unit = pickle.load(output_file) 8 | with open(r"curvature_along_force+0.5e/Knr.pickle", "rb") as input_file: 9 | Knr_all = pickle.load(input_file) 10 | 11 | # substract the f0 before adding the charge 12 | with open(r"f0.pickle", "rb") as input_file: 13 | f0 = pickle.load(input_file) 14 | dn = 0.5 15 | print vmag(Knr_all) 16 | Knr_all -= f0/dn 17 | print vmag(Knr_all) 18 | 19 | print("Knr_all shape:", Knr_all.shape) 20 | with open('dynamicMatrix/DISPLACECAR', 'r') as dymfile: 21 | freedom = np.loadtxt(dymfile,skiprows=0) 22 | print(freedom[1:3]) 23 | # only keep the freedoms that are nonzero in the DISPLACECAR 24 | Knr = [] 25 | for i in range(len(Knr_all)): 26 | if freedom[i][0] >0: Knr.append(Knr_all[i]) 27 | Knr = np.array(Knr).flatten() 28 | print("Knr shape", Knr.shape) 29 | #print Knr 30 | print vmag(Knr) 31 | 32 | with open('dynamicMatrix/freq.mat', 'r') as dymfile: 33 | Krr = np.loadtxt(dymfile,skiprows=0) 34 | print("Krr shape", Krr.shape) 35 | 36 | # calculate Knr*invKrr*Krn 37 | #invKrr = np.linalg.inv(Krr) 38 | #tmp = np.matmul(Knr, invKrr) 39 | #Keff = np.matmul(tmp, Knr.transpose()) 40 | #tmp = np.linalg.solve(Krr, Knr.transpose()) 41 | tmp = np.linalg.lstsq(Krr, Knr.transpose(), rcond=0.0001)[0] 42 | Keff = np.matmul(Knr, tmp) 43 | print("Keff", Keff) 44 | 45 | #C_saddle = 0.6182; 46 | #U0_saddle = 1.1667 47 | #U0_saddle = 1.1839 48 | C_saddle = 0.6311; 49 | U0_saddle = 0.6825 50 | C = C_saddle 51 | Ceff = 1/(1/C - Keff) 52 | print("Ceff", Ceff) 53 | 54 | U0 = U0_saddle 55 | U = 1.6 56 | dn = Ceff*(U-U0) 57 | dr = np.linalg.lstsq(Krr, Knr.transpose()*-dn, rcond=0.0001)[0] 58 | print("U=", U) 59 | print("dn=", dn) 60 | p0 = read('dynamicMatrix/POSCAR', format='vasp') 61 | r0 = p0.get_positions() 62 | j = 0 63 | for i in range(len(r0)): 64 | if freedom[i][0] >0: 65 | r0[i] += dr[j:j+3] 66 | j += 3 67 | 68 | p0.set_positions(r0) 69 | write('POSCAR_'+str(U)+'V.vasp', p0, format='vasp', vasp5=True, direct=True) 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /scripts/Full_Hessian/curvature.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ''' 3 | 4 | Cell optimization example using mushy box with shear stress applied 5 | ''' 6 | 7 | from ase.optimize.fire import FIRE 8 | from ase import * 9 | from ase.io import read,write 10 | import os 11 | import sys 12 | import numpy as np 13 | #from eAtoms import eAtoms 14 | from ase.calculators.vasp import Vasp 15 | from util import vunit, vdot, vmag 16 | import pickle 17 | 18 | p1 = read('final.vasp',format='vasp') 19 | n0 = 436 20 | dn = 0.5 21 | 22 | calc = Vasp(prec = 'Normal', 23 | ediff = 1e-5, 24 | kpts = (4,4,1), 25 | gamma= True, 26 | xc = 'PBE', 27 | lcharg = False, 28 | isym = 0, 29 | npar = 4, 30 | nsim = 4, 31 | algo = 'Fast', 32 | lreal= 'Auto', 33 | lplane = True, 34 | encut= 400, 35 | ismear = 0, 36 | sigma = 0.05, 37 | lvtot = True, 38 | lvhar = True, 39 | ispin = 1, 40 | lsol=True, 41 | eb_k=80, 42 | tau=0, 43 | lambda_d_k=3.0, 44 | nelect = n0+dn 45 | ) 46 | p1.set_calculator(calc) 47 | p2 = p1.copy() 48 | #print p1.get_potential_energy() 49 | f1 = p1.get_forces() 50 | ''' 51 | f1direction = vunit(f1) 52 | #displacement = 0.1 53 | displacement = 0.5 54 | rt = p1.get_positions() 55 | rt += displacement*f1direction 56 | with open(r"df_unit.pickle", "wb") as output_file: 57 | pickle.dump(f1direction, output_file) 58 | p2.set_positions(rt) 59 | calc.set(nelect=n0) 60 | p2.set_calculator(calc) 61 | f2 = p2.get_forces() 62 | #Krr_f1 = vdot(f2, f1direction)/displacement 63 | #Keff = vdot(Knr, Knr)/Krr_f1 64 | #print("Krr_f1:", Krr_f1) 65 | #print("Keff:", Keff) 66 | ''' 67 | 68 | Knr = f1/dn 69 | print("Knr:", vmag(Knr)) 70 | with open(r"Knr.pickle", "wb") as output_file: 71 | pickle.dump(Knr, output_file) 72 | 73 | #p1e = eAtoms(p1, epotential = 0.0, ne=436.2, n0=436) 74 | 75 | # for ase.3.15 and later 76 | #dyn = FIRE(p1,maxmove = 0.1, dt = 0.1, dtmax = 0.1, force_consistent = False) 77 | #dyn = MDMin(p1box, dt=0.1, force_consistent = False) 78 | # for ase.3.12 and earlier 79 | #dyn = FIRE(p1box,maxmove = 0.1, dt = 0.1, dtmax = 0.1) 80 | #dyn = MDMin(p1box, dt=0.1) 81 | #dyn.run(fmax=0.05, steps=310) 82 | 83 | #write("CONTCAR_Vot.vasp",p1,format='vasp',vasp5=True, direct=True) 84 | 85 | -------------------------------------------------------------------------------- /scripts/Full_Hessian/dym_parse.sh: -------------------------------------------------------------------------------- 1 | ~/bin/vtstscripts/dymmatrix_no_mass.pl 1 DISPLACECAR ??/OUTCAR 2 | -------------------------------------------------------------------------------- /scripts/Full_Hessian/dymmatrix_no_mass.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | #;-*- Perl -*- 3 | 4 | # This program extracts the dynamical matrix information (the forces vs displacement) 5 | # from the OUTCAR files. 6 | 7 | use FindBin qw($Bin); 8 | use lib "$Bin"; 9 | use Vasp; 10 | 11 | use Math::MatrixReal ; 12 | 13 | $defaultflag = 0; 14 | if(@ARGV == 0) { 15 | $outcarfiles[0] = "OUTCAR"; 16 | $num_directories = 1; 17 | $num_displacecars = 1; 18 | $singleflag = 1; # One DISPLACECAR and OUTCAR 19 | $defaultflag = 1; # default names: DISPLACECAR and OUTCAR 20 | } elsif(@ARGV == 2) { 21 | # Just take in one DISPLACECAR and one OUTCAR 22 | # die "INPUT A DISPLACECAR AND A OUTCAR ! \n" , if @ARGV != 2; 23 | @outcarfiles = $ARGV[1]; 24 | $num_directories = 1; 25 | $num_displacecars = 1; 26 | $singleflag = 1; 27 | } else { 28 | # Older input ! 29 | @ARGV>=3 || die "usage: dymmatrix.pl <...> <...>\n"; 30 | $num_displacecars = @ARGV[0]; 31 | @outcarfiles = @ARGV[$num_displacecars+1..@ARGV-1]; 32 | # print "Number of OUTCAR files: ",scalar(@outcarfiles),"\n"; 33 | $num_directories = @outcarfiles/$num_displacecars; 34 | $singleflag = 0; 35 | } 36 | 37 | # Get the masses for each atom from the OUTCAR 38 | # $pomass = `grep POMASS OUTCAR | grep ZVAL`; 39 | $outfilename=$outcarfiles[0]; 40 | $pomass = `grep POMASS $outfilename | grep ZVAL`; 41 | @pomass = split /\n/ , $pomass; 42 | $ntyp = @pomass; 43 | 44 | # Get the number of each type of atom 45 | # $nions_typ = `grep 'ions per type =' OUTCAR`; 46 | $nions_typ = `grep 'ions per type =' $outfilename`; 47 | $line = $nions_typ; 48 | $line =~ s/^\s+//g; 49 | @line = split /\s+/,$line; 50 | @natoms_typ = @line[4..4+$ntyp]; 51 | for($i=0; $i<$ntyp; $i++) { 52 | $line = $pomass[$i]; 53 | $line =~ s/^\s+//g; 54 | @line = split /\s+/,$line; 55 | @m = split /;/ , $line[2]; 56 | #$typ_mass[$i] = $m[0]; 57 | $typ_mass[$i] = 1; 58 | $natoms_tot += $natoms_typ[$i]; 59 | } 60 | # print masses 61 | print "Typ_Mass: ",@typ_mass; 62 | 63 | $j = 0; 64 | $t = $natoms_typ[0]; 65 | for($i=0; $i<$natoms_tot; $i++) { 66 | if($i >= $t) { 67 | $j++; 68 | $t += $natoms_typ[$j]; 69 | } 70 | $mass[$i] = $typ_mass[$j]; 71 | } 72 | 73 | # print "Mass: ",@mass ; 74 | 75 | # $splitline = 'POSITION.*TOTAL-FORCE \(eV\/Angst\)'; 76 | $splitline = 'HIPREC TOTAL-FORCE \(eV\/A\)'; 77 | 78 | #---------------------------------------------------------------------- 79 | # extract the forces out of the OUTCAR files for this DISPLACECAR 80 | #---------------------------------------------------------------------- 81 | $num_dof = 0; 82 | for ($i=0; $i<@outcarfiles; $i++) { 83 | $outfilename = $outcarfiles[$i]; 84 | # print "OUTCAR: $outfilename\n"; 85 | 86 | $outcar = ""; 87 | open (IN,$outfilename); 88 | while () { $outcar .= $_; } 89 | close (IN); 90 | 91 | @outcar = split(/$splitline/,$outcar); 92 | shift @outcar; 93 | $time_steps = @outcar; 94 | # print "OUTCAR: $outfilename, $time_steps\n"; 95 | for ($j=0; $j<$time_steps; $j++) { 96 | $outcar[$j] =~ s/--+//g; 97 | $outcar[$j] =~ s/total drift.*//ms; 98 | $outcar[$j] =~ s/\n\s+/\n/g; 99 | $outcar[$j] =~ s/^(\s*\n)+//g; 100 | $outcar[$j] =~ s/(\n\s*)*$//g; 101 | } 102 | 103 | @forcelines = split(/\n/,$outcar[$0]); 104 | for ($k=0; $k<@forcelines; $k++) { 105 | @forcecomps = split(/\s+/,$forcelines[$k]); 106 | for ($l=0; $l<3; $l++) { 107 | # $force_ref->[$k][$l] = $forcecomps[$l+3]; 108 | $force_ref->[$k][$l] = $forcecomps[$l]; 109 | } 110 | } 111 | 112 | for ($j=1; $j<$time_steps; $j++) { 113 | @forcelines = split(/\n/,$outcar[$j]); 114 | for ($k=0; $k<@forcelines; $k++) { 115 | @forcecomps = split(/\s+/,$forcelines[$k]); 116 | for ($l=0; $l<3; $l++) { 117 | # $forces->[$num_dof][$k][$l] =- ($forcecomps[$l+3]-$force_ref->[$k][$l]); 118 | $forces->[$num_dof][$k][$l] =- ($forcecomps[$l] - $force_ref->[$k][$l]); 119 | } 120 | } 121 | $num_dof++; 122 | } 123 | } 124 | 125 | #---------------------------------------------------------------------- 126 | # read displacecars, count displacements 127 | #---------------------------------------------------------------------- 128 | $num_displacements = 0; 129 | for ($m=0; $m<$num_displacecars; $m++) { 130 | if($singleflag){ 131 | if($defaultflag){ 132 | $filename = "DISPLACECAR"; 133 | } else { 134 | $filename = $ARGV[0]; 135 | } 136 | } else { 137 | $filename = $ARGV[$m+1]; 138 | } 139 | ($displacecar->[$m],$total_atoms) = read_othercar($filename); 140 | for ($i=0; $i<$total_atoms; $i++) { 141 | for ($j=0; $j<3; $j++) { 142 | if ($displacecar->[$m][$i][$j] != 0) { 143 | $num_displacements++; 144 | } 145 | } 146 | } 147 | } 148 | 149 | #print "Num Displacements: $num_displacements\n"; 150 | #print "Total atoms: $total_atoms\n"; 151 | 152 | #______________________________________________________________________ 153 | # check which forces correspond to displacements, build matrix 154 | #---------------------------------------------------------------------- 155 | $current_displacement = 0; 156 | for ($m=0; $m<$num_displacecars; $m++) { 157 | for ($i=0; $i<$total_atoms; $i++) { 158 | for ($j=0; $j<3; $j++) { 159 | if ($displacecar->[$m][$i][$j] != 0) { 160 | $this_displacement = 0; 161 | for ($n=0; $n<$num_displacecars; $n++) { 162 | for ($k=0; $k<$total_atoms; $k++) { 163 | for ($l=0; $l<3; $l++) { 164 | if ($displacecar->[$n][$k][$l] != 0) { 165 | $matrix->[$current_displacement][$this_displacement] 166 | = $forces->[$current_displacement][$k][$l]/$displacecar->[$m][$i][$j]; 167 | $matrix->[$current_displacement][$this_displacement] /= (sqrt($mass[$k]*$mass[$i])); 168 | $this_displacement++; 169 | } 170 | } 171 | } 172 | } 173 | $current_displacement++; 174 | } 175 | } 176 | } 177 | } 178 | 179 | #print "writing matrix\n"; 180 | #for ($i=0;$i<@{$matrix};$i++) { 181 | # for ($j=0;$j<@{$matrix->[$i]};$j++) { 182 | # printf "%12.8f", $matrix->[$i][$j]." "; 183 | # } 184 | # print "\n"; 185 | #} 186 | 187 | # Write the mass-scaled Hessian matrix 188 | # Temporary fix: 189 | $num_dof = $num_displacements; 190 | 191 | $B = Math::MatrixReal->new($num_dof,$num_dof); 192 | open FRQ , ">freq.mat"; 193 | for($i=0; $i<$num_dof; $i++) { 194 | $B->assign($i+1,$i+1,$matrix->[$i][$i]); 195 | for($j=$i+1; $j<$num_dof; $j++) { 196 | $B->assign($i+1,$j+1,0.5*($matrix->[$i][$j]+$matrix->[$j][$i])); 197 | $B->assign($j+1,$i+1,0.5*($matrix->[$i][$j]+$matrix->[$j][$i])); 198 | } 199 | for ($j=0; $j<@{$matrix->[$i]}; $j++) { 200 | printf FRQ "%16.8f", $B->element($i+1,$j+1)." "; 201 | } 202 | print FRQ "\n"; 203 | } 204 | close FRQ; 205 | 206 | # Solve the eigensystem 207 | ($l, $V) = $B->sym_diagonalize(); 208 | 209 | # Sort the eigenvalues. Use selection sort. $t will be the order we want to print out 210 | for($i=0; $i<$num_dof; $i++) { 211 | $w[$i] = $l->element($i+1,1); 212 | $t[$i] = $i; 213 | } 214 | for($i=0 ; $i<$num_dof ; $i++) { 215 | $iptr = $i ; 216 | for($j=$i+1; $j<$num_dof; $j++) { 217 | if($w[$j] < $w[$iptr]){ $iptr = $j; } 218 | } 219 | if($i != $iptr) { 220 | $tmp = $w[$i]; 221 | $w[$i] = $w[$iptr]; 222 | $w[$iptr] = $tmp; 223 | $tmp = $t[$i]; 224 | $t[$i] = $t[$iptr]; 225 | $t[$iptr] = $tmp; 226 | # Sort the eigenvectors as well 227 | $V->swap_col($i+1,$iptr+1); 228 | } 229 | } 230 | 231 | # Write out the eigenvalues, frequencies in cm^{-1} to the STDOUT and 232 | # omega^{2} to 'eigs.dat' 233 | open EIG , ">eigs.dat"; 234 | open FREQ , ">freq.dat"; 235 | print "\n"; 236 | for($i=0; $i<$num_dof; $i++) { 237 | if($w[$i] > 0) { 238 | printf "%12.6f cm^{-1} ... 0 \n",sqrt($w[$i]) * 521.47; 239 | printf FREQ "%12.6f cm^{-1} ... 0 \n",sqrt($w[$i]) * 521.47; 240 | }else { 241 | printf "%12.6f cm^{-1} ... 1 \n",sqrt(abs($w[$i])) * 521.47; 242 | printf FREQ "%12.6f cm^{-1} ... 1 \n",sqrt(abs($w[$i])) * 521.47; 243 | } 244 | printf EIG "%25.15g \n",$w[$i]; 245 | } 246 | print "\n"; 247 | close EIG; 248 | close FREQ; 249 | 250 | # Write out the modes 251 | open MDE , ">modes.dat"; 252 | for($i=0; $i<$num_dof; $i++) { 253 | for ($j=0; $j<@{$matrix->[$i]}; $j++) { 254 | printf MDE "%16.8f", $V->element($i+1,$j+1)." "; 255 | } 256 | print MDE "\n"; 257 | } 258 | close MDE; 259 | 260 | -------------------------------------------------------------------------------- /scripts/center_slab.py: -------------------------------------------------------------------------------- 1 | # how to quickly set up structure to be compatible with approach: 2 | from ase import io, atoms 3 | 4 | atoms = io.read("POSCAR.vasp") 5 | constraints = atoms.constraints 6 | for i, spos in enumerate(atoms.get_scaled_positions()): 7 | if spos[-1] > 0.7 : 8 | atoms[i].position -= atoms.get_cell()[-1] 9 | 10 | atoms.center(axis=2) 11 | atoms.set_constraint(constraints) 12 | io.write('POSCAR.vasp_centered',atoms,direct=1) 13 | -------------------------------------------------------------------------------- /scripts/initial.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | ''' 4 | Neb optimization example 5 | ''' 6 | 7 | from ase import io 8 | import numpy, copy, os 9 | 10 | def sPBC(vdir): 11 | return (vdir % 1.0 + 1.5) % 1.0 - 0.5 12 | 13 | numImages = 7 14 | i = 0 15 | j = 6 16 | file1 = str(i)+'.CON' 17 | file2 = str(j)+'.CON' 18 | p1 = io.read(file1,format='vasp') 19 | p2 = io.read(file2,format='vasp') 20 | 21 | dRB = (p2.get_cell() - p1.get_cell()) / (numImages - 1.0) 22 | ibox = numpy.linalg.inv(p1.get_cell()) 23 | vdir1 = numpy.dot(p1.get_positions(),ibox) 24 | ibox = numpy.linalg.inv(p2.get_cell()) 25 | vdir2 = numpy.dot(p2.get_positions(),ibox) 26 | dR = sPBC(vdir2 - vdir1) / (numImages - 1.0) 27 | 28 | for k in range(1,numImages-1): 29 | pm = copy.deepcopy(p1) 30 | box = pm.get_cell() 31 | box += dRB*k 32 | vdir = vdir1 + dR*k 33 | r = numpy.dot(vdir,box) 34 | pm.set_cell(box) 35 | pm.set_positions(r) 36 | f3 = str(k) + '.CON' 37 | io.write(f3,pm,format='vasp') 38 | 39 | for k in range(numImages): 40 | fdname = '0'+str(k) 41 | if not os.path.exists(fdname): os.mkdir(fdname) 42 | os.system('cat '+str(k)+'.CON >>movie.con') 43 | os.system('cp '+str(k)+'.CON '+fdname+'/POSCAR') 44 | -------------------------------------------------------------------------------- /scripts/move2o.py: -------------------------------------------------------------------------------- 1 | from ase.io import read, write 2 | import numpy as np 3 | from numpy import linalg 4 | from ase.constraints import FixAtoms 5 | 6 | file = "POS0.vasp" 7 | p = read(file, format= 'vasp') 8 | r = p.get_positions() 9 | cell = p.get_cell() 10 | r0 = [0, 0, 0.5] 11 | r0 = np.dot(r0, cell) 12 | dr = r0 13 | for rtmp in r: 14 | rtmp += dr 15 | p.set_positions(r) 16 | #constraint = FixAtoms(indices=[atom.index for atom in p if atom.position[2] < r0]) 17 | #p.set_constraint(constraint) 18 | write('POS1.vasp', p, format='vasp', direct = True, vasp5=True) 19 | 20 | 21 | -------------------------------------------------------------------------------- /scripts/run_vasp.py: -------------------------------------------------------------------------------- 1 | # set this script and the POTCAR files in your path 2 | # see https://wiki.fysik.dtu.dk/ase/ase/calculators/vasp.html 3 | import os 4 | exitcode = os.system('srun -c 1 path_to_vaspsol') 5 | --------------------------------------------------------------------------------