From fcdf2ed8af4994ad9320bbb04054fbf3b5cdc96f Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Sun, 19 Nov 2023 19:00:50 +0900 Subject: [PATCH 1/6] Revert pre-commit black version --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c2d43d64..57a90a37 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,7 @@ repos: - "--ignore=E203,W503" - repo: https://github.com/psf/black - rev: 23.11.0 + rev: 23.10.1 hooks: - id: black args: From 3d50a56642ba399eac422fb2cffd8deb96fd4bb4 Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Sun, 19 Nov 2023 19:02:48 +0900 Subject: [PATCH 2/6] Fix unit conversion to calculate force constants --- example/Si-QE/disp_fc3.yaml | 330 ------------------------- phono3py/api_phono3py.py | 7 +- phono3py/cui/create_force_constants.py | 90 ++++++- phono3py/cui/load.py | 149 ++++++----- phono3py/cui/phono3py_argparse.py | 2 +- phono3py/interface/phono3py_yaml.py | 6 +- phono3py/phonon3/fc3.py | 7 +- 7 files changed, 157 insertions(+), 434 deletions(-) delete mode 100644 example/Si-QE/disp_fc3.yaml diff --git a/example/Si-QE/disp_fc3.yaml b/example/Si-QE/disp_fc3.yaml deleted file mode 100644 index 21814c41..00000000 --- a/example/Si-QE/disp_fc3.yaml +++ /dev/null @@ -1,330 +0,0 @@ -natom: 64 -num_first_displacements: 1 -num_second_displacements: 110 -num_displacements_created: 111 -first_atoms: -- number: 1 - displacement: - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00001 - second_atoms: - - number: 1 - distance: 0.000000 - displacements: - - [ 0.0424264068711929, 0.0424264068711929, 0.0000000000000000 ] # 00002 - - [ -0.0424264068711929, -0.0424264068711929, 0.0000000000000000 ] # 00003 - - number: 2 - distance: 10.329553 - displacements: - - [ 0.0424264068711929, 0.0424264068711929, 0.0000000000000000 ] # 00004 - - [ -0.0424264068711929, -0.0424264068711929, 0.0000000000000000 ] # 00005 - - number: 3 - distance: 10.329553 - displacements: - - [ 0.0424264068711929, 0.0424264068711929, 0.0000000000000000 ] # 00006 - - [ -0.0424264068711929, -0.0424264068711929, 0.0000000000000000 ] # 00007 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00008 - - number: 4 - distance: 14.608194 - displacements: - - [ 0.0424264068711929, 0.0424264068711929, 0.0000000000000000 ] # 00009 - - [ -0.0424264068711929, -0.0424264068711929, 0.0000000000000000 ] # 00010 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00011 - - number: 7 - distance: 14.608194 - displacements: - - [ 0.0424264068711929, 0.0424264068711929, 0.0000000000000000 ] # 00012 - - [ -0.0424264068711929, -0.0424264068711929, 0.0000000000000000 ] # 00013 - - number: 8 - distance: 17.891310 - displacements: - - [ 0.0424264068711929, 0.0424264068711929, 0.0000000000000000 ] # 00014 - - [ -0.0424264068711929, -0.0424264068711929, 0.0000000000000000 ] # 00015 - - number: 9 - distance: 7.304097 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00016 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00017 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00018 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00019 - - number: 10 - distance: 12.651067 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00020 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00021 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00022 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00023 - - number: 11 - distance: 7.304097 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00024 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00025 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00026 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00027 - - number: 12 - distance: 12.651067 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00028 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00029 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00030 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00031 - - number: 17 - distance: 7.304097 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00032 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00033 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00034 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00035 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00036 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00037 - - number: 18 - distance: 7.304097 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00038 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00039 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00040 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00041 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00042 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00043 - - number: 19 - distance: 12.651067 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00044 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00045 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00046 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00047 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00048 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00049 - - number: 20 - distance: 12.651067 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00050 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00051 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00052 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00053 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00054 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00055 - - number: 33 - distance: 13.418483 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00056 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00057 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00058 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00059 - - number: 34 - distance: 11.256369 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00060 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00061 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00062 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00063 - - number: 35 - distance: 11.256369 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00064 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00065 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00066 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00067 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00068 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00069 - - number: 36 - distance: 8.564813 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00070 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00071 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00072 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00073 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00074 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00075 - - number: 39 - distance: 8.564813 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00076 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00077 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00078 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00079 - - number: 40 - distance: 4.472828 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00080 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00081 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00082 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00083 - - number: 49 - distance: 8.564813 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00084 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00085 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00086 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00087 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00088 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00089 - - number: 50 - distance: 11.256369 - displacements: - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00090 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00091 - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00092 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00093 - - [ 0.0000000000000000, 0.0000000000000000, 0.0600000000000000 ] # 00094 - - [ 0.0000000000000000, 0.0000000000000000, -0.0600000000000000 ] # 00095 - - number: 51 - distance: 4.472828 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00096 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00097 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00098 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00099 - - number: 52 - distance: 8.564813 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00100 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00101 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00102 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00103 - - number: 53 - distance: 11.256369 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00104 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00105 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00106 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00107 - - number: 54 - distance: 13.418483 - displacements: - - [ 0.0000000000000000, 0.0600000000000000, 0.0000000000000000 ] # 00108 - - [ 0.0000000000000000, -0.0600000000000000, 0.0000000000000000 ] # 00109 - - [ 0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00110 - - [ -0.0600000000000000, 0.0000000000000000, 0.0000000000000000 ] # 00111 -lattice: -- [ 20.659105641913271, 0.000000000000000, 0.000000000000000 ] -- [ 0.000000000000000, 20.659105641913271, 0.000000000000000 ] -- [ 0.000000000000000, 0.000000000000000, 20.659105641913271 ] -atoms: -- symbol: Si # 1 - position: [ 0.43750000000000, 0.43750000000000, 0.43750000000000 ] -- symbol: Si # 2 - position: [ 0.93750000000000, 0.43750000000000, 0.43750000000000 ] -- symbol: Si # 3 - position: [ 0.43750000000000, 0.93750000000000, 0.43750000000000 ] -- symbol: Si # 4 - position: [ 0.93750000000000, 0.93750000000000, 0.43750000000000 ] -- symbol: Si # 5 - position: [ 0.43750000000000, 0.43750000000000, 0.93750000000000 ] -- symbol: Si # 6 - position: [ 0.93750000000000, 0.43750000000000, 0.93750000000000 ] -- symbol: Si # 7 - position: [ 0.43750000000000, 0.93750000000000, 0.93750000000000 ] -- symbol: Si # 8 - position: [ 0.93750000000000, 0.93750000000000, 0.93750000000000 ] -- symbol: Si # 9 - position: [ 0.43750000000000, 0.18750000000000, 0.18750000000000 ] -- symbol: Si # 10 - position: [ 0.93750000000000, 0.18750000000000, 0.18750000000000 ] -- symbol: Si # 11 - position: [ 0.43750000000000, 0.68750000000000, 0.18750000000000 ] -- symbol: Si # 12 - position: [ 0.93750000000000, 0.68750000000000, 0.18750000000000 ] -- symbol: Si # 13 - position: [ 0.43750000000000, 0.18750000000000, 0.68750000000000 ] -- symbol: Si # 14 - position: [ 0.93750000000000, 0.18750000000000, 0.68750000000000 ] -- symbol: Si # 15 - position: [ 0.43750000000000, 0.68750000000000, 0.68750000000000 ] -- symbol: Si # 16 - position: [ 0.93750000000000, 0.68750000000000, 0.68750000000000 ] -- symbol: Si # 17 - position: [ 0.18750000000000, 0.43750000000000, 0.18750000000000 ] -- symbol: Si # 18 - position: [ 0.68750000000000, 0.43750000000000, 0.18750000000000 ] -- symbol: Si # 19 - position: [ 0.18750000000000, 0.93750000000000, 0.18750000000000 ] -- symbol: Si # 20 - position: [ 0.68750000000000, 0.93750000000000, 0.18750000000000 ] -- symbol: Si # 21 - position: [ 0.18750000000000, 0.43750000000000, 0.68750000000000 ] -- symbol: Si # 22 - position: [ 0.68750000000000, 0.43750000000000, 0.68750000000000 ] -- symbol: Si # 23 - position: [ 0.18750000000000, 0.93750000000000, 0.68750000000000 ] -- symbol: Si # 24 - position: [ 0.68750000000000, 0.93750000000000, 0.68750000000000 ] -- symbol: Si # 25 - position: [ 0.18750000000000, 0.18750000000000, 0.43750000000000 ] -- symbol: Si # 26 - position: [ 0.68750000000000, 0.18750000000000, 0.43750000000000 ] -- symbol: Si # 27 - position: [ 0.18750000000000, 0.68750000000000, 0.43750000000000 ] -- symbol: Si # 28 - position: [ 0.68750000000000, 0.68750000000000, 0.43750000000000 ] -- symbol: Si # 29 - position: [ 0.18750000000000, 0.18750000000000, 0.93750000000000 ] -- symbol: Si # 30 - position: [ 0.68750000000000, 0.18750000000000, 0.93750000000000 ] -- symbol: Si # 31 - position: [ 0.18750000000000, 0.68750000000000, 0.93750000000000 ] -- symbol: Si # 32 - position: [ 0.68750000000000, 0.68750000000000, 0.93750000000000 ] -- symbol: Si # 33 - position: [ 0.06250000000000, 0.06250000000000, 0.06250000000000 ] -- symbol: Si # 34 - position: [ 0.56250000000000, 0.06250000000000, 0.06250000000000 ] -- symbol: Si # 35 - position: [ 0.06250000000000, 0.56250000000000, 0.06250000000000 ] -- symbol: Si # 36 - position: [ 0.56250000000000, 0.56250000000000, 0.06250000000000 ] -- symbol: Si # 37 - position: [ 0.06250000000000, 0.06250000000000, 0.56250000000000 ] -- symbol: Si # 38 - position: [ 0.56250000000000, 0.06250000000000, 0.56250000000000 ] -- symbol: Si # 39 - position: [ 0.06250000000000, 0.56250000000000, 0.56250000000000 ] -- symbol: Si # 40 - position: [ 0.56250000000000, 0.56250000000000, 0.56250000000000 ] -- symbol: Si # 41 - position: [ 0.06250000000000, 0.31250000000000, 0.31250000000000 ] -- symbol: Si # 42 - position: [ 0.56250000000000, 0.31250000000000, 0.31250000000000 ] -- symbol: Si # 43 - position: [ 0.06250000000000, 0.81250000000000, 0.31250000000000 ] -- symbol: Si # 44 - position: [ 0.56250000000000, 0.81250000000000, 0.31250000000000 ] -- symbol: Si # 45 - position: [ 0.06250000000000, 0.31250000000000, 0.81250000000000 ] -- symbol: Si # 46 - position: [ 0.56250000000000, 0.31250000000000, 0.81250000000000 ] -- symbol: Si # 47 - position: [ 0.06250000000000, 0.81250000000000, 0.81250000000000 ] -- symbol: Si # 48 - position: [ 0.56250000000000, 0.81250000000000, 0.81250000000000 ] -- symbol: Si # 49 - position: [ 0.31250000000000, 0.06250000000000, 0.31250000000000 ] -- symbol: Si # 50 - position: [ 0.81250000000000, 0.06250000000000, 0.31250000000000 ] -- symbol: Si # 51 - position: [ 0.31250000000000, 0.56250000000000, 0.31250000000000 ] -- symbol: Si # 52 - position: [ 0.81250000000000, 0.56250000000000, 0.31250000000000 ] -- symbol: Si # 53 - position: [ 0.31250000000000, 0.06250000000000, 0.81250000000000 ] -- symbol: Si # 54 - position: [ 0.81250000000000, 0.06250000000000, 0.81250000000000 ] -- symbol: Si # 55 - position: [ 0.31250000000000, 0.56250000000000, 0.81250000000000 ] -- symbol: Si # 56 - position: [ 0.81250000000000, 0.56250000000000, 0.81250000000000 ] -- symbol: Si # 57 - position: [ 0.31250000000000, 0.31250000000000, 0.06250000000000 ] -- symbol: Si # 58 - position: [ 0.81250000000000, 0.31250000000000, 0.06250000000000 ] -- symbol: Si # 59 - position: [ 0.31250000000000, 0.81250000000000, 0.06250000000000 ] -- symbol: Si # 60 - position: [ 0.81250000000000, 0.81250000000000, 0.06250000000000 ] -- symbol: Si # 61 - position: [ 0.31250000000000, 0.31250000000000, 0.56250000000000 ] -- symbol: Si # 62 - position: [ 0.81250000000000, 0.31250000000000, 0.56250000000000 ] -- symbol: Si # 63 - position: [ 0.31250000000000, 0.81250000000000, 0.56250000000000 ] -- symbol: Si # 64 - position: [ 0.81250000000000, 0.81250000000000, 0.56250000000000 ] diff --git a/phono3py/api_phono3py.py b/phono3py/api_phono3py.py index feeb3631..210cadd3 100644 --- a/phono3py/api_phono3py.py +++ b/phono3py/api_phono3py.py @@ -34,6 +34,7 @@ # POSSIBILITY OF SUCH DAMAGE. import warnings +from typing import Optional import numpy as np from phonopy.exception import ForceCalculatorRequiredError @@ -155,7 +156,7 @@ def __init__( store_dense_gp_map=True, store_dense_svecs=True, symprec=1e-5, - calculator=None, + calculator: Optional[str] = None, log_level=0, lapack_zheev_uplo=None, ): @@ -254,7 +255,7 @@ def __init__( self._store_dense_svecs = store_dense_svecs self._cutoff_frequency = cutoff_frequency - self._calculator = calculator + self._calculator: Optional[str] = calculator self._log_level = log_level # Create supercell and primitive cell @@ -399,7 +400,7 @@ def get_version(self): return self.version @property - def calculator(self): + def calculator(self) -> Optional[str]: """Return calculator interface name. str diff --git a/phono3py/cui/create_force_constants.py b/phono3py/cui/create_force_constants.py index 9ab81bd4..feb9873e 100644 --- a/phono3py/cui/create_force_constants.py +++ b/phono3py/cui/create_force_constants.py @@ -33,6 +33,7 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. +import copy import os import sys from typing import Optional @@ -78,7 +79,12 @@ def create_phono3py_force_constants( output_filename: Optional[str] = None, log_level=1, ): - """Read or calculate force constants.""" + """Read or calculate force constants. + + This function is for the 'phonopy' command only and not for the + 'phonopy-load' command. + + """ # Only for build-in fc calculator. # These are not applied to external fc calculators. symmetrize_fc3r = settings.is_symmetrize_fc3_r or settings.fc_symmetry @@ -205,19 +211,43 @@ def parse_forces( fc_type=None, log_level=0, ): - """Read displacements and forces.""" - filename_read_from = None + """Read displacements and forces. + + Physical units of displacements and forces are converted following the + calculator name. The calculator name may be given as the user input or found + in phono3py-yaml file. When dumping to phono3py-yaml file, it is assumed + that displacements and forces are written in the default units (A and eV/A) + without writing calculator name in it. + + """ + filename_read_from: Optional[str] = None + + calculator = phono3py.calculator + # Get dataset from ph3py_yaml. dataset can be None. + # physical_units can be overwritten if calculator is found in ph3py_yaml. + dataset = _extract_dataset_from_ph3py_yaml(ph3py_yaml, fc_type) + if dataset and ph3py_yaml.calculator: + calculator = ph3py_yaml.calculator + + physical_units = get_default_physical_units(calculator) if fc_type == "phonon_fc2": natom = len(phono3py.phonon_supercell) else: natom = len(phono3py.supercell) - # Get dataset from ph3py_yaml. dataset can be None. - dataset = _extract_dataset_from_ph3py_yaml(ph3py_yaml, fc_type) if dataset: filename_read_from = phono3py_yaml_filename + # Units of displacements and forces are converted. If forces don't + # exist, the convesion will not be performed for forces. + if calculator is not None: + _convert_unit_in_dataset( + dataset, + distance_to_A=physical_units["distance_to_A"], + force_to_eVperA=physical_units["force_to_eVperA"], + ) + # Try to read FORCES_FC* if type-2 and return dataset. # None is returned unless type-2. # can emit FileNotFoundError. @@ -230,6 +260,15 @@ def parse_forces( filename_read_from = force_filename dataset = _dataset + # Units of displacements and forces are converted. + if calculator is not None: + _convert_unit_in_dataset( + dataset, + distance_to_A=physical_units["distance_to_A"], + force_to_eVperA=physical_units["force_to_eVperA"], + ) + + # No dataset is found. "disp_fc*.yaml" is read. But this is deprecated. if dataset is None: if disp_filename is None: msg = ( @@ -242,6 +281,20 @@ def parse_forces( dataset = _read_disp_fc_yaml(disp_filename, fc_type) filename_read_from = disp_filename + # No forces should exist. Therefore only unit of displacements is + # converted. + if calculator is None: + if log_level: + print( + f'Displacements are read from "{disp_filename}", but ' + " the unit has not converted." + ) + else: + _convert_unit_in_dataset( + dataset, + distance_to_A=physical_units["distance_to_A"], + ) + if "natom" in dataset and dataset["natom"] != natom: msg = ( "Number of atoms in supercell is not consistent with " @@ -273,12 +326,18 @@ def parse_forces( else: parse_FORCES_FC3(dataset, filename=force_filename) + # Unit of displacements is already converted. + # Therefore, only unit of forces is converted. + if calculator is not None: + _convert_unit_in_dataset( + dataset, + force_to_eVperA=physical_units["force_to_eVperA"], + ) + if log_level: print('Sets of supercell forces were read from "%s".' % force_filename) sys.stdout.flush() - _convert_unit_in_dataset(dataset, phono3py.calculator) - return dataset @@ -567,11 +626,16 @@ def _create_phono3py_phonon_fc2( ) -def _convert_unit_in_dataset(dataset, calculator): - physical_units = get_default_physical_units(calculator) - force_to_eVperA = physical_units["force_to_eVperA"] - distance_to_A = physical_units["distance_to_A"] +def _convert_unit_in_dataset( + dataset: dict, + distance_to_A: Optional[float] = None, + force_to_eVperA: Optional[float] = None, +) -> None: + """Convert physical units of displacements and forces in dataset. + + dataset is overwritten. + """ if "first_atoms" in dataset: for d1 in dataset["first_atoms"]: if distance_to_A is not None: @@ -608,8 +672,8 @@ def _extract_dataset_from_ph3py_yaml(ph3py_yaml: Optional[Phono3pyYaml], fc_type dataset = None if fc_type == "phonon_fc2": if ph3py_yaml and ph3py_yaml.phonon_dataset is not None: - dataset = ph3py_yaml.phonon_dataset + dataset = copy.deepcopy(ph3py_yaml.phonon_dataset) else: if ph3py_yaml and ph3py_yaml.dataset is not None: - dataset = ph3py_yaml.dataset + dataset = copy.deepcopy(ph3py_yaml.dataset) return dataset diff --git a/phono3py/cui/load.py b/phono3py/cui/load.py index cdc03187..2b26956c 100644 --- a/phono3py/cui/load.py +++ b/phono3py/cui/load.py @@ -84,25 +84,24 @@ def load( ) -> Phono3py: """Create Phono3py instance from parameters and/or input files. - "phono3py_yaml"-like file is parsed unless crystal structure information - is given by unitcell_filename, supercell_filename, unitcell - (PhonopyAtoms-like), or supercell (PhonopyAtoms-like). - Even when "phono3py_yaml"-like file is parse, parameters except for - crystal structure can be overwritten. + "phono3py_yaml"-like file is parsed unless crystal structure information is + given by unitcell_filename, supercell_filename, unitcell + (PhonopyAtoms-like), or supercell (PhonopyAtoms-like). Even when + "phono3py_yaml"-like file is parse, parameters except for crystal structure + can be overwritten. - 'fc3.hdf5' is read if found in current directory. - Unless 'fc3.hdf5' is found and if 'FORCES_FC3' and 'disp_fc3.yaml" are - found, these are read and fc3 and fc2 are produced. + 'fc3.hdf5' is read if found in current directory. Unless 'fc3.hdf5' is found + and if 'FORCES_FC3' and 'disp_fc3.yaml" are found, these are read and fc3 + and fc2 are produced. - if 'fc2.hdf5' is found, this is read. - Unless 'fc2.hdf5' is found and if 'FORCES_FC2' and 'disp_fc2.yaml" are - found, these are read and fc2 is produced. + if 'fc2.hdf5' is found, this is read. Unless 'fc2.hdf5' is found and if + 'FORCES_FC2' and 'disp_fc2.yaml" are found, these are read and fc2 is + produced. When force_sets_filename and force_constants_filename are not given, - 'FORCES_FC3' and 'FORCES_FC2' are looked for in the current directory - as the default behaviour. When 'FORCES_FC3' ('FORCES_FC2') is given in - the type-1 format, 'disp_fc3.yaml' ('disp_fc2.yaml') is also necessary - and read. + 'FORCES_FC3' and 'FORCES_FC2' are looked for in the current directory as the + default behaviour. When 'FORCES_FC3' ('FORCES_FC2') is given in the type-1 + format, 'disp_fc3.yaml' ('disp_fc2.yaml') is also necessary and read. Crystal structure ----------------- @@ -115,18 +114,16 @@ def load( Force sets or force constants ----------------------------- - Optional. Means to provide information to generate force constants - and their priority: + Optional. Means to provide information to generate force constants and their + priority: 1. fc3_filename (fc2_filename) - 2. forces_fc3_filename (forces_fc2_filename). Do not forget that - for type-1 format, disp_fc3.yaml (disp_fc2.yaml) has to be given, - too. + 2. forces_fc3_filename (forces_fc2_filename). Do not forget that for + type-1 format, disp_fc3.yaml (disp_fc2.yaml) has to be given, too. 3. 'fc3.hdf5' and 'fc2.hdf5' are searched in current directory. 4. 'FORCES_FC3' and 'FORCES_FC2' are searched in current directory. 'FORCES_FC2' is optional. For type-1 format, 'disp_fc3.yaml' and - optionally 'disp_fc2.yaml' are also searched in current - directory. When 'FORCES_FC2' is not found, 'FORCES_FC3' is used - to create fc2. + optionally 'disp_fc2.yaml' are also searched in current directory. + When 'FORCES_FC2' is not found, 'FORCES_FC3' is used to create fc2. Parameters for non-analytical term correctiion (NAC) ---------------------------------------------------- @@ -139,45 +136,40 @@ def load( Parameters ---------- phono3py_yaml : str, optional - Filename of "phono3py.yaml"-like file. If this is given, the data - in the file are parsed. Default is None. + Filename of "phono3py.yaml"-like file. If this is given, the data in the + file are parsed. Default is None. supercell_matrix : array_like, optional - Supercell matrix multiplied to input cell basis vectors. - shape=(3, ) or (3, 3), where the former is considered a diagonal - matrix. Default is the unit matrix. - dtype=int + Supercell matrix multiplied to input cell basis vectors. shape=(3, ) or + (3, 3), where the former is considered a diagonal matrix. Default is the + unit matrix. dtype=int primitive_matrix : array_like or str, optional - Primitive matrix multiplied to input cell basis vectors. Default is - the identity matrix. - When given as array_like, shape=(3, 3), dtype=float. - When 'F', 'I', 'A', 'C', or 'R' is given instead of a 3x3 matrix, - the primitive matrix defined at - https://spglib.github.io/spglib/definition.html - is used. - When 'auto' is given, the centring type ('F', 'I', 'A', 'C', 'R', or - primitive 'P') is automatically chosen. - Default is 'auto'. + Primitive matrix multiplied to input cell basis vectors. Default is the + identity matrix. When given as array_like, shape=(3, 3), dtype=float. + When 'F', 'I', 'A', 'C', or 'R' is given instead of a 3x3 matrix, the + primitive matrix defined at + https://spglib.github.io/spglib/definition.html is used. When 'auto' is + given, the centring type ('F', 'I', 'A', 'C', 'R', or primitive 'P') is + automatically chosen. Default is 'auto'. phonon_supercell_matrix : array_like, optional - Supercell matrix used for fc2. In phono3py, supercell matrix for fc3 - and fc2 can be different to support longer range interaction of fc2 - than that of fc3. Unless setting this, supercell_matrix is used. - This is only valide when unitcell or unitcell_filename is given. - Default is None. + Supercell matrix used for fc2. In phono3py, supercell matrix for fc3 and + fc2 can be different to support longer range interaction of fc2 than + that of fc3. Unless setting this, supercell_matrix is used. This is only + valide when unitcell or unitcell_filename is given. Default is None. is_nac : bool, optional - If True, look for 'BORN' file. If False, NAS is turned off. - Default is True. + If True, look for 'BORN' file. If False, NAS is turned off. Default is + True. calculator : str, optional. - Calculator used for computing forces. This is used to switch the set - of physical units. Default is None, which is equivalent to "vasp". + Calculator used for computing forces. This is used to switch the set of + physical units when parsing calculator input/output files. Default is + None, which is equivalent to "vasp". unitcell : PhonopyAtoms, optional Input unit cell. Default is None. supercell : PhonopyAtoms, optional - Input supercell. With given, default value of primitive_matrix is set - to 'auto' (can be overwitten). supercell_matrix is ignored. Default is + Input supercell. With given, default value of primitive_matrix is set to + 'auto' (can be overwitten). supercell_matrix is ignored. Default is None. nac_params : dict, optional - Parameters required for non-analytical term correction. Default is - None. + Parameters required for non-analytical term correction. Default is None. {'born': Born effective charges (array_like, shape=(primitive cell atoms, 3, 3), dtype=float), 'dielectric': Dielectric constant matrix @@ -192,15 +184,13 @@ def load( Filename corresponding to 'BORN', a file contains non-analytical term correction parameters. forces_fc3_filename : sequence or os.PathLike, optional - A two-elemental sequence of filenames corresponding to - ('FORCES_FC3', 'disp_fc3.yaml') in the type-1 format or a filename - (os.PathLike) corresponding to 'FORCES_FC3' in the type-2 format. - Default is None. + A two-elemental sequence of filenames corresponding to ('FORCES_FC3', + 'disp_fc3.yaml') in the type-1 format or a filename (os.PathLike) + corresponding to 'FORCES_FC3' in the type-2 format. Default is None. forces_fc2_filename : os.PathLike or sequence, optional - A two-elemental sequence of filenames corresponding to - ('FORCES_FC2', 'disp_fc2.yaml') in the type-1 format or a filename - (os.PathLike) corresponding to 'FORCES_FC2' in the type-2 format. - Default is None. + A two-elemental sequence of filenames corresponding to ('FORCES_FC2', + 'disp_fc2.yaml') in the type-1 format or a filename (os.PathLike) + corresponding to 'FORCES_FC2' in the type-2 format. Default is None. fc3_filename : os.PathLike, optional Filename of a file corresponding to 'fc3.hdf5', a file contains third-order force constants. Default is None. @@ -210,32 +200,31 @@ def load( fc_calculator : str, optional Force constants calculator. Currently only 'alm'. Default is None. fc_calculator_options : str, optional - Optional parameters that are passed to the external fc-calculator. - This is given as one text string. How to parse this depends on the - fc-calculator. For alm, each parameter is splitted by comma ',', - and each set of key and value pair is written in 'key = value'. + Optional parameters that are passed to the external fc-calculator. This + is given as one text string. How to parse this depends on the + fc-calculator. For alm, each parameter is splitted by comma ',', and + each set of key and value pair is written in 'key = value'. factor : float, optional - Phonon frequency unit conversion factor. Unless specified, default - unit conversion factor for each calculator is used. + Phonon frequency unit conversion factor. Unless specified, default unit + conversion factor for each calculator is used. produce_fc : bool, optional - Setting False, force constants are not calculated from displacements - and forces. Default is True. + Setting False, force constants are not calculated from displacements and + forces. Default is True. is_symmetry : bool, optional Setting False, crystal symmetry except for lattice translation is not considered. Default is True. symmetrize_fc : bool, optional - Setting False, force constants are not symmetrized when creating - force constants from displacements and forces. Default is True. + Setting False, force constants are not symmetrized when creating force + constants from displacements and forces. Default is True. is_mesh_symmetry : bool, optional - Setting False, reciprocal mesh symmetry is not considered. - Default is True. + Setting False, reciprocal mesh symmetry is not considered. Default is + True. is_compact_fc : bool, optional fc3 are created in the array whose shape is - True: (primitive, supercell, supecell, 3, 3, 3) - False: (supercell, supercell, supecell, 3, 3, 3) + True: (primitive, supercell, supecell, 3, 3, 3) False: (supercell, + supercell, supecell, 3, 3, 3) and for fc2 - True: (primitive, supecell, 3, 3) - False: (supercell, supecell, 3, 3) + True: (primitive, supecell, 3, 3) False: (supercell, supecell, 3, 3) where 'supercell' and 'primitive' indicate number of atoms in these cells. Default is False. use_grg : bool, optional @@ -243,9 +232,9 @@ def load( store_dense_gp_map : bool, optional, Deprecated Use new format of BZ grid system. Default is True. store_dense_svecs : bool, optional, Deprecated - Shortest vectors are stored in the dense array format. This is - expected to be always True. Setting False is for rough - compatibility with v1.x. Default is True. + Shortest vectors are stored in the dense array format. This is expected + to be always True. Setting False is for rough compatibility with v1.x. + Default is True. symprec : float, optional Tolerance used to find crystal symmetry. Default is 1e-5. log_level : int, optional @@ -257,7 +246,7 @@ def load( or supercell_filename is not None or unitcell is not None or unitcell_filename is not None - ): # noqa E129 + ): cell, smat, pmat = load_helper.get_cell_settings( supercell_matrix=supercell_matrix, primitive_matrix=primitive_matrix, diff --git a/phono3py/cui/phono3py_argparse.py b/phono3py/cui/phono3py_argparse.py index be55a1c1..e93e3ccf 100644 --- a/phono3py/cui/phono3py_argparse.py +++ b/phono3py/cui/phono3py_argparse.py @@ -490,7 +490,7 @@ def get_parser(fc_symmetry=False, is_nac=False, load_phono3py_yaml=False): "--nac-method", dest="nac_method", default=None, - help="Non-analytical term correction method: Wang (default) or Gonze", + help="Non-analytical term correction method: Gonze (default) or Wang", ) if fc_symmetry: parser.add_argument( diff --git a/phono3py/interface/phono3py_yaml.py b/phono3py/interface/phono3py_yaml.py index a7c94b37..f2ed69f8 100644 --- a/phono3py/interface/phono3py_yaml.py +++ b/phono3py/interface/phono3py_yaml.py @@ -59,9 +59,9 @@ class Phono3pyYamlData: """PhonopyYaml data structure.""" - configuration: dict - calculator: str - physical_units: dict + configuration: Optional[dict] = None + calculator: Optional[str] = None + physical_units: Optional[dict] = None unitcell: Optional[PhonopyAtoms] = None primitive: Optional[Primitive] = None supercell: Optional[Supercell] = None diff --git a/phono3py/phonon3/fc3.py b/phono3py/phonon3/fc3.py index 7a6e3c4f..6b23e6bf 100644 --- a/phono3py/phonon3/fc3.py +++ b/phono3py/phonon3/fc3.py @@ -459,12 +459,11 @@ def _solve_fc3( solver = "numpy.linalg.pinv" if verbose: - text = "Computing fc3[ %d, x, x ] using %s with " % (first_atom_num + 1, solver) + print(f"Computing fc3[ {first_atom_num + 1}, x, x ] using {solver}.") if len(displacements_first) > 1: - text += "displacements:" + print("Displacements (in Angstrom):") else: - text += "a displacement:" - print(text) + print("One displacement (in Angstrom):") for i, v in enumerate(displacements_first): print(" [%7.4f %7.4f %7.4f]" % tuple(v)) sys.stdout.flush() From c487eab89fea7b8eec6388ffed673360d3f6c44c Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Sun, 19 Nov 2023 22:22:20 +0900 Subject: [PATCH 3/6] Add test of force constants calculation with QE calculator --- test/cui/test_phono3py_load_script.py | 86 +++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 11 deletions(-) diff --git a/test/cui/test_phono3py_load_script.py b/test/cui/test_phono3py_load_script.py index 665b55d9..7c97f964 100644 --- a/test/cui/test_phono3py_load_script.py +++ b/test/cui/test_phono3py_load_script.py @@ -5,8 +5,10 @@ import pathlib from collections.abc import Sequence from dataclasses import dataclass, fields -from typing import Optional +from typing import Optional, Union +import h5py +import numpy as np import pytest from phono3py.cui.phono3py_script import main @@ -19,7 +21,7 @@ class MockArgs: """Mock args of ArgumentParser.""" - filename: Sequence[os.PathLike] + filename: Optional[Sequence[os.PathLike]] = None conf_filename: Optional[os.PathLike] = None fc_calculator: Optional[str] = None force_sets_mode: bool = False @@ -28,11 +30,22 @@ class MockArgs: output_yaml_filename: Optional[os.PathLike] = None show_num_triplets: bool = False write_grid_points: bool = False + fc_symmetry: bool = True + cell_filename: Optional[str] = None + is_bterta: Optional[bool] = None + mesh_numbers: Optional[Sequence] = None + temperatures: Optional[Sequence] = None + input_filename = None + output_filename = None + input_output_filename = None def __iter__(self): """Make self iterable to support in.""" return (getattr(self, field.name) for field in fields(self)) + def __contains__(self, item): + return item in (field.name for field in fields(self)) + def test_phono3py_load(): """Test phono3py-load script.""" @@ -71,19 +84,70 @@ def test_phono3py_load_with_typeII_dataset(fc_calculator, exit_code): file_path.unlink() -def _get_phono3py_load_args(phono3py_yaml_filepath, fc_calculator=None): - # Mock of ArgumentParser.args. - mockargs = MockArgs( - filename=[phono3py_yaml_filepath], - fc_calculator=fc_calculator, - log_level=1, +@pytest.mark.parametrize("load_phono3py_yaml", [True, False]) +def test_phono3py_with_QE_calculator(load_phono3py_yaml): + """Test phono3py-load script with QE calculator.""" + argparse_control = _get_phono3py_load_args( + cwd / "phono3py_params-qe-Si222.yaml.xz", + load_phono3py_yaml=load_phono3py_yaml, + is_bterta=True, + temperatures=[ + "300", + ], + mesh_numbers=["11", "11", "11"], ) + with pytest.raises(SystemExit): + main(**argparse_control) + + with h5py.File("kappa-m111111.hdf5") as f: + np.testing.assert_almost_equal(f["kappa"][0, 0], 118.93, decimal=1) + + # Clean files created by phono3py/phono3py-load script. + for created_filename in ( + "phono3py.yaml", + "fc2.hdf5", + "fc3.hdf5", + "kappa-m111111.hdf5", + ): + file_path = pathlib.Path(cwd_called / created_filename) + if file_path.exists(): + file_path.unlink() + + +def _get_phono3py_load_args( + phono3py_yaml_filepath: Union[str, pathlib.Path], + fc_calculator: Optional[str] = None, + load_phono3py_yaml: bool = True, + is_bterta: bool = False, + temperatures: Optional[Sequence] = None, + mesh_numbers: Optional[Sequence] = None, +): + # Mock of ArgumentParser.args. + if load_phono3py_yaml: + mockargs = MockArgs( + filename=[phono3py_yaml_filepath], + fc_calculator=fc_calculator, + is_bterta=is_bterta, + temperatures=temperatures, + mesh_numbers=mesh_numbers, + log_level=1, + ) + else: + mockargs = MockArgs( + filename=[], + fc_calculator=fc_calculator, + log_level=1, + cell_filename=phono3py_yaml_filepath, + is_bterta=is_bterta, + temperatures=temperatures, + mesh_numbers=mesh_numbers, + ) # See phono3py-load script. argparse_control = { - "fc_symmetry": True, - "is_nac": True, - "load_phono3py_yaml": True, + "fc_symmetry": load_phono3py_yaml, + "is_nac": load_phono3py_yaml, + "load_phono3py_yaml": load_phono3py_yaml, "args": mockargs, } return argparse_control From 27dfe174793974cb98f811143b4efe7d8cd786b5 Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Mon, 20 Nov 2023 07:26:00 +0900 Subject: [PATCH 4/6] Fix test of force constants calculation with QE calculator --- test/cui/test_phono3py_load_script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cui/test_phono3py_load_script.py b/test/cui/test_phono3py_load_script.py index 7c97f964..c16f1fe2 100644 --- a/test/cui/test_phono3py_load_script.py +++ b/test/cui/test_phono3py_load_script.py @@ -99,7 +99,7 @@ def test_phono3py_with_QE_calculator(load_phono3py_yaml): with pytest.raises(SystemExit): main(**argparse_control) - with h5py.File("kappa-m111111.hdf5") as f: + with h5py.File(cwd_called / "kappa-m111111.hdf5") as f: np.testing.assert_almost_equal(f["kappa"][0, 0], 118.93, decimal=1) # Clean files created by phono3py/phono3py-load script. From 152c41834ebac7f30419a5da9a02dfc495958312 Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Mon, 20 Nov 2023 08:27:10 +0900 Subject: [PATCH 5/6] Fix test of force constants calculation with QE calculator --- test/cui/test_phono3py_load_script.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/cui/test_phono3py_load_script.py b/test/cui/test_phono3py_load_script.py index c16f1fe2..d320b800 100644 --- a/test/cui/test_phono3py_load_script.py +++ b/test/cui/test_phono3py_load_script.py @@ -99,7 +99,9 @@ def test_phono3py_with_QE_calculator(load_phono3py_yaml): with pytest.raises(SystemExit): main(**argparse_control) - with h5py.File(cwd_called / "kappa-m111111.hdf5") as f: + print(cwd_called.iterdir()) + + with h5py.File(cwd_called / "kappa-m111111.hdf5", "r") as f: np.testing.assert_almost_equal(f["kappa"][0, 0], 118.93, decimal=1) # Clean files created by phono3py/phono3py-load script. From 717c2f7de9782269b469092646c2303596d2b7c4 Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Mon, 20 Nov 2023 09:34:52 +0900 Subject: [PATCH 6/6] Fix test of force constants calculation with QE calculator --- test/cui/phono3py_params-qe-Si222.yaml.xz | Bin 0 -> 62552 bytes test/cui/test_phono3py_load_script.py | 2 -- 2 files changed, 2 deletions(-) create mode 100644 test/cui/phono3py_params-qe-Si222.yaml.xz diff --git a/test/cui/phono3py_params-qe-Si222.yaml.xz b/test/cui/phono3py_params-qe-Si222.yaml.xz new file mode 100644 index 0000000000000000000000000000000000000000..1cb521d45522b6f1d5b7a067db65882b328cdbb4 GIT binary patch literal 62552 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/#SS4(8r2M#^)A92 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