예제 #1
0
 def shiftxc(calc, xc, energy_only=False):
     if isinstance(xc, str):
         xc = XCFunctional(xc, calc.wfs.nspins)
     elif isinstance(xc, dict):
         xc = XCFunctional(xc.copy(), calc.wfs.nspins)
     xc.set_non_local_things(calc.density, calc.hamiltonian, calc.wfs,
                             calc.atoms, energy_only=energy_only)
     calc.hamiltonian.xc.set_functional(xc)
     calc.hamiltonian.xc.set_positions(
         calc.atoms.get_scaled_positions() % 1.0)
     for setup in calc.wfs.setups:
         setup.xc_correction.xc.set_functional(xc)
         if xc.mgga:
             setup.xc_correction.initialize_kinetic(setup.data)