atoms=atoms, kpts_scf=kpts, reference_level='vbm', nsemicore=0, weight=1., distribution={ 'type': 'Boltzmann', 'kBT': 1.5 }) # Setting up and running the actual optimizer # (the keyword arguments are known from hotcent.slako.SlaterKosterTable) confopt = ConfinementOptimizer(atom, N=500, rmin=0.4, dr=0.02, stride=4, superposition='density', xc=xc) # The initial confinement parameters are the same as in Tutorial #1. # The additional 'adjustable' keyword argument serves to indicate # which parameters are allowed to vary. Here we keep the quadratic # form (s=2) and treat the confinement radii r0 as variable. rcov = covalent_radii[atomic_numbers[element]] / Bohr if len(valence) == 1: initial_guess = { element + '_' + valence[0]: PowerConfinement(r0=2 * rcov, s=2, adjustable=['r0']), element + '_n':
atom.info['hubbardvalues'] = {'s': U_p} atom.info['occupations'] = {'2s': 2, '2p': occ_2p} atoms.append(atom) sk_kwargs = { 'N': { 'default': 380, 'O-O': 420 }, 'rmin': 0.4, 'dr': 0.02, 'stride': 5, 'superposition': 'density', 'xc': 'LDA' } confopt = ConfinementOptimizer(*atoms, **sk_kwargs) initial_guess = {} for element in elements: rcov = covalent_radii[atomic_numbers[element]] / Bohr initial_guess['%s_2s,%s_2p' % (element, element)] = \ PowerConfinement(r0=2 * rcov, s=2, adjustable=['r0']) initial_guess['%s_n' % element] = PowerConfinement(r0=3 * rcov, s=2, adjustable=['r0']) vconf = confopt.run(dpbs.get_residual, initial_guess=initial_guess, tol=1e-2, method='COBYLA', options={