dftpy 2.0.2__tar.gz → 2.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dftpy-2.0.2/src/dftpy.egg-info → dftpy-2.0.3}/PKG-INFO +1 -1
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_ase_md.py +0 -2
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_ase_opt.py +0 -2
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_ase_pmg_io.py +0 -1
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/__init__.py +2 -2
- dftpy-2.0.3/src/dftpy/api/api4ase.py +58 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/constants.py +1 -4
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/field.py +6 -1
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/grid.py +2 -2
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mpi/mp_mpi4py.py +1 -1
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mpi/mpi.py +5 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/real_time_runner.py +1 -1
- {dftpy-2.0.2 → dftpy-2.0.3/src/dftpy.egg-info}/PKG-INFO +1 -1
- dftpy-2.0.2/src/dftpy/api/api4ase.py +0 -80
- {dftpy-2.0.2 → dftpy-2.0.3}/.gitattributes +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/.github/workflows/publish.yml +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/.gitignore +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/.gitlab-ci.yml +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/LICENSE.txt +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/MANIFEST.in +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/README.md +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/Makefile +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/gen_doc.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/make.bat +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/conf.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/contact.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/faq.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/index.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/install.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/ofdft.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/releases.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/static/custom.css +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/static/dftpy.ico +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/static/dftpy.jpg +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/static/dftpy.png +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/static/dftpy_new_bkg.png +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/templates/breadcrumbs.html +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/templates/footer.html +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/jupyter/density.png +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/jupyter/density_optimization.ipynb +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/jupyter/ions.png +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/jupyter/movie.gif +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/jupyter/td-ofdft-tutorial.ipynb +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/ofdft/ase_traj.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/ofdft/md.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/ofdft/nvt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/ofdft/optimize.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/ofdft/relax.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/ofdft/relax.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/tddft/optimize.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/tddft/propagate.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/tddft/propagate.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/doc/source/tutorials/tutorials.rst +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/Al_fde_rho.pp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/Al_lda.oe01.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/As_lda.oe04.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/GaAs.cif +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/GaAs.vasp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/GaAs.xyz +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/GaAs_random.vasp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/GaAs_random.xsf +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/Ga_lda.oe04.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/Mg8.vasp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/Mg_OEPP_PZ.UPF +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/Mg_cluster.vasp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/Mg_lda.oe01.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/al.gga.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/al.lda.lps +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/al.lda.psp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/al.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/al.lda.upf +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/al_random.in +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/al_random.xsf +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/as.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/ase_opt.traj +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/cd.vasp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/fcc.vasp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/ga.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/hd.vasp +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/in.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/initial_atoms_md.traj +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/li.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/md.traj +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/mg.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/p.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/sb.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/si.gga.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/si.lda.recpot +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/ti.xsf +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/DATA/ti_pbe_v1.4.uspp.F.UPF +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/md/test_ase_npt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/md/test_ase_nvt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/md/test_ase_nvt_nh.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/md/traj2xyz.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/notebooks/density_optimization.ipynb +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/notebooks/td-ofdft-tutorial.ipynb +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/ofdft/config.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/ofdft/isolate.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/ofdft/optim.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/ofdft/optim.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/ofdft/optim_pbe.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/ofdft/simple.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/relax/test_ase_opt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/td-ofdft/casida.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/td-ofdft/optimize.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/td-ofdft/propagate-restart.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/td-ofdft/propagate.ini +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/common.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_density_opt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_ewald.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_field.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_functional.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_functional_LibXC.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_grid.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_linear_solver.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_mpi_grid.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_pme.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_propagator.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_read_pp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_rvv10.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_snpy.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/examples/test/test_xc.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/requirements.txt +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/convertPP.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/convert_den.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/convert_td.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/dftpy +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/invert +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/opt_layer_pseudo.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/quadrupole.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/rtc_runner +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/scripts/test_layer_pseudo.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/setup.cfg +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/setup.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/__main__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/api/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/api/dftd4.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/config/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/config/config.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/config/config_entry.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/config/configentries.json +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/cui/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/cui/main.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/density/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/density/density.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/ewald.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/fft.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/ase_io.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/chg.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/cube.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/den.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/io.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/npy.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/pmg_io.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/qepp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/snpy.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/vasp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/xsf.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/formats/xyz.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/abstract_functional.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/external_potential.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/functional_output.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/hartree.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/fp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/gga.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/hc.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/kernel.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/lkt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/lwt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/mgp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/sm.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/tf.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/vw.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/kedf/wt.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/nonadiabatic/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/nonadiabatic/jp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/nonadiabatic/wcdhc.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/abstract_pseudo.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/layer_pseudo.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/psp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/recpot.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/upf.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/usp.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/pseudo/xml.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/semilocal_xc.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/total_functional.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/xc/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/xc/rvv10.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/xc/semilocal_xc.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/functional/xc/xc.json +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/interface.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/invert/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/invert/analysis.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/inverter.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/ions.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/linear_solver.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/math_utils.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mixer/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mixer/linear.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mixer/mixer.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mixer/pulay.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mpi/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mpi/mp_serial.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/mpi/utils.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/optimization/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/optimization/optimization.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/optimization/scf.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/optimize.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/properties/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/properties/potential.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/casida.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/hamiltonian.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/interface.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/operator.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/predictor_corrector.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/propagator/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/propagator/abstract_propagator.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/propagator/crank_nicholson.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/propagator/taylor.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/td/utils.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/time_data.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/utils/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/utils/utils.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/visualize/__init__.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/visualize/ase_viewer.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/visualize/ipv_viewer.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/visualize/jupyter.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/visualize/mpl_viewer.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy/visualize/vesta_viewer.py +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy.egg-info/SOURCES.txt +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy.egg-info/dependency_links.txt +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy.egg-info/requires.txt +0 -0
- {dftpy-2.0.2 → dftpy-2.0.3}/src/dftpy.egg-info/top_level.txt +0 -0
|
@@ -5,12 +5,10 @@ import numpy as np
|
|
|
5
5
|
|
|
6
6
|
from dftpy.config import DefaultOption, OptionFormat
|
|
7
7
|
from dftpy.api.api4ase import DFTpyCalculator
|
|
8
|
-
import pytest
|
|
9
8
|
|
|
10
9
|
|
|
11
10
|
class Test(unittest.TestCase):
|
|
12
11
|
def test_md(self):
|
|
13
|
-
pytest.importorskip("ase")
|
|
14
12
|
from ase.md.langevin import Langevin
|
|
15
13
|
from ase.md.verlet import VelocityVerlet
|
|
16
14
|
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
import os
|
|
3
3
|
import unittest
|
|
4
4
|
import numpy as np
|
|
5
|
-
import pytest
|
|
6
5
|
|
|
7
6
|
from dftpy.config import DefaultOption, OptionFormat
|
|
8
7
|
from dftpy.api.api4ase import DFTpyCalculator
|
|
9
8
|
|
|
10
9
|
class Test(unittest.TestCase):
|
|
11
10
|
def test_opt(self):
|
|
12
|
-
pytest.importorskip("ase")
|
|
13
11
|
from ase.optimize import BFGS, LBFGS, FIRE
|
|
14
12
|
from ase.optimize.sciopt import SciPyFminBFGS, SciPyFminCG
|
|
15
13
|
from ase.constraints import StrainFilter, UnitCellFilter
|
|
@@ -8,7 +8,6 @@ import pytest
|
|
|
8
8
|
|
|
9
9
|
class Test(unittest.TestCase):
|
|
10
10
|
def test_io_ase(self):
|
|
11
|
-
pytest.importorskip("ase")
|
|
12
11
|
dftpy_data_path = os.environ.get('DFTPY_DATA_PATH')
|
|
13
12
|
a1 = dftpy_io.read(dftpy_data_path + '/fcc.vasp', driver='ase')
|
|
14
13
|
a2 = dftpy_io.read(dftpy_data_path + '/fcc.vasp')
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from dftpy.constants import ENERGY_CONV, FORCE_CONV, STRESS_CONV
|
|
3
|
+
from dftpy.interface import ConfigParser, OptimizeDensityConf
|
|
4
|
+
from dftpy.ions import Ions
|
|
5
|
+
from ase.calculators.calculator import Calculator, all_changes
|
|
6
|
+
|
|
7
|
+
class DFTpyCalculator(Calculator):
|
|
8
|
+
"""DFTpy calculator for ase"""
|
|
9
|
+
implemented_properties = ['energy', 'forces', 'stress']
|
|
10
|
+
|
|
11
|
+
def __init__(self, config = None, mp = None, **kwargs):
|
|
12
|
+
Calculator.__init__(self, **kwargs)
|
|
13
|
+
self.config = config
|
|
14
|
+
self.mp = mp
|
|
15
|
+
self.dftpy_results = {}
|
|
16
|
+
|
|
17
|
+
def calculate(self, atoms=None, properties=['energy'], system_changes=all_changes):
|
|
18
|
+
Calculator.calculate(self, atoms, properties, system_changes)
|
|
19
|
+
|
|
20
|
+
if len(system_changes) > 0 :
|
|
21
|
+
self.run(system_changes)
|
|
22
|
+
|
|
23
|
+
energy = self.dftpy_results["energypotential"]["TOTAL"].energy * ENERGY_CONV["Hartree"]["eV"]
|
|
24
|
+
self.energy = self.dftpy_results["density"].grid.mp.asum(energy)
|
|
25
|
+
self.results['energy'] = self.energy
|
|
26
|
+
if 'forces' in properties:
|
|
27
|
+
self.forces = self.dftpy_results["forces"]["TOTAL"] * FORCE_CONV["Ha/Bohr"]["eV/A"]
|
|
28
|
+
self.results['forces'] = self.forces
|
|
29
|
+
|
|
30
|
+
if 'stress' in properties:
|
|
31
|
+
stress_voigt = np.zeros(6)
|
|
32
|
+
if "TOTAL" in self.dftpy_results["stress"]:
|
|
33
|
+
for i in range(3):
|
|
34
|
+
stress_voigt[i] = self.dftpy_results["stress"]["TOTAL"][i, i]
|
|
35
|
+
stress_voigt[3] = self.dftpy_results["stress"]["TOTAL"][1, 2] # yz
|
|
36
|
+
stress_voigt[4] = self.dftpy_results["stress"]["TOTAL"][0, 2] # xz
|
|
37
|
+
stress_voigt[5] = self.dftpy_results["stress"]["TOTAL"][0, 1] # xy
|
|
38
|
+
else:
|
|
39
|
+
self.mp.sprint("!WARN : NOT calculate the stress, so return zeros")
|
|
40
|
+
self.stress = stress_voigt * STRESS_CONV["Ha/Bohr3"]["eV/A3"]
|
|
41
|
+
self.results['stress'] = self.stress
|
|
42
|
+
|
|
43
|
+
def run(self, system_changes=all_changes):
|
|
44
|
+
pseudo = self.dftpy_results.get('pseudo', None)
|
|
45
|
+
rho = self.dftpy_results.get('density', None)
|
|
46
|
+
|
|
47
|
+
grid = None
|
|
48
|
+
if 'cell' not in system_changes:
|
|
49
|
+
if rho is not None: grid = rho.grid
|
|
50
|
+
if not self.config["MATH"]["reuse"]:
|
|
51
|
+
rho = None
|
|
52
|
+
|
|
53
|
+
ions = Ions.from_ase(self.atoms)
|
|
54
|
+
|
|
55
|
+
config, others = ConfigParser(self.config, ions=ions, rhoini=rho, pseudo=pseudo, grid=grid, mp = self.mp)
|
|
56
|
+
self.dftpy_results = OptimizeDensityConf(config, **others)
|
|
57
|
+
if self.mp is None :
|
|
58
|
+
self.mp = self.dftpy_results["density"].grid.mp
|
|
@@ -86,10 +86,7 @@ ZERO = 1E-30
|
|
|
86
86
|
|
|
87
87
|
environ = {} # You can change it anytime you want
|
|
88
88
|
environ['STDOUT'] = sys.stdout # file descriptor of sprint
|
|
89
|
-
|
|
90
|
-
environ['LOGLEVEL'] = int(os.environ.get('DFTPY_LOGLEVEL', 2)) # The level of sprint
|
|
91
|
-
except Exception :
|
|
92
|
-
environ['LOGLEVEL'] = 2 # The level of sprint
|
|
89
|
+
environ['LOGLEVEL'] = int(os.environ.get('DFTPY_LOGLEVEL', 2)) # The level of sprint
|
|
93
90
|
"""
|
|
94
91
|
0 : all
|
|
95
92
|
1 : debug
|
|
@@ -62,7 +62,12 @@ class BaseField(np.ndarray):
|
|
|
62
62
|
input_values = np.asarray(data)
|
|
63
63
|
input_values = np.reshape(input_values, nr, order=order)
|
|
64
64
|
|
|
65
|
-
obj = np.asarray(input_values)
|
|
65
|
+
obj = np.asarray(input_values)
|
|
66
|
+
if order == 'C' and not obj.flags['C_CONTIGUOUS']:
|
|
67
|
+
obj = np.ascontiguousarray(obj)
|
|
68
|
+
elif order == 'F' and not obj.flags['F_CONTIGUOUS']:
|
|
69
|
+
obj = np.asfortranarray(obj)
|
|
70
|
+
obj = obj.view(cls)
|
|
66
71
|
# add the new attribute to the created instance
|
|
67
72
|
obj.grid = grid
|
|
68
73
|
obj.span = (grid.nr > 1).sum()
|
|
@@ -24,9 +24,9 @@ class BaseGrid:
|
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
26
|
def __init__(self, lattice, nr = None, origin=np.array([0.0, 0.0, 0.0]), full=True, direct=True,
|
|
27
|
-
cplx=False, mp=None, ecut = None, **kwargs):
|
|
27
|
+
cplx=False, mp=None, ecut = None, comm = None, **kwargs):
|
|
28
28
|
if mp is None :
|
|
29
|
-
mp = MP()
|
|
29
|
+
mp = MP(comm)
|
|
30
30
|
self._origin = np.asarray(origin)
|
|
31
31
|
if not isinstance(lattice, Cell):
|
|
32
32
|
cell=Cell(lattice)
|
|
@@ -290,6 +290,11 @@ class MP :
|
|
|
290
290
|
s = self._sum_1(a)
|
|
291
291
|
return s
|
|
292
292
|
|
|
293
|
+
def sprint(self, *args, comm = None, **kwargs):
|
|
294
|
+
from .utils import sprint
|
|
295
|
+
if comm is None : comm = self.comm
|
|
296
|
+
sprint(*args, comm = comm, **kwargs)
|
|
297
|
+
|
|
293
298
|
class PMI :
|
|
294
299
|
"""
|
|
295
300
|
Detect mpi
|
|
@@ -135,7 +135,7 @@ class RealTimeRunner(Dynamics):
|
|
|
135
135
|
if self.correction:
|
|
136
136
|
correct_potential = self.correct_functionals(self.rho, calcType=['V'], current=self.j).potential
|
|
137
137
|
self.correct_propagator.hamiltonian.v = correct_potential
|
|
138
|
-
self.predictor_corrector.psi_pred = self.correct_propagator(self.predictor_corrector.psi_pred)
|
|
138
|
+
self.predictor_corrector.psi_pred, info = self.correct_propagator(self.predictor_corrector.psi_pred)
|
|
139
139
|
self.predictor_corrector.rho_pred = calc_rho(self.predictor_corrector.psi_pred)
|
|
140
140
|
self.predictor_corrector.j_pred = calc_j(self.predictor_corrector.psi_pred)
|
|
141
141
|
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
from dftpy.constants import LEN_CONV, ENERGY_CONV, FORCE_CONV, STRESS_CONV
|
|
3
|
-
from dftpy.interface import ConfigParser, OptimizeDensityConf
|
|
4
|
-
from dftpy.ions import Ions
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class DFTpyCalculator(object):
|
|
8
|
-
"""DFTpy calculator for ase"""
|
|
9
|
-
|
|
10
|
-
def __init__(self, config=None, mp = None, **kwargs):
|
|
11
|
-
self.config = config
|
|
12
|
-
self.results = None
|
|
13
|
-
self.atoms = {}
|
|
14
|
-
self.mp = mp
|
|
15
|
-
|
|
16
|
-
def check_restart(self, atoms=None):
|
|
17
|
-
if (
|
|
18
|
-
self.atoms
|
|
19
|
-
and np.allclose(self.atoms["lattice"], atoms.cell)
|
|
20
|
-
and np.allclose(self.atoms["positions"], atoms.positions)
|
|
21
|
-
and self.results is not None
|
|
22
|
-
):
|
|
23
|
-
return False
|
|
24
|
-
else:
|
|
25
|
-
return True
|
|
26
|
-
|
|
27
|
-
def get_potential_energy(self, atoms=None, **kwargs):
|
|
28
|
-
if self.check_restart(atoms):
|
|
29
|
-
lattice = atoms.cell
|
|
30
|
-
pos = atoms.positions
|
|
31
|
-
if self.results is not None and len(self.atoms) > 0 :
|
|
32
|
-
pseudo = self.results["pseudo"]
|
|
33
|
-
if np.allclose(self.atoms["lattice"], atoms.cell[:]):
|
|
34
|
-
grid = self.results["density"].grid
|
|
35
|
-
else :
|
|
36
|
-
grid = None
|
|
37
|
-
else :
|
|
38
|
-
pseudo = None
|
|
39
|
-
grid = None
|
|
40
|
-
|
|
41
|
-
# Save the information of structure
|
|
42
|
-
self.atoms["lattice"] = lattice.copy()
|
|
43
|
-
self.atoms["positions"] = pos.copy()
|
|
44
|
-
#
|
|
45
|
-
ions = Ions.from_ase(atoms)
|
|
46
|
-
#
|
|
47
|
-
if self.results is not None and self.config["MATH"]["reuse"]:
|
|
48
|
-
config, others = ConfigParser(self.config, ions=ions, rhoini=self.results["density"], pseudo=pseudo, grid=grid, mp = self.mp)
|
|
49
|
-
else:
|
|
50
|
-
config, others = ConfigParser(self.config, ions=ions, pseudo=pseudo, grid=grid, mp = self.mp)
|
|
51
|
-
results = OptimizeDensityConf(config, **others)
|
|
52
|
-
self.results = results
|
|
53
|
-
energy = self.results["energypotential"]["TOTAL"].energy * ENERGY_CONV["Hartree"]["eV"]
|
|
54
|
-
energy = self.results["density"].grid.mp.asum(energy)
|
|
55
|
-
return energy
|
|
56
|
-
|
|
57
|
-
def get_forces(self, atoms):
|
|
58
|
-
if self.check_restart(atoms):
|
|
59
|
-
# if 'Force' not in self.config['JOB']['calctype'] :
|
|
60
|
-
# self.config['JOB']['calctype'] += ' Force'
|
|
61
|
-
self.get_potential_energy(atoms)
|
|
62
|
-
return self.results["forces"]["TOTAL"] * FORCE_CONV["Ha/Bohr"]["eV/A"]
|
|
63
|
-
|
|
64
|
-
def get_stress(self, atoms):
|
|
65
|
-
if self.check_restart(atoms):
|
|
66
|
-
# if 'Stress' not in self.config['JOB']['calctype'] :
|
|
67
|
-
# self.config['JOB']['calctype'] += ' Stress'
|
|
68
|
-
self.get_potential_energy(atoms)
|
|
69
|
-
# return self.results['stress']['TOTAL'] * STRESS_CONV['Ha/Bohr3']['eV/A3']
|
|
70
|
-
stress_voigt = np.zeros(6)
|
|
71
|
-
if "TOTAL" not in self.results["stress"]:
|
|
72
|
-
# print("!WARN : NOT calculate the stress, so return zeros")
|
|
73
|
-
return stress_voigt
|
|
74
|
-
for i in range(3):
|
|
75
|
-
stress_voigt[i] = self.results["stress"]["TOTAL"][i, i]
|
|
76
|
-
stress_voigt[3] = self.results["stress"]["TOTAL"][1, 2] # yz
|
|
77
|
-
stress_voigt[4] = self.results["stress"]["TOTAL"][0, 2] # xz
|
|
78
|
-
stress_voigt[5] = self.results["stress"]["TOTAL"][0, 1] # xy
|
|
79
|
-
# stress_voigt *= -1.0
|
|
80
|
-
return stress_voigt * STRESS_CONV["Ha/Bohr3"]["eV/A3"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|