Merge branch 'rc'

This commit is contained in:
Atsushi Togo 2021-11-03 10:26:54 +09:00
commit a8cbfb0421
168 changed files with 23677 additions and 22057 deletions

View File

@ -9,21 +9,22 @@ jobs:
build-linux:
runs-on: ubuntu-latest
strategy:
max-parallel: 5
matrix:
python-version: [3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: ${{ matrix.python-version }}
- name: Add conda to system path
run: |
# $CONDA is an environment variable pointing to the root of the miniconda directory
echo $CONDA/bin >> $GITHUB_PATH
- name: Install dependencies
run: |
conda install --yes -c conda-forge python=3.8
conda install --yes -c conda-forge python=${{ matrix.python-version }}
conda install --yes -c conda-forge matplotlib-base pyyaml openblas libgfortran gcc_linux-64 gxx_linux-64 "h5py=3.1" scipy pytest codecov pytest-cov spglib
pip install https://github.com/phonopy/phonopy/archive/rc.zip --user
- name: Set up phono3py

View File

@ -10,22 +10,23 @@ jobs:
build-linux:
runs-on: ubuntu-latest
strategy:
max-parallel: 5
matrix:
python-version: [3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: ${{ matrix.python-version }}
- name: Add conda to system path
run: |
# $CONDA is an environment variable pointing to the root of the miniconda directory
echo $CONDA/bin >> $GITHUB_PATH
- name: Install dependencies
run: |
conda install --yes -c conda-forge python=3.8
conda install --yes -c conda-forge matplotlib-base pyyaml openblas libgfortran gcc_linux-64 gxx_linux-64 "h5py=3.1.0" scipy pytest codecov pytest-cov spglib
conda install --yes -c conda-forge python=${{ matrix.python-version }}
conda install --yes -c conda-forge matplotlib-base pyyaml openblas libgfortran gcc_linux-64 gxx_linux-64 h5py scipy pytest codecov pytest-cov spglib
pip install https://github.com/phonopy/phonopy/archive/develop.zip --user
- name: Set up phono3py
run: |

View File

@ -1,19 +1,24 @@
name: publish PyPI and TestPyPI
on: push
on:
push:
branches:
- master
- rc
jobs:
build-linux:
runs-on: ubuntu-latest
strategy:
max-parallel: 5
matrix:
python-version: [3.9, ]
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: ${{ matrix.python-version }}
- name: Make sdist
run: |
./get_nanoversion.sh

37
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,37 @@
# See https://pre-commit.com for more informatio
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
exclude: ^conda/
- id: check-added-large-files
- repo: https://github.com/pycqa/flake8
rev: 4.0.1
hooks:
- id: flake8
args:
- "--max-line-length=88"
- "--ignore=E203,W503"
- repo: https://github.com/psf/black
rev: 21.10b0
hooks:
- id: black
args:
- --line-length=88
- repo: https://github.com/pycqa/pydocstyle
rev: 6.1.1
hooks:
- id: pydocstyle
- repo: https://github.com/pycqa/isort
rev: 5.9.3
hooks:
- id: isort
name: isort (python)

View File

@ -1,93 +0,0 @@
matrix:
include:
- python: '3.6'
env: TRAVIS_PYTHON_VERSION='3.6'
- python: '3.7'
env: TRAVIS_PYTHON_VERSION='3.7'
- python: '3.8'
env: TRAVIS_PYTHON_VERSION='3.8'
before_install:
- wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
- echo $TRAVIS_PYTHON_VERSION
- bash miniconda.sh -b -p ${HOME}/.miniconda
- export PATH=$HOME/.miniconda/bin:$PATH
- conda update --yes conda
- conda init bash
- source $(conda info --root)/etc/profile.d/conda.sh
- conda install --yes -c conda-forge python=$TRAVIS_PYTHON_VERSION
- export CONDA_PREFIX=$HOME/.miniconda
- export C_INCLUDE_PATH=$CONDA_PREFIX/include
- export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
install:
- conda install --yes -c conda-forge matplotlib-base pyyaml openblas libgfortran gcc_linux-64 gxx_linux-64 h5py scipy pytest spglib
- echo $TRAVIS_BRANCH
- if [[ "$TRAVIS_BRANCH" == "master" ]]; then
pip install https://github.com/phonopy/phonopy/archive/master.zip --user;
elif [[ "$TRAVIS_BRANCH" == "rc" ]]; then
pip install https://github.com/phonopy/phonopy/archive/rc.zip --user;
else
pip install https://github.com/phonopy/phonopy/archive/develop.zip --user;
fi
- pwd
- ./get_nanoversion.sh
- cat __nanoversion__.txt
- python setup.py build
- pip install -e .
script:
- pytest
- cd example/Si-PBE
- tar xf vasprun_xmls.tar.lzma --lzma
- phono3py --cf3 vasprun_xmls/disp-{00001..00111}/vasprun.xml
- cd ../..
- cd example/Si-QE
- tar xf supercell_out.tar.lzma --lzma
- phono3py --qe --cf3 supercell_out/disp-{00001..00111}/Si.out
- cd ../..
deploy:
# testing pypi
- provider: pypi
server: https://test.pypi.org/legacy/
skip_existing: true
skip_cleanup: true
cleanup: false
distributions: sdist
user: atztogo
password:
secure: "NiGCFUvUZALME/raOyq5AspTc0sCBA+G7frAIAWLsNOk7JL25UIu/T4ufWHEpvssvXZ/zntEVKEnQo8kQYQfsfDtLccdVFKJ6jzKtqbL4s2+m8d61b+Ezu9mK1XM/ImiIkvhCD+j8jtzUbN24/qYhGgR8YeXxwfCJWU7SKNueTiyBT+xOoO4gswoRpA4Ztutzows0rKX1K/MBaKF9RGotIHCIay4ryWJUg9KWcp2rKGJeDiuTK81kSyZA1MV3x05PgnPH+gxTy8XbBP0Bk71FZUpkpQ7+UsmsUSLB9dlSgkhziYuDHb4Y48YO2XqHU7bi+pElUs660eez8m8IC5dUhjY3RPDQOSb3gpc1N56/RqfMugUyelEqfXaSCPBrXfhsvutwibA4ITNh4f86jylWFUQukHiK95NCVrvMDkNcFyNZVNHsWUIBWfCXPu4fmykOb4PR1eC1kZsuo0h3VTSzMn7vtFXbedt3VtaZMNEdbBMgKxoPwcE2DPBzZDZdSbVA8QuvmbwjGpxHNISssNzLhCVWbXSbjo2BntHzMIodz36rKQwqHqw58yUBNRZKLT1/0D2qGSSWQ/r4W6w2y7XoJXyJOIGRaAzTEWmGMZ7OHO1XON9cT8zOmikC9XhmC34mhzRrKmPx/5VMyzvM05wkCpNynx0SZc6w9wmIxhFl3Q="
on:
repo: phonopy/phono3py
branch: rc
tags: false
# testing anaconda
- provider: script
script: conda/anaconda_deploy.sh rc $ANACONDA_TOKEN2 $TRAVIS_BRANCH
on:
repo: phonopy/phono3py
branch: rc
tags: false
# production pypi
- provider: pypi
skip_existing: true
skip_cleanup: true
cleanup: false
distributions: sdist
user: atztogo
password:
secure: "lqT3bcoiVePhx642M/dZBsnd8WUsYush58IGB2EiCu60FOhwfFJtSNEoJoKicGy54QiQ/Ho6xTcshf398CFSE2cVfW+YrTUtUaObOzFNLbmbvy5tnuvDgK/56T5jTCAVQaD68qDNR0O5qlnw/Xe8ZKoKTpoFwfnIv3brpokUFyMFcECuCtv2sNrVSF3d89S7jd9ahpjkvu0udA4jXKdwLMbjOmrpK7v7jkCtNXdJFLzprB4Y8tNX08TMovWzmrHk8YOx6v2YgNxW4/bqJbe+oGofpj9RcXfYdiXY797nz7D9b7BcRi1NMWoiMqOzpnlPEccQqhqOOxddkajiXHCyJPYJ9zWj3xuC2D50KdtGb5tm+qDI3EqzIiQv0akXE3nvMPinOQkjlUN/1/HmS5s99YMSg9GvmL4bPnu3phBjoND23IMPED4rra9IToeozPHaQGRoBvLNGAl28aAzuIP0JHmHQ26BNmOvOa+CQs1SbMytv570FMi6pN/vMgaMT71uXJWsIDb9aDG6V1snsTLIbwM/TYTLFM+2OGBN86nlmWQs0V46K2kPHcUbEv8GD148j1DTS4H0wDmc8pJSHqeSI2h35pbVbZJa6bk68V3Bhre/xo+zjxwJIkOATELbQCeFXIA059+hF+tsoQ0Jnd6RrbzP3tISdVThs3u7oSoddIE="
on:
branch: master
tags: false
# production anaconda
- provider: script
script: conda/anaconda_deploy.sh main $ANACONDA_TOKEN2 $TRAVIS_BRANCH
on:
repo: phonopy/phono3py
branch: master
tags: false

View File

@ -1,8 +0,0 @@
{
"python.testing.pytestArgs": [
"test"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false,
"python.testing.pytestEnabled": true
}

View File

@ -1,17 +1,64 @@
[![Version Badge](https://anaconda.org/conda-forge/phono3py/badges/version.svg)](https://anaconda.org/conda-forge/phono3py)
[![Downloads Badge](https://anaconda.org/conda-forge/phono3py/badges/downloads.svg)](https://anaconda.org/conda-forge/phono3py)
[![PyPI version](https://badge.fury.io/py/phono3py.svg)](https://badge.fury.io/py/phono3py)
[![PyPI](https://img.shields.io/pypi/dm/phono3py.svg?maxAge=2592000)](https://pypi.python.org/pypi/phono3py)
[![codecov](https://codecov.io/gh/phonopy/phono3py/branch/develop/graph/badge.svg)](https://codecov.io/gh/phonopy/phono3py)
# phono3py
A simulation package of phonon-phonon interaction related properties. Phono3py user documetation is found at http://phonopy.github.io/phono3py/.
A simulation package of phonon-phonon interaction related properties. Phono3py
user documentation is found at http://phonopy.github.io/phono3py/.
## Mailing list for questions
Usual phono3py questions should be sent to phonopy mailing list (https://sourceforge.net/p/phonopy/mailman/).
Usual phono3py questions should be sent to phonopy mailing list
(https://sourceforge.net/p/phonopy/mailman/).
## Development
The development of phono3py is managed on the `develop` branch of github phono3py repository.
The development of phono3py is managed on the `develop` branch of github
phono3py repository.
* Github issues is the place to discuss about phono3py issues.
* Github pull request is the place to request merging source code.
- Github issues is the place to discuss about phono3py issues.
- Github pull request is the place to request merging source code.
- Python 3.7 will be the minimum requirement soon.
- Formatting is written in `pyproject.toml`.
- Not strictly, but VSCode's `settings.json` may be written like
```json
"python.linting.flake8Enabled": true,
"python.linting.flake8Args": ["--max-line-length=88", "--ignore=E203,W503"],
"python.linting.enabled": true,
"python.linting.pylintEnabled": false,
"python.linting.mypyEnabled": true,
"python.linting.pycodestyleEnabled": false,
"python.linting.pydocstyleEnabled": true,
"python.formatting.provider": "black",
"python.formatting.blackArgs": ["--line-length=88"],
"python.sortImports.args": ["--profile", "black"],
"[python]": {
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
}
```
- Use of pre-commit (https://pre-commit.com/) is encouraged.
- Installed by `pip install pre-commit`, `conda install pre_commit` or see
https://pre-commit.com/#install.
- pre-commit hook is installed by `pre-commit install`.
- pre-commit hook is run by `pre-commit run --all-files`.
## Documentation
Phono3py user documetation is written using python sphinx. The source files are stored in `doc` directory. Please see how to write the documentation at `doc/README.md`.
Phono3py user documentation is written using python sphinx. The source files are
stored in `doc` directory. Please see how to write the documentation at
`doc/README.md`.
## How to run tests
You need pytest. At home directory of phono3py after setup,
```bash
% pytest
```

View File

@ -33,161 +33,143 @@
/* POSSIBILITY OF SUCH DAMAGE. */
#include <Python.h>
#include <stdio.h>
#include <assert.h>
#include <numpy/arrayobject.h>
#include <stdio.h>
#include "lapack_wrapper.h"
static PyObject * py_phonopy_pinv(PyObject *self, PyObject *args);
static PyObject * py_phonopy_zheev(PyObject *self, PyObject *args);
static PyObject *py_phonopy_pinv(PyObject *self, PyObject *args);
static PyObject *py_phonopy_zheev(PyObject *self, PyObject *args);
struct module_state {
PyObject *error;
PyObject *error;
};
#if PY_MAJOR_VERSION >= 3
#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
#define GETSTATE(m) ((struct module_state *)PyModule_GetState(m))
#else
#define GETSTATE(m) (&_state)
static struct module_state _state;
#endif
static PyObject *
error_out(PyObject *m) {
struct module_state *st = GETSTATE(m);
PyErr_SetString(st->error, "something bad happened");
return NULL;
static PyObject *error_out(PyObject *m) {
struct module_state *st = GETSTATE(m);
PyErr_SetString(st->error, "something bad happened");
return NULL;
}
static PyMethodDef _lapackepy_methods[] = {
{"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
{"pinv", py_phonopy_pinv, METH_VARARGS, "Pseudo-inverse using Lapack dgesvd"},
{"zheev", py_phonopy_zheev, METH_VARARGS, "Lapack zheev wrapper"},
{NULL, NULL, 0, NULL}
};
{"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
{"pinv", py_phonopy_pinv, METH_VARARGS,
"Pseudo-inverse using Lapack dgesvd"},
{"zheev", py_phonopy_zheev, METH_VARARGS, "Lapack zheev wrapper"},
{NULL, NULL, 0, NULL}};
#if PY_MAJOR_VERSION >= 3
static int _lapackepy_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(GETSTATE(m)->error);
return 0;
Py_VISIT(GETSTATE(m)->error);
return 0;
}
static int _lapackepy_clear(PyObject *m) {
Py_CLEAR(GETSTATE(m)->error);
return 0;
Py_CLEAR(GETSTATE(m)->error);
return 0;
}
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
"_lapackepy",
NULL,
sizeof(struct module_state),
_lapackepy_methods,
NULL,
_lapackepy_traverse,
_lapackepy_clear,
NULL
};
PyModuleDef_HEAD_INIT, "_lapackepy", NULL,
sizeof(struct module_state), _lapackepy_methods, NULL,
_lapackepy_traverse, _lapackepy_clear, NULL};
#define INITERROR return NULL
PyObject *
PyInit__lapackepy(void)
PyObject *PyInit__lapackepy(void)
#else
#define INITERROR return
void
init_lapackepy(void)
void init_lapackepy(void)
#endif
{
#if PY_MAJOR_VERSION >= 3
PyObject *module = PyModule_Create(&moduledef);
PyObject *module = PyModule_Create(&moduledef);
#else
PyObject *module = Py_InitModule("_lapackepy", _lapackepy_methods);
PyObject *module = Py_InitModule("_lapackepy", _lapackepy_methods);
#endif
struct module_state *st;
struct module_state *st;
if (module == NULL)
INITERROR;
st = GETSTATE(module);
if (module == NULL) INITERROR;
st = GETSTATE(module);
st->error = PyErr_NewException("_lapackepy.Error", NULL, NULL);
if (st->error == NULL) {
Py_DECREF(module);
INITERROR;
}
st->error = PyErr_NewException("_lapackepy.Error", NULL, NULL);
if (st->error == NULL) {
Py_DECREF(module);
INITERROR;
}
#if PY_MAJOR_VERSION >= 3
return module;
return module;
#endif
}
static PyObject * py_phonopy_zheev(PyObject *self, PyObject *args)
{
PyArrayObject* dynamical_matrix;
PyArrayObject* eigenvalues;
static PyObject *py_phonopy_zheev(PyObject *self, PyObject *args) {
PyArrayObject *dynamical_matrix;
PyArrayObject *eigenvalues;
int dimension;
npy_cdouble *dynmat;
double *eigvals;
lapack_complex_double *a;
int i, info;
int dimension;
npy_cdouble *dynmat;
double *eigvals;
lapack_complex_double *a;
int i, info;
if (!PyArg_ParseTuple(args, "OO",
&dynamical_matrix,
&eigenvalues)) {
return NULL;
}
if (!PyArg_ParseTuple(args, "OO", &dynamical_matrix, &eigenvalues)) {
return NULL;
}
dimension = (int)PyArray_DIMS(dynamical_matrix)[0];
dynmat = (npy_cdouble*)PyArray_DATA(dynamical_matrix);
eigvals = (double*)PyArray_DATA(eigenvalues);
dimension = (int)PyArray_DIMS(dynamical_matrix)[0];
dynmat = (npy_cdouble *)PyArray_DATA(dynamical_matrix);
eigvals = (double *)PyArray_DATA(eigenvalues);
a = (lapack_complex_double*) malloc(sizeof(lapack_complex_double) *
dimension * dimension);
for (i = 0; i < dimension * dimension; i++) {
a[i] = lapack_make_complex_double(dynmat[i].real, dynmat[i].imag);
}
a = (lapack_complex_double *)malloc(sizeof(lapack_complex_double) *
dimension * dimension);
for (i = 0; i < dimension * dimension; i++) {
a[i] = lapack_make_complex_double(dynmat[i].real, dynmat[i].imag);
}
info = phonopy_zheev(eigvals, a, dimension, 'L');
info = phonopy_zheev(eigvals, a, dimension, 'L');
for (i = 0; i < dimension * dimension; i++) {
dynmat[i].real = lapack_complex_double_real(a[i]);
dynmat[i].imag = lapack_complex_double_imag(a[i]);
}
for (i = 0; i < dimension * dimension; i++) {
dynmat[i].real = lapack_complex_double_real(a[i]);
dynmat[i].imag = lapack_complex_double_imag(a[i]);
}
free(a);
free(a);
return PyLong_FromLong((long) info);
return PyLong_FromLong((long)info);
}
static PyObject * py_phonopy_pinv(PyObject *self, PyObject *args)
{
PyArrayObject* data_in_py;
PyArrayObject* data_out_py;
double cutoff;
static PyObject *py_phonopy_pinv(PyObject *self, PyObject *args) {
PyArrayObject *data_in_py;
PyArrayObject *data_out_py;
double cutoff;
int m;
int n;
double *data_in;
double *data_out;
int info;
int m;
int n;
double *data_in;
double *data_out;
int info;
if (!PyArg_ParseTuple(args, "OOd",
&data_out_py,
&data_in_py,
&cutoff)) {
return NULL;
}
if (!PyArg_ParseTuple(args, "OOd", &data_out_py, &data_in_py, &cutoff)) {
return NULL;
}
m = (int)PyArray_DIMS(data_in_py)[0];
n = (int)PyArray_DIMS(data_in_py)[1];
data_in = (double*)PyArray_DATA(data_in_py);
data_out = (double*)PyArray_DATA(data_out_py);
m = (int)PyArray_DIMS(data_in_py)[0];
n = (int)PyArray_DIMS(data_in_py)[1];
data_in = (double *)PyArray_DATA(data_in_py);
data_out = (double *)PyArray_DATA(data_out_py);
info = phonopy_pinv(data_out, data_in, m, n, cutoff);
info = phonopy_pinv(data_out, data_in, m, n, cutoff);
return PyLong_FromLong((long) info);
return PyLong_FromLong((long)info);
}

File diff suppressed because it is too large Load Diff

View File

@ -34,254 +34,199 @@
#include <Python.h>
#include <numpy/arrayobject.h>
#include "lapack_wrapper.h"
#include "phononmod.h"
static PyObject * py_get_phonons_at_gridpoints(PyObject *self, PyObject *args);
static PyObject *py_get_phonons_at_gridpoints(PyObject *self, PyObject *args);
struct module_state {
PyObject *error;
PyObject *error;
};
#if PY_MAJOR_VERSION >= 3
#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
#define GETSTATE(m) ((struct module_state *)PyModule_GetState(m))
#else
#define GETSTATE(m) (&_state)
static struct module_state _state;
#endif
static PyObject *
error_out(PyObject *m) {
struct module_state *st = GETSTATE(m);
PyErr_SetString(st->error, "something bad happened");
return NULL;
static PyObject *error_out(PyObject *m) {
struct module_state *st = GETSTATE(m);
PyErr_SetString(st->error, "something bad happened");
return NULL;
}
static PyMethodDef _phononmod_methods[] = {
{"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
{"phonons_at_gridpoints",
py_get_phonons_at_gridpoints,
METH_VARARGS,
"Set phonons at grid points"},
{NULL, NULL, 0, NULL}
};
{"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
{"phonons_at_gridpoints", py_get_phonons_at_gridpoints, METH_VARARGS,
"Set phonons at grid points"},
{NULL, NULL, 0, NULL}};
#if PY_MAJOR_VERSION >= 3
static int _phononmod_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(GETSTATE(m)->error);
return 0;
Py_VISIT(GETSTATE(m)->error);
return 0;
}
static int _phononmod_clear(PyObject *m) {
Py_CLEAR(GETSTATE(m)->error);
return 0;
Py_CLEAR(GETSTATE(m)->error);
return 0;
}
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
"_phononmod",
NULL,
sizeof(struct module_state),
_phononmod_methods,
NULL,
_phononmod_traverse,
_phononmod_clear,
NULL
};
PyModuleDef_HEAD_INIT, "_phononmod", NULL,
sizeof(struct module_state), _phononmod_methods, NULL,
_phononmod_traverse, _phononmod_clear, NULL};
#define INITERROR return NULL
PyObject *
PyInit__phononmod(void)
PyObject *PyInit__phononmod(void)
#else
#define INITERROR return
void
init_phononmod(void)
void init_phononmod(void)
#endif
{
#if PY_MAJOR_VERSION >= 3
PyObject *module = PyModule_Create(&moduledef);
PyObject *module = PyModule_Create(&moduledef);
#else
PyObject *module = Py_InitModule("_phononmod", _phononmod_methods);
PyObject *module = Py_InitModule("_phononmod", _phononmod_methods);
#endif
struct module_state *st;
struct module_state *st;
if (module == NULL)
INITERROR;
st = GETSTATE(module);
if (module == NULL) INITERROR;
st = GETSTATE(module);
st->error = PyErr_NewException("_phononmod.Error", NULL, NULL);
if (st->error == NULL) {
Py_DECREF(module);
INITERROR;
}
st->error = PyErr_NewException("_phononmod.Error", NULL, NULL);
if (st->error == NULL) {
Py_DECREF(module);
INITERROR;
}
#if PY_MAJOR_VERSION >= 3
return module;
return module;
#endif
}
static PyObject * py_get_phonons_at_gridpoints(PyObject *self, PyObject *args)
{
PyArrayObject* py_frequencies;
PyArrayObject* py_eigenvectors;
PyArrayObject* py_phonon_done;
PyArrayObject* py_grid_points;
PyArrayObject* py_grid_address;
PyArrayObject* py_QDinv;
PyArrayObject* py_shortest_vectors_fc2;
PyArrayObject* py_multiplicity_fc2;
PyArrayObject* py_positions_fc2;
PyArrayObject* py_fc2;
PyArrayObject* py_masses_fc2;
PyArrayObject* py_p2s_map_fc2;
PyArrayObject* py_s2p_map_fc2;
PyArrayObject* py_reciprocal_lattice;
PyArrayObject* py_born_effective_charge;
PyArrayObject* py_q_direction;
PyArrayObject* py_dielectric_constant;
PyArrayObject* py_dd_q0;
PyArrayObject* py_G_list;
double nac_factor;
double unit_conversion_factor;
double lambda;
char* uplo;
static PyObject *py_get_phonons_at_gridpoints(PyObject *self, PyObject *args) {
PyArrayObject *py_frequencies;
PyArrayObject *py_eigenvectors;
PyArrayObject *py_phonon_done;
PyArrayObject *py_grid_points;
PyArrayObject *py_grid_address;
PyArrayObject *py_QDinv;
PyArrayObject *py_shortest_vectors_fc2;
PyArrayObject *py_multiplicity_fc2;
PyArrayObject *py_positions_fc2;
PyArrayObject *py_fc2;
PyArrayObject *py_masses_fc2;
PyArrayObject *py_p2s_map_fc2;
PyArrayObject *py_s2p_map_fc2;
PyArrayObject *py_reciprocal_lattice;
PyArrayObject *py_born_effective_charge;
PyArrayObject *py_q_direction;
PyArrayObject *py_dielectric_constant;
PyArrayObject *py_dd_q0;
PyArrayObject *py_G_list;
double nac_factor;
double unit_conversion_factor;
double lambda;
char *uplo;
double (*born)[3][3];
double (*dielectric)[3];
double *q_dir;
double* freqs;
lapack_complex_double* eigvecs;
char* phonon_done;
long* grid_points;
long (*grid_address)[3];
double (*QDinv)[3];
double* fc2;
double(*svecs_fc2)[3];
long (*multi_fc2)[2];
double (*positions_fc2)[3];
double* masses_fc2;
long* p2s_fc2;
long* s2p_fc2;
double (*rec_lat)[3];
double * dd_q0;
double (*G_list)[3];
long num_patom, num_satom, num_phonons, num_grid_points, num_G_points;
double(*born)[3][3];
double(*dielectric)[3];
double *q_dir;
double *freqs;
lapack_complex_double *eigvecs;
char *phonon_done;
long *grid_points;
long(*grid_address)[3];
double(*QDinv)[3];
double *fc2;
double(*svecs_fc2)[3];
long(*multi_fc2)[2];
double(*positions_fc2)[3];
double *masses_fc2;
long *p2s_fc2;
long *s2p_fc2;
double(*rec_lat)[3];
double *dd_q0;
double(*G_list)[3];
long num_patom, num_satom, num_phonons, num_grid_points, num_G_points;
if (!PyArg_ParseTuple(args, "OOOOOOOOOOOOOdOOOOdOOds",
&py_frequencies,
&py_eigenvectors,
&py_phonon_done,
&py_grid_points,
&py_grid_address,
&py_QDinv,
&py_fc2,
&py_shortest_vectors_fc2,
&py_multiplicity_fc2,
&py_positions_fc2,
&py_masses_fc2,
&py_p2s_map_fc2,
&py_s2p_map_fc2,
&unit_conversion_factor,
&py_born_effective_charge,
&py_dielectric_constant,
&py_reciprocal_lattice,
&py_q_direction,
&nac_factor,
&py_dd_q0,
&py_G_list,
&lambda,
&uplo)) {
return NULL;
}
freqs = (double*)PyArray_DATA(py_frequencies);
eigvecs = (lapack_complex_double*)PyArray_DATA(py_eigenvectors);
phonon_done = (char*)PyArray_DATA(py_phonon_done);
grid_points = (long*)PyArray_DATA(py_grid_points);
grid_address = (long(*)[3])PyArray_DATA(py_grid_address);
QDinv = (double(*)[3])PyArray_DATA(py_QDinv);
fc2 = (double*)PyArray_DATA(py_fc2);
svecs_fc2 = (double(*)[3])PyArray_DATA(py_shortest_vectors_fc2);
multi_fc2 = (long(*)[2])PyArray_DATA(py_multiplicity_fc2);
masses_fc2 = (double*)PyArray_DATA(py_masses_fc2);
p2s_fc2 = (long*)PyArray_DATA(py_p2s_map_fc2);
s2p_fc2 = (long*)PyArray_DATA(py_s2p_map_fc2);
rec_lat = (double(*)[3])PyArray_DATA(py_reciprocal_lattice);
num_patom = (long)PyArray_DIMS(py_multiplicity_fc2)[1];
num_satom = (long)PyArray_DIMS(py_multiplicity_fc2)[0];
num_phonons = (long)PyArray_DIMS(py_frequencies)[0];
num_grid_points = (long)PyArray_DIMS(py_grid_points)[0];
if ((PyObject*)py_born_effective_charge == Py_None) {
born = NULL;
} else {
born = (double(*)[3][3])PyArray_DATA(py_born_effective_charge);
}
if ((PyObject*)py_dielectric_constant == Py_None) {
dielectric = NULL;
} else {
dielectric = (double(*)[3])PyArray_DATA(py_dielectric_constant);
}
if ((PyObject*)py_q_direction == Py_None) {
q_dir = NULL;
} else {
q_dir = (double*)PyArray_DATA(py_q_direction);
if (fabs(q_dir[0]) < 1e-10 &&
fabs(q_dir[1]) < 1e-10 &&
fabs(q_dir[2]) < 1e-10) {
q_dir = NULL;
if (!PyArg_ParseTuple(
args, "OOOOOOOOOOOOOdOOOOdOOds", &py_frequencies, &py_eigenvectors,
&py_phonon_done, &py_grid_points, &py_grid_address, &py_QDinv,
&py_fc2, &py_shortest_vectors_fc2, &py_multiplicity_fc2,
&py_positions_fc2, &py_masses_fc2, &py_p2s_map_fc2, &py_s2p_map_fc2,
&unit_conversion_factor, &py_born_effective_charge,
&py_dielectric_constant, &py_reciprocal_lattice, &py_q_direction,
&nac_factor, &py_dd_q0, &py_G_list, &lambda, &uplo)) {
return NULL;
}
}
if ((PyObject*)py_dd_q0 == Py_None) {
dd_q0 = NULL;
} else {
dd_q0 = (double*)PyArray_DATA(py_dd_q0);
}
if ((PyObject*)py_G_list == Py_None) {
G_list = NULL;
num_G_points = 0;
} else {
G_list = (double(*)[3])PyArray_DATA(py_G_list);
num_G_points = (long)PyArray_DIMS(py_G_list)[0];
}
if ((PyObject*)py_positions_fc2 == Py_None) {
positions_fc2 = NULL;
} else {
positions_fc2 = (double(*)[3])PyArray_DATA(py_positions_fc2);
}
phmod_get_phonons_at_gridpoints(freqs,
eigvecs,
phonon_done,
num_phonons,
grid_points,
num_grid_points,
grid_address,
QDinv,
fc2,
svecs_fc2,
multi_fc2,
positions_fc2,
num_patom,
num_satom,
masses_fc2,
p2s_fc2,
s2p_fc2,
unit_conversion_factor,
born,
dielectric,
rec_lat,
q_dir,
nac_factor,
dd_q0,
G_list,
num_G_points,
lambda,
uplo[0]);
freqs = (double *)PyArray_DATA(py_frequencies);
eigvecs = (lapack_complex_double *)PyArray_DATA(py_eigenvectors);
phonon_done = (char *)PyArray_DATA(py_phonon_done);
grid_points = (long *)PyArray_DATA(py_grid_points);
grid_address = (long(*)[3])PyArray_DATA(py_grid_address);
QDinv = (double(*)[3])PyArray_DATA(py_QDinv);
fc2 = (double *)PyArray_DATA(py_fc2);
svecs_fc2 = (double(*)[3])PyArray_DATA(py_shortest_vectors_fc2);
multi_fc2 = (long(*)[2])PyArray_DATA(py_multiplicity_fc2);
masses_fc2 = (double *)PyArray_DATA(py_masses_fc2);
p2s_fc2 = (long *)PyArray_DATA(py_p2s_map_fc2);
s2p_fc2 = (long *)PyArray_DATA(py_s2p_map_fc2);
rec_lat = (double(*)[3])PyArray_DATA(py_reciprocal_lattice);
num_patom = (long)PyArray_DIMS(py_multiplicity_fc2)[1];
num_satom = (long)PyArray_DIMS(py_multiplicity_fc2)[0];
num_phonons = (long)PyArray_DIMS(py_frequencies)[0];
num_grid_points = (long)PyArray_DIMS(py_grid_points)[0];
if ((PyObject *)py_born_effective_charge == Py_None) {
born = NULL;
} else {
born = (double(*)[3][3])PyArray_DATA(py_born_effective_charge);
}
if ((PyObject *)py_dielectric_constant == Py_None) {
dielectric = NULL;
} else {
dielectric = (double(*)[3])PyArray_DATA(py_dielectric_constant);
}
if ((PyObject *)py_q_direction == Py_None) {
q_dir = NULL;
} else {
q_dir = (double *)PyArray_DATA(py_q_direction);
if (fabs(q_dir[0]) < 1e-10 && fabs(q_dir[1]) < 1e-10 &&
fabs(q_dir[2]) < 1e-10) {
q_dir = NULL;
}
}
if ((PyObject *)py_dd_q0 == Py_None) {
dd_q0 = NULL;
} else {
dd_q0 = (double *)PyArray_DATA(py_dd_q0);
}
if ((PyObject *)py_G_list == Py_None) {
G_list = NULL;
num_G_points = 0;
} else {
G_list = (double(*)[3])PyArray_DATA(py_G_list);
num_G_points = (long)PyArray_DIMS(py_G_list)[0];
}
if ((PyObject *)py_positions_fc2 == Py_None) {
positions_fc2 = NULL;
} else {
positions_fc2 = (double(*)[3])PyArray_DATA(py_positions_fc2);
}
Py_RETURN_NONE;
phmod_get_phonons_at_gridpoints(
freqs, eigvecs, phonon_done, num_phonons, grid_points, num_grid_points,
grid_address, QDinv, fc2, svecs_fc2, multi_fc2, positions_fc2,
num_patom, num_satom, masses_fc2, p2s_fc2, s2p_fc2,
unit_conversion_factor, born, dielectric, rec_lat, q_dir, nac_factor,
dd_q0, G_list, num_G_points, lambda, uplo[0]);
Py_RETURN_NONE;
}

View File

@ -32,516 +32,373 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "bzgrid.h"
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include "bzgrid.h"
#include "grgrid.h"
#include "lagrid.h"
#define BZG_NUM_BZ_SEARCH_SPACE 125
#define GRID_TOLERANCE_FACTOR 0.01
static long bz_search_space[BZG_NUM_BZ_SEARCH_SPACE][3] = {
{ 0, 0, 0},
{ 0, 0, 1},
{ 0, 0, 2},
{ 0, 0, -2},
{ 0, 0, -1},
{ 0, 1, 0},
{ 0, 1, 1},
{ 0, 1, 2},
{ 0, 1, -2},
{ 0, 1, -1},
{ 0, 2, 0},
{ 0, 2, 1},
{ 0, 2, 2},
{ 0, 2, -2},
{ 0, 2, -1},
{ 0, -2, 0},
{ 0, -2, 1},
{ 0, -2, 2},
{ 0, -2, -2},
{ 0, -2, -1},
{ 0, -1, 0},
{ 0, -1, 1},
{ 0, -1, 2},
{ 0, -1, -2},
{ 0, -1, -1},
{ 1, 0, 0},
{ 1, 0, 1},
{ 1, 0, 2},
{ 1, 0, -2},
{ 1, 0, -1},
{ 1, 1, 0},
{ 1, 1, 1},
{ 1, 1, 2},
{ 1, 1, -2},
{ 1, 1, -1},
{ 1, 2, 0},
{ 1, 2, 1},
{ 1, 2, 2},
{ 1, 2, -2},
{ 1, 2, -1},
{ 1, -2, 0},
{ 1, -2, 1},
{ 1, -2, 2},
{ 1, -2, -2},
{ 1, -2, -1},
{ 1, -1, 0},
{ 1, -1, 1},
{ 1, -1, 2},
{ 1, -1, -2},
{ 1, -1, -1},
{ 2, 0, 0},
{ 2, 0, 1},
{ 2, 0, 2},
{ 2, 0, -2},
{ 2, 0, -1},
{ 2, 1, 0},
{ 2, 1, 1},
{ 2, 1, 2},
{ 2, 1, -2},
{ 2, 1, -1},
{ 2, 2, 0},
{ 2, 2, 1},
{ 2, 2, 2},
{ 2, 2, -2},
{ 2, 2, -1},
{ 2, -2, 0},
{ 2, -2, 1},
{ 2, -2, 2},
{ 2, -2, -2},
{ 2, -2, -1},
{ 2, -1, 0},
{ 2, -1, 1},
{ 2, -1, 2},
{ 2, -1, -2},
{ 2, -1, -1},
{-2, 0, 0},
{-2, 0, 1},
{-2, 0, 2},
{-2, 0, -2},
{-2, 0, -1},
{-2, 1, 0},
{-2, 1, 1},
{-2, 1, 2},
{-2, 1, -2},
{-2, 1, -1},
{-2, 2, 0},
{-2, 2, 1},
{-2, 2, 2},
{-2, 2, -2},
{-2, 2, -1},
{-2, -2, 0},
{-2, -2, 1},
{-2, -2, 2},
{-2, -2, -2},
{-2, -2, -1},
{-2, -1, 0},
{-2, -1, 1},
{-2, -1, 2},
{-2, -1, -2},
{-2, -1, -1},
{-1, 0, 0},
{-1, 0, 1},
{-1, 0, 2},
{-1, 0, -2},
{-1, 0, -1},
{-1, 1, 0},
{-1, 1, 1},
{-1, 1, 2},
{-1, 1, -2},
{-1, 1, -1},
{-1, 2, 0},
{-1, 2, 1},
{-1, 2, 2},
{-1, 2, -2},
{-1, 2, -1},
{-1, -2, 0},
{-1, -2, 1},
{-1, -2, 2},
{-1, -2, -2},
{-1, -2, -1},
{-1, -1, 0},
{-1, -1, 1},
{-1, -1, 2},
{-1, -1, -2},
{-1, -1, -1}
};
{0, 0, 0}, {0, 0, 1}, {0, 0, 2}, {0, 0, -2}, {0, 0, -1},
{0, 1, 0}, {0, 1, 1}, {0, 1, 2}, {0, 1, -2}, {0, 1, -1},
{0, 2, 0}, {0, 2, 1}, {0, 2, 2}, {0, 2, -2}, {0, 2, -1},
{0, -2, 0}, {0, -2, 1}, {0, -2, 2}, {0, -2, -2}, {0, -2, -1},
{0, -1, 0}, {0, -1, 1}, {0, -1, 2}, {0, -1, -2}, {0, -1, -1},
{1, 0, 0}, {1, 0, 1}, {1, 0, 2}, {1, 0, -2}, {1, 0, -1},
{1, 1, 0}, {1, 1, 1}, {1, 1, 2}, {1, 1, -2}, {1, 1, -1},
{1, 2, 0}, {1, 2, 1}, {1, 2, 2}, {1, 2, -2}, {1, 2, -1},
{1, -2, 0}, {1, -2, 1}, {1, -2, 2}, {1, -2, -2}, {1, -2, -1},
{1, -1, 0}, {1, -1, 1}, {1, -1, 2}, {1, -1, -2}, {1, -1, -1},
{2, 0, 0}, {2, 0, 1}, {2, 0, 2}, {2, 0, -2}, {2, 0, -1},
{2, 1, 0}, {2, 1, 1}, {2, 1, 2}, {2, 1, -2}, {2, 1, -1},
{2, 2, 0}, {2, 2, 1}, {2, 2, 2}, {2, 2, -2}, {2, 2, -1},
{2, -2, 0}, {2, -2, 1}, {2, -2, 2}, {2, -2, -2}, {2, -2, -1},
{2, -1, 0}, {2, -1, 1}, {2, -1, 2}, {2, -1, -2}, {2, -1, -1},
{-2, 0, 0}, {-2, 0, 1}, {-2, 0, 2}, {-2, 0, -2}, {-2, 0, -1},
{-2, 1, 0}, {-2, 1, 1}, {-2, 1, 2}, {-2, 1, -2}, {-2, 1, -1},
{-2, 2, 0}, {-2, 2, 1}, {-2, 2, 2}, {-2, 2, -2}, {-2, 2, -1},
{-2, -2, 0}, {-2, -2, 1}, {-2, -2, 2}, {-2, -2, -2}, {-2, -2, -1},
{-2, -1, 0}, {-2, -1, 1}, {-2, -1, 2}, {-2, -1, -2}, {-2, -1, -1},
{-1, 0, 0}, {-1, 0, 1}, {-1, 0, 2}, {-1, 0, -2}, {-1, 0, -1},
{-1, 1, 0}, {-1, 1, 1}, {-1, 1, 2}, {-1, 1, -2}, {-1, 1, -1},
{-1, 2, 0}, {-1, 2, 1}, {-1, 2, 2}, {-1, 2, -2}, {-1, 2, -1},
{-1, -2, 0}, {-1, -2, 1}, {-1, -2, 2}, {-1, -2, -2}, {-1, -2, -1},
{-1, -1, 0}, {-1, -1, 1}, {-1, -1, 2}, {-1, -1, -2}, {-1, -1, -1}};
static void get_bz_grid_addresses_type1(BZGrid *bzgrid,
const long Qinv[3][3]);
static void get_bz_grid_addresses_type2(BZGrid *bzgrid,
const long Qinv[3][3]);
static void set_bz_address(long address[3],
const long bz_index,
const long grid_address[3],
const long D_diag[3],
const long nint[3],
const long Qinv[3][3]);
static double get_bz_distances(long nint[3],
double distances[],
const BZGrid *bzgrid,
const long grid_address[3],
static void get_bz_grid_addresses_type1(BZGrid *bzgrid, const long Qinv[3][3]);
static void get_bz_grid_addresses_type2(BZGrid *bzgrid, const long Qinv[3][3]);
static void set_bz_address(long address[3], const long bz_index,
const long grid_address[3], const long D_diag[3],
const long nint[3], const long Qinv[3][3]);
static double get_bz_distances(long nint[3], double distances[],
const BZGrid *bzgrid, const long grid_address[3],
const double tolerance);
static void multiply_matrix_vector_d3(double v[3],
const double a[3][3],
static void multiply_matrix_vector_d3(double v[3], const double a[3][3],
const double b[3]);
static long get_inverse_unimodular_matrix_l3(long m[3][3],
const long a[3][3]);
static long get_inverse_unimodular_matrix_l3(long m[3][3], const long a[3][3]);
static double norm_squared_d3(const double a[3]);
long bzg_rotate_grid_index(const long bz_grid_index, const long rotation[3][3],
const ConstBZGrid *bzgrid) {
long i, gp, num_bzgp, num_grgp;
long dadrs[3], dadrs_rot[3], adrs_rot[3];
long bzg_rotate_grid_index(const long bz_grid_index,
const long rotation[3][3],
const ConstBZGrid *bzgrid)
{
long i, gp, num_bzgp, num_grgp;
long dadrs[3], dadrs_rot[3], adrs_rot[3];
grg_get_double_grid_address(dadrs, bzgrid->addresses[bz_grid_index],
bzgrid->PS);
lagmat_multiply_matrix_vector_l3(dadrs_rot, rotation, dadrs);
grg_get_grid_address(adrs_rot, dadrs_rot, bzgrid->PS);
gp = grg_get_grid_index(adrs_rot, bzgrid->D_diag);
grg_get_double_grid_address(dadrs, bzgrid->addresses[bz_grid_index], bzgrid->PS);
lagmat_multiply_matrix_vector_l3(dadrs_rot, rotation, dadrs);
grg_get_grid_address(adrs_rot, dadrs_rot, bzgrid->PS);
gp = grg_get_grid_index(adrs_rot, bzgrid->D_diag);
if (bzgrid->type == 1) {
if (bzgrid->addresses[gp][0] == adrs_rot[0] &&
bzgrid->addresses[gp][1] == adrs_rot[1] &&
bzgrid->addresses[gp][2] == adrs_rot[2]) {
return gp;
if (bzgrid->type == 1) {
if (bzgrid->addresses[gp][0] == adrs_rot[0] &&
bzgrid->addresses[gp][1] == adrs_rot[1] &&
bzgrid->addresses[gp][2] == adrs_rot[2]) {
return gp;
}
num_grgp = bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2];
num_bzgp = num_grgp * 8;
for (i = bzgrid->gp_map[num_bzgp + gp] + num_grgp;
i < bzgrid->gp_map[num_bzgp + gp + 1] + num_grgp; i++) {
if (bzgrid->addresses[i][0] == adrs_rot[0] &&
bzgrid->addresses[i][1] == adrs_rot[1] &&
bzgrid->addresses[i][2] == adrs_rot[2]) {
return i;
}
}
} else {
for (i = bzgrid->gp_map[gp]; i < bzgrid->gp_map[gp + 1]; i++) {
if (bzgrid->addresses[i][0] == adrs_rot[0] &&
bzgrid->addresses[i][1] == adrs_rot[1] &&
bzgrid->addresses[i][2] == adrs_rot[2]) {
return i;
}
}
}
num_grgp = bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2];
num_bzgp = num_grgp * 8;
for (i = bzgrid->gp_map[num_bzgp + gp] + num_grgp;
i < bzgrid->gp_map[num_bzgp + gp + 1] + num_grgp; i++) {
if (bzgrid->addresses[i][0] == adrs_rot[0] &&
bzgrid->addresses[i][1] == adrs_rot[1] &&
bzgrid->addresses[i][2] == adrs_rot[2]) {
return i;
}
}
} else {
for (i = bzgrid->gp_map[gp]; i < bzgrid->gp_map[gp + 1]; i++) {
if (bzgrid->addresses[i][0] == adrs_rot[0] &&
bzgrid->addresses[i][1] == adrs_rot[1] &&
bzgrid->addresses[i][2] == adrs_rot[2]) {
return i;
}
}
}
/* This should not happen, but possible when bzgrid is ill-defined. */
return bzgrid->gp_map[gp];
/* This should not happen, but possible when bzgrid is ill-defined. */
return bzgrid->gp_map[gp];
}
long bzg_get_bz_grid_addresses(BZGrid *bzgrid) {
long det;
long Qinv[3][3];
long bzg_get_bz_grid_addresses(BZGrid *bzgrid)
{
long det;
long Qinv[3][3];
det = get_inverse_unimodular_matrix_l3(Qinv, bzgrid->Q);
if (det == 0) {
return 0;
}
det = get_inverse_unimodular_matrix_l3(Qinv, bzgrid->Q);
if (det == 0) {
return 0;
}
if (bzgrid->type == 1) {
get_bz_grid_addresses_type1(bzgrid, Qinv);
} else {
get_bz_grid_addresses_type2(bzgrid, Qinv);
}
if (bzgrid->type == 1) {
get_bz_grid_addresses_type1(bzgrid, Qinv);
} else {
get_bz_grid_addresses_type2(bzgrid, Qinv);
}
return 1;
return 1;
}
/* Note: Tolerance in squared distance. */
double bzg_get_tolerance_for_BZ_reduction(const BZGrid *bzgrid)
{
long i, j;
double tolerance;
double length[3];
double reclatQ[3][3];
double bzg_get_tolerance_for_BZ_reduction(const BZGrid *bzgrid) {
long i, j;
double tolerance;
double length[3];
double reclatQ[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
reclatQ[i][j] =
bzgrid->reclat[i][0] * bzgrid->Q[0][j]
+ bzgrid->reclat[i][1] * bzgrid->Q[1][j]
+ bzgrid->reclat[i][2] * bzgrid->Q[2][j];
}
}
for (i = 0; i < 3; i++) {
length[i] = 0;
for (j = 0; j < 3; j++) {
length[i] += reclatQ[j][i] * reclatQ[j][i];
}
length[i] /= bzgrid->D_diag[i] * bzgrid->D_diag[i];
}
tolerance = length[0];
for (i = 1; i < 3; i++) {
if (tolerance < length[i]) {
tolerance = length[i];
}
}
tolerance *= GRID_TOLERANCE_FACTOR;
return tolerance;
}
RotMats * bzg_alloc_RotMats(const long size)
{
RotMats *rotmats;
rotmats = NULL;
if ((rotmats = (RotMats*) malloc(sizeof(RotMats))) == NULL) {
warning_print("Memory could not be allocated.");
return NULL;
}
rotmats->size = size;
if (size > 0) {
if ((rotmats->mat = (long (*)[3][3]) malloc(sizeof(long[3][3]) * size))
== NULL) {
warning_print("Memory could not be allocated ");
warning_print("(RotMats, line %d, %s).\n", __LINE__, __FILE__);
free(rotmats);
rotmats = NULL;
return NULL;
}
}
return rotmats;
}
void bzg_free_RotMats(RotMats * rotmats)
{
if (rotmats->size > 0) {
free(rotmats->mat);
rotmats->mat = NULL;
}
free(rotmats);
}
void bzg_multiply_matrix_vector_ld3(double v[3],
const long a[3][3],
const double b[3])
{
long i;
double c[3];
for (i = 0; i < 3; i++) {
c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2];
}
for (i = 0; i < 3; i++) {
v[i] = c[i];
}
}
static void get_bz_grid_addresses_type1(BZGrid *bzgrid,
const long Qinv[3][3])
{
double tolerance, min_distance;
double distances[BZG_NUM_BZ_SEARCH_SPACE];
long bzmesh[3], bz_address_double[3], nint[3], gr_adrs[3];
long i, j, k, boundary_num_gp, total_num_gp, bzgp, gp, num_bzmesh;
long count, id_shift;
tolerance = bzg_get_tolerance_for_BZ_reduction(bzgrid);
for (j = 0; j < 3; j++) {
bzmesh[j] = bzgrid->D_diag[j] * 2;
}
num_bzmesh = bzmesh[0] * bzmesh[1] * bzmesh[2];
for (i = 0; i < num_bzmesh; i++) {
bzgrid->gp_map[i] = num_bzmesh;
}
boundary_num_gp = 0;
total_num_gp = bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2];
/* Multithreading doesn't work for this loop since gp calculated */
/* with boundary_num_gp is unstable to store bz_grid_address. */
bzgrid->gp_map[num_bzmesh] = 0;
id_shift = 0;
for (i = 0; i < total_num_gp; i++) {
grg_get_grid_address_from_index(gr_adrs, i, bzgrid->D_diag);
min_distance = get_bz_distances(nint, distances, bzgrid,
gr_adrs, tolerance);
count = 0;
for (j = 0; j < BZG_NUM_BZ_SEARCH_SPACE; j++) {
if (distances[j] < min_distance + tolerance) {
if (count == 0) {
gp = i;
} else {
gp = boundary_num_gp + total_num_gp;
boundary_num_gp++;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
reclatQ[i][j] = bzgrid->reclat[i][0] * bzgrid->Q[0][j] +
bzgrid->reclat[i][1] * bzgrid->Q[1][j] +
bzgrid->reclat[i][2] * bzgrid->Q[2][j];
}
count++;
set_bz_address(bzgrid->addresses[gp],
j,
gr_adrs,
bzgrid->D_diag,
nint,
Qinv);
for (k = 0; k < 3; k++) {
bz_address_double[k] = bzgrid->addresses[gp][k] * 2 + bzgrid->PS[k];
}
for (i = 0; i < 3; i++) {
length[i] = 0;
for (j = 0; j < 3; j++) {
length[i] += reclatQ[j][i] * reclatQ[j][i];
}
bzgp = grg_get_double_grid_index(
bz_address_double, bzmesh, bzgrid->PS);
bzgrid->gp_map[bzgp] = gp;
bzgrid->bzg2grg[gp] = i;
}
length[i] /= bzgrid->D_diag[i] * bzgrid->D_diag[i];
}
/* This is used in get_BZ_triplets_at_q_type1. */
/* The first one among those found is treated specially, so */
/* excluded from the gp_map address shift by -1. */
id_shift += count - 1;
bzgrid->gp_map[num_bzmesh + i + 1] = id_shift;
}
bzgrid->size = boundary_num_gp + total_num_gp;
}
static void get_bz_grid_addresses_type2(BZGrid *bzgrid,
const long Qinv[3][3])
{
double tolerance, min_distance;
double distances[BZG_NUM_BZ_SEARCH_SPACE];
long nint[3], gr_adrs[3];
long i, j, num_gp;
tolerance = bzg_get_tolerance_for_BZ_reduction(bzgrid);
num_gp = 0;
/* The first element of gp_map is always 0. */
bzgrid->gp_map[0] = 0;
for (i = 0;
i < bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2]; i++) {
grg_get_grid_address_from_index(gr_adrs, i, bzgrid->D_diag);
min_distance = get_bz_distances(nint, distances, bzgrid,
gr_adrs, tolerance);
for (j = 0; j < BZG_NUM_BZ_SEARCH_SPACE; j++) {
if (distances[j] < min_distance + tolerance) {
set_bz_address(bzgrid->addresses[num_gp],
j,
gr_adrs,
bzgrid->D_diag,
nint,
Qinv);
bzgrid->bzg2grg[num_gp] = i;
num_gp++;
}
tolerance = length[0];
for (i = 1; i < 3; i++) {
if (tolerance < length[i]) {
tolerance = length[i];
}
}
bzgrid->gp_map[i + 1] = num_gp;
}
tolerance *= GRID_TOLERANCE_FACTOR;
bzgrid->size = num_gp;
return tolerance;
}
static void set_bz_address(long address[3],
const long bz_index,
const long grid_address[3],
const long D_diag[3],
const long nint[3],
const long Qinv[3][3])
{
long i;
long deltaG[3];
RotMats *bzg_alloc_RotMats(const long size) {
RotMats *rotmats;
for (i = 0; i < 3; i++) {
deltaG[i] = bz_search_space[bz_index][i] - nint[i];
}
lagmat_multiply_matrix_vector_l3(deltaG, Qinv, deltaG);
for (i = 0; i < 3; i++) {
address[i] = grid_address[i] + deltaG[i] * D_diag[i];
}
rotmats = NULL;
if ((rotmats = (RotMats *)malloc(sizeof(RotMats))) == NULL) {
warning_print("Memory could not be allocated.");
return NULL;
}
rotmats->size = size;
if (size > 0) {
if ((rotmats->mat = (long(*)[3][3])malloc(sizeof(long[3][3]) * size)) ==
NULL) {
warning_print("Memory could not be allocated ");
warning_print("(RotMats, line %d, %s).\n", __LINE__, __FILE__);
free(rotmats);
rotmats = NULL;
return NULL;
}
}
return rotmats;
}
static double get_bz_distances(long nint[3],
double distances[],
const BZGrid *bzgrid,
const long grid_address[3],
const double tolerance)
{
long i, j;
long dadrs[3];
double min_distance;
double q_vec[3], q_red[3];
void bzg_free_RotMats(RotMats *rotmats) {
if (rotmats->size > 0) {
free(rotmats->mat);
rotmats->mat = NULL;
}
free(rotmats);
}
grg_get_double_grid_address(dadrs, grid_address, bzgrid->PS);
void bzg_multiply_matrix_vector_ld3(double v[3], const long a[3][3],
const double b[3]) {
long i;
double c[3];
for (i = 0; i < 3; i++) {
c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2];
}
for (i = 0; i < 3; i++) {
v[i] = c[i];
}
}
for (i = 0; i < 3; i++) {
q_red[i] = dadrs[i] / (2.0 * bzgrid->D_diag[i]);
}
bzg_multiply_matrix_vector_ld3(q_red, bzgrid->Q, q_red);
for (i = 0; i < 3; i++) {
nint[i] = lagmat_Nint(q_red[i]);
q_red[i] -= nint[i];
}
static void get_bz_grid_addresses_type1(BZGrid *bzgrid, const long Qinv[3][3]) {
double tolerance, min_distance;
double distances[BZG_NUM_BZ_SEARCH_SPACE];
long bzmesh[3], bz_address_double[3], nint[3], gr_adrs[3];
long i, j, k, boundary_num_gp, total_num_gp, bzgp, gp, num_bzmesh;
long count, id_shift;
for (i = 0; i < BZG_NUM_BZ_SEARCH_SPACE; i++) {
tolerance = bzg_get_tolerance_for_BZ_reduction(bzgrid);
for (j = 0; j < 3; j++) {
q_vec[j] = q_red[j] + bz_search_space[i][j];
bzmesh[j] = bzgrid->D_diag[j] * 2;
}
multiply_matrix_vector_d3(q_vec, bzgrid->reclat, q_vec);
distances[i] = norm_squared_d3(q_vec);
}
/* Use of tolerance is important to select first one among similar
* distances. Otherwise the choice of bz grid address among
* those translationally equivalent can change by very tiny numerical
* fluctuation. */
min_distance = distances[0];
for (i = 1; i < BZG_NUM_BZ_SEARCH_SPACE; i++) {
if (distances[i] < min_distance - tolerance) {
min_distance = distances[i];
num_bzmesh = bzmesh[0] * bzmesh[1] * bzmesh[2];
for (i = 0; i < num_bzmesh; i++) {
bzgrid->gp_map[i] = num_bzmesh;
}
}
return min_distance;
boundary_num_gp = 0;
total_num_gp = bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2];
/* Multithreading doesn't work for this loop since gp calculated */
/* with boundary_num_gp is unstable to store bz_grid_address. */
bzgrid->gp_map[num_bzmesh] = 0;
id_shift = 0;
for (i = 0; i < total_num_gp; i++) {
grg_get_grid_address_from_index(gr_adrs, i, bzgrid->D_diag);
min_distance =
get_bz_distances(nint, distances, bzgrid, gr_adrs, tolerance);
count = 0;
for (j = 0; j < BZG_NUM_BZ_SEARCH_SPACE; j++) {
if (distances[j] < min_distance + tolerance) {
if (count == 0) {
gp = i;
} else {
gp = boundary_num_gp + total_num_gp;
boundary_num_gp++;
}
count++;
set_bz_address(bzgrid->addresses[gp], j, gr_adrs,
bzgrid->D_diag, nint, Qinv);
for (k = 0; k < 3; k++) {
bz_address_double[k] =
bzgrid->addresses[gp][k] * 2 + bzgrid->PS[k];
}
bzgp = grg_get_double_grid_index(bz_address_double, bzmesh,
bzgrid->PS);
bzgrid->gp_map[bzgp] = gp;
bzgrid->bzg2grg[gp] = i;
}
}
/* This is used in get_BZ_triplets_at_q_type1. */
/* The first one among those found is treated specially, so */
/* excluded from the gp_map address shift by -1. */
id_shift += count - 1;
bzgrid->gp_map[num_bzmesh + i + 1] = id_shift;
}
bzgrid->size = boundary_num_gp + total_num_gp;
}
static void multiply_matrix_vector_d3(double v[3],
const double a[3][3],
const double b[3])
{
long i;
double c[3];
for (i = 0; i < 3; i++) {
c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2];
}
for (i = 0; i < 3; i++) {
v[i] = c[i];
}
static void get_bz_grid_addresses_type2(BZGrid *bzgrid, const long Qinv[3][3]) {
double tolerance, min_distance;
double distances[BZG_NUM_BZ_SEARCH_SPACE];
long nint[3], gr_adrs[3];
long i, j, num_gp;
tolerance = bzg_get_tolerance_for_BZ_reduction(bzgrid);
num_gp = 0;
/* The first element of gp_map is always 0. */
bzgrid->gp_map[0] = 0;
for (i = 0; i < bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2];
i++) {
grg_get_grid_address_from_index(gr_adrs, i, bzgrid->D_diag);
min_distance =
get_bz_distances(nint, distances, bzgrid, gr_adrs, tolerance);
for (j = 0; j < BZG_NUM_BZ_SEARCH_SPACE; j++) {
if (distances[j] < min_distance + tolerance) {
set_bz_address(bzgrid->addresses[num_gp], j, gr_adrs,
bzgrid->D_diag, nint, Qinv);
bzgrid->bzg2grg[num_gp] = i;
num_gp++;
}
}
bzgrid->gp_map[i + 1] = num_gp;
}
bzgrid->size = num_gp;
}
static long get_inverse_unimodular_matrix_l3(long m[3][3],
const long a[3][3])
{
long det;
long c[3][3];
static void set_bz_address(long address[3], const long bz_index,
const long grid_address[3], const long D_diag[3],
const long nint[3], const long Qinv[3][3]) {
long i;
long deltaG[3];
det = lagmat_get_determinant_l3(a);
if (labs(det) != 1) {
return 0;
}
c[0][0] = (a[1][1] * a[2][2] - a[1][2] * a[2][1]) / det;
c[1][0] = (a[1][2] * a[2][0] - a[1][0] * a[2][2]) / det;
c[2][0] = (a[1][0] * a[2][1] - a[1][1] * a[2][0]) / det;
c[0][1] = (a[2][1] * a[0][2] - a[2][2] * a[0][1]) / det;
c[1][1] = (a[2][2] * a[0][0] - a[2][0] * a[0][2]) / det;
c[2][1] = (a[2][0] * a[0][1] - a[2][1] * a[0][0]) / det;
c[0][2] = (a[0][1] * a[1][2] - a[0][2] * a[1][1]) / det;
c[1][2] = (a[0][2] * a[1][0] - a[0][0] * a[1][2]) / det;
c[2][2] = (a[0][0] * a[1][1] - a[0][1] * a[1][0]) / det;
lagmat_copy_matrix_l3(m, c);
return det;
for (i = 0; i < 3; i++) {
deltaG[i] = bz_search_space[bz_index][i] - nint[i];
}
lagmat_multiply_matrix_vector_l3(deltaG, Qinv, deltaG);
for (i = 0; i < 3; i++) {
address[i] = grid_address[i] + deltaG[i] * D_diag[i];
}
}
static double norm_squared_d3(const double a[3])
{
return a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
static double get_bz_distances(long nint[3], double distances[],
const BZGrid *bzgrid, const long grid_address[3],
const double tolerance) {
long i, j;
long dadrs[3];
double min_distance;
double q_vec[3], q_red[3];
grg_get_double_grid_address(dadrs, grid_address, bzgrid->PS);
for (i = 0; i < 3; i++) {
q_red[i] = dadrs[i] / (2.0 * bzgrid->D_diag[i]);
}
bzg_multiply_matrix_vector_ld3(q_red, bzgrid->Q, q_red);
for (i = 0; i < 3; i++) {
nint[i] = lagmat_Nint(q_red[i]);
q_red[i] -= nint[i];
}
for (i = 0; i < BZG_NUM_BZ_SEARCH_SPACE; i++) {
for (j = 0; j < 3; j++) {
q_vec[j] = q_red[j] + bz_search_space[i][j];
}
multiply_matrix_vector_d3(q_vec, bzgrid->reclat, q_vec);
distances[i] = norm_squared_d3(q_vec);
}
/* Use of tolerance is important to select first one among similar
* distances. Otherwise the choice of bz grid address among
* those translationally equivalent can change by very tiny numerical
* fluctuation. */
min_distance = distances[0];
for (i = 1; i < BZG_NUM_BZ_SEARCH_SPACE; i++) {
if (distances[i] < min_distance - tolerance) {
min_distance = distances[i];
}
}
return min_distance;
}
static void multiply_matrix_vector_d3(double v[3], const double a[3][3],
const double b[3]) {
long i;
double c[3];
for (i = 0; i < 3; i++) {
c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2];
}
for (i = 0; i < 3; i++) {
v[i] = c[i];
}
}
static long get_inverse_unimodular_matrix_l3(long m[3][3], const long a[3][3]) {
long det;
long c[3][3];
det = lagmat_get_determinant_l3(a);
if (labs(det) != 1) {
return 0;
}
c[0][0] = (a[1][1] * a[2][2] - a[1][2] * a[2][1]) / det;
c[1][0] = (a[1][2] * a[2][0] - a[1][0] * a[2][2]) / det;
c[2][0] = (a[1][0] * a[2][1] - a[1][1] * a[2][0]) / det;
c[0][1] = (a[2][1] * a[0][2] - a[2][2] * a[0][1]) / det;
c[1][1] = (a[2][2] * a[0][0] - a[2][0] * a[0][2]) / det;
c[2][1] = (a[2][0] * a[0][1] - a[2][1] * a[0][0]) / det;
c[0][2] = (a[0][1] * a[1][2] - a[0][2] * a[1][1]) / det;
c[1][2] = (a[0][2] * a[1][0] - a[0][0] * a[1][2]) / det;
c[2][2] = (a[0][0] * a[1][1] - a[0][1] * a[1][0]) / det;
lagmat_copy_matrix_l3(m, c);
return det;
}
static double norm_squared_d3(const double a[3]) {
return a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
}

View File

@ -36,8 +36,8 @@
#define __bzgrid_H__
typedef struct {
long size;
long (*mat)[3][3];
long size;
long (*mat)[3][3];
} RotMats;
/* Data structure of Brillouin zone grid
@ -68,39 +68,36 @@ typedef struct {
* type : long
* 1 or 2. */
typedef struct {
long size;
long D_diag[3];
long Q[3][3];
long PS[3];
long *gp_map;
long *bzg2grg;
long (*addresses)[3];
double reclat[3][3];
long type;
long size;
long D_diag[3];
long Q[3][3];
long PS[3];
long *gp_map;
long *bzg2grg;
long (*addresses)[3];
double reclat[3][3];
long type;
} BZGrid;
typedef struct {
long size;
long D_diag[3];
long Q[3][3];
long PS[3];
const long *gp_map;
const long *bzg2grg;
const long (*addresses)[3];
double reclat[3][3];
long type;
long size;
long D_diag[3];
long Q[3][3];
long PS[3];
const long *gp_map;
const long *bzg2grg;
const long (*addresses)[3];
double reclat[3][3];
long type;
} ConstBZGrid;
long bzg_rotate_grid_index(const long grid_index,
const long rotation[3][3],
long bzg_rotate_grid_index(const long grid_index, const long rotation[3][3],
const ConstBZGrid *bzgrid);
long bzg_get_bz_grid_addresses(BZGrid *bzgrid);
double bzg_get_tolerance_for_BZ_reduction(const BZGrid *bzgrid);
RotMats * bzg_alloc_RotMats(const long size);
void bzg_free_RotMats(RotMats * rotmats);
void bzg_multiply_matrix_vector_ld3(double v[3],
const long a[3][3],
RotMats *bzg_alloc_RotMats(const long size);
void bzg_free_RotMats(RotMats *rotmats);
void bzg_multiply_matrix_vector_ld3(double v[3], const long a[3][3],
const double b[3]);
#endif

View File

@ -32,321 +32,255 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "phonoc_array.h"
#include "phonoc_utils.h"
#include "collision_matrix.h"
static void get_collision_matrix(double *collision_matrix,
const double *fc3_normal_squared,
const long num_band0,
const long num_band,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long num_gp,
const long *map_q,
const long *rot_grid_points,
const long num_ir_gp,
const long num_rot,
const double *rotations_cartesian,
const double *g,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
static void
get_reducible_collision_matrix(double *collision_matrix,
const double *fc3_normal_squared,
const long num_band0,
const long num_band,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long num_gp,
const long *map_q,
const double *g,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
static void get_inv_sinh(double *inv_sinh,
const long gp,
const double temperature,
const double *frequencies,
const long triplet[3],
const long *triplets_map,
const long *map_q,
const long num_band,
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "phonoc_array.h"
#include "phonoc_utils.h"
static void get_collision_matrix(
double *collision_matrix, const double *fc3_normal_squared,
const long num_band0, const long num_band, const double *frequencies,
const long (*triplets)[3], const long *triplets_map, const long num_gp,
const long *map_q, const long *rot_grid_points, const long num_ir_gp,
const long num_rot, const double *rotations_cartesian, const double *g,
const double temperature, const double unit_conversion_factor,
const double cutoff_frequency);
static void get_reducible_collision_matrix(
double *collision_matrix, const double *fc3_normal_squared,
const long num_band0, const long num_band, const double *frequencies,
const long (*triplets)[3], const long *triplets_map, const long num_gp,
const long *map_q, const double *g, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
static long get_inv_sinh(double *inv_sinh, const long gp,
const double temperature, const double *frequencies,
const long triplet[3], const long *triplets_map,
const long *map_q, const long num_band,
const double cutoff_frequency);
static long *create_gp2tp_map(const long *triplets_map,
const long num_gp);
static long *create_gp2tp_map(const long *triplets_map, const long num_gp);
void col_get_collision_matrix(double *collision_matrix,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long *map_q,
const long *rot_grid_points,
const double *rotations_cartesian,
const double *g,
const long num_ir_gp,
const long num_gp,
const long num_rot,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency)
{
long num_triplets, num_band0, num_band;
void col_get_collision_matrix(
double *collision_matrix, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplets_map, const long *map_q, const long *rot_grid_points,
const double *rotations_cartesian, const double *g, const long num_ir_gp,
const long num_gp, const long num_rot, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency) {
long num_triplets, num_band0, num_band;
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
get_collision_matrix(
collision_matrix,
fc3_normal_squared->data,
num_band0,
num_band,
frequencies,
triplets,
triplets_map,
num_gp,
map_q,
rot_grid_points,
num_ir_gp,
num_rot,
rotations_cartesian,
g + 2 * num_triplets * num_band0 * num_band * num_band,
temperature,
unit_conversion_factor,
cutoff_frequency);
get_collision_matrix(collision_matrix, fc3_normal_squared->data, num_band0,
num_band, frequencies, triplets, triplets_map, num_gp,
map_q, rot_grid_points, num_ir_gp, num_rot,
rotations_cartesian,
g + 2 * num_triplets * num_band0 * num_band * num_band,
temperature, unit_conversion_factor, cutoff_frequency);
}
void col_get_reducible_collision_matrix(double *collision_matrix,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long *map_q,
const double *g,
const long num_gp,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency)
{
long num_triplets, num_band, num_band0;
void col_get_reducible_collision_matrix(
double *collision_matrix, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplets_map, const long *map_q, const double *g,
const long num_gp, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency) {
long num_triplets, num_band, num_band0;
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
get_reducible_collision_matrix(
collision_matrix,
fc3_normal_squared->data,
num_band0,
num_band,
frequencies,
triplets,
triplets_map,
num_gp,
map_q,
g + 2 * num_triplets * num_band0 * num_band * num_band,
temperature,
unit_conversion_factor,
cutoff_frequency);
get_reducible_collision_matrix(
collision_matrix, fc3_normal_squared->data, num_band0, num_band,
frequencies, triplets, triplets_map, num_gp, map_q,
g + 2 * num_triplets * num_band0 * num_band * num_band, temperature,
unit_conversion_factor, cutoff_frequency);
}
static void get_collision_matrix(double *collision_matrix,
const double *fc3_normal_squared,
const long num_band0,
const long num_band,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long num_gp,
const long *map_q,
const long *rot_grid_points,
const long num_ir_gp,
const long num_rot,
const double *rotations_cartesian,
const double *g,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency)
{
long i, j, k, l, m, n, ti, r_gp;
long *gp2tp_map;
double collision;
double *inv_sinh;
static void get_collision_matrix(
double *collision_matrix, const double *fc3_normal_squared,
const long num_band0, const long num_band, const double *frequencies,
const long (*triplets)[3], const long *triplets_map, const long num_gp,
const long *map_q, const long *rot_grid_points, const long num_ir_gp,
const long num_rot, const double *rotations_cartesian, const double *g,
const double temperature, const double unit_conversion_factor,
const double cutoff_frequency) {
long i, j, k, l, m, n, ti, r_gp, swapped;
long *gp2tp_map;
double collision;
double *inv_sinh;
gp2tp_map = create_gp2tp_map(triplets_map, num_gp);
gp2tp_map = create_gp2tp_map(triplets_map, num_gp);
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, k, l, m, n, ti, r_gp, collision, inv_sinh)
#endif
for (i = 0; i < num_ir_gp; i++) {
inv_sinh = (double*)malloc(sizeof(double) * num_band);
for (j = 0; j < num_rot; j++) {
r_gp = rot_grid_points[i * num_rot + j];
ti = gp2tp_map[triplets_map[r_gp]];
get_inv_sinh(inv_sinh,
r_gp,
temperature,
frequencies,
triplets[ti],
triplets_map,
map_q,
num_band,
cutoff_frequency);
for (i = 0; i < num_ir_gp; i++) {
inv_sinh = (double *)malloc(sizeof(double) * num_band);
for (j = 0; j < num_rot; j++) {
r_gp = rot_grid_points[i * num_rot + j];
ti = gp2tp_map[triplets_map[r_gp]];
swapped = get_inv_sinh(inv_sinh, r_gp, temperature, frequencies,
triplets[ti], triplets_map, map_q, num_band,
cutoff_frequency);
for (k = 0; k < num_band0; k++) {
for (l = 0; l < num_band; l++) {
collision = 0;
for (m = 0; m < num_band; m++) {
collision +=
fc3_normal_squared[ti * num_band0 * num_band * num_band +
k * num_band * num_band +
l * num_band + m] *
g[ti * num_band0 * num_band * num_band +
k * num_band * num_band +
l * num_band + m] *
inv_sinh[m] * unit_conversion_factor;
}
for (m = 0; m < 3; m++) {
for (n = 0; n < 3; n++) {
collision_matrix[k * 3 * num_ir_gp * num_band * 3 +
m * num_ir_gp * num_band * 3 +
i * num_band * 3 + l * 3 + n] +=
collision * rotations_cartesian[j * 9 + m * 3 + n];
for (k = 0; k < num_band0; k++) {
for (l = 0; l < num_band; l++) {
collision = 0;
for (m = 0; m < num_band; m++) {
if (swapped) {
collision +=
fc3_normal_squared[ti * num_band0 * num_band *
num_band +
k * num_band * num_band +
m * num_band + l] *
g[ti * num_band0 * num_band * num_band +
k * num_band * num_band + m * num_band + l] *
inv_sinh[m] * unit_conversion_factor;
} else {
collision +=
fc3_normal_squared[ti * num_band0 * num_band *
num_band +
k * num_band * num_band +
l * num_band + m] *
g[ti * num_band0 * num_band * num_band +
k * num_band * num_band + l * num_band + m] *
inv_sinh[m] * unit_conversion_factor;
}
}
for (m = 0; m < 3; m++) {
for (n = 0; n < 3; n++) {
collision_matrix[k * 3 * num_ir_gp * num_band * 3 +
m * num_ir_gp * num_band * 3 +
i * num_band * 3 + l * 3 + n] +=
collision *
rotations_cartesian[j * 9 + m * 3 + n];
}
}
}
}
}
}
}
free(inv_sinh);
inv_sinh = NULL;
}
free(inv_sinh);
inv_sinh = NULL;
}
free(gp2tp_map);
gp2tp_map = NULL;
free(gp2tp_map);
gp2tp_map = NULL;
}
static void
get_reducible_collision_matrix(double *collision_matrix,
const double *fc3_normal_squared,
const long num_band0,
const long num_band,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long num_gp,
const long *map_q,
const double *g,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency)
{
long i, j, k, l, ti;
long *gp2tp_map;
double collision;
double *inv_sinh;
static void get_reducible_collision_matrix(
double *collision_matrix, const double *fc3_normal_squared,
const long num_band0, const long num_band, const double *frequencies,
const long (*triplets)[3], const long *triplets_map, const long num_gp,
const long *map_q, const double *g, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency) {
long i, j, k, l, ti, swapped;
long *gp2tp_map;
double collision;
double *inv_sinh;
gp2tp_map = create_gp2tp_map(triplets_map, num_gp);
gp2tp_map = create_gp2tp_map(triplets_map, num_gp);
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, k, l, ti, collision, inv_sinh)
#endif
for (i = 0; i < num_gp; i++) {
inv_sinh = (double*)malloc(sizeof(double) * num_band);
ti = gp2tp_map[triplets_map[i]];
get_inv_sinh(inv_sinh,
i,
temperature,
frequencies,
triplets[ti],
triplets_map,
map_q,
num_band,
cutoff_frequency);
for (i = 0; i < num_gp; i++) {
inv_sinh = (double *)malloc(sizeof(double) * num_band);
ti = gp2tp_map[triplets_map[i]];
swapped =
get_inv_sinh(inv_sinh, i, temperature, frequencies, triplets[ti],
triplets_map, map_q, num_band, cutoff_frequency);
for (j = 0; j < num_band0; j++) {
for (k = 0; k < num_band; k++) {
collision = 0;
for (l = 0; l < num_band; l++) {
collision +=
fc3_normal_squared[ti * num_band0 * num_band * num_band +
j * num_band * num_band +
k * num_band + l] *
g[ti * num_band0 * num_band * num_band +
j * num_band * num_band +
k * num_band + l] *
inv_sinh[l] * unit_conversion_factor;
for (j = 0; j < num_band0; j++) {
for (k = 0; k < num_band; k++) {
collision = 0;
for (l = 0; l < num_band; l++) {
if (swapped) {
collision +=
fc3_normal_squared[ti * num_band0 * num_band *
num_band +
j * num_band * num_band +
l * num_band + k] *
g[ti * num_band0 * num_band * num_band +
j * num_band * num_band + l * num_band + k] *
inv_sinh[l] * unit_conversion_factor;
} else {
collision +=
fc3_normal_squared[ti * num_band0 * num_band *
num_band +
j * num_band * num_band +
k * num_band + l] *
g[ti * num_band0 * num_band * num_band +
j * num_band * num_band + k * num_band + l] *
inv_sinh[l] * unit_conversion_factor;
}
}
collision_matrix[j * num_gp * num_band + i * num_band + k] +=
collision;
}
}
collision_matrix[j * num_gp * num_band + i * num_band + k] += collision;
}
free(inv_sinh);
inv_sinh = NULL;
}
free(inv_sinh);
inv_sinh = NULL;
}
free(gp2tp_map);
gp2tp_map = NULL;
free(gp2tp_map);
gp2tp_map = NULL;
}
static void get_inv_sinh(double *inv_sinh,
const long gp,
const double temperature,
const double *frequencies,
const long triplet[3],
const long *triplets_map,
const long *map_q,
const long num_band,
const double cutoff_frequency)
{
long i, gp2;
double f;
static long get_inv_sinh(double *inv_sinh, const long gp,
const double temperature, const double *frequencies,
const long triplet[3], const long *triplets_map,
const long *map_q, const long num_band,
const double cutoff_frequency) {
long i, gp2, swapped;
double f;
/* This assumes the algorithm of get_ir_triplets_at_q_perm_q1q2, */
/* where defined triplets_map[gp] == triplets_map[map_q[gp]]. */
/* If triplets_map[map_q[gp]] != map_q[gp], q1 and q2 are permuted. */
if (triplets_map[gp] == map_q[gp]) {
gp2 = triplet[2];
} else {
gp2 = triplet[1];
}
for (i = 0; i < num_band; i++) {
f = frequencies[gp2 * num_band + i];
if (f > cutoff_frequency) {
inv_sinh[i] = phonoc_inv_sinh_occupation(f, temperature);
/* This assumes the algorithm of get_ir_triplets_at_q_perm_q1q2, */
/* where defined triplets_map[gp] == triplets_map[map_q[gp]]. */
/* If triplets_map[map_q[gp]] != map_q[gp], q1 and q2 are permuted. */
if (triplets_map[gp] == map_q[gp]) {
gp2 = triplet[2];
swapped = 0;
} else {
inv_sinh[i] = 0;
gp2 = triplet[1];
swapped = 1;
}
}
for (i = 0; i < num_band; i++) {
f = frequencies[gp2 * num_band + i];
if (f > cutoff_frequency) {
inv_sinh[i] = phonoc_inv_sinh_occupation(f, temperature);
} else {
inv_sinh[i] = 0;
}
}
return swapped;
}
/* Symmetrically independent triplets are indexed. */
/* Inverse definition of ir_grid_points in get_BZ_triplets_at_q */
/* in triplet_grid.c. */
static long *create_gp2tp_map(const long *triplets_map,
const long num_gp)
{
long i, num_ir;
long *gp2tp_map;
static long *create_gp2tp_map(const long *triplets_map, const long num_gp) {
long i, num_ir;
long *gp2tp_map;
gp2tp_map = (long*)malloc(sizeof(long) * num_gp);
num_ir = 0;
for (i = 0; i < num_gp; i++) {
if (triplets_map[i] == i) {
gp2tp_map[i] = num_ir;
num_ir++;
} else { /* This should not be used. */
gp2tp_map[i] = -1;
gp2tp_map = (long *)malloc(sizeof(long) * num_gp);
num_ir = 0;
for (i = 0; i < num_gp; i++) {
if (triplets_map[i] == i) {
gp2tp_map[i] = num_ir;
num_ir++;
} else { /* This should not be used. */
gp2tp_map[i] = -1;
}
}
}
return gp2tp_map;
return gp2tp_map;
}

View File

@ -37,31 +37,18 @@
#include "phonoc_array.h"
void col_get_collision_matrix(double *collision_matrix,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long *map_q,
const long *rot_grid_points,
const double *rotations_cartesian,
const double *g,
const long num_ir_gp,
const long num_gp,
const long num_rot,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
void col_get_reducible_collision_matrix(double *collision_matrix,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long *map_q,
const double *g,
const long num_gp,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
void col_get_collision_matrix(
double *collision_matrix, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplets_map, const long *map_q, const long *rot_grid_points,
const double *rotations_cartesian, const double *g, const long num_ir_gp,
const long num_gp, const long num_rot, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
void col_get_reducible_collision_matrix(
double *collision_matrix, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplets_map, const long *map_q, const double *g,
const long num_gp, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -36,58 +36,42 @@
#define __dynmat_H__
long dym_get_dynamical_matrix_at_q(double *dynamical_matrix,
const long num_patom,
const long num_satom,
const double *fc,
const double q[3],
const long num_patom, const long num_satom,
const double *fc, const double q[3],
const double (*svecs)[3],
const long (*multi)[2],
const double *mass,
const long *s2p_map,
const long *p2s_map,
const long (*multi)[2], const double *mass,
const long *s2p_map, const long *p2s_map,
const double (*charge_sum)[3][3],
const long with_openmp);
void dym_get_recip_dipole_dipole(double *dd, /* [natom, 3, natom, 3, (real,imag)] */
const double *dd_q0, /* [natom, 3, 3, (real,imag)] */
const double (*G_list)[3], /* [num_G, 3] */
const long num_G,
const long num_patom,
const double q_cart[3],
const double *q_direction_cart, /* must be pointer */
const double (*born)[3][3],
const double dielectric[3][3],
const double (*pos)[3], /* [num_patom, 3] */
const double factor, /* 4pi/V*unit-conv */
const double lambda,
const double tolerance);
void dym_get_recip_dipole_dipole_q0(double *dd_q0, /* [natom, 3, 3, (real,imag)] */
const double (*G_list)[3], /* [num_G, 3] */
const long num_G,
const long num_patom,
const double (*born)[3][3],
const double dielectric[3][3],
const double (*pos)[3], /* [natom, 3] */
const double lambda,
const double tolerance);
void dym_get_charge_sum(double (*charge_sum)[3][3],
const long num_patom,
const double factor,
const double q_cart[3],
void dym_get_recip_dipole_dipole(
double *dd, /* [natom, 3, natom, 3, (real,imag)] */
const double *dd_q0, /* [natom, 3, 3, (real,imag)] */
const double (*G_list)[3], /* [num_G, 3] */
const long num_G, const long num_patom, const double q_cart[3],
const double *q_direction_cart, /* must be pointer */
const double (*born)[3][3], const double dielectric[3][3],
const double (*pos)[3], /* [num_patom, 3] */
const double factor, /* 4pi/V*unit-conv */
const double lambda, const double tolerance);
void dym_get_recip_dipole_dipole_q0(
double *dd_q0, /* [natom, 3, 3, (real,imag)] */
const double (*G_list)[3], /* [num_G, 3] */
const long num_G, const long num_patom, const double (*born)[3][3],
const double dielectric[3][3], const double (*pos)[3], /* [natom, 3] */
const double lambda, const double tolerance);
void dym_get_charge_sum(double (*charge_sum)[3][3], const long num_patom,
const double factor, const double q_cart[3],
const double (*born)[3][3]);
/* fc[num_patom, num_satom, 3, 3] */
/* dm[num_comm_points, num_patom * 3, num_patom *3] */
/* comm_points[num_satom / num_patom, 3] */
/* shortest_vectors[:, 3] */
/* multiplicities[num_satom, num_patom, 2] */
void dym_transform_dynmat_to_fc(double *fc,
const double *dm,
void dym_transform_dynmat_to_fc(double *fc, const double *dm,
const double (*comm_points)[3],
const double (*svecs)[3],
const long (*multi)[2],
const double *masses,
const long *s2pp_map,
const long *fc_index_map,
const long num_patom,
const long num_satom);
const long (*multi)[2], const double *masses,
const long *s2pp_map, const long *fc_index_map,
const long num_patom, const long num_satom);
#endif

926
c/fc3.c

File diff suppressed because it is too large Load Diff

36
c/fc3.h
View File

@ -35,35 +35,21 @@
#ifndef __fc3_H__
#define __fc3_H__
void fc3_distribute_fc3(double *fc3,
const long target,
const long source,
const long *atom_mapping,
const long num_atom,
void fc3_distribute_fc3(double *fc3, const long target, const long source,
const long *atom_mapping, const long num_atom,
const double *rot_cart);
void fc3_rotate_delta_fc2(double (*fc3)[3][3][3],
const double (*delta_fc2s)[3][3],
const double *inv_U,
const double (*delta_fc2s)[3][3], const double *inv_U,
const double (*site_sym_cart)[3][3],
const long *rot_map_syms,
const long num_atom,
const long num_site_sym,
const long num_disp);
const long *rot_map_syms, const long num_atom,
const long num_site_sym, const long num_disp);
void fc3_set_permutation_symmetry_fc3(double *fc3, const long num_atom);
void fc3_set_permutation_symmetry_compact_fc3(double * fc3,
const long p2s[],
const long s2pp[],
const long nsym_list[],
const long perms[],
const long n_satom,
const long n_patom);
void fc3_transpose_compact_fc3(double * fc3,
const long p2s[],
const long s2pp[],
const long nsym_list[],
const long perms[],
const long n_satom,
const long n_patom,
void fc3_set_permutation_symmetry_compact_fc3(
double *fc3, const long p2s[], const long s2pp[], const long nsym_list[],
const long perms[], const long n_satom, const long n_patom);
void fc3_transpose_compact_fc3(double *fc3, const long p2s[], const long s2pp[],
const long nsym_list[], const long perms[],
const long n_satom, const long n_patom,
const long t_type);
#endif

View File

@ -32,10 +32,12 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include <stdio.h>
#include <stddef.h>
#include <assert.h>
#include "grgrid.h"
#include <assert.h>
#include <stddef.h>
#include <stdio.h>
#include "lagrid.h"
#include "snf3x3.h"
@ -43,59 +45,47 @@
static void reduce_grid_address(long address[3], const long D_diag[3]);
static long get_double_grid_index(const long address_double[3],
const long D_diag[3],
const long PS[3]);
const long D_diag[3], const long PS[3]);
static long get_grid_index_from_address(const long address[3],
const long D_diag[3]);
static void get_all_grid_addresses(long grid_address[][3],
const long D_diag[3]);
static void get_grid_address_from_index(long address[3],
const long grid_index,
static void get_grid_address_from_index(long address[3], const long grid_index,
const long D_diag[3]);
static void get_grid_address(long address[3],
const long address_double[3],
static void get_grid_address(long address[3], const long address_double[3],
const long PS[3]);
static void get_double_grid_address(long address_double[3],
const long address[3],
const long PS[3]);
static long rotate_grid_index(const long grid_index,
const long rotation[3][3],
const long D_diag[3],
const long PS[3]);
static void get_ir_grid_map(long *ir_grid_map,
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long address[3], const long PS[3]);
static long rotate_grid_index(const long grid_index, const long rotation[3][3],
const long D_diag[3], const long PS[3]);
static void get_ir_grid_map(long *ir_grid_map, const long (*rotations)[3][3],
const long num_rot, const long D_diag[3],
const long PS[3]);
long grg_get_snf3x3(long D_diag[3], long P[3][3], long Q[3][3],
const long A[3][3]) {
long i, j, succeeded;
long D[3][3];
long grg_get_snf3x3(long D_diag[3],
long P[3][3],
long Q[3][3],
const long A[3][3])
{
long i, j, succeeded;
long D[3][3];
succeeded = 0;
succeeded = 0;
if (lagmat_get_determinant_l3(A) == 0) {
goto err;
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
D[i][j] = A[i][j];
if (lagmat_get_determinant_l3(A) == 0) {
goto err;
}
}
succeeded = snf3x3(D, P, Q);
for (i = 0; i < 3; i++) {
D_diag[i] = D[i][i];
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
D[i][j] = A[i][j];
}
}
succeeded = snf3x3(D, P, Q);
for (i = 0; i < 3; i++) {
D_diag[i] = D[i][i];
}
err:
return succeeded;
return succeeded;
}
/*----------------------------------------*/
@ -107,36 +97,34 @@ err:
/* vectors. */
/* num_rot : Number of rotations */
long grg_transform_rotations(long (*transformed_rots)[3][3],
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long Q[3][3])
{
long i, j, k;
double r[3][3], Q_double[3][3];
const long (*rotations)[3][3], const long num_rot,
const long D_diag[3], const long Q[3][3]) {
long i, j, k;
double r[3][3], Q_double[3][3];
/* Compute D(Q^-1)RQ(D^-1) by three steps */
/* It is assumed that |det(Q)|=1 and Q^-1 has relatively small round-off */
/* error, and we want to divide by D carefully. */
/* 1. Compute (Q^-1)RQ */
/* 2. Compute D(Q^-1)RQ */
/* 3. Compute D(Q^-1)RQ(D^-1) */
lagmat_cast_matrix_3l_to_3d(Q_double, Q);
for (i = 0; i < num_rot; i++) {
lagmat_get_similar_matrix_ld3(r, rotations[i], Q_double, 0);
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
r[j][k] *= D_diag[j];
r[j][k] /= D_diag[k];
}
/* Compute D(Q^-1)RQ(D^-1) by three steps */
/* It is assumed that |det(Q)|=1 and Q^-1 has relatively small round-off */
/* error, and we want to divide by D carefully. */
/* 1. Compute (Q^-1)RQ */
/* 2. Compute D(Q^-1)RQ */
/* 3. Compute D(Q^-1)RQ(D^-1) */
lagmat_cast_matrix_3l_to_3d(Q_double, Q);
for (i = 0; i < num_rot; i++) {
lagmat_get_similar_matrix_ld3(r, rotations[i], Q_double, 0);
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
r[j][k] *= D_diag[j];
r[j][k] /= D_diag[k];
}
}
lagmat_cast_matrix_3d_to_3l(transformed_rots[i], r);
if (!lagmat_check_identity_matrix_ld3(transformed_rots[i], r,
IDENTITY_TOL)) {
return 0;
}
}
lagmat_cast_matrix_3d_to_3l(transformed_rots[i], r);
if (!lagmat_check_identity_matrix_ld3(transformed_rots[i], r, IDENTITY_TOL)) {
return 0;
}
}
return 1;
return 1;
}
/* -------------------------------*/
@ -144,9 +132,8 @@ long grg_transform_rotations(long (*transformed_rots)[3][3],
/* -------------------------------*/
/* address : Single grid address. */
/* D_diag : Diagnal elements of D. */
void grg_get_all_grid_addresses(long (*grid_address)[3], const long D_diag[3])
{
get_all_grid_addresses(grid_address, D_diag);
void grg_get_all_grid_addresses(long (*grid_address)[3], const long D_diag[3]) {
get_all_grid_addresses(grid_address, D_diag);
}
/* -------------------------------------------------------*/
@ -157,11 +144,9 @@ void grg_get_all_grid_addresses(long (*grid_address)[3], const long D_diag[3])
/* address_double : Double grid address. */
/* address : Single grid address. */
/* PS : Shifts transformed by P. s_i is 0 or 1. */
void grg_get_double_grid_address(long address_double[3],
const long address[3],
const long PS[3])
{
get_double_grid_address(address_double, address, PS);
void grg_get_double_grid_address(long address_double[3], const long address[3],
const long PS[3]) {
get_double_grid_address(address_double, address, PS);
}
/* -------------------------------------------------------*/
@ -172,11 +157,9 @@ void grg_get_double_grid_address(long address_double[3],
/* address : Single grid address. */
/* address_double : Double grid address. */
/* PS : Shifts transformed by P. s_i is 0 or 1. */
void grg_get_grid_address(long address[3],
const long address_double[3],
const long PS[3])
{
get_grid_address(address, address_double, PS);
void grg_get_grid_address(long address[3], const long address_double[3],
const long PS[3]) {
get_grid_address(address, address_double, PS);
}
/* -------------------------------------------------*/
@ -186,10 +169,8 @@ void grg_get_grid_address(long address[3],
/* D_diag : Diagnal elements of D. */
/* PS : Shifts transformed by P. s_i is 0 or 1. */
long grg_get_double_grid_index(const long address_double[3],
const long D_diag[3],
const long PS[3])
{
return get_double_grid_index(address_double, D_diag, PS);
const long D_diag[3], const long PS[3]) {
return get_double_grid_index(address_double, D_diag, PS);
}
/* -------------------------------------------------*/
@ -197,13 +178,12 @@ long grg_get_double_grid_index(const long address_double[3],
/* -------------------------------------------------*/
/* address : Single grid address. */
/* D_diag : Diagnal elements of D. */
long grg_get_grid_index(const long address[3], const long D_diag[3])
{
long red_adrs[3];
long grg_get_grid_index(const long address[3], const long D_diag[3]) {
long red_adrs[3];
lagmat_copy_vector_l3(red_adrs, address);
reduce_grid_address(red_adrs, D_diag);
return get_grid_index_from_address(red_adrs, D_diag);
lagmat_copy_vector_l3(red_adrs, address);
reduce_grid_address(red_adrs, D_diag);
return get_grid_index_from_address(red_adrs, D_diag);
}
/* ---------------------------------------*/
@ -211,39 +191,26 @@ long grg_get_grid_index(const long address[3], const long D_diag[3])
/* ---------------------------------------*/
/* address : Single grid address. */
/* D_diag : Diagnal elements of D. */
void grg_get_grid_address_from_index(long address[3],
const long grid_index,
const long D_diag[3])
{
get_grid_address_from_index(address, grid_index, D_diag);
void grg_get_grid_address_from_index(long address[3], const long grid_index,
const long D_diag[3]) {
get_grid_address_from_index(address, grid_index, D_diag);
}
/* ---------------------------*/
/* Rotate grid point by index */
/* ---------------------------*/
long grg_rotate_grid_index(const long grid_index,
const long rotation[3][3],
const long D_diag[3],
const long PS[3])
{
return rotate_grid_index(grid_index, rotation, D_diag, PS);
long grg_rotate_grid_index(const long grid_index, const long rotation[3][3],
const long D_diag[3], const long PS[3]) {
return rotate_grid_index(grid_index, rotation, D_diag, PS);
}
/* -----------------------------*/
/* Find irreducible grid points */
/* -----------------------------*/
void grg_get_ir_grid_map(long *ir_grid_map,
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long PS[3])
{
get_ir_grid_map(ir_grid_map,
rotations,
num_rot,
D_diag,
PS);
void grg_get_ir_grid_map(long *ir_grid_map, const long (*rotations)[3][3],
const long num_rot, const long D_diag[3],
const long PS[3]) {
get_ir_grid_map(ir_grid_map, rotations, num_rot, D_diag, PS);
}
/* Unique reciprocal rotations are collected from input rotations. */
@ -261,83 +228,74 @@ long grg_get_reciprocal_point_group(long rec_rotations[48][3][3],
const long is_transpose)
{
long i, j, num_rot_ret, inv_exist;
const long inversion[3][3] = {
{-1, 0, 0 },
{ 0,-1, 0 },
{ 0, 0,-1 }
};
long i, j, num_rot_ret, inv_exist;
const long inversion[3][3] = {{-1, 0, 0}, {0, -1, 0}, {0, 0, -1}};
/* Collect unique rotations */
num_rot_ret = 0;
for (i = 0; i < num_rot; i++) {
for (j = 0; j < num_rot_ret; j++) {
if (lagmat_check_identity_matrix_l3(rotations[i], rec_rotations[j])) {
goto escape;
}
}
if (num_rot_ret == 48) {
goto err;
}
lagmat_copy_matrix_l3(rec_rotations[num_rot_ret], rotations[i]);
num_rot_ret++;
escape:
;
}
if (is_transpose) {
for (i = 0; i < num_rot_ret; i++) {
lagmat_transpose_matrix_l3(rec_rotations[i], rec_rotations[i]);
}
}
if (is_time_reversal) {
inv_exist = 0;
for (i = 0; i < num_rot_ret; i++) {
if (lagmat_check_identity_matrix_l3(inversion, rec_rotations[i])) {
inv_exist = 1;
break;
}
/* Collect unique rotations */
num_rot_ret = 0;
for (i = 0; i < num_rot; i++) {
for (j = 0; j < num_rot_ret; j++) {
if (lagmat_check_identity_matrix_l3(rotations[i],
rec_rotations[j])) {
goto escape;
}
}
if (num_rot_ret == 48) {
goto err;
}
lagmat_copy_matrix_l3(rec_rotations[num_rot_ret], rotations[i]);
num_rot_ret++;
escape:;
}
if (!inv_exist) {
if (num_rot_ret > 24) {
goto err;
}
for (i = 0; i < num_rot_ret; i++) {
lagmat_multiply_matrix_l3(rec_rotations[num_rot_ret + i],
inversion, rec_rotations[i]);
}
num_rot_ret *= 2;
if (is_transpose) {
for (i = 0; i < num_rot_ret; i++) {
lagmat_transpose_matrix_l3(rec_rotations[i], rec_rotations[i]);
}
}
}
return num_rot_ret;
if (is_time_reversal) {
inv_exist = 0;
for (i = 0; i < num_rot_ret; i++) {
if (lagmat_check_identity_matrix_l3(inversion, rec_rotations[i])) {
inv_exist = 1;
break;
}
}
if (!inv_exist) {
if (num_rot_ret > 24) {
goto err;
}
for (i = 0; i < num_rot_ret; i++) {
lagmat_multiply_matrix_l3(rec_rotations[num_rot_ret + i],
inversion, rec_rotations[i]);
}
num_rot_ret *= 2;
}
}
return num_rot_ret;
err:
return 0;
return 0;
}
static void reduce_grid_address(long address[3], const long D_diag[3]) {
long i;
static void reduce_grid_address(long address[3], const long D_diag[3])
{
long i;
for (i = 0; i < 3; i++) {
address[i] = lagmat_modulo_l(address[i], D_diag[i]);
}
for (i = 0; i < 3; i++) {
address[i] = lagmat_modulo_l(address[i], D_diag[i]);
}
}
static long get_double_grid_index(const long address_double[3],
const long D_diag[3],
const long PS[3])
{
long address[3];
const long D_diag[3], const long PS[3]) {
long address[3];
get_grid_address(address, address_double, PS);
reduce_grid_address(address, D_diag);
return get_grid_index_from_address(address, D_diag);
get_grid_address(address, address_double, PS);
reduce_grid_address(address, D_diag);
return get_grid_index_from_address(address, D_diag);
}
/* Here address elements have to be zero or positive. */
@ -345,126 +303,111 @@ static long get_double_grid_index(const long address_double[3],
/* done outside of this function. */
/* See kgrid.h about GRID_ORDER_XYZ information. */
static long get_grid_index_from_address(const long address[3],
const long D_diag[3])
{
const long D_diag[3]) {
#ifndef GRID_ORDER_XYZ
return (address[2] * D_diag[0] * D_diag[1]
+ address[1] * D_diag[0] + address[0]);
return (address[2] * D_diag[0] * D_diag[1] + address[1] * D_diag[0] +
address[0]);
#else
return (address[0] * D_diag[1] * D_diag[2]
+ address[1] * D_diag[2] + address[2]);
return (address[0] * D_diag[1] * D_diag[2] + address[1] * D_diag[2] +
address[2]);
#endif
}
static void get_all_grid_addresses(long grid_address[][3],
const long D_diag[3])
{
long i, j, k, grid_index;
long address[3];
const long D_diag[3]) {
long i, j, k, grid_index;
long address[3];
for (i = 0; i < D_diag[0]; i++) {
address[0] = i;
for (j = 0; j < D_diag[1]; j++) {
address[1] = j;
for (k = 0; k < D_diag[2]; k++) {
address[2] = k;
grid_index = get_grid_index_from_address(address, D_diag);
lagmat_copy_vector_l3(grid_address[grid_index], address);
}
for (i = 0; i < D_diag[0]; i++) {
address[0] = i;
for (j = 0; j < D_diag[1]; j++) {
address[1] = j;
for (k = 0; k < D_diag[2]; k++) {
address[2] = k;
grid_index = get_grid_index_from_address(address, D_diag);
lagmat_copy_vector_l3(grid_address[grid_index], address);
}
}
}
}
}
/* See grg_get_grid_address_from_index */
static void get_grid_address_from_index(long address[3],
const long grid_index,
const long D_diag[3])
{
long nn;
static void get_grid_address_from_index(long address[3], const long grid_index,
const long D_diag[3]) {
long nn;
#ifndef GRID_ORDER_XYZ
nn = D_diag[0] * D_diag[1];
address[0] = grid_index % D_diag[0];
address[2] = grid_index / nn;
address[1] = (grid_index - address[2] * nn) / D_diag[0];
nn = D_diag[0] * D_diag[1];
address[0] = grid_index % D_diag[0];
address[2] = grid_index / nn;
address[1] = (grid_index - address[2] * nn) / D_diag[0];
#else
nn = D_diag[1] * D_diag[2];
address[2] = grid_index % D_diag[2];
address[0] = grid_index / nn;
address[1] = (grid_index - address[0] * nn) / D_diag[2];
nn = D_diag[1] * D_diag[2];
address[2] = grid_index % D_diag[2];
address[0] = grid_index / nn;
address[1] = (grid_index - address[0] * nn) / D_diag[2];
#endif
}
/* Usually address has to be reduced to [0, D_diag[i]) */
/* by calling reduce_grid_address after this operation. */
static void get_grid_address(long address[3],
const long address_double[3],
const long PS[3])
{
long i;
static void get_grid_address(long address[3], const long address_double[3],
const long PS[3]) {
long i;
for (i = 0; i < 3; i++) {
address[i] = (address_double[i] - PS[i]) / 2;
}
for (i = 0; i < 3; i++) {
address[i] = (address_double[i] - PS[i]) / 2;
}
}
/* Usually address_double has to be reduced to [0, 2*D_diag[i]) */
/* by calling reduce_double_grid_address after this operation. */
static void get_double_grid_address(long address_double[3],
const long address[3],
const long PS[3])
{
long i;
const long address[3], const long PS[3]) {
long i;
for (i = 0; i < 3; i++) {
address_double[i] = address[i] * 2 + PS[i];
}
for (i = 0; i < 3; i++) {
address_double[i] = address[i] * 2 + PS[i];
}
}
static long rotate_grid_index(const long grid_index,
const long rotation[3][3],
const long D_diag[3],
const long PS[3])
{
long adrs[3], dadrs[3], dadrs_rot[3];
static long rotate_grid_index(const long grid_index, const long rotation[3][3],
const long D_diag[3], const long PS[3]) {
long adrs[3], dadrs[3], dadrs_rot[3];
get_grid_address_from_index(adrs, grid_index, D_diag);
get_double_grid_address(dadrs, adrs, PS);
lagmat_multiply_matrix_vector_l3(dadrs_rot, rotation, dadrs);
return get_double_grid_index(dadrs_rot, D_diag, PS);
get_grid_address_from_index(adrs, grid_index, D_diag);
get_double_grid_address(dadrs, adrs, PS);
lagmat_multiply_matrix_vector_l3(dadrs_rot, rotation, dadrs);
return get_double_grid_index(dadrs_rot, D_diag, PS);
}
/* Find ir-grid points. */
/* This algorithm relies on the ir-grid index is always smallest */
/* number among symmetrically equivalent grid points. */
static void get_ir_grid_map(long *ir_grid_map,
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long PS[3])
{
long gp, num_gp, r_gp;
long i;
static void get_ir_grid_map(long *ir_grid_map, const long (*rotations)[3][3],
const long num_rot, const long D_diag[3],
const long PS[3]) {
long gp, num_gp, r_gp;
long i;
num_gp = D_diag[0] * D_diag[1] * D_diag[2];
num_gp = D_diag[0] * D_diag[1] * D_diag[2];
for (gp = 0; gp < num_gp; gp++) {
ir_grid_map[gp] = num_gp;
}
/* Do not simply multithreaded this for-loop. */
/* This algorithm contains race condition in different gp's. */
for (gp = 0; gp < num_gp; gp++) {
for (i = 0; i < num_rot; i++) {
r_gp = rotate_grid_index(gp, rotations[i], D_diag, PS);
if (r_gp < gp) {
ir_grid_map[gp] = ir_grid_map[r_gp];
break;
}
for (gp = 0; gp < num_gp; gp++) {
ir_grid_map[gp] = num_gp;
}
if (ir_grid_map[gp] == num_gp) {
ir_grid_map[gp] = gp;
}
}
/* Do not simply multithreaded this for-loop. */
/* This algorithm contains race condition in different gp's. */
for (gp = 0; gp < num_gp; gp++) {
for (i = 0; i < num_rot; i++) {
r_gp = rotate_grid_index(gp, rotations[i], D_diag, PS);
if (r_gp < gp) {
ir_grid_map[gp] = ir_grid_map[r_gp];
break;
}
}
if (ir_grid_map[gp] == num_gp) {
ir_grid_map[gp] = gp;
}
}
}

View File

@ -37,38 +37,25 @@
#include <stddef.h>
long grg_get_snf3x3(long D_diag[3],
long P[3][3],
long Q[3][3],
long grg_get_snf3x3(long D_diag[3], long P[3][3], long Q[3][3],
const long A[3][3]);
long grg_transform_rotations(long (*transformed_rots)[3][3],
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long Q[3][3]);
const long (*rotations)[3][3], const long num_rot,
const long D_diag[3], const long Q[3][3]);
void grg_get_all_grid_addresses(long (*grid_address)[3], const long D_diag[3]);
void grg_get_double_grid_address(long address_double[3],
const long address[3],
void grg_get_double_grid_address(long address_double[3], const long address[3],
const long PS[3]);
void grg_get_grid_address(long address[3],
const long address_double[3],
void grg_get_grid_address(long address[3], const long address_double[3],
const long PS[3]);
long grg_get_grid_index(const long address[3],
const long D_diag[3]);
long grg_get_grid_index(const long address[3], const long D_diag[3]);
long grg_get_double_grid_index(const long address_double[3],
const long D_diag[3],
const long PS[3]);
void grg_get_grid_address_from_index(long address[3],
const long grid_index,
const long D_diag[3], const long PS[3]);
void grg_get_grid_address_from_index(long address[3], const long grid_index,
const long D_diag[3]);
long grg_rotate_grid_index(const long grid_index,
const long rotations[3][3],
const long D_diag[3],
const long PS[3]);
void grg_get_ir_grid_map(long *ir_grid_map,
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
long grg_rotate_grid_index(const long grid_index, const long rotations[3][3],
const long D_diag[3], const long PS[3]);
void grg_get_ir_grid_map(long *ir_grid_map, const long (*rotations)[3][3],
const long num_rot, const long D_diag[3],
const long PS[3]);
long grg_get_reciprocal_point_group(long rec_rotations[48][3][3],
const long (*rotations)[3][3],

View File

@ -34,133 +34,94 @@
#include "gridsys.h"
#include <stdio.h>
#include <stdlib.h>
#include "bzgrid.h"
#include "lagrid.h"
#include "grgrid.h"
#include "lagrid.h"
#include "tetrahedron_method.h"
#include "triplet.h"
#include "triplet_iw.h"
#include <stdio.h>
#include <stdlib.h>
void gridsys_get_all_grid_addresses(long (*gr_grid_addresses)[3],
const long D_diag[3])
{
grg_get_all_grid_addresses(gr_grid_addresses, D_diag);
const long D_diag[3]) {
grg_get_all_grid_addresses(gr_grid_addresses, D_diag);
}
void gridsys_get_double_grid_address(long address_double[3],
const long address[3],
const long PS[3])
{
grg_get_double_grid_address(address_double, address, PS);
const long address[3], const long PS[3]) {
grg_get_double_grid_address(address_double, address, PS);
}
void gridsys_get_grid_address_from_index(long address[3],
const long grid_index,
const long D_diag[3])
{
grg_get_grid_address_from_index(address, grid_index, D_diag);
void gridsys_get_grid_address_from_index(long address[3], const long grid_index,
const long D_diag[3]) {
grg_get_grid_address_from_index(address, grid_index, D_diag);
}
long gridsys_get_double_grid_index(const long address_double[3],
const long D_diag[3],
const long PS[3])
{
return grg_get_double_grid_index(address_double, D_diag, PS);
const long D_diag[3], const long PS[3]) {
return grg_get_double_grid_index(address_double, D_diag, PS);
}
/* From single address to grid index */
long gridsys_get_grid_index_from_address(const long address[3],
const long D_diag[3])
{
return grg_get_grid_index(address, D_diag);
const long D_diag[3]) {
return grg_get_grid_index(address, D_diag);
}
long gridsys_rotate_grid_index(const long grid_index,
const long rotation[3][3],
const long D_diag[3],
const long PS[3])
{
return grg_rotate_grid_index(grid_index, rotation, D_diag, PS);
long gridsys_rotate_grid_index(const long grid_index, const long rotation[3][3],
const long D_diag[3], const long PS[3]) {
return grg_rotate_grid_index(grid_index, rotation, D_diag, PS);
}
long gridsys_get_reciprocal_point_group(long rec_rotations[48][3][3],
const long (*rotations)[3][3],
const long num_rot,
const long is_time_reversal)
{
return grg_get_reciprocal_point_group(rec_rotations,
rotations,
num_rot,
is_time_reversal,
1);
const long is_time_reversal) {
return grg_get_reciprocal_point_group(rec_rotations, rotations, num_rot,
is_time_reversal, 1);
}
long gridsys_get_snf3x3(long D_diag[3],
long P[3][3],
long Q[3][3],
const long A[3][3])
{
return grg_get_snf3x3(D_diag, P, Q, A);
long gridsys_get_snf3x3(long D_diag[3], long P[3][3], long Q[3][3],
const long A[3][3]) {
return grg_get_snf3x3(D_diag, P, Q, A);
}
/* Rotation matrices with respect to reciprocal basis vectors are
* transformed to those for GRGrid. This set of the rotations are
* used always in GRGrid handling. */
long gridsys_transform_rotations(long (*transformed_rots)[3][3],
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long Q[3][3])
{
long succeeded;
succeeded = grg_transform_rotations(transformed_rots,
rotations,
num_rot,
D_diag,
Q);
return succeeded;
const long num_rot, const long D_diag[3],
const long Q[3][3]) {
long succeeded;
succeeded = grg_transform_rotations(transformed_rots, rotations, num_rot,
D_diag, Q);
return succeeded;
}
double gridsys_get_thm_integration_weight(const double omega,
const double tetrahedra_omegas[24][4],
const char function)
{
return thm_get_integration_weight(omega, tetrahedra_omegas, function);
const char function) {
return thm_get_integration_weight(omega, tetrahedra_omegas, function);
}
/* Get one dataset of relative grid address used for tetrahedron */
/* method. rec_lattice is used to choose the one. */
/* rec_lattice : microzone basis vectors in column vectors */
void gridsys_get_thm_relative_grid_address(long relative_grid_addresses[24][4][3],
const double rec_lattice[3][3])
{
thm_get_relative_grid_address(relative_grid_addresses, rec_lattice);
void gridsys_get_thm_relative_grid_address(
long relative_grid_addresses[24][4][3], const double rec_lattice[3][3]) {
thm_get_relative_grid_address(relative_grid_addresses, rec_lattice);
}
/* The rotations are those after proper transformation in GRGrid. */
void gridsys_get_ir_grid_map(long *ir_grid_map,
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long PS[3])
{
grg_get_ir_grid_map(ir_grid_map, rotations, num_rot, D_diag, PS);
void gridsys_get_ir_grid_map(long *ir_grid_map, const long (*rotations)[3][3],
const long num_rot, const long D_diag[3],
const long PS[3]) {
grg_get_ir_grid_map(ir_grid_map, rotations, num_rot, D_diag, PS);
}
/* Find shortest grid points from Gamma considering periodicity of */
/* reciprocal lattice. See the details in docstring of BZGrid. */
/* */
@ -184,188 +145,130 @@ void gridsys_get_ir_grid_map(long *ir_grid_map,
/* len(bzg2grg) == len(bz_grid_addresses) <= product(D_diag + 1). */
/* (function return) size : */
/* Number of bz_grid_addresses stored. */
long gridsys_get_bz_grid_addresses(long (*bz_grid_addresses)[3],
long *bz_map,
long *bzg2grg,
const long D_diag[3],
const long Q[3][3],
const long PS[3],
long gridsys_get_bz_grid_addresses(long (*bz_grid_addresses)[3], long *bz_map,
long *bzg2grg, const long D_diag[3],
const long Q[3][3], const long PS[3],
const double rec_lattice[3][3],
const long type)
{
BZGrid *bzgrid;
long i, j, size;
const long type) {
BZGrid *bzgrid;
long i, j, size;
if ((bzgrid = (BZGrid*) malloc(sizeof(BZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->bzg2grg = bzg2grg;
bzgrid->type = type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = D_diag[i];
bzgrid->PS[i] = PS[i];
for (j = 0; j < 3; j++) {
bzgrid->Q[i][j] = Q[i][j];
bzgrid->reclat[i][j] = rec_lattice[i][j];
if ((bzgrid = (BZGrid *)malloc(sizeof(BZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
}
if (bzg_get_bz_grid_addresses(bzgrid)) {
size = bzgrid->size;
} else {
size = 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->bzg2grg = bzg2grg;
bzgrid->type = type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = D_diag[i];
bzgrid->PS[i] = PS[i];
for (j = 0; j < 3; j++) {
bzgrid->Q[i][j] = Q[i][j];
bzgrid->reclat[i][j] = rec_lattice[i][j];
}
}
free(bzgrid);
bzgrid = NULL;
if (bzg_get_bz_grid_addresses(bzgrid)) {
size = bzgrid->size;
} else {
size = 0;
}
return size;
free(bzgrid);
bzgrid = NULL;
return size;
}
long gridsys_get_triplets_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long D_diag[3],
const long is_time_reversal,
const long num_rot,
long gridsys_get_triplets_at_q(long *map_triplets, long *map_q,
const long grid_point, const long D_diag[3],
const long is_time_reversal, const long num_rot,
const long (*rec_rotations)[3][3],
const long swappable)
{
return tpl_get_triplets_reciprocal_mesh_at_q(map_triplets,
map_q,
grid_point,
D_diag,
is_time_reversal,
num_rot,
rec_rotations,
swappable);
const long swappable) {
return tpl_get_triplets_reciprocal_mesh_at_q(
map_triplets, map_q, grid_point, D_diag, is_time_reversal, num_rot,
rec_rotations, swappable);
}
long gridsys_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
long gridsys_get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long *map_triplets,
const long *bz_map, const long *map_triplets,
const long num_map_triplets,
const long D_diag[3],
const long Q[3][3],
const long bz_grid_type)
{
ConstBZGrid *bzgrid;
long i, j, num_ir;
const long D_diag[3], const long Q[3][3],
const long bz_grid_type) {
ConstBZGrid *bzgrid;
long i, j, num_ir;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = D_diag[i];
bzgrid->PS[i] = 0;
for (j = 0; j < 3; j++) {
bzgrid->Q[i][j] = Q[i][j];
if ((bzgrid = (ConstBZGrid *)malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
}
bzgrid->size = num_map_triplets;
num_ir = tpl_get_BZ_triplets_at_q(triplets,
grid_point,
bzgrid,
map_triplets);
free(bzgrid);
bzgrid = NULL;
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = D_diag[i];
bzgrid->PS[i] = 0;
for (j = 0; j < 3; j++) {
bzgrid->Q[i][j] = Q[i][j];
}
}
bzgrid->size = num_map_triplets;
return num_ir;
num_ir =
tpl_get_BZ_triplets_at_q(triplets, grid_point, bzgrid, map_triplets);
free(bzgrid);
bzgrid = NULL;
return num_ir;
}
/* relative_grid_addresses are given as P multipled with those from */
/* dataset, i.e., */
/* np.dot(relative_grid_addresses, P.T) */
long gridsys_get_integration_weight(double *iw,
char *iw_zero,
const double *frequency_points,
const long num_band0,
const long relative_grid_address[24][4][3],
const long D_diag[3],
const long (*triplets)[3],
const long num_triplets,
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long bz_grid_type,
const double *frequencies1,
const long num_band1,
const double *frequencies2,
const long num_band2,
const long tp_type,
const long openmp_per_triplets,
const long openmp_per_bands)
{
ConstBZGrid *bzgrid;
long i;
long gridsys_get_integration_weight(
double *iw, char *iw_zero, const double *frequency_points,
const long num_band0, const long relative_grid_address[24][4][3],
const long D_diag[3], const long (*triplets)[3], const long num_triplets,
const long (*bz_grid_addresses)[3], const long *bz_map,
const long bz_grid_type, const double *frequencies1, const long num_band1,
const double *frequencies2, const long num_band2, const long tp_type,
const long openmp_per_triplets, const long openmp_per_bands) {
ConstBZGrid *bzgrid;
long i;
if ((bzgrid = (ConstBZGrid*) malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
if ((bzgrid = (ConstBZGrid *)malloc(sizeof(ConstBZGrid))) == NULL) {
warning_print("Memory could not be allocated.");
return 0;
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = D_diag[i];
}
bzgrid->addresses = bz_grid_addresses;
bzgrid->gp_map = bz_map;
bzgrid->type = bz_grid_type;
for (i = 0; i < 3; i++) {
bzgrid->D_diag[i] = D_diag[i];
}
tpl_get_integration_weight(iw,
iw_zero,
frequency_points,
num_band0,
relative_grid_address,
triplets,
num_triplets,
bzgrid,
frequencies1,
num_band1,
frequencies2,
num_band2,
tp_type,
openmp_per_triplets,
openmp_per_bands);
free(bzgrid);
bzgrid = NULL;
tpl_get_integration_weight(
iw, iw_zero, frequency_points, num_band0, relative_grid_address,
triplets, num_triplets, bzgrid, frequencies1, num_band1, frequencies2,
num_band2, tp_type, openmp_per_triplets, openmp_per_bands);
free(bzgrid);
bzgrid = NULL;
return 1;
return 1;
}
void gridsys_get_integration_weight_with_sigma(double *iw,
char *iw_zero,
const double sigma,
const double sigma_cutoff,
const double *frequency_points,
const long num_band0,
const long (*triplets)[3],
const long num_triplets,
const double *frequencies,
const long num_band,
const long tp_type)
{
tpl_get_integration_weight_with_sigma(iw,
iw_zero,
sigma,
sigma_cutoff,
frequency_points,
num_band0,
triplets,
num_triplets,
frequencies,
num_band,
tp_type);
void gridsys_get_integration_weight_with_sigma(
double *iw, char *iw_zero, const double sigma, const double sigma_cutoff,
const double *frequency_points, const long num_band0,
const long (*triplets)[3], const long num_triplets,
const double *frequencies, const long num_band, const long tp_type) {
tpl_get_integration_weight_with_sigma(
iw, iw_zero, sigma, sigma_cutoff, frequency_points, num_band0, triplets,
num_triplets, frequencies, num_band, tp_type);
}

View File

@ -42,98 +42,62 @@ extern "C" {
void gridsys_get_all_grid_addresses(long (*gr_grid_addresses)[3],
const long D_diag[3]);
void gridsys_get_double_grid_address(long address_double[3],
const long address[3],
const long PS[3]);
void gridsys_get_grid_address_from_index(long address[3],
const long grid_index,
const long address[3], const long PS[3]);
void gridsys_get_grid_address_from_index(long address[3], const long grid_index,
const long D_diag[3]);
long gridsys_get_double_grid_index(const long address_double[3],
const long D_diag[3],
const long PS[3]);
const long D_diag[3], const long PS[3]);
long gridsys_get_grid_index_from_address(const long address[3],
const long D_diag[3]);
long gridsys_rotate_grid_index(const long grid_index,
const long rotation[3][3],
const long D_diag[3],
const long PS[3]);
long gridsys_rotate_grid_index(const long grid_index, const long rotation[3][3],
const long D_diag[3], const long PS[3]);
long gridsys_get_reciprocal_point_group(long rec_rotations[48][3][3],
const long (*rotations)[3][3],
const long num_rot,
const long is_time_reversal);
long gridsys_get_snf3x3(long D_diag[3],
long P[3][3],
long Q[3][3],
long gridsys_get_snf3x3(long D_diag[3], long P[3][3], long Q[3][3],
const long A[3][3]);
long gridsys_transform_rotations(long (*transformed_rots)[3][3],
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long num_rot, const long D_diag[3],
const long Q[3][3]);
double gridsys_get_thm_integration_weight(const double omega,
const double tetrahedra_omegas[24][4],
const char function);
void gridsys_get_thm_relative_grid_address(long relative_grid_addresses[24][4][3],
const double rec_lattice[3][3]);
void gridsys_get_ir_grid_map(long *ir_grid_map,
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
void gridsys_get_thm_relative_grid_address(
long relative_grid_addresses[24][4][3], const double rec_lattice[3][3]);
void gridsys_get_ir_grid_map(long *ir_grid_map, const long (*rotations)[3][3],
const long num_rot, const long D_diag[3],
const long PS[3]);
long gridsys_get_bz_grid_addresses(long (*bz_grid_addresses)[3],
long *bz_map,
long *bzg2grg,
const long D_diag[3],
const long Q[3][3],
const long PS[3],
long gridsys_get_bz_grid_addresses(long (*bz_grid_addresses)[3], long *bz_map,
long *bzg2grg, const long D_diag[3],
const long Q[3][3], const long PS[3],
const double rec_lattice[3][3],
const long type);
long gridsys_get_triplets_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long D_diag[3],
const long is_time_reversal,
const long num_rot,
long gridsys_get_triplets_at_q(long *map_triplets, long *map_q,
const long grid_point, const long D_diag[3],
const long is_time_reversal, const long num_rot,
const long (*rec_rotations)[3][3],
const long swappable);
long gridsys_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
long gridsys_get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long *map_triplets,
const long *bz_map, const long *map_triplets,
const long num_map_triplets,
const long D_diag[3],
const long Q[3][3],
const long D_diag[3], const long Q[3][3],
const long bz_grid_type);
long gridsys_get_integration_weight(double *iw,
char *iw_zero,
const double *frequency_points,
const long num_band0,
const long relative_grid_address[24][4][3],
const long D_diag[3],
const long (*triplets)[3],
const long num_triplets,
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long bz_grid_type,
const double *frequencies1,
const long num_band1,
const double *frequencies2,
const long num_band2,
const long tp_type,
const long openmp_per_triplets,
const long openmp_per_bands);
void gridsys_get_integration_weight_with_sigma(double *iw,
char *iw_zero,
const double sigma,
const double sigma_cutoff,
const double *frequency_points,
const long num_band0,
const long (*triplets)[3],
const long num_triplets,
const double *frequencies,
const long num_band,
const long tp_type);
long gridsys_get_integration_weight(
double *iw, char *iw_zero, const double *frequency_points,
const long num_band0, const long relative_grid_address[24][4][3],
const long D_diag[3], const long (*triplets)[3], const long num_triplets,
const long (*bz_grid_addresses)[3], const long *bz_map,
const long bz_grid_type, const double *frequencies1, const long num_band1,
const double *frequencies2, const long num_band2, const long tp_type,
const long openmp_per_triplets, const long openmp_per_bands);
void gridsys_get_integration_weight_with_sigma(
double *iw, char *iw_zero, const double sigma, const double sigma_cutoff,
const double *frequency_points, const long num_band0,
const long (*triplets)[3], const long num_triplets,
const double *frequencies, const long num_band, const long tp_type);
#ifdef __cplusplus
}

View File

@ -32,506 +32,411 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "imag_self_energy_with_g.h"
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include "lagrid.h"
#include "phonoc_array.h"
#include "phonoc_utils.h"
#include "imag_self_energy_with_g.h"
#include "triplet.h"
static long ise_set_g_pos_frequency_point(long (*g_pos)[4],
const long num_band0,
const long num_band,
const char *g_zero);
static void
detailed_imag_self_energy_at_triplet(double *detailed_imag_self_energy,
double *imag_self_energy,
const long num_band0,
const long num_band,
const double *fc3_normal_squared,
const double *frequencies,
const long triplet[3],
const double *g1,
const double *g2_3,
const char *g_zero,
const double *temperatures,
const long num_temps,
const double cutoff_frequency);
static double
collect_detailed_imag_self_energy(double *imag_self_energy,
const long num_band,
const double *fc3_normal_squared,
const double *n1,
const double *n2,
const double *g1,
const double *g2_3,
const char *g_zero);
static double
collect_detailed_imag_self_energy_0K(double *imag_self_energy,
const long num_band,
const double *fc3_normal_squared,
const double *n1,
const double *n2,
const double *g,
const char *g_zero);
static void set_occupations(double *n1,
double *n2,
const long num_band,
const double temperature,
const long triplet[3],
static void detailed_imag_self_energy_at_triplet(
double *detailed_imag_self_energy, double *imag_self_energy,
const long num_band0, const long num_band, const double *fc3_normal_squared,
const double *frequencies, const long triplet[3], const double *g1,
const double *g2_3, const char *g_zero, const double *temperatures,
const long num_temps, const double cutoff_frequency);
static double collect_detailed_imag_self_energy(
double *imag_self_energy, const long num_band,
const double *fc3_normal_squared, const double *n1, const double *n2,
const double *g1, const double *g2_3, const char *g_zero);
static double collect_detailed_imag_self_energy_0K(
double *imag_self_energy, const long num_band,
const double *fc3_normal_squared, const double *n1, const double *n2,
const double *g, const char *g_zero);
static void set_occupations(double *n1, double *n2, const long num_band,
const double temperature, const long triplet[3],
const double *frequencies,
const double cutoff_frequency);
void ise_get_imag_self_energy_at_bands_with_g(double *imag_self_energy,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double *g,
const char *g_zero,
const double temperature,
const double cutoff_frequency,
const long num_frequency_points,
const long frequency_point_index)
{
long i, j, num_triplets, num_band0, num_band, num_band_prod;
long num_g_pos, g_index_dims, g_index_shift;
long (*g_pos)[4];
double *ise;
long at_a_frequency_point;
void ise_get_imag_self_energy_at_bands_with_g(
double *imag_self_energy, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double *g, const char *g_zero,
const double temperature, const double cutoff_frequency,
const long num_frequency_points, const long frequency_point_index) {
long i, j, num_triplets, num_band0, num_band, num_band_prod;
long num_g_pos, g_index_dims, g_index_shift;
long(*g_pos)[4];
double *ise;
long at_a_frequency_point;
g_pos = NULL;
ise = NULL;
g_pos = NULL;
ise = NULL;
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
num_band_prod = num_band0 * num_band * num_band;
ise = (double*)malloc(sizeof(double) * num_triplets * num_band0);
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
num_band_prod = num_band0 * num_band * num_band;
ise = (double *)malloc(sizeof(double) * num_triplets * num_band0);
if (frequency_point_index < 0) {
/* frequency_points == frequencies at bands */
at_a_frequency_point = 0;
g_index_dims = num_band_prod;
g_index_shift = 0;
} else {
/* At an arbitrary frequency point. */
at_a_frequency_point = 1;
g_index_dims = num_frequency_points * num_band * num_band;
g_index_shift = frequency_point_index * num_band * num_band;
}
if (frequency_point_index < 0) {
/* frequency_points == frequencies at bands */
at_a_frequency_point = 0;
g_index_dims = num_band_prod;
g_index_shift = 0;
} else {
/* At an arbitrary frequency point. */
at_a_frequency_point = 1;
g_index_dims = num_frequency_points * num_band * num_band;
g_index_shift = frequency_point_index * num_band * num_band;
}
#ifdef PHPYOPENMP
#pragma omp parallel for private(num_g_pos, j, g_pos)
#endif
for (i = 0; i < num_triplets; i++) {
g_pos = (long(*)[4])malloc(sizeof(long[4]) * num_band_prod);
/* ise_set_g_pos only works for the case of frquency points at */
/* bands. For frequency sampling mode, g_zero is assumed all */
/* with the array shape of (num_triplets, num_band0, num_band, */
/* num_band). */
if (at_a_frequency_point) {
num_g_pos = ise_set_g_pos_frequency_point(
g_pos,
num_band0,
num_band,
g_zero + i * g_index_dims + g_index_shift);
} else {
num_g_pos = ise_set_g_pos(g_pos,
num_band0,
num_band,
g_zero + i * num_band_prod);
for (i = 0; i < num_triplets; i++) {
g_pos = (long(*)[4])malloc(sizeof(long[4]) * num_band_prod);
/* ise_set_g_pos only works for the case of frquency points at */
/* bands. For frequency sampling mode, g_zero is assumed all */
/* with the array shape of (num_triplets, num_band0, num_band, */
/* num_band). */
if (at_a_frequency_point) {
num_g_pos = ise_set_g_pos_frequency_point(
g_pos, num_band0, num_band,
g_zero + i * g_index_dims + g_index_shift);
} else {
num_g_pos = ise_set_g_pos(g_pos, num_band0, num_band,
g_zero + i * num_band_prod);
}
ise_imag_self_energy_at_triplet(
ise + i * num_band0, num_band0, num_band,
fc3_normal_squared->data + i * num_band_prod, frequencies,
triplets[i], triplet_weights[i],
g + i * g_index_dims + g_index_shift,
g + (i + num_triplets) * g_index_dims + g_index_shift, g_pos,
num_g_pos, &temperature, 1, cutoff_frequency, 0,
at_a_frequency_point);
free(g_pos);
g_pos = NULL;
}
ise_imag_self_energy_at_triplet(
ise + i * num_band0,
num_band0,
num_band,
fc3_normal_squared->data + i * num_band_prod,
frequencies,
triplets[i],
triplet_weights[i],
g + i * g_index_dims + g_index_shift,
g + (i + num_triplets) * g_index_dims + g_index_shift,
g_pos,
num_g_pos,
&temperature,
1,
cutoff_frequency,
0,
at_a_frequency_point);
free(g_pos);
g_pos = NULL;
}
for (i = 0; i < num_band0; i++) {
imag_self_energy[i] = 0;
}
for (i = 0; i < num_triplets; i++) {
for (j = 0; j < num_band0; j++) {
imag_self_energy[j] += ise[i * num_band0 + j];
for (i = 0; i < num_band0; i++) {
imag_self_energy[i] = 0;
}
}
free(ise);
ise = NULL;
for (i = 0; i < num_triplets; i++) {
for (j = 0; j < num_band0; j++) {
imag_self_energy[j] += ise[i * num_band0 + j];
}
}
free(ise);
ise = NULL;
}
void ise_get_detailed_imag_self_energy_at_bands_with_g
(double *detailed_imag_self_energy,
double *imag_self_energy_N,
double *imag_self_energy_U,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const long (*bz_grid_addresses)[3],
const double *g,
const char *g_zero,
const double temperature,
const double cutoff_frequency)
{
double *ise;
long i, j, num_triplets, num_band0, num_band, num_band_prod;
long *is_N;
double ise_tmp, N, U;
void ise_get_detailed_imag_self_energy_at_bands_with_g(
double *detailed_imag_self_energy, double *imag_self_energy_N,
double *imag_self_energy_U, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const long (*bz_grid_addresses)[3],
const double *g, const char *g_zero, const double temperature,
const double cutoff_frequency) {
double *ise;
long i, j, num_triplets, num_band0, num_band, num_band_prod;
long *is_N;
double ise_tmp, N, U;
ise = NULL;
is_N = NULL;
ise = NULL;
is_N = NULL;
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
num_band_prod = num_band0 * num_band * num_band;
ise = (double*)malloc(sizeof(double) * num_triplets * num_band0);
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
num_band_prod = num_band0 * num_band * num_band;
ise = (double *)malloc(sizeof(double) * num_triplets * num_band0);
/* detailed_imag_self_energy has the same shape as fc3_normal_squared. */
/* detailed_imag_self_energy has the same shape as fc3_normal_squared. */
#ifdef PHPYOPENMP
#pragma omp parallel for
#endif
for (i = 0; i < num_triplets; i++) {
detailed_imag_self_energy_at_triplet
(detailed_imag_self_energy + i * num_band_prod,
ise + i * num_band0,
num_band0,
num_band,
fc3_normal_squared->data + i * num_band_prod,
frequencies,
triplets[i],
g + i * num_band_prod,
g + (i + num_triplets) * num_band_prod,
g_zero + i * num_band_prod,
&temperature,
1,
cutoff_frequency);
}
is_N = (long*)malloc(sizeof(long) * num_triplets);
for (i = 0; i < num_triplets; i++) {
is_N[i] = tpl_is_N(triplets[i], bz_grid_addresses);
}
for (i = 0; i < num_band0; i++) {
N = 0;
U = 0;
/* #ifdef PHPYOPENMP */
/* #pragma omp parallel for private(ise_tmp) reduction(+:N,U) */
/* #endif */
for (j = 0; j < num_triplets; j++) {
ise_tmp = ise[j * num_band0 + i] * triplet_weights[j];
if (is_N[j]) {
N += ise_tmp;
} else {
U += ise_tmp;
}
for (i = 0; i < num_triplets; i++) {
detailed_imag_self_energy_at_triplet(
detailed_imag_self_energy + i * num_band_prod, ise + i * num_band0,
num_band0, num_band, fc3_normal_squared->data + i * num_band_prod,
frequencies, triplets[i], g + i * num_band_prod,
g + (i + num_triplets) * num_band_prod, g_zero + i * num_band_prod,
&temperature, 1, cutoff_frequency);
}
imag_self_energy_N[i] = N;
imag_self_energy_U[i] = U;
}
free(is_N);
is_N = NULL;
free(ise);
ise = NULL;
is_N = (long *)malloc(sizeof(long) * num_triplets);
for (i = 0; i < num_triplets; i++) {
is_N[i] = tpl_is_N(triplets[i], bz_grid_addresses);
}
for (i = 0; i < num_band0; i++) {
N = 0;
U = 0;
/* #ifdef PHPYOPENMP */
/* #pragma omp parallel for private(ise_tmp) reduction(+:N,U) */
/* #endif */
for (j = 0; j < num_triplets; j++) {
ise_tmp = ise[j * num_band0 + i] * triplet_weights[j];
if (is_N[j]) {
N += ise_tmp;
} else {
U += ise_tmp;
}
}
imag_self_energy_N[i] = N;
imag_self_energy_U[i] = U;
}
free(is_N);
is_N = NULL;
free(ise);
ise = NULL;
}
void ise_imag_self_energy_at_triplet(double *imag_self_energy,
const long num_band0,
const long num_band,
const double *fc3_normal_squared,
const double *frequencies,
const long triplet[3],
const long triplet_weight,
const double *g1,
const double *g2_3,
const long (*g_pos)[4],
const long num_g_pos,
const double *temperatures,
const long num_temps,
const double cutoff_frequency,
const long openmp_at_bands,
const long at_a_frequency_point)
{
long i, j;
double *n1, *n2;
long g_pos_3;
void ise_imag_self_energy_at_triplet(
double *imag_self_energy, const long num_band0, const long num_band,
const double *fc3_normal_squared, const double *frequencies,
const long triplet[3], const long triplet_weight, const double *g1,
const double *g2_3, const long (*g_pos)[4], const long num_g_pos,
const double *temperatures, const long num_temps,
const double cutoff_frequency, const long openmp_at_bands,
const long at_a_frequency_point) {
long i, j;
double *n1, *n2;
long g_pos_3;
n1 = (double*)malloc(sizeof(double) * num_temps * num_band);
n2 = (double*)malloc(sizeof(double) * num_temps * num_band);
for (i = 0; i < num_temps; i++) {
set_occupations(n1 + i * num_band,
n2 + i * num_band,
num_band,
temperatures[i],
triplet,
frequencies,
cutoff_frequency);
}
for (i = 0; i < num_band0 * num_temps; i++) {
imag_self_energy[i] = 0;
}
/* Do not use OpenMP here!! */
/* g_pos[i][0] takes value 0 <= x < num_band0 only, */
/* which causes race condition. */
for (i = 0; i < num_g_pos; i++) {
if (at_a_frequency_point) {
/* At an arbitrary frequency point */
g_pos_3 = g_pos[i][3] % (num_band * num_band);
} else {
/* frequency_points == frequencies at bands */
g_pos_3 = g_pos[i][3];
n1 = (double *)malloc(sizeof(double) * num_temps * num_band);
n2 = (double *)malloc(sizeof(double) * num_temps * num_band);
for (i = 0; i < num_temps; i++) {
set_occupations(n1 + i * num_band, n2 + i * num_band, num_band,
temperatures[i], triplet, frequencies,
cutoff_frequency);
}
for (j = 0; j < num_temps; j++) {
if (n1[j * num_band + g_pos[i][1]] < 0 ||
n2[j * num_band + g_pos[i][2]] < 0) {
;
} else {
if (temperatures[j] > 0) {
imag_self_energy[j * num_band0 + g_pos[i][0]] +=
((n1[j * num_band + g_pos[i][1]] +
n2[j * num_band + g_pos[i][2]] + 1) * g1[g_pos_3] +
(n1[j * num_band + g_pos[i][1]] -
n2[j * num_band + g_pos[i][2]]) * g2_3[g_pos_3]) *
fc3_normal_squared[g_pos[i][3]] * triplet_weight;
for (i = 0; i < num_band0 * num_temps; i++) {
imag_self_energy[i] = 0;
}
/* Do not use OpenMP here!! */
/* g_pos[i][0] takes value 0 <= x < num_band0 only, */
/* which causes race condition. */
for (i = 0; i < num_g_pos; i++) {
if (at_a_frequency_point) {
/* At an arbitrary frequency point */
g_pos_3 = g_pos[i][3] % (num_band * num_band);
} else {
imag_self_energy[j * num_band0 + g_pos[i][0]] +=
g1[g_pos_3] * fc3_normal_squared[g_pos[i][3]] * triplet_weight;
/* frequency_points == frequencies at bands */
g_pos_3 = g_pos[i][3];
}
for (j = 0; j < num_temps; j++) {
if (n1[j * num_band + g_pos[i][1]] < 0 ||
n2[j * num_band + g_pos[i][2]] < 0) {
;
} else {
if (temperatures[j] > 0) {
imag_self_energy[j * num_band0 + g_pos[i][0]] +=
((n1[j * num_band + g_pos[i][1]] +
n2[j * num_band + g_pos[i][2]] + 1) *
g1[g_pos_3] +
(n1[j * num_band + g_pos[i][1]] -
n2[j * num_band + g_pos[i][2]]) *
g2_3[g_pos_3]) *
fc3_normal_squared[g_pos[i][3]] * triplet_weight;
} else {
imag_self_energy[j * num_band0 + g_pos[i][0]] +=
g1[g_pos_3] * fc3_normal_squared[g_pos[i][3]] *
triplet_weight;
}
}
}
}
}
}
free(n1);
n1 = NULL;
free(n2);
n2 = NULL;
free(n1);
n1 = NULL;
free(n2);
n2 = NULL;
}
long ise_set_g_pos(long (*g_pos)[4],
const long num_band0,
const long num_band,
const char *g_zero)
{
long num_g_pos, j, k, l, jkl;
long ise_set_g_pos(long (*g_pos)[4], const long num_band0, const long num_band,
const char *g_zero) {
long num_g_pos, j, k, l, jkl;
num_g_pos = 0;
jkl = 0;
for (j = 0; j < num_band0; j++) {
for (k = 0; k < num_band; k++) {
for (l = 0; l < num_band; l++) {
if (!g_zero[jkl]) {
g_pos[num_g_pos][0] = j;
g_pos[num_g_pos][1] = k;
g_pos[num_g_pos][2] = l;
g_pos[num_g_pos][3] = jkl;
num_g_pos++;
num_g_pos = 0;
jkl = 0;
for (j = 0; j < num_band0; j++) {
for (k = 0; k < num_band; k++) {
for (l = 0; l < num_band; l++) {
if (!g_zero[jkl]) {
g_pos[num_g_pos][0] = j;
g_pos[num_g_pos][1] = k;
g_pos[num_g_pos][2] = l;
g_pos[num_g_pos][3] = jkl;
num_g_pos++;
}
jkl++;
}
}
jkl++;
}
}
}
return num_g_pos;
return num_g_pos;
}
static long ise_set_g_pos_frequency_point(long (*g_pos)[4],
const long num_band0,
const long num_band,
const char *g_zero)
{
long num_g_pos, j, k, l, kl, jkl;
num_g_pos = 0;
jkl = 0;
for (j = 0; j < num_band0; j++) {
kl = 0;
for (k = 0; k < num_band; k++) {
for (l = 0; l < num_band; l++) {
if (!g_zero[kl]) {
g_pos[num_g_pos][0] = j;
g_pos[num_g_pos][1] = k;
g_pos[num_g_pos][2] = l;
g_pos[num_g_pos][3] = jkl;
num_g_pos++;
}
jkl++;
kl++;
}
}
}
return num_g_pos;
}
static void
detailed_imag_self_energy_at_triplet(double *detailed_imag_self_energy,
double *imag_self_energy,
const long num_band0,
const long num_band,
const double *fc3_normal_squared,
const double *frequencies,
const long triplet[3],
const double *g1,
const double *g2_3,
const char *g_zero,
const double *temperatures,
const long num_temps,
const double cutoff_frequency)
{
long i, j, adrs_shift;
double *n1, *n2;
n1 = NULL;
n2 = NULL;
n1 = (double*)malloc(sizeof(double) * num_band);
n2 = (double*)malloc(sizeof(double) * num_band);
for (i = 0; i < num_temps; i++) {
set_occupations(n1,
n2,
num_band,
temperatures[i],
triplet,
frequencies,
cutoff_frequency);
const char *g_zero) {
long num_g_pos, j, k, l, kl, jkl;
num_g_pos = 0;
jkl = 0;
for (j = 0; j < num_band0; j++) {
adrs_shift = j * num_band * num_band;
if (temperatures[i] > 0) {
imag_self_energy[i * num_band0 + j] =
collect_detailed_imag_self_energy
(detailed_imag_self_energy + adrs_shift,
num_band,
fc3_normal_squared + adrs_shift,
n1,
n2,
g1 + adrs_shift,
g2_3 + adrs_shift,
g_zero + adrs_shift);
} else {
imag_self_energy[i * num_band0 + j] =
collect_detailed_imag_self_energy_0K
(detailed_imag_self_energy + adrs_shift,
num_band,
fc3_normal_squared + adrs_shift,
n1,
n2,
g1 + adrs_shift,
g_zero + adrs_shift);
}
kl = 0;
for (k = 0; k < num_band; k++) {
for (l = 0; l < num_band; l++) {
if (!g_zero[kl]) {
g_pos[num_g_pos][0] = j;
g_pos[num_g_pos][1] = k;
g_pos[num_g_pos][2] = l;
g_pos[num_g_pos][3] = jkl;
num_g_pos++;
}
jkl++;
kl++;
}
}
}
}
free(n1);
n1 = NULL;
free(n2);
n2 = NULL;
return num_g_pos;
}
static double
collect_detailed_imag_self_energy(double *imag_self_energy,
const long num_band,
const double *fc3_normal_squared,
const double *n1,
const double *n2,
const double *g1,
const double *g2_3,
const char *g_zero)
{
long ij, i, j;
double sum_g;
static void detailed_imag_self_energy_at_triplet(
double *detailed_imag_self_energy, double *imag_self_energy,
const long num_band0, const long num_band, const double *fc3_normal_squared,
const double *frequencies, const long triplet[3], const double *g1,
const double *g2_3, const char *g_zero, const double *temperatures,
const long num_temps, const double cutoff_frequency) {
long i, j, adrs_shift;
double *n1, *n2;
sum_g = 0;
for (ij = 0; ij < num_band * num_band; ij++) {
imag_self_energy[ij] = 0;
if (g_zero[ij]) {continue;}
i = ij / num_band;
j = ij % num_band;
if (n1[i] < 0 || n2[j] < 0) {continue;}
imag_self_energy[ij] = (((n1[i] + n2[j] + 1) * g1[ij] +
(n1[i] - n2[j]) * g2_3[ij]) *
fc3_normal_squared[ij]);
sum_g += imag_self_energy[ij];
}
n1 = NULL;
n2 = NULL;
return sum_g;
n1 = (double *)malloc(sizeof(double) * num_band);
n2 = (double *)malloc(sizeof(double) * num_band);
for (i = 0; i < num_temps; i++) {
set_occupations(n1, n2, num_band, temperatures[i], triplet, frequencies,
cutoff_frequency);
for (j = 0; j < num_band0; j++) {
adrs_shift = j * num_band * num_band;
if (temperatures[i] > 0) {
imag_self_energy[i * num_band0 + j] =
collect_detailed_imag_self_energy(
detailed_imag_self_energy + adrs_shift, num_band,
fc3_normal_squared + adrs_shift, n1, n2,
g1 + adrs_shift, g2_3 + adrs_shift,
g_zero + adrs_shift);
} else {
imag_self_energy[i * num_band0 + j] =
collect_detailed_imag_self_energy_0K(
detailed_imag_self_energy + adrs_shift, num_band,
fc3_normal_squared + adrs_shift, n1, n2,
g1 + adrs_shift, g_zero + adrs_shift);
}
}
}
free(n1);
n1 = NULL;
free(n2);
n2 = NULL;
}
static double
collect_detailed_imag_self_energy_0K(double *imag_self_energy,
const long num_band,
const double *fc3_normal_squared,
const double *n1,
const double *n2,
const double *g1,
const char *g_zero)
{
long ij, i, j;
double sum_g;
static double collect_detailed_imag_self_energy(
double *imag_self_energy, const long num_band,
const double *fc3_normal_squared, const double *n1, const double *n2,
const double *g1, const double *g2_3, const char *g_zero) {
long ij, i, j;
double sum_g;
sum_g = 0;
for (ij = 0; ij < num_band * num_band; ij++) {
imag_self_energy[ij] = 0;
if (g_zero[ij]) {continue;}
i = ij / num_band;
j = ij % num_band;
if (n1[i] < 0 || n2[j] < 0) {continue;}
imag_self_energy[ij] = g1[ij] * fc3_normal_squared[ij];
sum_g += imag_self_energy[ij];
}
sum_g = 0;
for (ij = 0; ij < num_band * num_band; ij++) {
imag_self_energy[ij] = 0;
if (g_zero[ij]) {
continue;
}
i = ij / num_band;
j = ij % num_band;
if (n1[i] < 0 || n2[j] < 0) {
continue;
}
imag_self_energy[ij] =
(((n1[i] + n2[j] + 1) * g1[ij] + (n1[i] - n2[j]) * g2_3[ij]) *
fc3_normal_squared[ij]);
sum_g += imag_self_energy[ij];
}
return sum_g;
return sum_g;
}
static void set_occupations(double *n1,
double *n2,
const long num_band,
const double temperature,
const long triplet[3],
static double collect_detailed_imag_self_energy_0K(
double *imag_self_energy, const long num_band,
const double *fc3_normal_squared, const double *n1, const double *n2,
const double *g1, const char *g_zero) {
long ij, i, j;
double sum_g;
sum_g = 0;
for (ij = 0; ij < num_band * num_band; ij++) {
imag_self_energy[ij] = 0;
if (g_zero[ij]) {
continue;
}
i = ij / num_band;
j = ij % num_band;
if (n1[i] < 0 || n2[j] < 0) {
continue;
}
imag_self_energy[ij] = g1[ij] * fc3_normal_squared[ij];
sum_g += imag_self_energy[ij];
}
return sum_g;
}
static void set_occupations(double *n1, double *n2, const long num_band,
const double temperature, const long triplet[3],
const double *frequencies,
const double cutoff_frequency)
{
long j;
double f1, f2;
const double cutoff_frequency) {
long j;
double f1, f2;
for (j = 0; j < num_band; j++) {
f1 = frequencies[triplet[1] * num_band + j];
f2 = frequencies[triplet[2] * num_band + j];
if (f1 > cutoff_frequency) {
n1[j] = phonoc_bose_einstein(f1, temperature);
} else {
n1[j] = -1;
for (j = 0; j < num_band; j++) {
f1 = frequencies[triplet[1] * num_band + j];
f2 = frequencies[triplet[2] * num_band + j];
if (f1 > cutoff_frequency) {
n1[j] = phonoc_bose_einstein(f1, temperature);
} else {
n1[j] = -1;
}
if (f2 > cutoff_frequency) {
n2[j] = phonoc_bose_einstein(f2, temperature);
} else {
n2[j] = -1;
}
}
if (f2 > cutoff_frequency) {
n2[j] = phonoc_bose_einstein(f2, temperature);
} else {
n2[j] = -1;
}
}
}

View File

@ -36,51 +36,31 @@
#define __imag_self_energy_with_g_H__
#include <stddef.h>
#include "phonoc_array.h"
void ise_get_imag_self_energy_at_bands_with_g(double *imag_self_energy,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double *g,
const char *g_zero,
const double temperature,
const double cutoff_frequency,
const long num_frequency_points,
const long frequency_point_index);
void ise_get_detailed_imag_self_energy_at_bands_with_g
(double *detailed_imag_self_energy,
double *imag_self_energy_N,
double *imag_self_energy_U,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const long (*bz_grid_addresses)[3],
const double *g,
const char *g_zero,
const double temperature,
const double cutoff_frequency);
void ise_imag_self_energy_at_triplet(double *imag_self_energy,
const long num_band0,
const long num_band,
const double *fc3_normal_squared,
const double *frequencies,
const long triplet[3],
const long triplet_weight,
const double *g1,
const double *g2_3,
const long (*g_pos)[4],
const long num_g_pos,
const double *temperatures,
const long num_temps,
const double cutoff_frequency,
const long openmp_at_bands,
const long at_a_frequency_point);
long ise_set_g_pos(long (*g_pos)[4],
const long num_band0,
const long num_band,
void ise_get_imag_self_energy_at_bands_with_g(
double *imag_self_energy, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double *g, const char *g_zero,
const double temperature, const double cutoff_frequency,
const long num_frequency_points, const long frequency_point_index);
void ise_get_detailed_imag_self_energy_at_bands_with_g(
double *detailed_imag_self_energy, double *imag_self_energy_N,
double *imag_self_energy_U, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const long (*bz_grid_addresses)[3],
const double *g, const char *g_zero, const double temperature,
const double cutoff_frequency);
void ise_imag_self_energy_at_triplet(
double *imag_self_energy, const long num_band0, const long num_band,
const double *fc3_normal_squared, const double *frequencies,
const long triplet[3], const long triplet_weight, const double *g1,
const double *g2_3, const long (*g_pos)[4], const long num_g_pos,
const double *temperatures, const long num_temps,
const double cutoff_frequency, const long openmp_at_bands,
const long at_a_frequency_point);
long ise_set_g_pos(long (*g_pos)[4], const long num_band0, const long num_band,
const char *g_zero);
#endif

View File

@ -32,405 +32,250 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "interaction.h"
#include <stdio.h>
#include <stdlib.h>
#include "bzgrid.h"
#include "interaction.h"
#include "imag_self_energy_with_g.h"
#include "lapack_wrapper.h"
#include "phonoc_array.h"
#include "real_to_reciprocal.h"
#include "reciprocal_to_normal.h"
#include "lapack_wrapper.h"
static const long index_exchange[6][3] = {{0, 1, 2},
{2, 0, 1},
{1, 2, 0},
{2, 1, 0},
{0, 2, 1},
{1, 0, 2}};
static void real_to_normal(double *fc3_normal_squared,
const long (*g_pos)[4],
const long num_g_pos,
const double *freqs0,
const double *freqs1,
const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const double *fc3,
const long is_compact_fc3,
const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long num_band0,
const long num_band,
const double cutoff_frequency,
const long triplet_index,
const long num_triplets,
const long openmp_at_bands);
static void real_to_normal_sym_q(double *fc3_normal_squared,
const long (*g_pos)[4],
const long num_g_pos,
double * const freqs[3],
lapack_complex_double * const eigvecs[3],
const double *fc3,
const long is_compact_fc3,
const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long num_band0,
const long num_band,
const double cutoff_frequency,
const long triplet_index,
const long num_triplets,
const long openmp_at_bands);
static const long index_exchange[6][3] = {{0, 1, 2}, {2, 0, 1}, {1, 2, 0},
{2, 1, 0}, {0, 2, 1}, {1, 0, 2}};
static void real_to_normal(
double *fc3_normal_squared, const long (*g_pos)[4], const long num_g_pos,
const double *freqs0, const double *freqs1, const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2, const double *fc3,
const long is_compact_fc3, const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3], const long multi_dims[2],
const long (*multiplicity)[2], const double *masses, const long *p2s_map,
const long *s2p_map, const long *band_indices, const long num_band,
const double cutoff_frequency, const long triplet_index,
const long num_triplets, const long openmp_at_bands);
static void real_to_normal_sym_q(
double *fc3_normal_squared, const long (*g_pos)[4], const long num_g_pos,
double *const freqs[3], lapack_complex_double *const eigvecs[3],
const double *fc3, const long is_compact_fc3,
const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3], const long multi_dims[2],
const long (*multiplicity)[2], const double *masses, const long *p2s_map,
const long *s2p_map, const long *band_indices, const long num_band0,
const long num_band, const double cutoff_frequency,
const long triplet_index, const long num_triplets,
const long openmp_at_bands);
/* fc3_normal_squared[num_triplets, num_band0, num_band, num_band] */
void itr_get_interaction(Darray *fc3_normal_squared,
const char *g_zero,
void itr_get_interaction(Darray *fc3_normal_squared, const char *g_zero,
const Darray *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long (*triplets)[3], const long num_triplets,
const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long symmetrize_fc3_q,
const double cutoff_frequency)
{
long openmp_per_triplets;
long (*g_pos)[4];
long i;
long num_band, num_band0, num_band_prod, num_g_pos;
const long (*multiplicity)[2], const double *masses,
const long *p2s_map, const long *s2p_map,
const long *band_indices, const long symmetrize_fc3_q,
const double cutoff_frequency) {
long openmp_per_triplets;
long(*g_pos)[4];
long i;
long num_band, num_band0, num_band_prod, num_g_pos;
g_pos = NULL;
g_pos = NULL;
num_band0 = fc3_normal_squared->dims[1];
num_band = frequencies->dims[1];
num_band_prod = num_band0 * num_band * num_band;
num_band0 = fc3_normal_squared->dims[1];
num_band = frequencies->dims[1];
num_band_prod = num_band0 * num_band * num_band;
if (num_triplets > num_band) {
openmp_per_triplets = 1;
} else {
openmp_per_triplets = 0;
}
if (num_triplets > num_band) {
openmp_per_triplets = 1;
} else {
openmp_per_triplets = 0;
}
#ifdef PHPYOPENMP
#pragma omp parallel for schedule(guided) private(num_g_pos, g_pos) if (openmp_per_triplets)
#pragma omp parallel for schedule(guided) private( \
num_g_pos, g_pos) if (openmp_per_triplets)
#endif
for (i = 0; i < num_triplets; i++) {
g_pos = (long(*)[4])malloc(sizeof(long[4]) * num_band_prod);
num_g_pos = ise_set_g_pos(g_pos,
num_band0,
num_band,
g_zero + i * num_band_prod);
for (i = 0; i < num_triplets; i++) {
g_pos = (long(*)[4])malloc(sizeof(long[4]) * num_band_prod);
num_g_pos = ise_set_g_pos(g_pos, num_band0, num_band,
g_zero + i * num_band_prod);
itr_get_interaction_at_triplet(
fc3_normal_squared->data + i * num_band_prod,
num_band0,
num_band,
g_pos,
num_g_pos,
frequencies->data,
eigenvectors,
triplets[i],
bzgrid,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
masses,
p2s_map,
s2p_map,
band_indices,
symmetrize_fc3_q,
cutoff_frequency,
i,
num_triplets,
1 - openmp_per_triplets);
itr_get_interaction_at_triplet(
fc3_normal_squared->data + i * num_band_prod, num_band0, num_band,
g_pos, num_g_pos, frequencies->data, eigenvectors, triplets[i],
bzgrid, fc3, is_compact_fc3, svecs, multi_dims, multiplicity,
masses, p2s_map, s2p_map, band_indices, symmetrize_fc3_q,
cutoff_frequency, i, num_triplets, 1 - openmp_per_triplets);
free(g_pos);
g_pos = NULL;
}
free(g_pos);
g_pos = NULL;
}
}
void itr_get_interaction_at_triplet(double *fc3_normal_squared,
const long num_band0,
const long num_band,
const long (*g_pos)[4],
const long num_g_pos,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long triplet[3],
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long symmetrize_fc3_q,
const double cutoff_frequency,
const long triplet_index, /* only for print */
const long num_triplets, /* only for print */
const long openmp_at_bands)
{
long j, k;
double *freqs[3];
lapack_complex_double *eigvecs[3];
double q_vecs[3][3];
void itr_get_interaction_at_triplet(
double *fc3_normal_squared, const long num_band0, const long num_band,
const long (*g_pos)[4], const long num_g_pos, const double *frequencies,
const lapack_complex_double *eigenvectors, const long triplet[3],
const ConstBZGrid *bzgrid, const double *fc3, const long is_compact_fc3,
const double (*svecs)[3], const long multi_dims[2],
const long (*multiplicity)[2], const double *masses, const long *p2s_map,
const long *s2p_map, const long *band_indices, const long symmetrize_fc3_q,
const double cutoff_frequency,
const long triplet_index, /* only for print */
const long num_triplets, /* only for print */
const long openmp_at_bands) {
long j, k;
double *freqs[3];
lapack_complex_double *eigvecs[3];
double q_vecs[3][3];
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
q_vecs[j][k] = ((double)bzgrid->addresses[triplet[j]][k]) / bzgrid->D_diag[k];
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
q_vecs[j][k] =
((double)bzgrid->addresses[triplet[j]][k]) / bzgrid->D_diag[k];
}
bzg_multiply_matrix_vector_ld3(q_vecs[j], bzgrid->Q, q_vecs[j]);
}
bzg_multiply_matrix_vector_ld3(q_vecs[j], bzgrid->Q, q_vecs[j]);
}
if (symmetrize_fc3_q) {
for (j = 0; j < 3; j++) {
freqs[j] = (double*)malloc(sizeof(double) * num_band);
eigvecs[j] = (lapack_complex_double*)
malloc(sizeof(lapack_complex_double) * num_band * num_band);
for (k = 0; k < num_band; k++) {
freqs[j][k] = frequencies[triplet[j] * num_band + k];
}
for (k = 0; k < num_band * num_band; k++) {
eigvecs[j][k] = eigenvectors[triplet[j] * num_band * num_band + k];
}
if (symmetrize_fc3_q) {
for (j = 0; j < 3; j++) {
freqs[j] = (double *)malloc(sizeof(double) * num_band);
eigvecs[j] = (lapack_complex_double *)malloc(
sizeof(lapack_complex_double) * num_band * num_band);
for (k = 0; k < num_band; k++) {
freqs[j][k] = frequencies[triplet[j] * num_band + k];
}
for (k = 0; k < num_band * num_band; k++) {
eigvecs[j][k] =
eigenvectors[triplet[j] * num_band * num_band + k];
}
}
real_to_normal_sym_q(
fc3_normal_squared, g_pos, num_g_pos, freqs, eigvecs, fc3,
is_compact_fc3, q_vecs, /* q0, q1, q2 */
svecs, multi_dims, multiplicity, masses, p2s_map, s2p_map,
band_indices, num_band0, num_band, cutoff_frequency, triplet_index,
num_triplets, openmp_at_bands);
for (j = 0; j < 3; j++) {
free(freqs[j]);
freqs[j] = NULL;
free(eigvecs[j]);
eigvecs[j] = NULL;
}
} else {
real_to_normal(fc3_normal_squared, g_pos, num_g_pos,
frequencies + triplet[0] * num_band,
frequencies + triplet[1] * num_band,
frequencies + triplet[2] * num_band,
eigenvectors + triplet[0] * num_band * num_band,
eigenvectors + triplet[1] * num_band * num_band,
eigenvectors + triplet[2] * num_band * num_band, fc3,
is_compact_fc3, q_vecs, /* q0, q1, q2 */
svecs, multi_dims, multiplicity, masses, p2s_map,
s2p_map, band_indices, num_band, cutoff_frequency,
triplet_index, num_triplets, openmp_at_bands);
}
real_to_normal_sym_q(fc3_normal_squared,
g_pos,
num_g_pos,
freqs,
eigvecs,
fc3,
is_compact_fc3,
q_vecs, /* q0, q1, q2 */
svecs,
multi_dims,
multiplicity,
masses,
p2s_map,
s2p_map,
band_indices,
num_band0,
num_band,
cutoff_frequency,
triplet_index,
num_triplets,
openmp_at_bands);
for (j = 0; j < 3; j++) {
free(freqs[j]);
freqs[j] = NULL;
free(eigvecs[j]);
eigvecs[j] = NULL;
}
} else {
real_to_normal(fc3_normal_squared,
g_pos,
num_g_pos,
frequencies + triplet[0] * num_band,
frequencies + triplet[1] * num_band,
frequencies + triplet[2] * num_band,
eigenvectors + triplet[0] * num_band * num_band,
eigenvectors + triplet[1] * num_band * num_band,
eigenvectors + triplet[2] * num_band * num_band,
fc3,
is_compact_fc3,
q_vecs, /* q0, q1, q2 */
svecs,
multi_dims,
multiplicity,
masses,
p2s_map,
s2p_map,
band_indices,
num_band0,
num_band,
cutoff_frequency,
triplet_index,
num_triplets,
openmp_at_bands);
}
}
static void real_to_normal(double *fc3_normal_squared,
const long (*g_pos)[4],
const long num_g_pos,
const double *freqs0,
const double *freqs1,
const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const double *fc3,
const long is_compact_fc3,
const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long num_band0,
const long num_band,
const double cutoff_frequency,
const long triplet_index,
const long num_triplets,
const long openmp_at_bands)
{
long num_patom;
lapack_complex_double *fc3_reciprocal;
static void real_to_normal(
double *fc3_normal_squared, const long (*g_pos)[4], const long num_g_pos,
const double *freqs0, const double *freqs1, const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2, const double *fc3,
const long is_compact_fc3, const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3], const long multi_dims[2],
const long (*multiplicity)[2], const double *masses, const long *p2s_map,
const long *s2p_map, const long *band_indices, const long num_band,
const double cutoff_frequency, const long triplet_index,
const long num_triplets, const long openmp_at_bands) {
lapack_complex_double *fc3_reciprocal;
num_patom = num_band / 3;
fc3_reciprocal =
(lapack_complex_double*)malloc(sizeof(lapack_complex_double) *
num_patom * num_patom * num_patom * 27);
r2r_real_to_reciprocal(fc3_reciprocal,
q_vecs,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
p2s_map,
s2p_map,
openmp_at_bands);
fc3_reciprocal = (lapack_complex_double *)malloc(
sizeof(lapack_complex_double) * num_band * num_band * num_band);
r2r_real_to_reciprocal(fc3_reciprocal, q_vecs, fc3, is_compact_fc3, svecs,
multi_dims, multiplicity, p2s_map, s2p_map,
openmp_at_bands);
#ifdef MEASURE_R2N
if (openmp_at_bands && num_triplets > 0) {
printf("At triplet %d/%d (# of bands=%d):\n",
triplet_index, num_triplets, num_band0);
}
if (openmp_at_bands && num_triplets > 0) {
printf("At triplet %d/%d (# of bands=%d):\n", triplet_index,
num_triplets, num_band0);
}
#endif
reciprocal_to_normal_squared(fc3_normal_squared,
g_pos,
num_g_pos,
fc3_reciprocal,
freqs0,
freqs1,
freqs2,
eigvecs0,
eigvecs1,
eigvecs2,
masses,
band_indices,
num_band0,
num_band,
cutoff_frequency,
openmp_at_bands);
reciprocal_to_normal_squared(
fc3_normal_squared, g_pos, num_g_pos, fc3_reciprocal, freqs0, freqs1,
freqs2, eigvecs0, eigvecs1, eigvecs2, masses, band_indices, num_band,
cutoff_frequency, openmp_at_bands);
free(fc3_reciprocal);
fc3_reciprocal = NULL;
free(fc3_reciprocal);
fc3_reciprocal = NULL;
}
static void real_to_normal_sym_q(double *fc3_normal_squared,
const long (*g_pos)[4],
const long num_g_pos,
double * const freqs[3],
lapack_complex_double * const eigvecs[3],
const double *fc3,
const long is_compact_fc3,
const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long num_band0,
const long num_band,
const double cutoff_frequency,
const long triplet_index,
const long num_triplets,
const long openmp_at_bands)
{
long i, j, k, l;
long band_ex[3];
double q_vecs_ex[3][3];
double *fc3_normal_squared_ex;
static void real_to_normal_sym_q(
double *fc3_normal_squared, const long (*g_pos)[4], const long num_g_pos,
double *const freqs[3], lapack_complex_double *const eigvecs[3],
const double *fc3, const long is_compact_fc3,
const double q_vecs[3][3], /* q0, q1, q2 */
const double (*svecs)[3], const long multi_dims[2],
const long (*multiplicity)[2], const double *masses, const long *p2s_map,
const long *s2p_map, const long *band_indices, const long num_band0,
const long num_band, const double cutoff_frequency,
const long triplet_index, const long num_triplets,
const long openmp_at_bands) {
long i, j, k, l;
long band_ex[3];
double q_vecs_ex[3][3];
double *fc3_normal_squared_ex;
fc3_normal_squared_ex =
(double*)malloc(sizeof(double) * num_band * num_band * num_band);
fc3_normal_squared_ex =
(double *)malloc(sizeof(double) * num_band * num_band * num_band);
for (i = 0; i < num_band0 * num_band * num_band; i++) {
fc3_normal_squared[i] = 0;
}
for (i = 0; i < 6; i++) {
for (j = 0; j < 3; j ++) {
for (k = 0; k < 3; k ++) {
q_vecs_ex[j][k] = q_vecs[index_exchange[i][j]][k];
}
for (i = 0; i < num_band0 * num_band * num_band; i++) {
fc3_normal_squared[i] = 0;
}
real_to_normal(fc3_normal_squared_ex,
g_pos,
num_g_pos,
freqs[index_exchange[i][0]],
freqs[index_exchange[i][1]],
freqs[index_exchange[i][2]],
eigvecs[index_exchange[i][0]],
eigvecs[index_exchange[i][1]],
eigvecs[index_exchange[i][2]],
fc3,
is_compact_fc3,
q_vecs_ex, /* q0, q1, q2 */
svecs,
multi_dims,
multiplicity,
masses,
p2s_map,
s2p_map,
band_indices,
num_band,
num_band,
cutoff_frequency,
triplet_index,
num_triplets,
openmp_at_bands);
for (j = 0; j < num_band0; j++) {
for (k = 0; k < num_band; k++) {
for (l = 0; l < num_band; l++) {
band_ex[0] = band_indices[j];
band_ex[1] = k;
band_ex[2] = l;
fc3_normal_squared[j * num_band * num_band +
k * num_band +
l] +=
fc3_normal_squared_ex[band_ex[index_exchange[i][0]] *
num_band * num_band +
band_ex[index_exchange[i][1]] * num_band +
band_ex[index_exchange[i][2]]] / 6;
for (i = 0; i < 6; i++) {
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
q_vecs_ex[j][k] = q_vecs[index_exchange[i][j]][k];
}
}
real_to_normal(
fc3_normal_squared_ex, g_pos, num_g_pos,
freqs[index_exchange[i][0]], freqs[index_exchange[i][1]],
freqs[index_exchange[i][2]], eigvecs[index_exchange[i][0]],
eigvecs[index_exchange[i][1]], eigvecs[index_exchange[i][2]], fc3,
is_compact_fc3, q_vecs_ex, /* q0, q1, q2 */
svecs, multi_dims, multiplicity, masses, p2s_map, s2p_map,
band_indices, num_band, cutoff_frequency, triplet_index,
num_triplets, openmp_at_bands);
for (j = 0; j < num_band0; j++) {
for (k = 0; k < num_band; k++) {
for (l = 0; l < num_band; l++) {
band_ex[0] = band_indices[j];
band_ex[1] = k;
band_ex[2] = l;
fc3_normal_squared[j * num_band * num_band + k * num_band +
l] +=
fc3_normal_squared_ex[band_ex[index_exchange[i][0]] *
num_band * num_band +
band_ex[index_exchange[i][1]] *
num_band +
band_ex[index_exchange[i][2]]] /
6;
}
}
}
}
}
}
free(fc3_normal_squared_ex);
free(fc3_normal_squared_ex);
}

View File

@ -39,46 +39,28 @@
#include "lapack_wrapper.h"
#include "phonoc_array.h"
void itr_get_interaction(Darray *fc3_normal_squared,
const char *g_zero,
void itr_get_interaction(Darray *fc3_normal_squared, const char *g_zero,
const Darray *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long (*triplets)[3], const long num_triplets,
const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long symmetrize_fc3_q,
const long (*multiplicity)[2], const double *masses,
const long *p2s_map, const long *s2p_map,
const long *band_indices, const long symmetrize_fc3_q,
const double cutoff_frequency);
void itr_get_interaction_at_triplet(double *fc3_normal_squared,
const long num_band0,
const long num_band,
const long (*g_pos)[4],
const long num_g_pos,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long triplet[3],
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long symmetrize_fc3_q,
const double cutoff_frequency,
const long triplet_index, /* only for print */
const long num_triplets, /* only for print */
const long openmp_at_bands);
void itr_get_interaction_at_triplet(
double *fc3_normal_squared, const long num_band0, const long num_band,
const long (*g_pos)[4], const long num_g_pos, const double *frequencies,
const lapack_complex_double *eigenvectors, const long triplet[3],
const ConstBZGrid *bzgrid, const double *fc3, const long is_compact_fc3,
const double (*svecs)[3], const long multi_dims[2],
const long (*multiplicity)[2], const double *masses, const long *p2s_map,
const long *s2p_map, const long *band_indices, const long symmetrize_fc3_q,
const double cutoff_frequency,
const long triplet_index, /* only for print */
const long num_triplets, /* only for print */
const long openmp_at_bands);
#endif

View File

@ -32,208 +32,196 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "isotope.h"
#include <stdlib.h>
#include "lapack_wrapper.h"
#include "phonoc_const.h"
#include "phonoc_utils.h"
#include "isotope.h"
#include "lapack_wrapper.h"
void
iso_get_isotope_scattering_strength(double *gamma,
const long grid_point,
const double *mass_variances,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long num_grid_points,
const long *band_indices,
const long num_band,
const long num_band0,
const double sigma,
const double cutoff_frequency)
{
long i, j, k, l, m;
double *e0_r, *e0_i, e1_r, e1_i, a, b, f, *f0, dist, sum_g, sum_g_k;
void iso_get_isotope_scattering_strength(
double *gamma, const long grid_point, const double *mass_variances,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long num_grid_points, const long *band_indices, const long num_band,
const long num_band0, const double sigma, const double cutoff_frequency) {
long i, j, k, l, m;
double *e0_r, *e0_i, e1_r, e1_i, a, b, f, *f0, dist, sum_g, sum_g_k;
e0_r = (double*)malloc(sizeof(double) * num_band * num_band0);
e0_i = (double*)malloc(sizeof(double) * num_band * num_band0);
f0 = (double*)malloc(sizeof(double) * num_band0);
e0_r = (double *)malloc(sizeof(double) * num_band * num_band0);
e0_i = (double *)malloc(sizeof(double) * num_band * num_band0);
f0 = (double *)malloc(sizeof(double) * num_band0);
for (i = 0; i < num_band0; i++) {
f0[i] = frequencies[grid_point * num_band + band_indices[i]];
for (j = 0; j < num_band; j++) {
e0_r[i * num_band + j] = lapack_complex_double_real
(eigenvectors[grid_point * num_band * num_band +
j * num_band + band_indices[i]]);
e0_i[i * num_band + j] = lapack_complex_double_imag
(eigenvectors[grid_point * num_band * num_band +
j * num_band + band_indices[i]]);
for (i = 0; i < num_band0; i++) {
f0[i] = frequencies[grid_point * num_band + band_indices[i]];
for (j = 0; j < num_band; j++) {
e0_r[i * num_band + j] = lapack_complex_double_real(
eigenvectors[grid_point * num_band * num_band + j * num_band +
band_indices[i]]);
e0_i[i * num_band + j] = lapack_complex_double_imag(
eigenvectors[grid_point * num_band * num_band + j * num_band +
band_indices[i]]);
}
}
}
for (i = 0; i < num_band0; i++) {
gamma[i] = 0;
}
for (i = 0; i < num_band0; i++) { /* band index0 */
if (f0[i] < cutoff_frequency) {
continue;
for (i = 0; i < num_band0; i++) {
gamma[i] = 0;
}
sum_g = 0;
for (i = 0; i < num_band0; i++) { /* band index0 */
if (f0[i] < cutoff_frequency) {
continue;
}
sum_g = 0;
#ifdef PHPYOPENMP
#pragma omp parallel for private(k, l, m, f, e1_r, e1_i, a, b, dist, sum_g_k) reduction(+:sum_g)
#pragma omp parallel for private(k, l, m, f, e1_r, e1_i, a, b, dist, sum_g_k) reduction(+ \
: sum_g)
#endif
for (j = 0; j < num_grid_points; j++) {
sum_g_k = 0;
for (k = 0; k < num_band; k++) { /* band index */
f = frequencies[j * num_band + k];
if (f < cutoff_frequency) {
continue;
for (j = 0; j < num_grid_points; j++) {
sum_g_k = 0;
for (k = 0; k < num_band; k++) { /* band index */
f = frequencies[j * num_band + k];
if (f < cutoff_frequency) {
continue;
}
dist = phonoc_gaussian(f - f0[i], sigma);
for (l = 0; l < num_band / 3; l++) { /* elements */
a = 0;
b = 0;
for (m = 0; m < 3; m++) {
e1_r = lapack_complex_double_real(
eigenvectors[j * num_band * num_band +
(l * 3 + m) * num_band + k]);
e1_i = lapack_complex_double_imag(
eigenvectors[j * num_band * num_band +
(l * 3 + m) * num_band + k]);
a += (e0_r[i * num_band + l * 3 + m] * e1_r +
e0_i[i * num_band + l * 3 + m] * e1_i);
b += (e0_i[i * num_band + l * 3 + m] * e1_r -
e0_r[i * num_band + l * 3 + m] * e1_i);
}
sum_g_k += (a * a + b * b) * mass_variances[l] * dist;
}
}
sum_g += sum_g_k;
}
dist = phonoc_gaussian(f - f0[i], sigma);
for (l = 0; l < num_band / 3; l++) { /* elements */
a = 0;
b = 0;
for (m = 0; m < 3; m++) {
e1_r = lapack_complex_double_real
(eigenvectors[j * num_band * num_band +
(l * 3 + m) * num_band + k]);
e1_i = lapack_complex_double_imag
(eigenvectors[j * num_band * num_band +
(l * 3 + m) * num_band + k]);
a += (e0_r[i * num_band + l * 3 + m] * e1_r +
e0_i[i * num_band + l * 3 + m] * e1_i);
b += (e0_i[i * num_band + l * 3 + m] * e1_r -
e0_r[i * num_band + l * 3 + m] * e1_i);
}
sum_g_k += (a * a + b * b) * mass_variances[l] * dist;
}
}
sum_g += sum_g_k;
gamma[i] = sum_g;
}
gamma[i] = sum_g;
}
for (i = 0; i < num_band0; i++) {
/* Frequency unit to ang-freq: *(2pi)**2/(2pi) */
/* Ang-freq to freq unit (for lifetime): /2pi */
/* gamma = 1/2t */
gamma[i] *= M_2PI / 4 * f0[i] * f0[i] / 2;
}
for (i = 0; i < num_band0; i++) {
/* Frequency unit to ang-freq: *(2pi)**2/(2pi) */
/* Ang-freq to freq unit (for lifetime): /2pi */
/* gamma = 1/2t */
gamma[i] *= M_2PI / 4 * f0[i] * f0[i] / 2;
}
free(f0);
f0 = NULL;
free(e0_r);
e0_r = NULL;
free(e0_i);
e0_i = NULL;
free(f0);
f0 = NULL;
free(e0_r);
e0_r = NULL;
free(e0_i);
e0_i = NULL;
}
void iso_get_thm_isotope_scattering_strength
(double *gamma,
const long grid_point,
const long *ir_grid_points,
const long *weights,
const double *mass_variances,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long num_grid_points,
const long *band_indices,
const long num_band,
const long num_band0,
const double *integration_weights,
const double cutoff_frequency)
{
long i, j, k, l, m, gp;
double *e0_r, *e0_i, *f0, *gamma_ij;
double e1_r, e1_i, a, b, f, dist, sum_g_k;
void iso_get_thm_isotope_scattering_strength(
double *gamma, const long grid_point, const long *ir_grid_points,
const long *weights, const double *mass_variances,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long num_grid_points, const long *band_indices, const long num_band,
const long num_band0, const double *integration_weights,
const double cutoff_frequency) {
long i, j, k, l, m, gp;
double *e0_r, *e0_i, *f0, *gamma_ij;
double e1_r, e1_i, a, b, f, dist, sum_g_k;
e0_r = (double*)malloc(sizeof(double) * num_band * num_band0);
e0_i = (double*)malloc(sizeof(double) * num_band * num_band0);
f0 = (double*)malloc(sizeof(double) * num_band0);
e0_r = (double *)malloc(sizeof(double) * num_band * num_band0);
e0_i = (double *)malloc(sizeof(double) * num_band * num_band0);
f0 = (double *)malloc(sizeof(double) * num_band0);
for (i = 0; i < num_band0; i++) {
f0[i] = frequencies[grid_point * num_band + band_indices[i]];
for (j = 0; j < num_band; j++) {
e0_r[i * num_band + j] = lapack_complex_double_real
(eigenvectors[grid_point * num_band * num_band +
j * num_band + band_indices[i]]);
e0_i[i * num_band + j] = lapack_complex_double_imag
(eigenvectors[grid_point * num_band * num_band +
j * num_band + band_indices[i]]);
for (i = 0; i < num_band0; i++) {
f0[i] = frequencies[grid_point * num_band + band_indices[i]];
for (j = 0; j < num_band; j++) {
e0_r[i * num_band + j] = lapack_complex_double_real(
eigenvectors[grid_point * num_band * num_band + j * num_band +
band_indices[i]]);
e0_i[i * num_band + j] = lapack_complex_double_imag(
eigenvectors[grid_point * num_band * num_band + j * num_band +
band_indices[i]]);
}
}
}
gamma_ij = (double*)malloc(sizeof(double) * num_grid_points * num_band0);
gamma_ij = (double *)malloc(sizeof(double) * num_grid_points * num_band0);
#ifdef PHPYOPENMP
#pragma omp parallel for
#endif
for (i = 0; i < num_grid_points * num_band0; i++) {
gamma_ij[i] = 0;
}
for (i = 0; i < num_grid_points * num_band0; i++) {
gamma_ij[i] = 0;
}
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, k, l, m, f, gp, e1_r, e1_i, a, b, dist, sum_g_k)
#pragma omp parallel for private(j, k, l, m, f, gp, e1_r, e1_i, a, b, dist, \
sum_g_k)
#endif
for (i = 0; i < num_grid_points; i++) {
gp = ir_grid_points[i];
for (j = 0; j < num_band0; j++) { /* band index0 */
if (f0[j] < cutoff_frequency) {
continue;
}
sum_g_k = 0;
for (k = 0; k < num_band; k++) { /* band index */
f = frequencies[gp * num_band + k];
if (f < cutoff_frequency) {
continue;
for (i = 0; i < num_grid_points; i++) {
gp = ir_grid_points[i];
for (j = 0; j < num_band0; j++) { /* band index0 */
if (f0[j] < cutoff_frequency) {
continue;
}
sum_g_k = 0;
for (k = 0; k < num_band; k++) { /* band index */
f = frequencies[gp * num_band + k];
if (f < cutoff_frequency) {
continue;
}
dist = integration_weights[gp * num_band0 * num_band +
j * num_band + k];
for (l = 0; l < num_band / 3; l++) { /* elements */
a = 0;
b = 0;
for (m = 0; m < 3; m++) {
e1_r = lapack_complex_double_real(
eigenvectors[gp * num_band * num_band +
(l * 3 + m) * num_band + k]);
e1_i = lapack_complex_double_imag(
eigenvectors[gp * num_band * num_band +
(l * 3 + m) * num_band + k]);
a += (e0_r[j * num_band + l * 3 + m] * e1_r +
e0_i[j * num_band + l * 3 + m] * e1_i);
b += (e0_i[j * num_band + l * 3 + m] * e1_r -
e0_r[j * num_band + l * 3 + m] * e1_i);
}
sum_g_k += (a * a + b * b) * mass_variances[l] * dist;
}
}
gamma_ij[gp * num_band0 + j] = sum_g_k * weights[gp];
}
dist = integration_weights[gp * num_band0 * num_band +
j * num_band + k];
for (l = 0; l < num_band / 3; l++) { /* elements */
a = 0;
b = 0;
for (m = 0; m < 3; m++) {
e1_r = lapack_complex_double_real
(eigenvectors
[gp * num_band * num_band + (l * 3 + m) * num_band + k]);
e1_i = lapack_complex_double_imag
(eigenvectors
[gp * num_band * num_band + (l * 3 + m) * num_band + k]);
a += (e0_r[j * num_band + l * 3 + m] * e1_r +
e0_i[j * num_band + l * 3 + m] * e1_i);
b += (e0_i[j * num_band + l * 3 + m] * e1_r -
e0_r[j * num_band + l * 3 + m] * e1_i);
}
sum_g_k += (a * a + b * b) * mass_variances[l] * dist;
}
for (i = 0; i < num_band0; i++) {
gamma[i] = 0;
}
for (i = 0; i < num_grid_points; i++) {
gp = ir_grid_points[i];
for (j = 0; j < num_band0; j++) {
gamma[j] += gamma_ij[gp * num_band0 + j];
}
}
gamma_ij[gp * num_band0 + j] = sum_g_k * weights[gp];
}
}
for (i = 0; i < num_band0; i++) {
gamma[i] = 0;
}
for (i = 0; i < num_grid_points; i++) {
gp = ir_grid_points[i];
for (j = 0; j < num_band0; j++) {
gamma[j] += gamma_ij[gp * num_band0 + j];
for (i = 0; i < num_band0; i++) {
/* Frequency unit to ang-freq: *(2pi)**2/(2pi) */
/* Ang-freq to freq unit (for lifetime): /2pi */
/* gamma = 1/2t */
gamma[i] *= M_2PI / 4 * f0[i] * f0[i] / 2;
}
}
for (i = 0; i < num_band0; i++) {
/* Frequency unit to ang-freq: *(2pi)**2/(2pi) */
/* Ang-freq to freq unit (for lifetime): /2pi */
/* gamma = 1/2t */
gamma[i] *= M_2PI / 4 * f0[i] * f0[i] / 2;
}
free(gamma_ij);
gamma_ij = NULL;
free(f0);
f0 = NULL;
free(e0_r);
e0_r = NULL;
free(e0_i);
e0_i = NULL;
free(gamma_ij);
gamma_ij = NULL;
free(f0);
f0 = NULL;
free(e0_r);
e0_r = NULL;
free(e0_i);
e0_i = NULL;
}

View File

@ -37,30 +37,16 @@
#include "lapack_wrapper.h"
void
iso_get_isotope_scattering_strength(double *gamma,
const long grid_point,
const double *mass_variances,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long num_grid_points,
const long *band_indices,
const long num_band,
const long num_band0,
const double sigma,
const double cutoff_frequency);
void iso_get_thm_isotope_scattering_strength
(double *gamma,
const long grid_point,
const long *ir_grid_points,
const long *weights,
const double *mass_variances,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long num_grid_points,
const long *band_indices,
const long num_band,
const long num_band0,
const double *integration_weights,
const double cutoff_frequency);
void iso_get_isotope_scattering_strength(
double *gamma, const long grid_point, const double *mass_variances,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long num_grid_points, const long *band_indices, const long num_band,
const long num_band0, const double sigma, const double cutoff_frequency);
void iso_get_thm_isotope_scattering_strength(
double *gamma, const long grid_point, const long *ir_grid_points,
const long *weights, const double *mass_variances,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long num_grid_points, const long *band_indices, const long num_band,
const long num_band0, const double *integration_weights,
const double cutoff_frequency);
#endif

View File

@ -34,254 +34,216 @@
#include "lagrid.h"
long lagmat_get_determinant_l3(const long a[3][3])
{
return a[0][0] * (a[1][1] * a[2][2] - a[1][2] * a[2][1])
+ a[0][1] * (a[1][2] * a[2][0] - a[1][0] * a[2][2])
+ a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]);
long lagmat_get_determinant_l3(const long a[3][3]) {
return a[0][0] * (a[1][1] * a[2][2] - a[1][2] * a[2][1]) +
a[0][1] * (a[1][2] * a[2][0] - a[1][0] * a[2][2]) +
a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]);
}
double lagmat_get_determinant_d3(const double a[3][3])
{
return a[0][0] * (a[1][1] * a[2][2] - a[1][2] * a[2][1])
+ a[0][1] * (a[1][2] * a[2][0] - a[1][0] * a[2][2])
+ a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]);
double lagmat_get_determinant_d3(const double a[3][3]) {
return a[0][0] * (a[1][1] * a[2][2] - a[1][2] * a[2][1]) +
a[0][1] * (a[1][2] * a[2][0] - a[1][0] * a[2][2]) +
a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]);
}
void lagmat_cast_matrix_3l_to_3d(double m[3][3], const long a[3][3])
{
m[0][0] = a[0][0];
m[0][1] = a[0][1];
m[0][2] = a[0][2];
m[1][0] = a[1][0];
m[1][1] = a[1][1];
m[1][2] = a[1][2];
m[2][0] = a[2][0];
m[2][1] = a[2][1];
m[2][2] = a[2][2];
void lagmat_cast_matrix_3l_to_3d(double m[3][3], const long a[3][3]) {
m[0][0] = a[0][0];
m[0][1] = a[0][1];
m[0][2] = a[0][2];
m[1][0] = a[1][0];
m[1][1] = a[1][1];
m[1][2] = a[1][2];
m[2][0] = a[2][0];
m[2][1] = a[2][1];
m[2][2] = a[2][2];
}
void lagmat_cast_matrix_3d_to_3l(long m[3][3], const double a[3][3])
{
m[0][0] = lagmat_Nint(a[0][0]);
m[0][1] = lagmat_Nint(a[0][1]);
m[0][2] = lagmat_Nint(a[0][2]);
m[1][0] = lagmat_Nint(a[1][0]);
m[1][1] = lagmat_Nint(a[1][1]);
m[1][2] = lagmat_Nint(a[1][2]);
m[2][0] = lagmat_Nint(a[2][0]);
m[2][1] = lagmat_Nint(a[2][1]);
m[2][2] = lagmat_Nint(a[2][2]);
void lagmat_cast_matrix_3d_to_3l(long m[3][3], const double a[3][3]) {
m[0][0] = lagmat_Nint(a[0][0]);
m[0][1] = lagmat_Nint(a[0][1]);
m[0][2] = lagmat_Nint(a[0][2]);
m[1][0] = lagmat_Nint(a[1][0]);
m[1][1] = lagmat_Nint(a[1][1]);
m[1][2] = lagmat_Nint(a[1][2]);
m[2][0] = lagmat_Nint(a[2][0]);
m[2][1] = lagmat_Nint(a[2][1]);
m[2][2] = lagmat_Nint(a[2][2]);
}
long lagmat_get_similar_matrix_ld3(double m[3][3],
const long a[3][3],
long lagmat_get_similar_matrix_ld3(double m[3][3], const long a[3][3],
const double b[3][3],
const double precision)
{
double c[3][3];
if (!lagmat_inverse_matrix_d3(c, b, precision)) {
warning_print("No similar matrix due to 0 determinant.\n");
return 0;
}
lagmat_multiply_matrix_ld3(m, a, b);
lagmat_multiply_matrix_d3(m, c, m);
return 1;
}
long lagmat_check_identity_matrix_l3(const long a[3][3],
const long b[3][3])
{
if (a[0][0] - b[0][0] ||
a[0][1] - b[0][1] ||
a[0][2] - b[0][2] ||
a[1][0] - b[1][0] ||
a[1][1] - b[1][1] ||
a[1][2] - b[1][2] ||
a[2][0] - b[2][0] ||
a[2][1] - b[2][1] ||
a[2][2] - b[2][2]) {
return 0;
}
else {
const double precision) {
double c[3][3];
if (!lagmat_inverse_matrix_d3(c, b, precision)) {
warning_print("No similar matrix due to 0 determinant.\n");
return 0;
}
lagmat_multiply_matrix_ld3(m, a, b);
lagmat_multiply_matrix_d3(m, c, m);
return 1;
}
}
long lagmat_check_identity_matrix_ld3(const long a[3][3],
const double b[3][3],
const double symprec)
{
if (lagmat_Dabs(a[0][0] - b[0][0]) > symprec ||
lagmat_Dabs(a[0][1] - b[0][1]) > symprec ||
lagmat_Dabs(a[0][2] - b[0][2]) > symprec ||
lagmat_Dabs(a[1][0] - b[1][0]) > symprec ||
lagmat_Dabs(a[1][1] - b[1][1]) > symprec ||
lagmat_Dabs(a[1][2] - b[1][2]) > symprec ||
lagmat_Dabs(a[2][0] - b[2][0]) > symprec ||
lagmat_Dabs(a[2][1] - b[2][1]) > symprec ||
lagmat_Dabs(a[2][2] - b[2][2]) > symprec) {
return 0;
}
else {
long lagmat_check_identity_matrix_l3(const long a[3][3], const long b[3][3]) {
if (a[0][0] - b[0][0] || a[0][1] - b[0][1] || a[0][2] - b[0][2] ||
a[1][0] - b[1][0] || a[1][1] - b[1][1] || a[1][2] - b[1][2] ||
a[2][0] - b[2][0] || a[2][1] - b[2][1] || a[2][2] - b[2][2]) {
return 0;
} else {
return 1;
}
}
long lagmat_check_identity_matrix_ld3(const long a[3][3], const double b[3][3],
const double symprec) {
if (lagmat_Dabs(a[0][0] - b[0][0]) > symprec ||
lagmat_Dabs(a[0][1] - b[0][1]) > symprec ||
lagmat_Dabs(a[0][2] - b[0][2]) > symprec ||
lagmat_Dabs(a[1][0] - b[1][0]) > symprec ||
lagmat_Dabs(a[1][1] - b[1][1]) > symprec ||
lagmat_Dabs(a[1][2] - b[1][2]) > symprec ||
lagmat_Dabs(a[2][0] - b[2][0]) > symprec ||
lagmat_Dabs(a[2][1] - b[2][1]) > symprec ||
lagmat_Dabs(a[2][2] - b[2][2]) > symprec) {
return 0;
} else {
return 1;
}
}
long lagmat_inverse_matrix_d3(double m[3][3], const double a[3][3],
const double precision) {
double det;
double c[3][3];
det = lagmat_get_determinant_d3(a);
if (lagmat_Dabs(det) < precision) {
warning_print("No inverse matrix (det=%f)\n", det);
return 0;
}
c[0][0] = (a[1][1] * a[2][2] - a[1][2] * a[2][1]) / det;
c[1][0] = (a[1][2] * a[2][0] - a[1][0] * a[2][2]) / det;
c[2][0] = (a[1][0] * a[2][1] - a[1][1] * a[2][0]) / det;
c[0][1] = (a[2][1] * a[0][2] - a[2][2] * a[0][1]) / det;
c[1][1] = (a[2][2] * a[0][0] - a[2][0] * a[0][2]) / det;
c[2][1] = (a[2][0] * a[0][1] - a[2][1] * a[0][0]) / det;
c[0][2] = (a[0][1] * a[1][2] - a[0][2] * a[1][1]) / det;
c[1][2] = (a[0][2] * a[1][0] - a[0][0] * a[1][2]) / det;
c[2][2] = (a[0][0] * a[1][1] - a[0][1] * a[1][0]) / det;
lagmat_copy_matrix_d3(m, c);
return 1;
}
}
long lagmat_inverse_matrix_d3(double m[3][3],
const double a[3][3],
const double precision)
{
double det;
double c[3][3];
det = lagmat_get_determinant_d3(a);
if (lagmat_Dabs(det) < precision) {
warning_print("No inverse matrix (det=%f)\n", det);
return 0;
}
c[0][0] = (a[1][1] * a[2][2] - a[1][2] * a[2][1]) / det;
c[1][0] = (a[1][2] * a[2][0] - a[1][0] * a[2][2]) / det;
c[2][0] = (a[1][0] * a[2][1] - a[1][1] * a[2][0]) / det;
c[0][1] = (a[2][1] * a[0][2] - a[2][2] * a[0][1]) / det;
c[1][1] = (a[2][2] * a[0][0] - a[2][0] * a[0][2]) / det;
c[2][1] = (a[2][0] * a[0][1] - a[2][1] * a[0][0]) / det;
c[0][2] = (a[0][1] * a[1][2] - a[0][2] * a[1][1]) / det;
c[1][2] = (a[0][2] * a[1][0] - a[0][0] * a[1][2]) / det;
c[2][2] = (a[0][0] * a[1][1] - a[0][1] * a[1][0]) / det;
lagmat_copy_matrix_d3(m, c);
return 1;
void lagmat_transpose_matrix_l3(long a[3][3], const long b[3][3]) {
long c[3][3];
c[0][0] = b[0][0];
c[0][1] = b[1][0];
c[0][2] = b[2][0];
c[1][0] = b[0][1];
c[1][1] = b[1][1];
c[1][2] = b[2][1];
c[2][0] = b[0][2];
c[2][1] = b[1][2];
c[2][2] = b[2][2];
lagmat_copy_matrix_l3(a, c);
}
void lagmat_transpose_matrix_l3(long a[3][3], const long b[3][3])
{
long c[3][3];
c[0][0] = b[0][0];
c[0][1] = b[1][0];
c[0][2] = b[2][0];
c[1][0] = b[0][1];
c[1][1] = b[1][1];
c[1][2] = b[2][1];
c[2][0] = b[0][2];
c[2][1] = b[1][2];
c[2][2] = b[2][2];
lagmat_copy_matrix_l3(a, c);
}
void lagmat_multiply_matrix_vector_l3(long v[3],
const long a[3][3],
const long b[3])
{
long i;
long c[3];
for (i = 0; i < 3; i++) {
c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2];
}
for (i = 0; i < 3; i++) {
v[i] = c[i];
}
}
void lagmat_multiply_matrix_l3(long m[3][3],
const long a[3][3],
const long b[3][3])
{
long i, j; /* a_ij */
long c[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] =
a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
void lagmat_multiply_matrix_vector_l3(long v[3], const long a[3][3],
const long b[3]) {
long i;
long c[3];
for (i = 0; i < 3; i++) {
c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2];
}
}
lagmat_copy_matrix_l3(m, c);
}
void lagmat_multiply_matrix_ld3(double m[3][3],
const long a[3][3],
const double b[3][3])
{
long i, j; /* a_ij */
double c[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] =
a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
for (i = 0; i < 3; i++) {
v[i] = c[i];
}
}
lagmat_copy_matrix_d3(m, c);
}
void lagmat_multiply_matrix_d3(double m[3][3],
const double a[3][3],
const double b[3][3])
{
long i, j; /* a_ij */
double c[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] =
a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
void lagmat_multiply_matrix_l3(long m[3][3], const long a[3][3],
const long b[3][3]) {
long i, j; /* a_ij */
long c[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
}
}
}
lagmat_copy_matrix_d3(m, c);
lagmat_copy_matrix_l3(m, c);
}
void lagmat_copy_matrix_l3(long a[3][3], const long b[3][3])
{
a[0][0] = b[0][0];
a[0][1] = b[0][1];
a[0][2] = b[0][2];
a[1][0] = b[1][0];
a[1][1] = b[1][1];
a[1][2] = b[1][2];
a[2][0] = b[2][0];
a[2][1] = b[2][1];
a[2][2] = b[2][2];
void lagmat_multiply_matrix_ld3(double m[3][3], const long a[3][3],
const double b[3][3]) {
long i, j; /* a_ij */
double c[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
}
}
lagmat_copy_matrix_d3(m, c);
}
void lagmat_copy_matrix_d3(double a[3][3], const double b[3][3])
{
a[0][0] = b[0][0];
a[0][1] = b[0][1];
a[0][2] = b[0][2];
a[1][0] = b[1][0];
a[1][1] = b[1][1];
a[1][2] = b[1][2];
a[2][0] = b[2][0];
a[2][1] = b[2][1];
a[2][2] = b[2][2];
void lagmat_multiply_matrix_d3(double m[3][3], const double a[3][3],
const double b[3][3]) {
long i, j; /* a_ij */
double c[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
}
}
lagmat_copy_matrix_d3(m, c);
}
void lagmat_copy_vector_l3(long a[3], const long b[3])
{
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
void lagmat_copy_matrix_l3(long a[3][3], const long b[3][3]) {
a[0][0] = b[0][0];
a[0][1] = b[0][1];
a[0][2] = b[0][2];
a[1][0] = b[1][0];
a[1][1] = b[1][1];
a[1][2] = b[1][2];
a[2][0] = b[2][0];
a[2][1] = b[2][1];
a[2][2] = b[2][2];
}
long lagmat_modulo_l(const long a, const long b)
{
long c;
c = a % b;
if (c < 0) {
c += b;
}
return c;
void lagmat_copy_matrix_d3(double a[3][3], const double b[3][3]) {
a[0][0] = b[0][0];
a[0][1] = b[0][1];
a[0][2] = b[0][2];
a[1][0] = b[1][0];
a[1][1] = b[1][1];
a[1][2] = b[1][2];
a[2][0] = b[2][0];
a[2][1] = b[2][1];
a[2][2] = b[2][2];
}
long lagmat_Nint(const double a)
{
if (a < 0.0)
return (long) (a - 0.5);
else
return (long) (a + 0.5);
void lagmat_copy_vector_l3(long a[3], const long b[3]) {
a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
}
double lagmat_Dabs(const double a)
{
if (a < 0.0)
return -a;
else
return a;
long lagmat_modulo_l(const long a, const long b) {
long c;
c = a % b;
if (c < 0) {
c += b;
}
return c;
}
long lagmat_Nint(const double a) {
if (a < 0.0)
return (long)(a - 0.5);
else
return (long)(a + 0.5);
}
double lagmat_Dabs(const double a) {
if (a < 0.0)
return -a;
else
return a;
}

View File

@ -36,7 +36,7 @@
#define __lagrid_H__
#ifdef LAGWARNING
#define warning_print(...) fprintf(stderr,__VA_ARGS__)
#define warning_print(...) fprintf(stderr, __VA_ARGS__)
#else
#define warning_print(...)
#endif
@ -45,30 +45,22 @@ long lagmat_get_determinant_l3(const long a[3][3]);
double lagmat_get_determinant_d3(const double a[3][3]);
void lagmat_cast_matrix_3l_to_3d(double m[3][3], const long a[3][3]);
void lagmat_cast_matrix_3d_to_3l(long m[3][3], const double a[3][3]);
long lagmat_get_similar_matrix_ld3(double m[3][3],
const long a[3][3],
long lagmat_get_similar_matrix_ld3(double m[3][3], const long a[3][3],
const double b[3][3],
const double precision);
long lagmat_check_identity_matrix_l3(const long a[3][3],
const long b[3][3]);
long lagmat_check_identity_matrix_ld3(const long a[3][3],
const double b[3][3],
long lagmat_check_identity_matrix_l3(const long a[3][3], const long b[3][3]);
long lagmat_check_identity_matrix_ld3(const long a[3][3], const double b[3][3],
const double symprec);
long lagmat_inverse_matrix_d3(double m[3][3],
const double a[3][3],
long lagmat_inverse_matrix_d3(double m[3][3], const double a[3][3],
const double precision);
void lagmat_transpose_matrix_l3(long a[3][3], const long b[3][3]);
void lagmat_multiply_matrix_vector_l3(long v[3],
const long a[3][3],
void lagmat_multiply_matrix_vector_l3(long v[3], const long a[3][3],
const long b[3]);
void lagmat_multiply_matrix_l3(long m[3][3],
const long a[3][3],
void lagmat_multiply_matrix_l3(long m[3][3], const long a[3][3],
const long b[3][3]);
void lagmat_multiply_matrix_ld3(double m[3][3],
const long a[3][3],
void lagmat_multiply_matrix_ld3(double m[3][3], const long a[3][3],
const double b[3][3]);
void lagmat_multiply_matrix_d3(double m[3][3],
const double a[3][3],
void lagmat_multiply_matrix_d3(double m[3][3], const double a[3][3],
const double b[3][3]);
void lagmat_copy_matrix_l3(long a[3][3], const long b[3][3]);
void lagmat_copy_matrix_d3(double a[3][3], const double b[3][3]);

View File

@ -34,212 +34,163 @@
#include "lapack_wrapper.h"
#define min(a,b) ((a)>(b)?(b):(a))
#define min(a, b) ((a) > (b) ? (b) : (a))
#ifdef MKL_LAPACKE
MKL_Complex16 lapack_make_complex_double( double re, double im ) {
MKL_Complex16 z;
z.real = re;
z.imag = im;
return z;
MKL_Complex16 lapack_make_complex_double(double re, double im) {
MKL_Complex16 z;
z.real = re;
z.imag = im;
return z;
}
#ifndef LAPACKE_malloc
#define LAPACKE_malloc( size ) malloc( size )
#define LAPACKE_malloc(size) malloc(size)
#endif
#ifndef LAPACKE_free
#define LAPACKE_free( p ) free( p )
#define LAPACKE_free(p) free(p)
#endif
#endif
int phonopy_zheev(double *w,
lapack_complex_double *a,
const int n,
const char uplo)
{
lapack_int info;
info = LAPACKE_zheev(LAPACK_ROW_MAJOR,'V', uplo,
(lapack_int)n, a, (lapack_int)n, w);
return (int)info;
int phonopy_zheev(double *w, lapack_complex_double *a, const int n,
const char uplo) {
lapack_int info;
info = LAPACKE_zheev(LAPACK_ROW_MAJOR, 'V', uplo, (lapack_int)n, a,
(lapack_int)n, w);
return (int)info;
}
int phonopy_pinv(double *data_out,
const double *data_in,
const int m,
const int n,
const double cutoff)
{
int i, j, k;
lapack_int info;
double *s, *a, *u, *vt, *superb;
int phonopy_pinv(double *data_out, const double *data_in, const int m,
const int n, const double cutoff) {
int i, j, k;
lapack_int info;
double *s, *a, *u, *vt, *superb;
a = (double*)malloc(sizeof(double) * m * n);
s = (double*)malloc(sizeof(double) * min(m,n));
u = (double*)malloc(sizeof(double) * m * m);
vt = (double*)malloc(sizeof(double) * n * n);
superb = (double*)malloc(sizeof(double) * (min(m,n) - 1));
a = (double *)malloc(sizeof(double) * m * n);
s = (double *)malloc(sizeof(double) * min(m, n));
u = (double *)malloc(sizeof(double) * m * m);
vt = (double *)malloc(sizeof(double) * n * n);
superb = (double *)malloc(sizeof(double) * (min(m, n) - 1));
for (i = 0; i < m * n; i++) {
a[i] = data_in[i];
}
info = LAPACKE_dgesvd(LAPACK_ROW_MAJOR,
'A',
'A',
(lapack_int)m,
(lapack_int)n,
a,
(lapack_int)n,
s,
u,
(lapack_int)m,
vt,
(lapack_int)n,
superb);
for (i = 0; i < n * m; i++) {
data_out[i] = 0;
}
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
for (k = 0; k < min(m,n); k++) {
if (s[k] > cutoff) {
data_out[j * m + i] += u[i * m + k] / s[k] * vt[k * n + j];
}
}
for (i = 0; i < m * n; i++) {
a[i] = data_in[i];
}
}
free(a);
free(s);
free(u);
free(vt);
free(superb);
info = LAPACKE_dgesvd(LAPACK_ROW_MAJOR, 'A', 'A', (lapack_int)m,
(lapack_int)n, a, (lapack_int)n, s, u, (lapack_int)m,
vt, (lapack_int)n, superb);
return (int)info;
for (i = 0; i < n * m; i++) {
data_out[i] = 0;
}
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
for (k = 0; k < min(m, n); k++) {
if (s[k] > cutoff) {
data_out[j * m + i] += u[i * m + k] / s[k] * vt[k * n + j];
}
}
}
}
free(a);
free(s);
free(u);
free(vt);
free(superb);
return (int)info;
}
void phonopy_pinv_mt(double *data_out,
int *info_out,
const double *data_in,
const int num_thread,
const int *row_nums,
const int max_row_num,
const int column_num,
const double cutoff)
{
int i;
void phonopy_pinv_mt(double *data_out, int *info_out, const double *data_in,
const int num_thread, const int *row_nums,
const int max_row_num, const int column_num,
const double cutoff) {
int i;
#ifdef PHPYOPENMP
#pragma omp parallel for
#endif
for (i = 0; i < num_thread; i++) {
info_out[i] = phonopy_pinv(data_out + i * max_row_num * column_num,
data_in + i * max_row_num * column_num,
row_nums[i],
column_num,
cutoff);
}
for (i = 0; i < num_thread; i++) {
info_out[i] = phonopy_pinv(data_out + i * max_row_num * column_num,
data_in + i * max_row_num * column_num,
row_nums[i], column_num, cutoff);
}
}
int phonopy_dsyev(double *data,
double *eigvals,
const int size,
const int algorithm)
{
lapack_int info;
int phonopy_dsyev(double *data, double *eigvals, const int size,
const int algorithm) {
lapack_int info;
lapack_int liwork;
long lwork;
lapack_int* iwork;
double* work;
lapack_int iwork_query;
double work_query;
lapack_int liwork;
long lwork;
lapack_int *iwork;
double *work;
lapack_int iwork_query;
double work_query;
info = 0;
liwork = -1;
lwork = -1;
iwork = NULL;
work = NULL;
info = 0;
liwork = -1;
lwork = -1;
iwork = NULL;
work = NULL;
switch (algorithm) {
case 0: /* dsyev */
info = LAPACKE_dsyev(LAPACK_COL_MAJOR,
'V',
'U',
(lapack_int)size,
data,
(lapack_int)size,
eigvals);
break;
case 1: /* dsyevd */
info = LAPACKE_dsyevd_work(LAPACK_COL_MAJOR,
'V',
'U',
(lapack_int)size,
data,
(lapack_int)size,
eigvals,
&work_query,
lwork,
&iwork_query,
liwork);
liwork = iwork_query;
lwork = (long)work_query;
/* printf("liwork %d, lwork %ld\n", liwork, lwork); */
if ((iwork = (lapack_int*)LAPACKE_malloc(sizeof(lapack_int) * liwork))
== NULL) {
goto end;
};
if ((work = (double*)LAPACKE_malloc(sizeof(double) * lwork)) == NULL) {
goto end;
switch (algorithm) {
case 0: /* dsyev */
info = LAPACKE_dsyev(LAPACK_COL_MAJOR, 'V', 'U', (lapack_int)size,
data, (lapack_int)size, eigvals);
break;
case 1: /* dsyevd */
info = LAPACKE_dsyevd_work(LAPACK_COL_MAJOR, 'V', 'U',
(lapack_int)size, data, (lapack_int)size,
eigvals, &work_query, lwork,
&iwork_query, liwork);
liwork = iwork_query;
lwork = (long)work_query;
/* printf("liwork %d, lwork %ld\n", liwork, lwork); */
if ((iwork = (lapack_int *)LAPACKE_malloc(sizeof(lapack_int) *
liwork)) == NULL) {
goto end;
};
if ((work = (double *)LAPACKE_malloc(sizeof(double) * lwork)) ==
NULL) {
goto end;
}
info = LAPACKE_dsyevd_work(LAPACK_COL_MAJOR, 'V', 'U',
(lapack_int)size, data, (lapack_int)size,
eigvals, work, lwork, iwork, liwork);
end:
if (iwork) {
LAPACKE_free(iwork);
iwork = NULL;
}
if (work) {
LAPACKE_free(work);
work = NULL;
}
/* info = LAPACKE_dsyevd(LAPACK_COL_MAJOR, */
/* 'V', */
/* 'U', */
/* (lapack_int)size, */
/* data, */
/* (lapack_int)size, */
/* eigvals); */
break;
}
info = LAPACKE_dsyevd_work(LAPACK_COL_MAJOR,
'V',
'U',
(lapack_int)size,
data,
(lapack_int)size,
eigvals,
work,
lwork,
iwork,
liwork);
end:
if (iwork) {
LAPACKE_free(iwork);
iwork = NULL;
}
if (work) {
LAPACKE_free(work);
work = NULL;
}
/* info = LAPACKE_dsyevd(LAPACK_COL_MAJOR, */
/* 'V', */
/* 'U', */
/* (lapack_int)size, */
/* data, */
/* (lapack_int)size, */
/* eigvals); */
break;
}
return (int)info;
return (int)info;
}
lapack_complex_double
phonoc_complex_prod(const lapack_complex_double a,
const lapack_complex_double b)
{
lapack_complex_double c;
c = lapack_make_complex_double
(lapack_complex_double_real(a) * lapack_complex_double_real(b) -
lapack_complex_double_imag(a) * lapack_complex_double_imag(b),
lapack_complex_double_imag(a) * lapack_complex_double_real(b) +
lapack_complex_double_real(a) * lapack_complex_double_imag(b));
return c;
lapack_complex_double phonoc_complex_prod(const lapack_complex_double a,
const lapack_complex_double b) {
lapack_complex_double c;
c = lapack_make_complex_double(
lapack_complex_double_real(a) * lapack_complex_double_real(b) -
lapack_complex_double_imag(a) * lapack_complex_double_imag(b),
lapack_complex_double_imag(a) * lapack_complex_double_real(b) +
lapack_complex_double_real(a) * lapack_complex_double_imag(b));
return c;
}

View File

@ -45,30 +45,18 @@ MKL_Complex16 lapack_make_complex_double(double re, double im);
#include <lapacke.h>
#endif
int phonopy_zheev(double *w,
lapack_complex_double *a,
const int n,
int phonopy_zheev(double *w, lapack_complex_double *a, const int n,
const char uplo);
int phonopy_pinv(double *data_out,
const double *data_in,
const int m,
const int n,
const double cutoff);
void phonopy_pinv_mt(double *data_out,
int *info_out,
const double *data_in,
const int num_thread,
const int *row_nums,
const int max_row_num,
const int column_num,
int phonopy_pinv(double *data_out, const double *data_in, const int m,
const int n, const double cutoff);
void phonopy_pinv_mt(double *data_out, int *info_out, const double *data_in,
const int num_thread, const int *row_nums,
const int max_row_num, const int column_num,
const double cutoff);
int phonopy_dsyev(double *data,
double *eigvals,
const int size,
int phonopy_dsyev(double *data, double *eigvals, const int size,
const int algorithm);
lapack_complex_double
phonoc_complex_prod(const lapack_complex_double a,
const lapack_complex_double b);
lapack_complex_double phonoc_complex_prod(const lapack_complex_double a,
const lapack_complex_double b);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -42,251 +42,130 @@
#endif
#include "phonoc_array.h"
long ph3py_get_interaction(Darray *fc3_normal_squared,
const char *g_zero,
const Darray *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const long (*bz_grid_addresses)[3],
const long D_diag[3],
const long Q[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multi)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long symmetrize_fc3_q,
const double cutoff_frequency);
long ph3py_get_pp_collision(double *imag_self_energy,
const long relative_grid_address[24][4][3], /* thm */
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const long *triplet_weights,
const long (*bz_grid_addresses)[3], /* thm */
const long *bz_map, /* thm */
const long bz_grid_type,
const long D_diag[3],
const long Q[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multi)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const Larray *band_indices,
const Darray *temperatures,
const long is_NU,
const long symmetrize_fc3_q,
const double cutoff_frequency);
long ph3py_get_interaction(
Darray *fc3_normal_squared, const char *g_zero, const Darray *frequencies,
const lapack_complex_double *eigenvectors, const long (*triplets)[3],
const long num_triplets, const long (*bz_grid_addresses)[3],
const long D_diag[3], const long Q[3][3], const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multi)[2], const double *masses,
const long *p2s_map, const long *s2p_map, const long *band_indices,
const long symmetrize_fc3_q, const double cutoff_frequency);
long ph3py_get_pp_collision(
double *imag_self_energy,
const long relative_grid_address[24][4][3], /* thm */
const double *frequencies, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long num_triplets,
const long *triplet_weights, const long (*bz_grid_addresses)[3], /* thm */
const long *bz_map, /* thm */
const long bz_grid_type, const long D_diag[3], const long Q[3][3],
const double *fc3, const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multi)[2], const double *masses,
const long *p2s_map, const long *s2p_map, const Larray *band_indices,
const Darray *temperatures, const long is_NU, const long symmetrize_fc3_q,
const double cutoff_frequency);
long ph3py_get_pp_collision_with_sigma(
double *imag_self_energy,
const double sigma,
const double sigma_cutoff,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const long *triplet_weights,
const long (*bz_grid_addresses)[3],
const long D_diag[3],
const long Q[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multi)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const Larray *band_indices,
const Darray *temperatures,
const long is_NU,
const long symmetrize_fc3_q,
const double cutoff_frequency);
double *imag_self_energy, const double sigma, const double sigma_cutoff,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long num_triplets,
const long *triplet_weights, const long (*bz_grid_addresses)[3],
const long D_diag[3], const long Q[3][3], const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multi)[2], const double *masses,
const long *p2s_map, const long *s2p_map, const Larray *band_indices,
const Darray *temperatures, const long is_NU, const long symmetrize_fc3_q,
const double cutoff_frequency);
void ph3py_get_imag_self_energy_at_bands_with_g(
double *imag_self_energy,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double *g,
const char *g_zero,
const double temperature,
const double cutoff_frequency,
const long num_frequency_points,
const long frequency_point_index);
double *imag_self_energy, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double *g, const char *g_zero,
const double temperature, const double cutoff_frequency,
const long num_frequency_points, const long frequency_point_index);
void ph3py_get_detailed_imag_self_energy_at_bands_with_g(
double *detailed_imag_self_energy,
double *imag_self_energy_N,
double *imag_self_energy_U,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const long (*bz_grid_addresses)[3],
const double *g,
const char *g_zero,
const double temperature,
const double cutoff_frequency);
void ph3py_get_real_self_energy_at_bands(double *real_self_energy,
const Darray *fc3_normal_squared,
const long *band_indices,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
double *detailed_imag_self_energy, double *imag_self_energy_N,
double *imag_self_energy_U, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const long (*bz_grid_addresses)[3],
const double *g, const char *g_zero, const double temperature,
const double cutoff_frequency);
void ph3py_get_real_self_energy_at_bands(
double *real_self_energy, const Darray *fc3_normal_squared,
const long *band_indices, const double *frequencies,
const long (*triplets)[3], const long *triplet_weights,
const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
void ph3py_get_real_self_energy_at_frequency_point(
double *real_self_energy,
const double frequency_point,
const Darray *fc3_normal_squared,
const long *band_indices,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
void ph3py_get_collision_matrix(double *collision_matrix,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long *map_q,
const long *rotated_grid_points,
const double *rotations_cartesian,
const double *g,
const long num_ir_gp,
const long num_gp,
const long num_rot,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
void ph3py_get_reducible_collision_matrix(double *collision_matrix,
const Darray *fc3_normal_squared,
const double *frequencies,
const long (*triplets)[3],
const long *triplets_map,
const long *map_q,
const double *g,
const long num_gp,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
double *real_self_energy, const double frequency_point,
const Darray *fc3_normal_squared, const long *band_indices,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
void ph3py_get_collision_matrix(
double *collision_matrix, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplets_map, const long *map_q,
const long *rotated_grid_points, const double *rotations_cartesian,
const double *g, const long num_ir_gp, const long num_gp,
const long num_rot, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
void ph3py_get_reducible_collision_matrix(
double *collision_matrix, const Darray *fc3_normal_squared,
const double *frequencies, const long (*triplets)[3],
const long *triplets_map, const long *map_q, const double *g,
const long num_gp, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
void ph3py_get_isotope_scattering_strength(
double *gamma,
const long grid_point,
const double *mass_variances,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long num_grid_points,
const long *band_indices,
const long num_band,
const long num_band0,
const double sigma,
const double cutoff_frequency);
double *gamma, const long grid_point, const double *mass_variances,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long num_grid_points, const long *band_indices, const long num_band,
const long num_band0, const double sigma, const double cutoff_frequency);
void ph3py_get_thm_isotope_scattering_strength(
double *gamma,
const long grid_point,
const long *ir_grid_points,
const long *weights,
const double *mass_variances,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long num_ir_grid_points,
const long *band_indices,
const long num_band,
const long num_band0,
const double *integration_weights,
const double cutoff_frequency);
void ph3py_distribute_fc3(double *fc3,
const long target,
const long source,
const long *atom_mapping,
const long num_atom,
double *gamma, const long grid_point, const long *ir_grid_points,
const long *weights, const double *mass_variances,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long num_ir_grid_points, const long *band_indices,
const long num_band, const long num_band0,
const double *integration_weights, const double cutoff_frequency);
void ph3py_distribute_fc3(double *fc3, const long target, const long source,
const long *atom_mapping, const long num_atom,
const double *rot_cart);
void ph3py_rotate_delta_fc2(double (*fc3)[3][3][3],
const double (*delta_fc2s)[3][3],
const double *inv_U,
const double (*site_sym_cart)[3][3],
const long *rot_map_syms,
const long num_atom,
const long num_site_sym,
const long num_disp);
const long *rot_map_syms, const long num_atom,
const long num_site_sym, const long num_disp);
void ph3py_get_permutation_symmetry_fc3(double *fc3, const long num_atom);
void ph3py_get_permutation_symmetry_compact_fc3(double * fc3,
const long p2s[],
const long s2pp[],
const long nsym_list[],
const long perms[],
const long n_satom,
const long n_patom);
void ph3py_transpose_compact_fc3(double * fc3,
const long p2s[],
const long s2pp[],
const long nsym_list[],
const long perms[],
const long n_satom,
const long n_patom,
const long t_type);
long ph3py_get_triplets_reciprocal_mesh_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long mesh[3],
const long is_time_reversal,
const long num_rot,
const long (*rec_rotations)[3][3],
const long swappable);
long ph3py_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
void ph3py_get_permutation_symmetry_compact_fc3(
double *fc3, const long p2s[], const long s2pp[], const long nsym_list[],
const long perms[], const long n_satom, const long n_patom);
void ph3py_transpose_compact_fc3(double *fc3, const long p2s[],
const long s2pp[], const long nsym_list[],
const long perms[], const long n_satom,
const long n_patom, const long t_type);
long ph3py_get_triplets_reciprocal_mesh_at_q(
long *map_triplets, long *map_q, const long grid_point, const long mesh[3],
const long is_time_reversal, const long num_rot,
const long (*rec_rotations)[3][3], const long swappable);
long ph3py_get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long *map_triplets,
const long *bz_map, const long *map_triplets,
const long num_map_triplets,
const long D_diag[3],
const long Q[3][3],
const long D_diag[3], const long Q[3][3],
const long bz_grid_type);
long ph3py_get_integration_weight(double *iw,
char *iw_zero,
const double *frequency_points,
const long num_band0,
const long relative_grid_address[24][4][3],
const long mesh[3],
const long (*triplets)[3],
const long num_triplets,
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long bz_grid_type,
const double *frequencies1,
const long num_band1,
const double *frequencies2,
const long num_band2,
const long tp_type,
const long openmp_per_triplets,
const long openmp_per_bands);
void ph3py_get_integration_weight_with_sigma(double *iw,
char *iw_zero,
const double sigma,
const double sigma_cutoff,
const double *frequency_points,
const long num_band0,
const long (*triplets)[3],
const long num_triplets,
const double *frequencies,
const long num_band,
const long tp_type);
long ph3py_get_integration_weight(
double *iw, char *iw_zero, const double *frequency_points,
const long num_band0, const long relative_grid_address[24][4][3],
const long mesh[3], const long (*triplets)[3], const long num_triplets,
const long (*bz_grid_addresses)[3], const long *bz_map,
const long bz_grid_type, const double *frequencies1, const long num_band1,
const double *frequencies2, const long num_band2, const long tp_type,
const long openmp_per_triplets, const long openmp_per_bands);
void ph3py_get_integration_weight_with_sigma(
double *iw, char *iw_zero, const double sigma, const double sigma_cutoff,
const double *frequency_points, const long num_band0,
const long (*triplets)[3], const long num_triplets,
const double *frequencies, const long num_band, const long tp_type);
long ph3py_get_grid_index_from_address(const long address[3],
const long mesh[3]);
void ph3py_get_gr_grid_addresses(long gr_grid_addresses[][3],
@ -297,38 +176,27 @@ long ph3py_get_reciprocal_rotations(long rec_rotations[48][3][3],
const long is_time_reversal);
long ph3py_transform_rotations(long (*transformed_rots)[3][3],
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long num_rot, const long D_diag[3],
const long Q[3][3]);
long ph3py_get_snf3x3(long D_diag[3],
long P[3][3],
long Q[3][3],
long ph3py_get_snf3x3(long D_diag[3], long P[3][3], long Q[3][3],
const long A[3][3]);
long ph3py_transform_rotations(long (*transformed_rots)[3][3],
const long (*rotations)[3][3],
const long num_rot,
const long D_diag[3],
const long num_rot, const long D_diag[3],
const long Q[3][3]);
long ph3py_get_ir_grid_map(long *ir_grid_map,
const long D_diag[3],
const long PS[3],
const long (*grg_rotations)[3][3],
long ph3py_get_ir_grid_map(long *ir_grid_map, const long D_diag[3],
const long PS[3], const long (*grg_rotations)[3][3],
const long num_rot);
long ph3py_get_bz_grid_addresses(long (*bz_grid_addresses)[3],
long *bz_map,
long *bzg2grg,
const long D_diag[3],
const long Q[3][3],
const long PS[3],
long ph3py_get_bz_grid_addresses(long (*bz_grid_addresses)[3], long *bz_map,
long *bzg2grg, const long D_diag[3],
const long Q[3][3], const long PS[3],
const double rec_lattice[3][3],
const long type);
long ph3py_rotate_bz_grid_index(const long bz_grid_index,
const long rotation[3][3],
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long D_diag[3],
const long PS[3],
const long bz_grid_type);
const long *bz_map, const long D_diag[3],
const long PS[3], const long bz_grid_type);
void ph3py_symmetrize_collision_matrix(double *collision_matrix,
const long num_column,
const long num_temp,
@ -338,33 +206,20 @@ void ph3py_expand_collision_matrix(double *collision_matrix,
const long *ir_grid_points,
const long num_ir_gp,
const long num_grid_points,
const long num_rot,
const long num_sigma,
const long num_temp,
const long num_band);
long ph3py_get_neighboring_gird_points(long *relative_grid_points,
const long *grid_points,
const long (*relative_grid_address)[3],
const long mesh[3],
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long bz_grid_type,
const long num_grid_points,
const long num_relative_grid_address);
const long num_rot, const long num_sigma,
const long num_temp, const long num_band);
long ph3py_get_neighboring_gird_points(
long *relative_grid_points, const long *grid_points,
const long (*relative_grid_address)[3], const long mesh[3],
const long (*bz_grid_addresses)[3], const long *bz_map,
const long bz_grid_type, const long num_grid_points,
const long num_relative_grid_address);
long ph3py_get_thm_integration_weights_at_grid_points(
double *iw,
const double *frequency_points,
const long num_band0,
const long num_band,
const long num_gp,
const long (*relative_grid_address)[4][3],
const long D_diag[3],
const long *grid_points,
const long (*bz_grid_addresses)[3],
const long *bz_map,
const long bz_grid_type,
const double *frequencies,
const long *gp2irgp_map,
const char function);
double *iw, const double *frequency_points, const long num_band0,
const long num_band, const long num_gp,
const long (*relative_grid_address)[4][3], const long D_diag[3],
const long *grid_points, const long (*bz_grid_addresses)[3],
const long *bz_map, const long bz_grid_type, const double *frequencies,
const long *gp2irgp_map, const char function);
#endif

View File

@ -39,13 +39,13 @@
/* It is assumed that number of dimensions is known for each array. */
typedef struct {
long dims[MAX_NUM_DIM];
long *data;
long dims[MAX_NUM_DIM];
long *data;
} Larray;
typedef struct {
int dims[MAX_NUM_DIM];
double *data;
int dims[MAX_NUM_DIM];
double *data;
} Darray;
#endif

View File

@ -32,24 +32,23 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include <math.h>
#include "phonoc_const.h"
#include "phonoc_utils.h"
#include <math.h>
#include "phonoc_const.h"
#define THZTOEVPARKB 47.992398658977166
#define INVSQRT2PI 0.3989422804014327
double phonoc_bose_einstein(const double x, const double t)
{
return 1.0 / (exp(THZTOEVPARKB * x / t) - 1);
double phonoc_bose_einstein(const double x, const double t) {
return 1.0 / (exp(THZTOEVPARKB * x / t) - 1);
}
double phonoc_gaussian(const double x, const double sigma)
{
return INVSQRT2PI / sigma * exp(-x * x / 2 / sigma / sigma);
double phonoc_gaussian(const double x, const double sigma) {
return INVSQRT2PI / sigma * exp(-x * x / 2 / sigma / sigma);
}
double phonoc_inv_sinh_occupation(const double x, const double t)
{
return 1.0 / sinh(x * THZTOEVPARKB / 2 / t);
double phonoc_inv_sinh_occupation(const double x, const double t) {
return 1.0 / sinh(x * THZTOEVPARKB / 2 / t);
}

File diff suppressed because it is too large Load Diff

View File

@ -38,57 +38,27 @@
#include "dynmat.h"
#include "lapack_wrapper.h"
void
phn_get_phonons_at_gridpoints(double *frequencies,
lapack_complex_double *eigenvectors,
char *phonon_done,
const long num_phonons,
const long *grid_points,
const long num_grid_points,
const long (*grid_address)[3],
const double QDinv[3][3],
const double *fc2,
const double(*svecs_fc2)[3],
const long (*multi_fc2)[2],
const long num_patom,
const long num_satom,
const double *masses_fc2,
const long *p2s_fc2,
const long *s2p_fc2,
const double unit_conversion_factor,
const double (*born)[3][3],
const double dielectric[3][3],
const double reciprocal_lattice[3][3],
const double *q_direction, /* must be pointer */
const double nac_factor,
const char uplo);
void
phn_get_gonze_phonons_at_gridpoints(double *frequencies,
lapack_complex_double *eigenvectors,
char *phonon_done,
const long num_phonons,
const long *grid_points,
const long num_grid_points,
const long (*grid_address)[3],
const double QDinv[3][3],
const double *fc2,
const double(*svecs_fc2)[3],
const long (*multi_fc2)[2],
const double (*positions)[3],
const long num_patom,
const long num_satom,
const double *masses_fc2,
const long *p2s_fc2,
const long *s2p_fc2,
const double unit_conversion_factor,
const double (*born)[3][3],
const double dielectric[3][3],
const double reciprocal_lattice[3][3],
const double *q_direction, /* pointer */
const double nac_factor,
const double *dd_q0,
const double(*G_list)[3],
const long num_G_points,
const double lambda,
const char uplo);
void phn_get_phonons_at_gridpoints(
double *frequencies, lapack_complex_double *eigenvectors, char *phonon_done,
const long num_phonons, const long *grid_points, const long num_grid_points,
const long (*grid_address)[3], const double QDinv[3][3], const double *fc2,
const double (*svecs_fc2)[3], const long (*multi_fc2)[2],
const long num_patom, const long num_satom, const double *masses_fc2,
const long *p2s_fc2, const long *s2p_fc2,
const double unit_conversion_factor, const double (*born)[3][3],
const double dielectric[3][3], const double reciprocal_lattice[3][3],
const double *q_direction, /* must be pointer */
const double nac_factor, const char uplo);
void phn_get_gonze_phonons_at_gridpoints(
double *frequencies, lapack_complex_double *eigenvectors, char *phonon_done,
const long num_phonons, const long *grid_points, const long num_grid_points,
const long (*grid_address)[3], const double QDinv[3][3], const double *fc2,
const double (*svecs_fc2)[3], const long (*multi_fc2)[2],
const double (*positions)[3], const long num_patom, const long num_satom,
const double *masses_fc2, const long *p2s_fc2, const long *s2p_fc2,
const double unit_conversion_factor, const double (*born)[3][3],
const double dielectric[3][3], const double reciprocal_lattice[3][3],
const double *q_direction, /* pointer */
const double nac_factor, const double *dd_q0, const double (*G_list)[3],
const long num_G_points, const double lambda, const char uplo);
#endif

View File

@ -33,90 +33,36 @@
/* POSSIBILITY OF SUCH DAMAGE. */
#include "phononmod.h"
#include "lapack_wrapper.h"
#include "phonon.h"
void phmod_get_phonons_at_gridpoints(double *frequencies,
lapack_complex_double *eigenvectors,
char *phonon_done,
const long num_phonons,
const long *grid_points,
const long num_grid_points,
const long (*grid_address)[3],
const double QDinv[3][3],
const double *fc2,
const double(*svecs_fc2)[3],
const long (*multi_fc2)[2],
const double (*positions_fc2)[3],
const long num_patom,
const long num_satom,
const double *masses_fc2,
const long *p2s_fc2,
const long *s2p_fc2,
const double unit_conversion_factor,
const double (*born)[3][3],
const double dielectric[3][3],
const double reciprocal_lattice[3][3],
const double *q_direction, /* pointer */
const double nac_factor,
const double *dd_q0,
const double(*G_list)[3],
const long num_G_points,
const double lambda,
const char uplo)
{
if (!dd_q0) {
phn_get_phonons_at_gridpoints(frequencies,
eigenvectors,
phonon_done,
num_phonons,
grid_points,
num_grid_points,
grid_address,
QDinv,
fc2,
svecs_fc2,
multi_fc2,
num_patom,
num_satom,
masses_fc2,
p2s_fc2,
s2p_fc2,
unit_conversion_factor,
born,
dielectric,
reciprocal_lattice,
q_direction,
nac_factor,
uplo);
} else {
phn_get_gonze_phonons_at_gridpoints(frequencies,
eigenvectors,
phonon_done,
num_phonons,
grid_points,
num_grid_points,
grid_address,
QDinv,
fc2,
svecs_fc2,
multi_fc2,
positions_fc2,
num_patom,
num_satom,
masses_fc2,
p2s_fc2,
s2p_fc2,
unit_conversion_factor,
born,
dielectric,
reciprocal_lattice,
q_direction,
nac_factor,
dd_q0,
G_list,
num_G_points,
lambda,
uplo);
}
void phmod_get_phonons_at_gridpoints(
double *frequencies, lapack_complex_double *eigenvectors, char *phonon_done,
const long num_phonons, const long *grid_points, const long num_grid_points,
const long (*grid_address)[3], const double QDinv[3][3], const double *fc2,
const double (*svecs_fc2)[3], const long (*multi_fc2)[2],
const double (*positions_fc2)[3], const long num_patom,
const long num_satom, const double *masses_fc2, const long *p2s_fc2,
const long *s2p_fc2, const double unit_conversion_factor,
const double (*born)[3][3], const double dielectric[3][3],
const double reciprocal_lattice[3][3],
const double *q_direction, /* pointer */
const double nac_factor, const double *dd_q0, const double (*G_list)[3],
const long num_G_points, const double lambda, const char uplo) {
if (!dd_q0) {
phn_get_phonons_at_gridpoints(
frequencies, eigenvectors, phonon_done, num_phonons, grid_points,
num_grid_points, grid_address, QDinv, fc2, svecs_fc2, multi_fc2,
num_patom, num_satom, masses_fc2, p2s_fc2, s2p_fc2,
unit_conversion_factor, born, dielectric, reciprocal_lattice,
q_direction, nac_factor, uplo);
} else {
phn_get_gonze_phonons_at_gridpoints(
frequencies, eigenvectors, phonon_done, num_phonons, grid_points,
num_grid_points, grid_address, QDinv, fc2, svecs_fc2, multi_fc2,
positions_fc2, num_patom, num_satom, masses_fc2, p2s_fc2, s2p_fc2,
unit_conversion_factor, born, dielectric, reciprocal_lattice,
q_direction, nac_factor, dd_q0, G_list, num_G_points, lambda, uplo);
}
}

View File

@ -37,33 +37,18 @@
#include "lapack_wrapper.h"
void phmod_get_phonons_at_gridpoints(double *frequencies,
lapack_complex_double *eigenvectors,
char *phonon_done,
const long num_phonons,
const long *grid_points,
const long num_grid_points,
const long (*grid_address)[3],
const double QDinv[3][3],
const double *fc2,
const double(*svecs_fc2)[3],
const long (*multi_fc2)[2],
const double (*positions_fc2)[3],
const long num_patom,
const long num_satom,
const double *masses_fc2,
const long *p2s_fc2,
const long *s2p_fc2,
const double unit_conversion_factor,
const double (*born)[3][3],
const double dielectric[3][3],
const double reciprocal_lattice[3][3],
const double *q_direction, /* pointer */
const double nac_factor,
const double *dd_q0,
const double(*G_list)[3],
const long num_G_points,
const double lambda,
const char uplo);
void phmod_get_phonons_at_gridpoints(
double *frequencies, lapack_complex_double *eigenvectors, char *phonon_done,
const long num_phonons, const long *grid_points, const long num_grid_points,
const long (*grid_address)[3], const double QDinv[3][3], const double *fc2,
const double (*svecs_fc2)[3], const long (*multi_fc2)[2],
const double (*positions_fc2)[3], const long num_patom,
const long num_satom, const double *masses_fc2, const long *p2s_fc2,
const long *s2p_fc2, const double unit_conversion_factor,
const double (*born)[3][3], const double dielectric[3][3],
const double reciprocal_lattice[3][3],
const double *q_direction, /* pointer */
const double nac_factor, const double *dd_q0, const double (*G_list)[3],
const long num_G_points, const double lambda, const char uplo);
#endif

View File

@ -32,430 +32,277 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "pp_collision.h"
#include <stdio.h>
#include <stdlib.h>
#include "imag_self_energy_with_g.h"
#include "interaction.h"
#include "lapack_wrapper.h"
#include "phonoc_array.h"
#include "phonoc_utils.h"
#include "pp_collision.h"
#include "triplet.h"
#include "triplet_iw.h"
#include "lapack_wrapper.h"
static void get_collision(double *ise,
const long num_band0,
const long num_band,
const long num_temps,
const double *temperatures,
const double *g,
const char *g_zero,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long triplet[3],
const long triplet_weight,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long symmetrize_fc3_q,
const double cutoff_frequency,
const long openmp_per_triplets);
static void finalize_ise(double *imag_self_energy,
const double *ise,
static void get_collision(
double *ise, const long num_band0, const long num_band,
const long num_temps, const double *temperatures, const double *g,
const char *g_zero, const double *frequencies,
const lapack_complex_double *eigenvectors, const long triplet[3],
const long triplet_weight, const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const double *masses, const long *p2s_map, const long *s2p_map,
const long *band_indices, const long symmetrize_fc3_q,
const double cutoff_frequency, const long openmp_per_triplets);
static void finalize_ise(double *imag_self_energy, const double *ise,
const long (*bz_grid_address)[3],
const long (*triplets)[3],
const long num_triplets,
const long num_temps,
const long num_band0,
const long (*triplets)[3], const long num_triplets,
const long num_temps, const long num_band0,
const long is_NU);
void ppc_get_pp_collision(double *imag_self_energy,
const long relative_grid_address[24][4][3], /* thm */
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const long *triplet_weights,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const Larray *band_indices,
const Darray *temperatures,
const long is_NU,
const long symmetrize_fc3_q,
const double cutoff_frequency)
{
long i;
long num_band, num_band0, num_band_prod, num_temps;
long openmp_per_triplets;
double *ise, *freqs_at_gp, *g;
char *g_zero;
long tp_relative_grid_address[2][24][4][3];
void ppc_get_pp_collision(
double *imag_self_energy,
const long relative_grid_address[24][4][3], /* thm */
const double *frequencies, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long num_triplets,
const long *triplet_weights, const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const double *masses, const long *p2s_map, const long *s2p_map,
const Larray *band_indices, const Darray *temperatures, const long is_NU,
const long symmetrize_fc3_q, const double cutoff_frequency) {
long i;
long num_band, num_band0, num_band_prod, num_temps;
long openmp_per_triplets;
double *ise, *freqs_at_gp, *g;
char *g_zero;
long tp_relative_grid_address[2][24][4][3];
ise = NULL;
freqs_at_gp = NULL;
g = NULL;
g_zero = NULL;
ise = NULL;
freqs_at_gp = NULL;
g = NULL;
g_zero = NULL;
num_band0 = band_indices->dims[0];
num_band = multi_dims[1] * 3;
num_band_prod = num_band0 * num_band * num_band;
num_temps = temperatures->dims[0];
ise = (double*)malloc(sizeof(double) * num_triplets * num_temps * num_band0);
freqs_at_gp = (double*)malloc(sizeof(double) * num_band0);
for (i = 0; i < num_band0; i++) {
freqs_at_gp[i] = frequencies[triplets[0][0] * num_band
+ band_indices->data[i]];
}
num_band0 = band_indices->dims[0];
num_band = multi_dims[1] * 3;
num_band_prod = num_band0 * num_band * num_band;
num_temps = temperatures->dims[0];
ise =
(double *)malloc(sizeof(double) * num_triplets * num_temps * num_band0);
freqs_at_gp = (double *)malloc(sizeof(double) * num_band0);
for (i = 0; i < num_band0; i++) {
freqs_at_gp[i] =
frequencies[triplets[0][0] * num_band + band_indices->data[i]];
}
if (num_triplets > num_band) {
openmp_per_triplets = 1;
} else {
openmp_per_triplets = 0;
}
if (num_triplets > num_band) {
openmp_per_triplets = 1;
} else {
openmp_per_triplets = 0;
}
tpl_set_relative_grid_address(tp_relative_grid_address,
relative_grid_address,
2);
tpl_set_relative_grid_address(tp_relative_grid_address,
relative_grid_address, 2);
#ifdef PHPYOPENMP
#pragma omp parallel for schedule(guided) private(g, g_zero) if (openmp_per_triplets)
#pragma omp parallel for schedule(guided) private( \
g, g_zero) if (openmp_per_triplets)
#endif
for (i = 0; i < num_triplets; i++) {
g = (double*)malloc(sizeof(double) * 2 * num_band_prod);
g_zero = (char*)malloc(sizeof(char) * num_band_prod);
tpi_get_integration_weight(g,
g_zero,
freqs_at_gp, /* used as f0 */
num_band0,
tp_relative_grid_address,
triplets[i],
1,
bzgrid,
frequencies, /* used as f1 */
num_band,
frequencies, /* used as f2 */
num_band,
2,
1 - openmp_per_triplets);
for (i = 0; i < num_triplets; i++) {
g = (double *)malloc(sizeof(double) * 2 * num_band_prod);
g_zero = (char *)malloc(sizeof(char) * num_band_prod);
tpi_get_integration_weight(g, g_zero, freqs_at_gp, /* used as f0 */
num_band0, tp_relative_grid_address,
triplets[i], 1, bzgrid,
frequencies, /* used as f1 */
num_band, frequencies, /* used as f2 */
num_band, 2, 1 - openmp_per_triplets);
get_collision(ise + i * num_temps * num_band0,
num_band0,
num_band,
num_temps,
temperatures->data,
g,
g_zero,
frequencies,
eigenvectors,
triplets[i],
triplet_weights[i],
bzgrid,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
masses,
p2s_map,
s2p_map,
band_indices->data,
symmetrize_fc3_q,
cutoff_frequency,
openmp_per_triplets);
get_collision(ise + i * num_temps * num_band0, num_band0, num_band,
num_temps, temperatures->data, g, g_zero, frequencies,
eigenvectors, triplets[i], triplet_weights[i], bzgrid,
fc3, is_compact_fc3, svecs, multi_dims, multiplicity,
masses, p2s_map, s2p_map, band_indices->data,
symmetrize_fc3_q, cutoff_frequency, openmp_per_triplets);
free(g_zero);
g_zero = NULL;
free(g);
g = NULL;
}
free(g_zero);
g_zero = NULL;
free(g);
g = NULL;
}
finalize_ise(imag_self_energy,
ise,
bzgrid->addresses,
triplets,
num_triplets,
num_temps,
num_band0,
is_NU);
finalize_ise(imag_self_energy, ise, bzgrid->addresses, triplets,
num_triplets, num_temps, num_band0, is_NU);
free(freqs_at_gp);
freqs_at_gp = NULL;
free(ise);
ise = NULL;
free(freqs_at_gp);
freqs_at_gp = NULL;
free(ise);
ise = NULL;
}
void ppc_get_pp_collision_with_sigma(
double *imag_self_energy,
const double sigma,
const double sigma_cutoff,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const long *triplet_weights,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const Larray *band_indices,
const Darray *temperatures,
const long is_NU,
const long symmetrize_fc3_q,
const double cutoff_frequency)
{
long i;
long num_band, num_band0, num_band_prod, num_temps;
long openmp_per_triplets, const_adrs_shift;
double cutoff;
double *ise, *freqs_at_gp, *g;
char *g_zero;
double *imag_self_energy, const double sigma, const double sigma_cutoff,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long num_triplets,
const long *triplet_weights, const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const double *masses, const long *p2s_map, const long *s2p_map,
const Larray *band_indices, const Darray *temperatures, const long is_NU,
const long symmetrize_fc3_q, const double cutoff_frequency) {
long i;
long num_band, num_band0, num_band_prod, num_temps;
long openmp_per_triplets, const_adrs_shift;
double cutoff;
double *ise, *freqs_at_gp, *g;
char *g_zero;
ise = NULL;
freqs_at_gp = NULL;
g = NULL;
g_zero = NULL;
ise = NULL;
freqs_at_gp = NULL;
g = NULL;
g_zero = NULL;
num_band0 = band_indices->dims[0];
num_band = multi_dims[1] * 3;
num_band_prod = num_band0 * num_band * num_band;
num_temps = temperatures->dims[0];
const_adrs_shift = num_band_prod;
num_band0 = band_indices->dims[0];
num_band = multi_dims[1] * 3;
num_band_prod = num_band0 * num_band * num_band;
num_temps = temperatures->dims[0];
const_adrs_shift = num_band_prod;
ise = (double*)malloc(sizeof(double) * num_triplets * num_temps * num_band0);
freqs_at_gp = (double*)malloc(sizeof(double) * num_band0);
for (i = 0; i < num_band0; i++) {
freqs_at_gp[i] = frequencies[triplets[0][0] * num_band +
band_indices->data[i]];
}
ise =
(double *)malloc(sizeof(double) * num_triplets * num_temps * num_band0);
freqs_at_gp = (double *)malloc(sizeof(double) * num_band0);
for (i = 0; i < num_band0; i++) {
freqs_at_gp[i] =
frequencies[triplets[0][0] * num_band + band_indices->data[i]];
}
if (num_triplets > num_band) {
openmp_per_triplets = 1;
} else {
openmp_per_triplets = 0;
}
if (num_triplets > num_band) {
openmp_per_triplets = 1;
} else {
openmp_per_triplets = 0;
}
cutoff = sigma * sigma_cutoff;
cutoff = sigma * sigma_cutoff;
#ifdef PHPYOPENMP
#pragma omp parallel for schedule(guided) private(g, g_zero) if (openmp_per_triplets)
#pragma omp parallel for schedule(guided) private( \
g, g_zero) if (openmp_per_triplets)
#endif
for (i = 0; i < num_triplets; i++) {
g = (double*)malloc(sizeof(double) * 2 * num_band_prod);
g_zero = (char*)malloc(sizeof(char) * num_band_prod);
tpi_get_integration_weight_with_sigma(g,
g_zero,
sigma,
cutoff,
freqs_at_gp,
num_band0,
triplets[i],
const_adrs_shift,
frequencies,
num_band,
2,
0);
for (i = 0; i < num_triplets; i++) {
g = (double *)malloc(sizeof(double) * 2 * num_band_prod);
g_zero = (char *)malloc(sizeof(char) * num_band_prod);
tpi_get_integration_weight_with_sigma(
g, g_zero, sigma, cutoff, freqs_at_gp, num_band0, triplets[i],
const_adrs_shift, frequencies, num_band, 2, 0);
get_collision(ise + i * num_temps * num_band0,
num_band0,
num_band,
num_temps,
temperatures->data,
g,
g_zero,
frequencies,
eigenvectors,
triplets[i],
triplet_weights[i],
bzgrid,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
masses,
p2s_map,
s2p_map,
band_indices->data,
symmetrize_fc3_q,
cutoff_frequency,
openmp_per_triplets);
get_collision(ise + i * num_temps * num_band0, num_band0, num_band,
num_temps, temperatures->data, g, g_zero, frequencies,
eigenvectors, triplets[i], triplet_weights[i], bzgrid,
fc3, is_compact_fc3, svecs, multi_dims, multiplicity,
masses, p2s_map, s2p_map, band_indices->data,
symmetrize_fc3_q, cutoff_frequency, openmp_per_triplets);
free(g_zero);
g_zero = NULL;
free(g);
g = NULL;
}
free(g_zero);
g_zero = NULL;
free(g);
g = NULL;
}
finalize_ise(imag_self_energy,
ise,
bzgrid->addresses,
triplets,
num_triplets,
num_temps,
num_band0,
is_NU);
finalize_ise(imag_self_energy, ise, bzgrid->addresses, triplets,
num_triplets, num_temps, num_band0, is_NU);
free(freqs_at_gp);
freqs_at_gp = NULL;
free(ise);
ise = NULL;
free(freqs_at_gp);
freqs_at_gp = NULL;
free(ise);
ise = NULL;
}
static void get_collision(double *ise,
const long num_band0,
const long num_band,
const long num_temps,
const double *temperatures,
const double *g,
const char *g_zero,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long triplet[3],
const long triplet_weight,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const long *band_indices,
const long symmetrize_fc3_q,
const double cutoff_frequency,
const long openmp_per_triplets)
{
long i;
long num_band_prod, num_g_pos;
double *fc3_normal_squared;
long (*g_pos)[4];
static void get_collision(
double *ise, const long num_band0, const long num_band,
const long num_temps, const double *temperatures, const double *g,
const char *g_zero, const double *frequencies,
const lapack_complex_double *eigenvectors, const long triplet[3],
const long triplet_weight, const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const double *masses, const long *p2s_map, const long *s2p_map,
const long *band_indices, const long symmetrize_fc3_q,
const double cutoff_frequency, const long openmp_per_triplets) {
long i;
long num_band_prod, num_g_pos;
double *fc3_normal_squared;
long(*g_pos)[4];
fc3_normal_squared = NULL;
g_pos = NULL;
fc3_normal_squared = NULL;
g_pos = NULL;
num_band_prod = num_band0 * num_band * num_band;
fc3_normal_squared = (double*)malloc(sizeof(double) * num_band_prod);
g_pos = (long(*)[4])malloc(sizeof(long[4]) * num_band_prod);
num_band_prod = num_band0 * num_band * num_band;
fc3_normal_squared = (double *)malloc(sizeof(double) * num_band_prod);
g_pos = (long(*)[4])malloc(sizeof(long[4]) * num_band_prod);
for (i = 0; i < num_band_prod; i++) {
fc3_normal_squared[i] = 0;
}
for (i = 0; i < num_band_prod; i++) {
fc3_normal_squared[i] = 0;
}
num_g_pos = ise_set_g_pos(g_pos,
num_band0,
num_band,
g_zero);
num_g_pos = ise_set_g_pos(g_pos, num_band0, num_band, g_zero);
itr_get_interaction_at_triplet(
fc3_normal_squared,
num_band0,
num_band,
g_pos,
num_g_pos,
frequencies,
eigenvectors,
triplet,
bzgrid,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
masses,
p2s_map,
s2p_map,
band_indices,
symmetrize_fc3_q,
cutoff_frequency,
0,
0,
1 - openmp_per_triplets);
itr_get_interaction_at_triplet(
fc3_normal_squared, num_band0, num_band, g_pos, num_g_pos, frequencies,
eigenvectors, triplet, bzgrid, fc3, is_compact_fc3, svecs, multi_dims,
multiplicity, masses, p2s_map, s2p_map, band_indices, symmetrize_fc3_q,
cutoff_frequency, 0, 0, 1 - openmp_per_triplets);
ise_imag_self_energy_at_triplet(
ise,
num_band0,
num_band,
fc3_normal_squared,
frequencies,
triplet,
triplet_weight,
g,
g + num_band_prod,
g_pos,
num_g_pos,
temperatures,
num_temps,
cutoff_frequency,
1 - openmp_per_triplets,
0);
ise_imag_self_energy_at_triplet(
ise, num_band0, num_band, fc3_normal_squared, frequencies, triplet,
triplet_weight, g, g + num_band_prod, g_pos, num_g_pos, temperatures,
num_temps, cutoff_frequency, 1 - openmp_per_triplets, 0);
free(fc3_normal_squared);
fc3_normal_squared = NULL;
free(g_pos);
g_pos = NULL;
free(fc3_normal_squared);
fc3_normal_squared = NULL;
free(g_pos);
g_pos = NULL;
}
static void finalize_ise(double *imag_self_energy,
const double *ise,
static void finalize_ise(double *imag_self_energy, const double *ise,
const long (*bz_grid_addresses)[3],
const long (*triplets)[3],
const long num_triplets,
const long num_temps,
const long num_band0,
const long is_NU)
{
long i, j, k;
long is_N;
const long (*triplets)[3], const long num_triplets,
const long num_temps, const long num_band0,
const long is_NU) {
long i, j, k;
long is_N;
if (is_NU) {
for (i = 0; i < 2 * num_temps * num_band0; i++) {
imag_self_energy[i] = 0;
}
for (i = 0; i < num_triplets; i++) {
is_N = tpl_is_N(triplets[i], bz_grid_addresses);
for (j = 0; j < num_temps; j++) {
for (k = 0; k < num_band0; k++) {
if (is_N) {
imag_self_energy[j * num_band0 + k] +=
ise[i * num_temps * num_band0 + j * num_band0 + k];
} else {
imag_self_energy[num_temps * num_band0 + j * num_band0 + k] +=
ise[i * num_temps * num_band0 + j * num_band0 + k];
}
if (is_NU) {
for (i = 0; i < 2 * num_temps * num_band0; i++) {
imag_self_energy[i] = 0;
}
}
}
} else {
for (i = 0; i < num_temps * num_band0; i++) {
imag_self_energy[i] = 0;
}
for (i = 0; i < num_triplets; i++) {
for (j = 0; j < num_temps; j++) {
for (k = 0; k < num_band0; k++) {
imag_self_energy[j * num_band0 + k] +=
ise[i * num_temps * num_band0 + j * num_band0 + k];
for (i = 0; i < num_triplets; i++) {
is_N = tpl_is_N(triplets[i], bz_grid_addresses);
for (j = 0; j < num_temps; j++) {
for (k = 0; k < num_band0; k++) {
if (is_N) {
imag_self_energy[j * num_band0 + k] +=
ise[i * num_temps * num_band0 + j * num_band0 + k];
} else {
imag_self_energy[num_temps * num_band0 + j * num_band0 +
k] +=
ise[i * num_temps * num_band0 + j * num_band0 + k];
}
}
}
}
} else {
for (i = 0; i < num_temps * num_band0; i++) {
imag_self_energy[i] = 0;
}
for (i = 0; i < num_triplets; i++) {
for (j = 0; j < num_temps; j++) {
for (k = 0; k < num_band0; k++) {
imag_self_energy[j * num_band0 + k] +=
ise[i * num_temps * num_band0 + j * num_band0 + k];
}
}
}
}
}
}
}

View File

@ -39,49 +39,26 @@
#include "lapack_wrapper.h"
#include "phonoc_array.h"
void ppc_get_pp_collision(double *imag_self_energy,
const long relative_grid_address[24][4][3], /* thm */
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const long *triplet_weights,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const Larray *band_indices,
const Darray *temperatures,
const long is_NU,
const long symmetrize_fc3_q,
const double cutoff_frequency);
void ppc_get_pp_collision(
double *imag_self_energy,
const long relative_grid_address[24][4][3], /* thm */
const double *frequencies, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long num_triplets,
const long *triplet_weights, const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const double *masses, const long *p2s_map, const long *s2p_map,
const Larray *band_indices, const Darray *temperatures, const long is_NU,
const long symmetrize_fc3_q, const double cutoff_frequency);
void ppc_get_pp_collision_with_sigma(
double *imag_self_energy,
const double sigma,
const double sigma_cutoff,
const double *frequencies,
const lapack_complex_double *eigenvectors,
const long (*triplets)[3],
const long num_triplets,
const long *triplet_weights,
const ConstBZGrid *bzgrid,
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const double *masses,
const long *p2s_map,
const long *s2p_map,
const Larray *band_indices,
const Darray *temperatures,
const long is_NU,
const long symmetrize_fc3_q,
const double cutoff_frequency);
double *imag_self_energy, const double sigma, const double sigma_cutoff,
const double *frequencies, const lapack_complex_double *eigenvectors,
const long (*triplets)[3], const long num_triplets,
const long *triplet_weights, const ConstBZGrid *bzgrid, const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const double *masses, const long *p2s_map, const long *s2p_map,
const Larray *band_indices, const Darray *temperatures, const long is_NU,
const long symmetrize_fc3_q, const double cutoff_frequency);
#endif

View File

@ -32,246 +32,191 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include <stdlib.h>
#include "real_self_energy.h"
#include <math.h>
#include <stdlib.h>
#include "phonoc_array.h"
#include "phonoc_utils.h"
#include "real_self_energy.h"
#include "real_to_reciprocal.h"
static double get_real_self_energy_at_band(const long band_index,
const Darray *fc3_normal_squared,
const double fpoint,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
static double sum_real_self_energy_at_band(const long num_band,
const double *fc3_normal_squared,
const double fpoint,
const double *freqs1,
const double *freqs2,
const double epsilon,
const double temperature,
const double cutoff_frequency);
static double sum_real_self_energy_at_band_0K(const long num_band,
const double *fc3_normal_squared,
const double fpoint,
const double *freqs1,
const double *freqs2,
const double epsilon,
const double cutoff_frequency);
static double get_real_self_energy_at_band(
const long band_index, const Darray *fc3_normal_squared,
const double fpoint, const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
static double sum_real_self_energy_at_band(
const long num_band, const double *fc3_normal_squared, const double fpoint,
const double *freqs1, const double *freqs2, const double epsilon,
const double temperature, const double cutoff_frequency);
static double sum_real_self_energy_at_band_0K(
const long num_band, const double *fc3_normal_squared, const double fpoint,
const double *freqs1, const double *freqs2, const double epsilon,
const double cutoff_frequency);
void rse_get_real_self_energy_at_bands(double *real_self_energy,
const Darray *fc3_normal_squared,
const long *band_indices,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency)
{
long i, num_band0, num_band, gp0;
double fpoint;
void rse_get_real_self_energy_at_bands(
double *real_self_energy, const Darray *fc3_normal_squared,
const long *band_indices, const double *frequencies,
const long (*triplets)[3], const long *triplet_weights,
const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency) {
long i, num_band0, num_band, gp0;
double fpoint;
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
gp0 = triplets[0][0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
gp0 = triplets[0][0];
/* num_band0 and num_band_indices have to be same. */
for (i = 0; i < num_band0; i++) {
fpoint = frequencies[gp0 * num_band + band_indices[i]];
if (fpoint < cutoff_frequency) {
real_self_energy[i] = 0;
} else {
real_self_energy[i] =
get_real_self_energy_at_band(i,
fc3_normal_squared,
fpoint,
frequencies,
triplets,
triplet_weights,
epsilon,
temperature,
unit_conversion_factor,
cutoff_frequency);
/* num_band0 and num_band_indices have to be same. */
for (i = 0; i < num_band0; i++) {
fpoint = frequencies[gp0 * num_band + band_indices[i]];
if (fpoint < cutoff_frequency) {
real_self_energy[i] = 0;
} else {
real_self_energy[i] = get_real_self_energy_at_band(
i, fc3_normal_squared, fpoint, frequencies, triplets,
triplet_weights, epsilon, temperature, unit_conversion_factor,
cutoff_frequency);
}
}
}
}
void rse_get_real_self_energy_at_frequency_point(
double *real_self_energy,
const double frequency_point,
const Darray *fc3_normal_squared,
const long *band_indices,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency)
{
long i, num_band0;
double *real_self_energy, const double frequency_point,
const Darray *fc3_normal_squared, const long *band_indices,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency) {
long i, num_band0;
num_band0 = fc3_normal_squared->dims[1];
num_band0 = fc3_normal_squared->dims[1];
/* num_band0 and num_band_indices have to be same. */
for (i = 0; i < num_band0; i++) {
if (frequency_point < cutoff_frequency) {
real_self_energy[i] = 0;
} else {
real_self_energy[i] =
get_real_self_energy_at_band(i,
fc3_normal_squared,
frequency_point,
frequencies,
triplets,
triplet_weights,
epsilon,
temperature,
unit_conversion_factor,
cutoff_frequency);
/* num_band0 and num_band_indices have to be same. */
for (i = 0; i < num_band0; i++) {
if (frequency_point < cutoff_frequency) {
real_self_energy[i] = 0;
} else {
real_self_energy[i] = get_real_self_energy_at_band(
i, fc3_normal_squared, frequency_point, frequencies, triplets,
triplet_weights, epsilon, temperature, unit_conversion_factor,
cutoff_frequency);
}
}
}
}
static double get_real_self_energy_at_band(const long band_index,
const Darray *fc3_normal_squared,
const double fpoint,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency)
{
long i, num_triplets, num_band0, num_band, gp1, gp2;
double shift;
static double get_real_self_energy_at_band(
const long band_index, const Darray *fc3_normal_squared,
const double fpoint, const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency) {
long i, num_triplets, num_band0, num_band, gp1, gp2;
double shift;
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
num_triplets = fc3_normal_squared->dims[0];
num_band0 = fc3_normal_squared->dims[1];
num_band = fc3_normal_squared->dims[2];
shift = 0;
shift = 0;
#ifdef PHPYOPENMP
#pragma omp parallel for private(gp1, gp2) reduction(+:shift)
#pragma omp parallel for private(gp1, gp2) reduction(+ : shift)
#endif
for (i = 0; i < num_triplets; i++) {
gp1 = triplets[i][1];
gp2 = triplets[i][2];
if (temperature > 0) {
shift +=
sum_real_self_energy_at_band(num_band,
fc3_normal_squared->data +
i * num_band0 * num_band * num_band +
band_index * num_band * num_band,
fpoint,
frequencies + gp1 * num_band,
frequencies + gp2 * num_band,
epsilon,
temperature,
cutoff_frequency) *
triplet_weights[i] * unit_conversion_factor;
} else {
shift +=
sum_real_self_energy_at_band_0K(num_band,
fc3_normal_squared->data +
i * num_band0 * num_band * num_band +
band_index * num_band * num_band,
fpoint,
frequencies + gp1 * num_band,
frequencies + gp2 * num_band,
epsilon,
cutoff_frequency) *
triplet_weights[i] * unit_conversion_factor;
}
}
return shift;
}
static double sum_real_self_energy_at_band(const long num_band,
const double *fc3_normal_squared,
const double fpoint,
const double *freqs1,
const double *freqs2,
const double epsilon,
const double temperature,
const double cutoff_frequency)
{
long i, j;
double n1, n2, f1, f2, f3, f4, shift;
/* double sum; */
shift = 0;
for (i = 0; i < num_band; i++) {
if (freqs1[i] > cutoff_frequency) {
n1 = phonoc_bose_einstein(freqs1[i], temperature);
for (j = 0; j < num_band; j++) {
if (freqs2[j] > cutoff_frequency) {
n2 = phonoc_bose_einstein(freqs2[j], temperature);
f1 = fpoint + freqs1[i] + freqs2[j];
f2 = fpoint - freqs1[i] - freqs2[j];
f3 = fpoint - freqs1[i] + freqs2[j];
f4 = fpoint + freqs1[i] - freqs2[j];
/* sum = 0;
* if (fabs(f1) > epsilon) {
* sum -= (n1 + n2 + 1) / f1;
* }
* if (fabs(f2) > epsilon) {
* sum += (n1 + n2 + 1) / f2;
* }
* if (fabs(f3) > epsilon) {
* sum -= (n1 - n2) / f3;
* }
* if (fabs(f4) > epsilon) {
* sum += (n1 - n2) / f4;
* }
* shift += sum * fc3_normal_squared[i * num_band + j]; */
shift += (- (n1 + n2 + 1) * f1 / (f1 * f1 + epsilon * epsilon)
+ (n1 + n2 + 1) * f2 / (f2 * f2 + epsilon * epsilon)
- (n1 - n2) * f3 / (f3 * f3 + epsilon * epsilon)
+ (n1 - n2) * f4 / (f4 * f4 + epsilon * epsilon)) *
fc3_normal_squared[i * num_band + j];
for (i = 0; i < num_triplets; i++) {
gp1 = triplets[i][1];
gp2 = triplets[i][2];
if (temperature > 0) {
shift += sum_real_self_energy_at_band(
num_band,
fc3_normal_squared->data +
i * num_band0 * num_band * num_band +
band_index * num_band * num_band,
fpoint, frequencies + gp1 * num_band,
frequencies + gp2 * num_band, epsilon, temperature,
cutoff_frequency) *
triplet_weights[i] * unit_conversion_factor;
} else {
shift +=
sum_real_self_energy_at_band_0K(
num_band,
fc3_normal_squared->data +
i * num_band0 * num_band * num_band +
band_index * num_band * num_band,
fpoint, frequencies + gp1 * num_band,
frequencies + gp2 * num_band, epsilon, cutoff_frequency) *
triplet_weights[i] * unit_conversion_factor;
}
}
}
}
return shift;
return shift;
}
static double sum_real_self_energy_at_band_0K(const long num_band,
const double *fc3_normal_squared,
const double fpoint,
const double *freqs1,
const double *freqs2,
const double epsilon,
const double cutoff_frequency)
{
long i, j;
double f1, f2, shift;
static double sum_real_self_energy_at_band(
const long num_band, const double *fc3_normal_squared, const double fpoint,
const double *freqs1, const double *freqs2, const double epsilon,
const double temperature, const double cutoff_frequency) {
long i, j;
double n1, n2, f1, f2, f3, f4, shift;
/* double sum; */
shift = 0;
for (i = 0; i < num_band; i++) {
if (freqs1[i] > cutoff_frequency) {
for (j = 0; j < num_band; j++) {
if (freqs2[j] > cutoff_frequency) {
f1 = fpoint + freqs1[i] + freqs2[j];
f2 = fpoint - freqs1[i] - freqs2[j];
shift += (- 1 * f1 / (f1 * f1 + epsilon * epsilon)
+ 1 * f2 / (f2 * f2 + epsilon * epsilon)) *
fc3_normal_squared[i * num_band + j];
shift = 0;
for (i = 0; i < num_band; i++) {
if (freqs1[i] > cutoff_frequency) {
n1 = phonoc_bose_einstein(freqs1[i], temperature);
for (j = 0; j < num_band; j++) {
if (freqs2[j] > cutoff_frequency) {
n2 = phonoc_bose_einstein(freqs2[j], temperature);
f1 = fpoint + freqs1[i] + freqs2[j];
f2 = fpoint - freqs1[i] - freqs2[j];
f3 = fpoint - freqs1[i] + freqs2[j];
f4 = fpoint + freqs1[i] - freqs2[j];
/* sum = 0;
* if (fabs(f1) > epsilon) {
* sum -= (n1 + n2 + 1) / f1;
* }
* if (fabs(f2) > epsilon) {
* sum += (n1 + n2 + 1) / f2;
* }
* if (fabs(f3) > epsilon) {
* sum -= (n1 - n2) / f3;
* }
* if (fabs(f4) > epsilon) {
* sum += (n1 - n2) / f4;
* }
* shift += sum * fc3_normal_squared[i * num_band + j]; */
shift +=
(-(n1 + n2 + 1) * f1 / (f1 * f1 + epsilon * epsilon) +
(n1 + n2 + 1) * f2 / (f2 * f2 + epsilon * epsilon) -
(n1 - n2) * f3 / (f3 * f3 + epsilon * epsilon) +
(n1 - n2) * f4 / (f4 * f4 + epsilon * epsilon)) *
fc3_normal_squared[i * num_band + j];
}
}
}
}
}
}
return shift;
return shift;
}
static double sum_real_self_energy_at_band_0K(
const long num_band, const double *fc3_normal_squared, const double fpoint,
const double *freqs1, const double *freqs2, const double epsilon,
const double cutoff_frequency) {
long i, j;
double f1, f2, shift;
shift = 0;
for (i = 0; i < num_band; i++) {
if (freqs1[i] > cutoff_frequency) {
for (j = 0; j < num_band; j++) {
if (freqs2[j] > cutoff_frequency) {
f1 = fpoint + freqs1[i] + freqs2[j];
f2 = fpoint - freqs1[i] - freqs2[j];
shift += (-1 * f1 / (f1 * f1 + epsilon * epsilon) +
1 * f2 / (f2 * f2 + epsilon * epsilon)) *
fc3_normal_squared[i * num_band + j];
}
}
}
}
return shift;
}

View File

@ -39,25 +39,15 @@
#endif
void rse_get_real_self_energy_at_bands(double *real_self_energy,
const Darray *fc3_normal_squared,
const long *band_indices,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
void rse_get_real_self_energy_at_bands(
double *real_self_energy, const Darray *fc3_normal_squared,
const long *band_indices, const double *frequencies,
const long (*triplets)[3], const long *triplet_weights,
const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);
void rse_get_real_self_energy_at_frequency_point(
double *real_self_energy,
const double frequency_point,
const Darray *fc3_normal_squared,
const long *band_indices,
const double *frequencies,
const long (*triplets)[3],
const long *triplet_weights,
const double epsilon,
const double temperature,
const double unit_conversion_factor,
const double cutoff_frequency);
double *real_self_energy, const double frequency_point,
const Darray *fc3_normal_squared, const long *band_indices,
const double *frequencies, const long (*triplets)[3],
const long *triplet_weights, const double epsilon, const double temperature,
const double unit_conversion_factor, const double cutoff_frequency);

View File

@ -32,313 +32,241 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "real_to_reciprocal.h"
#include <assert.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "lapack_wrapper.h"
#include "phonoc_array.h"
#include "phonoc_const.h"
#include "real_to_reciprocal.h"
#include "lapack_wrapper.h"
static void
real_to_reciprocal_single_thread(lapack_complex_double *fc3_reciprocal,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map,
const long *s2p_map);
static void
real_to_reciprocal_openmp(lapack_complex_double *fc3_reciprocal,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map,
const long *s2p_map);
static void real_to_reciprocal_elements(lapack_complex_double *fc3_rec_elem,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s,
const long *s2p,
const long pi0,
const long pi1,
const long pi2);
static void real_to_reciprocal_single_thread(
lapack_complex_double *fc3_reciprocal, const double q_vecs[3][3],
const double *fc3, const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const long *p2s_map, const long *s2p_map);
static void real_to_reciprocal_openmp(
lapack_complex_double *fc3_reciprocal, const double q_vecs[3][3],
const double *fc3, const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const long *p2s_map, const long *s2p_map);
static void real_to_reciprocal_elements(
lapack_complex_double *fc3_rec_elem, const double q_vecs[3][3],
const double *fc3, const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2], const long *p2s,
const long *s2p, const long pi0, const long pi1, const long pi2);
static lapack_complex_double get_phase_factor(const double q[3][3],
const long qi,
const double (*svecs)[3],
const long multi[2]);
static lapack_complex_double
get_pre_phase_factor(const long i_patom,
const double q_vecs[3][3],
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map);
static lapack_complex_double get_pre_phase_factor(const long i_patom,
const double q_vecs[3][3],
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map);
/* fc3_reciprocal[num_patom, num_patom, num_patom, 3, 3, 3] */
void r2r_real_to_reciprocal(lapack_complex_double *fc3_reciprocal,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const double q_vecs[3][3], const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map,
const long *s2p_map,
const long openmp_at_bands)
{
if (openmp_at_bands) {
real_to_reciprocal_openmp(fc3_reciprocal,
q_vecs,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
p2s_map,
s2p_map);
} else {
real_to_reciprocal_single_thread(fc3_reciprocal,
q_vecs,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
p2s_map,
s2p_map);
}
const long (*multiplicity)[2], const long *p2s_map,
const long *s2p_map, const long openmp_at_bands) {
if (openmp_at_bands) {
real_to_reciprocal_openmp(fc3_reciprocal, q_vecs, fc3, is_compact_fc3,
svecs, multi_dims, multiplicity, p2s_map,
s2p_map);
} else {
real_to_reciprocal_single_thread(fc3_reciprocal, q_vecs, fc3,
is_compact_fc3, svecs, multi_dims,
multiplicity, p2s_map, s2p_map);
}
}
static void real_to_reciprocal_single_thread(
lapack_complex_double *fc3_reciprocal, const double q_vecs[3][3],
const double *fc3, const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const long *p2s_map, const long *s2p_map) {
long i, j, k, l, m, n;
long num_patom, num_band;
lapack_complex_double pre_phase_factor, fc3_rec_elem[27];
static void
real_to_reciprocal_single_thread(lapack_complex_double *fc3_reciprocal,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map,
const long *s2p_map)
{
long i, j, k;
long num_patom, adrs_shift;
lapack_complex_double pre_phase_factor;
num_patom = multi_dims[1];
num_band = num_patom * 3;
num_patom = multi_dims[1];
for (i = 0; i < num_patom; i++) {
for (j = 0; j < num_patom; j++) {
for (k = 0; k < num_patom; k++) {
real_to_reciprocal_elements(fc3_reciprocal +
i * 27 * num_patom * num_patom +
j * 27 * num_patom +
k * 27,
q_vecs,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
p2s_map,
s2p_map,
i, j, k);
}
for (i = 0; i < num_patom; i++) {
pre_phase_factor = get_pre_phase_factor(i, q_vecs, svecs, multi_dims,
multiplicity, p2s_map);
for (j = 0; j < num_patom; j++) {
for (k = 0; k < num_patom; k++) {
real_to_reciprocal_elements(
fc3_rec_elem, q_vecs, fc3, is_compact_fc3, svecs,
multi_dims, multiplicity, p2s_map, s2p_map, i, j, k);
for (l = 0; l < 3; l++) {
for (m = 0; m < 3; m++) {
for (n = 0; n < 3; n++) {
fc3_reciprocal[(i * 3 + l) * num_band * num_band +
(j * 3 + m) * num_band + k * 3 + n] =
phonoc_complex_prod(
fc3_rec_elem[l * 9 + m * 3 + n],
pre_phase_factor);
}
}
}
}
}
}
pre_phase_factor = get_pre_phase_factor(
i, q_vecs, svecs, multi_dims, multiplicity, p2s_map);
adrs_shift = i * num_patom * num_patom * 27;
for (j = 0; j < num_patom * num_patom * 27; j++) {
fc3_reciprocal[adrs_shift + j] =
phonoc_complex_prod(fc3_reciprocal[adrs_shift + j], pre_phase_factor);
}
}
}
static void
real_to_reciprocal_openmp(lapack_complex_double *fc3_reciprocal,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map,
const long *s2p_map)
{
long i, j, k, jk;
long num_patom, adrs_shift;
lapack_complex_double pre_phase_factor;
static void real_to_reciprocal_openmp(
lapack_complex_double *fc3_reciprocal, const double q_vecs[3][3],
const double *fc3, const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2],
const long *p2s_map, const long *s2p_map) {
long i, j, k, l, m, n, jk;
long num_patom, num_band;
lapack_complex_double pre_phase_factor, fc3_rec_elem[27];
num_patom = multi_dims[1];
num_patom = multi_dims[1];
num_band = num_patom * 3;
for (i = 0; i < num_patom; i++) {
for (i = 0; i < num_patom; i++) {
pre_phase_factor = get_pre_phase_factor(i, q_vecs, svecs, multi_dims,
multiplicity, p2s_map);
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, k)
#pragma omp parallel for private(j, k, l, m, n, fc3_rec_elem)
#endif
for (jk = 0; jk < num_patom * num_patom; jk++) {
j = jk / num_patom;
k = jk % num_patom;
real_to_reciprocal_elements(fc3_reciprocal +
i * 27 * num_patom * num_patom +
j * 27 * num_patom +
k * 27,
q_vecs,
fc3,
is_compact_fc3,
svecs,
multi_dims,
multiplicity,
p2s_map,
s2p_map,
i, j, k);
for (jk = 0; jk < num_patom * num_patom; jk++) {
j = jk / num_patom;
k = jk % num_patom;
real_to_reciprocal_elements(
fc3_rec_elem, q_vecs, fc3, is_compact_fc3, svecs, multi_dims,
multiplicity, p2s_map, s2p_map, i, j, k);
for (l = 0; l < 3; l++) {
for (m = 0; m < 3; m++) {
for (n = 0; n < 3; n++) {
fc3_reciprocal[(i * 3 + l) * num_band * num_band +
(j * 3 + m) * num_band + k * 3 + n] =
phonoc_complex_prod(fc3_rec_elem[l * 9 + m * 3 + n],
pre_phase_factor);
}
}
}
}
}
pre_phase_factor = get_pre_phase_factor(
i, q_vecs, svecs, multi_dims, multiplicity, p2s_map);
adrs_shift = i * num_patom * num_patom * 27;
#ifdef PHPYOPENMP
#pragma omp parallel for
#endif
for (j = 0; j < num_patom * num_patom * 27; j++) {
fc3_reciprocal[adrs_shift + j] =
phonoc_complex_prod(fc3_reciprocal[adrs_shift + j], pre_phase_factor);
}
}
}
static void real_to_reciprocal_elements(lapack_complex_double *fc3_rec_elem,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s,
const long *s2p,
const long pi0,
const long pi1,
const long pi2)
{
long i, j, k, l;
long num_satom, adrs_shift, adrs_vec1, adrs_vec2 ;
lapack_complex_double phase_factor, phase_factor1, phase_factor2;
double fc3_rec_real[27], fc3_rec_imag[27];
static void real_to_reciprocal_elements(
lapack_complex_double *fc3_rec_elem, const double q_vecs[3][3],
const double *fc3, const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2], const long (*multiplicity)[2], const long *p2s,
const long *s2p, const long pi0, const long pi1, const long pi2) {
long i, j, k, l;
long num_satom, adrs_shift, adrs_vec1, adrs_vec2;
lapack_complex_double phase_factor, phase_factor1, phase_factor2;
double fc3_rec_real[27], fc3_rec_imag[27];
for (i = 0; i < 27; i++) {
fc3_rec_real[i] = 0;
fc3_rec_imag[i] = 0;
}
num_satom = multi_dims[0];
if (is_compact_fc3) {
i = pi0;
} else {
i = p2s[pi0];
}
for (j = 0; j < num_satom; j++) {
if (s2p[j] != p2s[pi1]) {
continue;
for (i = 0; i < 27; i++) {
fc3_rec_real[i] = 0;
fc3_rec_imag[i] = 0;
}
adrs_vec1 = j * multi_dims[1] + pi0;
phase_factor1 = get_phase_factor(q_vecs,
1,
svecs,
multiplicity[adrs_vec1]);
for (k = 0; k < num_satom; k++) {
if (s2p[k] != p2s[pi2]) {
continue;
}
adrs_vec2 = k * multi_dims[1] + pi0;
phase_factor2 = get_phase_factor(q_vecs,
2,
svecs,
multiplicity[adrs_vec2]);
adrs_shift = i * 27 * num_satom * num_satom + j * 27 * num_satom + k * 27;
phase_factor = phonoc_complex_prod(phase_factor1, phase_factor2);
for (l = 0; l < 27; l++) {
fc3_rec_real[l] +=
lapack_complex_double_real(phase_factor) * fc3[adrs_shift + l];
fc3_rec_imag[l] +=
lapack_complex_double_imag(phase_factor) * fc3[adrs_shift + l];
}
}
}
num_satom = multi_dims[0];
for (i = 0; i < 27; i++) {
fc3_rec_elem[i] =
lapack_make_complex_double(fc3_rec_real[i], fc3_rec_imag[i]);
}
if (is_compact_fc3) {
i = pi0;
} else {
i = p2s[pi0];
}
for (j = 0; j < num_satom; j++) {
if (s2p[j] != p2s[pi1]) {
continue;
}
adrs_vec1 = j * multi_dims[1] + pi0;
phase_factor1 =
get_phase_factor(q_vecs, 1, svecs, multiplicity[adrs_vec1]);
for (k = 0; k < num_satom; k++) {
if (s2p[k] != p2s[pi2]) {
continue;
}
adrs_vec2 = k * multi_dims[1] + pi0;
phase_factor2 =
get_phase_factor(q_vecs, 2, svecs, multiplicity[adrs_vec2]);
adrs_shift =
i * 27 * num_satom * num_satom + j * 27 * num_satom + k * 27;
phase_factor = phonoc_complex_prod(phase_factor1, phase_factor2);
for (l = 0; l < 27; l++) {
fc3_rec_real[l] += lapack_complex_double_real(phase_factor) *
fc3[adrs_shift + l];
fc3_rec_imag[l] += lapack_complex_double_imag(phase_factor) *
fc3[adrs_shift + l];
}
}
}
for (i = 0; i < 27; i++) {
fc3_rec_elem[i] =
lapack_make_complex_double(fc3_rec_real[i], fc3_rec_imag[i]);
}
}
static lapack_complex_double
get_pre_phase_factor(const long i_patom,
const double q_vecs[3][3],
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map)
{
long i, j, svecs_adrs;
double pre_phase, sum_real, sum_imag;
lapack_complex_double pre_phase_factor;
static lapack_complex_double get_pre_phase_factor(const long i_patom,
const double q_vecs[3][3],
const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map) {
long i, j, svecs_adrs;
double pre_phase, sum_real, sum_imag;
lapack_complex_double pre_phase_factor;
svecs_adrs = p2s_map[i_patom] * multi_dims[1];
sum_real = 0;
sum_imag = 0;
for (i = 0; i < multiplicity[svecs_adrs][0]; i++) {
pre_phase = 0;
for (j = 0; j < 3; j++) {
pre_phase += svecs[multiplicity[svecs_adrs][1] + i][j] *
(q_vecs[0][j] + q_vecs[1][j] + q_vecs[2][j]);
svecs_adrs = p2s_map[i_patom] * multi_dims[1];
sum_real = 0;
sum_imag = 0;
for (i = 0; i < multiplicity[svecs_adrs][0]; i++) {
pre_phase = 0;
for (j = 0; j < 3; j++) {
pre_phase += svecs[multiplicity[svecs_adrs][1] + i][j] *
(q_vecs[0][j] + q_vecs[1][j] + q_vecs[2][j]);
}
pre_phase *= M_2PI;
sum_real += cos(pre_phase);
sum_imag += sin(pre_phase);
}
pre_phase *= M_2PI;
sum_real += cos(pre_phase);
sum_imag += sin(pre_phase);
}
sum_real /= multiplicity[svecs_adrs][0];
sum_imag /= multiplicity[svecs_adrs][0];
pre_phase_factor = lapack_make_complex_double(sum_real, sum_imag);
return pre_phase_factor;
sum_real /= multiplicity[svecs_adrs][0];
sum_imag /= multiplicity[svecs_adrs][0];
pre_phase_factor = lapack_make_complex_double(sum_real, sum_imag);
return pre_phase_factor;
}
static lapack_complex_double get_phase_factor(const double q[3][3],
const long qi,
const double (*svecs)[3],
const long multi[2])
{
long i, j;
double sum_real, sum_imag, phase;
const long multi[2]) {
long i, j;
double sum_real, sum_imag, phase;
sum_real = 0;
sum_imag = 0;
for (i = 0; i < multi[0]; i++) {
phase = 0;
for (j = 0; j < 3; j++) {
phase += q[qi][j] * svecs[multi[1] + i][j];
sum_real = 0;
sum_imag = 0;
for (i = 0; i < multi[0]; i++) {
phase = 0;
for (j = 0; j < 3; j++) {
phase += q[qi][j] * svecs[multi[1] + i][j];
}
phase *= M_2PI;
sum_real += cos(phase);
sum_imag += sin(phase);
}
phase *= M_2PI;
sum_real += cos(phase);
sum_imag += sin(phase);
}
sum_real /= multi[0];
sum_imag /= multi[0];
sum_real /= multi[0];
sum_imag /= multi[0];
return lapack_make_complex_double(sum_real, sum_imag);
return lapack_make_complex_double(sum_real, sum_imag);
}

View File

@ -35,17 +35,13 @@
#ifndef __real_to_reciprocal_H__
#define __real_to_reciprocal_H__
#include "phonoc_array.h"
#include "lapack_wrapper.h"
#include "phonoc_array.h"
void r2r_real_to_reciprocal(lapack_complex_double *fc3_reciprocal,
const double q_vecs[3][3],
const double *fc3,
const long is_compact_fc3,
const double (*svecs)[3],
const double q_vecs[3][3], const double *fc3,
const long is_compact_fc3, const double (*svecs)[3],
const long multi_dims[2],
const long (*multiplicity)[2],
const long *p2s_map,
const long *s2p_map,
const long openmp_at_bands);
const long (*multiplicity)[2], const long *p2s_map,
const long *s2p_map, const long openmp_at_bands);
#endif

View File

@ -32,186 +32,143 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include <stdlib.h>
#include <math.h>
#include "reciprocal_to_normal.h"
#include <math.h>
#include <stdlib.h>
#include "lapack_wrapper.h"
#ifdef MEASURE_R2N
#include <unistd.h>
#include <time.h>
#include <unistd.h>
#endif
static lapack_complex_double fc3_sum_in_reciprocal_to_normal
(const long bi0,
const long bi1,
const long bi2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const lapack_complex_double *fc3_reciprocal,
const double *masses,
const long num_atom);
static double get_fc3_sum(const lapack_complex_double *e0,
const lapack_complex_double *e1,
const lapack_complex_double *e2,
const lapack_complex_double *fc3_reciprocal,
const long num_band);
static double get_fc3_sum
(const long j,
const long k,
const long bi,
const double *freqs0,
const double *freqs1,
const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const lapack_complex_double *fc3_reciprocal,
const double *masses,
const long num_atom,
const double cutoff_frequency);
void reciprocal_to_normal_squared(
double *fc3_normal_squared, const long (*g_pos)[4], const long num_g_pos,
const lapack_complex_double *fc3_reciprocal, const double *freqs0,
const double *freqs1, const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2, const double *masses,
const long *band_indices, const long num_band,
const double cutoff_frequency, const long openmp_at_bands) {
long i, j, k, num_atom;
double real, imag;
double *inv_sqrt_masses;
lapack_complex_double *e0, *e1, *e2;
void reciprocal_to_normal_squared
(double *fc3_normal_squared,
const long (*g_pos)[4],
const long num_g_pos,
const lapack_complex_double *fc3_reciprocal,
const double *freqs0,
const double *freqs1,
const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const double *masses,
const long *band_indices,
const long num_band0,
const long num_band,
const double cutoff_frequency,
const long openmp_at_bands)
{
long i, num_atom;
/* Transpose eigenvectors for the better data alignment in memory. */
/* Memory space for three eigenvector matrices is allocated at once */
/* to make it contiguous. */
e0 = (lapack_complex_double *)malloc(sizeof(lapack_complex_double) * 3 *
num_band * num_band);
e1 = e0 + num_band * num_band;
e2 = e1 + num_band * num_band;
for (i = 0; i < num_band; i++) {
for (j = 0; j < num_band; j++) {
e0[j * num_band + i] = eigvecs0[i * num_band + j];
e1[j * num_band + i] = eigvecs1[i * num_band + j];
e2[j * num_band + i] = eigvecs2[i * num_band + j];
}
}
/* Inverse sqrt mass is multipled with eigenvectors to reduce number of */
/* operations in get_fc3_sum. Three eigenvector matrices are looped by */
/* first loop leveraging contiguous memory layout of [e0, e1, e2]. */
num_atom = num_band / 3;
inv_sqrt_masses = (double *)malloc(sizeof(double) * num_atom);
for (i = 0; i < num_atom; i++) {
inv_sqrt_masses[i] = 1.0 / sqrt(masses[i]);
}
for (i = 0; i < 3 * num_band; i++) {
for (j = 0; j < num_atom; j++) {
for (k = 0; k < 3; k++) {
real = lapack_complex_double_real(e0[i * num_band + j * 3 + k]);
imag = lapack_complex_double_imag(e0[i * num_band + j * 3 + k]);
e0[i * num_band + j * 3 + k] = lapack_make_complex_double(
real * inv_sqrt_masses[j], imag * inv_sqrt_masses[j]);
}
}
}
free(inv_sqrt_masses);
inv_sqrt_masses = NULL;
#ifdef MEASURE_R2N
double loopTotalCPUTime, loopTotalWallTime;
time_t loopStartWallTime;
clock_t loopStartCPUTime;
double loopTotalCPUTime, loopTotalWallTime;
time_t loopStartWallTime;
clock_t loopStartCPUTime;
#endif
num_atom = num_band / 3;
#ifdef MEASURE_R2N
loopStartWallTime = time(NULL);
loopStartCPUTime = clock();
loopStartWallTime = time(NULL);
loopStartCPUTime = clock();
#endif
#ifdef PHPYOPENMP
#pragma omp parallel for if (openmp_at_bands)
#endif
for (i = 0; i < num_g_pos; i++) {
if (freqs0[band_indices[g_pos[i][0]]] > cutoff_frequency) {
fc3_normal_squared[g_pos[i][3]] = get_fc3_sum(g_pos[i][1],
g_pos[i][2],
band_indices[g_pos[i][0]],
freqs0,
freqs1,
freqs2,
eigvecs0,
eigvecs1,
eigvecs2,
fc3_reciprocal,
masses,
num_atom,
cutoff_frequency);
for (i = 0; i < num_g_pos; i++) {
if (freqs0[band_indices[g_pos[i][0]]] > cutoff_frequency &&
freqs1[g_pos[i][1]] > cutoff_frequency &&
freqs2[g_pos[i][2]] > cutoff_frequency) {
fc3_normal_squared[g_pos[i][3]] =
get_fc3_sum(e0 + band_indices[g_pos[i][0]] * num_band,
e1 + g_pos[i][1] * num_band,
e2 + g_pos[i][2] * num_band, fc3_reciprocal,
num_band) /
(freqs0[band_indices[g_pos[i][0]]] * freqs1[g_pos[i][1]] *
freqs2[g_pos[i][2]]);
} else {
fc3_normal_squared[g_pos[i][3]] = 0;
}
}
}
#ifdef MEASURE_R2N
loopTotalCPUTime = (double)(clock() - loopStartCPUTime) / CLOCKS_PER_SEC;
loopTotalWallTime = difftime(time(NULL), loopStartWallTime);
printf(" %1.3fs (%1.3fs CPU)\n", loopTotalWallTime, loopTotalCPUTime);
loopTotalCPUTime = (double)(clock() - loopStartCPUTime) / CLOCKS_PER_SEC;
loopTotalWallTime = difftime(time(NULL), loopStartWallTime);
printf(" %1.3fs (%1.3fs CPU)\n", loopTotalWallTime, loopTotalCPUTime);
#endif
free(e0);
e0 = NULL;
e1 = NULL;
e2 = NULL;
}
static double get_fc3_sum
(const long j,
const long k,
const long bi,
const double *freqs0,
const double *freqs1,
const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const lapack_complex_double *fc3_reciprocal,
const double *masses,
const long num_atom,
const double cutoff_frequency)
{
double fff, sum_real, sum_imag;
lapack_complex_double fc3_sum;
static double get_fc3_sum(const lapack_complex_double *e0,
const lapack_complex_double *e1,
const lapack_complex_double *e2,
const lapack_complex_double *fc3_reciprocal,
const long num_band) {
long i, j, k;
double sum_real, sum_imag;
lapack_complex_double e_01, e_012, e_012_fc3;
if (freqs1[j] > cutoff_frequency && freqs2[k] > cutoff_frequency) {
fff = freqs0[bi] * freqs1[j] * freqs2[k];
fc3_sum = fc3_sum_in_reciprocal_to_normal
(bi, j, k,
eigvecs0, eigvecs1, eigvecs2,
fc3_reciprocal,
masses,
num_atom);
sum_real = lapack_complex_double_real(fc3_sum);
sum_imag = lapack_complex_double_imag(fc3_sum);
return (sum_real * sum_real + sum_imag * sum_imag) / fff;
} else {
return 0;
}
}
sum_real = 0;
sum_imag = 0;
static lapack_complex_double fc3_sum_in_reciprocal_to_normal
(const long bi0,
const long bi1,
const long bi2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const lapack_complex_double *fc3_reciprocal,
const double *masses,
const long num_atom)
{
long baseIndex, index_l, index_lm, i, j, k, l, m, n;
double sum_real, sum_imag, mmm, mass_l, mass_lm;
lapack_complex_double eig_prod, eig_prod1;
sum_real = 0;
sum_imag = 0;
for (l = 0; l < num_atom; l++) {
mass_l = masses[l];
index_l = l * num_atom * num_atom * 27;
for (m = 0; m < num_atom; m++) {
mass_lm = mass_l * masses[m];
index_lm = index_l + m * num_atom * 27;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
eig_prod1 = phonoc_complex_prod
(eigvecs0[(l * 3 + i) * num_atom * 3 + bi0],
eigvecs1[(m * 3 + j) * num_atom * 3 + bi1]);
for (n = 0; n < num_atom; n++) {
mmm = 1.0 / sqrt(mass_lm * masses[n]);
baseIndex = index_lm + n * 27 + i * 9 + j * 3;
for (k = 0; k < 3; k++) {
eig_prod = phonoc_complex_prod
(eig_prod1, eigvecs2[(n * 3 + k) * num_atom * 3 + bi2]);
eig_prod = phonoc_complex_prod
(eig_prod, fc3_reciprocal[baseIndex + k]);
sum_real += lapack_complex_double_real(eig_prod) * mmm;
sum_imag += lapack_complex_double_imag(eig_prod) * mmm;
for (i = 0; i < num_band; i++) {
for (j = 0; j < num_band; j++) {
e_01 = phonoc_complex_prod(e0[i], e1[j]);
for (k = 0; k < num_band; k++) {
e_012 = phonoc_complex_prod(e_01, e2[k]);
e_012_fc3 = phonoc_complex_prod(
e_012,
fc3_reciprocal[i * num_band * num_band + j * num_band + k]);
sum_real += lapack_complex_double_real(e_012_fc3);
sum_imag += lapack_complex_double_imag(e_012_fc3);
}
}
}
}
}
}
return lapack_make_complex_double(sum_real, sum_imag);
return (sum_real * sum_real + sum_imag * sum_imag);
}

View File

@ -37,22 +37,14 @@
#include "lapack_wrapper.h"
void reciprocal_to_normal_squared
(double *fc3_normal_squared,
const long (*g_pos)[4],
const long num_g_pos,
const lapack_complex_double *fc3_reciprocal,
const double *freqs0,
const double *freqs1,
const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2,
const double *masses,
const long *band_indices,
const long num_band0,
const long num_band,
const double cutoff_frequency,
const long openmp_at_bands);
void reciprocal_to_normal_squared(
double *fc3_normal_squared, const long (*g_pos)[4], const long num_g_pos,
const lapack_complex_double *fc3_reciprocal, const double *freqs0,
const double *freqs1, const double *freqs2,
const lapack_complex_double *eigvecs0,
const lapack_complex_double *eigvecs1,
const lapack_complex_double *eigvecs2, const double *masses,
const long *band_indices, const long num_band,
const double cutoff_frequency, const long openmp_at_bands);
#endif

View File

@ -20,25 +20,24 @@ static void zero_second_column(long L[3][3], SNF3x3CONST long A[3][3]);
static void second_finalize(long L[3][3], SNF3x3CONST long A[3][3]);
static void finalize(long A[3][3], long P[3][3], long Q[3][3]);
static void finalize_sort(long A[3][3], long P[3][3], long Q[3][3]);
static void finalize_disturb(long A[3][3], long Q[3][3], const int i, const int j);
static void finalize_disturb(long A[3][3], long Q[3][3], const int i,
const int j);
static void disturb_rows(long L[3][3], const int i, const int j);
static void swap_diag_elems(long A[3][3], long P[3][3], long Q[3][3], const int i, const int j);
static void swap_diag_elems(long A[3][3], long P[3][3], long Q[3][3],
const int i, const int j);
static void make_diagA_positive(long A[3][3], long P[3][3]);
static void flip_PQ(long P[3][3], long Q[3][3]);
static void swap_rows(long L[3][3], const int i, const int j);
static void set_zero(long L[3][3],
const int i, const int j, const long a, const long b,
const long r, const long s, const long t);
static void set_zero(long L[3][3], const int i, const int j, const long a,
const long b, const long r, const long s, const long t);
static void extended_gcd(long retvals[3], const long a, const long b);
static void extended_gcd_step(long vals[6]);
static void flip_sign_row(long L[3][3], const int i);
static void transpose(long m[3][3]);
static void matmul(long m[3][3],
SNF3x3CONST long a[3][3],
static void matmul(long m[3][3], SNF3x3CONST long a[3][3],
SNF3x3CONST long b[3][3]);
static long det(SNF3x3CONST long m[3][3]);
/* static void test_set_A(long A[3][3]);
* static void test_show_A(SNF3x3CONST long A[3][3]);
* static void test_extended_gcd(void);
@ -52,453 +51,423 @@ static long det(SNF3x3CONST long m[3][3]);
* static void test_second_one_loop(void);
* static void test_second(void); */
int snf3x3(long A[3][3], long P[3][3], long Q[3][3])
{
int i;
initialize_PQ(P, Q);
int snf3x3(long A[3][3], long P[3][3], long Q[3][3]) {
int i;
initialize_PQ(P, Q);
for (i = 0; i < 100; i++) {
if (first(A, P, Q)) {
if (second(A, P, Q)) {
finalize(A, P, Q);
transpose(Q);
goto succeeded;
}
for (i = 0; i < 100; i++) {
if (first(A, P, Q)) {
if (second(A, P, Q)) {
finalize(A, P, Q);
transpose(Q);
goto succeeded;
}
}
}
}
return 0;
return 0;
succeeded:
return 1;
return 1;
}
static void initialize_PQ(long P[3][3], long Q[3][3])
{
int i, j;
static void initialize_PQ(long P[3][3], long Q[3][3]) {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (i == j) {
P[i][j] = 1;
Q[i][j] = 1;
} else {
P[i][j] = 0;
Q[i][j] = 0;
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (i == j) {
P[i][j] = 1;
Q[i][j] = 1;
} else {
P[i][j] = 0;
Q[i][j] = 0;
}
}
}
}
}
static int first(long A[3][3], long P[3][3], long Q[3][3])
{
long L[3][3];
static int first(long A[3][3], long P[3][3], long Q[3][3]) {
long L[3][3];
first_one_loop(A, P, Q);
first_one_loop(A, P, Q);
/* rows and columns are all zero except for the pivot */
if ((A[1][0] == 0) && (A[2][0] == 0)) {
return 1;
}
/* rows and columns are all zero except for the pivot */
if ((A[1][0] == 0) && (A[2][0] == 0)) {
return 1;
}
/* columns of the pivot are assumed zero because of first_one_loop. */
/* rows of the pivot are non-zero, but divisible by the pivot. */
/* first_finalize makes the rows be zero. */
if ((A[1][0] % A[0][0] == 0) && (A[2][0] % A[0][0] == 0)) {
first_finalize(L, A);
matmul(A, L, A);
matmul(P, L, P);
return 1;
}
return 0;
/* columns of the pivot are assumed zero because of first_one_loop. */
/* rows of the pivot are non-zero, but divisible by the pivot. */
/* first_finalize makes the rows be zero. */
if ((A[1][0] % A[0][0] == 0) && (A[2][0] % A[0][0] == 0)) {
first_finalize(L, A);
matmul(A, L, A);
matmul(P, L, P);
return 1;
}
return 0;
}
static void first_one_loop(long A[3][3], long P[3][3], long Q[3][3])
{
first_column(A, P);
transpose(A);
first_column(A, Q);
transpose(A);
static void first_one_loop(long A[3][3], long P[3][3], long Q[3][3]) {
first_column(A, P);
transpose(A);
first_column(A, Q);
transpose(A);
}
static void first_column(long A[3][3], long P[3][3])
{
int i;
long L[3][3];
static void first_column(long A[3][3], long P[3][3]) {
int i;
long L[3][3];
i = search_first_pivot(A);
if (i > 0) {
swap_rows(L, 0, i);
matmul(A, L, A);
matmul(P, L, P);
}
if (i < 0) {
goto err;
}
i = search_first_pivot(A);
if (i > 0) {
swap_rows(L, 0, i);
matmul(A, L, A);
matmul(P, L, P);
}
if (i < 0) {
goto err;
}
if (A[1][0] != 0) {
zero_first_column(L, 1, A);
matmul(A, L, A);
matmul(P, L, P);
}
if (A[2][0] != 0) {
zero_first_column(L, 2, A);
matmul(A, L, A);
matmul(P, L, P);
}
if (A[1][0] != 0) {
zero_first_column(L, 1, A);
matmul(A, L, A);
matmul(P, L, P);
}
if (A[2][0] != 0) {
zero_first_column(L, 2, A);
matmul(A, L, A);
matmul(P, L, P);
}
err:
;
err:;
}
static void zero_first_column(long L[3][3], const int j,
SNF3x3CONST long A[3][3])
{
long vals[3];
SNF3x3CONST long A[3][3]) {
long vals[3];
extended_gcd(vals, A[0][0], A[j][0]);
set_zero(L, 0, j, A[0][0], A[j][0], vals[0], vals[1], vals[2]);
extended_gcd(vals, A[0][0], A[j][0]);
set_zero(L, 0, j, A[0][0], A[j][0], vals[0], vals[1], vals[2]);
}
static int search_first_pivot(SNF3x3CONST long A[3][3])
{
int i;
static int search_first_pivot(SNF3x3CONST long A[3][3]) {
int i;
for (i = 0; i < 3; i++) {
if (A[i][0] != 0) {
return i;
for (i = 0; i < 3; i++) {
if (A[i][0] != 0) {
return i;
}
}
}
return -1;
return -1;
}
static void first_finalize(long L[3][3], SNF3x3CONST long A[3][3])
{
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = -A[1][0] / A[0][0];
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = -A[2][0] / A[0][0];
L[2][1] = 0;
L[2][2] = 1;
static void first_finalize(long L[3][3], SNF3x3CONST long A[3][3]) {
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = -A[1][0] / A[0][0];
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = -A[2][0] / A[0][0];
L[2][1] = 0;
L[2][2] = 1;
}
static int second(long A[3][3], long P[3][3], long Q[3][3])
{
long L[3][3];
static int second(long A[3][3], long P[3][3], long Q[3][3]) {
long L[3][3];
second_one_loop(A, P, Q);
second_one_loop(A, P, Q);
if (A[2][1] == 0) {
return 1;
}
if (A[2][1] == 0) {
return 1;
}
if (A[2][1] % A[1][1] == 0) {
second_finalize(L, A);
matmul(A, L, A);
matmul(P, L, P);
return 1;
}
if (A[2][1] % A[1][1] == 0) {
second_finalize(L, A);
matmul(A, L, A);
matmul(P, L, P);
return 1;
}
return 0;
return 0;
}
static void second_one_loop(long A[3][3], long P[3][3], long Q[3][3])
{
second_column(A, P);
transpose(A);
second_column(A, Q);
transpose(A);
}
static void second_column(long A[3][3], long P[3][3])
{
long L[3][3];
if ((A[1][1] == 0) && (A[2][1] != 0)) {
swap_rows(L, 1, 2);
matmul(A, L, A);
matmul(P, L, P);
}
if (A[2][1] != 0) {
zero_second_column(L, A);
matmul(A, L, A);
matmul(P, L, P);
}
}
static void zero_second_column(long L[3][3], SNF3x3CONST long A[3][3])
{
long vals[3];
extended_gcd(vals, A[1][1], A[2][1]);
set_zero(L, 1, 2, A[1][1], A[2][1], vals[0], vals[1], vals[2]);
}
static void second_finalize(long L[3][3], SNF3x3CONST long A[3][3])
{
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = -A[2][1] / A[1][1];
L[2][2] = 1;
}
static void finalize(long A[3][3], long P[3][3], long Q[3][3])
{
make_diagA_positive(A, P);
finalize_sort(A, P, Q);
finalize_disturb(A, Q, 0, 1);
first(A, P, Q);
finalize_sort(A, P, Q);
finalize_disturb(A, Q, 1, 2);
second(A, P, Q);
flip_PQ(P, Q);
}
static void finalize_sort(long A[3][3], long P[3][3], long Q[3][3])
{
if (A[0][0] > A[1][1]) {
swap_diag_elems(A, P, Q, 0, 1);
}
if (A[1][1] > A[2][2]) {
swap_diag_elems(A, P, Q, 1, 2);
}
if (A[0][0] > A[1][1]) {
swap_diag_elems(A, P, Q, 0, 1);
}
}
static void finalize_disturb(long A[3][3], long Q[3][3], const int i, const int j)
{
long L[3][3];
if (A[j][j] % A[i][i] != 0) {
static void second_one_loop(long A[3][3], long P[3][3], long Q[3][3]) {
second_column(A, P);
transpose(A);
disturb_rows(L, i, j);
second_column(A, Q);
transpose(A);
}
static void second_column(long A[3][3], long P[3][3]) {
long L[3][3];
if ((A[1][1] == 0) && (A[2][1] != 0)) {
swap_rows(L, 1, 2);
matmul(A, L, A);
matmul(P, L, P);
}
if (A[2][1] != 0) {
zero_second_column(L, A);
matmul(A, L, A);
matmul(P, L, P);
}
}
static void zero_second_column(long L[3][3], SNF3x3CONST long A[3][3]) {
long vals[3];
extended_gcd(vals, A[1][1], A[2][1]);
set_zero(L, 1, 2, A[1][1], A[2][1], vals[0], vals[1], vals[2]);
}
static void second_finalize(long L[3][3], SNF3x3CONST long A[3][3]) {
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = -A[2][1] / A[1][1];
L[2][2] = 1;
}
static void finalize(long A[3][3], long P[3][3], long Q[3][3]) {
make_diagA_positive(A, P);
finalize_sort(A, P, Q);
finalize_disturb(A, Q, 0, 1);
first(A, P, Q);
finalize_sort(A, P, Q);
finalize_disturb(A, Q, 1, 2);
second(A, P, Q);
flip_PQ(P, Q);
}
static void finalize_sort(long A[3][3], long P[3][3], long Q[3][3]) {
if (A[0][0] > A[1][1]) {
swap_diag_elems(A, P, Q, 0, 1);
}
if (A[1][1] > A[2][2]) {
swap_diag_elems(A, P, Q, 1, 2);
}
if (A[0][0] > A[1][1]) {
swap_diag_elems(A, P, Q, 0, 1);
}
}
static void finalize_disturb(long A[3][3], long Q[3][3], const int i,
const int j) {
long L[3][3];
if (A[j][j] % A[i][i] != 0) {
transpose(A);
disturb_rows(L, i, j);
matmul(A, L, A);
matmul(Q, L, Q);
transpose(A);
}
}
static void disturb_rows(long L[3][3], const int i, const int j) {
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[i][i] = 1;
L[i][j] = 1;
L[j][i] = 0;
L[j][j] = 1;
}
static void swap_diag_elems(long A[3][3], long P[3][3], long Q[3][3],
const int i, const int j) {
long L[3][3];
swap_rows(L, i, j);
matmul(A, L, A);
matmul(P, L, P);
transpose(A);
swap_rows(L, i, j);
matmul(A, L, A);
matmul(Q, L, Q);
transpose(A);
}
}
static void disturb_rows(long L[3][3], const int i, const int j)
{
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[i][i] = 1;
L[i][j] = 1;
L[j][i] = 0;
L[j][j] = 1;
}
static void make_diagA_positive(long A[3][3], long P[3][3]) {
int i;
long L[3][3];
static void swap_diag_elems(long A[3][3], long P[3][3], long Q[3][3], const int i, const int j)
{
long L[3][3];
swap_rows(L, i, j);
matmul(A, L, A);
matmul(P, L, P);
transpose(A);
swap_rows(L, i, j);
matmul(A, L, A);
matmul(Q, L, Q);
transpose(A);
}
static void make_diagA_positive(long A[3][3], long P[3][3])
{
int i;
long L[3][3];
for (i = 0; i < 3; i++) {
if (A[i][i] < 0) {
flip_sign_row(L, i);
matmul(A, L, A);
matmul(P, L, P);
}
}
}
static void flip_PQ(long P[3][3], long Q[3][3])
{
int i, j;
if (det(P) < 0) {
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
P[i][j] *= -1;
Q[i][j] *= -1;
}
if (A[i][i] < 0) {
flip_sign_row(L, i);
matmul(A, L, A);
matmul(P, L, P);
}
}
}
}
static void swap_rows(long L[3][3], const int r1, const int r2)
{
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[r1][r1] = 0;
L[r2][r2] = 0;
L[r1][r2] = 1;
L[r2][r1] = 1;
static void flip_PQ(long P[3][3], long Q[3][3]) {
int i, j;
if (det(P) < 0) {
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
P[i][j] *= -1;
Q[i][j] *= -1;
}
}
}
}
static void set_zero(long L[3][3],
const int i, const int j, const long a, const long b,
const long r, const long s, const long t)
{
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[i][i] = s;
L[i][j] = t;
L[j][i] = -b / r;
L[j][j] = a / r;
static void swap_rows(long L[3][3], const int r1, const int r2) {
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[r1][r1] = 0;
L[r2][r2] = 0;
L[r1][r2] = 1;
L[r2][r1] = 1;
}
static void set_zero(long L[3][3], const int i, const int j, const long a,
const long b, const long r, const long s, const long t) {
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[i][i] = s;
L[i][j] = t;
L[j][i] = -b / r;
L[j][j] = a / r;
}
/**
* Extended Euclidean algorithm
* See https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
*/
static void extended_gcd(long retvals[3], const long a, const long b)
{
int i;
long vals[6];
static void extended_gcd(long retvals[3], const long a, const long b) {
int i;
long vals[6];
vals[0] = a; /* r0 */
vals[1] = b; /* r1 */
vals[2] = 1; /* s0 */
vals[3] = 0; /* s1 */
vals[4] = 0; /* t0 */
vals[5] = 1; /* t1 */
vals[0] = a; /* r0 */
vals[1] = b; /* r1 */
vals[2] = 1; /* s0 */
vals[3] = 0; /* s1 */
vals[4] = 0; /* t0 */
vals[5] = 1; /* t1 */
for (i = 0; i < 1000; i++) {
extended_gcd_step(vals);
if (vals[1] == 0) {
break;
for (i = 0; i < 1000; i++) {
extended_gcd_step(vals);
if (vals[1] == 0) {
break;
}
}
}
retvals[0] = vals[0];
retvals[1] = vals[2];
retvals[2] = vals[4];
retvals[0] = vals[0];
retvals[1] = vals[2];
retvals[2] = vals[4];
assert(vals[0] == a * vals[2] + b * vals[4]);
assert(vals[0] == a * vals[2] + b * vals[4]);
}
static void extended_gcd_step(long vals[6])
{
long q, r2, s2, t2;
static void extended_gcd_step(long vals[6]) {
long q, r2, s2, t2;
q = vals[0] / vals[1];
r2 = vals[0] % vals[1];
if (r2 < 0) {
if (vals[1] > 0) {
r2 += vals[1];
q -= 1;
q = vals[0] / vals[1];
r2 = vals[0] % vals[1];
if (r2 < 0) {
if (vals[1] > 0) {
r2 += vals[1];
q -= 1;
}
if (vals[1] < 0) {
r2 -= vals[1];
q += 1;
}
}
if (vals[1] < 0) {
r2 -= vals[1];
q += 1;
}
}
s2 = vals[2] - q * vals[3];
t2 = vals[4] - q * vals[5];
vals[0] = vals[1];
vals[1] = r2;
vals[2] = vals[3];
vals[3] = s2;
vals[4] = vals[5];
vals[5] = t2;
s2 = vals[2] - q * vals[3];
t2 = vals[4] - q * vals[5];
vals[0] = vals[1];
vals[1] = r2;
vals[2] = vals[3];
vals[3] = s2;
vals[4] = vals[5];
vals[5] = t2;
}
static void flip_sign_row(long L[3][3], const int i)
{
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[i][i] = -1;
static void flip_sign_row(long L[3][3], const int i) {
L[0][0] = 1;
L[0][1] = 0;
L[0][2] = 0;
L[1][0] = 0;
L[1][1] = 1;
L[1][2] = 0;
L[2][0] = 0;
L[2][1] = 0;
L[2][2] = 1;
L[i][i] = -1;
}
/**
* Matrix operation utils
*/
static void transpose(long m[3][3])
{
long tmp;
int i, j;
static void transpose(long m[3][3]) {
long tmp;
int i, j;
for (i = 0; i < 3; i++) {
for (j = i; j < 3; j++) {
tmp = m[i][j];
m[i][j] = m[j][i];
m[j][i] = tmp;
for (i = 0; i < 3; i++) {
for (j = i; j < 3; j++) {
tmp = m[i][j];
m[i][j] = m[j][i];
m[j][i] = tmp;
}
}
}
}
static void matmul(long m[3][3],
SNF3x3CONST long a[3][3],
SNF3x3CONST long b[3][3])
{
int i, j;
long c[3][3];
static void matmul(long m[3][3], SNF3x3CONST long a[3][3],
SNF3x3CONST long b[3][3]) {
int i, j;
long c[3][3];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
}
}
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
m[i][j] = c[i][j];
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
m[i][j] = c[i][j];
}
}
}
}
static long det(SNF3x3CONST long m[3][3])
{
return m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
+ m[0][1] * (m[1][2] * m[2][0] - m[1][0] * m[2][2])
+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
static long det(SNF3x3CONST long m[3][3]) {
return m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) +
m[0][1] * (m[1][2] * m[2][0] - m[1][0] * m[2][2]) +
m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
}
/* int main()
* {
* test_extended_gcd();

View File

@ -9,7 +9,7 @@ extern "C" {
#define SNF3X3_MINOR_VERSION 1
#define SNF3X3_MICRO_VERSION 0
int snf3x3(long A[3][3], long P[3][3], long Q[3][3]);
int snf3x3(long A[3][3], long P[3][3], long Q[3][3]);
#ifdef __cplusplus
}

File diff suppressed because it is too large Load Diff

View File

@ -34,173 +34,121 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "bzgrid.h"
#include "triplet.h"
#include "triplet_iw.h"
#include "bzgrid.h"
#include "triplet_grid.h"
#include "triplet_iw.h"
long tpl_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
long tpl_get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const ConstBZGrid *bzgrid,
const long *map_triplets)
{
return tpk_get_BZ_triplets_at_q(triplets,
grid_point,
bzgrid,
map_triplets);
const long *map_triplets) {
return tpk_get_BZ_triplets_at_q(triplets, grid_point, bzgrid, map_triplets);
}
long tpl_get_triplets_reciprocal_mesh_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long mesh[3],
const long is_time_reversal,
const long num_rot,
const long (*rec_rotations)[3][3],
const long swappable)
{
long num_ir;
long tpl_get_triplets_reciprocal_mesh_at_q(
long *map_triplets, long *map_q, const long grid_point, const long mesh[3],
const long is_time_reversal, const long num_rot,
const long (*rec_rotations)[3][3], const long swappable) {
long num_ir;
num_ir = tpk_get_ir_triplets_at_q(map_triplets,
map_q,
grid_point,
mesh,
is_time_reversal,
rec_rotations,
num_rot,
swappable);
return num_ir;
num_ir = tpk_get_ir_triplets_at_q(map_triplets, map_q, grid_point, mesh,
is_time_reversal, rec_rotations, num_rot,
swappable);
return num_ir;
}
void tpl_get_integration_weight(double *iw,
char *iw_zero,
const double *frequency_points,
const long num_band0,
const long relative_grid_address[24][4][3],
const long (*triplets)[3],
const long num_triplets,
const ConstBZGrid *bzgrid,
const double *frequencies1,
const long num_band1,
const double *frequencies2,
const long num_band2,
const long tp_type,
const long openmp_per_triplets,
const long openmp_per_bands)
{
long i, num_band_prod;
long tp_relative_grid_address[2][24][4][3];
void tpl_get_integration_weight(
double *iw, char *iw_zero, const double *frequency_points,
const long num_band0, const long relative_grid_address[24][4][3],
const long (*triplets)[3], const long num_triplets,
const ConstBZGrid *bzgrid, const double *frequencies1, const long num_band1,
const double *frequencies2, const long num_band2, const long tp_type,
const long openmp_per_triplets, const long openmp_per_bands) {
long i, num_band_prod;
long tp_relative_grid_address[2][24][4][3];
tpl_set_relative_grid_address(tp_relative_grid_address,
relative_grid_address,
tp_type);
num_band_prod = num_band0 * num_band1 * num_band2;
tpl_set_relative_grid_address(tp_relative_grid_address,
relative_grid_address, tp_type);
num_band_prod = num_band0 * num_band1 * num_band2;
#ifdef PHPYOPENMP
#pragma omp parallel for if (openmp_per_triplets)
#endif
for (i = 0; i < num_triplets; i++) {
tpi_get_integration_weight(iw + i * num_band_prod,
iw_zero + i * num_band_prod,
frequency_points, /* f0 */
num_band0,
tp_relative_grid_address,
triplets[i],
num_triplets,
bzgrid,
frequencies1, /* f1 */
num_band1,
frequencies2, /* f2 */
num_band2,
tp_type,
openmp_per_bands);
}
for (i = 0; i < num_triplets; i++) {
tpi_get_integration_weight(
iw + i * num_band_prod, iw_zero + i * num_band_prod,
frequency_points, /* f0 */
num_band0, tp_relative_grid_address, triplets[i], num_triplets,
bzgrid, frequencies1, /* f1 */
num_band1, frequencies2, /* f2 */
num_band2, tp_type, openmp_per_bands);
}
}
void tpl_get_integration_weight_with_sigma(
double *iw, char *iw_zero, const double sigma, const double sigma_cutoff,
const double *frequency_points, const long num_band0,
const long (*triplets)[3], const long num_triplets,
const double *frequencies, const long num_band, const long tp_type) {
long i, num_band_prod, const_adrs_shift;
double cutoff;
void tpl_get_integration_weight_with_sigma(double *iw,
char *iw_zero,
const double sigma,
const double sigma_cutoff,
const double *frequency_points,
const long num_band0,
const long (*triplets)[3],
const long num_triplets,
const double *frequencies,
const long num_band,
const long tp_type)
{
long i, num_band_prod, const_adrs_shift;
double cutoff;
cutoff = sigma * sigma_cutoff;
num_band_prod = num_band0 * num_band * num_band;
const_adrs_shift = num_triplets * num_band0 * num_band * num_band;
cutoff = sigma * sigma_cutoff;
num_band_prod = num_band0 * num_band * num_band;
const_adrs_shift = num_triplets * num_band0 * num_band * num_band;
#ifdef PHPYOPENMP
#pragma omp parallel for
#endif
for (i = 0; i < num_triplets; i++) {
tpi_get_integration_weight_with_sigma(
iw + i * num_band_prod,
iw_zero + i * num_band_prod,
sigma,
cutoff,
frequency_points,
num_band0,
triplets[i],
const_adrs_shift,
frequencies,
num_band,
tp_type,
0);
}
for (i = 0; i < num_triplets; i++) {
tpi_get_integration_weight_with_sigma(
iw + i * num_band_prod, iw_zero + i * num_band_prod, sigma, cutoff,
frequency_points, num_band0, triplets[i], const_adrs_shift,
frequencies, num_band, tp_type, 0);
}
}
long tpl_is_N(const long triplet[3], const long (*bz_grid_addresses)[3]) {
long i, j, sum_q, is_N;
long tpl_is_N(const long triplet[3], const long (*bz_grid_addresses)[3])
{
long i, j, sum_q, is_N;
is_N = 1;
for (i = 0; i < 3; i++) {
sum_q = 0;
for (j = 0; j < 3; j++) { /* 1st, 2nd, 3rd triplet */
sum_q += bz_grid_addresses[triplet[j]][i];
}
if (sum_q) {
is_N = 0;
break;
}
}
return is_N;
}
void tpl_set_relative_grid_address(
long tp_relative_grid_address[2][24][4][3],
const long relative_grid_address[24][4][3],
const long tp_type)
{
long i, j, k, l;
long signs[2];
signs[0] = 1;
signs[1] = 1;
if ((tp_type == 2) || (tp_type == 3)) {
/* q1+q2+q3=G */
/* To set q2+1, q3-1 is needed to keep G */
signs[1] = -1;
}
/* tp_type == 4, q+k_i-k_f=G */
for (i = 0; i < 2; i++) {
for (j = 0; j < 24; j++) {
for (k = 0; k < 4; k++) {
for (l = 0; l < 3; l++) {
tp_relative_grid_address[i][j][k][l] =
relative_grid_address[j][k][l] * signs[i];
is_N = 1;
for (i = 0; i < 3; i++) {
sum_q = 0;
for (j = 0; j < 3; j++) { /* 1st, 2nd, 3rd triplet */
sum_q += bz_grid_addresses[triplet[j]][i];
}
if (sum_q) {
is_N = 0;
break;
}
}
return is_N;
}
void tpl_set_relative_grid_address(long tp_relative_grid_address[2][24][4][3],
const long relative_grid_address[24][4][3],
const long tp_type) {
long i, j, k, l;
long signs[2];
signs[0] = 1;
signs[1] = 1;
if ((tp_type == 2) || (tp_type == 3)) {
/* q1+q2+q3=G */
/* To set q2+1, q3-1 is needed to keep G */
signs[1] = -1;
}
/* tp_type == 4, q+k_i-k_f=G */
for (i = 0; i < 2; i++) {
for (j = 0; j < 24; j++) {
for (k = 0; k < 4; k++) {
for (l = 0; l < 3; l++) {
tp_relative_grid_address[i][j][k][l] =
relative_grid_address[j][k][l] * signs[i];
}
}
}
}
}
}
}

View File

@ -38,6 +38,7 @@
#define __triplet_H__
#include <stddef.h>
#include "bzgrid.h"
/* Irreducible triplets of k-points are searched under conservation of */
@ -46,55 +47,35 @@
/* and map_q[prod(mesh)] are required. rotations are point-group- */
/* operations in real space for which duplicate operations are allowed */
/* in the input. */
long tpl_get_triplets_reciprocal_mesh_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long mesh[3],
const long is_time_reversal,
const long num_rot,
const long (*rec_rotations)[3][3],
const long swappable);
long tpl_get_triplets_reciprocal_mesh_at_q(
long *map_triplets, long *map_q, const long grid_point, const long mesh[3],
const long is_time_reversal, const long num_rot,
const long (*rec_rotations)[3][3], const long swappable);
/* Irreducible grid-point-triplets in BZ are stored. */
/* triplets are recovered from grid_point and triplet_weights. */
/* BZ boundary is considered in this recovery. Therefore grid addresses */
/* are given not by grid_address, but by bz_grid_address. */
/* triplets[num_ir_triplets][3] = number of non-zero triplets weights*/
/* Number of ir-triplets is returned. */
long tpl_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
long tpl_get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const ConstBZGrid *bzgrid,
const long *map_triplets);
void tpl_get_integration_weight(double *iw,
char *iw_zero,
const double *frequency_points,
const long num_band0,
const long relative_grid_address[24][4][3],
const long (*triplets)[3],
const long num_triplets,
const ConstBZGrid *bzgrid,
const double *frequencies1,
const long num_band1,
const double *frequencies2,
const long num_band2,
const long tp_type,
const long openmp_per_triplets,
const long openmp_per_bands);
void tpl_get_integration_weight_with_sigma(double *iw,
char *iw_zero,
const double sigma,
const double sigma_cutoff,
const double *frequency_points,
const long num_band0,
const long (*triplets)[3],
const long num_triplets,
const double *frequencies,
const long num_band,
const long tp_type);
void tpl_get_integration_weight(
double *iw, char *iw_zero, const double *frequency_points,
const long num_band0, const long relative_grid_address[24][4][3],
const long (*triplets)[3], const long num_triplets,
const ConstBZGrid *bzgrid, const double *frequencies1, const long num_band1,
const double *frequencies2, const long num_band2, const long tp_type,
const long openmp_per_triplets, const long openmp_per_bands);
void tpl_get_integration_weight_with_sigma(
double *iw, char *iw_zero, const double sigma, const double sigma_cutoff,
const double *frequency_points, const long num_band0,
const long (*triplets)[3], const long num_triplets,
const double *frequencies, const long num_band, const long tp_type);
long tpl_is_N(const long triplet[3], const long (*bz_grid_addresses)[3]);
void tpl_set_relative_grid_address(
long tp_relative_grid_address[2][24][4][3],
const long relative_grid_address[24][4][3],
const long tp_type);
void tpl_set_relative_grid_address(long tp_relative_grid_address[2][24][4][3],
const long relative_grid_address[24][4][3],
const long tp_type);
#endif

View File

@ -34,33 +34,28 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "triplet_grid.h"
#include <stddef.h>
#include <stdlib.h>
#include "bzgrid.h"
#include "grgrid.h"
#include "lagrid.h"
#include "triplet.h"
#include "triplet_grid.h"
static long get_ir_triplets_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long D_diag[3],
const RotMats * rot_reciprocal,
static long get_ir_triplets_at_q(long *map_triplets, long *map_q,
const long grid_point, const long D_diag[3],
const RotMats *rot_reciprocal,
const long swappable);
static long get_ir_triplets_at_q_perm_q1q2(long *map_triplets,
const long *map_q,
const long grid_point,
const long D_diag[3],
const RotMats * rot_reciprocal_q,
const long num_ir_q);
static long get_ir_triplets_at_q_noperm(long *map_triplets,
const long *map_q,
const long D_diag[3]);
static long get_ir_triplets_at_q_noperm(long *map_triplets, const long *map_q,
const long grid_point,
const long D_diag[3],
const RotMats * rot_reciprocal_q);
static long get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
const long D_diag[3]);
static long get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const ConstBZGrid *bzgrid,
const long *map_triplets);
static void get_BZ_triplets_at_q_type1(long (*triplets)[3],
@ -73,10 +68,9 @@ static void get_BZ_triplets_at_q_type2(long (*triplets)[3],
const ConstBZGrid *bzgrid,
const long *ir_q1_gps,
const long num_ir);
static double get_squared_distance(const long G[3],
const double LQD_inv[3][3]);
static double get_squared_distance(const long G[3], const double LQD_inv[3][3]);
static void get_LQD_inv(double LQD_inv[3][3], const ConstBZGrid *bzgrid);
static RotMats *get_reciprocal_point_group_with_q(const RotMats * rot_reciprocal,
static RotMats *get_reciprocal_point_group_with_q(const RotMats *rot_reciprocal,
const long D_diag[3],
const long grid_point);
static RotMats *get_reciprocal_point_group(const long (*rec_rotations_in)[3][3],
@ -84,503 +78,424 @@ static RotMats *get_reciprocal_point_group(const long (*rec_rotations_in)[3][3],
const long is_time_reversal,
const long is_transpose);
long tpk_get_ir_triplets_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long D_diag[3],
long tpk_get_ir_triplets_at_q(long *map_triplets, long *map_q,
const long grid_point, const long D_diag[3],
const long is_time_reversal,
const long (*rec_rotations_in)[3][3],
const long num_rot,
const long swappable)
{
long num_ir;
RotMats *rotations;
const long num_rot, const long swappable) {
long num_ir;
RotMats *rotations;
rotations = get_reciprocal_point_group(rec_rotations_in,
num_rot,
is_time_reversal,
0);
if (rotations == NULL) {
return 0;
}
num_ir = get_ir_triplets_at_q(map_triplets,
map_q,
grid_point,
D_diag,
rotations,
swappable);
bzg_free_RotMats(rotations);
rotations = NULL;
return num_ir;
}
long tpk_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
const ConstBZGrid *bzgrid,
const long *map_triplets)
{
return get_BZ_triplets_at_q(triplets,
grid_point,
bzgrid,
map_triplets);
}
static long get_ir_triplets_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long D_diag[3],
const RotMats * rot_reciprocal,
const long swappable)
{
long i, num_ir_q, num_ir_triplets;
long PS[3];
RotMats *rot_reciprocal_q;
rot_reciprocal_q = NULL;
for (i = 0; i < 3; i++) {
PS[i] = 0;
}
/* Search irreducible q-points (map_q) with a stabilizer. */
rot_reciprocal_q = get_reciprocal_point_group_with_q(rot_reciprocal,
D_diag,
grid_point);
grg_get_ir_grid_map(map_q,
rot_reciprocal_q->mat,
rot_reciprocal_q->size,
D_diag,
PS);
num_ir_q = 0;
for (i = 0; i < D_diag[0] * D_diag[1] * D_diag[2]; i++) {
if (map_q[i] == i) {
num_ir_q++;
rotations = get_reciprocal_point_group(rec_rotations_in, num_rot,
is_time_reversal, 0);
if (rotations == NULL) {
return 0;
}
}
if (swappable) {
num_ir_triplets = get_ir_triplets_at_q_perm_q1q2(map_triplets,
map_q,
grid_point,
D_diag,
rot_reciprocal_q,
num_ir_q);
} else {
num_ir_triplets = get_ir_triplets_at_q_noperm(map_triplets,
map_q,
grid_point,
D_diag,
rot_reciprocal_q);
}
num_ir = get_ir_triplets_at_q(map_triplets, map_q, grid_point, D_diag,
rotations, swappable);
bzg_free_RotMats(rotations);
rotations = NULL;
bzg_free_RotMats(rot_reciprocal_q);
rot_reciprocal_q = NULL;
return num_ir;
}
return num_ir_triplets;
long tpk_get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const ConstBZGrid *bzgrid,
const long *map_triplets) {
return get_BZ_triplets_at_q(triplets, grid_point, bzgrid, map_triplets);
}
static long get_ir_triplets_at_q(long *map_triplets, long *map_q,
const long grid_point, const long D_diag[3],
const RotMats *rot_reciprocal,
const long swappable) {
long i, num_ir_q, num_ir_triplets;
long PS[3];
RotMats *rot_reciprocal_q;
rot_reciprocal_q = NULL;
for (i = 0; i < 3; i++) {
PS[i] = 0;
}
/* Search irreducible q-points (map_q) with a stabilizer. */
rot_reciprocal_q =
get_reciprocal_point_group_with_q(rot_reciprocal, D_diag, grid_point);
grg_get_ir_grid_map(map_q, rot_reciprocal_q->mat, rot_reciprocal_q->size,
D_diag, PS);
num_ir_q = 0;
for (i = 0; i < D_diag[0] * D_diag[1] * D_diag[2]; i++) {
if (map_q[i] == i) {
num_ir_q++;
}
}
if (swappable) {
num_ir_triplets = get_ir_triplets_at_q_perm_q1q2(map_triplets, map_q,
grid_point, D_diag);
} else {
num_ir_triplets = get_ir_triplets_at_q_noperm(map_triplets, map_q,
grid_point, D_diag);
}
bzg_free_RotMats(rot_reciprocal_q);
rot_reciprocal_q = NULL;
return num_ir_triplets;
}
static long get_ir_triplets_at_q_perm_q1q2(long *map_triplets,
const long *map_q,
const long grid_point,
const long D_diag[3],
const RotMats * rot_reciprocal_q,
const long num_ir_q)
{
long i, j, num_grid, num_ir_triplets, ir_gp, count;
long adrs0[3], adrs1[3], adrs2[3];
long *ir_gps_at_q, *q_2;
const long D_diag[3]) {
long j, num_grid, num_ir_triplets, gp1, gp2;
long adrs0[3], adrs1[3], adrs2[3];
ir_gps_at_q = NULL;
q_2 = NULL;
num_ir_triplets = 0;
num_ir_triplets = 0;
num_grid = D_diag[0] * D_diag[1] * D_diag[2];
grg_get_grid_address_from_index(adrs0, grid_point, D_diag);
num_grid = D_diag[0] * D_diag[1] * D_diag[2];
if ((q_2 = (long*) malloc(sizeof(long) * num_ir_q)) == NULL) {
warning_print("Memory could not be allocated.");
goto ret;
}
if ((ir_gps_at_q = (long*) malloc(sizeof(long) * num_ir_q)) == NULL) {
warning_print("Memory could not be allocated.");
goto ret;
}
count = 0;
for (i = 0; i < num_grid; i++) {
if (map_q[i] == i) {
ir_gps_at_q[count] = i;
count++;
// #ifdef PHPYOPENMP
// #pragma omp parallel for private(j, gp2, adrs1, adrs2)
// #endif
for (gp1 = 0; gp1 < num_grid; gp1++) {
if (map_q[gp1] == gp1) {
grg_get_grid_address_from_index(adrs1, gp1, D_diag);
for (j = 0; j < 3; j++) {
adrs2[j] = -adrs0[j] - adrs1[j];
}
/* If map_q[gp2] is smaller than current gp1, map_q[gp2] should */
/* equal to a previous gp1 for which map_triplets is already */
/* filled. So the counter is not incremented. */
gp2 = grg_get_grid_index(adrs2, D_diag);
if (map_q[gp2] < gp1) {
map_triplets[gp1] = map_q[gp2];
} else {
map_triplets[gp1] = gp1;
num_ir_triplets++;
}
}
}
}
grg_get_grid_address_from_index(adrs0, grid_point, D_diag);
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, adrs1, adrs2)
#endif
for (i = 0; i < num_ir_q; i++) {
grg_get_grid_address_from_index(adrs1, ir_gps_at_q[i], D_diag);
for (j = 0; j < 3; j++) { /* q'' */
adrs2[j] = - adrs0[j] - adrs1[j];
}
q_2[i] = grg_get_grid_index(adrs2, D_diag);
}
/* map_q[q_2[i]] is in ir_gps_at_q. */
/* If map_q[q_2[i]] < ir_gps_at_q[i], this should be already */
/* stored. So the counter is not incremented. */
for (i = 0; i < num_ir_q; i++) {
ir_gp = ir_gps_at_q[i];
if (map_q[q_2[i]] < ir_gp) {
map_triplets[ir_gp] = map_q[q_2[i]];
} else {
map_triplets[ir_gp] = ir_gp;
num_ir_triplets++;
}
}
/* Fill unfilled elements of map_triplets. */
#ifdef PHPYOPENMP
#pragma omp parallel for
#endif
for (i = 0; i < num_grid; i++) {
map_triplets[i] = map_triplets[map_q[i]];
}
for (gp1 = 0; gp1 < num_grid; gp1++) {
if (map_q[gp1] != gp1) {
/* map_q[gp1] is one of ir-gp1, so it is already filled. */
map_triplets[gp1] = map_triplets[map_q[gp1]];
}
}
ret:
if (q_2) {
free(q_2);
q_2 = NULL;
}
if (ir_gps_at_q) {
free(ir_gps_at_q);
ir_gps_at_q = NULL;
}
return num_ir_triplets;
return num_ir_triplets;
}
static long get_ir_triplets_at_q_noperm(long *map_triplets,
const long *map_q,
static long get_ir_triplets_at_q_noperm(long *map_triplets, const long *map_q,
const long grid_point,
const long D_diag[3],
const RotMats * rot_reciprocal_q)
{
long i, num_grid, num_ir_triplets;
const long D_diag[3]) {
long gp1, num_grid, num_ir_triplets;
num_ir_triplets = 0;
num_grid = D_diag[0] * D_diag[1] * D_diag[2];
num_ir_triplets = 0;
num_grid = D_diag[0] * D_diag[1] * D_diag[2];
for (i = 0; i < num_grid; i++) {
if (map_q[i] == i) {
map_triplets[i] = i;
num_ir_triplets++;
} else {
map_triplets[i] = map_triplets[map_q[i]];
for (gp1 = 0; gp1 < num_grid; gp1++) {
if (map_q[gp1] == gp1) {
map_triplets[gp1] = gp1;
num_ir_triplets++;
} else {
map_triplets[gp1] = map_triplets[map_q[gp1]];
}
}
}
return num_ir_triplets;
return num_ir_triplets;
}
static long get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
static long get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const ConstBZGrid *bzgrid,
const long *map_triplets)
{
long i, num_ir;
long *ir_q1_gps;
const long *map_triplets) {
long gp1, num_ir;
long *ir_q1_gps;
ir_q1_gps = NULL;
num_ir = 0;
ir_q1_gps = NULL;
num_ir = 0;
if ((ir_q1_gps = (long*) malloc(sizeof(long) * bzgrid->size))
== NULL) {
warning_print("Memory could not be allocated.");
goto ret;
}
for (i = 0; i < bzgrid->size; i++) {
if (map_triplets[i] == i) {
ir_q1_gps[num_ir] = i;
num_ir++;
if ((ir_q1_gps = (long *)malloc(sizeof(long) * bzgrid->size)) == NULL) {
warning_print("Memory could not be allocated.");
goto ret;
}
}
if (bzgrid->type == 1) {
get_BZ_triplets_at_q_type1(triplets,
grid_point,
bzgrid,
ir_q1_gps,
num_ir);
} else {
get_BZ_triplets_at_q_type2(triplets,
grid_point,
bzgrid,
ir_q1_gps,
num_ir);
}
for (gp1 = 0; gp1 < bzgrid->size; gp1++) {
if (map_triplets[gp1] == gp1) {
ir_q1_gps[num_ir] = gp1;
num_ir++;
}
}
free(ir_q1_gps);
ir_q1_gps = NULL;
if (bzgrid->type == 1) {
get_BZ_triplets_at_q_type1(triplets, grid_point, bzgrid, ir_q1_gps,
num_ir);
} else {
get_BZ_triplets_at_q_type2(triplets, grid_point, bzgrid, ir_q1_gps,
num_ir);
}
free(ir_q1_gps);
ir_q1_gps = NULL;
ret:
return num_ir;
return num_ir;
}
static void get_BZ_triplets_at_q_type1(long (*triplets)[3],
const long grid_point,
const ConstBZGrid *bzgrid,
const long *ir_q1_gps,
const long num_ir)
{
long i, j, gp2, num_gp, num_bzgp, bz0, bz1, bz2;
long bzgp[3], G[3];
long bz_adrs0[3], bz_adrs1[3], bz_adrs2[3];
const long *gp_map;
const long (*bz_adrs)[3];
double d2, min_d2, tolerance;
double LQD_inv[3][3];
const long num_ir) {
long i, j, gp2, num_gp, num_bzgp, bz0, bz1, bz2;
long bzgp[3], G[3];
long bz_adrs0[3], bz_adrs1[3], bz_adrs2[3];
const long *gp_map;
const long(*bz_adrs)[3];
double d2, min_d2, tolerance;
double LQD_inv[3][3];
gp_map = bzgrid->gp_map;
bz_adrs = bzgrid->addresses;
get_LQD_inv(LQD_inv, bzgrid);
/* This tolerance is used to be consistent to BZ reduction in bzgrid. */
tolerance = bzg_get_tolerance_for_BZ_reduction((BZGrid*)bzgrid);
gp_map = bzgrid->gp_map;
bz_adrs = bzgrid->addresses;
get_LQD_inv(LQD_inv, bzgrid);
/* This tolerance is used to be consistent to BZ reduction in bzgrid. */
tolerance = bzg_get_tolerance_for_BZ_reduction((BZGrid *)bzgrid);
for (i = 0; i < 3; i++) {
bz_adrs0[i] = bz_adrs[grid_point][i];
}
num_gp = bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2];
num_bzgp = num_gp * 8;
for (i = 0; i < 3; i++) {
bz_adrs0[i] = bz_adrs[grid_point][i];
}
num_gp = bzgrid->D_diag[0] * bzgrid->D_diag[1] * bzgrid->D_diag[2];
num_bzgp = num_gp * 8;
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, gp2, bzgp, G, bz_adrs1, bz_adrs2, d2, min_d2, bz0, bz1, bz2)
#pragma omp parallel for private(j, gp2, bzgp, G, bz_adrs1, bz_adrs2, d2, \
min_d2, bz0, bz1, bz2)
#endif
for (i = 0; i < num_ir; i++) {
for (j = 0; j < 3; j++) {
bz_adrs1[j] = bz_adrs[ir_q1_gps[i]][j];
bz_adrs2[j] = - bz_adrs0[j] - bz_adrs1[j];
}
gp2 = grg_get_grid_index(bz_adrs2, bzgrid->D_diag);
/* Negative value is the signal to initialize min_d2 later. */
min_d2 = -1;
for (bz0 = 0;
bz0 < gp_map[num_bzgp + grid_point + 1]
- gp_map[num_bzgp + grid_point] + 1;
bz0++) {
if (bz0 == 0) {
bzgp[0] = grid_point;
} else {
bzgp[0] = num_gp + gp_map[num_bzgp + grid_point] + bz0 - 1;
}
for (bz1 = 0;
bz1 < gp_map[num_bzgp + ir_q1_gps[i] + 1]
- gp_map[num_bzgp + ir_q1_gps[i]] + 1;
bz1++) {
if (bz1 == 0) {
bzgp[1] = ir_q1_gps[i];
} else {
bzgp[1] = num_gp + gp_map[num_bzgp + ir_q1_gps[i]] + bz1 - 1;
for (i = 0; i < num_ir; i++) {
for (j = 0; j < 3; j++) {
bz_adrs1[j] = bz_adrs[ir_q1_gps[i]][j];
bz_adrs2[j] = -bz_adrs0[j] - bz_adrs1[j];
}
for (bz2 = 0;
bz2 < gp_map[num_bzgp + gp2 + 1] - gp_map[num_bzgp + gp2] + 1;
bz2++) {
if (bz2 == 0) {
bzgp[2] = gp2;
} else {
bzgp[2] = num_gp + gp_map[num_bzgp + gp2] + bz2 - 1;
}
for (j = 0; j < 3; j++) {
G[j] = bz_adrs[bzgp[0]][j] + bz_adrs[bzgp[1]][j] + bz_adrs[bzgp[2]][j];
}
if (G[0] == 0 && G[1] == 0 && G[2] == 0) {
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
gp2 = grg_get_grid_index(bz_adrs2, bzgrid->D_diag);
/* Negative value is the signal to initialize min_d2 later. */
min_d2 = -1;
for (bz0 = 0; bz0 < gp_map[num_bzgp + grid_point + 1] -
gp_map[num_bzgp + grid_point] + 1;
bz0++) {
if (bz0 == 0) {
bzgp[0] = grid_point;
} else {
bzgp[0] = num_gp + gp_map[num_bzgp + grid_point] + bz0 - 1;
}
goto found;
}
d2 = get_squared_distance(G, LQD_inv);
if (d2 < min_d2 - tolerance || min_d2 < 0) {
min_d2 = d2;
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
for (bz1 = 0; bz1 < gp_map[num_bzgp + ir_q1_gps[i] + 1] -
gp_map[num_bzgp + ir_q1_gps[i]] + 1;
bz1++) {
if (bz1 == 0) {
bzgp[1] = ir_q1_gps[i];
} else {
bzgp[1] =
num_gp + gp_map[num_bzgp + ir_q1_gps[i]] + bz1 - 1;
}
for (bz2 = 0; bz2 < gp_map[num_bzgp + gp2 + 1] -
gp_map[num_bzgp + gp2] + 1;
bz2++) {
if (bz2 == 0) {
bzgp[2] = gp2;
} else {
bzgp[2] = num_gp + gp_map[num_bzgp + gp2] + bz2 - 1;
}
for (j = 0; j < 3; j++) {
G[j] = bz_adrs[bzgp[0]][j] + bz_adrs[bzgp[1]][j] +
bz_adrs[bzgp[2]][j];
}
if (G[0] == 0 && G[1] == 0 && G[2] == 0) {
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
}
goto found;
}
d2 = get_squared_distance(G, LQD_inv);
if (d2 < min_d2 - tolerance || min_d2 < 0) {
min_d2 = d2;
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
}
}
}
}
}
}
}
found:;
}
found:
;
}
}
static void get_BZ_triplets_at_q_type2(long (*triplets)[3],
const long grid_point,
const ConstBZGrid *bzgrid,
const long *ir_q1_gps,
const long num_ir)
{
long i, j, gp0, gp2;
long bzgp[3], G[3];
long bz_adrs0[3], bz_adrs1[3], bz_adrs2[3];
const long *gp_map;
const long (*bz_adrs)[3];
double d2, min_d2, tolerance;
double LQD_inv[3][3];
const long num_ir) {
long i, j, gp0, gp2;
long bzgp[3], G[3];
long bz_adrs0[3], bz_adrs1[3], bz_adrs2[3];
const long *gp_map;
const long(*bz_adrs)[3];
double d2, min_d2, tolerance;
double LQD_inv[3][3];
gp_map = bzgrid->gp_map;
bz_adrs = bzgrid->addresses;
get_LQD_inv(LQD_inv, bzgrid);
/* This tolerance is used to be consistent to BZ reduction in bzgrid. */
tolerance = bzg_get_tolerance_for_BZ_reduction((BZGrid*)bzgrid);
gp_map = bzgrid->gp_map;
bz_adrs = bzgrid->addresses;
get_LQD_inv(LQD_inv, bzgrid);
/* This tolerance is used to be consistent to BZ reduction in bzgrid. */
tolerance = bzg_get_tolerance_for_BZ_reduction((BZGrid *)bzgrid);
for (i = 0; i < 3; i++) {
bz_adrs0[i] = bz_adrs[grid_point][i];
}
gp0 = grg_get_grid_index(bz_adrs0, bzgrid->D_diag);
for (i = 0; i < 3; i++) {
bz_adrs0[i] = bz_adrs[grid_point][i];
}
gp0 = grg_get_grid_index(bz_adrs0, bzgrid->D_diag);
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, gp2, bzgp, G, bz_adrs1, bz_adrs2, d2, min_d2)
#pragma omp parallel for private(j, gp2, bzgp, G, bz_adrs1, bz_adrs2, d2, \
min_d2)
#endif
for (i = 0; i < num_ir; i++) {
for (j = 0; j < 3; j++) {
bz_adrs1[j] = bz_adrs[gp_map[ir_q1_gps[i]]][j];
bz_adrs2[j] = - bz_adrs0[j] - bz_adrs1[j];
}
gp2 = grg_get_grid_index(bz_adrs2, bzgrid->D_diag);
/* Negative value is the signal to initialize min_d2 later. */
min_d2 = -1;
for (bzgp[0] = gp_map[gp0]; bzgp[0] < gp_map[gp0 + 1]; bzgp[0]++) {
for (bzgp[1] = gp_map[ir_q1_gps[i]];
bzgp[1] < gp_map[ir_q1_gps[i] + 1]; bzgp[1]++) {
for (bzgp[2] = gp_map[gp2]; bzgp[2] < gp_map[gp2 + 1]; bzgp[2]++) {
for (j = 0; j < 3; j++) {
G[j] = bz_adrs[bzgp[0]][j] + bz_adrs[bzgp[1]][j] + bz_adrs[bzgp[2]][j];
}
if (G[0] == 0 && G[1] == 0 && G[2] == 0) {
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
}
goto found;
}
d2 = get_squared_distance(G, LQD_inv);
if (d2 < min_d2 - tolerance || min_d2 < 0) {
min_d2 = d2;
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
}
}
for (i = 0; i < num_ir; i++) {
for (j = 0; j < 3; j++) {
bz_adrs1[j] = bz_adrs[gp_map[ir_q1_gps[i]]][j];
bz_adrs2[j] = -bz_adrs0[j] - bz_adrs1[j];
}
}
gp2 = grg_get_grid_index(bz_adrs2, bzgrid->D_diag);
/* Negative value is the signal to initialize min_d2 later. */
min_d2 = -1;
for (bzgp[0] = gp_map[gp0]; bzgp[0] < gp_map[gp0 + 1]; bzgp[0]++) {
for (bzgp[1] = gp_map[ir_q1_gps[i]];
bzgp[1] < gp_map[ir_q1_gps[i] + 1]; bzgp[1]++) {
for (bzgp[2] = gp_map[gp2]; bzgp[2] < gp_map[gp2 + 1];
bzgp[2]++) {
for (j = 0; j < 3; j++) {
G[j] = bz_adrs[bzgp[0]][j] + bz_adrs[bzgp[1]][j] +
bz_adrs[bzgp[2]][j];
}
if (G[0] == 0 && G[1] == 0 && G[2] == 0) {
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
}
goto found;
}
d2 = get_squared_distance(G, LQD_inv);
if (d2 < min_d2 - tolerance || min_d2 < 0) {
min_d2 = d2;
for (j = 0; j < 3; j++) {
triplets[i][j] = bzgp[j];
}
}
}
}
}
found:;
}
found:
;
}
}
static double get_squared_distance(const long G[3],
const double LQD_inv[3][3])
{
double d, d2;
long i;
const double LQD_inv[3][3]) {
double d, d2;
long i;
d2 = 0;
for (i = 0; i < 3; i++) {
d = LQD_inv[i][0] * G[0] + LQD_inv[i][1] * G[1] + LQD_inv[i][2] * G[2];
d2 += d * d;
}
d2 = 0;
for (i = 0; i < 3; i++) {
d = LQD_inv[i][0] * G[0] + LQD_inv[i][1] * G[1] + LQD_inv[i][2] * G[2];
d2 += d * d;
}
return d2;
return d2;
}
static void get_LQD_inv(double LQD_inv[3][3], const ConstBZGrid *bzgrid)
{
long i, j, k;
static void get_LQD_inv(double LQD_inv[3][3], const ConstBZGrid *bzgrid) {
long i, j, k;
/* LQD^-1 */
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
LQD_inv[i][k]
= bzgrid->reclat[i][j] * bzgrid->Q[j][k] / bzgrid->D_diag[k];
}
/* LQD^-1 */
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
LQD_inv[i][k] =
bzgrid->reclat[i][j] * bzgrid->Q[j][k] / bzgrid->D_diag[k];
}
}
}
}
}
/* Return NULL if failed */
static RotMats *get_reciprocal_point_group_with_q(const RotMats * rot_reciprocal,
static RotMats *get_reciprocal_point_group_with_q(const RotMats *rot_reciprocal,
const long D_diag[3],
const long grid_point)
{
long i, num_rot, gp_rot;
long *ir_rot;
long adrs[3], adrs_rot[3];
RotMats * rot_reciprocal_q;
const long grid_point) {
long i, num_rot, gp_rot;
long *ir_rot;
long adrs[3], adrs_rot[3];
RotMats *rot_reciprocal_q;
ir_rot = NULL;
rot_reciprocal_q = NULL;
num_rot = 0;
ir_rot = NULL;
rot_reciprocal_q = NULL;
num_rot = 0;
grg_get_grid_address_from_index(adrs, grid_point, D_diag);
grg_get_grid_address_from_index(adrs, grid_point, D_diag);
if ((ir_rot = (long*)malloc(sizeof(long) * rot_reciprocal->size)) == NULL) {
warning_print("Memory of ir_rot could not be allocated.");
return NULL;
}
for (i = 0; i < rot_reciprocal->size; i++) {
ir_rot[i] = -1;
}
for (i = 0; i < rot_reciprocal->size; i++) {
lagmat_multiply_matrix_vector_l3(adrs_rot, rot_reciprocal->mat[i], adrs);
gp_rot = grg_get_grid_index(adrs_rot, D_diag);
if (gp_rot == grid_point) {
ir_rot[num_rot] = i;
num_rot++;
if ((ir_rot = (long *)malloc(sizeof(long) * rot_reciprocal->size)) ==
NULL) {
warning_print("Memory of ir_rot could not be allocated.");
return NULL;
}
}
if ((rot_reciprocal_q = bzg_alloc_RotMats(num_rot)) != NULL) {
for (i = 0; i < num_rot; i++) {
lagmat_copy_matrix_l3(rot_reciprocal_q->mat[i],
rot_reciprocal->mat[ir_rot[i]]);
for (i = 0; i < rot_reciprocal->size; i++) {
ir_rot[i] = -1;
}
}
for (i = 0; i < rot_reciprocal->size; i++) {
lagmat_multiply_matrix_vector_l3(adrs_rot, rot_reciprocal->mat[i],
adrs);
gp_rot = grg_get_grid_index(adrs_rot, D_diag);
free(ir_rot);
ir_rot = NULL;
if (gp_rot == grid_point) {
ir_rot[num_rot] = i;
num_rot++;
}
}
return rot_reciprocal_q;
if ((rot_reciprocal_q = bzg_alloc_RotMats(num_rot)) != NULL) {
for (i = 0; i < num_rot; i++) {
lagmat_copy_matrix_l3(rot_reciprocal_q->mat[i],
rot_reciprocal->mat[ir_rot[i]]);
}
}
free(ir_rot);
ir_rot = NULL;
return rot_reciprocal_q;
}
static RotMats *get_reciprocal_point_group(const long (*rec_rotations_in)[3][3],
const long num_rot,
const long is_time_reversal,
const long is_transpose)
{
long i, num_rot_out;
long rec_rotations_out[48][3][3];
RotMats *rec_rotations;
const long is_transpose) {
long i, num_rot_out;
long rec_rotations_out[48][3][3];
RotMats *rec_rotations;
num_rot_out = grg_get_reciprocal_point_group(rec_rotations_out,
rec_rotations_in,
num_rot,
is_time_reversal,
is_transpose);
if (num_rot_out == 0) {
return NULL;
}
num_rot_out =
grg_get_reciprocal_point_group(rec_rotations_out, rec_rotations_in,
num_rot, is_time_reversal, is_transpose);
if (num_rot_out == 0) {
return NULL;
}
rec_rotations = bzg_alloc_RotMats(num_rot_out);
for (i = 0; i < num_rot_out; i++) {
lagmat_copy_matrix_l3(rec_rotations->mat[i], rec_rotations_out[i]);
}
rec_rotations = bzg_alloc_RotMats(num_rot_out);
for (i = 0; i < num_rot_out; i++) {
lagmat_copy_matrix_l3(rec_rotations->mat[i], rec_rotations_out[i]);
}
return rec_rotations;
return rec_rotations;
}

View File

@ -37,18 +37,15 @@
#ifndef __triplet_grid_H__
#define __triplet_grid_H__
#include "bzgrid.h"
#include "lagrid.h"
long tpk_get_ir_triplets_at_q(long *map_triplets,
long *map_q,
const long grid_point,
const long D_diag[3],
long tpk_get_ir_triplets_at_q(long *map_triplets, long *map_q,
const long grid_point, const long D_diag[3],
const long is_time_reversal,
const long (*rec_rotations_in)[3][3],
const long num_rot,
const long swappable);
long tpk_get_BZ_triplets_at_q(long (*triplets)[3],
const long grid_point,
const long num_rot, const long swappable);
long tpk_get_BZ_triplets_at_q(long (*triplets)[3], const long grid_point,
const ConstBZGrid *bzgrid,
const long *map_triplets);

View File

@ -32,241 +32,208 @@
/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
/* POSSIBILITY OF SUCH DAMAGE. */
#include "triplet_iw.h"
#include <math.h>
#include "grgrid.h"
#include "phonoc_utils.h"
#include "triplet.h"
#include "triplet_iw.h"
#include "tetrahedron_method.h"
#include "triplet.h"
static void set_freq_vertices(double freq_vertices[3][24][4],
const double *frequencies1,
const double *frequencies2,
const long vertices[2][24][4],
const long num_band1,
const long num_band2,
const long b1,
const long b2,
const long tp_type);
static long set_g(double g[3],
const double f0,
const double freq_vertices[3][24][4],
const long max_i);
const long num_band1, const long num_band2,
const long b1, const long b2, const long tp_type);
static long set_g(double g[3], const double f0,
const double freq_vertices[3][24][4], const long max_i);
static void get_triplet_tetrahedra_vertices(
long vertices[2][24][4],
const long tp_relative_grid_address[2][24][4][3],
const long triplet[3],
const ConstBZGrid *bzgrid);
static void
get_neighboring_grid_points_type1(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid);
static void
get_neighboring_grid_points_type2(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid);
long vertices[2][24][4], const long tp_relative_grid_address[2][24][4][3],
const long triplet[3], const ConstBZGrid *bzgrid);
static void get_neighboring_grid_points_type1(
long *neighboring_grid_points, const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address, const ConstBZGrid *bzgrid);
static void get_neighboring_grid_points_type2(
long *neighboring_grid_points, const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address, const ConstBZGrid *bzgrid);
void
tpi_get_integration_weight(double *iw,
char *iw_zero,
const double *frequency_points,
const long num_band0,
const long tp_relative_grid_address[2][24][4][3],
const long triplets[3],
const long num_triplets,
const ConstBZGrid *bzgrid,
const double *frequencies1,
const long num_band1,
const double *frequencies2,
const long num_band2,
const long tp_type,
const long openmp_per_bands)
{
long max_i, j, b1, b2, b12, num_band_prod, adrs_shift;
long vertices[2][24][4];
double g[3];
double freq_vertices[3][24][4];
void tpi_get_integration_weight(
double *iw, char *iw_zero, const double *frequency_points,
const long num_band0, const long tp_relative_grid_address[2][24][4][3],
const long triplets[3], const long num_triplets, const ConstBZGrid *bzgrid,
const double *frequencies1, const long num_band1,
const double *frequencies2, const long num_band2, const long tp_type,
const long openmp_per_bands) {
long max_i, j, b1, b2, b12, num_band_prod, adrs_shift;
long vertices[2][24][4];
double g[3];
double freq_vertices[3][24][4];
get_triplet_tetrahedra_vertices(vertices,
tp_relative_grid_address,
triplets,
bzgrid);
get_triplet_tetrahedra_vertices(vertices, tp_relative_grid_address,
triplets, bzgrid);
num_band_prod = num_triplets * num_band0 * num_band1 * num_band2;
num_band_prod = num_triplets * num_band0 * num_band1 * num_band2;
/* tp_type: Type of integration weights stored */
/* */
/* g0 -> \delta(f0 - (-f1 + f2)) */
/* g1 -> \delta(f0 - (f1 - f2)) */
/* g2 -> \delta(f0 - (f1 + f2)) */
/* */
/* tp_type = 2: (g[2], g[0] - g[1]) mainly for ph-ph */
/* tp_type = 3: (g[2], g[0] - g[1], g[0] + g[1] + g[2]) mainly for ph-ph */
/* tp_type = 4: (g[0]) mainly for el-ph phonon decay, */
/* f0: ph, f1: el_i, f2: el_f */
/* tp_type: Type of integration weights stored */
/* */
/* g0 -> \delta(f0 - (-f1 + f2)) */
/* g1 -> \delta(f0 - (f1 - f2)) */
/* g2 -> \delta(f0 - (f1 + f2)) */
/* */
/* tp_type = 2: (g[2], g[0] - g[1]) mainly for ph-ph */
/* tp_type = 3: (g[2], g[0] - g[1], g[0] + g[1] + g[2]) mainly for ph-ph */
/* tp_type = 4: (g[0]) mainly for el-ph phonon decay, */
/* f0: ph, f1: el_i, f2: el_f */
if ((tp_type == 2) || (tp_type == 3)) {
max_i = 3;
}
if (tp_type == 4) {
max_i = 1;
}
if ((tp_type == 2) || (tp_type == 3)) {
max_i = 3;
}
if (tp_type == 4) {
max_i = 1;
}
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, b1, b2, adrs_shift, g, freq_vertices) if (openmp_per_bands)
#pragma omp parallel for private(j, b1, b2, adrs_shift, g, \
freq_vertices) if (openmp_per_bands)
#endif
for (b12 = 0; b12 < num_band1 * num_band2; b12++) {
b1 = b12 / num_band2;
b2 = b12 % num_band2;
set_freq_vertices(freq_vertices, frequencies1, frequencies2,
vertices, num_band1, num_band2, b1, b2, tp_type);
for (j = 0; j < num_band0; j++) {
adrs_shift = j * num_band1 * num_band2 + b1 * num_band2 + b2;
iw_zero[adrs_shift] = set_g(g, frequency_points[j], freq_vertices, max_i);
if (tp_type == 2) {
iw[adrs_shift] = g[2];
adrs_shift += num_band_prod;
iw[adrs_shift] = g[0] - g[1];
}
if (tp_type == 3) {
iw[adrs_shift] = g[2];
adrs_shift += num_band_prod;
iw[adrs_shift] = g[0] - g[1];
adrs_shift += num_band_prod;
iw[adrs_shift] = g[0] + g[1] + g[2];
}
if (tp_type == 4) {
iw[adrs_shift] = g[0];
}
for (b12 = 0; b12 < num_band1 * num_band2; b12++) {
b1 = b12 / num_band2;
b2 = b12 % num_band2;
set_freq_vertices(freq_vertices, frequencies1, frequencies2, vertices,
num_band1, num_band2, b1, b2, tp_type);
for (j = 0; j < num_band0; j++) {
adrs_shift = j * num_band1 * num_band2 + b1 * num_band2 + b2;
iw_zero[adrs_shift] =
set_g(g, frequency_points[j], freq_vertices, max_i);
if (tp_type == 2) {
iw[adrs_shift] = g[2];
adrs_shift += num_band_prod;
iw[adrs_shift] = g[0] - g[1];
}
if (tp_type == 3) {
iw[adrs_shift] = g[2];
adrs_shift += num_band_prod;
iw[adrs_shift] = g[0] - g[1];
adrs_shift += num_band_prod;
iw[adrs_shift] = g[0] + g[1] + g[2];
}
if (tp_type == 4) {
iw[adrs_shift] = g[0];
}
}
}
}
}
void tpi_get_integration_weight_with_sigma(double *iw,
char *iw_zero,
const double sigma,
const double cutoff,
const double *frequency_points,
const long num_band0,
const long triplet[3],
const long const_adrs_shift,
const double *frequencies,
const long num_band,
const long tp_type,
const long openmp_per_bands)
{
long j, b12, b1, b2, adrs_shift;
double f0, f1, f2, g0, g1, g2;
void tpi_get_integration_weight_with_sigma(
double *iw, char *iw_zero, const double sigma, const double cutoff,
const double *frequency_points, const long num_band0, const long triplet[3],
const long const_adrs_shift, const double *frequencies, const long num_band,
const long tp_type, const long openmp_per_bands) {
long j, b12, b1, b2, adrs_shift;
double f0, f1, f2, g0, g1, g2;
#ifdef PHPYOPENMP
#pragma omp parallel for private(j, b1, b2, f0, f1, f2, g0, g1, g2, adrs_shift) if (openmp_per_bands)
#pragma omp parallel for private(j, b1, b2, f0, f1, f2, g0, g1, g2, \
adrs_shift) if (openmp_per_bands)
#endif
for (b12 = 0; b12 < num_band * num_band; b12++) {
b1 = b12 / num_band;
b2 = b12 % num_band;
f1 = frequencies[triplet[1] * num_band + b1];
f2 = frequencies[triplet[2] * num_band + b2];
for (j = 0; j < num_band0; j++) {
f0 = frequency_points[j];
adrs_shift = j * num_band * num_band + b1 * num_band + b2;
for (b12 = 0; b12 < num_band * num_band; b12++) {
b1 = b12 / num_band;
b2 = b12 % num_band;
f1 = frequencies[triplet[1] * num_band + b1];
f2 = frequencies[triplet[2] * num_band + b2];
for (j = 0; j < num_band0; j++) {
f0 = frequency_points[j];
adrs_shift = j * num_band * num_band + b1 * num_band + b2;
if ((tp_type == 2) || (tp_type == 3)) {
if (cutoff > 0 &&
fabs(f0 + f1 - f2) > cutoff &&
fabs(f0 - f1 + f2) > cutoff &&
fabs(f0 - f1 - f2) > cutoff) {
iw_zero[adrs_shift] = 1;
g0 = 0;
g1 = 0;
g2 = 0;
} else {
iw_zero[adrs_shift] = 0;
g0 = phonoc_gaussian(f0 + f1 - f2, sigma);
g1 = phonoc_gaussian(f0 - f1 + f2, sigma);
g2 = phonoc_gaussian(f0 - f1 - f2, sigma);
if ((tp_type == 2) || (tp_type == 3)) {
if (cutoff > 0 && fabs(f0 + f1 - f2) > cutoff &&
fabs(f0 - f1 + f2) > cutoff &&
fabs(f0 - f1 - f2) > cutoff) {
iw_zero[adrs_shift] = 1;
g0 = 0;
g1 = 0;
g2 = 0;
} else {
iw_zero[adrs_shift] = 0;
g0 = phonoc_gaussian(f0 + f1 - f2, sigma);
g1 = phonoc_gaussian(f0 - f1 + f2, sigma);
g2 = phonoc_gaussian(f0 - f1 - f2, sigma);
}
if (tp_type == 2) {
iw[adrs_shift] = g2;
adrs_shift += const_adrs_shift;
iw[adrs_shift] = g0 - g1;
}
if (tp_type == 3) {
iw[adrs_shift] = g2;
adrs_shift += const_adrs_shift;
iw[adrs_shift] = g0 - g1;
adrs_shift += const_adrs_shift;
iw[adrs_shift] = g0 + g1 + g2;
}
}
if (tp_type == 4) {
if (cutoff > 0 && fabs(f0 + f1 - f2) > cutoff) {
iw_zero[adrs_shift] = 1;
iw[adrs_shift] = 0;
} else {
iw_zero[adrs_shift] = 0;
iw[adrs_shift] = phonoc_gaussian(f0 + f1 - f2, sigma);
}
}
}
if (tp_type == 2) {
iw[adrs_shift] = g2;
adrs_shift += const_adrs_shift;
iw[adrs_shift] = g0 - g1;
}
if (tp_type == 3) {
iw[adrs_shift] = g2;
adrs_shift += const_adrs_shift;
iw[adrs_shift] = g0 - g1;
adrs_shift += const_adrs_shift;
iw[adrs_shift] = g0 + g1 + g2;
}
}
if (tp_type == 4) {
if (cutoff > 0 && fabs(f0 + f1 - f2) > cutoff) {
iw_zero[adrs_shift] = 1;
iw[adrs_shift] = 0;
} else {
iw_zero[adrs_shift] = 0;
iw[adrs_shift] = phonoc_gaussian(f0 + f1 - f2, sigma);
}
}
}
}
}
void
tpi_get_neighboring_grid_points(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid)
{
if (bzgrid->type == 1) {
get_neighboring_grid_points_type1(neighboring_grid_points,
grid_point,
relative_grid_address,
num_relative_grid_address,
bzgrid);
} else {
get_neighboring_grid_points_type2(neighboring_grid_points,
grid_point,
relative_grid_address,
num_relative_grid_address,
bzgrid);
}
void tpi_get_neighboring_grid_points(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid) {
if (bzgrid->type == 1) {
get_neighboring_grid_points_type1(neighboring_grid_points, grid_point,
relative_grid_address,
num_relative_grid_address, bzgrid);
} else {
get_neighboring_grid_points_type2(neighboring_grid_points, grid_point,
relative_grid_address,
num_relative_grid_address, bzgrid);
}
}
static void set_freq_vertices(double freq_vertices[3][24][4],
const double *frequencies1,
const double *frequencies2,
const long vertices[2][24][4],
const long num_band1,
const long num_band2,
const long b1,
const long b2,
const long tp_type)
{
long i, j;
double f1, f2;
const long num_band1, const long num_band2,
const long b1, const long b2,
const long tp_type) {
long i, j;
double f1, f2;
for (i = 0; i < 24; i++) {
for (j = 0; j < 4; j++) {
f1 = frequencies1[vertices[0][i][j] * num_band1 + b1];
f2 = frequencies2[vertices[1][i][j] * num_band2 + b2];
if ((tp_type == 2) || (tp_type == 3)) {
if (f1 < 0) {f1 = 0;}
if (f2 < 0) {f2 = 0;}
freq_vertices[0][i][j] = -f1 + f2;
freq_vertices[1][i][j] = f1 - f2;
freq_vertices[2][i][j] = f1 + f2;
} else {
freq_vertices[0][i][j] = -f1 + f2;
}
for (i = 0; i < 24; i++) {
for (j = 0; j < 4; j++) {
f1 = frequencies1[vertices[0][i][j] * num_band1 + b1];
f2 = frequencies2[vertices[1][i][j] * num_band2 + b2];
if ((tp_type == 2) || (tp_type == 3)) {
if (f1 < 0) {
f1 = 0;
}
if (f2 < 0) {
f2 = 0;
}
freq_vertices[0][i][j] = -f1 + f2;
freq_vertices[1][i][j] = f1 - f2;
freq_vertices[2][i][j] = f1 + f2;
} else {
freq_vertices[0][i][j] = -f1 + f2;
}
}
}
}
}
/* Integration weight g is calculated. */
@ -278,100 +245,87 @@ static void set_freq_vertices(double freq_vertices[3][24][4],
/* iw_zero=1 information can be used to omit to compute particles */
/* interaction strength that is often heaviest part in throughout */
/* calculation. */
static long set_g(double g[3],
const double f0,
const double freq_vertices[3][24][4],
const long max_i)
{
long i, iw_zero;
static long set_g(double g[3], const double f0,
const double freq_vertices[3][24][4], const long max_i) {
long i, iw_zero;
iw_zero = 1;
iw_zero = 1;
for (i = 0; i < max_i; i++) {
if (thm_in_tetrahedra(f0, freq_vertices[i])) {
g[i] = thm_get_integration_weight(f0, freq_vertices[i], 'I');
iw_zero = 0;
} else {
g[i] = 0;
}
}
return iw_zero;
}
static void get_triplet_tetrahedra_vertices(long vertices[2][24][4],
const long tp_relative_grid_address[2][24][4][3],
const long triplet[3],
const ConstBZGrid *bzgrid)
{
long i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 24; j++) {
tpi_get_neighboring_grid_points(vertices[i][j],
triplet[i + 1],
tp_relative_grid_address[i][j],
4,
bzgrid);
}
}
}
static void
get_neighboring_grid_points_type1(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid)
{
long bzmesh[3], bz_address[3];
long i, j, bz_gp, prod_bz_mesh;
for (i = 0; i < 3; i++) {
bzmesh[i] = bzgrid->D_diag[i] * 2;
}
prod_bz_mesh = bzmesh[0] * bzmesh[1] * bzmesh[2];
for (i = 0; i < num_relative_grid_address; i++) {
for (j = 0; j < 3; j++) {
bz_address[j] = bzgrid->addresses[grid_point][j]
+ relative_grid_address[i][j];
}
bz_gp = bzgrid->gp_map[grg_get_grid_index(bz_address, bzmesh)];
if (bz_gp == prod_bz_mesh) {
neighboring_grid_points[i] =
grg_get_grid_index(bz_address, bzgrid->D_diag);
} else {
neighboring_grid_points[i] = bz_gp;
}
}
}
static void
get_neighboring_grid_points_type2(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid)
{
long bz_address[3];
long i, j, gp;
for (i = 0; i < num_relative_grid_address; i++) {
for (j = 0; j < 3; j++) {
bz_address[j] = bzgrid->addresses[grid_point][j]
+ relative_grid_address[i][j];
}
gp = grg_get_grid_index(bz_address, bzgrid->D_diag);
neighboring_grid_points[i] = bzgrid->gp_map[gp];
if (bzgrid->gp_map[gp + 1] - bzgrid->gp_map[gp] > 1) {
for (j = bzgrid->gp_map[gp]; j < bzgrid->gp_map[gp + 1]; j++) {
if (bz_address[0] == bzgrid->addresses[j][0]
&& bz_address[1] == bzgrid->addresses[j][1]
&& bz_address[2] == bzgrid->addresses[j][2]) {
neighboring_grid_points[i] = j;
break;
for (i = 0; i < max_i; i++) {
if (thm_in_tetrahedra(f0, freq_vertices[i])) {
g[i] = thm_get_integration_weight(f0, freq_vertices[i], 'I');
iw_zero = 0;
} else {
g[i] = 0;
}
}
return iw_zero;
}
static void get_triplet_tetrahedra_vertices(
long vertices[2][24][4], const long tp_relative_grid_address[2][24][4][3],
const long triplet[3], const ConstBZGrid *bzgrid) {
long i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 24; j++) {
tpi_get_neighboring_grid_points(vertices[i][j], triplet[i + 1],
tp_relative_grid_address[i][j], 4,
bzgrid);
}
}
}
static void get_neighboring_grid_points_type1(
long *neighboring_grid_points, const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address, const ConstBZGrid *bzgrid) {
long bzmesh[3], bz_address[3];
long i, j, bz_gp, prod_bz_mesh;
for (i = 0; i < 3; i++) {
bzmesh[i] = bzgrid->D_diag[i] * 2;
}
prod_bz_mesh = bzmesh[0] * bzmesh[1] * bzmesh[2];
for (i = 0; i < num_relative_grid_address; i++) {
for (j = 0; j < 3; j++) {
bz_address[j] =
bzgrid->addresses[grid_point][j] + relative_grid_address[i][j];
}
bz_gp = bzgrid->gp_map[grg_get_grid_index(bz_address, bzmesh)];
if (bz_gp == prod_bz_mesh) {
neighboring_grid_points[i] =
grg_get_grid_index(bz_address, bzgrid->D_diag);
} else {
neighboring_grid_points[i] = bz_gp;
}
}
}
static void get_neighboring_grid_points_type2(
long *neighboring_grid_points, const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address, const ConstBZGrid *bzgrid) {
long bz_address[3];
long i, j, gp;
for (i = 0; i < num_relative_grid_address; i++) {
for (j = 0; j < 3; j++) {
bz_address[j] =
bzgrid->addresses[grid_point][j] + relative_grid_address[i][j];
}
gp = grg_get_grid_index(bz_address, bzgrid->D_diag);
neighboring_grid_points[i] = bzgrid->gp_map[gp];
if (bzgrid->gp_map[gp + 1] - bzgrid->gp_map[gp] > 1) {
for (j = bzgrid->gp_map[gp]; j < bzgrid->gp_map[gp + 1]; j++) {
if (bz_address[0] == bzgrid->addresses[j][0] &&
bz_address[1] == bzgrid->addresses[j][1] &&
bz_address[2] == bzgrid->addresses[j][2]) {
neighboring_grid_points[i] = j;
break;
}
}
}
}
}
}
}

View File

@ -35,38 +35,24 @@
#ifndef __triplet_iw_H__
#define __triplet_iw_H__
void
tpi_get_integration_weight(double *iw,
char *iw_zero,
const double *frequency_points,
const long num_band0,
const long tp_relative_grid_address[2][24][4][3],
const long triplets[3],
const long num_triplets,
const ConstBZGrid *bzgrid,
const double *frequencies1,
const long num_band1,
const double *frequencies2,
const long num_band2,
const long tp_type,
const long openmp_per_bands);
void tpi_get_integration_weight_with_sigma(double *iw,
char *iw_zero,
const double sigma,
const double cutoff,
const double *frequency_points,
const long num_band0,
const long triplet[3],
const long const_adrs_shift,
const double *frequencies,
const long num_band,
const long tp_type,
const long openmp_per_bands);
void
tpi_get_neighboring_grid_points(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid);
#include "bzgrid.h"
void tpi_get_integration_weight(
double *iw, char *iw_zero, const double *frequency_points,
const long num_band0, const long tp_relative_grid_address[2][24][4][3],
const long triplets[3], const long num_triplets, const ConstBZGrid *bzgrid,
const double *frequencies1, const long num_band1,
const double *frequencies2, const long num_band2, const long tp_type,
const long openmp_per_bands);
void tpi_get_integration_weight_with_sigma(
double *iw, char *iw_zero, const double sigma, const double cutoff,
const double *frequency_points, const long num_band0, const long triplet[3],
const long const_adrs_shift, const double *frequencies, const long num_band,
const long tp_type, const long openmp_per_bands);
void tpi_get_neighboring_grid_points(long *neighboring_grid_points,
const long grid_point,
const long (*relative_grid_address)[3],
const long num_relative_grid_address,
const ConstBZGrid *bzgrid);
#endif

View File

@ -26,27 +26,27 @@ build:
requirements:
build:
- python>=3.5
- python>=3.6
- pip
- numpy>=1.11
- scipy
- matplotlib-base
- matplotlib-base>=2.0.0
- pyyaml
- h5py
- phonopy>=2.11,<2.12
- phonopy>=2.12,<2.13
- openblas
- libgfortran
- spglib
run:
- python>=3.5
- python>=3.6
- pip
- numpy>=1.11
- scipy
- matplotlib-base
- matplotlib-base>=2.0.0
- pyyaml
- h5py
- phonopy>=2.10,<2.11
- phonopy>=2.12,<2.13
- openblas
- libgfortran
- spglib

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -1,20 +1,34 @@
(changelog)=
# Change Log
## Nov-3-2021: Version 2.1.0
- Fix of a critical bung in the direct solution. See the detail as commit log of
[54d4ddab](https://github.com/phonopy/phono3py/commit/54d4ddab6f3fbf9435bdfe8b27757be1d5c4ebf6).
- Aiming modernizing phono3py code, required python version and package versions
were changed to
- Python >= 3.6
- numpy >= 1.11
- matplotlib >= 2.0
- For developers, flake8, black, pydocstyle, and isort were introduced. See
`REAEME.md` and `.pre-commit-config.yaml`.
## Jul-22-2021: Version 2.0.0
This is a major version release. There are some backword-incompatible changes.
1. Grid point indexing system to address grid points of q-points
is changed.
2. Most of integer array data type is changed to
`dtype='int_'` from `dtype='intc'`.
1. Grid point indexing system to address grid points of q-points is changed.
2. Array data types of most of the integer arrays are changed to `dtype='int_'`
from `dtype='intc'`.
3. Python 3.5 or later is required.
To emulate the version 1.x behaviour in `phono3py` command,
try `--v1` option. To emurate the version 1.x behaviour in API,
specify `store_dense_gp_map=False`
and `store_dense_svecs=False` in instatiation of `Phono3py` class
or phon3py loader.
To emulate the version 1.x behaviour in `phono3py` command, try `--v1` option.
To emurate the version 1.x behaviour in API, specify `store_dense_gp_map=False`
and `store_dense_svecs=False` in instatiation of `Phono3py` class or phon3py
loader.
## Mar-17-2021: Version 1.22.3
@ -36,21 +50,19 @@ or phon3py loader.
## Sep-30-2020: Version 1.21.0
- Maintenance release to follow the change of phonopy at v2.8.1
- Improvements of phono3py loader (`phono3py.load`), `phono3py-load`
command, API, and `phono3py_disp.yaml`.
- Harmonic phonon calculation on mesh was multithreaded. This is
effective when using very dense mesh with non-analytical term
correction (probably rare case).
- Real and imaginary parts of self energy and spectral function of
bubble diagram at API level
- Improvements of phono3py loader (`phono3py.load`), `phono3py-load` command,
API, and `phono3py_disp.yaml`.
- Harmonic phonon calculation on mesh was multithreaded. This is effective when
using very dense mesh with non-analytical term correction (probably rare
case).
- Real and imaginary parts of self energy and spectral function of bubble
diagram at API level
## Mar-3-2020: Version 1.20.0
- `phono3py_disp.yaml` is made when creating displacements in
addition to `disp_fc3.yaml` and
`disp_fc2.yaml`. `phono3py_disp.yaml` will be used instead of
`disp_fc3.yaml` and `disp_fc2.yaml` in the future major release
(v2.0).
- `phono3py_disp.yaml` is made when creating displacements in addition to
`disp_fc3.yaml` and `disp_fc2.yaml`. `phono3py_disp.yaml` will be used instead
of `disp_fc3.yaml` and `disp_fc2.yaml` in the future major release (v2.0).
## Mar-3-2020: Version 1.19.1
@ -59,15 +71,14 @@ or phon3py loader.
## Mar-2-2020: Version 1.19.0
- Improvements of phono3py loader and API.
- Improvement of interfaces to calculators. Now it is expected to be
much easier to implement calculator interface if it exists in
phonopy.
- Improvement of interfaces to calculators. Now it is expected to be much easier
to implement calculator interface if it exists in phonopy.
- Fixed dependency to phonopy v2.6.0.
## Dec-22-2019: Version 1.18.2
- Initial version of phono3py loader (`phono3py.load`) was
implemented. See docstring of `phono3py.load`.
- Initial version of phono3py loader (`phono3py.load`) was implemented. See
docstring of `phono3py.load`.
## Oct-17-2019: Version 1.18.1
@ -79,59 +90,51 @@ or phon3py loader.
## Apr-18-2019: Version 1.17.0
- `--cfz` option was made to subtract residual forces. See
{ref}`cfz_option`.
- `--cutoff-pair` was made to override the cutoff pair distance
written in `disp_fc3.yaml` when using on calculating force
constants. This is useful when checking cutoff distance
dependency. So the use case of having fully computed `FORCES_FC3`
is assumed.
- TURBOMOLE interface is provided by Antti Karttunen
(`--turbomole`).
- Compatibility of `fc2.hdf5` and `force_constants.hdf5` was
improved for all calculators to store physical unit information in
the hdf5 file. See {ref}`file_format_compatibility`.
- `--cfz` option was made to subtract residual forces. See {ref}`cfz_option`.
- `--cutoff-pair` was made to override the cutoff pair distance written in
`disp_fc3.yaml` when using on calculating force constants. This is useful when
checking cutoff distance dependency. So the use case of having fully computed
`FORCES_FC3` is assumed.
- TURBOMOLE interface is provided by Antti Karttunen (`--turbomole`).
- Compatibility of `fc2.hdf5` and `force_constants.hdf5` was improved for all
calculators to store physical unit information in the hdf5 file. See
{ref}`file_format_compatibility`.
## Mar-24-2019: Version 1.16.0
- Bug fixes and catching up the updates of phonopy.
- Most of hdf5 output files are compressed by `gzip` as
default. This compression can be set off, see
{ref}`hdf5_compression_option`.
- (Experimental) `phono3py` command accepts `phono3py.yaml` type
file as an input crystal structure by `-c` option. When `DIM`
and any structure file are not given, `phono3py_disp.yaml`
(primary) or `phono3py.yaml` (secondary) is searched in the current
directory. Then `phono3py.yaml` type file is used as the input.
By this, semi-automatic phono3py mode is invocked, which acts as
- Most of hdf5 output files are compressed by `gzip` as default. This
compression can be set off, see {ref}`hdf5_compression_option`.
- (Experimental) `phono3py` command accepts `phono3py.yaml` type file as an
input crystal structure by `-c` option. When `DIM` and any structure file are
not given, `phono3py_disp.yaml` (primary) or `phono3py.yaml` (secondary) is
searched in the current directory. Then `phono3py.yaml` type file is used as
the input. By this, semi-automatic phono3py mode is invocked, which acts as
1. `supercell_matrix` corresponding to `DIM` in the
`phono3py.yaml` type file is used if it exists.
2. `phonon_supercell_matrix` corresponding to `DIM_FC2` in the
`phono3py.yaml` type file is used if it exists.
3. `primitive_matrix` in the `phono3py.yaml` type file
is used if it exists. Otherwise, set `PRIMITIVE_AXES = AUTO`
when `PRIMITIVE_AXES` is not given.
4. NAC params are read (`NAC = .TRUE.`) if NAC params are
contained (primary) in the `phono3py.yaml` type file or if
`BORN` file exists in the current directory (secondary).
1. `supercell_matrix` corresponding to `DIM` in the `phono3py.yaml` type file
is used if it exists.
2. `phonon_supercell_matrix` corresponding to `DIM_FC2` in the `phono3py.yaml`
type file is used if it exists.
3. `primitive_matrix` in the `phono3py.yaml` type file is used if it exists.
Otherwise, set `PRIMITIVE_AXES = AUTO` when `PRIMITIVE_AXES` is not given.
4. NAC params are read (`NAC = .TRUE.`) if NAC params are contained (primary)
in the `phono3py.yaml` type file or if `BORN` file exists in the current
directory (secondary).
## Nov-22-2018: version 1.14.3
- Update to work with phonopy v1.14.2.
- Ph-ph interaction can be read (`--read-pp`) and write
(`--write-pp`) in RTA thermal conductivity calculation, too. Mind
that the data stored are different with and without
`--full-pp`. Wihtout `--full-pp` the data are stored in
complicated way to save data side, so it is not considered readable
by usual users.
- Ph-ph interaction can be read (`--read-pp`) and write (`--write-pp`) in RTA
thermal conductivity calculation, too. Mind that the data stored are different
with and without `--full-pp`. Wihtout `--full-pp` the data are stored in
complicated way to save data side, so it is not considered readable by usual
users.
## June-20-2018: version 1.13.3
- `--lw` (linewidth) option was removed. Use `--br` option and
find 2*gamma values as linewidths in `kappa-xxx.hdf5` file.
- Documentation of `--lbte` option is available at
{ref}`direct_solution`.
- `--lw` (linewidth) option was removed. Use `--br` option and find 2\*gamma
values as linewidths in `kappa-xxx.hdf5` file.
- Documentation of `--lbte` option is available at {ref}`direct_solution`.
- This version is dependent on phonopy>=1.13.2.
## May-17-2018: version 1.13.1
@ -140,58 +143,50 @@ or phon3py loader.
## Mar-16-2018: version 1.12.9
- Definition of `mode_kappa` values in output hdf5 file is
changed. Previously they were divided by number of grid points, but
now not. Therefore users who compute `kappa` from `mode_kappa`
need to be careful about this change. This does not affect to
`phono3py-kaccum` results.
- Definition of `mode_kappa` values in output hdf5 file is changed. Previously
they were divided by number of grid points, but now not. Therefore users who
compute `kappa` from `mode_kappa` need to be careful about this change. This
does not affect to `phono3py-kaccum` results.
## Feb-1-2018: version 1.12.7
- `--tsym` option is removed. Now with `--sym-fc3r` and
`--sym-fc2` options,
- `--tsym` option is removed. Now with `--sym-fc3r` and `--sym-fc2` options,
translational invariance symmetry is also applied.
- `--sym-fc` option is added. This is just an alias to specify both
`--sym-fc3r` and `--sym-fc2` together.
- Documentation on `--write-phonon` and `--read-phonon` options is
written. These options are used to save harmonic phonon infromation
on strage.
- `--sym-fc` option is added. This is just an alias to specify both `--sym-fc3r`
and `--sym-fc2` together.
- Documentation on `--write-phonon` and `--read-phonon` options is written.
These options are used to save harmonic phonon infromation on strage.
## Nov-22-2017: version 1.12.5
- Bug fix of RTA thermal conductivity. This bug exists from version
1.10.11.18 (git e40cd059). This bug exhibits when all the following
conditions are met:
- Bug fix of RTA thermal conductivity. This bug exists from version 1.10.11.18
(git e40cd059). This bug exhibits when all the following conditions are met:
1. RTA thermal conductivity calculation.
2. Tetrahedron method for Brillouin zone integration is used.
3. Number of triplets is smaller than number of bands at each grid point.
4. Without using `--full-pp`.
(3) happens when the primitive cell is relatively large. Number of triplets
can be shown using `--stp` option. A race condition of OpenMP multithreading
is the source of the bug. Therefore, if it occurs, the same calculation comes
up with the different thermal conductivity value in every run time, for whcih
it behaves like randomly.
(3) happens when the primitive cell is relatively large. Number of
triplets can be shown using `--stp` option. A race condition of
OpenMP multithreading is the source of the bug. Therefore, if it
occurs, the same calculation comes up with the different thermal
conductivity value in every run time, for whcih it behaves like
randomly.
- RTA thermal conductivity with smearing method (`--sigma`) is made
to run with smaller memory consumption as similar as tetrahedron
method (`--thm`).
- RTA thermal conductivity with smearing method (`--sigma`) is made to run with
smaller memory consumption as similar as tetrahedron method (`--thm`).
## Nov-17-2017: version 1.12.3
- Command option parser of the phonopy tools is replaced from
`optparse` to `argparse`.
- Command option parser of the phonopy tools is replaced from `optparse` to
`argparse`.
- The filenames used with these options were the positional arguments
previously. Now they are the command-line arguments, i.e., filenames
have to be put just after the option name like `-f vasprun.xml-001
vasprun.xml-002 ...`.
- The names of auxiliary tools (`kdeplot` and `kaccum`) are
changed, for which the prefix phono3py- is added to the old names to
avoid accidental conflict with other script names already existing
under bin directory.
previously. Now they are the command-line arguments, i.e., filenames have to
be put just after the option name like
`-f vasprun.xml-001 vasprun.xml-002 ...`.
- The names of auxiliary tools (`kdeplot` and `kaccum`) are changed, for which
the prefix phono3py- is added to the old names to avoid accidental conflict
with other script names already existing under bin directory.
- {ref}`sigma_cutoff_option` option was created.
## Jun-18-2017: version 1.11.13
@ -203,12 +198,11 @@ or phon3py loader.
## Mar-31-2017: version 1.11.11
- Abinit code interface is implemented and now under the testing.
- Reduction of memory usage in RTA thermal conductivity
calculation. This is especially effective for larger unit cell
case. Currently combinations with --full_pp, --write_gamma_detail,
and --simga(smearing method) are not supported for this. Performance
tuning is under going. In some case, computation can be slower than
the previous versions.
- Reduction of memory usage in RTA thermal conductivity calculation. This is
especially effective for larger unit cell case. Currently combinations with
--full_pp, --write_gamma_detail, and --simga(smearing method) are not
supported for this. Performance tuning is under going. In some case,
computation can be slower than the previous versions.
## Feb-9-2017: version 1.11.9
@ -217,8 +211,8 @@ or phon3py loader.
## Dec-14-2016: version 1.11.7
- This is a maintenance release. This version must be used with
phonopy-1.11.6 or later.
- This is a maintenance release. This version must be used with phonopy-1.11.6
or later.
## Nov-27-2016: version 1.11.5
@ -232,45 +226,42 @@ or phon3py loader.
## Apr-16-2016: version 1.10.7
- API example is prepared and it is found in `Si` example. No
doucment yet.
- API example is prepared and it is found in `Si` example. No doucment yet.
- Si pwscf example was placed in `example-phono3py` directory.
- User interface bug fix.
## Mar-15-2016: version 1.10.5
- Numbering way of phono3py version was just changed (No big updates
were made against previous version.) The number is given based on
the phonopy version. For example, the harmonic part of
phono3py-1.10.5 is based on the code close to phonopy-1.10.4.
- Numbering way of phono3py version was just changed (No big updates were made
against previous version.) The number is given based on the phonopy version.
For example, the harmonic part of phono3py-1.10.5 is based on the code close
to phonopy-1.10.4.
- Python3 support
- For the RTA thermal conductivity calculation mode with using the
linear tetrahedron method, only necessary part of phonon-phonon
interaction strengh among phonons. This improves lifetime
calculation performance, but as the drawback, averaged ph-ph
interaction strength can not be given. See {ref}`full_pp_option`.
- For the RTA thermal conductivity calculation mode with using the linear
tetrahedron method, only necessary part of phonon-phonon interaction strengh
among phonons. This improves lifetime calculation performance, but as the
drawback, averaged ph-ph interaction strength can not be given. See
{ref}`full_pp_option`.
- Pwscf interface ({ref}`calculator_interfaces`)
## Oct-10-2015: version 0.9.14
- Computational performance tuning for phonon-phonon interaction
strength calculation was made by Jonathan Skelton. Depending on
systems, but 10-20% performance improvement may be possible.
- `--stp` option is created to show numbers of q-point triplets to
be calculated. See {ref}`command_options`.
- `--write_gamma` and `--read_gamma` support using with `--bi`
option. Therefore a thermal conductivity calculation can be
distributed over band index, too. This may be useful for the system
whose unit cell is large.
- Computational performance tuning for phonon-phonon interaction strength
calculation was made by Jonathan Skelton. Depending on systems, but 10-20%
performance improvement may be possible.
- `--stp` option is created to show numbers of q-point triplets to be
calculated. See {ref}`command_options`.
- `--write_gamma` and `--read_gamma` support using with `--bi` option. Therefore
a thermal conductivity calculation can be distributed over band index, too.
This may be useful for the system whose unit cell is large.
## Sep-26-2015: version 0.9.13
- Changed so that `--wgp` option writes `grid_address-mxxx.hdf5`
instead of `grid_address-mxxx.dat`.
- Changed so that `--wgp` option writes `grid_address-mxxx.hdf5` instead of
`grid_address-mxxx.dat`.
- `--write_detailed_gamma` is implemented. See {ref}`command_options`.
- When running without setting `--thm` and `--sigma` options,
linear tetrahedron method corresponding to `--thm` is used as the
default behavior.
- When running without setting `--thm` and `--sigma` options, linear tetrahedron
method corresponding to `--thm` is used as the default behavior.
- `--ise` options is created.
## Aug-12-2015: version 0.9.12
@ -284,47 +275,44 @@ or phon3py loader.
## Jun-17-2015: version 0.9.10
- Fix bug in `kaccum`. When using with `--pa` option, irreducible
q-points were incorrectly indexed.
- `gaccum` is implemented. `gaccum` is very similar to `kaccum`,
but for $\Gamma_\lambda(\omega_\lambda)$.
- Fix bug in `kaccum`. When using with `--pa` option, irreducible q-points were
incorrectly indexed.
- `gaccum` is implemented. `gaccum` is very similar to `kaccum`, but for
$\Gamma_\lambda(\omega_\lambda)$.
- spglib update.
## Changes in version 0.9.7
- The definition of MSPP is modified so as to be averaged ph-ph
interaction defined as $P_{\mathbf{q}j}$ in the arXiv
manuscript. The key in the kappa hdf5 file is changed from `mspp`
to `ave_pp`. The physical unit of $P_{\mathbf{q}j}$ is set
to $\text{eV}^2$.
- The definition of MSPP is modified so as to be averaged ph-ph interaction
defined as $P_{\mathbf{q}j}$ in the arXiv manuscript. The key in the kappa
hdf5 file is changed from `mspp` to `ave_pp`. The physical unit of
$P_{\mathbf{q}j}$ is set to $\text{eV}^2$.
## Changes in version 0.9.6
- Silicon example is put in `example-phono3py` directory.
- Accumulated lattice thermal conductivity is calculated by `kaccum`
script.
- Accumulated lattice thermal conductivity is calculated by `kaccum` script.
- JDOS output format was changed.
## Changes in version 0.9.5
- In `kappa-xxx.hdf5` file, `heat_capacity` format was changed
from `(irreducible q-point, temperature, phonon band)` to
`(temperature, irreducible q-point, phonon band)`. For `gamma`,
previous document was wrong in the array shape. It is
- In `kappa-xxx.hdf5` file, `heat_capacity` format was changed from
`(irreducible q-point, temperature, phonon band)` to
`(temperature, irreducible q-point, phonon band)`. For `gamma`, previous
document was wrong in the array shape. It is
`(temperature, irreducible q-point, phonon band)`
## Changes in version 0.9.4
- The option of `--cutoff_mfp` is renamed to `--boundary_mfp` and
now it's on the document.
- Detailed contribution of `kappa` at each **q**-point and phonon
mode is output to .hdf5 with the keyword `mode_kappa`.
- The option of `--cutoff_mfp` is renamed to `--boundary_mfp` and now it's on
the document.
- Detailed contribution of `kappa` at each **q**-point and phonon mode is output
to .hdf5 with the keyword `mode_kappa`.
## Changes in version 0.8.11
- A new option of `--cutoff_mfp` for including effective boundary
mean free path.
- A new option of `--cutoff_mfp` for including effective boundary mean free
path.
- The option name `--cutfc3` is changed to `--cutoff_fc3`.
- The option name `--cutpair` is changed to `--cutoff_pair`.
- A new option `--ga` is created.
@ -332,77 +320,68 @@ or phon3py loader.
## Changes in version 0.8.10
- Different supercell size of fc2 from fc3 can be specified using
`--dim_fc2` option.
- `--isotope` option is implemented. This is used instead of
`--mass_variances` option without specifying the values. Mass
variance parameters are read from database.
- Different supercell size of fc2 from fc3 can be specified using `--dim_fc2`
option.
- `--isotope` option is implemented. This is used instead of `--mass_variances`
option without specifying the values. Mass variance parameters are read from
database.
## Changes in version 0.8.2
- Phono3py python interface is rewritten and a lot of changes are
introduced.
- `FORCES_SECOND` and `FORCES_THIRD` are no more used. Instead just
one file of `FORCES_FC3` is used. Now `FORCES_FC3` is generated
by `--cf3` option and the backward compatibility is simple: `cat
FORCES_SECOND FORCES_THIRD > FORCES_FC3`.
- `--multiple_sigmas` is removed. The same behavior is achieved by
`--sigma`.
- Phono3py python interface is rewritten and a lot of changes are introduced.
- `FORCES_SECOND` and `FORCES_THIRD` are no more used. Instead just one file of
`FORCES_FC3` is used. Now `FORCES_FC3` is generated by `--cf3` option and the
backward compatibility is simple:
`cat FORCES_SECOND FORCES_THIRD > FORCES_FC3`.
- `--multiple_sigmas` is removed. The same behavior is achieved by `--sigma`.
## Changes in version 0.8.0
- `--q_direction` didn't work. Fix it.
- Implementation of tetrahedron method whcih is activated by
`--thm`.
- Implementation of tetrahedron method whcih is activated by `--thm`.
- Grid addresses are written out by `--wgp` option.
## Changes in version 0.7.6
- Cut-off distance for fc3 is implemented. This is activated by
`--cutfc3` option. FC3 elements where any atomic pair has larger
distance than cut-off distance are set zero.
- `--cutpair` works only when creating displacements. The cut-off
pair distance is written into `disp_fc3.yaml` and FC3 is created
from `FORCES_THIRD` with this information. Usually sets of pair
displacements are more redundant than that needed for creating fc3
if index permutation symmetry is considered. Therefore using index
permutation symmetry, some elements of fc3 can be recovered even if
some of supercell force calculations are missing. In paticular, all
pair distances among triplet atoms are larger than cutoff pair
distance, any fc3 elements are not recovered, i.e., the element will
be zero.
- Cut-off distance for fc3 is implemented. This is activated by `--cutfc3`
option. FC3 elements where any atomic pair has larger distance than cut-off
distance are set zero.
- `--cutpair` works only when creating displacements. The cut-off pair distance
is written into `disp_fc3.yaml` and FC3 is created from `FORCES_THIRD` with
this information. Usually sets of pair displacements are more redundant than
that needed for creating fc3 if index permutation symmetry is considered.
Therefore using index permutation symmetry, some elements of fc3 can be
recovered even if some of supercell force calculations are missing. In
paticular, all pair distances among triplet atoms are larger than cutoff pair
distance, any fc3 elements are not recovered, i.e., the element will be zero.
## Changes in version 0.7.2
- Default displacement distance is changed to 0.03.
- Files names of displacement supercells now have 5 digits numbering,
`POSCAR-xxxxx`.
- Cutoff distance between pair displacements is implemented. This is
triggered by `--cutpair` option. This option works only for
calculating atomic forces in supercells with configurations of pairs
of displacements.
- Cutoff distance between pair displacements is implemented. This is triggered
by `--cutpair` option. This option works only for calculating atomic forces in
supercells with configurations of pairs of displacements.
## Changes in version 0.7.1
- It is changed to sampling q-points in Brillouin zone. Previously
q-points are sampled in reciprocal primitive lattice. Usually this
change affects very little to the result.
- q-points of phonon triplets are more carefully sampled when a
q-point is on Brillouin zone boundary. Usually this
change affects very little to the result.
- It is changed to sampling q-points in Brillouin zone. Previously q-points are
sampled in reciprocal primitive lattice. Usually this change affects very
little to the result.
- q-points of phonon triplets are more carefully sampled when a q-point is on
Brillouin zone boundary. Usually this change affects very little to the
result.
- Isotope effect to thermal conductivity is included.
## Changes in version 0.6.0
- `disp.yaml` is renamed to `disp_fc3.yaml`. Old calculations with
`disp.yaml` can be used without any problem just by changing the
file name.
- Group velocity is calculated from analytical derivative of dynamical
matrix.
- Group velocities at degenerate phonon modes are better handled.
This improves the accuracy of group velocity and thus for thermal
conductivity.
- Re-implementation of third-order force constants calculation from
supercell forces, which makes the calculation much faster
- When any phonon of triplets can be on the Brillouin zone boundary, i.e.,
when a mesh number is an even number, it is more carefully treated.
- `disp.yaml` is renamed to `disp_fc3.yaml`. Old calculations with `disp.yaml`
can be used without any problem just by changing the file name.
- Group velocity is calculated from analytical derivative of dynamical matrix.
- Group velocities at degenerate phonon modes are better handled. This improves
the accuracy of group velocity and thus for thermal conductivity.
- Re-implementation of third-order force constants calculation from supercell
forces, which makes the calculation much faster
- When any phonon of triplets can be on the Brillouin zone boundary, i.e., when
a mesh number is an even number, it is more carefully treated.

View File

@ -47,4 +47,4 @@ following article:
doi = {10.1103/PhysRevLett.110.265506},
url = {https://link.aps.org/doi/10.1103/PhysRevLett.110.265506}
}
```
```

View File

@ -1,4 +1,5 @@
(command_options)=
# Command options / Setting tags
Phono3py is operated with command options or with a configuration file
@ -54,7 +55,6 @@ This specifies input unit cell filename.
## Calculator interface
### `--qe` (`CALCULATOR = QE`)
Quantum espresso (pw) interface is invoked.
@ -90,6 +90,7 @@ to be specified except for VASP (default) case.
```
(cf3_file_option)=
### `--cf3-file` (command option only)
This is used to create `FORCES_FC3` from a text file containing a
@ -116,6 +117,7 @@ The order of the file names is important. This option may be useful
to be used together with `--cutoff-pair` option.
(cf2_option)=
### `--cf2` (command option only)
This is used to create `FORCES_FC2` similarly to `--cf3`
@ -129,6 +131,7 @@ with `--dim-fc2` option.
```
(cfz_option)=
### `--cfz` (command option only)
This is used to create `FORCES_FC3` and `FORCES_FC2` subtracting
@ -148,6 +151,7 @@ forces". Sometimes quality of force constants is improved in this way.
```
(fs2f2_option)=
### `--fs2f2` or `--force-sets-to-forces-fc2` (command option only)
`FORCES_FC2` is created from phonopy's `FORCE_SETS` file.
@ -158,6 +162,7 @@ Necessary yaml lines for `phono3py_disp.yaml` is displayed as text.
```
(cfs_option)=
### `--cfs` or `--create-force-sets` (command option only)
Phonopy's `FORCE_SETS` is created from
@ -178,6 +183,7 @@ instead of `FORCES_FC3` and `phono3py_disp.yaml`.
## Supercell and primitive cell
(dim_option)=
### `--dim` (`DIM`)
Supercell dimension is specified. See the
@ -186,6 +192,7 @@ When a proper `phono3py_disp.yaml` exists in the current directory,
this is unnecessary to be specified.
(dim_fc2_option)=
### `--dim-fc2` (`DIM_FC2`)
Supercell dimension for 2nd order force constants (for harmonic
@ -231,6 +238,7 @@ usual phono3py run without `--dim-fc2` option.
```
(pa_option)=
### `--pa`, `--primitive-axes` (`PRIMITIVE_AXES`)
Transformation matrix from a non-primitive cell to the primitive
@ -242,6 +250,7 @@ this is unnecessary to be specified.
## Displacement creation
(create_displacements_option)=
### `-d` (`CREATE_DISPLACEMENTS = .TRUE.`)
Supercell with displacements are created. Using with `--amplitude`
@ -252,9 +261,10 @@ structure is not a primitive cell, e.g., `--pa="F"` if the input
unit cell has F-centring.
(amplitude_option)=
### `--amplitude` (`DISPLACEMENT_DISTANCE`)
Atomic displacement distance is specified. This
Atomic displacement distance is specified. This
value may be increased for the weak interaction systems and descreased
when the force calculator is numerically very accurate.
@ -264,6 +274,7 @@ The default value depends on calculator. See
## Force constants
(compact_fc_option)=
### `--cfc` or `--compact-fc` (`COMPACT_FC = .TRUE.`)
When creating force constants from `FORCES_FC3` and/or
@ -273,7 +284,7 @@ fc2 and `(num_patom, num_satom, num_satom)` for fc3, where
`num_patom` and `num_satom` are the numbers of atoms in primtive
cell and supercell. In the full size force constants case,
`num_patom` is replaced by `num_satom`. Therefore if the supercell
dimension is large, this reduction of data size becomes large. If the
dimension is large, this reduction of data size becomes large. If the
input crystal structure has centring {ref}`--pa <pa_option>` is
necessary to have smallest data size. In this case, `--pa` option
has to be specified on reading. Otherwise phono3py can recognize if
@ -287,6 +298,7 @@ employs.
```
(symmetrization_option)=
### `--sym-fc` (`FC_SYMMETRY = .TRUE.`)
Second- and third-order force constants are symmetrized. The index
@ -302,6 +314,7 @@ independently applied by `--sym-fc2` (`SYMMETRIZE_FC2 = .TRUE.`)
and `--sym-fc3r` (`SYMMETRIZE_FC3 = .TRUE.`), , respectively.
(cf3_option)=
### `--cutoff-fc3` or `--cutoff-fc3-distance` (`CUTOFF_FC3_DISTANCE`)
This option is **not** used to reduce number of supercells with
@ -315,6 +328,7 @@ reduce the supercell size and the second choice is using
`--cutoff-pair` option.
(cutoff_pair_option)=
### `--cutoff-pair` or `--cutoff-pair-distance` (`CUTOFF_PAIR_DISTANCE`)
This option is only used together with `-d` option.
@ -336,6 +350,7 @@ Gamma-centered, this works in the same way as written here,
https://phonopy.github.io/phonopy/setting-tags.html#mesh-mp-or-mesh-numbers.
(gp_option)=
### `--gp` (`GRID_POINTS`)
Grid points are specified by their unique indices, e.g., for selecting
@ -357,6 +372,7 @@ where `--gp="0 1 2 3 4 5"` can be also written
for the same purpose.
(ga_option)=
### `--ga` (`GRID_ADDRESSES`)
This is used to specify grid points like `--gp` option but in their
@ -370,23 +386,26 @@ as given by `--gp` option, and the values given by `--ga` option
will not be shown in log files.
(bi_option)=
### `--bi` (`BAND_INDICES`)
Band indices are specified. The output file name will be, e.g.,
`gammas-mxxx-gxx(-sx)-bx.dat` where `bxbx...` shows the band
indices used to be averaged. The calculated values at indices
Band indices are specified. The calculated values at indices
separated by space are averaged, and those separated by comma are
separately calculated.
separately calculated. The output file name will be, e.g.,
`gammas-mxxx-gxx(-sx)-bx.dat` where `bxbx...` shows the band
indices where the values are calcualted and summed and averaged over those
bands.
```bash
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --gp="34" --bi="4 5, 6"
```
This may be also useful to distribute the computational demand
This option may be also useful to distribute the computational demand
such like that the unit cell is large and the calculation of
phonon-phonon interaction is heavy.
(wgp_option)=
### `--wgp` (command option only)
Irreducible grid point indices and related information are written
@ -406,6 +425,7 @@ sampling mesh numbers for respective reciprocal axes.
```
(stp_option)=
### `--stp` (command option only)
Numbers of q-point triplets to be calculated for irreducible grid
@ -420,6 +440,7 @@ points are shown by using with `--gp` or `--ga` option.
## Brillouin zone integration
(thm_option)=
### `--thm` (`TETRAHEDRON = .TRUE.`)
Tetrahedron method is used for calculation of imaginary part of self
@ -428,6 +449,7 @@ specify this unless both results by tetrahedron method and
smearing method in one time execution are expected.
(sigma_option)=
### `--sigma` (`SIGMA`)
$\sigma$ value of Gaussian function for smearing when
@ -439,6 +461,7 @@ numerical values. This is used when we want to test several
$\sigma$ values simultaneously.
(sigma_cutoff_option)=
### `--sigma-cutoff` (`SIGMA_CUTOFF_WIDTH`)
The tails of the Gaussian functions that are used to replace delta
@ -451,13 +474,14 @@ phonon-phonon interaction strength becomes much faster in exchange for
it.
(full_pp_option)=
### `--full-pp` (`FULL_PP = .TRUE.`)
For thermal conductivity calculation using the linear tetrahedron
method (from version 1.10.5) and smearing method with
`--simga-cutoff` (from version 1.12.3), only necessary elements
(i.e., that have non-zero delta functions) of phonon-phonon interaction strength,
$\bigl|\Phi_{-\lambda\lambda'\lambda''}\bigl|^2$, is calculated
(i.e., that have non-zero delta functions) of phonon-phonon interaction
strength, $\bigl|\Phi_{-\lambda\lambda'\lambda''}\bigl|^2$, is calculated
due to delta functions in calculation of
$\Gamma_\lambda(\omega)$,
@ -475,8 +499,7 @@ $$
But using this option, full elements of phonon-phonon interaction
strength are calculated and averaged phonon-phonon interaction
strength ($P_{\mathbf{q}j}$, see {ref}`--ave-pp
<ave_pp_option>`) is also given and stored.
strength ($P_{\mathbf{q}j}$, see {ref}`--ave-pp <ave_pp_option>`) is also given and stored.
## Method to solve BTE
@ -510,7 +533,7 @@ documented at {ref}`direct_solution`.
Phonon-isotope scattering is calculated based on the formula by
Shin-ichiro Tamura, Phys. Rev. B, **27**, 858 (1983). Mass variance
parameters are read from database of the natural abundance data for
elements, which refers Laeter *et al.*, Pure Appl. Chem., **75**, 683
elements, which refers Laeter _et al._, Pure Appl. Chem., **75**, 683
(2003).
```bash
@ -521,8 +544,8 @@ elements, which refers Laeter *et al.*, Pure Appl. Chem., **75**, 683
Mass variance parameters are specified by this option to include
phonon-isotope scattering effect in the same way as `--isotope`
option. For example of GaN, this may be set like `--mv="1.97e-4
1.97e-4 0 0"`. The number of elements has to correspond to the number
option. For example of GaN, this may be set like `--mv="1.97e-4 1.97e-4 0 0"`.
The number of elements has to correspond to the number
of atoms in the primitive cell.
Isotope effect to thermal conductivity may be checked first running
@ -552,6 +575,7 @@ metre, is just used to avoid divergence of phonon lifetime and the
contribution to the thermal conducitivity is considered negligible.
(ave_pp_option)=
### `--ave-pp` (`USE_AVE_PP = .TRUE.`)
Averaged phonon-phonon interaction strength ($P_{\mathbf{q}j}=P_\lambda$)
@ -612,6 +636,7 @@ to input. The physical unit of the value is $\text{eV}^2$.
```
(normal_umklapp_option)=
### `--nu` (`N_U = .TRUE.`)
Integration over q-point triplets for the calculation of
@ -668,6 +693,7 @@ Out[6]: (101, 56, 6)
## Temperature
(ts_option)=
### `--ts` (`TEMPERATURES`): Temperatures
Specific temperatures are specified by `--ts`.
@ -689,6 +715,7 @@ http://phonopy.github.io/phonopy/setting-tags.html#tprop-tmin-tmax-tstep.
## Non-analytical term correction
(nac_option)=
### `--nac` (`NAC = .TRUE.`)
Non-analytical term correction for harmonic phonons. Like as phonopy,
@ -703,24 +730,151 @@ at $\mathbf{q}\rightarrow \mathbf{0}$. See the detail
at http://phonopy.github.io/phonopy/setting-tags.html#q-direction.
(write_gamma_option)=
## Imaginary part of self energy
## Imaginary and real parts of self energy
Phonon self-energy of bubble diagram is written as,
$$
\Sigma_\lambda(\omega) = \Delta_\lambda(\omega) - i \Gamma_\lambda(\omega).
$$
The imaginary part and real part are written as
$$
\begin{align*}
\Gamma_\lambda(\omega) = \frac{18\pi}{\hbar^2}
\sum_{\lambda_1 \lambda_2}
\bigl|\Phi_{-\lambda\lambda_1\lambda_2}\bigl|^2 &
\left\{(n_{\lambda_1}+ n_{\lambda_2}+1)
\left[ \delta(\omega-\omega_{\lambda_1}-\omega_{\lambda_2})
- \delta(\omega-\omega_{\lambda_1}-\omega_{\lambda_2}) \right] \right.
\\
& + (n_{\lambda_1}-n_{\lambda_2})
\left[\delta(\omega+\omega_{\lambda_1}-\omega_{\lambda_2})
- \left. \delta(\omega-\omega_{\lambda_1}+\omega_{\lambda_2})
\right]\right\},
\end{align*}
$$
and
$$
\begin{align*}
\Delta_\lambda(\omega) = \frac{18\pi}{\hbar^2}
\sum_{\lambda_1 \lambda_2}
\bigl|\Phi_{-\lambda\lambda_1\lambda_2}\bigl|^2 &
\left\{
\left[ \frac{(n_{\lambda_1}+ n_{\lambda_2}+1)}{
(\omega-\omega_{\lambda_1}-\omega_{\lambda_2})_\mathrm{p}}
- \frac{(n_{\lambda_1}+ n_{\lambda_2}+1)}{
(\omega+\omega_{\lambda_1}+\omega_{\lambda_2})_\mathrm{p}}
\right]
\right. \\
& + \left[
\frac{(n_{\lambda_1}-n_{\lambda_2})}{(\omega +
\omega_{\lambda_1} - \omega_{\lambda_2})_\mathrm{p}}
- \left. \frac{(n_{\lambda_1}-n_{\lambda_2})}{(\omega -
\omega_{\lambda_1} + \omega_{\lambda_2})_\mathrm{p}}
\right]\right\},
\end{align*}
$$
respectively. In the above formulae, angular frequency $\omega$ is used,
but in the calculation results, ordinal frequency $\nu$ is used. Be careful
about $2\pi$ treatment.
(ise_option)=
### `--ise` (`IMAG_SELF_ENERGY = .TRUE.`)
Imaginary part of self energy $\Gamma_\lambda(\omega)$ is
calculated with respect to $\omega$. The output is written to
`gammas-mxxx-gx(-sx)-tx-bx.dat` in THz (without $2\pi$)
with respect to frequency in THz (without $2\pi$). Frequency sampling
points can be specified by {ref}`freq_sampling_option`.
calculated with respect to frequency $\omega$, where $\omega$ is sampled
following {ref}`freq_sampling_option`. The output of $\Gamma_\lambda(\omega)$
is written to `gammas-mxxx-gx(-sx)-tx-bx.dat` in THz (without $2\pi$)
with respect to samplied frequency points of $\omega$ in THz (without $2\pi$).
```bash
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --q-direction="1 0 0" --gp=0 --ise --bi="4 5, 6"
```
(rse_option)=
### `--rse` (`REAL_SELF_ENERGY = .TRUE.`)
Real part of self energy $\Delta_\lambda(\omega)$ is
calculated with respect to frequency $\omega$, where $\omega$ is sampled
following {ref}`freq_sampling_option`. With this option, only smearing
approach is provide, for which values given by `--sigma` option are
used to approximate the principal
value as $\varepsilon$ in the following equation:
$$
\mathcal{P} \int^{\omega_\text{min}}_{\omega_\text{max}}
\frac{f(\omega)}{\omega} dx
\sim
\lim_{\varepsilon \rightarrow 0} \int^{\omega_\text{min}}_{\omega_\text{max}}
\frac{\omega}{\omega^2 + \varepsilon^2} f(\omega) dx
$$
where $\mathcal{P}$ denotes the Cauchy principal value.
The output of $\Delta_\lambda(\omega)$
is written to `deltas-mxxx-gx-sx-tx-bx.dat` in THz (without $2\pi$)
with respect to samplied frequency points of $\omega$ in THz (without $2\pi$).
```bash
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --q-direction="1 0 0" --gp=0 --rse --sigma="0.1" --bi="4 5, 6"
```
## Spectral function
Phonon spectral function of bubble diagram is written as
$$
A_\lambda(\omega) = \frac{1}{\pi} \frac{4\Omega^2_\lambda
\Gamma_\lambda(\omega)}
{\left[\omega^2 - \Omega^2_\lambda -
2\Omega_\lambda \Delta_\lambda(\omega) \right]^2
+ \left[ 2\Omega_\lambda
\Gamma_\lambda(\omega) \right]^2},
$$
where $A_\lambda(\omega)$ is defined to be normalized as
$$
\int_0^\infty \frac{d\omega}{2\pi} A_\lambda(\omega) = 1.
$$
### `--spf` (`SPECTRAL_FUNCTION = .TRUE.`)
Spectral function of self energy $A_\lambda(\omega)$ is
calculated with respect to frequency $\omega$, where $\omega$ is sampled
following {ref}`freq_sampling_option`. First, imaginary part of self-energy is calculated
and then the real part is calculatd using the KramersKronig relation.
The output of $A_\lambda(\omega)$
is written to `spectral-mxxx-gx(-sx)-tx-bx.dat` in THz (without $2\pi$)
with respect to samplied frequency points of $\omega$ in THz (without $2\pi$),
and `spectral-mxxx-gx.hdf5`.
```bash
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --q-direction="1 0 0" --gp=0 --spf
```
```{note}
When `--bi` option is unspecified, spectral functions of all bands are
calculated and the sum divided by the number of bands is stored in
`spectral-mxxx-gx(-sx)-tx-bx.dat`, i.e.,
$(\sum_j A_{\mathbf{q}j}) / N_\text{b}$, where $N_\text{b}$ is the
number of bands and $\lambda \equiv (\mathbf{q},j)$ is the phonon mode.
The spectral function of each band is written in the hdf5
file, where $A_{\mathrm{q}j}$ is normalied as given above, i.e., numerical
sum of stored value for each band should become roughly 1.
```
## Joint density of states
(jdos_option)=
### `--jdos` (`JOINT_DOS = .TRUE.`)
Two classes of joint density of states (JDOS) are calculated. The
@ -733,14 +887,16 @@ The first column is the frequency, and the second and third columns
are the values given as follows, respectively,
$$
&D_2^{(1)}(\mathbf{q}, \omega) = \frac{1}{N}
\begin{align}
& D_2^{(1)}(\mathbf{q}, \omega) = \frac{1}{N}
\sum_{\lambda',\lambda''} \Delta(-\mathbf{q}+\mathbf{q}'+\mathbf{q}'')
\left[\delta(\omega+\omega_{\lambda'}-\omega_{\lambda''}) +
\delta(\omega-\omega_{\lambda'}+\omega_{\lambda''}) \right], \\
&D_2^{(2)}(\mathbf{q}, \omega) = \frac{1}{N}
& D_2^{(2)}(\mathbf{q}, \omega) = \frac{1}{N}
\sum_{\lambda',\lambda''}
\Delta(-\mathbf{q}+\mathbf{q}'+\mathbf{q}'') \delta(\omega-\omega_{\lambda'}
-\omega_{\lambda''}).
\end{align}
$$
```bash
@ -756,15 +912,17 @@ first column is the frequency, and the second and third columns are
the values given as follows, respectively,
$$
&N_2^{(1)}(\mathbf{q}, \omega) = \frac{1}{N}
\begin{align}
& N_2^{(1)}(\mathbf{q}, \omega) = \frac{1}{N}
\sum_{\lambda'\lambda''} \Delta(-\mathbf{q}+\mathbf{q}'+\mathbf{q}'')
(n_{\lambda'} - n_{\lambda''}) [ \delta( \omega + \omega_{\lambda'} -
\omega_{\lambda''}) - \delta( \omega - \omega_{\lambda'} +
\omega_{\lambda''})], \\
&N_2^{(2)}(\mathbf{q}, \omega) = \frac{1}{N}
& N_2^{(2)}(\mathbf{q}, \omega) = \frac{1}{N}
\sum_{\lambda'\lambda''} \Delta(-\mathbf{q}+\mathbf{q}'+\mathbf{q}'')
(n_{\lambda'}+ n_{\lambda''}+1) \delta( \omega - \omega_{\lambda'} -
\omega_{\lambda''}).
\end{align}
$$
```bash
@ -780,11 +938,13 @@ This is an example of `Si-PBEsol`.
## Sampling frequency for distribution functions
(freq_sampling_option)=
### `--num-freq-points`, `--freq-pitch` (`NUM_FREQUENCY_POINTS`)
For spectrum like calculations of imaginary part of self energy and
JDOS, number of sampling frequency points is controlled by
`--num-freq-points` or `--freq-pitch`.
For spectrum-like calculations of imaginary part of self energy, spectral
function, and JDOS, number or interval of uniform sampling frequency points is
controlled by `--num-freq-points` or `--freq-pitch`. Both are unspecified,
default value of `--num-freq-points` of 200 is used.
## Mode-Gruneisen parameter from 3rd order force constants
@ -818,17 +978,18 @@ Read 3rd order force constants from `fc3.hdf5`.
Imaginary parts of self energy at harmonic phonon frequencies
$\Gamma_\lambda(\omega_\lambda)$ are written into file in hdf5
format. The result is written into `kappa-mxxx-gx(-sx-sdx).hdf5` or
format. The result is written into `kappa-mxxx-gx(-sx-sdx).hdf5` or
`kappa-mxxx-gx-bx(-sx-sdx).hdf5` with `--bi` option. With
`--sigma` and `--sigma-cutoff` options, `-sx` and `--sdx` are
inserted, respectively, in front of `.hdf5`.
(read_gamma_option)=
### `--read-gamma` (`READ_GAMMA = .TRUE.`)
Imaginary parts of self energy at harmonic phonon frequencies
$\Gamma_\lambda(\omega_\lambda)$
are read from `kappa` file in hdf5 format. Initially the usual
are read from `kappa` file in hdf5 format. Initially the usual
result file of `kappa-mxxx(-sx-sdx).hdf5` is searched. Unless it is
found, it tries to read `kappa` file for each grid point,
`kappa-mxxx-gx(-sx-sdx).hdf5`. Then, similarly,
@ -836,6 +997,7 @@ found, it tries to read `kappa` file for each grid point,
`kappa-mxxx-gx-bx(-sx-sdx).hdf5` files for band indices are searched.
(write_detailed_gamma_option)=
### `--write-gamma-detail` (`WRITE_GAMMA_DETAIL = .TRUE.`)
Each q-point triplet contribution to imaginary part of self energy is
@ -906,11 +1068,11 @@ np.dot(weight, contrib_tp) # is one
```
(write_phonon_option)=
### `--write-phonon` (`WRITE_PHONON = .TRUE.`)
Phonon frequencies, eigenvectors, and grid point addresses are stored
in `phonon-mxxx.hdf5` file. {ref}`--pa <pa_option>` and {ref}`--nac
<nac_option>` may be required depending on calculation setting.
in `phonon-mxxx.hdf5` file. {ref}`--pa <pa_option>` and {ref}`--nac <nac_option>` may be required depending on calculation setting.
```bash
% phono3py --fc2 --dim="2 2 2" --pa="F" --mesh="11 11 11" -c POSCAR-unitcell --nac --write-phoonon
@ -952,7 +1114,8 @@ vectors. This is convenient to categorize phonon triplets into Umklapp
and Normal scatterings based on the Brillouin zone.
(read_phonon_option)=
### `--read-phonon` (`READ_PHONON = .TRUE.`)
### `--read-phonon` (`READ_PHONON = .TRUE.`)
Phonon frequencies, eigenvectors, and grid point addresses are read
from `phonon-mxxx.hdf5` file and the calculation is continued using
@ -967,6 +1130,7 @@ may be required depending on calculation setting.
```
(write_read_pp_option)=
### `--write-pp` (`WRITE_PP = .TRUE.`) and `--read-pp` (`READ_PP = .TRUE.`)
Phonon-phonon (ph-ph) intraction strengths are written to and read
@ -990,6 +1154,7 @@ than usual RTA calculation.
```
(hdf5_compression_option)=
### `--hdf5-compression` (command option only)
Most of phono3py HDF5 output file is compressed by default with the
@ -1000,6 +1165,7 @@ documentation
(http://docs.h5py.org/en/stable/high/dataset.html#filter-pipeline).
(output_filename_option)=
### `-o` (command option only)
This modifies default output file names to write.
@ -1018,6 +1184,7 @@ This rule is applied to
- `gamma_detail-xxx.hdf5` (write only)
(input_filename_option)=
### `-i` (command option only)
This modifies default input file names to read.

View File

@ -12,9 +12,6 @@
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys
import os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
@ -28,33 +25,33 @@ import os
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
# extensions = ['sphinx.ext.imgmath']
extensions = ['sphinx.ext.mathjax', 'myst_parser']
extensions = ["sphinx.ext.mathjax", "myst_parser"]
myst_enable_extensions = ["linkify", "dollarmath", "amsmath"]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
templates_path = ["_templates"]
# The suffix of source filenames.
source_suffix = '.rst'
source_suffix = ".rst"
# The encoding of source files.
# source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
master_doc = "index"
# General information about the project.
project = u'phono3py'
copyright = u'2015, Atsushi Togo'
project = u"phono3py"
copyright = u"2015, Atsushi Togo"
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '2.0'
version = "2.1"
# The full version, including alpha/beta/rc tags.
release = '2.0.0'
release = "2.1.0"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
@ -68,7 +65,7 @@ release = '2.0.0'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
exclude_patterns = ["_build"]
# The reST default role (used for this markup: `text`) to use for all
# documents.
@ -86,7 +83,7 @@ exclude_patterns = ['_build']
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
pygments_style = "sphinx"
# A list of ignored prefixes for module index sorting.
# modindex_common_prefix = []
@ -149,12 +146,12 @@ pygments_style = 'sphinx'
# # "globaltoc_includehidden": False,
# }
html_theme = 'sphinx_book_theme'
html_theme = "sphinx_book_theme"
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
# html_title = None
html_title = 'Phono3py v.%s' % release
html_title = "Phono3py v.%s" % release
# A shorter title for the navigation bar. Default is the same as html_title.
# html_short_title = None
@ -171,7 +168,7 @@ html_title = 'Phono3py v.%s' % release
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
html_static_path = ["_static"]
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
@ -215,7 +212,7 @@ html_static_path = ['_static']
# html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'phono3pydoc'
htmlhelp_basename = "phono3pydoc"
# -- Options for LaTeX output -------------------------------------------------
@ -223,20 +220,17 @@ htmlhelp_basename = 'phono3pydoc'
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
'preamble': '',
"preamble": "",
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual])
# .
latex_documents = [
('index', 'phono3py.tex', u'phono3py manual',
u'Atsushi Togo', 'manual'),
("index", "phono3py.tex", u"phono3py manual", u"Atsushi Togo", "manual"),
]
# The name of an image file (relative to this directory) to place at the top of
@ -264,10 +258,7 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'phono3py', u'phono3py Documentation',
[u'Atsushi Togo'], 1)
]
man_pages = [("index", "phono3py", u"phono3py Documentation", [u"Atsushi Togo"], 1)]
# If true, show URL addresses after external links.
# man_show_urls = False
@ -279,9 +270,15 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
('index', 'phono3py', u'phono3py Documentation',
u'Atsushi Togo', 'phono3py', 'One line description of project.',
'Miscellaneous'),
(
"index",
"phono3py",
u"phono3py Documentation",
u"Atsushi Togo",
"phono3py",
"One line description of project.",
"Miscellaneous",
),
]
# Documents to append as an appendix to all manuals.

View File

@ -426,4 +426,4 @@ number_of_pairs_in_cutoff: 1248
300.0 235.887 235.887 219.301 0.000 -0.000 -0.000
300.0 235.642 235.642 219.348 0.000 -0.000 -0.000
300.0 235.728 235.728 219.102 0.000 -0.000 -0.000
```
```

View File

@ -1,8 +1,10 @@
(direct_solution)=
# Direct solution of linearized phonon Boltzmann equation
This page explains how to use the direct solution of LBTE by
[L. Chaput, Phys. Rev. Lett. 110, 265506 (2013)](https://doi.org/10.1103/PhysRevLett.110.265506) ({ref}`citation <citation_direct_solution_lbte>`).
[L. Chaput, Phys. Rev. Lett. 110, 265506 (2013)](https://doi.org/10.1103/PhysRevLett.110.265506)
({ref}`citation <citation_direct_solution_lbte>`).
```{contents}
:depth: 2
@ -11,44 +13,40 @@ This page explains how to use the direct solution of LBTE by
## How to use
As written in the following sections, this calculation requires large
memory space. When running multiple temperature points, simply the
memory space needed is multiplied by the number of the temperature
points. Therefore it is normally recommended to specify {ref}`--ts
option <ts_option>`. An example to run with the direct solution of
LBTE for `example/Si-PBEsol` is as follows:
As written in the following sections, this calculation requires large memory
space. When running multiple temperature points, simply the memory space needed
is multiplied by the number of the temperature points. Therefore it is normally
recommended to specify {ref}`--ts option <ts_option>`. An example to run with
the direct solution of LBTE for `example/Si-PBEsol` is as follows:
```bash
% phono3py --dim="2 2 2" --sym-fc -c POSCAR-unitcell
...
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="11 11 11" --fc3 --fc2 --lbte --ts=300
% phono3py-load --mesh 11 11 11 --lbte --ts 300
...
=================== End of collection of collisions ===================
- Averaging collision matrix elements by phonon degeneracy [0.031s]
- Making collision matrix symmetric (built-in) [0.000s]
- Averaging collision matrix elements by phonon degeneracy [0.036s]
- Making collision matrix symmetric (built-in) [0.001s]
----------- Thermal conductivity (W/m-k) with tetrahedron method -----------
Diagonalizing by lapacke dsyev... [0.111s]
Diagonalizing by lapacke dsyev... [0.141s]
Calculating pseudo-inv with cutoff=1.0e-08 (np.dot) [0.001s]
# T(K) xx yy zz yz xz xy
300.0 111.588 111.588 111.588 0.000 0.000 -0.000
(RTA) 109.009 109.009 109.009 0.000 0.000 -0.000
300.0 113.140 113.140 113.140 0.000 0.000 -0.000
(RTA) 108.982 108.982 108.982 0.000 0.000 -0.000
----------------------------------------------------------------------------
Thermal conductivity and related properties were written into
"kappa-m111111.hdf5".
Eigenvalues of collision matrix were written into "coleigs-m111111.hdf5"
...
```
## Memory usage
The direct solution of LBTE needs diagonalization of a large collision
matrix, which requires large memory space. This is the largest
limitation of using this method. The memory size needed for one
collision matrix at a temperature point is $(\text{number of
The direct solution of LBTE needs diagonalization of a large collision matrix,
which requires large memory space. This is the largest limitation of using this
method. The memory size needed for one collision matrix at a temperature point
is
$(\text{number of
irreducible grid points} \times \text{number of bands} \times 3)^2$
for the symmetrized collision matrix.
@ -58,17 +56,16 @@ for the symmetrized collision matrix.
collision matrix.
--->
These collision matrices contain real values and are supposed to be
64bit float symmetric matrices. During the diagonalization of each
collision matrix with LAPACK `dsyev` solver, around 1.2 times more
memory space is consumed in total.
These collision matrices contain real values and are supposed to be 64bit float
symmetric matrices. During the diagonalization of each collision matrix with
LAPACK `dsyev` solver, around 1.2 times more memory space is consumed in total.
When phono3py runs with {ref}`--wgp option <wgp_option>` together with
`--lbte` option, estimated memory space needed for storing collision
matrix is presented. An example for `example/Si-PBEsol` is as follows:
When phono3py runs with {ref}`--wgp option <wgp_option>` together with `--lbte`
option, estimated memory space needed for storing collision matrix is presented.
An example for `example/Si-PBEsol` is as follows:
```
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="40 40 40" --wgp --lbte
```bash
% phono3py-load --mesh 40 40 40 --lbte --wgp
...
Memory requirements:
@ -81,170 +78,166 @@ Memory requirements:
...
```
With {ref}`--stp option <stp_option>`, estimated
memory space needed for ph-ph interaction strengths is shown.
With {ref}`--stp option <stp_option>`, estimated memory space needed for ph-ph
interaction strengths is shown such as
```bash
% phono3py-load --mesh 40 40 40 --lbte --stp
```
## Work load distribution
The other difficulty compared with RTA is the workload
distribution. Currently there are two ways to distribute the
calculation: (1) Collision matrix is divided and the pieces are
distributed into computing nodes. (2) Ph-ph interaction strengths at
grid points are distributed into computing nodes. These two can not be
mixed, so one of them has to be chosen. In either case, the
distribution is done simply running a set of phono3py calculations
over grid points and optionally band indices. The data computed on
each computing node are stored in an hdf5 file. Increasing the
calculation size, e.g., larger mesh numbers or larger number of atoms
in the primitive cell, large files are created.
The other difficulty compared with RTA is the workload distribution. Currently
there are two ways to distribute the calculation: (1) Collision matrix is
divided and the pieces are distributed into computing nodes. (2) Ph-ph
interaction strengths at grid points are distributed into computing nodes. These
two can not be mixed, so one of them has to be chosen. In either case, the
distribution is done simply running a set of phono3py calculations over grid
points and optionally band indices. The data computed on each computing node are
stored in an hdf5 file. Increasing the calculation size, e.g., larger mesh
numbers or larger number of atoms in the primitive cell, large files are
created.
(distribution_colmat)=
### Distribution of collision matrix
A full collision matrix is divided into pieces at grid points of
irreducible part of Brillouin zone. Each piece is calculated
independently from the other pieces. After finishing the calculations
of these pieces, the full collision matrix is diagonzalized to obtain
the thermal conductivity.
A full collision matrix is divided into pieces at grid points of irreducible
part of Brillouin zone. Each piece is calculated independently from the other
pieces. After finishing the calculations of these pieces, the full collision
matrix is diagonzalized to obtain the thermal conductivity.
File size of Each piece of the collision matrix can be
large. Therefore it is recommended to use {ref}`--ts option
<ts_option>` to limit the number of temperature points, e.g.,
`--ts="100 200 300 400 500`, depending on the memory size installed
on each computing node. To write them into files,
`--write-collision` option must be specified, and to read them from
files, `--read-collision` option is used. These are similarly used
as {ref}`--write-gamma <write_gamma_option>` and {ref}`--read-gamma <read_gamma_option>` options for RTA calculation as shown in
{ref}`workload_distribution`.
`--read-collision` option collects the pieces and make one full
collision matrix, then starts to diagonalize it. This option requires
one argument to specify an index to read the collision matrix at one
File size of Each piece of the collision matrix can be large. Therefore it is
recommended to use {ref}`--ts option <ts_option>` to limit the number of
temperature points, e.g., `--ts "100 200 300 400 500"`, depending on the memory
size installed on each computing node. To write them into files,
`--write-collision` option must be specified, and to read them from files,
`--read-collision` option is used. These are similarly used as
{ref}`--write-gamma <write_gamma_option>` and
{ref}`--read-gamma <read_gamma_option>` options for RTA calculation as shown in
{ref}`workload_distribution`. `--read-collision` option collects the pieces and
make one full collision matrix, then starts to diagonalize it. This option
requires one argument to specify an index to read the collision matrix at one
temperature point, e.g., the collision matrix at 200K is read with
`--read-collision=1` for the (pieces of) collision matrices created
with `--ts="100 200 300 400 500"` (corresponding to 0, 1, 2, 3,
4). The temperature (e.g. 200K) is also read from the file, so it is
unnecessary to specify {ref}`--ts option <ts_option>` when reading.
`--read-collision 1` for the (pieces of) collision matrices created with
`--ts "100 200 300 400 500"` (corresponding to 0, 1, 2, 3, 4). The temperature
(e.g. 200K) is also read from the file, so it is unnecessary to specify
{ref}`--ts option <ts_option>` when reading.
The summary of the procedure is as follows:
1. Running at each grid point with {ref}`--gp <gp_option>` (or
{ref}`--ga <ga_option>`) option and
saving the piece of the collision matrix to an hdf5 file with
`--write-collision` option. It is probably OK to calculate and
store the pieces of the collision matrices at multiple temperatures
though it depends on memory size of the computer node. This
{ref}`--ga <ga_option>`) option and saving the piece of the collision matrix
to an hdf5 file with `--write-collision` option. It is probably OK to
calculate and store the pieces of the collision matrices at multiple
temperatures though it depends on memory size of the computer node. This
calculation has to be done at all irreducible grid points.
2. Collecting and creating all necessary pieces of the collision
matrix with `--read-collision=num` (`num`: index of
temperature). By this one full collision matrix at the selected
temperature is created and then diagonalized. An option `-o num`
may be used together with `--read-collision` to distinguish the
file names of the results at different temperatures.
2. Collecting and creating all necessary pieces of the collision matrix with
`--read-collision=num` (`num`: index of temperature). By this one full
collision matrix at the selected temperature is created and then
diagonalized. An option `-o num` may be used together with `--read-collision`
to distinguish the file names of the results at different temperatures.
Examples of command options are shown below using `Si-PBE` example.
Irreducible grid point indices are obtained by {ref}`--wgp option<wgp_option>`:
Examples of command options are shown below using `Si-PBE` example. Irreducible
grid point indices are obtained by {ref}`--wgp option<wgp_option>`:
```bash
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --lbte --wgp
% phono3py-load --mesh 19 19 19 --lbte --wgp
```
and the information is given in `ir_grid_points.yaml`. For
distribution of collision matrix calculation
(see also {ref}`workload_distribution`):
and the information is given in `ir_grid_points.yaml`. For distribution of
collision matrix calculation (see also {ref}`workload_distribution`):
```
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --write-collision --gp="grid_point_numbers..."
```bash
% phono3py-load --mesh 19 19 19 --lbte --ts 300 --write-collision --gp="grid_point_numbers..."
```
To collect distributed pieces of the collision matrix:
```bash
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --read-collision=0
% phono3py-load --mesh 19 19 19 --lbte --read-collision 0
```
where `--read-collision 0` indicates to read the first result in the list of
temperatures by `--ts` option, i.e., 300K in this case.
### Distribution of phonon-phonon interaction strengths
The distribution of pieces of collision matrix is straightforward and
is recommended to use if the number of temperature points is
small. However increasing data file size, network communication
becomes to require long time to send the files from a master node to
computation nodes. In this case, the distribution over ph-ph
interaction strengths can be another choice. Since, without using
{ref}`--full-pp option <full_pp_option>`, the tetrahedron method or
smearing approach with {ref}`--sigma-cutoff option <sigma_cutoff_option>`
results in the sparse ph-ph interaction
strength data array, i.e., most of the elements are zero, the data
size can be reduced by only storing non-zero elements. Not like the
collision matrix, the ph-ph interaction strengths in phono3py are
independent from temperature though it is not the case if the force
constants provided are temperature dependent. Once
stored, they are used to create the collision matrices at
temperatures. Using `--write-pp` and `--read-pp`, they are written
into and read from hdf5 files at grid points.
The distribution of pieces of collision matrix is straightforward and is
recommended to use if the number of temperature points is small. However
increasing data file size, network communication becomes to require long time to
send the files from a master node to computation nodes. In this case, the
distribution over ph-ph interaction strengths can be another choice. Since,
without using {ref}`--full-pp option <full_pp_option>`, the tetrahedron method
or smearing approach with {ref}`--sigma-cutoff option <sigma_cutoff_option>`
results in the sparse ph-ph interaction strength data array, i.e., most of the
elements are zero, the data size can be reduced by only storing non-zero
elements. Not like the collision matrix, the ph-ph interaction strengths in
phono3py are independent from temperature though it is not the case if the force
constants provided are temperature dependent. Once stored, they are used to
create the collision matrices at temperatures. Using `--write-pp` and
`--read-pp`, they are written into and read from hdf5 files at grid points.
It is also recommended to use {ref}`--write-phonon option <write_phonon_option>` and {ref}`--read-phonon option <read_phonon_option>` to use identical phonon eigenvectors among the
distributed nodes.
It is also recommended to use {ref}`--write-phonon option <write_phonon_option>`
and {ref}`--read-phonon option <read_phonon_option>` to use identical phonon
eigenvectors among the distributed nodes.
The summary of the procedure is as follows:
1. Running at each grid point with {ref}`--gp <gp_option>` (or
{ref}`--ga <ga_option>`) option and storing the ph-ph interaction
strengths to an hdf5 file with `--write-pp` option. This calculation
has to be done at all irreducible grid points.
{ref}`--ga <ga_option>`) option and storing the ph-ph interaction strengths
to an hdf5 file with `--write-pp` option. This calculation has to be done at
all irreducible grid points.
2. Running with `--read-pp` option and without {ref}`--gp <gp_option>` (or
{ref}`--ga <ga_option>`) option. By this one full collision matrix at the
selected temperature is created and then diagonalized. An option
`-o num` may be used together with `--read-collision` to
distinguish the file names of the results at different
temperatures.
selected temperature is created and then diagonalized. An option `-o num` may
be used together with `--read-collision` to distinguish the file names of the
results at different temperatures.
Examples of command options are shown below using `Si-PBE` example.
Irreducible grid point indices are obtained by {ref}`--wgp option<wgp_option>`
Examples of command options are shown below using `Si-PBE` example. Irreducible
grid point indices are obtained by {ref}`--wgp option<wgp_option>`
```bash
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --lbte --wgp
% phono3py-load --mesh "19 19 19" --lbte --wgp
```
and the grid point information is provided in
`ir_grid_points.yaml`. All phonons on mesh grid points are saved
by
and the grid point information is provided in `ir_grid_points.yaml`. All phonons
on mesh grid points are saved by
```bash
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc2 --write-phonon
% phono3py-load --mesh "19 19 19" --write-phonon
```
For distribution of ph-ph interaction strength calculation (see also
{ref}`workload_distribution`)
```bash
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --write-pp --gp="grid_point_numbers..." --read-phonon
% phono3py-load --mesh "19 19 19" --lbte --ts 300 --write-pp --gp "grid_point_numbers..." --read-phonon
```
Here one temperature has to be specified but any one of temperatures
is OK since ph-ph interaction strength computed here is assumed to be
temperature independent. Then the computed ph-ph interaction strengths
are read and used to compute collision matrix and lattice thermal
conductivity at a temperature by
Here one temperature has to be specified but any one of temperatures is OK since
ph-ph interaction strength computed here is assumed to be temperature
independent. Then the computed ph-ph interaction strengths are read and used to
compute collision matrix and lattice thermal conductivity at a temperature by
```bash
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --read-pp --read-phonon
% phono3py-load --mesh "19 19 19" --lbte --ts 300 --read-pp --read-phonon
```
This last command is repeated at different temperatures to obtain the
properties at multiple temperatures.
This last command is repeated at different temperatures to obtain the properties
at multiple temperatures.
(diagonzalization_solver)=
## Cutoff parameter of pseudo inversion
To achieve a pseudo inversion, a cutoff parameter is used to find null
space, i.e., to select the nearly zero eigenvalues. The default cutoff
value is `1e-8`, and this hopefully works in many cases. But if a
collision matrix is numerically not very accurate, we may have to
carefully choose the value by `--pinv-cutoff` option. It is safer to
plot the absolute values of eigenvalues in log scale to see if there
is clear gap between non-zero eigenvalue and nearly-zero eigenvalues.
After running the direct solution of LBTE, `coleigs-mxxx.hdf5` is
To achieve a pseudo inversion, a cutoff parameter is used to find null space,
i.e., to select the nearly zero eigenvalues. The default cutoff value is `1e-8`,
and this hopefully works in many cases. But if a collision matrix is numerically
not very accurate, we may have to carefully choose the value by `--pinv-cutoff`
option. It is safer to plot the absolute values of eigenvalues in log scale to
see if there is clear gap between non-zero eigenvalue and nearly-zero
eigenvalues. After running the direct solution of LBTE, `coleigs-mxxx.hdf5` is
created. This contains the eigenvalues of the collision matrix (either
symmetrized or non-symmetrized). The eigenvalues are plotted using
`phono3py-coleigplot` in the phono3py package:
@ -253,8 +246,8 @@ symmetrized or non-symmetrized). The eigenvalues are plotted using
% phono3py-coleigplot coleigs-mxxx.hdf5
```
It is assumed that only one set of eigenvalues at a temperature point
is contained.
It is assumed that only one set of eigenvalues at a temperature point is
contained.
```{figure} Si-coleigplot.png
:width: 50%
@ -274,72 +267,67 @@ as null spaces.
## Installation of diagonalization solvers with multithreaded BLAS
Multithreaded BLAS is recommended to use for the calculation of the
direct solution of LBTE since the diagonalization of the collision
matrix is computationally demanding. A few examples of how to install
multithreded BLAS libraries are presented below.
Multithreaded BLAS is recommended to use for the calculation of the direct
solution of LBTE since the diagonalization of the collision matrix is
computationally demanding. A few examples of how to install multithreded BLAS
libraries are presented below.
### MKL linked scipy
Scipy (also numpy) has an interface to LAPACK dsyev
(`scipy.linalg.lapack.dsyev`). An MKL LAPACK linked scipy (also
numpy) gives very good computing performance and is easily obtained
using the anaconda package manager. In this choice, usual installation
of LAPACKE is necessary for running `dgesvd` and `zheev`. When
using anaconda, installing OpenBLAS is the easiest way to do. See
{ref}`install_openblas_lapacke`
(`scipy.linalg.lapack.dsyev`). An MKL LAPACK linked scipy (also numpy) gives
very good computing performance and is easily obtained using the anaconda
package manager. In this choice, usual installation of LAPACKE is necessary for
running `dgesvd` and `zheev`. When using anaconda, installing OpenBLAS is the
easiest way to do. See {ref}`install_openblas_lapacke`
### OpenBLAS or MKL via LAPACKE
Using LAPACKE via python C-API is implemented. By this, phono3py can
use LAPACK dsyev. This uses smaller memory space than using MKL linked
scipy. Practically there are two choices, OpenBLAS and MKL. For MKL,
proper installatin of the MKL package is necessary. The MKL
library installed obtained from anaconda can not be used.
Using LAPACKE via python C-API is implemented. By this, phono3py can use LAPACK
dsyev. This uses smaller memory space than using MKL linked scipy. Practically
there are two choices, OpenBLAS and MKL. For MKL, proper installatin of the MKL
package is necessary. The MKL library installed obtained from anaconda can not
be used.
#### OpenBLAS
Use of OpenBLAS is an easy choice if the anaconda package is used.
See {ref}`install_openblas_lapacke`.
Use of OpenBLAS is an easy choice if the anaconda package is used. See
{ref}`install_openblas_lapacke`.
#### MKL
The BLAS multithread performance may be better in that in MKL. Using
MKL-LAPACK via MKL-LAPACKE via python C-API is also implemented if the
link is succeeded. See {ref}`install_mkl_lapacke`.
The BLAS multithread performance may be better in that in MKL. Using MKL-LAPACK
via MKL-LAPACKE via python C-API is also implemented if the link is succeeded.
See {ref}`install_mkl_lapacke`.
## Solver choice for diagonalization
For larger systems, diagonalization of collision matrix takes longest
time and requires large memory space. Phono3py relies on LAPACK for
the diagonalization and so the performance is dependent on the choice
of the diagonalization solver.
For larger systems, diagonalization of collision matrix takes longest time and
requires large memory space. Phono3py relies on LAPACK for the diagonalization
and so the performance is dependent on the choice of the diagonalization solver.
Using multithreaded BLAS with many-core computing node, computing time
may be well reduced and the calculation can finish in a realistic
time. Currently scipy, numpy and LAPACKE can be used as the LAPACK
wrapper in phono3py. Scipy and numpy distributed by anaconda are MKL
linked, therefore MKL multithread BLAS is used through
them. Multithreaded OpenBLAS is installed by conda and can be used via
LAPACKE in phono3py. MKL LAPACK and BLAS are also able to be used via
Using multithreaded BLAS with many-core computing node, computing time may be
well reduced and the calculation can finish in a realistic time. Currently
scipy, numpy and LAPACKE can be used as the LAPACK wrapper in phono3py. Scipy
and numpy distributed by anaconda are MKL linked, therefore MKL multithread BLAS
is used through them. Multithreaded OpenBLAS is installed by conda and can be
used via LAPACKE in phono3py. MKL LAPACK and BLAS are also able to be used via
LAPACKE in phono3py with appropriate setting in `setup.py`.
Using `--pinv-solver=[number]`, one of the following solver is
chosen:
Using `--pinv-solver=[number]`, one of the following solver is chosen:
1. Lapacke `dsyev`: Smaller memory consumption than `dsyevd`, but
slower. This is the default solver when MKL LAPACKE is integrated or
scipy is not installed.
2. Lapacke `dsyevd`: Larger memory consumption than `dsyev`, but
faster. This is not recommended because sometimes a wrong result is
obtained.
3. Numpy's `dsyevd` (`linalg.eigh`). This is not recommended
because sometimes a wrong result is obtained.
4. Scipy's `dsyev`: This is the default solver when scipy is
installed and MKL LAPACKE is not integrated.
5. Scipy's `dsyevd`. This is not recommended because sometimes a
1. Lapacke `dsyev`: Smaller memory consumption than `dsyevd`, but slower. This
is the default solver when MKL LAPACKE is integrated or scipy is not
installed.
2. Lapacke `dsyevd`: Larger memory consumption than `dsyev`, but faster. This is
not as stable as `dsyev` but is useful for solving collision matrix with
dense mesh sampling. So this solver has to be used carefully.
3. Numpy's `dsyevd` (`linalg.eigh`). This is not recommended because sometimes a
wrong result is obtained.
4. Scipy's `dsyev`: This is the default solver when scipy is installed and MKL
LAPACKE is not integrated.
5. Scipy's `dsyevd`: Similar to solver (2), this solver should be used
carefully.
The solver choices other than `--pinv-solver=1` and
`--pinv-solver=4` are dangerous and not recommend. They exist just
for the tests.
The solver choices other than `--pinv-solver=1` and `--pinv-solver=4` are
dangerous and not recommend. They exist just for the tests.

View File

@ -279,7 +279,7 @@ $$
For example, $\kappa_{\lambda,{xx}}$ is calculated by:
```badh
```bash
In [1]: import h5py
In [2]: f = h5py.File("kappa-m111111.hdf5")

View File

@ -71,4 +71,4 @@ Default displacement distances created by `-d` option without
| CRYSTAL | 0.03 Angstrom |
| Abinit | 0.06 au (bohr) |
| TURBOMOLE | 0.06 au (bohr) |
```
```

View File

@ -139,4 +139,4 @@ with `job.sh` (here for grid-engine):
#$ -o std-phono3py-num.log
phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --br --gp="gps" --write-gamma
```
```

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.6484336900 0.0222671200 -0.0143461700
0.0736627500 0.0104173100 -0.0064302500
@ -300,7 +300,7 @@
-0.0015703700 -0.0006418500 -0.0005758600
-0.0004825200 -0.0010922200 -0.0024545000
0.0040571700 -0.0000110700 0.0000039000
# File: 2
# File: 2
# 1 0.0000000000000000 0.0000000000000000 0.0300000000000000
0.0000000000 0.0000000000 -0.5557350900
0.0062250200 0.0092421200 -0.0203076300
@ -602,7 +602,7 @@
-0.0005740400 -0.0003314200 -0.0002882300
-0.0020293600 -0.0025852000 -0.0014466500
0.0000000000 -0.0041471800 -0.0020932700
# File: 3
# File: 3
# 1 0.0000000000000000 0.0000000000000000 -0.0300000000000000
0.0000000000 0.0000000000 0.6160949400
-0.0070590800 -0.0093557300 0.0205786800
@ -904,7 +904,7 @@
0.0005759000 0.0003325000 0.0002754700
0.0020376100 0.0025736200 0.0014443900
0.0000000000 0.0041401500 0.0020869200
# File: 4
# File: 4
# 151 0.0300000000000000 0.0000000000000000 0.0000000000000000
0.0204935100 -0.0000909100 0.0000019100
-0.0057412400 -0.0035612800 0.0073760100
@ -1206,7 +1206,7 @@
0.0009926100 0.0003849600 -0.0000351000
0.0000951900 0.0007041200 -0.0001422100
-0.0022182300 0.0000026900 -0.0000015100
# File: 5
# File: 5
# 151 0.0000000000000000 0.0000000000000000 0.0300000000000000
0.0000000000 0.0000000000 -0.0403186900
0.0150281200 0.0091882100 -0.0018635900
@ -1508,7 +1508,7 @@
0.0000345500 0.0000199500 0.0012992500
0.0001358800 0.0000710700 0.0029583400
0.0000000000 0.0001492100 0.0045891900
# File: 6
# File: 6
# 151 0.0000000000000000 0.0000000000000000 -0.0300000000000000
0.0000000000 0.0000000000 0.0413813900
-0.0150668500 -0.0092748700 0.0017799700

View File

@ -9,4 +9,4 @@ Direct
0.3333333333333333 0.6666666666666665 0.0009488200000000
0.6666666666666667 0.3333333333333333 0.5009488200000001
0.3333333333333333 0.6666666666666665 0.6190511800000000
0.6666666666666667 0.3333333333333333 0.1190511800000000
0.6666666666666667 0.3333333333333333 0.1190511800000000

View File

@ -41,7 +41,7 @@ k_zz=219.1. The shape of phonon band structure is important to
fullfill energy and momentum conservations.
Use of larger supercell of fc2 may change the shape of phonon band structure.
To see it, first regenerate phono3py_disp.yaml with --dim-fc2 option,
To see it, first regenerate phono3py_disp.yaml with --dim-fc2 option,
% phono3py --dim="3 3 2" --dim-fc2="5 5 3" -c POSCAR-unitcell -d

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0150976605 -0.3163819396 -0.3163819277
-0.0054602591 0.0087171452 0.0087171442

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0152594970 -0.3211511680 -0.3211509706
-0.0001435085 0.0219927829 0.0219925626
@ -16,7 +16,7 @@
0.0001331050 -0.0055277344 -0.0053741157
-0.0057637037 0.0002712181 0.0002708504
0.0055534276 0.0001117032 0.0001114381
# File: 2
# File: 2
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 1 0.0212132034355964 0.0000000000000000 0.0212132034355964
-0.2915830406 -0.2915827297 -0.6267860517
@ -35,7 +35,7 @@
0.0002973816 -0.0110605876 -0.0052885305
-0.0110601987 0.0002976322 -0.0052887309
0.0054615894 0.0054615452 0.0000190373
# File: 3
# File: 3
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 1 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.3211479920 -0.3211513093 -0.0152621589
@ -54,7 +54,7 @@
-0.0001097860 0.0001116313 -0.0055511616
-0.0002684320 0.0002711970 0.0057659419
0.0053755648 -0.0055279210 -0.0001315307
# File: 4
# File: 4
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0607208411 -0.6426014876 -0.6426016649
@ -73,7 +73,7 @@
0.0002335625 -0.0108857049 -0.0110189043
-0.0112282566 0.0004024542 0.0004019167
0.0108236885 -0.0001056704 -0.0001058760
# File: 5
# File: 5
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 1 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
-0.0000009817 -0.0000010866 -0.0000009461
@ -92,7 +92,7 @@
0.0000012799 0.0000010706 0.0000007773
0.0000009165 0.0000010127 0.0000008509
0.0000010604 0.0000009847 0.0000008692
# File: 6
# File: 6
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 2 0.0212132034355964 0.0000000000000000 0.0212132034355964
-0.0044402241 -0.3100170076 -0.3107578808
@ -111,7 +111,7 @@
0.0277477410 -0.0066981645 0.0236783541
-0.0056534328 0.0058287134 0.0003825742
0.0000322018 0.0002440270 -0.0052585282
# File: 7
# File: 7
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 2 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.0347404871 -0.3320822726 -0.3315779932
@ -130,7 +130,7 @@
-0.0289290207 -0.0066944813 -0.0329837327
-0.0060382115 -0.0054979528 -0.0000001670
0.0109208828 0.0002438843 0.0056384786
# File: 8
# File: 8
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 2 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0152286518 -0.2990938262 -0.2990938072
@ -149,7 +149,7 @@
-0.0010157867 0.0220827585 0.0236702310
-0.0002026923 0.0003819592 0.0003819492
-0.0002027130 0.0003819478 0.0003819828
# File: 9
# File: 9
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 2 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0149287171 -0.3429703545 -0.3429700900
@ -168,7 +168,7 @@
-0.0010604463 -0.0345558816 -0.0329761904
-0.0115440948 0.0000010644 0.0000009115
0.0111011485 0.0000011505 0.0000011269
# File: 10
# File: 10
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 3 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0268075451 -0.3407067497 -0.3107684189
@ -187,7 +187,7 @@
0.0056797288 -0.0054343936 -0.0052534276
-0.0069594615 0.0278752642 0.0293363152
0.0056795496 -0.0054345663 -0.0052534671
# File: 11
# File: 11
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 3 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0041758774 -0.3016067538 -0.3317748142
@ -206,7 +206,7 @@
-0.0056459234 -0.0058072124 -0.0056333221
-0.0068355352 -0.0287516455 -0.0274134432
0.0056696487 0.0054813402 0.0056529505
# File: 12
# File: 12
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 3 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.0374367371 -0.3212101694 -0.2989610185
@ -225,7 +225,7 @@
0.0002439140 0.0000318128 -0.0052585180
0.0218302035 -0.0008959854 0.0293173115
0.0058288536 -0.0056536729 0.0003824074
# File: 13
# File: 13
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 3 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
-0.0066743470 -0.3213106384 -0.3430608970
@ -244,7 +244,7 @@
-0.0001364428 -0.0113081882 -0.0056483077
-0.0347924591 -0.0009193135 -0.0273224900
0.0054391115 0.0056687705 0.0000020573
# File: 14
# File: 14
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 3 0.0212132034355964 0.0212132034355964 0.0000000000000000
0.0258331232 -0.3407360577 -0.3097939478
@ -263,7 +263,7 @@
0.0002439476 -0.0054133260 0.0001823249
0.1335285993 0.1395544364 -0.1125849783
0.0001823138 -0.0054133110 0.0002439356
# File: 15
# File: 15
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 3 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
0.0046739689 -0.3018023578 -0.3322910711
@ -282,7 +282,7 @@
-0.0001365123 -0.0058053942 -0.0111427823
-0.1352641482 -0.1292499640 0.0998249186
0.0110792052 0.0054851095 0.0002433439
# File: 16
# File: 16
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 4 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0040880746 -0.3100529400 -0.3408724414
@ -301,7 +301,7 @@
-0.0056359057 -0.0052670470 -0.0050878342
-0.0056360093 -0.0052669832 -0.0050878275
0.0043602894 0.0277007812 0.0291663253
# File: 17
# File: 17
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 4 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0263442055 -0.3319366695 -0.3013107170
@ -320,7 +320,7 @@
0.0056699090 -0.0056510496 -0.0054787857
-0.0056460853 0.0056349492 0.0058094908
0.0042430551 -0.0290637005 -0.0276252811
# File: 18
# File: 18
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 4 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.0260368501 -0.3319897664 -0.3407972776
@ -339,7 +339,7 @@
-0.0054008117 -0.0054008102 -0.0107250628
-0.0055027211 -0.0055026753 0.0005598253
0.0331401863 -0.0010853512 0.0291767075
# File: 19
# File: 19
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 4 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.0045206517 -0.3101426423 -0.3014161824
@ -358,7 +358,7 @@
0.0054931409 -0.0054108202 0.0001509796
-0.0058875886 0.0058122207 0.0001694714
-0.0236399359 -0.0011818566 -0.0276362899
# File: 20
# File: 20
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 4 0.0212132034355964 0.0212132034355964 0.0000000000000000
0.0148676009 -0.3215306550 -0.3208769657
@ -377,7 +377,7 @@
-0.0053996649 -0.0109089977 -0.0052202745
-0.0111482654 -0.0052658778 0.0004239404
0.1448030745 0.1393852560 -0.1127455500
# File: 21
# File: 21
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 4 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
0.0155383005 -0.3208527551 -0.3212435940
@ -396,7 +396,7 @@
0.0055030629 -0.0000041260 -0.0052151709
-0.0002363760 0.0056449118 0.0004281880
-0.1239859593 -0.1294459102 0.0997239436
# File: 22
# File: 22
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 7 0.0212132034355964 0.0000000000000000 0.0212132034355964
-0.0043203881 -0.3322574331 -0.3101454253
@ -415,7 +415,7 @@
-0.0052207069 -0.0054000030 -0.0109085789
0.1239436364 0.0997513012 0.1296882363
0.0345792825 -0.0010649748 0.0277212335
# File: 23
# File: 23
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 7 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.0345774055 -0.3100193587 -0.3320395899
@ -434,7 +434,7 @@
0.0056832509 -0.0053991297 -0.0000035861
-0.1448866553 -0.1127514119 -0.1391485415
-0.0219818773 -0.0011038210 -0.0289905817
# File: 24
# File: 24
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 7 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0154984453 -0.3217672151 -0.3217674511
@ -453,7 +453,7 @@
0.0003063257 -0.0109015652 -0.0109017325
0.0939766085 0.1296859539 0.1296862441
-0.1071473783 0.1394933130 0.1394933545
# File: 25
# File: 25
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 7 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0149441918 -0.3206728595 -0.3206723495
@ -472,7 +472,7 @@
0.0002919565 0.0000015622 0.0000010779
-0.1184416208 -0.1391628674 -0.1391627646
0.1051898959 -0.1294474387 -0.1294477630
# File: 26
# File: 26
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 8 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.0178987903 -0.3211620759 -0.3185125167
@ -491,7 +491,7 @@
0.1394250548 -0.1183785245 0.1339024332
0.0233157466 -0.0008940012 0.0278814388
0.1350605830 0.0996863172 0.1296363883
# File: 27
# File: 27
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 8 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.0126146687 -0.3210838297 -0.3238163247
@ -510,7 +510,7 @@
-0.1293890458 0.0940260121 -0.1348784921
-0.0333963806 -0.0009153373 -0.0287888975
-0.1337197485 -0.1127569076 -0.1391773640
# File: 28
# File: 28
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 8 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0152175545 -0.3184817266 -0.3184817374
@ -529,7 +529,7 @@
-0.0010122801 0.0235394430 0.0222168690
-0.1186046129 0.1395502635 0.1395500693
0.1051354721 0.1296226417 0.1296227234
# File: 29
# File: 29
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 8 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0153652388 -0.3238488728 -0.3238490063
@ -548,7 +548,7 @@
-0.0010580877 -0.0331549439 -0.0344068839
0.0937898270 -0.1292518331 -0.1292517037
-0.1073279705 -0.1391689292 -0.1391688687
# File: 30
# File: 30
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 9 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.1423450012 -0.2205821574 -0.1926710296
@ -567,7 +567,7 @@
-0.0004889308 -0.0058121692 -0.0059617917
-0.0255217406 -0.0111072283 0.0109237760
0.0082353165 0.0000819405 0.0027746183
# File: 31
# File: 31
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 9 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
-0.1028039845 -0.4094250037 -0.4403521962
@ -586,7 +586,7 @@
0.0007450835 -0.0058668327 -0.0047828976
0.0137885489 0.0115784779 -0.0105392031
0.0028818949 0.0000865178 -0.0025411371
# File: 32
# File: 32
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 9 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.1146780673 -0.1916061338 -0.1916062893
@ -605,7 +605,7 @@
-0.0112639668 -0.0252760811 0.0053051659
-0.0060483464 -0.0003515865 -0.0003519135
0.0055218689 0.0027909169 0.0027909838
# File: 33
# File: 33
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 9 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
-0.0719842260 -0.4411151738 -0.4411148050
@ -624,7 +624,7 @@
0.0114627684 0.0140013707 -0.0162022170
-0.0060864429 0.0008867342 0.0008868604
0.0055261070 -0.0025603898 -0.0025602488
# File: 34
# File: 34
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 10 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.0415712930 -0.3210562121 -0.2946983820
@ -643,7 +643,7 @@
0.0109273884 0.0057752666 -0.0248875997
-0.0030837545 0.0002237073 0.0029533906
-0.0141559520 -0.0112597623 0.0107678407
# File: 35
# File: 35
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 10 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
-0.0128583715 -0.3184989801 -0.3458769505
@ -662,7 +662,7 @@
-0.0104928394 -0.0169056738 0.0143465042
-0.0084410738 0.0002590701 -0.0024089846
0.0250640861 0.0114214031 -0.0107055616
# File: 36
# File: 36
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 10 0.0000000000000000 0.0212132034355964 0.0212132034355964
-0.0977384048 -0.1819623776 -0.1819623570
@ -681,7 +681,7 @@
0.0114280970 0.0052507596 -0.0249092956
-0.0057950203 0.0029527957 0.0029524980
0.0052656740 -0.0005057819 -0.0005057761
# File: 37
# File: 37
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 10 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.1427533662 -0.4704179484 -0.4704175032
@ -700,7 +700,7 @@
-0.0112319693 -0.0161306670 0.0143694573
-0.0057832498 -0.0024154276 -0.0024149113
0.0052201955 0.0007351581 0.0007358405
# File: 38
# File: 38
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 11 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0142587300 -0.2922422201 -0.2934496235
@ -719,7 +719,7 @@
0.0000649770 -0.0028485245 -0.0026908137
0.0055575990 0.0110620460 -0.0192734744
-0.0058275738 -0.0196264000 0.0107721818
# File: 39
# File: 39
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 11 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0186583734 -0.3515549399 -0.3474279481
@ -738,7 +738,7 @@
0.0001416549 -0.0082040995 -0.0080528906
-0.0171447079 -0.0103515527 0.0200238796
0.0168632681 0.0196454432 -0.0107263245
# File: 40
# File: 40
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 11 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.1436714629 -0.4218497459 -0.1941136773
@ -757,7 +757,7 @@
0.0027951237 -0.0055599389 -0.0026917737
0.0050209982 0.0115704175 -0.0192800347
0.0049650991 -0.0002060819 -0.0005023009
# File: 41
# File: 41
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 11 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
-0.1225787167 -0.2071494981 -0.4573934030
@ -776,7 +776,7 @@
-0.0025272683 -0.0055515909 -0.0080492337
-0.0163744612 -0.0110905091 0.0200287609
0.0061403690 -0.0001979406 0.0007333103
# File: 42
# File: 42
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 11 0.0212132034355964 0.0212132034355964 0.0000000000000000
0.0432153136 -0.2933226157 -0.3210775252
@ -795,7 +795,7 @@
0.0027979216 -0.0028668275 -0.0054211991
0.0162155598 0.0222692238 0.0004145929
0.0162164019 -0.0196221437 -0.0112544847
# File: 43
# File: 43
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 11 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.0112000794 -0.3504775085 -0.3188323496
@ -814,7 +814,7 @@
-0.0025262651 -0.0081831346 -0.0053867608
-0.0277461010 -0.0217171682 0.0004116788
-0.0052728822 0.0196434281 0.0114109308
# File: 44
# File: 44
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 12 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0152483020 -0.3267442195 -0.3264610198
@ -833,7 +833,7 @@
-0.0001800756 -0.0061547639 -0.0059854645
-0.0171540360 -0.0194694998 0.0109227700
0.0168545557 0.0109165924 -0.0194304460
# File: 45
# File: 45
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 12 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0150138353 -0.3157081600 -0.3156936768
@ -852,7 +852,7 @@
-0.0001660372 -0.0049014507 -0.0047545657
0.0055549189 0.0198198829 -0.0105403880
-0.0058170385 -0.0105264717 0.0198527835
# File: 46
# File: 46
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 12 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.0097912366 -0.3212138884 -0.3263967205
@ -871,7 +871,7 @@
-0.0196092218 -0.0169179831 0.0052692701
-0.0063853825 -0.0000350558 -0.0003417367
0.0163534354 0.0114209522 -0.0194357189
# File: 47
# File: 47
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 12 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.0205735101 -0.3213350436 -0.3157552086
@ -890,7 +890,7 @@
0.0196809348 0.0057888707 -0.0161745787
-0.0051446687 -0.0000286141 0.0008900977
-0.0050835190 -0.0112678291 0.0198552888
# File: 48
# File: 48
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 12 0.0212132034355964 0.0212132034355964 0.0000000000000000
0.0154371741 -0.3210711123 -0.3266682311
@ -909,7 +909,7 @@
-0.0196107269 0.0051133745 -0.0167478902
0.0048756987 -0.0194638366 -0.0110995779
0.0275400673 0.0221060299 0.0002584058
# File: 49
# File: 49
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 12 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
0.0149311970 -0.3213669834 -0.3154179849
@ -928,7 +928,7 @@
0.0196808690 -0.0163351046 0.0059361530
-0.0165708822 0.0198133735 0.0115775132
-0.0164330851 -0.0218804765 0.0002501712
# File: 50
# File: 50
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 15 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.0099184526 -0.3212126194 -0.3266920407
@ -947,7 +947,7 @@
0.0107831614 -0.0169173976 -0.0251186166
-0.3269383169 -0.0150508552 -0.3208434254
-0.0139906912 0.0114204540 0.0109195207
# File: 51
# File: 51
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 15 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.0207251585 -0.3213416237 -0.3157479787
@ -966,7 +966,7 @@
-0.0106824135 0.0057905169 0.0141728722
0.3154181047 -0.0149316541 0.3213671199
0.0253009355 -0.0112683054 -0.0105326012
# File: 52
# File: 52
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 15 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0096635017 -0.3209706287 -0.3209705585
@ -985,7 +985,7 @@
-0.0112444660 0.0051172736 -0.0251108686
-0.0209689696 -0.3209382930 -0.3209385590
0.0056938867 0.0221084901 0.0221084504
# File: 53
# File: 53
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 15 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0210400347 -0.3214630706 -0.3214632639
@ -1004,7 +1004,7 @@
0.0114410894 -0.0163388013 0.0141643266
-0.0210399489 0.3214630537 0.3214632440
0.0057002617 -0.0218826229 -0.0218828342
# File: 54
# File: 54
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 16 0.0212132034355964 0.0000000000000000 0.0212132034355964
0.0154172860 -0.3154636736 -0.3208795584
@ -1023,7 +1023,7 @@
0.0221248215 -0.0053942124 0.0166102385
-0.0253120419 0.0115762128 0.0110745756
-0.3155111472 -0.0150597306 -0.3210296326
# File: 55
# File: 55
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 16 -0.0212132034355964 0.0000000000000000 -0.0212132034355964
0.0152298852 -0.3266395654 -0.3212776311
@ -1042,7 +1042,7 @@
-0.0218576148 -0.0053769007 -0.0273614947
0.0139786056 -0.0111080196 -0.0103765236
0.3266396831 -0.0152299036 0.3212775233
# File: 56
# File: 56
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 16 0.0000000000000000 0.0212132034355964 0.0212132034355964
0.0209683493 -0.3209405075 -0.3209404024
@ -1061,7 +1061,7 @@
0.0114468887 -0.0250769097 0.0054350830
-0.0056267951 0.0222590743 0.0222591097
-0.0096636052 -0.3209681471 -0.3209681710
# File: 57
# File: 57
# 1 0.0000000000000000 0.0212132034355964 0.0212132034355964
# 16 0.0000000000000000 -0.0212132034355964 -0.0212132034355964
0.0097255863 -0.3212294883 -0.3212295526

View File

@ -34,4 +34,3 @@ for the CRYSTAL interface, so the -c crystal.o parameter is not needed
Add --isotope for isotope scattering
Check the effect of --nac for polar systems

View File

@ -79,7 +79,7 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
PROCESS 10 OF 12 WORKING
PROCESS 11 OF 12 WORKING
*******************************************************************************
* *
* CRYSTAL14 *
@ -119,14 +119,14 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
* *
********************************************************************************
EEEEEEEEEE STARTING DATE 03 02 2017 TIME 23:03:41.1
si_cF8_alpha
si_cF8_alpha
CRYSTAL CALCULATION
(INPUT ACCORDING TO THE INTERNATIONAL TABLES FOR X-RAY CRYSTALLOGRAPHY)
CRYSTAL FAMILY : CUBIC
CRYSTAL CLASS (GROTH - 1921) : CUBIC HEXAKISOCTAHEDRAL
CRYSTAL FAMILY : CUBIC
CRYSTAL CLASS (GROTH - 1921) : CUBIC HEXAKISOCTAHEDRAL
SPACE GROUP (CENTROSYMMETRIC) : F D 3 M
SPACE GROUP (CENTROSYMMETRIC) : F D 3 M
LATTICE PARAMETERS (ANGSTROMS AND DEGREES) - CONVENTIONAL CELL
A B C ALPHA BETA GAMMA
@ -159,7 +159,7 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
NUMBER OF SYMMETRY OPERATORS : 48
*******************************************************************************
* GEOMETRY EDITING - INPUT COORDINATES ARE GIVEN IN ANGSTROM
* GEOMETRY EDITING - INPUT COORDINATES ARE GIVEN IN ANGSTROM
*******************************************************************************
GEOMETRY NOW FULLY CONSISTENT WITH THE GROUP
@ -179,11 +179,11 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
*******************************************************************************
LATTICE PARAMETERS (ANGSTROMS AND DEGREES) - BOHR = 0.5291772083 ANGSTROM
PRIMITIVE CELL - CENTRING CODE 5/0 VOLUME= 40.446798 - DENSITY 2.297 g/cm^3
A B C ALPHA BETA GAMMA
A B C ALPHA BETA GAMMA
3.85300625 3.85300625 3.85300625 60.000000 60.000000 60.000000
*******************************************************************************
ATOMS IN THE ASYMMETRIC UNIT 1 - ATOMS IN THE UNIT CELL: 2
ATOM X/A Y/B Z/C
ATOM X/A Y/B Z/C
*******************************************************************************
1 T 14 SI 1.250000000000E-01 1.250000000000E-01 1.250000000000E-01
2 F 14 SI -1.250000000000E-01 -1.250000000000E-01 -1.250000000000E-01
@ -193,11 +193,11 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
*******************************************************************************
CRYSTALLOGRAPHIC CELL (VOLUME= 161.78719119)
A B C ALPHA BETA GAMMA
A B C ALPHA BETA GAMMA
5.44897370 5.44897370 5.44897370 90.000000 90.000000 90.000000
COORDINATES IN THE CRYSTALLOGRAPHIC CELL
ATOM X/A Y/B Z/C
ATOM X/A Y/B Z/C
*******************************************************************************
1 T 14 SI 1.250000000000E-01 1.250000000000E-01 1.250000000000E-01
2 F 14 SI -1.250000000000E-01 -1.250000000000E-01 -1.250000000000E-01
@ -276,29 +276,29 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
ATOM X(AU) Y(AU) Z(AU) N. TYPE EXPONENT S COEF P COEF D/F/G COEF
*******************************************************************************
1 SI 1.287 1.287 1.287
1 S
1 S
6.904E+03 1.337E-03 0.000E+00 0.000E+00
1.038E+03 9.997E-03 0.000E+00 0.000E+00
2.359E+02 4.491E-02 0.000E+00 0.000E+00
6.607E+01 1.146E-01 0.000E+00 0.000E+00
2.025E+01 1.028E-01 0.000E+00 0.000E+00
2 S
2 S
3.435E+01 7.084E-02 0.000E+00 0.000E+00
3.637E+00-4.303E-01 0.000E+00 0.000E+00
1.400E+00-4.138E-01 0.000E+00 0.000E+00
3 S
3 S
2.594E-01 1.000E+00 0.000E+00 0.000E+00
4- 7 SP
4- 7 SP
1.200E-01 1.000E+00 1.000E+00 0.000E+00
8- 10 P
8- 10 P
1.798E+02 0.000E+00 6.192E-03 0.000E+00
4.191E+01 0.000E+00 4.340E-02 0.000E+00
1.296E+01 0.000E+00 1.563E-01 0.000E+00
4.438E+00 0.000E+00 2.942E-01 0.000E+00
1.546E+00 0.000E+00 2.354E-01 0.000E+00
11- 13 P
11- 13 P
4.098E-01 0.000E+00 1.000E+00 0.000E+00
14- 18 D
14- 18 D
3.500E-01 0.000E+00 0.000E+00 1.000E+00
2 SI -1.287 -1.287 -1.287
INFORMATION **** SET_MPP **** PCRYSTAL CALCULATION
@ -360,7 +360,7 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
25-C( 4 3 1) 26-C( 5 3 1) 27-C( 6 3 1) 28-C( 5 4 1)
29-C( 6 4 2)
DIRECT LATTICE VECTORS COMPON. (A.U.) RECIP. LATTICE VECTORS COMPON. (A.U.)
DIRECT LATTICE VECTORS COMPON. (A.U.) RECIP. LATTICE VECTORS COMPON. (A.U.)
X Y Z X Y Z
0.0000000 5.1485340 5.1485340 -0.6101917 0.6101917 0.6101917
5.1485340 0.0000000 5.1485340 0.6101917 -0.6101917 0.6101917
@ -447,7 +447,7 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
ATOMS ISOTOPIC MASS (AMU) FOR FREQUENCY CALCULATION
ATOMS ISOTOPIC MASS (AMU) FOR FREQUENCY CALCULATION
1 SI 27.9769 2 SI 27.9769
@ -455,10 +455,10 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
GENERATING FREQUENCIES. IN PRINCIPLE 3N+1 SCF + GRADIENT
CALCULATIONS ARE REQUIRED;
FOR EACH OF THEM THE REMAINING POINT SYMMETRY IS INDICATED.
POINT SYMMETRY PERMITS TO GENERATE GRADIENTS FOR DISPLACEMENT B
POINT SYMMETRY PERMITS TO GENERATE GRADIENTS FOR DISPLACEMENT B
STARTING FROM THE GRADIENT GENERATED BY DISPLACEMENT A.
N LABEL SYMBOL DISPLACEMENT SYM.
N LABEL SYMBOL DISPLACEMENT SYM.
1 EQUILIBRIUM GEOMETRY 48
@ -519,7 +519,7 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT INT_CALC TELAPSE 0.21 TCPU 0.14
*******************************************************************************
si_cF8_alpha
si_cF8_alpha
CRYSTAL - SCF - TYPE OF CALCULATION : RESTRICTED CLOSED SHELL
*******************************************************************************
@ -784,7 +784,7 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
(2) ONLY RELEVANT CLASSES ARE CONSIDERED IN THE CHARACTER TABLE
(3) SYMBOLS MAY NOT FULLY COINCIDE WITH THOSE FROM TEXT BOOKS.]
(P, D, RP, RD, STAND FOR PAIRING, DOUBLING, REAL PAIRING AND REAL DOUBLING
(P, D, RP, RD, STAND FOR PAIRING, DOUBLING, REAL PAIRING AND REAL DOUBLING
OF THE IRREPS (SEE MANUAL))
CLASS | GROUP OPERATORS (SEE SYMMOPS KEYWORD)
@ -805,7 +805,7 @@ SCF wavefunction si_cF8_alpha_pbe0_svp_fq.w is available as /chemtemp/CRY_6960/f
-------------------------------------------------------------------------------
F2g | 3.00 -1.00 0.00 1.00 -1.00 3.00 -1.00 0.00 1.00 -1.00
F1u | 3.00 -1.00 0.00 -1.00 1.00 -3.00 1.00 0.00 1.00 -1.00
F2g-(3, 1);
F1u-(3, 1);
@ -902,4 +902,4 @@ SCF wavefunction fort.9 saved as /home/antti/work/crypho/phonopy-aalto-tests/si_
FREQCALC RESTART data FREQINFO.DAT saved as /home/antti/work/crypho/phonopy-aalto-tests/si_pbe0_svp/opt/si_cF8_alpha_pbe0_svp_fq.freqinfo
Additional FREQCALC RESTART data fort.13 saved as /home/antti/work/crypho/phonopy-aalto-tests/si_pbe0_svp/opt/si_cF8_alpha_pbe0_svp_fq.f13
Temporary directory /chemtemp/CRY_6960 removed from node compute-0-6.local
Date: 2017-02-03 23:06:31
Date: 2017-02-03 23:06:31

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4048203000 0.0000000000 0.0000000000
0.0006218800 0.0000000000 0.0000000000
@ -64,7 +64,7 @@
-0.0003516900 0.0009946800 -0.0009946800
-0.0015020600 0.0009793700 -0.0011994900
0.0007013600 0.0007746100 -0.0007891700
# File: 2
# File: 2
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 1 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.6908798200 -0.2876254800 -0.0368033800
@ -131,7 +131,7 @@
0.0000969100 0.0006039100 -0.0025355900
-0.0018578500 0.0014006000 -0.0027708900
0.0018214200 0.0018880400 -0.0019300800
# File: 3
# File: 3
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 1 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.1187255500 0.2863799600 0.0063107000
@ -198,7 +198,7 @@
-0.0008159700 0.0013860800 0.0005377300
-0.0011499300 0.0005340700 0.0003587100
-0.0003306000 -0.0002550100 0.0003030300
# File: 4
# File: 4
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 2 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.4043807300 0.0009450800 0.0000353600
@ -265,7 +265,7 @@
0.1138381400 0.1151817300 -0.0928526700
-0.0004470300 0.0020344200 -0.0023071200
0.0003306200 0.0012234400 -0.0023354500
# File: 5
# File: 5
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 2 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.4052606200 -0.0009425000 -0.0000050800
@ -332,7 +332,7 @@
-0.1244087000 -0.1230628800 0.1042817800
-0.0024784900 0.0000052500 -0.0001525100
0.0010772000 0.0003044300 0.0007481400
# File: 6
# File: 6
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.4038761900 0.0004429700 0.0000242300
@ -399,7 +399,7 @@
0.0007065800 0.0020542700 -0.0020973300
0.1126892300 0.1151657600 -0.0930514700
0.0011523500 0.0004042200 -0.0023350400
# File: 7
# File: 7
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.4057656500 -0.0004403200 0.0000067400
@ -466,7 +466,7 @@
-0.0013223400 0.0000189800 0.0000510800
-0.1255692600 -0.1230802400 0.1040694300
0.0002349200 0.0011443500 0.0007477000
# File: 8
# File: 8
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4048194600 0.0000303700 0.0013351100
@ -533,7 +533,7 @@
-0.0011208600 0.0002234500 0.0052176300
-0.0738671300 -0.0713943100 0.0989761100
-0.0003137500 -0.0003955700 -0.0023368800
# File: 9
# File: 9
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.4048674100 -0.0000455400 0.0000113600
@ -600,7 +600,7 @@
-0.0007228600 0.0014467300 -0.0025443600
-0.0010572600 0.0006059900 -0.0027523400
0.1148887100 0.1149656000 -0.0926232000
# File: 10
# File: 10
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.4047708000 0.0000512100 0.0000202200
@ -667,7 +667,7 @@
0.0000245800 0.0005233600 0.0005430800
-0.0019711200 0.0013515100 0.0003377100
-0.1233525000 -0.1232885200 0.1044680900
# File: 11
# File: 11
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4048167100 0.0000313400 -0.0117451700
@ -734,7 +734,7 @@
-0.0015198200 -0.0000161200 -0.0025431200
-0.0025225400 -0.0001901300 -0.0027488300
-0.0716719800 -0.0716151200 0.0993872900
# File: 12
# File: 12
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 7 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.4131153500 -0.0000450500 -0.0000062900
@ -801,7 +801,7 @@
-0.0002135000 0.0011306500 -0.0020978500
-0.0017558800 0.0007257100 -0.0026093800
0.0017247700 0.0056690400 -0.0018804000
# File: 13
# File: 13
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 7 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3965157000 0.0000490200 0.0000018100
@ -868,7 +868,7 @@
-0.0005004100 0.0008441100 0.0001069200
-0.0012692800 0.0012142500 0.0002073300
-0.0003040300 -0.0041363800 0.0002694000
# File: 14
# File: 14
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 8 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.4043543400 0.0004688300 0.0000142700
@ -935,7 +935,7 @@
0.0045456200 0.0020230100 -0.0020865000
-0.0004763700 0.0058762100 -0.0022910500
0.0004513800 0.0005231200 -0.0021979100
# File: 15
# File: 15
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 8 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.4052874700 -0.0004658100 -0.0000016900
@ -1002,7 +1002,7 @@
-0.0052597500 -0.0000192900 0.0000609900
-0.0025189900 -0.0039341900 -0.0001477300
0.0009391900 0.0010080400 0.0006238700
# File: 16
# File: 16
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4018514500 0.0060049500 0.0057824100
@ -1069,7 +1069,7 @@
-0.0011201200 0.0072114400 -0.0017613200
-0.0022389100 0.0016361800 -0.0019383900
-0.0000822000 0.0001979900 -0.0015780300
# File: 17
# File: 17
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4076669500 -0.0058529600 -0.0056620500
@ -1136,7 +1136,7 @@
0.0004086100 -0.0051454800 -0.0002408900
-0.0007172400 0.0002746700 -0.0004244500
0.0014789200 0.0013481500 -0.0000079600
# File: 18
# File: 18
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4179138400 -0.0028628200 -0.0028628200
@ -1203,7 +1203,7 @@
0.0003535600 0.0002110000 -0.0002215100
0.0046345000 0.0002171600 -0.0004481600
0.0001193700 -0.0000024000 -0.0000115700
# File: 19
# File: 19
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3918188400 0.0027451300 0.0027451300
@ -1270,7 +1270,7 @@
-0.0010110000 0.0017240700 -0.0017264400
-0.0077171600 0.0017526800 -0.0019652600
0.0012874000 0.0015625000 -0.0015762000
# File: 20
# File: 20
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4045796400 0.0010711100 -0.0018561800
@ -1337,7 +1337,7 @@
-0.0015159100 -0.0005554900 -0.0020117900
-0.0022919500 0.0003992100 -0.0019891600
-0.0000298300 0.0014328000 -0.0015242200
# File: 21
# File: 21
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4050617200 -0.0010643500 0.0018718500
@ -1404,7 +1404,7 @@
0.0008496400 0.0025003200 -0.0000159000
-0.0007274400 0.0015565200 -0.0004238600
0.0014898600 0.0000689100 -0.0000112400
# File: 22
# File: 22
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4048901500 -0.0002387700 -0.0002387700
@ -1471,7 +1471,7 @@
-0.0018532900 -0.0002059600 -0.0000118800
-0.0020806800 0.0002036100 -0.0004232900
0.0068395100 0.0000186500 -0.0000320700
# File: 23
# File: 23
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4047771300 0.0002461600 0.0002461600
@ -1538,7 +1538,7 @@
0.0011978900 0.0021643500 -0.0020128300
-0.0009233700 0.0017659600 -0.0019885300
-0.0055094800 0.0015417800 -0.0015573700
# File: 24
# File: 24
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4021791200 0.0057045700 -0.0057807800
@ -1605,7 +1605,7 @@
-0.0011369300 0.0004161700 -0.0017843600
-0.0026752800 -0.0005673400 -0.0022247500
-0.0000563800 0.0069858300 -0.0015559300
# File: 25
# File: 25
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4075484600 -0.0058549800 0.0059063800
@ -1672,7 +1672,7 @@
0.0004275800 0.0015728900 -0.0002158100
-0.0003000100 0.0024792300 -0.0002161500
0.0014504200 -0.0053618400 -0.0000310800
# File: 26
# File: 26
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4176447700 -0.0027580400 0.0027580400
@ -1739,7 +1739,7 @@
-0.0009325100 0.0002176400 -0.0002176400
-0.0029957700 -0.0002187200 -0.0002187200
0.0014023200 -0.0000179200 -0.0000179200
# File: 27
# File: 27
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3919080200 0.0028639600 -0.0028639600
@ -1806,7 +1806,7 @@
0.0002315300 0.0017816500 -0.0017816500
0.0000352000 0.0021463000 -0.0022173800
0.0000444600 0.0015127200 -0.0015208900
# File: 28
# File: 28
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4045685500 0.0010970200 0.0018690400
@ -1873,7 +1873,7 @@
-0.0010855600 0.0016521800 -0.0017291400
-0.0022716600 0.0071872500 -0.0019717300
-0.0004648900 -0.0007749300 -0.0018038300
# File: 29
# File: 29
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4050730800 -0.0010984500 -0.0018531900
@ -1940,7 +1940,7 @@
0.0004394100 0.0002918100 -0.0002206100
-0.0007497500 -0.0051534900 -0.0004431900
0.0019046800 0.0022774200 0.0001910700
# File: 30
# File: 30
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4048157100 -0.0002523000 0.0002523000
@ -2007,7 +2007,7 @@
0.0057865900 0.0002378900 -0.0002378900
-0.0008027600 0.0001914200 -0.0004229500
-0.0008027600 -0.0004229500 0.0001914200
# File: 31
# File: 31
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4048023100 0.0002462700 -0.0002462700
@ -2074,7 +2074,7 @@
-0.0065643500 0.0017626900 -0.0017626900
-0.0021585200 0.0017139500 -0.0019375100
0.0022515100 0.0019393100 -0.0018065700
# File: 32
# File: 32
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3990408400 0.0029281300 0.0056664200
@ -2141,7 +2141,7 @@
0.0003053900 0.0002647100 -0.0017267900
0.0047027900 0.0002088700 -0.0019766800
0.0001283700 -0.0000090600 -0.0015726400
# File: 33
# File: 33
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4104351100 -0.0028224100 -0.0055354700
@ -2208,7 +2208,7 @@
-0.0010503500 0.0017792400 -0.0002227100
-0.0076358600 0.0017362700 -0.0004371400
0.0012759900 0.0015457700 -0.0000142500
# File: 34
# File: 34
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4075631700 -0.0130137600 -0.0028484200
@ -2275,7 +2275,7 @@
-0.0011036200 0.0071358700 -0.0002375100
-0.0022802700 0.0016754800 -0.0004254600
-0.0000671500 0.0002030700 -0.0000242700
# File: 35
# File: 35
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4021720100 0.0129214900 0.0027564100
@ -2342,7 +2342,7 @@
0.0004171900 -0.0052229300 -0.0017638500
-0.0007813600 0.0003275200 -0.0019370100
0.0014849800 0.0013463600 -0.0015611600
# File: 36
# File: 36
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3990957300 0.0027959400 0.0057509900
@ -2409,7 +2409,7 @@
-0.0011222400 0.0017827100 -0.0002946900
-0.0023070000 0.0017567600 -0.0004914800
-0.0000719800 0.0015516000 -0.0013586700
# File: 37
# File: 37
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4104167400 -0.0026919500 -0.0055889200
@ -2476,7 +2476,7 @@
0.0003848300 0.0002566900 -0.0016459600
-0.0007548000 0.0002403700 -0.0018615100
0.0014887000 -0.0000118200 -0.0002181000
# File: 38
# File: 38
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3988884000 0.0026740400 -0.0059103400
@ -2543,7 +2543,7 @@
-0.0018983100 -0.0001699200 -0.0020116000
-0.0020855300 0.0001889500 -0.0019887600
0.0069180200 -0.0000001500 -0.0015499300
# File: 39
# File: 39
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4108850600 -0.0027776700 0.0060201200
@ -2610,7 +2610,7 @@
0.0011554900 0.0021912000 -0.0000147100
-0.0009255100 0.0017573400 -0.0004232700
-0.0054368500 0.0015356000 -0.0000387600
# File: 40
# File: 40
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4076611300 -0.0129310600 0.0027268900
@ -2677,7 +2677,7 @@
-0.0015479400 -0.0005109000 -0.0000136600
-0.0022790700 0.0004027900 -0.0004225400
-0.0000921100 0.0014728300 -0.0000100700
# File: 41
# File: 41
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4018479800 0.0130187300 -0.0028562000
@ -2744,7 +2744,7 @@
0.0008168600 0.0025468000 -0.0020144100
-0.0007194000 0.0015553700 -0.0019908000
0.0014466200 0.0001205000 -0.0015250000
# File: 42
# File: 42
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4107756800 -0.0029170600 0.0061046700
@ -2811,7 +2811,7 @@
-0.0013397000 0.0019939500 -0.0013397000
-0.0022793600 0.0017557200 -0.0017742600
-0.0000886900 0.0015489700 -0.0000886900
# File: 43
# File: 43
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3989744600 0.0028123300 -0.0059643900
@ -2878,7 +2878,7 @@
0.0006496600 -0.0000111200 -0.0006520000
-0.0007183200 0.0001900400 -0.0006245300
0.0014413700 0.0000377700 -0.0014429500
# File: 44
# File: 44
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4037398300 0.0002329500 -0.0018452900
@ -2945,7 +2945,7 @@
-0.0009279400 0.0002089000 -0.0017815900
-0.0030532300 -0.0001887800 -0.0022182400
0.0013606600 0.0000371000 -0.0015252000
# File: 45
# File: 45
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4058938000 -0.0002307600 0.0018599700
@ -3012,7 +3012,7 @@
0.0002267800 0.0017710000 -0.0002184400
-0.0000008800 0.0021787700 -0.0002218900
-0.0000002200 0.0015636500 -0.0000109100
# File: 46
# File: 46
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4050669200 -0.0000413500 -0.0002455500
@ -3079,7 +3079,7 @@
-0.0011271800 0.0004189900 -0.0002176100
-0.0027023600 -0.0005246600 -0.0002224600
-0.0000506700 0.0069097900 -0.0000321000
# File: 47
# File: 47
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4045704400 0.0000185900 0.0002523000
@ -3146,7 +3146,7 @@
0.0004387800 0.0015723100 -0.0017819500
-0.0003383100 0.0025274700 -0.0022187800
0.0014703300 -0.0054386900 -0.0015553600
# File: 48
# File: 48
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4066898400 0.0002454100 0.0010967200
@ -3213,7 +3213,7 @@
-0.0011260100 0.0017715000 -0.0015707900
-0.0024994200 0.0019732200 -0.0015509800
-0.0000709800 0.0015686900 -0.0000831800
# File: 49
# File: 49
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4029375700 -0.0002434800 -0.0010925700
@ -3280,7 +3280,7 @@
0.0004376900 0.0002079900 -0.0004164800
-0.0005025400 -0.0000219800 -0.0008565300
0.0014377700 0.0000319500 -0.0014462500
# File: 50
# File: 50
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4037357800 0.0002633000 0.0018826900
@ -3347,7 +3347,7 @@
0.0058661000 0.0002254200 -0.0017608600
-0.0008471500 0.0002447300 -0.0019367400
-0.0008467100 -0.0003945400 -0.0018061300
# File: 51
# File: 51
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4059058600 -0.0002617400 -0.0018667700
@ -3414,7 +3414,7 @@
-0.0064897800 0.0017527300 -0.0002407100
-0.0022069800 0.0017658800 -0.0004257300
0.0022079300 0.0019743500 0.0001921200
# File: 52
# File: 52
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4050666500 -0.0000221000 0.0002477100
@ -3481,7 +3481,7 @@
-0.0011372000 0.0016994900 -0.0002218000
-0.0022590000 0.0071129100 -0.0004441800
-0.0004993500 -0.0007320900 0.0001910300
# File: 53
# File: 53
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4045796300 0.0000498400 -0.0002396200
@ -3548,7 +3548,7 @@
0.0003852300 0.0003371200 -0.0017283700
-0.0007369300 -0.0052327400 -0.0019711100
0.0018736800 0.0023247100 -0.0018033200
# File: 54
# File: 54
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4029765200 -0.0002472800 0.0010743900
@ -3615,7 +3615,7 @@
-0.0011391700 0.0017689500 -0.0002904100
-0.0022777000 0.0017704000 -0.0004977400
-0.0002904100 0.0017689500 -0.0011391700
# File: 55
# File: 55
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4066760000 0.0002489300 -0.0010694800
@ -3682,7 +3682,7 @@
0.0003873800 0.0002597300 -0.0016532300
-0.0007709500 0.0002404300 -0.0018590900
0.0017049200 -0.0002278900 -0.0004411900
# File: 56
# File: 56
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4040336800 -0.0005657000 0.0007647900
@ -3749,7 +3749,7 @@
0.0015069300 0.0020802900 -0.0007485700
0.0003661000 0.0020593700 -0.0014468700
-0.0011663900 0.0018555000 -0.0005405900
# File: 57
# File: 57
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4056184200 0.0005688600 -0.0007743400
@ -3816,7 +3816,7 @@
-0.0022221600 -0.0000866200 -0.0012414000
-0.0033590600 -0.0001054700 -0.0009539000
0.0025584800 -0.0003120700 -0.0010337800
# File: 58
# File: 58
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4054008600 0.0007878700 0.0007878700
@ -3883,7 +3883,7 @@
0.0007288900 0.0028661900 -0.0012407100
-0.0004187600 0.0028337400 -0.0009567500
0.0017849700 -0.0010970600 -0.0005400800
# File: 59
# File: 59
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4042389900 -0.0007966100 -0.0007966100
@ -3950,7 +3950,7 @@
-0.0014353400 -0.0008613600 -0.0007474500
-0.0025825800 -0.0008916700 -0.0014466800
-0.0003819900 0.0026315200 -0.0010352800
# File: 60
# File: 60
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4040182200 0.0007077800 0.0007532000
@ -4017,7 +4017,7 @@
-0.0022065500 0.0020812200 -0.0012399900
-0.0033734600 0.0020586000 -0.0009539800
0.0025759100 0.0018568200 -0.0010323500
# File: 61
# File: 61
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4055657000 -0.0006592800 -0.0007124900
@ -4084,7 +4084,7 @@
0.0015223700 -0.0000877500 -0.0007492900
0.0003510200 -0.0001061500 -0.0014482500
-0.0011544700 -0.0003130900 -0.0005427800
# File: 62
# File: 62
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3986122300 0.0007614100 0.0007614100
@ -4151,7 +4151,7 @@
0.0007295000 -0.0008622700 -0.0012429900
-0.0004198100 -0.0008892600 -0.0009549100
0.0017901100 0.0026353100 -0.0005455600
# File: 63
# File: 63
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4111043700 -0.0007716000 -0.0007716000
@ -4218,7 +4218,7 @@
-0.0014279000 0.0028667200 -0.0007450800
-0.0025909900 0.0028312900 -0.0014473600
-0.0003771500 -0.0011007800 -0.0010306000
# File: 64
# File: 64
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4041595900 0.0007930400 0.0007386000
@ -4285,7 +4285,7 @@
0.0007311200 -0.0008759300 -0.0007476800
-0.0004211900 -0.0008785400 -0.0014494300
0.0017842700 0.0026447800 -0.0010317700
# File: 65
# File: 65
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4054311500 -0.0007383300 -0.0006941300
@ -4352,7 +4352,7 @@
-0.0014345700 0.0028520300 -0.0012409300
-0.0025824800 0.0028502000 -0.0009527800
-0.0003811600 -0.0010818900 -0.0005442100
# File: 66
# File: 66
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4041169000 0.0061365400 0.0007526000
@ -4419,7 +4419,7 @@
-0.0022209900 0.0020747700 -0.0007506400
-0.0033644100 0.0020654300 -0.0014456900
0.0025583600 0.0018578300 -0.0005360400
# File: 67
# File: 67
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4055313000 -0.0062107600 -0.0007587800
@ -4486,7 +4486,7 @@
0.0015078400 -0.0000888500 -0.0012387200
0.0003708400 -0.0001044400 -0.0009564300
-0.0011655900 -0.0003058900 -0.0010393800
# File: 68
# File: 68
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4040833800 0.0007680500 0.0006656900
@ -4553,7 +4553,7 @@
-0.0005970900 0.0007450900 -0.0010142100
-0.0012551900 0.0012287000 -0.0012185900
0.0009483400 0.0005315400 -0.0008314300
# File: 69
# File: 69
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4055116100 -0.0007128300 -0.0006151200
@ -4620,7 +4620,7 @@
-0.0001074500 0.0012396900 -0.0009497700
-0.0017471800 0.0007339200 -0.0011590200
0.0004521200 0.0010234600 -0.0007686600
# File: 70
# File: 70
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4063692000 0.0012580600 0.0009996500
@ -4687,7 +4687,7 @@
0.0007336500 0.0028512300 -0.0007485500
-0.0004231700 0.0028492200 -0.0014458500
0.0017882800 -0.0010843600 -0.0010313600
# File: 71
# File: 71
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4032239500 -0.0012220200 -0.0010365900
@ -4754,7 +4754,7 @@
-0.0014287900 -0.0008759100 -0.0012416600
-0.0025897600 -0.0008774100 -0.0009559800
-0.0003770100 0.0026477000 -0.0005434300
# File: 72
# File: 72
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4036498400 -0.0014453600 0.0009797700
@ -4821,7 +4821,7 @@
0.0015227700 0.0020760300 -0.0012422200
0.0003533800 0.0020641200 -0.0009537000
-0.0011526600 0.0018589100 -0.0010348200
# File: 73
# File: 73
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4059601100 0.0014943000 -0.0010173100
@ -4888,7 +4888,7 @@
-0.0022057500 -0.0000899000 -0.0007473100
-0.0033770300 -0.0001017100 -0.0014471700
0.0025749900 -0.0003061300 -0.0005408700
# File: 74
# File: 74
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4037866000 0.0009569700 -0.0003515600
@ -4955,7 +4955,7 @@
-0.0005925900 0.0012382800 -0.0010420800
-0.0012628700 0.0007358100 -0.0012476700
0.0009523700 0.0010223400 -0.0008072800
# File: 75
# File: 75
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4058592600 -0.0009633700 0.0003485200
@ -5022,7 +5022,7 @@
-0.0001003100 0.0007459600 -0.0009721300
-0.0017515800 0.0012271100 -0.0011798300
0.0004606000 0.0005313900 -0.0007425500
# File: 76
# File: 76
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4038339100 -0.0014841000 0.0012005300
@ -5089,7 +5089,7 @@
0.0053735000 0.0067719500 0.0017640100
0.0043424100 0.0069066400 -0.0040539700
-0.0051398200 0.0067024800 0.0020702000
# File: 77
# File: 77
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4058451000 0.0015309400 -0.0011672900
@ -5156,7 +5156,7 @@
-0.0061941300 -0.0049338000 -0.0038575600
-0.0072312400 -0.0047999500 0.0015460600
0.0064268800 -0.0050041900 -0.0035396300
# File: 78
# File: 78
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4051684400 0.0009937100 0.0009937100
@ -5223,7 +5223,7 @@
0.0054263500 0.0067178100 0.0017596600
0.0044257300 0.0068195300 -0.0040589700
0.0064797800 -0.0049501200 -0.0035391400
# File: 79
# File: 79
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4044790100 -0.0009992800 -0.0009992800
@ -5290,7 +5290,7 @@
-0.0062793500 -0.0048479300 -0.0038536400
-0.0072804300 -0.0047411600 0.0015511900
-0.0052221200 0.0066189400 0.0020679800
# File: 80
# File: 80
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3325372600 0.1030977700 0.0746091500
@ -5357,7 +5357,7 @@
-0.0060645400 0.0067737800 -0.0037717800
-0.0073784200 0.0069263000 0.0016630000
0.0065476500 0.0067293200 -0.0036984800
# File: 81
# File: 81
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4829997500 -0.1060619800 -0.0807080700
@ -5424,7 +5424,7 @@
0.0054838500 -0.0049353400 0.0018868000
0.0042482300 -0.0048160800 -0.0039626400
-0.0050184400 -0.0050273700 0.0020175000
# File: 82
# File: 82
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3046512300 0.0724377800 0.0724377800
@ -5491,7 +5491,7 @@
0.0055671400 -0.0048435700 0.0018544400
0.0042743700 -0.0047482300 -0.0039265000
0.0065947700 0.0066367100 -0.0036208600
# File: 83
# File: 83
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.5075082400 -0.0781452500 -0.0781452500
@ -5558,7 +5558,7 @@
-0.0061182400 0.0067144100 -0.0037371500
-0.0074307400 0.0068271200 0.0016264500
-0.0050365700 -0.0049690700 0.0019386100
# File: 84
# File: 84
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4063236200 -0.0009971600 0.0011131900
@ -5625,7 +5625,7 @@
-0.0003700000 0.0012411100 -0.0007454800
-0.0145239400 0.0038384700 -0.0040606400
0.0006576400 0.0010169600 -0.0010270500
# File: 85
# File: 85
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4033629600 0.0009615000 -0.0011432600
@ -5692,7 +5692,7 @@
-0.0003052800 0.0007545300 -0.0012377100
0.0114265200 -0.0017687200 0.0015453500
0.0007246000 0.0005249200 -0.0005433800
# File: 86
# File: 86
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4057781100 -0.0003474400 -0.0010333800
@ -5759,7 +5759,7 @@
-0.0005934200 0.0020791600 -0.0028503100
-0.0042580100 0.0067520200 -0.0069228300
0.0004577000 0.0018526500 0.0010808700
# File: 87
# File: 87
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4038554300 0.0003453200 0.0010392500
@ -5826,7 +5826,7 @@
-0.0001046700 -0.0000857000 0.0008760600
0.0013538500 -0.0049455200 0.0046403000
0.0009496400 -0.0003090600 -0.0026417300
# File: 88
# File: 88
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4036189100 -0.0010139000 -0.0016030500
@ -5893,7 +5893,7 @@
-0.0005941600 -0.0008620200 0.0000897900
0.0013531900 -0.0048631600 0.0047240400
0.0009488000 0.0026275100 0.0002967200
# File: 89
# File: 89
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4060561100 0.0009804000 0.0015593200
@ -5960,7 +5960,7 @@
-0.0001050100 0.0028667500 -0.0020739400
-0.0042569800 0.0067001300 -0.0069756400
0.0004580100 -0.0010953400 -0.0018669200
# File: 90
# File: 90
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4041141900 -0.0007766500 0.0007333600
@ -6027,7 +6027,7 @@
-0.0132808500 0.0037415300 0.0017474700
-0.0015504900 0.0012215100 -0.0014435700
-0.0123126600 0.0036339100 -0.0036498900
# File: 91
# File: 91
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4055677200 0.0008152700 -0.0007851400
@ -6094,7 +6094,7 @@
0.0126723900 -0.0018636000 -0.0038493200
-0.0014826800 0.0007293100 -0.0009531200
0.0136302400 -0.0019738600 0.0019621400
# File: 92
# File: 92
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4056309200 0.0007431900 -0.0008125000
@ -6161,7 +6161,7 @@
-0.0032156800 0.0069231700 0.0048433000
-0.0017508900 0.0020584000 0.0006671100
-0.0020508100 0.0065509100 -0.0065113500
# File: 93
# File: 93
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4040450100 -0.0006980800 0.0007591600
@ -6228,7 +6228,7 @@
0.0024097500 -0.0047831700 -0.0067128400
-0.0012584200 -0.0001043200 -0.0030542100
0.0035626200 -0.0051535900 0.0050569900
# File: 94
# File: 94
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4040003800 -0.0007729500 0.0062067100
@ -6295,7 +6295,7 @@
-0.0032099200 0.0068355300 0.0049346600
-0.0012620200 0.0028317800 -0.0001172800
0.0035647100 -0.0050712300 0.0051418900
# File: 95
# File: 95
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4056224100 0.0007583300 -0.0061282200
@ -6362,7 +6362,7 @@
0.0024065500 -0.0047231500 -0.0067722500
-0.0017474100 -0.0008895200 -0.0022817900
-0.0020531400 0.0064964300 -0.0065646200
# File: 96
# File: 96
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4662241300 0.0919136500 -0.0594493100
@ -6429,7 +6429,7 @@
-0.0005989900 0.0020835400 0.0008750100
-0.0043629900 0.0069073400 0.0046267000
0.0004449800 0.0018510100 -0.0026269100
# File: 97
# File: 97
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3381213400 -0.0946172300 0.0645655900
@ -6496,7 +6496,7 @@
-0.0001014500 -0.0000984100 -0.0028477600
0.0012505400 -0.0048019500 -0.0069075600
0.0009581400 -0.0002987600 0.0010625200
# File: 98
# File: 98
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3074782900 -0.0667141300 0.0667141300
@ -6563,7 +6563,7 @@
-0.0003875600 0.0012366600 -0.0012366600
-0.0144397700 0.0037427800 0.0015663200
0.0006699300 0.0010136800 -0.0005331900
# File: 99
# File: 99
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4990518600 0.0612594900 -0.0612594900
@ -6630,7 +6630,7 @@
-0.0003398900 0.0007445000 -0.0007445000
0.0115207300 -0.0018940700 -0.0040745800
0.0007574200 0.0005409300 -0.0010392700
# File: 100
# File: 100
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4057940000 -0.0015210300 -0.0011996600
@ -6697,7 +6697,7 @@
-0.0031022000 0.0067758100 -0.0067187700
-0.0017465800 0.0020625500 -0.0030577500
-0.0021532000 0.0067036800 0.0050529900
# File: 101
# File: 101
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4038076200 0.0015701900 0.0011672800
@ -6764,7 +6764,7 @@
0.0025084900 -0.0049357800 0.0048488000
-0.0012611700 -0.0001020700 0.0006699100
0.0034563100 -0.0050034300 -0.0065059200
# File: 102
# File: 102
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4051699900 -0.0010029900 0.0010029900
@ -6831,7 +6831,7 @@
-0.0133659500 0.0038530200 -0.0038530200
-0.0015230400 0.0012263900 -0.0009519800
-0.0122301800 0.0035273500 0.0019606400
# File: 103
# File: 103
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4044659500 0.0009962100 -0.0009962100
@ -6898,7 +6898,7 @@
0.0125737900 -0.0017521300 0.0017521300
-0.0014574700 0.0007380300 -0.0014410200
0.0137228600 -0.0020903500 -0.0036504200
# File: 104
# File: 104
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4055940500 0.0007014600 -0.0007969600
@ -6965,7 +6965,7 @@
-0.0001037600 0.0020770900 0.0008594700
0.0012481200 0.0067504400 0.0045203200
0.0009469100 0.0018549200 -0.0026631000
# File: 105
# File: 105
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4040955200 -0.0006530900 0.0007586100
@ -7032,7 +7032,7 @@
-0.0005954200 -0.0000828600 -0.0028632900
-0.0043617400 -0.0049443300 -0.0070437600
0.0004609600 -0.0003109200 0.0010736200
# File: 106
# File: 106
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3986906600 -0.0007669500 0.0007669500
@ -7099,7 +7099,7 @@
-0.0003974600 0.0007522100 -0.0007522100
-0.0144332800 -0.0017735900 -0.0039534900
0.0006795900 0.0005250100 -0.0010290000
# File: 107
# File: 107
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4108696800 0.0007543300 -0.0007543300
@ -7166,7 +7166,7 @@
-0.0003290300 0.0012416200 -0.0012416200
0.0115146800 0.0038459000 0.0016675300
0.0007492600 0.0010176400 -0.0005555100
# File: 108
# File: 108
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4055853900 -0.0005862600 -0.0007885800
@ -7233,7 +7233,7 @@
0.0025098400 0.0069238500 -0.0068359300
-0.0012571000 0.0020586600 -0.0030695000
0.0034545800 0.0065466700 0.0049300700
# File: 109
# File: 109
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4040449600 0.0005907400 0.0008006200
@ -7300,7 +7300,7 @@
-0.0031039500 -0.0047845200 0.0047284300
-0.0017498600 -0.0001049000 0.0006547000
-0.0021537300 -0.0051492500 -0.0066289600
# File: 110
# File: 110
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4053964000 -0.0007771900 0.0007771900
@ -7367,7 +7367,7 @@
-0.0133649300 -0.0018698900 0.0018698900
-0.0015225300 0.0007303600 -0.0014483500
-0.0122234800 -0.0019798900 -0.0035452200
# File: 111
# File: 111
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4042435900 0.0007654400 -0.0007654400

View File

@ -13,4 +13,4 @@ Direct
0.1250000000000000 0.1250000000000000 0.1250000000000000
0.1250000000000000 0.6250000000000000 0.6250000000000000
0.6250000000000000 0.1250000000000000 0.6250000000000000
0.6250000000000000 0.6250000000000000 0.1250000000000000
0.6250000000000000 0.6250000000000000 0.1250000000000000

View File

@ -849,4 +849,4 @@ displacement_pairs:
displacement_pair_info:
number_of_singles: 1
number_of_pairs: 110
number_of_pairs: 110

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3871386400 0.0000000000 0.0000000000
0.0005494400 0.0000000000 0.0000000000
@ -64,7 +64,7 @@
-0.0002769400 0.0009038800 -0.0009038800
-0.0014327100 0.0008891400 -0.0012465000
0.0006623300 0.0006388400 -0.0007069700
# File: 2
# File: 2
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 1 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.6607453600 -0.2750030800 -0.0340348000
@ -131,7 +131,7 @@
0.0001573500 0.0005027100 -0.0024150800
-0.0017969100 0.0012991000 -0.0027872600
0.0016537300 0.0016242300 -0.0017348000
# File: 3
# File: 3
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 1 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.1135216400 0.2738477000 0.0058339700
@ -198,7 +198,7 @@
-0.0007315300 0.0013081200 0.0005947800
-0.0010638700 0.0004596800 0.0002811500
-0.0002479500 -0.0002660600 0.0002682500
# File: 4
# File: 4
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 2 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3867494600 0.0009304200 0.0000309000
@ -265,7 +265,7 @@
0.1069218400 0.1081008500 -0.0847210200
-0.0005016500 0.0018194600 -0.0022382500
0.0002762800 0.0010754300 -0.0022229000
# File: 5
# File: 5
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 2 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3875260900 -0.0009306700 -0.0000051800
@ -332,7 +332,7 @@
-0.1166478000 -0.1154647700 0.0953019000
-0.0022848000 0.0000377200 -0.0003153900
0.0010501700 0.0001839800 0.0007953900
# File: 6
# File: 6
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3862050100 0.0003877100 0.0000212100
@ -399,7 +399,7 @@
0.0006537700 0.0018362600 -0.0018929100
0.1057718100 0.1080879800 -0.0850566000
0.0010977900 0.0002553700 -0.0022227400
# File: 7
# File: 7
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3880702400 -0.0003888900 0.0000046800
@ -466,7 +466,7 @@
-0.0011285500 0.0000503300 0.0000240500
-0.1178078100 -0.1154805700 0.0949533900
0.0002081800 0.0010239000 0.0007948500
# File: 8
# File: 8
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3871387000 0.0000256200 0.0013168200
@ -533,7 +533,7 @@
-0.0009645100 0.0002155400 0.0053077000
-0.0675367500 -0.0652255000 0.0945514900
-0.0002627300 -0.0005723100 -0.0021826100
# File: 9
# File: 9
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3872589100 -0.0001235400 0.0000148400
@ -600,7 +600,7 @@
-0.0006630800 0.0013421600 -0.0024207100
-0.0009982500 0.0005037800 -0.0027649500
0.1078593900 0.1078425000 -0.0845045900
# File: 10
# File: 10
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3870114500 0.0001266900 0.0000199700
@ -667,7 +667,7 @@
0.0001111000 0.0004474500 0.0005996400
-0.0018852300 0.0012765000 0.0002585600
-0.1157061000 -0.1157360400 0.0954806300
# File: 11
# File: 11
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3871340700 0.0000345800 -0.0115469500
@ -734,7 +734,7 @@
-0.0014907700 -0.0000161000 -0.0023786600
-0.0023582400 -0.0003230400 -0.0027202400
-0.0654532400 -0.0654900600 0.0950904600
# File: 12
# File: 12
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 7 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3952936400 -0.0001234600 -0.0000043900
@ -801,7 +801,7 @@
-0.0001324700 0.0010483400 -0.0019629600
-0.0015987900 0.0007211800 -0.0025276900
0.0015983600 0.0054771600 -0.0016459300
# File: 13
# File: 13
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 7 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3789725900 0.0001247000 0.0000008500
@ -868,7 +868,7 @@
-0.0004348500 0.0007458400 0.0001533100
-0.0012797600 0.0010437700 0.0000340000
-0.0002595800 -0.0042154300 0.0001978900
# File: 14
# File: 14
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 8 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3867296900 0.0004081400 0.0000117900
@ -935,7 +935,7 @@
0.0045601100 0.0018455500 -0.0018412400
-0.0004910000 0.0057290200 -0.0021820100
0.0004946800 0.0004722700 -0.0019901600
# File: 15
# File: 15
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 8 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3875467400 -0.0004077200 -0.0000019100
@ -1002,7 +1002,7 @@
-0.0051295000 -0.0000235200 -0.0000003500
-0.0023601700 -0.0039662200 -0.0003448700
0.0008164200 0.0007917400 0.0005751200
# File: 16
# File: 16
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3842647300 0.0058789300 0.0056309100
@ -1069,7 +1069,7 @@
-0.0009635000 0.0071207400 -0.0015867900
-0.0020847200 0.0015074600 -0.0018493400
-0.0000909500 0.0001054800 -0.0014643400
# File: 17
# File: 17
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3898969200 -0.0057255100 -0.0055037500
@ -1136,7 +1136,7 @@
0.0003995900 -0.0052374400 -0.0002309000
-0.0007276400 0.0002262500 -0.0006055400
0.0014063800 0.0011712300 0.0000408000
# File: 18
# File: 18
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4001151700 -0.0027773400 -0.0027773400
@ -1203,7 +1203,7 @@
0.0003884700 0.0002027600 -0.0002671600
0.0047038800 0.0002085600 -0.0005767600
0.0001236100 -0.0001074100 0.0000397600
# File: 19
# File: 19
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3742682300 0.0026666300 0.0026666300
@ -1270,7 +1270,7 @@
-0.0008977000 0.0015516900 -0.0015025000
-0.0076466100 0.0015793700 -0.0019261000
0.0012009300 0.0013941000 -0.0014632400
# File: 20
# File: 20
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3869151600 0.0010072300 -0.0018485800
@ -1337,7 +1337,7 @@
-0.0014875500 -0.0005729300 -0.0018289700
-0.0021875500 0.0003530300 -0.0020019100
0.0000108800 0.0012578600 -0.0013092700
# File: 21
# File: 21
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3873613500 -0.0010034100 0.0018635900
@ -1404,7 +1404,7 @@
0.0009685400 0.0023377900 -0.0000143100
-0.0006871100 0.0014247200 -0.0005002900
0.0013668900 -0.0000248600 -0.0000667900
# File: 22
# File: 22
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3871848700 -0.0002230700 -0.0002230700
@ -1471,7 +1471,7 @@
-0.0017102000 -0.0003437000 -0.0000122400
-0.0019679400 0.0001442000 -0.0005011900
0.0067997000 -0.0000353800 -0.0000310300
# File: 23
# File: 23
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3871132400 0.0002303800 0.0002303800
@ -1538,7 +1538,7 @@
0.0011986900 0.0021167400 -0.0018309000
-0.0008966800 0.0016437100 -0.0020009200
-0.0055518100 0.0013230500 -0.0013930600
# File: 24
# File: 24
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3845739500 0.0055726400 -0.0056168400
@ -1605,7 +1605,7 @@
-0.0010322600 0.0003681600 -0.0016606800
-0.0026471100 -0.0005838600 -0.0021775200
-0.0000151000 0.0068516900 -0.0013914000
# File: 25
# File: 25
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3897815500 -0.0057288000 0.0057481100
@ -1672,7 +1672,7 @@
0.0004691100 0.0014391200 -0.0001563600
-0.0001826300 0.0023195900 -0.0003511500
0.0013292400 -0.0054982500 -0.0000320500
# File: 26
# File: 26
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3997973800 -0.0026699800 0.0026699800
@ -1739,7 +1739,7 @@
-0.0008164600 0.0001578900 -0.0001578900
-0.0028554300 -0.0003563400 -0.0003563400
0.0013254100 -0.0000704600 -0.0000704600
# File: 27
# File: 27
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3743745900 0.0027713400 -0.0027713400
@ -1806,7 +1806,7 @@
0.0002628200 0.0016588600 -0.0016588600
0.0000326300 0.0021001200 -0.0021719400
0.0000435400 0.0012950200 -0.0013056600
# File: 28
# File: 28
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3869003300 0.0010309600 0.0018586100
@ -1873,7 +1873,7 @@
-0.0009309200 0.0015218700 -0.0015042200
-0.0021161000 0.0070992700 -0.0019333000
-0.0005498200 -0.0008366000 -0.0016313200
# File: 29
# File: 29
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3873748000 -0.0010352300 -0.0018435500
@ -1940,7 +1940,7 @@
0.0004302100 0.0002413700 -0.0002656900
-0.0007589500 -0.0052445400 -0.0005693500
0.0019090300 0.0020711400 0.0001818600
# File: 30
# File: 30
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3871125900 -0.0002367000 0.0002367000
@ -2007,7 +2007,7 @@
0.0058594300 0.0002284700 -0.0002284700
-0.0007717300 0.0001832000 -0.0006050300
-0.0007717300 -0.0006050300 0.0001832000
# File: 31
# File: 31
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3871373600 0.0002298000 -0.0002298000
@ -2074,7 +2074,7 @@
-0.0064899300 0.0015890300 -0.0015890300
-0.0020496500 0.0015418100 -0.0018498100
0.0021388500 0.0018481200 -0.0016328900
# File: 32
# File: 32
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3814869600 0.0028382700 0.0055085300
@ -2141,7 +2141,7 @@
0.0003392100 0.0002548600 -0.0015020500
0.0047762000 0.0002025800 -0.0019381700
0.0001297400 -0.0001120800 -0.0014600500
# File: 33
# File: 33
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3926216300 -0.0027427100 -0.0053709000
@ -2208,7 +2208,7 @@
-0.0009376900 0.0016062700 -0.0002677300
-0.0075651700 0.0015661400 -0.0005642200
0.0011942000 0.0013803000 0.0000368000
# File: 34
# File: 34
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3897996400 -0.0128822100 -0.0027526500
@ -2275,7 +2275,7 @@
-0.0009502500 0.0070455500 -0.0002277700
-0.0021281600 0.0015461100 -0.0006063500
-0.0000784500 0.0001094800 0.0000262500
# File: 35
# File: 35
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3845650200 0.0127713200 0.0026642200
@ -2342,7 +2342,7 @@
0.0004060800 -0.0053142800 -0.0015895700
-0.0007906400 0.0002766600 -0.0018486200
0.0014122100 0.0011685400 -0.0014492700
# File: 36
# File: 36
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3815721700 0.0027082700 0.0056206600
@ -2409,7 +2409,7 @@
-0.0009148100 0.0016095300 -0.0002452300
-0.0021539800 0.0015313600 -0.0005795000
-0.0000817300 0.0013851100 -0.0012352800
# File: 37
# File: 37
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3925662200 -0.0026132700 -0.0054574600
@ -2476,7 +2476,7 @@
0.0003230900 0.0002514100 -0.0015180600
-0.0007643700 0.0002846400 -0.0018689700
0.0014155600 -0.0001167000 -0.0001781100
# File: 38
# File: 38
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3813320900 0.0025897900 -0.0057518000
@ -2543,7 +2543,7 @@
-0.0017525200 -0.0003047600 -0.0018282000
-0.0019702700 0.0001323400 -0.0020015700
0.0068769500 -0.0000508900 -0.0013869700
# File: 39
# File: 39
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3930845900 -0.0026881100 0.0058717100
@ -2610,7 +2610,7 @@
0.0011558400 0.0021470800 -0.0000150700
-0.0008954800 0.0016366400 -0.0005005300
-0.0054757400 0.0013183200 -0.0000367200
# File: 40
# File: 40
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3898874000 -0.0127750500 0.0026528200
@ -2677,7 +2677,7 @@
-0.0015216600 -0.0005319900 -0.0000125000
-0.0021763700 0.0003559700 -0.0004988000
-0.0000511300 0.0012973600 -0.0000657600
# File: 41
# File: 41
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3842648600 0.0128760800 -0.0027770200
@ -2744,7 +2744,7 @@
0.0009329800 0.0023824400 -0.0018308500
-0.0006797800 0.0014227300 -0.0020035100
0.0013226000 0.0000241900 -0.0013101800
# File: 42
# File: 42
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3929529800 -0.0028255500 0.0059837600
@ -2811,7 +2811,7 @@
-0.0011780800 0.0018132300 -0.0011780800
-0.0021767400 0.0016350900 -0.0017785100
-0.0000471000 0.0012787800 -0.0000471000
# File: 43
# File: 43
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3814430100 0.0027264100 -0.0058383500
@ -2878,7 +2878,7 @@
0.0006307100 -0.0000118100 -0.0006305500
-0.0006792300 0.0001338800 -0.0007140200
0.0013179800 0.0000365500 -0.0013224100
# File: 44
# File: 44
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3861213800 0.0002162000 -0.0018376600
@ -2945,7 +2945,7 @@
-0.0008124300 0.0001498200 -0.0016586100
-0.0029075700 -0.0003218800 -0.0021710500
0.0012802700 -0.0000161400 -0.0013100000
# File: 45
# File: 45
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3881504200 -0.0002170000 0.0018522900
@ -3012,7 +3012,7 @@
0.0002580100 0.0016484900 -0.0001582400
-0.0000005800 0.0021349800 -0.0003576500
-0.0000002400 0.0013471300 -0.0000660800
# File: 46
# File: 46
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3873647800 -0.0000219600 -0.0002291900
@ -3079,7 +3079,7 @@
-0.0010232900 0.0003696200 -0.0001579300
-0.0026778400 -0.0005432200 -0.0003569700
-0.0000119700 0.0067752800 -0.0000321600
# File: 47
# File: 47
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3869040500 -0.0000021700 0.0002359600
@ -3146,7 +3146,7 @@
0.0004787700 0.0014385700 -0.0016589500
-0.0002222900 0.0023643700 -0.0021716300
0.0013463700 -0.0055741600 -0.0013914600
# File: 48
# File: 48
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3889995100 0.0002268300 0.0010312400
@ -3213,7 +3213,7 @@
-0.0010226000 0.0016495700 -0.0014379400
-0.0023362900 0.0017924200 -0.0015226100
0.0000233900 0.0013506000 -0.0000435700
# File: 49
# File: 49
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3852599800 -0.0002276000 -0.0010275900
@ -3280,7 +3280,7 @@
0.0004778100 0.0001492600 -0.0003692700
-0.0005230700 -0.0000202400 -0.0009714200
0.0012631800 -0.0000195900 -0.0013264100
# File: 50
# File: 50
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3861173900 0.0002446100 0.0018716100
@ -3347,7 +3347,7 @@
0.0059386600 0.0002175200 -0.0015874800
-0.0008144100 0.0002375000 -0.0018477100
-0.0008146800 -0.0005731200 -0.0016331400
# File: 51
# File: 51
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3881608200 -0.0002441300 -0.0018559300
@ -3414,7 +3414,7 @@
-0.0064163800 0.0015802000 -0.0002301500
-0.0020955700 0.0015947500 -0.0006076500
0.0020959500 0.0018852900 0.0001832900
# File: 52
# File: 52
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3873685200 -0.0000046900 0.0002315200
@ -3481,7 +3481,7 @@
-0.0009828600 0.0015666500 -0.0002663400
-0.0021071000 0.0070243800 -0.0005699100
-0.0005867000 -0.0007960200 0.0001820500
# File: 53
# File: 53
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3869124200 0.0000284900 -0.0002239200
@ -3548,7 +3548,7 @@
0.0003754700 0.0002852100 -0.0015034200
-0.0007484700 -0.0053224600 -0.0019329200
0.0018759500 0.0021161800 -0.0016314900
# File: 54
# File: 54
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3853055600 -0.0002317100 0.0010128000
@ -3615,7 +3615,7 @@
-0.0009847200 0.0015427000 -0.0002410400
-0.0020698700 0.0015977600 -0.0005839300
-0.0002410400 0.0015427000 -0.0009847200
# File: 55
# File: 55
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3889845200 0.0002324300 -0.0010081000
@ -3682,7 +3682,7 @@
0.0003776700 0.0003026500 -0.0015225000
-0.0008331600 0.0002337700 -0.0018645500
0.0015718800 -0.0002713500 -0.0004301500
# File: 56
# File: 56
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3863818600 -0.0005262500 0.0007344700
@ -3749,7 +3749,7 @@
0.0015699900 0.0019254200 -0.0006735000
0.0004286400 0.0019070800 -0.0014764900
-0.0011993600 0.0016568700 -0.0004764400
# File: 57
# File: 57
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3879028100 0.0005264100 -0.0007439500
@ -3816,7 +3816,7 @@
-0.0021388200 -0.0001136700 -0.0011345500
-0.0032794000 -0.0001321400 -0.0010173500
0.0025087500 -0.0003831500 -0.0009368300
# File: 58
# File: 58
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3876740300 0.0007541600 0.0007541600
@ -3883,7 +3883,7 @@
0.0007401100 0.0027659500 -0.0011347500
-0.0004117400 0.0027351800 -0.0010174600
0.0016799800 -0.0012236600 -0.0004760700
# File: 59
# File: 59
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3866006700 -0.0007638500 -0.0007638500
@ -3950,7 +3950,7 @@
-0.0012983900 -0.0009431500 -0.0006736000
-0.0024496300 -0.0009713100 -0.0014767600
-0.0003598500 0.0024863900 -0.0009381900
# File: 60
# File: 60
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3864190200 0.0006656900 0.0006192500
@ -4017,7 +4017,7 @@
-0.0021246300 0.0019263500 -0.0011331300
-0.0032928100 0.0019058000 -0.0010149100
0.0025251800 0.0016579200 -0.0009361300
# File: 61
# File: 61
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3877987000 -0.0006213500 -0.0005814100
@ -4084,7 +4084,7 @@
0.0015857800 -0.0001151000 -0.0006740200
0.0004128100 -0.0001316900 -0.0014773000
-0.0011858900 -0.0003845200 -0.0004783500
# File: 62
# File: 62
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3809293000 0.0006799000 0.0006799000
@ -4151,7 +4151,7 @@
0.0007412400 -0.0009440800 -0.0011361800
-0.0004132300 -0.0009698200 -0.0010154500
0.0016846600 0.0024893300 -0.0004809100
# File: 63
# File: 63
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3934199400 -0.0006899700 -0.0006899700
@ -4218,7 +4218,7 @@
-0.0012913300 0.0027665200 -0.0006712400
-0.0024557000 0.0027333700 -0.0014770500
-0.0003560600 -0.0012264500 -0.0009340500
# File: 64
# File: 64
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3865173600 0.0007097200 0.0006036200
@ -4285,7 +4285,7 @@
0.0007401100 -0.0009584300 -0.0006730800
-0.0004128000 -0.0009583300 -0.0014781500
0.0016794300 0.0025007000 -0.0009357000
# File: 65
# File: 65
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3877101200 -0.0006566300 -0.0005624700
@ -4352,7 +4352,7 @@
-0.0012979800 0.0027512600 -0.0011340100
-0.0024486000 0.0027516400 -0.0010138900
-0.0003589900 -0.0012082200 -0.0004789200
# File: 66
# File: 66
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3865144500 0.0061372400 0.0006681700
@ -4419,7 +4419,7 @@
-0.0021397600 0.0019201100 -0.0006754500
-0.0032833000 0.0019121500 -0.0014748800
0.0025075100 0.0016592400 -0.0004717200
# File: 67
# File: 67
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3877662600 -0.0062136000 -0.0006737600
@ -4486,7 +4486,7 @@
0.0015710300 -0.0001165500 -0.0011316200
0.0004331200 -0.0001299900 -0.0010173700
-0.0011977900 -0.0003775500 -0.0009429200
# File: 68
# File: 68
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3865344000 0.0006871300 0.0006262400
@ -4553,7 +4553,7 @@
-0.0005099800 0.0006694200 -0.0009045200
-0.0011988100 0.0011240500 -0.0012451100
0.0008900000 0.0004125900 -0.0007309200
# File: 69
# File: 69
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3876998100 -0.0006340500 -0.0005784300
@ -4620,7 +4620,7 @@
-0.0000508900 0.0011312300 -0.0008791000
-0.0016594800 0.0006612200 -0.0012236700
0.0004274200 0.0008721900 -0.0007070800
# File: 70
# File: 70
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3886130400 0.0012989700 0.0009065000
@ -4687,7 +4687,7 @@
0.0007430100 0.0027504900 -0.0006743100
-0.0004148900 0.0027508000 -0.0014754200
0.0016837000 -0.0012097700 -0.0009351900
# File: 71
# File: 71
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3856180300 -0.0012628200 -0.0009431200
@ -4754,7 +4754,7 @@
-0.0012931300 -0.0009576000 -0.0011341500
-0.0024543900 -0.0009572700 -0.0010177700
-0.0003559400 0.0025020800 -0.0004780700
# File: 72
# File: 72
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3859265400 -0.0013797000 0.0008889700
@ -4821,7 +4821,7 @@
0.0015858200 0.0019207700 -0.0011344500
0.0004156900 0.0019106000 -0.0010157700
-0.0011845600 0.0016601200 -0.0009374400
# File: 73
# File: 73
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3883136000 0.0014236700 -0.0009261400
@ -4888,7 +4888,7 @@
-0.0021243800 -0.0001173300 -0.0006734000
-0.0032956100 -0.0001280100 -0.0014781200
0.0025232600 -0.0003783100 -0.0004760100
# File: 74
# File: 74
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3861980900 0.0008659800 -0.0002779800
@ -4955,7 +4955,7 @@
-0.0005032000 0.0011306600 -0.0009311900
-0.0012074000 0.0006630200 -0.0012728300
0.0008959200 0.0008715600 -0.0007075300
# File: 75
# File: 75
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3880827600 -0.0008741600 0.0002767600
@ -5022,7 +5022,7 @@
-0.0000435700 0.0006699300 -0.0009005800
-0.0016648400 0.0011222300 -0.0012442300
0.0004356300 0.0004130400 -0.0006822200
# File: 76
# File: 76
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3862414400 -0.0014170400 0.0012458700
@ -5089,7 +5089,7 @@
0.0052838900 0.0065513300 0.0017717300
0.0042604800 0.0066917200 -0.0040095600
-0.0050274000 0.0064415600 0.0020607000
# File: 77
# File: 77
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3880687100 0.0014589100 -0.0012122600
@ -5156,7 +5156,7 @@
-0.0059670400 -0.0048984900 -0.0036766400
-0.0069966500 -0.0047588400 0.0014194800
0.0062227500 -0.0050093600 -0.0033773900
# File: 78
# File: 78
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3874141000 0.0009029600 0.0009029600
@ -5223,7 +5223,7 @@
0.0053707300 0.0064643000 0.0017679900
0.0043696100 0.0065762200 -0.0040139200
0.0063081900 -0.0049228100 -0.0033764100
# File: 79
# File: 79
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3868619100 -0.0009094200 -0.0009094200
@ -5290,7 +5290,7 @@
-0.0060795000 -0.0047858400 -0.0036729000
-0.0070800600 -0.0046688300 0.0014239100
-0.0051382300 0.0063296700 0.0020597900
# File: 80
# File: 80
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3211005800 0.0983802600 0.0681944700
@ -5357,7 +5357,7 @@
-0.0058284400 0.0065524200 -0.0035989100
-0.0071496900 0.0067087300 0.0015349700
0.0063506500 0.0064627000 -0.0035248000
# File: 81
# File: 81
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4586056000 -0.1012365500 -0.0738186000
@ -5424,7 +5424,7 @@
0.0054033900 -0.0049003500 0.0018883500
0.0041555200 -0.0047752100 -0.0039329200
-0.0048972000 -0.0050287000 0.0020126400
# File: 82
# File: 82
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.2913478900 0.0661853000 0.0661853000
@ -5491,7 +5491,7 @@
0.0055173300 -0.0047832600 0.0018558400
0.0042153600 -0.0046763900 -0.0038892000
0.0064293000 0.0063452500 -0.0034525200
# File: 83
# File: 83
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4853727000 -0.0714499400 -0.0714499400
@ -5558,7 +5558,7 @@
-0.0059156800 0.0064617100 -0.0035662600
-0.0072338300 0.0065833700 0.0014926000
-0.0049494500 -0.0049385400 0.0019403800
# File: 84
# File: 84
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3885702100 -0.0009092700 0.0011596100
@ -5625,7 +5625,7 @@
-0.0002778200 0.0011347300 -0.0006699400
-0.0143158300 0.0036601700 -0.0040169000
0.0006363400 0.0008652600 -0.0009305500
# File: 85
# File: 85
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3857465300 0.0008743800 -0.0011932500
@ -5692,7 +5692,7 @@
-0.0002520000 0.0006797200 -0.0011307000
0.0113446000 -0.0017760200 0.0014182900
0.0006636600 0.0004054600 -0.0004769600
# File: 86
# File: 86
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3880050000 -0.0002770600 -0.0009414100
@ -5759,7 +5759,7 @@
-0.0005049300 0.0019247100 -0.0027502400
-0.0041040500 0.0065335400 -0.0068057100
0.0004320300 0.0016544400 0.0011529700
# File: 87
# File: 87
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3862632000 0.0002762500 0.0009458900
@ -5826,7 +5826,7 @@
-0.0000482600 -0.0001131200 0.0009575200
0.0013356500 -0.0049100000 0.0044416900
0.0008918500 -0.0003810200 -0.0025520200
# File: 88
# File: 88
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3858913900 -0.0009234500 -0.0015271400
@ -5893,7 +5893,7 @@
-0.0005056200 -0.0009435800 0.0001169200
0.0013349100 -0.0047989100 0.0045538300
0.0008912700 0.0024833800 0.0003138500
# File: 89
# File: 89
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3884200000 0.0008891100 0.0014854500
@ -5960,7 +5960,7 @@
-0.0000477000 0.0027659900 -0.0019204300
-0.0041034800 0.0064484000 -0.0068922100
0.0004325400 -0.0012207500 -0.0017236200
# File: 90
# File: 90
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3864728300 -0.0006416600 0.0006504400
@ -6027,7 +6027,7 @@
-0.0130553100 0.0035682300 0.0017564400
-0.0014586200 0.0011156000 -0.0014723400
-0.0122188600 0.0034099500 -0.0034805500
# File: 91
# File: 91
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3878434300 0.0006760100 -0.0007035700
@ -6094,7 +6094,7 @@
0.0126078200 -0.0018665200 -0.0036703700
-0.0014308900 0.0006556800 -0.0010134700
0.0134373400 -0.0020262700 0.0019604500
# File: 92
# File: 92
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3878116200 0.0006981100 -0.0007273500
@ -6161,7 +6161,7 @@
-0.0030503900 0.0067069300 0.0047813300
-0.0016629600 0.0019053900 0.0006129500
-0.0020098900 0.0062850000 -0.0062672500
# File: 93
# File: 93
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3864966900 -0.0006575700 0.0006738200
@ -6228,7 +6228,7 @@
0.0023991700 -0.0047448400 -0.0064606500
-0.0012029700 -0.0001306200 -0.0030911000
0.0034310000 -0.0051621700 0.0049830000
# File: 94
# File: 94
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3863981600 -0.0006931100 0.0062060800
@ -6295,7 +6295,7 @@
-0.0030472200 0.0065909100 0.0048991900
-0.0012059600 0.0027342100 -0.0002257400
0.0034331700 -0.0050511800 0.0050955100
# File: 95
# File: 95
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3878630400 0.0006792800 -0.0061293100
@ -6362,7 +6362,7 @@
0.0023960300 -0.0046542400 -0.0065522700
-0.0016599800 -0.0009707500 -0.0022631300
-0.0020116500 0.0061994200 -0.0063544700
# File: 96
# File: 96
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4431401500 0.0880460900 -0.0541813800
@ -6429,7 +6429,7 @@
-0.0005094300 0.0019291800 0.0009563400
-0.0042029900 0.0066921500 0.0044279700
0.0004246500 0.0016526800 -0.0025358900
# File: 97
# File: 97
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3262487300 -0.0906604000 0.0588956600
@ -6496,7 +6496,7 @@
-0.0000454100 -0.0001253700 -0.0027498300
0.0012412200 -0.0047600400 -0.0067927200
0.0009008800 -0.0003713100 0.0011358000
# File: 98
# File: 98
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.2940771700 -0.0608832600 0.0608832600
@ -6563,7 +6563,7 @@
-0.0002923700 0.0011314200 -0.0011314200
-0.0142159600 0.0035675800 0.0014337200
0.0006519900 0.0008623100 -0.0004661800
# File: 99
# File: 99
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4772149200 0.0558590700 -0.0558590700
@ -6630,7 +6630,7 @@
-0.0002860100 0.0006694100 -0.0006694100
0.0114545300 -0.0018949100 -0.0040316700
0.0006967200 0.0004222600 -0.0009412000
# File: 100
# File: 100
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3880204000 -0.0014488000 -0.0012459200
@ -6697,7 +6697,7 @@
-0.0029475100 0.0065539800 -0.0064650100
-0.0016597400 0.0019100300 -0.0030938100
-0.0021054100 0.0064426100 0.0049802900
# File: 101
# File: 101
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3862166000 0.0014924900 0.0012097600
@ -6764,7 +6764,7 @@
0.0024908700 -0.0049007500 0.0047856000
-0.0012048400 -0.0001276200 0.0006156000
0.0033326200 -0.0050095600 -0.0062642000
# File: 102
# File: 102
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3874151800 -0.0009099000 0.0009099000
@ -6831,7 +6831,7 @@
-0.0131545000 0.0036741100 -0.0036741100
-0.0014335500 0.0011210400 -0.0010138000
-0.0121162800 0.0033085900 0.0019596200
# File: 103
# File: 103
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3868570300 0.0009038300 -0.0009038300
@ -6898,7 +6898,7 @@
0.0124946500 -0.0017608400 0.0017608400
-0.0014079300 0.0006645500 -0.0014714900
0.0135465500 -0.0021376800 -0.0034807400
# File: 104
# File: 104
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3878324600 0.0006596900 -0.0006590900
@ -6965,7 +6965,7 @@
-0.0000471500 0.0019228400 0.0009415500
0.0012373600 0.0065322500 0.0043130900
0.0008901600 0.0016570600 -0.0025729300
# File: 105
# File: 105
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3864915800 -0.0006150800 0.0006212900
@ -7032,7 +7032,7 @@
-0.0005074400 -0.0001110600 -0.0027639700
-0.0042000200 -0.0049085000 -0.0069350200
0.0004350300 -0.0003834500 0.0011442200
# File: 106
# File: 106
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3810058900 -0.0006825900 0.0006825900
@ -7099,7 +7099,7 @@
-0.0003021900 0.0006784400 -0.0006784400
-0.0142093300 -0.0017819600 -0.0039173300
0.0006597600 0.0004048800 -0.0009323600
# File: 107
# File: 107
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3931887400 0.0006721900 -0.0006721900
@ -7166,7 +7166,7 @@
-0.0002759000 0.0011359200 -0.0011359200
0.0114484900 0.0036672200 0.0015314900
0.0006889400 0.0008657000 -0.0004891300
# File: 108
# File: 108
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3878723300 -0.0005436600 -0.0007568800
@ -7233,7 +7233,7 @@
0.0024919900 0.0067073200 -0.0065926700
-0.0012018900 0.0019057400 -0.0031075100
0.0033321700 0.0062821400 0.0048512500
# File: 109
# File: 109
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3863927700 0.0005447200 0.0007660900
@ -7300,7 +7300,7 @@
-0.0029492700 -0.0047455900 0.0046571200
-0.0016622200 -0.0001311500 0.0006000500
-0.0021050200 -0.0051594200 -0.0063954500
# File: 110
# File: 110
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3876735600 -0.0007454400 0.0007454400
@ -7367,7 +7367,7 @@
-0.0131544200 -0.0018697900 0.0018697900
-0.0014333600 0.0006548200 -0.0014805000
-0.0121095900 -0.0020325500 -0.0033792900
# File: 111
# File: 111
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3866021800 0.0007360500 -0.0007360500

View File

@ -13,4 +13,4 @@ Direct
0.1250000000000000 0.1250000000000000 0.1250000000000000
0.1250000000000000 0.6250000000000000 0.6250000000000000
0.6250000000000000 0.1250000000000000 0.6250000000000000
0.6250000000000000 0.6250000000000000 0.1250000000000000
0.6250000000000000 0.6250000000000000 0.1250000000000000

View File

@ -849,4 +849,4 @@ displacement_pairs:
displacement_pair_info:
number_of_singles: 1
number_of_pairs: 110
number_of_pairs: 110

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3968201400 0.0000000000 0.0000000000
0.0005878300 0.0000000000 0.0000000000
@ -64,7 +64,7 @@
-0.0003760000 0.0009874300 -0.0009874300
-0.0014775900 0.0009712500 -0.0011918000
0.0006882300 0.0007423100 -0.0007584100
# File: 2
# File: 2
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 1 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.6772678900 -0.2819277000 -0.0358889800
@ -131,7 +131,7 @@
0.0000464900 0.0006116300 -0.0025198500
-0.0018160900 0.0013707700 -0.0027515600
0.0017720700 0.0018204600 -0.0018547700
# File: 3
# File: 3
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 1 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.1163652300 0.2806988700 0.0061513100
@ -198,7 +198,7 @@
-0.0008199100 0.0013657300 0.0005330100
-0.0011352000 0.0005498300 0.0003556500
-0.0003131800 -0.0002539400 0.0002896400
# File: 4
# File: 4
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 2 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3964039100 0.0009276500 0.0000337600
@ -265,7 +265,7 @@
0.1117584500 0.1131205300 -0.0911710900
-0.0004548000 0.0019931600 -0.0022553100
0.0003279600 0.0011691400 -0.0022945600
# File: 5
# File: 5
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 2 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3972353300 -0.0009280600 -0.0000057100
@ -332,7 +332,7 @@
-0.1221147600 -0.1207500000 0.1022652300
-0.0024204800 0.0000286000 -0.0001849800
0.0010493100 0.0002964800 0.0007646800
# File: 6
# File: 6
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3958914300 0.0004157000 0.0000229300
@ -399,7 +399,7 @@
0.0006464300 0.0020121900 -0.0020474300
0.1106625200 0.1131050100 -0.0913683000
0.0011139600 0.0003857000 -0.0022942900
# File: 7
# File: 7
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3977497000 -0.0004160400 0.0000051800
@ -466,7 +466,7 @@
-0.0013180300 0.0000427700 0.0000157800
-0.1232211600 -0.1207674400 0.1020544100
0.0002429800 0.0011004000 0.0007644300
# File: 8
# File: 8
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3968203900 0.0000278800 0.0013129200
@ -533,7 +533,7 @@
-0.0011163900 0.0002459000 0.0051490500
-0.0724609700 -0.0700235500 0.0971595300
-0.0003210400 -0.0004160600 -0.0022806600
# File: 9
# File: 9
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3968876300 -0.0000693300 0.0000115000
@ -600,7 +600,7 @@
-0.0007362400 0.0014161800 -0.0025251600
-0.0010537100 0.0006116500 -0.0027311800
0.1128203000 0.1128809000 -0.0909203700
# File: 10
# File: 10
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3967475700 0.0000724300 0.0000190700
@ -667,7 +667,7 @@
-0.0000142400 0.0005395400 0.0005371300
-0.0019208800 0.0013313900 0.0003344600
-0.1210479300 -0.1210000400 0.1024740800
# File: 11
# File: 11
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3968156800 0.0000303700 -0.0116038000
@ -734,7 +734,7 @@
-0.0015371900 -0.0000160000 -0.0025086400
-0.0024877400 -0.0001889900 -0.0027123500
-0.0703073500 -0.0702668900 0.0975909800
# File: 12
# File: 12
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 7 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.4050146400 -0.0000691500 -0.0000064300
@ -801,7 +801,7 @@
-0.0002384800 0.0011246300 -0.0020716000
-0.0017161900 0.0007312100 -0.0025890200
0.0016780500 0.0055644300 -0.0018076600
# File: 13
# File: 13
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 7 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3886148600 0.0000702800 0.0000012200
@ -868,7 +868,7 @@
-0.0005280300 0.0008352400 0.0000950800
-0.0012547600 0.0011947300 0.0002065900
-0.0002881700 -0.0040945700 0.0002556100
# File: 14
# File: 14
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 8 0.0212132034355964 0.0212132034355964 0.0000000000000000
-0.3963724100 0.0004475500 0.0000131500
@ -935,7 +935,7 @@
0.0044454200 0.0019837800 -0.0020355600
-0.0004812200 0.0057953700 -0.0022382200
0.0004486900 0.0005045100 -0.0021577900
# File: 15
# File: 15
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 8 -0.0212132034355964 -0.0212132034355964 0.0000000000000000
-0.3972681100 -0.0004471900 -0.0000021500
@ -1002,7 +1002,7 @@
-0.0052118400 0.0000048600 0.0000254700
-0.0024603000 -0.0038683800 -0.0001805700
0.0009116500 0.0009644200 0.0006421200
# File: 16
# File: 16
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3939519800 0.0058183400 0.0055670600
@ -1069,7 +1069,7 @@
-0.0011158200 0.0071295100 -0.0017236700
-0.0021824700 0.0016148900 -0.0018983100
-0.0000840200 0.0001823900 -0.0015351500
# File: 17
# File: 17
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3995693700 -0.0056732700 -0.0054537400
@ -1136,7 +1136,7 @@
0.0003523300 -0.0050800000 -0.0002632500
-0.0007213000 0.0002821600 -0.0004471400
0.0014498900 0.0013010900 0.0000075200
# File: 18
# File: 18
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4096762700 -0.0027672400 -0.0027672400
@ -1203,7 +1203,7 @@
0.0003150300 0.0002352300 -0.0002470100
0.0045852800 0.0002387800 -0.0004704200
0.0001221800 -0.0000216700 0.0000057500
# File: 19
# File: 19
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 9 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3840574800 0.0026527000 0.0026527000
@ -1270,7 +1270,7 @@
-0.0010215900 0.0016873400 -0.0016892500
-0.0076171900 0.0017148000 -0.0019246100
0.0012551900 0.0015167100 -0.0015331800
# File: 20
# File: 20
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3965841300 0.0010517400 -0.0018379200
@ -1337,7 +1337,7 @@
-0.0015335700 -0.0005359400 -0.0019966100
-0.0022513500 0.0004076500 -0.0019663500
-0.0000156900 0.0013874300 -0.0014644100
# File: 21
# File: 21
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3970558800 -0.0010481300 0.0018526200
@ -1404,7 +1404,7 @@
0.0008148100 0.0024666500 -0.0000159900
-0.0007144900 0.0015330300 -0.0004278200
0.0014437700 0.0000528000 -0.0000142700
# File: 22
# File: 22
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3968794600 -0.0002355700 -0.0002355700
@ -1471,7 +1471,7 @@
-0.0018535900 -0.0002057500 -0.0000138000
-0.0020395200 0.0002080800 -0.0004291800
0.0067518800 0.0000166500 -0.0000310300
# File: 23
# File: 23
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 10 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3967852100 0.0002417800 0.0002417800
@ -1538,7 +1538,7 @@
0.0011463600 0.0021476500 -0.0019986700
-0.0009144400 0.0017446200 -0.0019649800
-0.0054512100 0.0014794600 -0.0014974700
# File: 24
# File: 24
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3942721300 0.0055232600 -0.0055693500
@ -1605,7 +1605,7 @@
-0.0011499800 0.0004245700 -0.0017635200
-0.0026397000 -0.0005482000 -0.0022072200
-0.0000416200 0.0068803000 -0.0014963400
# File: 25
# File: 25
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3994511000 -0.0056719200 0.0056871700
@ -1672,7 +1672,7 @@
0.0003878200 0.0015493200 -0.0002221700
-0.0002819400 0.0024461600 -0.0002141500
0.0014056300 -0.0053204600 -0.0000317000
# File: 26
# File: 26
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4094040500 -0.0026590200 0.0026590200
@ -1739,7 +1739,7 @@
-0.0009416200 0.0002241800 -0.0002241800
-0.0029449200 -0.0002196900 -0.0002196900
0.0013761300 -0.0000185400 -0.0000185400
# File: 27
# File: 27
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 11 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3841483200 0.0027636500 -0.0027636500
@ -1806,7 +1806,7 @@
0.0001909600 0.0017614800 -0.0017614800
0.0000339600 0.0021291800 -0.0022017700
0.0000443400 0.0014513300 -0.0014599500
# File: 28
# File: 28
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3965713400 0.0010774600 0.0018488900
@ -1873,7 +1873,7 @@
-0.0010825200 0.0016309700 -0.0016914100
-0.0022139600 0.0071054400 -0.0019318800
-0.0004716000 -0.0007792000 -0.0017669400
# File: 29
# File: 29
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3970678900 -0.0010817900 -0.0018342900
@ -1940,7 +1940,7 @@
0.0003826600 0.0002992900 -0.0002457100
-0.0007528800 -0.0050880700 -0.0004633000
0.0018805300 0.0022197700 0.0002127400
# File: 30
# File: 30
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3968055600 -0.0002485000 0.0002485000
@ -2007,7 +2007,7 @@
0.0056869600 0.0002605900 -0.0002605900
-0.0007907600 0.0002139400 -0.0004468000
-0.0007907600 -0.0004468000 0.0002139400
# File: 31
# File: 31
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 12 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3968098400 0.0002423000 -0.0002423000
@ -2074,7 +2074,7 @@
-0.0065142400 0.0017257200 -0.0017257200
-0.0021197300 0.0016763700 -0.0018990300
0.0022111400 0.0018986500 -0.0017684800
# File: 32
# File: 32
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3912195600 0.0028279300 0.0054555400
@ -2141,7 +2141,7 @@
0.0002656400 0.0002862400 -0.0016890300
0.0046556100 0.0002316900 -0.0019368100
0.0001290900 -0.0000268600 -0.0015301000
# File: 33
# File: 33
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4022598900 -0.0027286100 -0.0053310000
@ -2208,7 +2208,7 @@
-0.0010619900 0.0017406700 -0.0002478100
-0.0075354300 0.0016990100 -0.0004580200
0.0012456800 0.0015011500 0.0000026100
# File: 34
# File: 34
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3994687700 -0.0127760000 -0.0027506100
@ -2275,7 +2275,7 @@
-0.0011004300 0.0070552500 -0.0002603300
-0.0022238500 0.0016535300 -0.0004484400
-0.0000694700 0.0001870000 -0.0000080800
# File: 35
# File: 35
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3942633300 0.0126801700 0.0026584600
@ -2342,7 +2342,7 @@
0.0003603700 -0.0051557700 -0.0017261500
-0.0007833600 0.0003330800 -0.0018971100
0.0014562500 0.0012990700 -0.0015190500
# File: 36
# File: 36
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3913025800 0.0026982300 0.0055713200
@ -2409,7 +2409,7 @@
-0.0011172800 0.0017446000 -0.0003033800
-0.0022495100 0.0017173300 -0.0004984200
-0.0000734500 0.0015063600 -0.0013129100
# File: 37
# File: 37
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.4022123900 -0.0025993400 -0.0054154600
@ -2476,7 +2476,7 @@
0.0003277600 0.0002820900 -0.0016269400
-0.0007572900 0.0002624200 -0.0018406900
0.0014602000 -0.0000321000 -0.0002026000
# File: 38
# File: 38
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3910727700 0.0025787300 -0.0056932700
@ -2543,7 +2543,7 @@
-0.0018978800 -0.0001687600 -0.0019961700
-0.0020425100 0.0001951200 -0.0019656400
0.0068282400 -0.0000010700 -0.0014910300
# File: 39
# File: 39
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4026992700 -0.0026814200 0.0057988800
@ -2610,7 +2610,7 @@
0.0011020100 0.0021762000 -0.0000163700
-0.0009140200 0.0017362800 -0.0004283900
-0.0053761900 0.0014741000 -0.0000373600
# File: 40
# File: 40
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3995611300 -0.0126866900 0.0026337500
@ -2677,7 +2677,7 @@
-0.0015659200 -0.0004928900 -0.0000141500
-0.0022390100 0.0004112000 -0.0004265700
-0.0000770100 0.0014263300 -0.0000135700
# File: 41
# File: 41
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3939515700 0.0127725200 -0.0027612100
@ -2744,7 +2744,7 @@
0.0007814900 0.0025119400 -0.0019984800
-0.0007057500 0.0015317400 -0.0019676600
0.0014017500 0.0001028200 -0.0014650400
# File: 42
# File: 42
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.4025581500 -0.0028185000 0.0059146900
@ -2811,7 +2811,7 @@
-0.0013599000 0.0019795600 -0.0013599000
-0.0022392200 0.0017345700 -0.0017501200
-0.0000726800 0.0014863900 -0.0000726800
# File: 43
# File: 43
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3911868900 0.0027150800 -0.0057777000
@ -2878,7 +2878,7 @@
0.0006137700 -0.0000098100 -0.0006209000
-0.0007054500 0.0001968400 -0.0006323400
0.0013966300 0.0000364600 -0.0013995100
# File: 44
# File: 44
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3957578500 0.0002274500 -0.0018267400
@ -2945,7 +2945,7 @@
-0.0009382200 0.0002145700 -0.0017610700
-0.0029989000 -0.0001875700 -0.0022004400
0.0013316800 0.0000350700 -0.0014653000
# File: 45
# File: 45
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3978777000 -0.0002281400 0.0018408600
@ -3012,7 +3012,7 @@
0.0001853400 0.0017497100 -0.0002243400
-0.0000005100 0.0021623500 -0.0002207700
-0.0000001900 0.0015017300 -0.0000135900
# File: 46
# File: 46
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3970584800 -0.0000318200 -0.0002415400
@ -3079,7 +3079,7 @@
-0.0011399000 0.0004271000 -0.0002240900
-0.0026680000 -0.0005064400 -0.0002201300
-0.0000368000 0.0068050900 -0.0000324700
# File: 47
# File: 47
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3965748200 0.0000071500 0.0002474000
@ -3146,7 +3146,7 @@
0.0003989800 0.0015490900 -0.0017614400
-0.0003200500 0.0024925400 -0.0022011000
0.0014248400 -0.0053955600 -0.0014958800
# File: 48
# File: 48
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3986710000 0.0002397000 0.0010777700
@ -3213,7 +3213,7 @@
-0.0011390900 0.0017506800 -0.0015479900
-0.0024647200 0.0019577600 -0.0015665900
-0.0000541300 0.0015064000 -0.0000691200
# File: 49
# File: 49
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3949538600 -0.0002400900 -0.0010741900
@ -3280,7 +3280,7 @@
0.0003980400 0.0002134600 -0.0004256000
-0.0004852800 -0.0000208000 -0.0008231000
0.0013923400 0.0000303700 -0.0014030900
# File: 50
# File: 50
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3957538500 0.0002575200 0.0018623500
@ -3347,7 +3347,7 @@
0.0057651900 0.0002479800 -0.0017238900
-0.0008339700 0.0002666500 -0.0018965600
-0.0008351500 -0.0004170400 -0.0017689100
# File: 51
# File: 51
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3978896800 -0.0002574400 -0.0018471800
@ -3414,7 +3414,7 @@
-0.0064414000 0.0017154000 -0.0002624400
-0.0021658300 0.0017271400 -0.0004489800
0.0021669000 0.0019346300 0.0002144700
# File: 52
# File: 52
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3970639900 -0.0000139500 0.0002432500
@ -3481,7 +3481,7 @@
-0.0011329900 0.0016764500 -0.0002466300
-0.0022029900 0.0070319200 -0.0004637600
-0.0005058800 -0.0007372000 0.0002124300
# File: 53
# File: 53
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3965817100 0.0000384800 -0.0002364200
@ -3548,7 +3548,7 @@
0.0003294700 0.0003431500 -0.0016904400
-0.0007406600 -0.0051656500 -0.0019314200
0.0018493400 0.0022663500 -0.0017666800
# File: 54
# File: 54
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3949971800 -0.0002435100 0.0010573300
@ -3615,7 +3615,7 @@
-0.0011350900 0.0017299500 -0.0002985900
-0.0022181900 0.0017312900 -0.0005033900
-0.0002985900 0.0017299500 -0.0011350900
# File: 55
# File: 55
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3986565100 0.0002437500 -0.0010526900
@ -3682,7 +3682,7 @@
0.0003317500 0.0002827400 -0.0016319700
-0.0007749800 0.0002623800 -0.0018356300
0.0016801100 -0.0002501300 -0.0003876000
# File: 56
# File: 56
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3960466400 -0.0005514700 0.0007511800
@ -3749,7 +3749,7 @@
0.0014612500 0.0020547600 -0.0007450400
0.0003737100 0.0020338600 -0.0014332700
-0.0011628000 0.0018062700 -0.0005156800
# File: 57
# File: 57
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3976044600 0.0005523200 -0.0007620200
@ -3816,7 +3816,7 @@
-0.0022271400 -0.0000759100 -0.0012301000
-0.0033142800 -0.0000959500 -0.0009505800
0.0025244000 -0.0003252900 -0.0010008000
# File: 58
# File: 58
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3973832200 0.0007730100 0.0007730100
@ -3883,7 +3883,7 @@
0.0006868500 0.0028392200 -0.0012303600
-0.0004113300 0.0028070900 -0.0009506800
0.0017514700 -0.0011097900 -0.0005153300
# File: 59
# File: 59
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 33 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3962559000 -0.0007839200 -0.0007839200
@ -3950,7 +3950,7 @@
-0.0014424000 -0.0008500600 -0.0007447900
-0.0025399700 -0.0008793300 -0.0014333300
-0.0003791400 0.0025800100 -0.0010013400
# File: 60
# File: 60
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3960474100 0.0006911400 0.0007209100
@ -4017,7 +4017,7 @@
-0.0022137400 0.0020558900 -0.0012289800
-0.0033275400 0.0020334800 -0.0009482100
0.0025408700 0.0018076200 -0.0009994900
# File: 61
# File: 61
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3975352400 -0.0006467500 -0.0006829900
@ -4084,7 +4084,7 @@
0.0014767300 -0.0000775100 -0.0007459100
0.0003580500 -0.0000957300 -0.0014349500
-0.0011502200 -0.0003267200 -0.0005175100
# File: 62
# File: 62
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3906880500 0.0007307200 0.0007307200
@ -4151,7 +4151,7 @@
0.0006876000 -0.0008504400 -0.0012322800
-0.0004124500 -0.0008775100 -0.0009489100
0.0017561600 0.0025834700 -0.0005201800
# File: 63
# File: 63
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 34 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4030255700 -0.0007421700 -0.0007421700
@ -4218,7 +4218,7 @@
-0.0014352900 0.0028393000 -0.0007422000
-0.0025465100 0.0028048100 -0.0014342400
-0.0003758000 -0.0011128400 -0.0009969400
# File: 64
# File: 64
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3961737000 0.0007608300 0.0007064700
@ -4285,7 +4285,7 @@
0.0006869100 -0.0008643700 -0.0007447400
-0.0004121500 -0.0008667400 -0.0014358000
0.0017510000 0.0025938900 -0.0009986600
# File: 65
# File: 65
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3974171700 -0.0007093400 -0.0006649700
@ -4352,7 +4352,7 @@
-0.0014422600 0.0028247900 -0.0012299900
-0.0025392100 0.0028234400 -0.0009471900
-0.0003789200 -0.0010944000 -0.0005185200
# File: 66
# File: 66
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3961433300 0.0060622000 0.0007220800
@ -4419,7 +4419,7 @@
-0.0022283500 0.0020495000 -0.0007472100
-0.0033182900 0.0020399000 -0.0014323700
0.0025234800 0.0018086300 -0.0005108600
# File: 67
# File: 67
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3975026300 -0.0061376400 -0.0007293900
@ -4486,7 +4486,7 @@
0.0014622900 -0.0000786500 -0.0012274900
0.0003778600 -0.0000942100 -0.0009508600
-0.0011616400 -0.0003196100 -0.0010063200
# File: 68
# File: 68
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3961125800 0.0007366000 0.0006512200
@ -4553,7 +4553,7 @@
-0.0006203200 0.0007414600 -0.0009974600
-0.0012321100 0.0012175300 -0.0011995500
0.0009286100 0.0005039100 -0.0007920700
# File: 69
# File: 69
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3974849600 -0.0006850500 -0.0006030900
@ -4620,7 +4620,7 @@
-0.0001374800 0.0012272100 -0.0009528800
-0.0017169200 0.0007305900 -0.0011594300
0.0004412000 0.0009873200 -0.0007494500
# File: 70
# File: 70
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3983412100 0.0012465100 0.0009906200
@ -4687,7 +4687,7 @@
0.0006894700 0.0028241900 -0.0007455800
-0.0004142700 0.0028222400 -0.0014325600
0.0017550100 -0.0010964100 -0.0009985600
# File: 71
# File: 71
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3952542700 -0.0012124900 -0.0010290400
@ -4754,7 +4754,7 @@
-0.0014370900 -0.0008636900 -0.0012297100
-0.0025449300 -0.0008658100 -0.0009514600
-0.0003748500 0.0025960700 -0.0005177300
# File: 72
# File: 72
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3956611600 -0.0014223600 0.0009709800
@ -4821,7 +4821,7 @@
0.0014767500 0.0020501100 -0.0012302400
0.0003607500 0.0020380100 -0.0009486600
-0.0011486200 0.0018093900 -0.0010012400
# File: 73
# File: 73
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3979468600 0.0014677600 -0.0010099800
@ -4888,7 +4888,7 @@
-0.0022135500 -0.0000793100 -0.0007448500
-0.0033301500 -0.0000922000 -0.0014350500
0.0025393600 -0.0003204400 -0.0005152800
# File: 74
# File: 74
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3957947400 0.0009494800 -0.0003788600
@ -4955,7 +4955,7 @@
-0.0006146600 0.0012267600 -0.0010249800
-0.0012401100 0.0007324300 -0.0012281200
0.0009333200 0.0009868900 -0.0007684300
# File: 75
# File: 75
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3978485800 -0.0009568600 0.0003728800
@ -5022,7 +5022,7 @@
-0.0001307100 0.0007419500 -0.0009746000
-0.0017211600 0.0012155700 -0.0011800900
0.0004491400 0.0005042700 -0.0007237000
# File: 76
# File: 76
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3958428300 -0.0014597800 0.0011913500
@ -5089,7 +5089,7 @@
0.0051363000 0.0065841100 0.0016759800
0.0041531900 0.0067145400 -0.0039459300
-0.0049390600 0.0064864900 0.0020007300
# File: 77
# File: 77
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3978331200 0.0015031600 -0.0011598500
@ -5156,7 +5156,7 @@
-0.0060033500 -0.0047559900 -0.0037523000
-0.0069926400 -0.0046258300 0.0014612500
0.0061995600 -0.0048546800 -0.0034162600
# File: 78
# File: 78
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3971898300 0.0009842300 0.0009842300
@ -5223,7 +5223,7 @@
0.0052211100 0.0064986700 0.0016718500
0.0042657900 0.0065951800 -0.0039506000
0.0062829300 -0.0047702600 -0.0034153900
# File: 79
# File: 79
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 39 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3964552900 -0.0009894900 -0.0009894900
@ -5290,7 +5290,7 @@
-0.0061194500 -0.0046397000 -0.0037478200
-0.0070741500 -0.0045377600 0.0014659400
-0.0050535900 0.0063708400 0.0019997700
# File: 80
# File: 80
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3259103400 0.1011996400 0.0731806400
@ -5357,7 +5357,7 @@
-0.0058795400 0.0065857300 -0.0036704000
-0.0071339400 0.0067334700 0.0015759200
0.0063148700 0.0065112900 -0.0035701800
# File: 81
# File: 81
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.4734658100 -0.1040813600 -0.0791169700
@ -5424,7 +5424,7 @@
0.0052433600 -0.0047589300 0.0017964300
0.0040636400 -0.0046444700 -0.0038603700
-0.0048236300 -0.0048780500 0.0019509300
# File: 82
# File: 82
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.2984766100 0.0710577600 0.0710577600
@ -5491,7 +5491,7 @@
0.0053588800 -0.0046358300 0.0017625400
0.0041196900 -0.0045453800 -0.0038215100
0.0063960300 0.0063885700 -0.0034945400
# File: 83
# File: 83
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 40 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4976123500 -0.0766133800 -0.0766133800
@ -5558,7 +5558,7 @@
-0.0059625600 0.0064947800 -0.0036361700
-0.0072202000 0.0066026400 0.0015382500
-0.0048723100 -0.0047884200 0.0018754700
# File: 84
# File: 84
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3982967000 -0.0009912600 0.0011047900
@ -5625,7 +5625,7 @@
-0.0003861000 0.0012296000 -0.0007420400
-0.0142556800 0.0037332000 -0.0039533800
0.0006523100 0.0009814200 -0.0009941000
# File: 85
# File: 85
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3953871700 0.0009543800 -0.0011362300
@ -5692,7 +5692,7 @@
-0.0003409200 0.0007513500 -0.0012266200
0.0112097700 -0.0016815100 0.0014600600
0.0006993500 0.0004973300 -0.0005166000
# File: 86
# File: 86
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3977680500 -0.0003737100 -0.0010249400
@ -5759,7 +5759,7 @@
-0.0006158000 0.0020540300 -0.0028240100
-0.0041367100 0.0065638900 -0.0067019100
0.0004458700 0.0018036100 0.0010909200
# File: 87
# File: 87
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3958649400 0.0003677000 0.0010280600
@ -5826,7 +5826,7 @@
-0.0001354800 -0.0000752000 0.0008634600
0.0012823500 -0.0047689200 0.0044337500
0.0009299700 -0.0003226500 -0.0025931000
# File: 88
# File: 88
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3956283600 -0.0010072400 -0.0015755800
@ -5893,7 +5893,7 @@
-0.0006164800 -0.0008500300 0.0000787900
0.0012815900 -0.0046546400 0.0045491100
0.0009292800 0.0025766100 0.0003078600
# File: 89
# File: 89
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3980447900 0.0009709500 0.0015326000
@ -5960,7 +5960,7 @@
-0.0001347700 0.0028393800 -0.0020496500
-0.0041361100 0.0064811000 -0.0067859400
0.0004465800 -0.0011061500 -0.0018207500
# File: 90
# File: 90
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3961290100 -0.0007461200 0.0007035400
@ -6027,7 +6027,7 @@
-0.0130642100 0.0036392300 0.0016600700
-0.0015134800 0.0012098800 -0.0014300000
-0.0120873000 0.0035048700 -0.0035231100
# File: 91
# File: 91
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3975508200 0.0007802300 -0.0007553200
@ -6094,7 +6094,7 @@
0.0124038900 -0.0017737800 -0.0037449400
-0.0014663200 0.0007260400 -0.0009473900
0.0133726000 -0.0019103800 0.0018967700
# File: 92
# File: 92
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3975983900 0.0007250100 -0.0007806300
@ -6161,7 +6161,7 @@
-0.0031411700 0.0067321800 0.0046355100
-0.0017199600 0.0020321600 0.0006568900
-0.0019710500 0.0063380300 -0.0062707700
# File: 93
# File: 93
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3960745200 -0.0006841200 0.0007287500
@ -6228,7 +6228,7 @@
0.0022884800 -0.0046101200 -0.0064947300
-0.0012356000 -0.0000941900 -0.0030259800
0.0034486000 -0.0049998600 0.0048693800
# File: 94
# File: 94
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 0.0300000000000000
-0.3960282200 -0.0007435200 0.0061319300
@ -6295,7 +6295,7 @@
-0.0031380800 0.0066111300 0.0047564300
-0.0012389000 0.0028057700 -0.0001255700
0.0034507000 -0.0048853100 0.0049856600
# File: 95
# File: 95
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 -0.0300000000000000
-0.3975945300 0.0007276400 -0.0060560800
@ -6362,7 +6362,7 @@
0.0022851100 -0.0045208400 -0.0065847600
-0.0017166900 -0.0008783300 -0.0022540700
-0.0019734900 0.0062546000 -0.0063553200
# File: 96
# File: 96
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.4571417700 0.0903113000 -0.0584047600
@ -6429,7 +6429,7 @@
-0.0006199600 0.0020587400 0.0008626400
-0.0042382900 0.0067158000 0.0044205900
0.0004377500 0.0018017100 -0.0025776600
# File: 97
# File: 97
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3313446300 -0.0929414100 0.0633816100
@ -6496,7 +6496,7 @@
-0.0001322600 -0.0000878000 -0.0028235700
0.0011829100 -0.0046276200 -0.0066884100
0.0009391500 -0.0003134200 0.0010745000
# File: 98
# File: 98
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3012259200 -0.0654834700 0.0654834700
@ -6563,7 +6563,7 @@
-0.0004016400 0.0012272000 -0.0012272000
-0.0141716700 0.0036370400 0.0014766100
0.0006679400 0.0009776600 -0.0005061300
# File: 99
# File: 99
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 51 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4893953100 0.0601783600 -0.0601783600
@ -6630,7 +6630,7 @@
-0.0003750300 0.0007416000 -0.0007416000
0.0113051700 -0.0018040000 -0.0039688600
0.0007326300 0.0005130700 -0.0010050100
# File: 100
# File: 100
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3977851900 -0.0014959500 -0.0011912300
@ -6697,7 +6697,7 @@
-0.0030341100 0.0065870500 -0.0064997600
-0.0017166400 0.0020374900 -0.0030292900
-0.0020709400 0.0064873400 0.0048654500
# File: 101
# File: 101
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3958154300 0.0015410800 0.0011570700
@ -6764,7 +6764,7 @@
0.0023835100 -0.0047589600 0.0046404200
-0.0012382300 -0.0000916700 0.0006601800
0.0033463000 -0.0048550600 -0.0062665500
# File: 102
# File: 102
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3971955700 -0.0009945400 0.0009945400
@ -6831,7 +6831,7 @@
-0.0131484300 0.0037489900 -0.0037489900
-0.0014878100 0.0012141900 -0.0009478800
-0.0120006500 0.0034003000 0.0018962100
# File: 103
# File: 103
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 52 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3964374700 0.0009893800 -0.0009893800
@ -6898,7 +6898,7 @@
0.0123058700 -0.0016643900 0.0016643900
-0.0014426300 0.0007341800 -0.0014293800
0.0134673900 -0.0020249000 -0.0035227600
# File: 104
# File: 104
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3975639300 0.0006856700 -0.0007647500
@ -6965,7 +6965,7 @@
-0.0001338000 0.0020517400 0.0008476000
0.0011797800 0.0065625300 0.0043187600
0.0009275700 0.0018060100 -0.0026144500
# File: 105
# File: 105
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3961222400 -0.0006409100 0.0007267500
@ -7032,7 +7032,7 @@
-0.0006182500 -0.0000728200 -0.0028369600
-0.0042363200 -0.0047672600 -0.0068177700
0.0004490500 -0.0003249000 0.0010833000
# File: 106
# File: 106
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3907636100 -0.0007364400 0.0007364400
@ -7099,7 +7099,7 @@
-0.0004116000 0.0007497500 -0.0007497500
-0.0141648000 -0.0016873900 -0.0038507500
0.0006760000 0.0004967400 -0.0009949100
# File: 107
# File: 107
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 53 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.4027991200 0.0007246700 -0.0007246700
@ -7166,7 +7166,7 @@
-0.0003647100 0.0012310600 -0.0012310600
0.0112994900 0.0037392300 0.0015765200
0.0007248500 0.0009818600 -0.0005281800
# File: 108
# File: 108
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 0.0300000000000000 0.0000000000000000
-0.3975728200 -0.0005715000 -0.0007755800
@ -7233,7 +7233,7 @@
0.0023849800 0.0067329400 -0.0066149700
-0.0012355600 0.0020327400 -0.0030428100
0.0033458600 0.0063346900 0.0047515800
# File: 109
# File: 109
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 -0.0300000000000000 0.0000000000000000
-0.3960568400 0.0005730200 0.0007858600
@ -7300,7 +7300,7 @@
-0.0030356600 -0.0046112600 0.0045244600
-0.0017194500 -0.0000949000 0.0006448100
-0.0020706100 -0.0049964900 -0.0063836800
# File: 110
# File: 110
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3973817100 -0.0007631700 0.0007631700
@ -7367,7 +7367,7 @@
-0.0131488400 -0.0017770900 0.0017770900
-0.0014875200 0.0007249800 -0.0014376700
-0.0119935800 -0.0019169100 -0.0034188000
# File: 111
# File: 111
# 1 0.0300000000000000 0.0000000000000000 0.0000000000000000
# 54 -0.0300000000000000 0.0000000000000000 0.0000000000000000
-0.3962594500 0.0007529500 -0.0007529500

View File

@ -13,4 +13,4 @@ Direct
0.1250000000000000 0.1250000000000000 0.1250000000000000
0.1250000000000000 0.6250000000000000 0.6250000000000000
0.6250000000000000 0.1250000000000000 0.6250000000000000
0.6250000000000000 0.6250000000000000 0.1250000000000000
0.6250000000000000 0.6250000000000000 0.1250000000000000

View File

@ -1,9 +1,9 @@
#!/usr/bin/env python
"""Example to run thermal conductivity of Si."""
import numpy as np
from phonopy.interface.vasp import read_vasp
from phono3py import Phono3py
import phono3py
from phono3py import Phono3py
def run_thermal_conductivity():
@ -11,24 +11,20 @@ def run_thermal_conductivity():
ph3 = phono3py.load("phono3py_disp.yaml", log_level=2)
ph3.mesh_numbers = [11, 11, 11]
ph3.init_phph_interaction()
ph3.run_thermal_conductivity(
temperatures=range(0, 1001, 10),
write_kappa=True)
ph3.run_thermal_conductivity(temperatures=range(0, 1001, 10), write_kappa=True)
# Conductivity_RTA object
cond_rta = ph3.thermal_conductivity
print(ph3.thermal_conductivity.kappa)
def create_supercells_with_displacements():
"""Create supercells with displacements."""
cell = read_vasp("POSCAR-unitcell")
ph3 = Phono3py(cell,
np.diag([2, 2, 2]),
primitive_matrix='F')
ph3 = Phono3py(cell, np.diag([2, 2, 2]), primitive_matrix="F")
ph3.generate_displacements(distance=0.03)
scells_with_disps = ph3.supercells_with_displacements
print(ph3.supercells_with_displacements) # List of PhonopyAtoms
print(ph3.displacements.shape) # (supercells, atoms, xyz)
if __name__ == '__main__':
if __name__ == "__main__":
create_supercells_with_displacements()
run_thermal_conductivity()

View File

@ -849,4 +849,4 @@ displacement_pairs:
displacement_pair_info:
number_of_singles: 1
number_of_pairs: 110
number_of_pairs: 110

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158902702 0.0000000000 0.0000000000
0.0000216298 0.0000000000 0.0000000000
@ -64,7 +64,7 @@
-0.0000126802 0.0000380200 -0.0000380200
-0.0000583502 0.0000373600 -0.0000513800
0.0000277798 0.0000267700 -0.0000290700
# File: 2
# File: 2
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 1 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0270710495 -0.0113236900 -0.0014670197
@ -131,7 +131,7 @@
0.0000046605 0.0000224300 -0.0001005497
-0.0000734495 0.0000541800 -0.0001154697
0.0000694705 0.0000692100 -0.0000708997
# File: 3
# File: 3
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 1 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0046710003 0.0112507700 0.0002498402
@ -198,7 +198,7 @@
-0.0000318103 0.0000541100 0.0000248102
-0.0000434103 0.0000192100 0.0000132002
-0.0000103603 -0.0000111000 0.0000108602
# File: 4
# File: 4
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 2 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0158746402 0.0000386706 0.0000013500
@ -265,7 +265,7 @@
0.0043645098 0.0044150006 -0.0034451700
-0.0000191302 0.0000767706 -0.0000924600
0.0000132198 0.0000439206 -0.0000928600
# File: 5
# File: 5
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 2 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0159077603 -0.0000386200 -0.0000004803
@ -332,7 +332,7 @@
-0.0047851503 -0.0047353000 0.0039052197
-0.0000941703 0.0000009700 -0.0000130003
0.0000429197 0.0000086000 0.0000342297
# File: 6
# File: 6
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0158514405 0.0000162498 0.0000008102
@ -399,7 +399,7 @@
0.0000269895 0.0000775498 -0.0000786198
0.0043180995 0.0044139398 -0.0034587598
0.0000462495 0.0000118398 -0.0000923598
# File: 7
# File: 7
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 3 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0159296302 -0.0000167394 -0.0000005900
@ -466,7 +466,7 @@
-0.0000486902 0.0000016106 -0.0000002900
-0.0048315102 -0.0047351394 0.0038910800
0.0000096998 0.0000419306 0.0000334700
# File: 8
# File: 8
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0158899895 0.0000012897 0.0000542705
@ -533,7 +533,7 @@
-0.0000400695 0.0000106597 0.0002186905
-0.0027637395 -0.0026677803 0.0038780305
-0.0000099995 -0.0000229703 -0.0000886895
# File: 9
# File: 9
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0158951398 -0.0000039597 0.0000001600
@ -600,7 +600,7 @@
-0.0000275298 0.0000560703 -0.0001011600
-0.0000403798 0.0000221303 -0.0001145800
0.0044046202 0.0044034403 -0.0034348800
# File: 10
# File: 10
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 4 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0158851897 0.0000054505 0.0000003898
@ -667,7 +667,7 @@
0.0000028603 0.0000197605 0.0000240498
-0.0000773897 0.0000518505 0.0000103098
-0.0047442097 -0.0047468095 0.0039118198
# File: 11
# File: 11
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0158909398 0.0000012105 -0.0004742191
@ -734,7 +734,7 @@
-0.0000618798 -0.0000011895 -0.0000977391
-0.0000982698 -0.0000122095 -0.0001109491
-0.0026761598 -0.0026785695 0.0039005609
# File: 12
# File: 12
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 7 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0162249700 -0.0000055000 0.0000000200
@ -801,7 +801,7 @@
-0.0000061800 0.0000442900 -0.0000805700
-0.0000641600 0.0000316500 -0.0001040300
0.0000667400 0.0002265900 -0.0000669500
# File: 13
# File: 13
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 7 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0155550398 0.0000049203 -0.0000002495
@ -868,7 +868,7 @@
-0.0000193598 0.0000309703 0.0000054005
-0.0000529898 0.0000425703 0.0000019805
-0.0000102098 -0.0001737397 0.0000082405
# File: 14
# File: 14
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 8 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0158733302 0.0000170794 0.0000001997
@ -935,7 +935,7 @@
0.0001875598 0.0000769994 -0.0000762903
-0.0000195402 0.0002373494 -0.0000902003
0.0000224498 0.0000205994 -0.0000825203
# File: 15
# File: 15
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 8 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0159075898 -0.0000174308 -0.0000000403
@ -1002,7 +1002,7 @@
-0.0002124098 -0.0000009008 -0.0000003703
-0.0000978698 -0.0001627808 -0.0000136703
0.0000341702 0.0000324092 0.0000247697
# File: 16
# File: 16
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0157717697 0.0002409398 0.0002297398
@ -1069,7 +1069,7 @@
-0.0000401997 0.0002944898 -0.0000655002
-0.0000855997 0.0000635698 -0.0000762302
-0.0000027597 0.0000053298 -0.0000597102
# File: 17
# File: 17
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0160026598 -0.0002341200 -0.0002248905
@ -1136,7 +1136,7 @@
0.0000148102 -0.0002146200 -0.0000113505
-0.0000287698 0.0000093500 -0.0000237805
0.0000585902 0.0000485100 0.0000008595
# File: 18
# File: 18
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0164229508 -0.0001147202 -0.0001147202
@ -1203,7 +1203,7 @@
0.0000156692 0.0000094798 -0.0000110102
0.0001941892 0.0000092098 -0.0000239502
0.0000067992 -0.0000042102 0.0000021798
# File: 19
# File: 19
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0153630698 0.0001094202 0.0001094202
@ -1270,7 +1270,7 @@
-0.0000386098 0.0000641702 -0.0000626498
-0.0003150098 0.0000658702 -0.0000793498
0.0000500502 0.0000582902 -0.0000603198
# File: 20
# File: 20
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0158817500 0.0000427506 -0.0000759803
@ -1337,7 +1337,7 @@
-0.0000621900 -0.0000230694 -0.0000765003
-0.0000901000 0.0000159406 -0.0000824303
0.0000019800 0.0000532206 -0.0000537003
# File: 21
# File: 21
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158999998 -0.0000424597 0.0000776603
@ -1404,7 +1404,7 @@
0.0000389502 0.0000968803 -0.0000000497
-0.0000275098 0.0000588703 -0.0000195997
0.0000566702 -0.0000020897 -0.0000018397
# File: 22
# File: 22
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158926795 -0.0000094397 -0.0000094397
@ -1471,7 +1471,7 @@
-0.0000709995 -0.0000141997 -0.0000007897
-0.0000801195 0.0000065003 -0.0000204997
0.0002809105 -0.0000003397 -0.0000008097
# File: 23
# File: 23
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158882491 0.0000091600 0.0000091600
@ -1538,7 +1538,7 @@
0.0000474609 0.0000884500 -0.0000768000
-0.0000370891 0.0000688900 -0.0000836600
-0.0002278391 0.0000557100 -0.0000577700
# File: 24
# File: 24
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0157852403 0.0002281900 -0.0002298800
@ -1605,7 +1605,7 @@
-0.0000440803 0.0000164000 -0.0000689000
-0.0001091303 -0.0000238000 -0.0000908300
0.0000011097 0.0002828700 -0.0000569600
# File: 25
# File: 25
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0159987202 -0.0002350997 0.0002348594
@ -1672,7 +1672,7 @@
0.0000185298 0.0000596503 -0.0000065006
-0.0000062802 0.0000959003 -0.0000140506
0.0000547798 -0.0002261997 -0.0000011006
# File: 26
# File: 26
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 11 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0164094797 -0.0001098602 0.0001099698
@ -1739,7 +1739,7 @@
-0.0000333597 0.0000075898 -0.0000071502
-0.0001170497 -0.0000137102 -0.0000139202
0.0000567503 -0.0000022802 -0.0000015402
# File: 27
# File: 27
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 11 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0153672202 0.0001140995 -0.0001140995
@ -1806,7 +1806,7 @@
0.0000094498 0.0000692195 -0.0000692195
0.0000013598 0.0000873295 -0.0000900395
0.0000020098 0.0000533495 -0.0000535095
# File: 28
# File: 28
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0158801602 0.0000428203 0.0000776202
@ -1873,7 +1873,7 @@
-0.0000400502 0.0000642103 -0.0000621998
-0.0000852602 0.0002933403 -0.0000787898
-0.0000230102 -0.0000337997 -0.0000673498
# File: 29
# File: 29
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0159006098 -0.0000436200 -0.0000759900
@ -1940,7 +1940,7 @@
0.0000160602 0.0000095100 -0.0000108800
-0.0000313798 -0.0002151000 -0.0000234800
0.0000801202 0.0000852400 0.0000080400
# File: 30
# File: 30
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 12 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158883897 -0.0000101408 0.0000098800
@ -2007,7 +2007,7 @@
0.0002403703 0.0000105392 -0.0000099400
-0.0000297997 0.0000092192 -0.0000244000
-0.0000307697 -0.0000250308 0.0000086600
# File: 31
# File: 31
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 12 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158923205 0.0000089098 -0.0000089098
@ -2074,7 +2074,7 @@
-0.0002676605 0.0000652898 -0.0000652898
-0.0000855005 0.0000642798 -0.0000764098
0.0000895295 0.0000769698 -0.0000675598
# File: 32
# File: 32
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0156590200 0.0001166398 0.0002251303
@ -2141,7 +2141,7 @@
0.0000137100 0.0000111298 -0.0000625997
0.0001976800 0.0000100198 -0.0000790397
0.0000065000 -0.0000039102 -0.0000598397
# File: 33
# File: 33
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 17 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0161157198 -0.0001126798 -0.0002199098
@ -2208,7 +2208,7 @@
-0.0000403198 0.0000659502 -0.0000116198
-0.0003113298 0.0000649602 -0.0000236098
0.0000500202 0.0000577702 0.0000018502
# File: 34
# File: 34
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0160000398 -0.0005282602 -0.0001139297
@ -2275,7 +2275,7 @@
-0.0000398898 0.0002910198 -0.0000100197
-0.0000863398 0.0000655898 -0.0000248597
-0.0000027498 0.0000052598 0.0000017403
# File: 35
# File: 35
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0157851900 0.0005238703 0.0001091300
@ -2342,7 +2342,7 @@
0.0000158500 -0.0002188697 -0.0000662200
-0.0000330200 0.0000112503 -0.0000773400
0.0000597400 0.0000484403 -0.0000600000
# File: 36
# File: 36
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0156627006 0.0001107600 0.0002300900
@ -2409,7 +2409,7 @@
-0.0000388306 0.0000666900 -0.0000098300
-0.0000882706 0.0000641500 -0.0000236200
-0.0000023806 0.0000576100 -0.0000507400
# File: 37
# File: 37
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 17 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0161128000 -0.0001079405 -0.0002234609
@ -2476,7 +2476,7 @@
0.0000128300 0.0000111595 -0.0000645709
-0.0000318700 0.0000123795 -0.0000785809
0.0000597800 -0.0000045005 -0.0000081409
# File: 38
# File: 38
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0156525506 0.0001068695 -0.0002356298
@ -2543,7 +2543,7 @@
-0.0000728806 -0.0000128605 -0.0000764598
-0.0000804206 0.0000061995 -0.0000825398
0.0002847694 -0.0000005805 -0.0000564198
# File: 39
# File: 39
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 18 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0161342800 -0.0001111600 0.0002403300
@ -2610,7 +2610,7 @@
0.0000459600 0.0000892700 -0.0000003400
-0.0000367000 0.0000688800 -0.0000200100
-0.0002249500 0.0000547800 -0.0000015100
# File: 40
# File: 40
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0160033698 -0.0005230203 0.0001083900
@ -2677,7 +2677,7 @@
-0.0000641398 -0.0000206503 -0.0000008600
-0.0000893098 0.0000159697 -0.0000207300
-0.0000010898 0.0000547897 -0.0000025500
# File: 41
# File: 41
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0157721903 0.0005281095 -0.0001144397
@ -2744,7 +2744,7 @@
0.0000373997 0.0000986495 -0.0000769597
-0.0000269503 0.0000588995 -0.0000822397
0.0000547197 0.0000003395 -0.0000534397
# File: 42
# File: 42
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0161274102 -0.0001166997 0.0002454498
@ -2811,7 +2811,7 @@
-0.0000499102 0.0000770003 -0.0000499102
-0.0000900002 0.0000680503 -0.0000725002
-0.0000001702 0.0000541903 -0.0000001702
# File: 43
# File: 43
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 18 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0156582102 0.0001118602 -0.0002393603
@ -2878,7 +2878,7 @@
0.0000259998 -0.0000006298 -0.0000245703
-0.0000276702 0.0000062602 -0.0000295303
0.0000552298 0.0000017702 -0.0000545703
# File: 44
# File: 44
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158486600 0.0000083603 -0.0000759200
@ -2945,7 +2945,7 @@
-0.0000334000 0.0000069103 -0.0000684600
-0.0001196000 -0.0000125397 -0.0000897700
0.0000551400 -0.0000001097 -0.0000536300
# File: 45
# File: 45
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 19 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159321598 -0.0000091900 0.0000769105
@ -3012,7 +3012,7 @@
0.0000084902 0.0000689400 -0.0000066895
0.0000011102 0.0000887800 -0.0000146295
-0.0000011498 0.0000553800 -0.0000022895
# File: 46
# File: 46
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0159000400 -0.0000004698 -0.0000097292
@ -3079,7 +3079,7 @@
-0.0000434500 0.0000162502 -0.0000069292
-0.0001103100 -0.0000211098 -0.0000147192
0.0000009600 0.0002796902 -0.0000010192
# File: 47
# File: 47
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158803300 -0.0000013191 0.0000099998
@ -3146,7 +3146,7 @@
0.0000180800 0.0000595009 -0.0000688602
-0.0000075300 0.0000980409 -0.0000903102
0.0000551700 -0.0002294991 -0.0000568302
# File: 48
# File: 48
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0159669205 0.0000090803 0.0000430105
@ -3213,7 +3213,7 @@
-0.0000434805 0.0000688603 -0.0000589895
-0.0000961705 0.0000751403 -0.0000636995
0.0000012495 0.0000557703 -0.0000002695
# File: 49
# File: 49
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 19 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0158127794 -0.0000094205 -0.0000431603
@ -3280,7 +3280,7 @@
0.0000187806 0.0000069195 -0.0000157403
-0.0000204094 -0.0000010505 -0.0000388403
0.0000532006 -0.0000003805 -0.0000549903
# File: 50
# File: 50
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158475202 0.0000103894 0.0000778597
@ -3347,7 +3347,7 @@
0.0002435498 0.0000101194 -0.0000657703
-0.0000315302 0.0000101994 -0.0000763703
-0.0000331102 -0.0000235306 -0.0000687203
# File: 51
# File: 51
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 20 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159339408 -0.0000101900 -0.0000766802
@ -3414,7 +3414,7 @@
-0.0002655608 0.0000651900 -0.0000097502
-0.0000870808 0.0000659600 -0.0000243002
0.0000872092 0.0000786100 0.0000084998
# File: 52
# File: 52
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0159000098 0.0000003800 0.0000098097
@ -3481,7 +3481,7 @@
-0.0000412898 0.0000663200 -0.0000113703
-0.0000860598 0.0002903000 -0.0000231203
-0.0000234998 -0.0000318400 0.0000084897
# File: 53
# File: 53
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158811408 0.0000006903 -0.0000094603
@ -3548,7 +3548,7 @@
0.0000141292 0.0000116303 -0.0000630203
-0.0000312408 -0.0002190697 -0.0000793903
0.0000789292 0.0000876903 -0.0000681103
# File: 54
# File: 54
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0158145295 -0.0000092000 0.0000419005
@ -3615,7 +3615,7 @@
-0.0000410195 0.0000653900 -0.0000088795
-0.0000860495 0.0000666800 -0.0000228795
-0.0000088795 0.0000653900 -0.0000410195
# File: 55
# File: 55
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 20 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0159658197 0.0000095494 -0.0000420103
@ -3682,7 +3682,7 @@
0.0000135203 0.0000125994 -0.0000641003
-0.0000330597 0.0000110794 -0.0000778103
0.0000658703 -0.0000109606 -0.0000165803
# File: 56
# File: 56
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0158595005 -0.0000216592 0.0000306103
@ -3749,7 +3749,7 @@
0.0000644495 0.0000806808 -0.0000284997
0.0000175595 0.0000800508 -0.0000612497
-0.0000480005 0.0000694108 -0.0000193897
# File: 57
# File: 57
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0159221695 0.0000217195 -0.0000305900
@ -3816,7 +3816,7 @@
-0.0000896995 -0.0000045705 -0.0000475500
-0.0001343195 -0.0000060805 -0.0000420800
0.0001041405 -0.0000163105 -0.0000385900
# File: 58
# File: 58
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159120605 0.0000313500 0.0000313500
@ -3883,7 +3883,7 @@
0.0000304295 0.0001151600 -0.0000479700
-0.0000155505 0.0001140900 -0.0000414200
0.0000712995 -0.0000490200 -0.0000203100
# File: 59
# File: 59
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158689600 -0.0000315600 -0.0000315600
@ -3950,7 +3950,7 @@
-0.0000553000 -0.0000380300 -0.0000285300
-0.0001009700 -0.0000401900 -0.0000609200
-0.0000145200 0.0001026900 -0.0000386100
# File: 60
# File: 60
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0158608602 0.0000280394 0.0000251806
@ -4017,7 +4017,7 @@
-0.0000892102 0.0000810794 -0.0000476194
-0.0001347002 0.0000800894 -0.0000417194
0.0001045198 0.0000691294 -0.0000381894
# File: 61
# File: 61
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0159165102 -0.0000258298 -0.0000244106
@ -4084,7 +4084,7 @@
0.0000642498 -0.0000047198 -0.0000280706
0.0000172798 -0.0000054698 -0.0000611206
-0.0000476002 -0.0000160298 -0.0000194606
# File: 62
# File: 62
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0156345787 0.0000281705 0.0000281705
@ -4151,7 +4151,7 @@
0.0000298013 -0.0000380595 -0.0000470695
-0.0000154787 -0.0000399095 -0.0000416395
0.0000708813 0.0001028405 -0.0000195595
# File: 63
# File: 63
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0161495600 -0.0000284100 -0.0000284100
@ -4218,7 +4218,7 @@
-0.0000553000 0.0001150200 -0.0000281400
-0.0001017400 0.0001132600 -0.0000611800
-0.0000141400 -0.0000503100 -0.0000380900
# File: 64
# File: 64
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158639902 0.0000281794 0.0000252705
@ -4285,7 +4285,7 @@
0.0000298898 -0.0000393506 -0.0000275395
-0.0000152302 -0.0000382206 -0.0000610495
0.0000703398 0.0001038194 -0.0000382695
# File: 65
# File: 65
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159143100 -0.0000267900 -0.0000236500
@ -4352,7 +4352,7 @@
-0.0000545600 0.0001142700 -0.0000464300
-0.0001016500 0.0001140900 -0.0000424300
-0.0000142600 -0.0000489300 -0.0000190300
# File: 66
# File: 66
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0158648998 0.0002526200 0.0000270298
@ -4419,7 +4419,7 @@
-0.0000898898 0.0000807500 -0.0000281602
-0.0001340198 0.0000808100 -0.0000609402
0.0001035302 0.0000693300 -0.0000192302
# File: 67
# File: 67
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0159165698 -0.0002561400 -0.0000275397
@ -4486,7 +4486,7 @@
0.0000640402 -0.0000048700 -0.0000474997
0.0000182202 -0.0000053300 -0.0000423097
-0.0000483298 -0.0000159400 -0.0000389297
# File: 68
# File: 68
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0158656398 0.0000280602 0.0000266106
@ -4553,7 +4553,7 @@
-0.0000217898 0.0000280802 -0.0000369794
-0.0000488998 0.0000474902 -0.0000508394
0.0000376602 0.0000172302 -0.0000291394
# File: 69
# File: 69
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0159138705 -0.0000256600 -0.0000244195
@ -4620,7 +4620,7 @@
-0.0000032105 0.0000470800 -0.0000377895
-0.0000679905 0.0000277200 -0.0000510095
0.0000184095 0.0000364500 -0.0000293195
# File: 70
# File: 70
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159513295 0.0000539603 0.0000379402
@ -4687,7 +4687,7 @@
0.0000304205 0.0001130803 -0.0000284298
-0.0000160895 0.0001142803 -0.0000604298
0.0000713305 -0.0000485597 -0.0000385598
# File: 71
# File: 71
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158275700 -0.0000517100 -0.0000397700
@ -4754,7 +4754,7 @@
-0.0000543100 -0.0000398200 -0.0000466000
-0.0001023900 -0.0000396000 -0.0000417800
-0.0000138200 0.0001047600 -0.0000195900
# File: 72
# File: 72
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0158406700 -0.0000560505 0.0000373702
@ -4821,7 +4821,7 @@
0.0000650900 0.0000799195 -0.0000467998
0.0000168400 0.0000806395 -0.0000421498
-0.0000469800 0.0000701895 -0.0000382998
# File: 73
# File: 73
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0159388897 0.0000580497 -0.0000393300
@ -4888,7 +4888,7 @@
-0.0000889197 -0.0000042503 -0.0000283800
-0.0001354697 -0.0000051503 -0.0000611300
0.0001049103 -0.0000165803 -0.0000196800
# File: 74
# File: 74
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0158513205 0.0000363398 -0.0000127897
@ -4955,7 +4955,7 @@
-0.0000214305 0.0000474298 -0.0000377397
-0.0000490005 0.0000281398 -0.0000518597
0.0000376595 0.0000364698 -0.0000282397
# File: 75
# File: 75
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0159299302 -0.0000361998 0.0000123508
@ -5022,7 +5022,7 @@
-0.0000030302 0.0000285602 -0.0000386492
-0.0000682202 0.0000466502 -0.0000523292
0.0000191498 0.0000170202 -0.0000283792
# File: 76
# File: 76
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0158536002 -0.0000573602 0.0000510698
@ -5089,7 +5089,7 @@
0.0002158698 0.0002690598 0.0000719598
0.0001739098 0.0002754498 -0.0001651802
-0.0002039502 0.0002652798 0.0000849498
# File: 77
# File: 77
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0159293702 0.0000601305 -0.0000501698
@ -5156,7 +5156,7 @@
-0.0002457902 -0.0001999495 -0.0001513498
-0.0002853002 -0.0001946295 0.0000586802
0.0002549198 -0.0002051395 -0.0001380698
# File: 78
# File: 78
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159024700 0.0000381603 0.0000381603
@ -5223,7 +5223,7 @@
0.0002190600 0.0002651703 0.0000714403
0.0001796800 0.0002696603 -0.0001650697
0.0002593200 -0.0001996497 -0.0001377797
# File: 79
# File: 79
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158783800 -0.0000381600 -0.0000381600
@ -5290,7 +5290,7 @@
-0.0002503200 -0.0001952200 -0.0001519800
-0.0002899300 -0.0001898100 0.0000583500
-0.0002100500 0.0002598500 0.0000849700
# File: 80
# File: 80
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0131886002 0.0040410291 0.0027933905
@ -5357,7 +5357,7 @@
-0.0002401002 0.0002700091 -0.0001487095
-0.0002919702 0.0002760691 0.0000626305
0.0002602398 0.0002651491 -0.0001450395
# File: 81
# File: 81
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0188283302 -0.0041643098 -0.0030393100
@ -5424,7 +5424,7 @@
0.0002196998 -0.0001994898 0.0000773500
0.0001703498 -0.0001954398 -0.0001617700
-0.0001998402 -0.0002063998 0.0000836300
# File: 82
# File: 82
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0119619700 0.0027067800 0.0027067800
@ -5491,7 +5491,7 @@
0.0002252900 -0.0001948900 0.0000756400
0.0001733900 -0.0001900000 -0.0001609400
0.0002643900 0.0002603400 -0.0001427000
# File: 83
# File: 83
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0199236100 -0.0029359800 -0.0029359800
@ -5558,7 +5558,7 @@
-0.0002433300 0.0002648000 -0.0001474100
-0.0002969700 0.0002707200 0.0000612300
-0.0002017500 -0.0002010000 0.0000797600
# File: 84
# File: 84
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159493205 -0.0000385297 0.0000481100
@ -5625,7 +5625,7 @@
-0.0000118605 0.0000473403 -0.0000275600
-0.0005871305 0.0001517203 -0.0001659100
0.0000280395 0.0000360003 -0.0000381800
# File: 85
# File: 85
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 49 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158342600 0.0000362800 -0.0000496700
@ -5692,7 +5692,7 @@
-0.0000119500 0.0000281800 -0.0000471600
0.0004654200 -0.0000720500 0.0000579900
0.0000273200 0.0000175300 -0.0000189700
# File: 86
# File: 86
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0159262500 -0.0000128595 -0.0000398098
@ -5759,7 +5759,7 @@
-0.0000222900 0.0000806105 -0.0001145498
-0.0001683400 0.0002689805 -0.0002800398
0.0000185400 0.0000693305 0.0000473602
# File: 87
# File: 87
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158539995 0.0000122003 0.0000390097
@ -5826,7 +5826,7 @@
-0.0000031195 -0.0000045297 0.0000394897
0.0000553805 -0.0002007097 0.0001813997
0.0000379005 -0.0000160097 -0.0001047803
# File: 88
# File: 88
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0158383909 -0.0000391303 -0.0000631305
@ -5893,7 +5893,7 @@
-0.0000219809 -0.0000377403 0.0000053295
0.0000558091 -0.0001952403 0.0001865895
0.0000373491 0.0001022197 0.0000140395
# File: 89
# File: 89
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 49 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0159435197 0.0000373000 0.0000606997
@ -5960,7 +5960,7 @@
-0.0000031897 0.0001152800 -0.0000804303
-0.0001686997 0.0002643200 -0.0002831803
0.0000190503 -0.0000503900 -0.0000710503
# File: 90
# File: 90
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158626102 -0.0000266494 0.0000268597
@ -6027,7 +6027,7 @@
-0.0005365002 0.0001469206 0.0000721097
-0.0000583902 0.0000464106 -0.0000606003
-0.0005005402 0.0001411706 -0.0001427903
# File: 91
# File: 91
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 50 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159207500 0.0000285700 -0.0000281700
@ -6094,7 +6094,7 @@
0.0005158600 -0.0000758800 -0.0001516000
-0.0000597200 0.0000271800 -0.0000422700
0.0005523500 -0.0000829800 0.0000807000
# File: 92
# File: 92
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0159187994 0.0000301100 -0.0000293098
@ -6161,7 +6161,7 @@
-0.0001263394 0.0002762600 0.0001965702
-0.0000678794 0.0000804200 0.0000245302
-0.0000808394 0.0002588300 -0.0002558098
# File: 93
# File: 93
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158633403 -0.0000277297 0.0000276202
@ -6228,7 +6228,7 @@
0.0000973597 -0.0001933897 -0.0002657898
-0.0000487203 -0.0000056197 -0.0001278598
0.0001417497 -0.0002117397 0.0002030302
# File: 94
# File: 94
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0158609897 -0.0000277397 0.0002556705
@ -6295,7 +6295,7 @@
-0.0001260397 0.0002704203 0.0002005205
-0.0000498297 0.0001131003 -0.0000086695
0.0001428703 -0.0002060097 0.0002096005
# File: 95
# File: 95
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 50 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0159206097 0.0000276597 -0.0002519405
@ -6362,7 +6362,7 @@
0.0000975003 -0.0001894103 -0.0002693305
-0.0000675997 -0.0000396603 -0.0000939205
-0.0000819997 0.0002542897 -0.0002604105
# File: 96
# File: 96
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0181591608 0.0035953192 -0.0021905800
@ -6429,7 +6429,7 @@
-0.0000222208 0.0000809092 0.0000396400
-0.0001726808 0.0002751492 0.0001808700
0.0000185992 0.0000692592 -0.0001042100
# File: 97
# File: 97
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0134110203 -0.0037075602 0.0023932206
@ -6496,7 +6496,7 @@
-0.0000024803 -0.0000052102 -0.0001140794
0.0000508797 -0.0001945502 -0.0002786194
0.0000385797 -0.0000154102 0.0000471206
# File: 98
# File: 98
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 51 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0120798198 -0.0024803103 0.0024803103
@ -6563,7 +6563,7 @@
-0.0000122098 0.0000468997 -0.0000468997
-0.0005830298 0.0001474297 0.0000587403
0.0000286602 0.0000360497 -0.0000188997
# File: 99
# File: 99
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 51 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0195722400 0.0022614800 -0.0022614800
@ -6630,7 +6630,7 @@
-0.0000138200 0.0000280200 -0.0000280200
0.0004698000 -0.0000775800 -0.0001665800
0.0000283400 0.0000197700 -0.0000382800
# File: 100
# File: 100
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0159280197 -0.0000595000 -0.0000514000
@ -6697,7 +6697,7 @@
-0.0001219697 0.0002698200 -0.0002648200
-0.0000683497 0.0000801300 -0.0001270700
-0.0000853897 0.0002648000 0.0002037600
# File: 101
# File: 101
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158524100 0.0000616495 0.0000501400
@ -6764,7 +6764,7 @@
0.0001013100 -0.0002005205 0.0001951800
-0.0000488100 -0.0000050705 0.0000261700
0.0001377300 -0.0002047305 -0.0002557700
# File: 102
# File: 102
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 52 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159029005 -0.0000381405 0.0000381405
@ -6831,7 +6831,7 @@
-0.0005407605 0.0001520595 -0.0001520595
-0.0000579305 0.0000465195 -0.0000419095
-0.0004956405 0.0001362295 0.0000809405
# File: 103
# File: 103
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 52 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158786000 0.0000377600 -0.0000377600
@ -6898,7 +6898,7 @@
0.0005112500 -0.0000714200 0.0000714200
-0.0000583700 0.0000280400 -0.0000607400
0.0005564900 -0.0000876900 -0.0001430400
# File: 104
# File: 104
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0159193297 0.0000271103 -0.0000276697
@ -6965,7 +6965,7 @@
-0.0000027697 0.0000806203 0.0000392603
0.0000509603 0.0002690403 0.0001766003
0.0000377403 0.0000695403 -0.0001054097
# File: 105
# File: 105
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158639700 -0.0000260405 0.0000257295
@ -7032,7 +7032,7 @@
-0.0000216500 -0.0000046505 -0.0001151505
-0.0001729400 -0.0002004805 -0.0002846005
0.0000190400 -0.0000162205 0.0000473595
# File: 106
# File: 106
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 53 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0156382502 -0.0000282400 0.0000282400
@ -7099,7 +7099,7 @@
-0.0000127402 0.0000281300 -0.0000281300
-0.0005827002 -0.0000722000 -0.0001614000
0.0000290298 0.0000176600 -0.0000382100
# File: 107
# File: 107
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 53 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0161397102 0.0000268897 -0.0000274805
@ -7166,7 +7166,7 @@
-0.0000126302 0.0000470797 -0.0000471405
0.0004696398 0.0001524697 0.0000629895
0.0000287898 0.0000362997 -0.0000193105
# File: 108
# File: 108
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0159209908 -0.0000221100 -0.0000312998
@ -7233,7 +7233,7 @@
0.0001017792 0.0002754700 -0.0002709098
-0.0000493408 0.0000800300 -0.0001282398
0.0001381192 0.0002585800 0.0001983202
# File: 109
# File: 109
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0158595598 0.0000220106 0.0000319203
@ -7300,7 +7300,7 @@
-0.0001226698 -0.0001941594 0.0001902803
-0.0000683398 -0.0000055294 0.0000253503
-0.0000855498 -0.0002104994 -0.0002615297
# File: 110
# File: 110
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 54 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0159118592 -0.0000307298 0.0000307298
@ -7367,7 +7367,7 @@
-0.0005406992 -0.0000762098 0.0000762098
-0.0000577792 0.0000270902 -0.0000618102
-0.0004953492 -0.0000833298 -0.0001391002
# File: 111
# File: 111
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 54 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0158689000 0.0000308500 -0.0000305302

View File

@ -851,4 +851,4 @@ displacement_pairs:
displacement_pair_info:
number_of_singles: 1
number_of_pairs: 110
number_of_pairs: 110

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081048897 -0.0000000073 -0.0000000073
0.0000021030 -0.0000000064 -0.0000000065

View File

@ -1,4 +1,4 @@
# File: 1
# File: 1
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081155391 -0.0000000096 -0.0000000095
0.0000079303 -0.0000000099 -0.0000000100
@ -64,7 +64,7 @@
0.0000130880 -0.0000150108 -0.0000077490
0.0001290470 -0.0000142987 -0.0000142988
-0.0000105152 -0.0000133962 -0.0000133962
# File: 2
# File: 2
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 1 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0138525073 -0.0057683669 0.0007423657
@ -131,7 +131,7 @@
0.0000125442 0.0000658495 -0.0000028382
0.0002090655 -0.0000154119 -0.0000186496
-0.0000274866 -0.0000302377 -0.0000128809
# File: 3
# File: 3
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 1 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0023801020 0.0057408591 -0.0001272804
@ -198,7 +198,7 @@
0.0000138718 -0.0000957648 -0.0000124295
0.0000484362 -0.0000134242 -0.0000097209
0.0000063675 0.0000034590 -0.0000134878
# File: 4
# File: 4
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 2 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0081100003 0.0000185129 -0.0000004832
@ -265,7 +265,7 @@
-0.0000222138 -0.0000519045 -0.0000074958
0.0001121705 -0.0000311858 -0.0000140853
0.0000708946 -0.0000148230 -0.0000182909
# File: 5
# File: 5
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 2 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0081213662 -0.0000187337 0.0000000716
@ -332,7 +332,7 @@
0.0000497563 0.0000201965 -0.0000075542
0.0001458117 0.0000025768 -0.0000140913
-0.0000922048 -0.0000120268 -0.0000083359
# File: 6
# File: 6
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0080969807 0.0000056027 -0.0000003152
@ -399,7 +399,7 @@
-0.0000038679 -0.0000318321 -0.0000075296
0.0000938229 -0.0000510828 -0.0000140871
-0.0000117431 0.0000682357 -0.0000082690
# File: 7
# File: 7
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 3 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0081342392 -0.0000056877 -0.0000000938
@ -466,7 +466,7 @@
0.0000299447 0.0000018499 -0.0000075239
0.0001657938 0.0000209246 -0.0000140382
-0.0000090628 -0.0000947505 -0.0000182819
# File: 8
# File: 8
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 3 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0081156848 -0.0000003890 0.0000263044
@ -533,7 +533,7 @@
-0.0000004136 -0.0000015522 -0.0000181667
0.0001067189 0.0000080817 -0.0000210139
-0.0000175360 0.0000005568 -0.0000013976
# File: 9
# File: 9
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0081171001 -0.0000015652 -0.0000005573
@ -600,7 +600,7 @@
0.0000942601 -0.0000163254 -0.0000128249
0.0001278333 0.0000671637 -0.0000090088
-0.0000458151 -0.0000502742 -0.0000131699
# File: 10
# File: 10
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 4 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0081139644 0.0000015614 -0.0000002466
@ -667,7 +667,7 @@
-0.0000684922 -0.0000138706 -0.0000025134
0.0001304738 -0.0000957054 -0.0000192457
0.0000263790 0.0000219561 -0.0000131368
# File: 11
# File: 11
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 4 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0081154203 -0.0000007186 -0.0002407769
@ -734,7 +734,7 @@
-0.0000008489 -0.0000078540 0.0000042360
0.0001221282 -0.0000003935 -0.0000024120
-0.0000329223 0.0000089637 -0.0000201987
# File: 12
# File: 12
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 7 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0082857181 -0.0000014481 -0.0000002797
@ -801,7 +801,7 @@
0.0000167539 -0.0000114783 -0.0000080982
0.0005817752 0.0004097433 -0.0000377665
-0.0000301063 -0.0000492589 -0.0000132791
# File: 13
# File: 13
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 7 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0079455444 0.0000019250 0.0000000290
@ -868,7 +868,7 @@
0.0000097906 -0.0000183060 -0.0000081484
-0.0002944012 -0.0004679395 -0.0000366726
0.0000093955 0.0000221615 -0.0000136029
# File: 14
# File: 14
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 8 0.0424264068711929 0.0424264068711929 0.0000000000000000
-0.0081073943 0.0000082430 -0.0000005855
@ -935,7 +935,7 @@
-0.0000229669 -0.0000351804 -0.0000078297
0.0001090237 -0.0000503838 -0.0000143837
0.0004431136 0.0004107065 -0.0000363007
# File: 15
# File: 15
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 8 -0.0424264068711929 -0.0424264068711929 0.0000000000000000
-0.0081235237 -0.0000079849 0.0000000901
@ -1002,7 +1002,7 @@
0.0000491035 0.0000047786 -0.0000076635
0.0001491099 0.0000216513 -0.0000144582
-0.0004344622 -0.0004668271 -0.0000364501
# File: 16
# File: 16
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0079926295 0.0001157077 -0.0000672572
@ -1069,7 +1069,7 @@
0.0000025311 -0.0000285304 0.0000057476
0.0001001839 -0.0000362066 0.0000076516
0.0000014840 -0.0000272649 -0.0000065816
# File: 17
# File: 17
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0082331919 -0.0001113373 0.0000644818
@ -1136,7 +1136,7 @@
0.0000235604 -0.0000017313 -0.0000210008
0.0001576070 0.0000082395 -0.0000357998
-0.0000235465 0.0000016139 -0.0000210009
# File: 18
# File: 18
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0079983484 0.0001225587 -0.0000640899
@ -1203,7 +1203,7 @@
-0.0000001684 -0.0000251860 -0.0000210638
0.0001061127 -0.0000430325 -0.0000356923
-0.0000247482 0.0001153606 -0.0000275915
# File: 19
# File: 19
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0082281257 -0.0001176045 0.0000610459
@ -1270,7 +1270,7 @@
0.0000265110 -0.0000049014 0.0000057291
0.0001511370 0.0000145536 0.0000078154
0.0000040805 -0.0001434787 0.0000011616
# File: 20
# File: 20
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0080519857 0.0000652294 -0.0002655082
@ -1337,7 +1337,7 @@
0.0000265434 -0.0000282755 -0.0000180404
0.0001513922 -0.0000367508 -0.0000210995
-0.0000035218 -0.0000273531 -0.0000014233
# File: 21
# File: 21
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 9 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0081803672 -0.0000666226 0.0002671262
@ -1404,7 +1404,7 @@
-0.0000000924 -0.0000020099 0.0000024214
0.0001071720 0.0000076960 -0.0000080752
-0.0000180910 0.0000016803 -0.0000264486
# File: 22
# File: 22
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0079888106 -0.0001212716 -0.0000612530
@ -1471,7 +1471,7 @@
0.0001435279 -0.0000293841 0.0000068670
0.0001410366 -0.0000284074 -0.0000072341
-0.0000393363 -0.0000353577 0.0000085649
# File: 23
# File: 23
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0082475013 0.0001255594 0.0000642577
@ -1538,7 +1538,7 @@
-0.0001162160 -0.0000010627 -0.0000219486
0.0001159267 0.0000006145 -0.0000220670
0.0000180976 0.0000093970 -0.0000348819
# File: 24
# File: 24
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0082394205 0.0001322460 0.0000676845
@ -1605,7 +1605,7 @@
-0.0000019841 -0.0000020115 -0.0000154307
0.0001147517 0.0001146304 -0.0000286717
-0.0000331446 -0.0000419453 -0.0000348786
# File: 25
# File: 25
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0079957724 -0.0001270601 -0.0000647635
@ -1672,7 +1672,7 @@
0.0000271207 -0.0000268689 -0.0000007234
0.0001436553 -0.0001446812 0.0000003779
0.0000114067 0.0000153329 0.0000084775
# File: 26
# File: 26
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0080463564 -0.0000674887 -0.0002661160
@ -1739,7 +1739,7 @@
0.0000272384 -0.0000219751 0.0000041294
0.0001360055 -0.0000283715 -0.0000025210
0.0000118860 -0.0000357426 -0.0000203256
# File: 27
# File: 27
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 10 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0081827272 0.0000654244 0.0002651539
@ -1806,7 +1806,7 @@
-0.0000020622 -0.0000072820 -0.0000207424
0.0001213306 0.0000007814 -0.0000272021
-0.0000323540 0.0000083922 -0.0000073915
# File: 28
# File: 28
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 13 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0080950184 -0.0000354096 -0.0000057782
@ -1873,7 +1873,7 @@
0.0000250748 -0.0000220081 0.0000062377
0.0021279081 -0.0014221560 0.0013935255
-0.0000173514 -0.0000357750 0.0000089639
# File: 29
# File: 29
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 13 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081361971 0.0000358184 0.0000058431
@ -1940,7 +1940,7 @@
0.0000003540 -0.0000071513 -0.0000227626
-0.0018134844 0.0012820986 -0.0013106835
-0.0000043903 0.0000083178 -0.0000351018
# File: 30
# File: 30
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 13 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081514476 0.0000209930 -0.0000060035
@ -2007,7 +2007,7 @@
0.0000053852 -0.0000019295 -0.0000227595
-0.0011666893 0.0019278209 -0.0013101108
-0.0000319704 -0.0000419634 -0.0000361258
# File: 31
# File: 31
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 13 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0080793701 -0.0000209335 0.0000060027
@ -2074,7 +2074,7 @@
0.0000200834 -0.0000270220 0.0000062452
0.0015363808 -0.0020128086 0.0013931099
0.0000114112 0.0000154317 0.0000086192
# File: 32
# File: 32
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 13 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0081094796 0.0000061631 -0.0000034745
@ -2141,7 +2141,7 @@
0.0000276317 -0.0000295519 0.0001226692
0.0015367513 -0.0014223196 0.0019847105
0.0000114293 -0.0000353540 -0.0000422487
# File: 33
# File: 33
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 13 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0081214812 -0.0000060603 0.0000043024
@ -2208,7 +2208,7 @@
-0.0000011587 -0.0000007602 -0.0001368210
-0.0011670382 0.0012820780 -0.0019568806
-0.0000319870 0.0000092691 0.0000151820
# File: 34
# File: 34
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 14 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0080947688 0.0000359010 -0.0000063001
@ -2275,7 +2275,7 @@
-0.0000158420 -0.0000368307 0.0000142782
0.0001222330 -0.0000366943 0.0000081057
0.0019882305 -0.0014211366 0.0013945453
# File: 35
# File: 35
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 14 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081364719 -0.0000357253 0.0000062670
@ -2342,7 +2342,7 @@
0.0000417431 0.0000064079 -0.0000304363
0.0001351960 0.0000076101 -0.0000362326
-0.0019529162 0.0012826676 -0.0013096812
# File: 36
# File: 36
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 14 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0080803094 0.0000206442 0.0000060039
@ -2409,7 +2409,7 @@
-0.0000088522 -0.0000210978 -0.0000296488
0.0001076139 -0.0000429647 -0.0000370958
-0.0013066656 0.0019291842 -0.0013095543
# File: 37
# File: 37
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 14 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081510610 -0.0000205770 -0.0000060831
@ -2476,7 +2476,7 @@
0.0000355336 -0.0000081771 0.0000146442
0.0001509502 0.0000146243 0.0000077847
0.0013972522 -0.0020124051 0.0013943838
# File: 38
# File: 38
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 14 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0081097566 -0.0000057683 -0.0000048026
@ -2543,7 +2543,7 @@
0.0000349719 -0.0000370152 -0.0000366018
0.0001510951 -0.0000360649 -0.0000431089
0.0013972806 -0.0014210458 0.0019857631
# File: 39
# File: 39
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 14 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0081214536 0.0000059445 0.0000038529
@ -2610,7 +2610,7 @@
-0.0000096165 0.0000065055 0.0000209242
0.0001074725 0.0000082801 0.0000143303
-0.0013066879 0.0012826262 -0.0019559532
# File: 40
# File: 40
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 25 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081783043 0.0001256756 0.0001221153
@ -2677,7 +2677,7 @@
0.0000206082 -0.0000019845 0.0000070346
0.0014247786 0.0019283779 0.0012807820
0.0000110061 -0.0000420888 0.0000092983
# File: 41
# File: 41
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 25 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0080552756 -0.0001202951 -0.0001177634
@ -2744,7 +2744,7 @@
0.0000062038 -0.0000268443 -0.0000217001
-0.0012783460 -0.0020134847 -0.0014210904
-0.0000324832 0.0000154238 -0.0000352703
# File: 42
# File: 42
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 25 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0083784891 0.0000651140 0.0000651140
@ -2811,7 +2811,7 @@
0.0000262364 -0.0000073786 0.0000072293
0.0020707024 0.0012820569 0.0012820570
-0.0000167153 0.0000084078 0.0000084078
# File: 43
# File: 43
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 25 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0078516934 -0.0000665942 -0.0000665942
@ -2878,7 +2878,7 @@
0.0000010438 -0.0000219580 -0.0000217048
-0.0018692189 -0.0014223580 -0.0014223578
-0.0000036104 -0.0000356757 -0.0000356757
# File: 44
# File: 44
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 26 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081217735 0.0000210605 -0.0000355151
@ -2945,7 +2945,7 @@
0.0000349563 -0.0000210730 0.0000141900
0.0001504723 -0.0000428368 0.0000083545
0.0012858219 0.0019290397 0.0012828004
# File: 45
# File: 45
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 26 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081094935 -0.0000210934 0.0000359358
@ -3012,7 +3012,7 @@
-0.0000093038 -0.0000079608 -0.0000302222
0.0001070584 0.0000144424 -0.0000361178
-0.0014184210 -0.0020125553 -0.0014211519
# File: 46
# File: 46
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 26 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081184675 0.0000062533 0.0000062532
@ -3079,7 +3079,7 @@
-0.0000155052 0.0000064494 0.0000148579
0.0001229842 0.0000075277 0.0000075275
0.0019318851 0.0012828537 0.0012828535
# File: 47
# File: 47
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 26 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081119924 -0.0000061178 -0.0000061179
@ -3146,7 +3146,7 @@
0.0000419434 -0.0000369263 -0.0000296410
0.0001358427 -0.0000366203 -0.0000366204
-0.0020093253 -0.0014212747 -0.0014212747
# File: 48
# File: 48
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 27 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081807182 0.0001241513 -0.0001146900
@ -3213,7 +3213,7 @@
0.0000344076 -0.0000431855 0.0000148406
0.0001510690 -0.0000205262 0.0000075544
-0.0000026512 -0.0000004145 0.0000018283
# File: 49
# File: 49
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 27 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0080470026 -0.0001292813 0.0001189777
@ -3280,7 +3280,7 @@
-0.0000086974 0.0000135703 -0.0000296829
0.0001065045 -0.0000074967 -0.0000366751
-0.0000176811 -0.0000254920 -0.0000276098
# File: 50
# File: 50
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 27 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0083842934 0.0000679510 -0.0000679663
@ -3347,7 +3347,7 @@
0.0000071080 0.0000069994 0.0000141891
0.0001004875 0.0000070375 0.0000084876
0.0000024887 -0.0000057256 0.0000015601
# File: 51
# File: 51
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 27 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0078484023 -0.0000660228 0.0000660075
@ -3414,7 +3414,7 @@
0.0000198156 -0.0000375091 -0.0000301910
0.0001578966 -0.0000361129 -0.0000363834
-0.0000224461 -0.0000203687 -0.0000273457
# File: 52
# File: 52
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 28 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081214510 0.0000204907 0.0000358291
@ -3481,7 +3481,7 @@
0.0013091965 0.0019274178 0.0012885474
0.0001367699 -0.0000012237 0.0000006429
0.0000113869 -0.0000195089 0.0000084575
# File: 53
# File: 53
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 28 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081097726 -0.0000206495 -0.0000356619
@ -3548,7 +3548,7 @@
-0.0013948085 -0.0020140290 -0.0014158337
0.0001218868 -0.0000259496 -0.0000282885
-0.0000327412 -0.0000064800 -0.0000356110
# File: 54
# File: 54
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 28 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081208525 0.0000057900 -0.0000058053
@ -3615,7 +3615,7 @@
0.0019558562 0.0012814199 0.0012885783
0.0001421524 -0.0000065995 0.0000006060
-0.0000390906 0.0000080782 0.0000093119
# File: 55
# File: 55
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 28 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081111809 -0.0000059241 0.0000059086
@ -3682,7 +3682,7 @@
-0.0019861052 -0.0014230655 -0.0014156997
0.0001170071 -0.0000212978 -0.0000282007
0.0000183282 -0.0000353364 -0.0000353891
# File: 56
# File: 56
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0068205738 0.0018878438 0.0012503888
@ -3749,7 +3749,7 @@
0.0000072069 0.0000058388 0.0000275257
0.0000665188 0.0001076990 0.0001027958
-0.0000166722 0.0000073935 -0.0000489858
# File: 57
# File: 57
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0093054450 -0.0018341164 -0.0011489248
@ -3816,7 +3816,7 @@
0.0000190828 -0.0000357902 -0.0000434295
0.0001945194 -0.0001414808 -0.0001356999
-0.0000043368 -0.0000342871 0.0000220283
# File: 58
# File: 58
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0061725893 0.0012942458 0.0012942459
@ -3883,7 +3883,7 @@
0.0000090740 -0.0000087365 -0.0000137627
-0.0001366568 0.0000526592 0.0000526591
-0.0000149655 -0.0000074775 -0.0000074775
# File: 59
# File: 59
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 33 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0099964380 -0.0011856534 -0.0011856533
@ -3950,7 +3950,7 @@
0.0000178313 -0.0000211175 -0.0000019083
0.0003932955 -0.0000794786 -0.0000794788
-0.0000069892 -0.0000195058 -0.0000195058
# File: 60
# File: 60
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0080941897 -0.0000290878 0.0000218677
@ -4017,7 +4017,7 @@
-0.0000527668 0.0001123811 -0.0001283985
0.0001229750 0.0000064093 -0.0000501062
-0.0000736539 0.0001087878 0.0001029759
# File: 61
# File: 61
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081365907 0.0000287489 -0.0000226729
@ -4084,7 +4084,7 @@
0.0000759959 -0.0001372352 0.0001084516
0.0001350508 -0.0000350848 0.0000211892
0.0000554659 -0.0001408921 -0.0001340209
# File: 62
# File: 62
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081221075 0.0000224218 0.0000224219
@ -4151,7 +4151,7 @@
-0.0002523522 0.0000505264 -0.0000732916
0.0001245756 -0.0000083353 -0.0000083354
-0.0002770105 0.0000537523 0.0000537524
# File: 63
# File: 63
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 34 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081098013 -0.0000219110 -0.0000219110
@ -4218,7 +4218,7 @@
0.0002798837 -0.0000822395 0.0000594862
0.0001326846 -0.0000203613 -0.0000203613
0.0002547725 -0.0000788296 -0.0000788298
# File: 64
# File: 64
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081438950 0.0000217007 0.0000207944
@ -4285,7 +4285,7 @@
0.0000086273 -0.0000090737 -0.0000018556
-0.0001363381 0.0000512051 -0.0000798194
-0.0000141746 -0.0000073099 -0.0000194843
# File: 65
# File: 65
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0080875990 -0.0000212465 -0.0000214503
@ -4352,7 +4352,7 @@
0.0000167539 -0.0000210897 -0.0000137854
0.0003956549 -0.0000815399 0.0000529565
-0.0000059962 -0.0000193543 -0.0000074377
# File: 66
# File: 66
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0080941750 -0.0000068794 0.0000226609
@ -4419,7 +4419,7 @@
0.0000071028 0.0000058895 -0.0000436731
0.0000630511 0.0001132211 -0.0001347006
-0.0000165096 0.0000075024 0.0000223155
# File: 67
# File: 67
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081363763 0.0000060353 -0.0000221757
@ -4486,7 +4486,7 @@
0.0000190871 -0.0000358676 0.0000277591
0.0001922068 -0.0001363742 0.0001019798
-0.0000044356 -0.0000341279 -0.0000492311
# File: 68
# File: 68
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0080926352 0.0000218339 -0.0000300400
@ -4553,7 +4553,7 @@
0.0000070271 -0.0000507072 0.0000129750
0.0001921061 -0.0001305045 0.0001078205
-0.0000044255 0.0000224652 0.0000073216
# File: 69
# File: 69
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 35 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0081392437 -0.0000214159 0.0000297757
@ -4620,7 +4620,7 @@
0.0000191015 0.0000203465 -0.0000285799
0.0000630983 0.0001062686 -0.0001417000
-0.0000165596 -0.0000489056 -0.0000342206
# File: 70
# File: 70
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081024465 0.0000079064 0.0000140966
@ -4687,7 +4687,7 @@
-0.0002536211 0.0000520287 0.0000593870
0.0001253820 -0.0000082504 -0.0000203523
-0.0002758044 0.0000520911 -0.0000789086
# File: 71
# File: 71
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081296112 -0.0000085234 -0.0000151389
@ -4754,7 +4754,7 @@
0.0002785045 -0.0000803442 -0.0000731763
0.0001335315 -0.0000202148 -0.0000083952
0.0002560442 -0.0000805865 0.0000538103
# File: 72
# File: 72
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081077973 0.0000129127 0.0000144050
@ -4821,7 +4821,7 @@
-0.0000498261 0.0001072566 0.0001085360
0.0001230045 0.0000065453 0.0000212783
-0.0000766035 0.0001139240 -0.0001339845
# File: 73
# File: 73
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081240329 -0.0000138880 -0.0000154123
@ -4888,7 +4888,7 @@
0.0000788909 -0.0001425170 -0.0001284011
0.0001351297 -0.0000350654 -0.0000501792
0.0000526742 -0.0001354845 0.0001028177
# File: 74
# File: 74
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0081000805 0.0000146913 0.0001304092
@ -4955,7 +4955,7 @@
-0.0000497312 0.0001014008 0.0001145095
0.0001349228 0.0000216070 0.0000065659
0.0000526649 -0.0001296341 0.0001088467
# File: 75
# File: 75
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 36 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0081306225 -0.0000143394 -0.0001290836
@ -5022,7 +5022,7 @@
0.0000788111 -0.0001357941 -0.0001352524
0.0001232105 -0.0000499592 -0.0000352730
-0.0000766113 0.0001072210 -0.0001408906
# File: 76
# File: 76
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081017207 0.0000122615 0.0000072614
@ -5089,7 +5089,7 @@
0.0000190661 0.0000059786 0.0000282354
0.0001948360 0.0001131829 0.0001064497
-0.0000044980 0.0000074539 -0.0000490380
# File: 77
# File: 77
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081302181 -0.0000129264 -0.0000083077
@ -5156,7 +5156,7 @@
0.0000071121 -0.0000360449 -0.0000434614
0.0000659783 -0.0001362634 -0.0001310626
-0.0000166107 -0.0000341205 0.0000225853
# File: 78
# File: 78
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0079868546 0.0000146337 0.0000146336
@ -5223,7 +5223,7 @@
0.0000094289 -0.0000209135 -0.0000016347
-0.0001375690 -0.0000815270 -0.0000815272
-0.0000150200 -0.0000193391 -0.0000193393
# File: 79
# File: 79
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 39 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0082430697 -0.0000143540 -0.0000143539
@ -5290,7 +5290,7 @@
0.0000176231 -0.0000092563 -0.0000137174
0.0003943177 0.0000512302 0.0000512301
-0.0000067907 -0.0000073271 -0.0000073272
# File: 80
# File: 80
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081021752 -0.0000105353 0.0000137921
@ -5357,7 +5357,7 @@
0.0000760764 0.0001072364 -0.0001239697
0.0001350480 0.0000064446 -0.0000498077
0.0000554206 0.0001139895 0.0001072089
# File: 81
# File: 81
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081287711 0.0000105765 -0.0000136389
@ -5424,7 +5424,7 @@
-0.0000527952 -0.0001425127 0.0001128154
0.0001230090 -0.0000349755 0.0000214808
-0.0000735499 -0.0001355597 -0.0001296395
# File: 82
# File: 82
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081260729 0.0000134224 0.0000134223
@ -5491,7 +5491,7 @@
-0.0002521993 -0.0000807082 0.0000579560
0.0001245491 -0.0000202899 -0.0000202899
-0.0002771911 -0.0000806706 -0.0000806706
# File: 83
# File: 83
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 40 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081049089 -0.0000132920 -0.0000132920
@ -5558,7 +5558,7 @@
0.0002796384 0.0000523914 -0.0000751638
0.0001327457 -0.0000081795 -0.0000081795
0.0002548715 0.0000521598 0.0000521598
# File: 84
# File: 84
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 41 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0067101803 0.0020574680 -0.0014541762
@ -5625,7 +5625,7 @@
0.0000794809 -0.0002801255 -0.0000737448
0.0001351273 -0.0000186059 -0.0000083598
-0.0000044424 -0.0000170515 -0.0000196199
# File: 85
# File: 85
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 41 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0096393878 -0.0021168997 0.0015766074
@ -5692,7 +5692,7 @@
-0.0000550432 0.0002513892 0.0000599763
0.0001228247 -0.0000108729 -0.0000203960
-0.0000164469 -0.0000089674 -0.0000073146
# File: 86
# File: 86
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 41 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0061177212 0.0014099476 -0.0014099627
@ -5759,7 +5759,7 @@
0.0001397326 -0.0000806495 -0.0001287325
0.0001499067 -0.0000204104 -0.0000501780
0.0000104162 -0.0000194795 0.0000221996
# File: 87
# File: 87
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 41 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0101639388 -0.0015242652 0.0015242500
@ -5826,7 +5826,7 @@
-0.0001082609 0.0000476910 0.0001088612
0.0001081172 -0.0000082509 0.0000213041
-0.0000313356 -0.0000072918 -0.0000493076
# File: 88
# File: 88
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 42 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0080938641 -0.0000284858 -0.0000228345
@ -5893,7 +5893,7 @@
0.0000802568 -0.0002817176 0.0000594730
0.0001351422 -0.0000178797 -0.0000204502
-0.0000045751 -0.0000177920 -0.0000073850
# File: 89
# File: 89
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 42 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081377671 0.0000286698 0.0000220590
@ -5960,7 +5960,7 @@
-0.0000524226 0.0002504518 -0.0000733093
0.0001231352 -0.0000098890 -0.0000083402
-0.0000165796 -0.0000098329 -0.0000195347
# File: 90
# File: 90
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 42 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081220242 0.0000218067 -0.0000218219
@ -6027,7 +6027,7 @@
0.0001352191 -0.0000780165 0.0001085350
0.0001499316 -0.0000203145 0.0000212052
0.0000102430 -0.0000195004 -0.0000492279
# File: 91
# File: 91
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 42 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081085112 -0.0000222753 0.0000222601
@ -6094,7 +6094,7 @@
-0.0001142766 0.0000509047 -0.0001283969
0.0001082381 -0.0000082523 -0.0000500991
-0.0000313486 -0.0000073366 0.0000221403
# File: 92
# File: 92
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 43 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081446245 0.0000216279 -0.0000238355
@ -6161,7 +6161,7 @@
0.0000339238 -0.0000209760 0.0000278529
0.0002512094 -0.0000770591 0.0001016341
0.0001169086 -0.0000793052 -0.0001339197
# File: 93
# File: 93
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 43 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0080862628 -0.0000222249 0.0000229846
@ -6228,7 +6228,7 @@
-0.0000077439 -0.0000090461 -0.0000437913
0.0000014365 0.0000512382 -0.0001344279
-0.0001328958 0.0000495015 0.0001026070
# File: 94
# File: 94
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 43 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0080927872 -0.0000060334 -0.0000215475
@ -6295,7 +6295,7 @@
0.0000192217 -0.0000186788 -0.0000138697
0.0001962900 -0.0002807923 0.0000530301
0.0000549807 -0.0002788081 -0.0000789421
# File: 95
# File: 95
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 43 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081390438 0.0000068748 0.0000220895
@ -6362,7 +6362,7 @@
0.0000071414 -0.0000104870 -0.0000018129
0.0000635094 0.0002509614 -0.0000799430
-0.0000777059 0.0002533327 0.0000538400
# File: 96
# File: 96
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 43 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0081366335 -0.0000219259 -0.0000276836
@ -6429,7 +6429,7 @@
0.0000490190 -0.0000089101 0.0000129964
0.0002455635 -0.0000770070 0.0001079696
-0.0001268384 0.0000497185 0.0001087858
# File: 97
# File: 97
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 43 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0080939327 0.0000215150 0.0000274648
@ -6496,7 +6496,7 @@
-0.0000225865 -0.0000210209 -0.0000286718
0.0000084536 0.0000511651 -0.0001420863
0.0001098969 -0.0000793003 -0.0001410828
# File: 98
# File: 98
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 44 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081036155 0.0000069172 -0.0000147630
@ -6563,7 +6563,7 @@
0.0000337956 -0.0000210693 -0.0000435829
0.0002565055 -0.0000804127 -0.0001350219
0.0001117176 -0.0000763369 0.0001028951
# File: 99
# File: 99
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 44 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081264361 -0.0000061198 0.0000137564
@ -6630,7 +6630,7 @@
-0.0000076962 -0.0000089865 0.0000277906
0.0000068382 0.0000489063 0.0001020378
-0.0001379850 0.0000524360 -0.0001340390
# File: 100
# File: 100
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 44 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081085727 0.0000122810 -0.0000145282
@ -6697,7 +6697,7 @@
0.0000190547 -0.0000194727 -0.0000018280
0.0001945969 -0.0002797711 -0.0000798508
0.0000567107 -0.0002800762 0.0000538115
# File: 101
# File: 101
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 44 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081218900 -0.0000111568 0.0000134991
@ -6764,7 +6764,7 @@
0.0000069591 -0.0000115311 -0.0000138501
0.0000617584 0.0002525012 0.0000529859
-0.0000760446 0.0002520531 -0.0000789192
# File: 102
# File: 102
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 44 0.0000000000000000 0.0000000000000000 0.0600000000000000
-0.0081290363 -0.0000142867 0.0001302213
@ -6831,7 +6831,7 @@
-0.0000226974 -0.0000211747 0.0000129873
0.0000128890 0.0000488203 0.0001080333
0.0001057613 -0.0000762893 0.0001088393
# File: 103
# File: 103
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 44 0.0000000000000000 0.0000000000000000 -0.0600000000000000
-0.0081022002 0.0000140624 -0.0001288912
@ -6898,7 +6898,7 @@
0.0000485881 -0.0000088883 -0.0000285784
0.0002495883 -0.0000803321 -0.0001418864
-0.0001311698 0.0000523972 -0.0001408823
# File: 104
# File: 104
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 47 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081002271 0.0000128777 -0.0000072762
@ -6965,7 +6965,7 @@
0.0000071205 -0.0000195273 -0.0000137034
0.0000636091 -0.0002796411 0.0000510025
-0.0000778141 -0.0002800266 -0.0000806016
# File: 105
# File: 105
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 47 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081296823 -0.0000118641 0.0000065369
@ -7032,7 +7032,7 @@
0.0000191984 -0.0000113252 -0.0000016557
0.0001961956 0.0002523815 -0.0000812819
0.0000550835 0.0002519749 0.0000521088
# File: 106
# File: 106
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 47 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0079853238 0.0000141560 -0.0000141711
@ -7099,7 +7099,7 @@
0.0000339894 -0.0000090370 -0.0000433699
0.0002512392 0.0000487961 -0.0001303492
0.0001168264 0.0000521674 0.0001071024
# File: 107
# File: 107
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 47 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0082472240 -0.0000144675 0.0000144526
@ -7166,7 +7166,7 @@
-0.0000077192 -0.0000210215 0.0000281651
0.0000016274 -0.0000802971 0.0001061116
-0.0001325917 -0.0000761072 -0.0001295603
# File: 108
# File: 108
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 48 0.0000000000000000 0.0600000000000000 0.0000000000000000
-0.0081021485 -0.0000103551 -0.0000129714
@ -7233,7 +7233,7 @@
0.0000071157 -0.0000188461 -0.0000017929
0.0000615356 -0.0002810103 -0.0000817762
-0.0000760023 -0.0002788127 0.0000520561
# File: 109
# File: 109
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 48 0.0000000000000000 -0.0600000000000000 0.0000000000000000
-0.0081292533 0.0000103640 0.0000132240
@ -7300,7 +7300,7 @@
0.0000190207 -0.0000105364 -0.0000136681
0.0001948955 0.0002510884 0.0000514980
0.0000567152 0.0002532579 -0.0000805910
# File: 110
# File: 110
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 48 0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081259458 0.0000133926 -0.0000134078
@ -7367,7 +7367,7 @@
0.0000338315 -0.0000089409 0.0000280763
0.0002565534 0.0000515445 0.0001064355
0.0001116565 0.0000496164 -0.0001296366
# File: 111
# File: 111
# 1 0.0600000000000000 0.0000000000000000 0.0000000000000000
# 48 -0.0600000000000000 0.0000000000000000 0.0000000000000000
-0.0081052377 -0.0000136036 0.0000135884

View File

@ -6,7 +6,7 @@ so the -c control parameter is not needed
1) Create displaced supercells
2x2x2 conventional cell for 3rd order FC
3x3x3 conventional cell for 2nd order FC
phono3py --turbomole --dim="2 2 2" --dim-fc2="3 3 3" -d
Complete TURBOMOLE inputs can be prepared manually
@ -32,4 +32,3 @@ so the -c control parameter is not needed
--br -> Relaxation time approximation
With 20x20x20 mesh, the lattice thermal conductivity at 300 K is 142 W m^-1 K^-1.

View File

@ -1,9 +1,9 @@
$periodic 3
$lattice
10.357962933 0.0000000000 0.0000000000
0.0000000000 10.357962933 0.0000000000
10.357962933 0.0000000000 0.0000000000
0.0000000000 10.357962933 0.0000000000
0.0000000000 0.0000000000 10.357962933
$coord file=coord
$coord file=coord
$kpoints
nkpoints 6 6 6
$riper

View File

@ -8,4 +8,3 @@ $coord
5.17898184151 0.00000000000 5.17898184151 si
0.00000000000 5.17898184151 5.17898184151 si
$end

View File

@ -1,17 +1,18 @@
import copy
from phonopy.interface.vasp import read_vasp_from_strings
"""Launch script of ZnTe AiiDA calculation using aiida-phononpy."""
from aiida.engine import submit
from aiida.manage.configuration import load_profile
from aiida.orm import Int, Float, Bool, Str, load_node, QueryBuilder
from aiida.orm import Bool, Float, Str
from aiida.plugins import DataFactory, WorkflowFactory
from aiida.engine import run, submit
from aiida_phonopy.common.utils import phonopy_atoms_to_structure
from phonopy.interface.vasp import read_vasp_from_strings
load_profile()
Dict = DataFactory('dict')
Dict = DataFactory("dict")
def get_settings(cutoff_energy, is_nac=False):
"""Set up parameters."""
unitcell_str = """ Zn Te
1.0
6.0653118499999996 0.0000000000000000 0.0000000000000000
@ -33,87 +34,101 @@ Direct
structure = phonopy_atoms_to_structure(cell)
base_incar_dict = {
'PREC': 'Accurate',
'IBRION': -1,
'EDIFF': 1e-8,
'NELMIN': 5,
'NELM': 100,
'ENCUT': cutoff_energy,
'IALGO': 38,
'ISMEAR': 0,
'SIGMA': 0.01,
'GGA' : 'PS',
'LREAL': False,
'lcharg': False,
'lwave': False,
"PREC": "Accurate",
"IBRION": -1,
"EDIFF": 1e-8,
"NELMIN": 5,
"NELM": 100,
"ENCUT": cutoff_energy,
"IALGO": 38,
"ISMEAR": 0,
"SIGMA": 0.01,
"GGA": "PS",
"LREAL": False,
"lcharg": False,
"lwave": False,
}
code_string = 'vasp544mpi@nancy'
resources = {'parallel_env': 'mpi*', 'tot_num_mpiprocs': 24}
code_string = "vasp544mpi@nancy"
resources = {"parallel_env": "mpi*", "tot_num_mpiprocs": 24}
base_config = {'code_string': code_string,
'potential_family': 'PBE.54',
'potential_mapping': {'Zn': 'Zn', 'Te': 'Te'},
'options': {'resources': resources,
'max_wallclock_seconds': 3600 * 10}}
base_parser_settings = {'add_energies': True,
'add_forces': True,
'add_stress': True}
base_config = {
"code_string": code_string,
"potential_family": "PBE.54",
"potential_mapping": {"Zn": "Zn", "Te": "Te"},
"options": {"resources": resources, "max_wallclock_seconds": 3600 * 10},
}
base_parser_settings = {
"add_energies": True,
"add_forces": True,
"add_stress": True,
}
forces_config = base_config.copy()
kpoints_mesh = [2, 2, 2]
forces_config.update({'kpoints_mesh': kpoints_mesh,
'kpoints_offset': [0.5, 0.5, 0.5],
'parser_settings': base_parser_settings,
'parameters': {'incar': base_incar_dict.copy()}})
forces_config['parameters']['incar']['NPAR'] = 4
nac_config = {'code_string': code_string,
'potential_family': 'PBE.54',
'potential_mapping': {'Zn': 'Zn', 'Te': 'Te'},
'options': {'resources': resources,
'max_wallclock_seconds': 3600 * 10}}
nac_parser_settings = {'add_born_charges': True,
'add_dielectrics': True}
forces_config.update(
{
"kpoints_mesh": kpoints_mesh,
"kpoints_offset": [0.5, 0.5, 0.5],
"parser_settings": base_parser_settings,
"parameters": {"incar": base_incar_dict.copy()},
}
)
forces_config["parameters"]["incar"]["NPAR"] = 4
nac_config = {
"code_string": code_string,
"potential_family": "PBE.54",
"potential_mapping": {"Zn": "Zn", "Te": "Te"},
"options": {"resources": resources, "max_wallclock_seconds": 3600 * 10},
}
nac_parser_settings = {"add_born_charges": True, "add_dielectrics": True}
nac_parser_settings.update(base_parser_settings)
nac_incar_dict = {'lepsilon': True}
nac_incar_dict = {"lepsilon": True}
nac_incar_dict.update(base_incar_dict.copy())
nac_config.update({'kpoints_mesh': [8, 8, 8],
'kpoints_offset': [0.5, 0.5, 0.5],
'parser_settings': nac_parser_settings,
'parameters': {'incar': nac_incar_dict}})
phonon_settings = {'supercell_matrix': [2, 2, 2],
'distance': 0.03}
nac_config.update(
{
"kpoints_mesh": [8, 8, 8],
"kpoints_offset": [0.5, 0.5, 0.5],
"parser_settings": nac_parser_settings,
"parameters": {"incar": nac_incar_dict},
}
)
phonon_settings = {"supercell_matrix": [2, 2, 2], "distance": 0.03}
if is_nac:
phonon_settings['is_nac'] = is_nac
phonon_settings["is_nac"] = is_nac
return structure, forces_config, nac_config, phonon_settings
def launch_phono3py(cutoff_energy=350, is_nac=False):
"""Launch calculation."""
structure, forces_config, nac_config, phonon_settings = get_settings(
cutoff_energy, is_nac)
Phono3pyWorkChain = WorkflowFactory('phonopy.phono3py')
cutoff_energy, is_nac
)
Phono3pyWorkChain = WorkflowFactory("phonopy.phono3py")
builder = Phono3pyWorkChain.get_builder()
builder.structure = structure
builder.calculator_settings = Dict(dict={'forces': forces_config,
'nac': nac_config})
builder.calculator_settings = Dict(
dict={"forces": forces_config, "nac": nac_config}
)
builder.run_phono3py = Bool(False)
builder.remote_phono3py = Bool(False)
builder.code_string = Str('phonopy@nancy')
builder.code_string = Str("phonopy@nancy")
builder.phonon_settings = Dict(dict=phonon_settings)
builder.symmetry_tolerance = Float(1e-5)
builder.options = Dict(dict=forces_config['options'])
dim = phonon_settings['supercell_matrix']
kpoints_mesh = forces_config['kpoints_mesh']
label = ("ZnTe phono3py %dx%dx%d kpt %dx%dx%d PBEsol %d eV"
% (tuple(dim) + tuple(kpoints_mesh) + (cutoff_energy, )))
builder.options = Dict(dict=forces_config["options"])
dim = phonon_settings["supercell_matrix"]
kpoints_mesh = forces_config["kpoints_mesh"]
label = "ZnTe phono3py %dx%dx%d kpt %dx%dx%d PBEsol %d eV" % (
tuple(dim) + tuple(kpoints_mesh) + (cutoff_energy,)
)
builder.metadata.label = label
builder.metadata.description = label
future = submit(builder)
print(label)
print(future)
print('Running workchain with pk={}'.format(future.pk))
print("Running workchain with pk={}".format(future.pk))
if __name__ == '__main__':
if __name__ == "__main__":
launch_phono3py(cutoff_energy=500, is_nac=True)

View File

@ -1,3 +1,4 @@
"""Shortcuts to important classes, methods, and variables."""
# Copyright (C) 2019 Atsushi Togo
# All rights reserved.
#
@ -32,8 +33,8 @@
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
from phono3py.version import __version__
from phono3py.api_phono3py import Phono3py
from phono3py.api_jointdos import Phono3pyJointDos
from phono3py.api_isotope import Phono3pyIsotope
from phono3py.cui.load import load
from phono3py.api_isotope import Phono3pyIsotope # noqa F401
from phono3py.api_jointdos import Phono3pyJointDos # noqa F401
from phono3py.api_phono3py import Phono3py # noqa F401
from phono3py.cui.load import load # noqa F401
from phono3py.version import __version__ # noqa F401

View File

@ -1,3 +1,4 @@
"""API for isotope scattering."""
# Copyright (C) 2019 Atsushi Togo
# All rights reserved.
#
@ -34,48 +35,62 @@
import numpy as np
from phonopy.units import VaspToTHz
from phono3py.other.isotope import Isotope
class Phono3pyIsotope(object):
def __init__(self,
mesh,
primitive,
mass_variances=None, # length of list is num_atom.
band_indices=None,
sigmas=None,
frequency_factor_to_THz=VaspToTHz,
store_dense_gp_map=False,
symprec=1e-5,
cutoff_frequency=None,
lapack_zheev_uplo='L'):
class Phono3pyIsotope:
"""Class to calculate isotope scattering."""
def __init__(
self,
mesh,
primitive,
mass_variances=None, # length of list is num_atom.
band_indices=None,
sigmas=None,
frequency_factor_to_THz=VaspToTHz,
store_dense_gp_map=False,
symprec=1e-5,
cutoff_frequency=None,
lapack_zheev_uplo="L",
):
"""Init method."""
if sigmas is None:
self._sigmas = [None, ]
self._sigmas = [
None,
]
else:
self._sigmas = sigmas
self._mesh_numbers = mesh
self._iso = Isotope(mesh,
primitive,
mass_variances=mass_variances,
band_indices=band_indices,
frequency_factor_to_THz=frequency_factor_to_THz,
store_dense_gp_map=store_dense_gp_map,
symprec=symprec,
cutoff_frequency=cutoff_frequency,
lapack_zheev_uplo=lapack_zheev_uplo)
self._iso = Isotope(
mesh,
primitive,
mass_variances=mass_variances,
band_indices=band_indices,
frequency_factor_to_THz=frequency_factor_to_THz,
store_dense_gp_map=store_dense_gp_map,
symprec=symprec,
cutoff_frequency=cutoff_frequency,
lapack_zheev_uplo=lapack_zheev_uplo,
)
@property
def dynamical_matrix(self):
"""Return dynamical matrix class instance."""
return self._iso.dynamical_matrix
@property
def grid(self):
"""Return BZGrid class instance."""
return self._iso.bz_grid
def run(self, grid_points):
"""Calculate isotope scattering."""
gamma = np.zeros(
(len(self._sigmas), len(grid_points), len(self._iso.band_indices)),
dtype='double')
dtype="double",
)
for j, gp in enumerate(grid_points):
self._iso.set_grid_point(gp)
@ -83,7 +98,7 @@ class Phono3pyIsotope(object):
print("--------------- Isotope scattering ---------------")
print("Grid point: %d" % gp)
adrs = self._iso.bz_grid.addresses[gp]
q = adrs.astype('double') / self._mesh_numbers
q = adrs.astype("double") / self._mesh_numbers
print("q-point: %s" % q)
if self._sigmas:
@ -96,7 +111,7 @@ class Phono3pyIsotope(object):
self._iso.run()
gamma[i, j] = self._iso.gamma
frequencies = self._iso.get_phonons()[0]
print('')
print("")
print("Phonon-isotope scattering rate in THz (1/4pi-tau)")
print(" Frequency Rate")
for g, f in zip(self._iso.gamma, frequencies[gp]):
@ -105,13 +120,16 @@ class Phono3pyIsotope(object):
print("sigma or tetrahedron method has to be set.")
self._gamma = gamma
def init_dynamical_matrix(self,
fc2,
supercell,
primitive,
nac_params=None,
frequency_scale_factor=None,
decimals=None):
def init_dynamical_matrix(
self,
fc2,
supercell,
primitive,
nac_params=None,
frequency_scale_factor=None,
decimals=None,
):
"""Initialize dynamical matrix."""
self._primitive = primitive
self._iso.init_dynamical_matrix(
fc2,
@ -119,11 +137,14 @@ class Phono3pyIsotope(object):
primitive,
nac_params=nac_params,
frequency_scale_factor=frequency_scale_factor,
decimals=decimals)
decimals=decimals,
)
def set_sigma(self, sigma):
"""Set sigma. None means tetrahedron method."""
self._iso.set_sigma(sigma)
@property
def gamma(self):
"""Return calculated isotope scattering."""
return self._gamma

View File

@ -1,3 +1,4 @@
"""API for joint-density-of-states calculation."""
# Copyright (C) 2019 Atsushi Togo
# All rights reserved.
#
@ -33,34 +34,39 @@
# POSSIBILITY OF SUCH DAMAGE.
import numpy as np
from phonopy.units import VaspToTHz
from phonopy.structure.symmetry import Symmetry
from phonopy.units import VaspToTHz
from phono3py.file_IO import write_joint_dos
from phono3py.phonon3.joint_dos import JointDos
from phono3py.phonon.grid import BZGrid
from phono3py.file_IO import write_joint_dos
class Phono3pyJointDos:
"""Class to calculate joint-density-of-states."""
class Phono3pyJointDos(object):
def __init__(self,
supercell,
primitive,
fc2,
mesh=None,
nac_params=None,
nac_q_direction=None,
sigmas=None,
cutoff_frequency=1e-4,
frequency_step=None,
num_frequency_points=None,
temperatures=None,
frequency_factor_to_THz=VaspToTHz,
frequency_scale_factor=None,
is_mesh_symmetry=True,
store_dense_gp_map=False,
symprec=1e-5,
output_filename=None,
log_level=0):
def __init__(
self,
supercell,
primitive,
fc2,
mesh=None,
nac_params=None,
nac_q_direction=None,
sigmas=None,
cutoff_frequency=1e-4,
frequency_step=None,
num_frequency_points=None,
temperatures=None,
frequency_factor_to_THz=VaspToTHz,
frequency_scale_factor=None,
is_mesh_symmetry=True,
store_dense_gp_map=False,
symprec=1e-5,
output_filename=None,
log_level=0,
):
"""Init method."""
if sigmas is None:
self._sigmas = [None]
else:
@ -71,10 +77,12 @@ class Phono3pyJointDos(object):
self._log_level = log_level
symmetry = Symmetry(primitive, symprec)
self._bz_grid = BZGrid(mesh,
lattice=primitive.cell,
symmetry_dataset=symmetry.dataset,
store_dense_gp_map=store_dense_gp_map)
self._bz_grid = BZGrid(
mesh,
lattice=primitive.cell,
symmetry_dataset=symmetry.dataset,
store_dense_gp_map=store_dense_gp_map,
)
self._jdos = JointDos(
primitive,
@ -93,18 +101,23 @@ class Phono3pyJointDos(object):
store_dense_gp_map=store_dense_gp_map,
symprec=symprec,
filename=output_filename,
log_level=self._log_level)
log_level=self._log_level,
)
self._joint_dos = None
@property
def grid(self):
"""Return BZGrid class instance."""
return self._bz_grid
def run(self, grid_points, write_jdos=False):
"""Calculate joint-density-of-states."""
if self._log_level:
print("--------------------------------- Joint DOS "
"---------------------------------")
print(
"--------------------------------- Joint DOS "
"---------------------------------"
)
print("Sampling mesh: [ %d %d %d ]" % tuple(self._bz_grid.D_diag))
for i, gp in enumerate(grid_points):
@ -112,10 +125,11 @@ class Phono3pyJointDos(object):
if self._log_level:
weights = self._jdos.get_triplets_at_q()[1]
print("======================= "
"Grid point %d (%d/%d) "
"======================="
% (gp, i + 1, len(grid_points)))
print(
"======================= "
"Grid point %d (%d/%d) "
"=======================" % (gp, i + 1, len(grid_points))
)
adrs = self._jdos.bz_grid.addresses[gp]
q = np.dot(adrs, self._bz_grid.QDinv.T)
print("q-point: (%5.2f %5.2f %5.2f)" % tuple(q))
@ -125,8 +139,7 @@ class Phono3pyJointDos(object):
print("%8.3f" % f)
if not self._sigmas:
raise RuntimeError(
"sigma or tetrahedron method has to be set.")
raise RuntimeError("sigma or tetrahedron method has to be set.")
for sigma in self._sigmas:
if self._log_level:
@ -140,26 +153,31 @@ class Phono3pyJointDos(object):
if write_jdos:
filename = self._write(gp, sigma=sigma)
if self._log_level:
print("JDOS is written into \"%s\"." % filename)
print('JDOS is written into "%s".' % filename)
@property
def dynamical_matrix(self):
"""Return DynamicalMatrix class instance."""
return self._jdos.dynamical_matrix
@property
def frequency_points(self):
"""Return frequency points."""
return self._jdos.frequency_points
@property
def joint_dos(self):
"""Return calculated joint-density-of-states."""
return self._jdos.joint_dos
def _write(self, gp, sigma=None):
return write_joint_dos(gp,
self._bz_grid.D_diag,
self._jdos.frequency_points,
self._jdos.joint_dos,
sigma=sigma,
temperatures=self._temperatures,
filename=self._filename,
is_mesh_symmetry=self._is_mesh_symmetry)
return write_joint_dos(
gp,
self._bz_grid.D_diag,
self._jdos.frequency_points,
self._jdos.joint_dos,
sigma=sigma,
temperatures=self._temperatures,
filename=self._filename,
is_mesh_symmetry=self._is_mesh_symmetry,
)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
"""Command user interface related routines."""

View File

@ -35,38 +35,50 @@
import os
import sys
import numpy as np
from phonopy.cui.phonopy_script import file_exists, print_error
from phonopy.file_IO import get_dataset_type2
from phonopy.harmonic.force_constants import (
show_drift_force_constants,
symmetrize_compact_force_constants,
symmetrize_force_constants,
symmetrize_compact_force_constants)
from phonopy.file_IO import get_dataset_type2, parse_FORCE_SETS
from phonopy.cui.phonopy_script import print_error, file_exists
)
from phonopy.interface.calculator import get_default_physical_units
from phono3py.phonon3.fc3 import show_drift_fc3
from phono3py.file_IO import (
parse_disp_fc3_yaml, parse_disp_fc2_yaml, parse_FORCES_FC2,
parse_FORCES_FC3, read_fc3_from_hdf5, read_fc2_from_hdf5,
write_fc3_to_hdf5, write_fc2_to_hdf5, get_length_of_first_line)
from phono3py.cui.show_log import show_phono3py_force_constants_settings
from phono3py.phonon3.fc3 import (
set_permutation_symmetry_fc3, set_translational_invariance_fc3)
from phono3py.file_IO import (
get_length_of_first_line,
parse_disp_fc2_yaml,
parse_disp_fc3_yaml,
parse_FORCES_FC2,
parse_FORCES_FC3,
read_fc2_from_hdf5,
read_fc3_from_hdf5,
write_fc2_to_hdf5,
write_fc3_to_hdf5,
)
from phono3py.interface.phono3py_yaml import Phono3pyYaml
from phono3py.phonon3.fc3 import (
set_permutation_symmetry_fc3,
set_translational_invariance_fc3,
show_drift_fc3,
)
def create_phono3py_force_constants(phono3py,
settings,
ph3py_yaml=None,
input_filename=None,
output_filename=None,
phono3py_yaml_filename=None,
log_level=1):
def create_phono3py_force_constants(
phono3py,
settings,
ph3py_yaml=None,
input_filename=None,
output_filename=None,
phono3py_yaml_filename=None,
log_level=1,
):
"""Read or calculate force constants."""
if settings.fc_calculator is None:
symmetrize_fc3r = (settings.is_symmetrize_fc3_r or
settings.fc_symmetry)
symmetrize_fc2 = (settings.is_symmetrize_fc2 or
settings.fc_symmetry)
symmetrize_fc3r = settings.is_symmetrize_fc3_r or settings.fc_symmetry
symmetrize_fc2 = settings.is_symmetrize_fc2 or settings.fc_symmetry
else: # Rely on fc calculator the symmetrization of fc.
symmetrize_fc2 = False
symmetrize_fc3r = False
@ -77,46 +89,49 @@ def create_phono3py_force_constants(phono3py,
#######
# fc3 #
#######
if (settings.is_joint_dos or
(settings.is_isotope and
not (settings.is_bterta or settings.is_lbte)) or
settings.read_gamma or
settings.read_pp or
(not settings.is_bterta and settings.write_phonon) or
settings.constant_averaged_pp_interaction is not None): # noqa E129
if (
settings.is_joint_dos
or (settings.is_isotope and not (settings.is_bterta or settings.is_lbte))
or settings.read_gamma
or settings.read_pp
or (not settings.is_bterta and settings.write_phonon)
or settings.constant_averaged_pp_interaction is not None
): # noqa E129
pass
else:
if settings.read_fc3:
_read_phono3py_fc3(phono3py,
symmetrize_fc3r,
input_filename,
log_level)
_read_phono3py_fc3(phono3py, symmetrize_fc3r, input_filename, log_level)
else: # fc3 from FORCES_FC3 or ph3py_yaml
_create_phono3py_fc3(phono3py,
ph3py_yaml,
symmetrize_fc3r,
input_filename,
settings.is_compact_fc,
settings.cutoff_pair_distance,
settings.fc_calculator,
settings.fc_calculator_options,
log_level)
_create_phono3py_fc3(
phono3py,
ph3py_yaml,
symmetrize_fc3r,
input_filename,
settings.is_compact_fc,
settings.cutoff_pair_distance,
settings.fc_calculator,
settings.fc_calculator_options,
log_level,
)
if output_filename is None:
filename = 'fc3.hdf5'
filename = "fc3.hdf5"
else:
filename = 'fc3.' + output_filename + '.hdf5'
filename = "fc3." + output_filename + ".hdf5"
if log_level:
print("Writing fc3 to \"%s\"." % filename)
write_fc3_to_hdf5(phono3py.fc3,
filename=filename,
p2s_map=phono3py.primitive.p2s_map,
compression=settings.hdf5_compression)
print('Writing fc3 to "%s".' % filename)
write_fc3_to_hdf5(
phono3py.fc3,
filename=filename,
p2s_map=phono3py.primitive.p2s_map,
compression=settings.hdf5_compression,
)
cutoff_distance = settings.cutoff_fc3_distance
if cutoff_distance is not None and cutoff_distance > 0:
if log_level:
print("Cutting-off fc3 by zero (cut-off distance: %f)" %
cutoff_distance)
print(
"Cutting-off fc3 by zero (cut-off distance: %f)" % cutoff_distance
)
phono3py.cutoff_fc3_by_zero(cutoff_distance)
if log_level:
@ -128,63 +143,65 @@ def create_phono3py_force_constants(phono3py,
phonon_primitive = phono3py.phonon_primitive
p2s_map = phonon_primitive.p2s_map
if settings.read_fc2:
_read_phono3py_fc2(phono3py,
symmetrize_fc2,
input_filename,
log_level)
_read_phono3py_fc2(phono3py, symmetrize_fc2, input_filename, log_level)
else:
if phono3py.phonon_supercell_matrix is None:
if (settings.fc_calculator == 'alm' and phono3py.fc2 is not None):
if settings.fc_calculator == "alm" and phono3py.fc2 is not None:
if log_level:
print("fc2 that was fit simultaneously with fc3 "
"by ALM is used.")
print("fc2 that was fit simultaneously with fc3 " "by ALM is used.")
else:
_create_phono3py_fc2(phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
settings.is_compact_fc,
settings.fc_calculator,
settings.fc_calculator_options,
log_level)
_create_phono3py_fc2(
phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
settings.is_compact_fc,
settings.fc_calculator,
settings.fc_calculator_options,
log_level,
)
else:
_create_phono3py_phonon_fc2(phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
settings.is_compact_fc,
settings.fc_calculator,
settings.fc_calculator_options,
log_level)
_create_phono3py_phonon_fc2(
phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
settings.is_compact_fc,
settings.fc_calculator,
settings.fc_calculator_options,
log_level,
)
if output_filename is None:
filename = 'fc2.hdf5'
filename = "fc2.hdf5"
else:
filename = 'fc2.' + output_filename + '.hdf5'
filename = "fc2." + output_filename + ".hdf5"
if log_level:
print("Writing fc2 to \"%s\"." % filename)
write_fc2_to_hdf5(phono3py.fc2,
filename=filename,
p2s_map=p2s_map,
physical_unit='eV/angstrom^2',
compression=settings.hdf5_compression)
print('Writing fc2 to "%s".' % filename)
write_fc2_to_hdf5(
phono3py.fc2,
filename=filename,
p2s_map=p2s_map,
physical_unit="eV/angstrom^2",
compression=settings.hdf5_compression,
)
if log_level:
show_drift_force_constants(phono3py.fc2,
primitive=phonon_primitive,
name='fc2')
show_drift_force_constants(phono3py.fc2, primitive=phonon_primitive, name="fc2")
def parse_forces(phono3py,
ph3py_yaml=None,
cutoff_pair_distance=None,
force_filename="FORCES_FC3",
disp_filename=None,
fc_type=None,
log_level=0):
def parse_forces(
phono3py,
ph3py_yaml=None,
cutoff_pair_distance=None,
force_filename="FORCES_FC3",
disp_filename=None,
fc_type=None,
log_level=0,
):
"""Read displacements and forces."""
filename_read_from = None
if fc_type == 'phonon_fc2':
if fc_type == "phonon_fc2":
natom = len(phono3py.phonon_supercell)
else:
natom = len(phono3py.supercell)
@ -197,12 +214,12 @@ def parse_forces(phono3py,
# Try to read FORCES_FC* if type-2 and return dataset.
# None is returned unless type-2.
# can emit FileNotFoundError.
if (dataset is None or
dataset is not None and not forces_in_dataset(dataset)): # noqa E129
_dataset = _get_type2_dataset(natom,
phono3py.calculator,
filename=force_filename,
log_level=log_level)
if (
dataset is None or dataset is not None and not forces_in_dataset(dataset)
): # noqa E129
_dataset = _get_type2_dataset(
natom, phono3py.calculator, filename=force_filename, log_level=log_level
)
# Do not overwrite dataset when _dataset is None.
if _dataset:
filename_read_from = force_filename
@ -214,34 +231,38 @@ def parse_forces(phono3py,
dataset = _read_disp_fc_yaml(disp_filename, fc_type)
filename_read_from = disp_filename
if 'natom' in dataset and dataset['natom'] != natom:
msg = ("Number of atoms in supercell is not consistent with "
"\"%s\"." % filename_read_from)
if "natom" in dataset and dataset["natom"] != natom:
msg = (
"Number of atoms in supercell is not consistent with "
'"%s".' % filename_read_from
)
raise RuntimeError(msg)
if log_level and filename_read_from is not None:
print("Displacement dataset for %s was read from \"%s\"."
% (fc_type, filename_read_from))
print(
'Displacement dataset for %s was read from "%s".'
% (fc_type, filename_read_from)
)
if cutoff_pair_distance:
if ('cutoff_distance' not in dataset or
('cutoff_distance' in dataset and
cutoff_pair_distance < dataset['cutoff_distance'])):
dataset['cutoff_distance'] = cutoff_pair_distance
if "cutoff_distance" not in dataset or (
"cutoff_distance" in dataset
and cutoff_pair_distance < dataset["cutoff_distance"]
):
dataset["cutoff_distance"] = cutoff_pair_distance
if log_level:
print("Cutoff-pair-distance: %f" % cutoff_pair_distance)
# Type-1 FORCES_FC*.
# dataset comes either from disp_fc*.yaml or phono3py*.yaml.
if not forces_in_dataset(dataset):
if fc_type == 'phonon_fc2':
if fc_type == "phonon_fc2":
parse_FORCES_FC2(dataset, filename=force_filename)
else:
parse_FORCES_FC3(dataset, filename=force_filename)
if log_level:
print("Sets of supercell forces were read from \"%s\"."
% force_filename)
print('Sets of supercell forces were read from "%s".' % force_filename)
sys.stdout.flush()
_convert_unit_in_dataset(dataset, phono3py.calculator)
@ -251,13 +272,13 @@ def parse_forces(phono3py,
def forces_in_dataset(dataset):
"""Return whether forces in dataset or not."""
return ('forces' in dataset or
('first_atoms' in dataset and
'forces' in dataset['first_atoms'][0]))
return "forces" in dataset or (
"first_atoms" in dataset and "forces" in dataset["first_atoms"][0]
)
def _read_disp_fc_yaml(disp_filename, fc_type):
if fc_type == 'phonon_fc2':
if fc_type == "phonon_fc2":
dataset = parse_disp_fc2_yaml(filename=disp_filename)
else:
dataset = parse_disp_fc3_yaml(filename=disp_filename)
@ -265,23 +286,21 @@ def _read_disp_fc_yaml(disp_filename, fc_type):
return dataset
def _read_phono3py_fc3(phono3py,
symmetrize_fc3r,
input_filename,
log_level):
def _read_phono3py_fc3(phono3py, symmetrize_fc3r, input_filename, log_level):
if input_filename is None:
filename = 'fc3.hdf5'
filename = "fc3.hdf5"
else:
filename = 'fc3.' + input_filename + '.hdf5'
filename = "fc3." + input_filename + ".hdf5"
file_exists(filename, log_level)
if log_level:
print("Reading fc3 from \"%s\"." % filename)
print('Reading fc3 from "%s".' % filename)
p2s_map = phono3py.primitive.p2s_map
try:
fc3 = read_fc3_from_hdf5(filename=filename, p2s_map=p2s_map)
except RuntimeError:
import traceback
traceback.print_exc()
if log_level:
print_error()
@ -300,17 +319,14 @@ def _read_phono3py_fc3(phono3py,
phono3py.fc3 = fc3
def _read_phono3py_fc2(phono3py,
symmetrize_fc2,
input_filename,
log_level):
def _read_phono3py_fc2(phono3py, symmetrize_fc2, input_filename, log_level):
if input_filename is None:
filename = 'fc2.hdf5'
filename = "fc2.hdf5"
else:
filename = 'fc2.' + input_filename + '.hdf5'
filename = "fc2." + input_filename + ".hdf5"
file_exists(filename, log_level)
if log_level:
print("Reading fc2 from \"%s\"." % filename)
print('Reading fc2 from "%s".' % filename)
num_atom = phono3py.phonon_supercell.get_number_of_atoms()
p2s_map = phono3py.phonon_primitive.p2s_map
@ -318,6 +334,7 @@ def _read_phono3py_fc2(phono3py,
phonon_fc2 = read_fc2_from_hdf5(filename=filename, p2s_map=p2s_map)
except RuntimeError:
import traceback
traceback.print_exc()
if log_level:
print_error()
@ -333,8 +350,7 @@ def _read_phono3py_fc2(phono3py,
if phonon_fc2.shape[0] == phonon_fc2.shape[1]:
symmetrize_force_constants(phonon_fc2)
else:
symmetrize_compact_force_constants(phonon_fc2,
phono3py.phonon_primitive)
symmetrize_compact_force_constants(phonon_fc2, phono3py.phonon_primitive)
phono3py.fc2 = phonon_fc2
@ -343,27 +359,31 @@ def _get_type2_dataset(natom, calculator, filename="FORCES_FC3", log_level=0):
if not os.path.isfile(filename):
return None
with open(filename, 'r') as f:
with open(filename, "r") as f:
len_first_line = get_length_of_first_line(f)
if len_first_line == 6:
dataset = get_dataset_type2(f, natom)
if log_level:
print("%d snapshots were found in %s."
% (len(dataset['displacements']), "FORCES_FC3"))
print(
"%d snapshots were found in %s."
% (len(dataset["displacements"]), "FORCES_FC3")
)
else:
dataset = None
return dataset
def _create_phono3py_fc3(phono3py,
ph3py_yaml,
symmetrize_fc3r,
input_filename,
is_compact_fc,
cutoff_pair_distance,
fc_calculator,
fc_calculator_options,
log_level):
def _create_phono3py_fc3(
phono3py,
ph3py_yaml,
symmetrize_fc3r,
input_filename,
is_compact_fc,
cutoff_pair_distance,
fc_calculator,
fc_calculator_options,
log_level,
):
"""Read or calculate fc3.
Note
@ -379,20 +399,22 @@ def _create_phono3py_fc3(phono3py,
"""
if input_filename is None:
disp_filename = 'disp_fc3.yaml'
disp_filename = "disp_fc3.yaml"
else:
disp_filename = 'disp_fc3.' + input_filename + '.yaml'
disp_filename = "disp_fc3." + input_filename + ".yaml"
_ph3py_yaml = _get_ph3py_yaml(disp_filename, ph3py_yaml)
try:
dataset = parse_forces(phono3py,
ph3py_yaml=_ph3py_yaml,
cutoff_pair_distance=cutoff_pair_distance,
force_filename="FORCES_FC3",
disp_filename=disp_filename,
fc_type='fc3',
log_level=log_level)
dataset = parse_forces(
phono3py,
ph3py_yaml=_ph3py_yaml,
cutoff_pair_distance=cutoff_pair_distance,
force_filename="FORCES_FC3",
disp_filename=disp_filename,
fc_type="fc3",
log_level=log_level,
)
except RuntimeError as e:
# from _parse_forces_type1
if log_level:
@ -404,34 +426,40 @@ def _create_phono3py_fc3(phono3py,
file_exists(e.filename, log_level)
phono3py.dataset = dataset
phono3py.produce_fc3(symmetrize_fc3r=symmetrize_fc3r,
is_compact_fc=is_compact_fc,
fc_calculator=fc_calculator,
fc_calculator_options=fc_calculator_options)
phono3py.produce_fc3(
symmetrize_fc3r=symmetrize_fc3r,
is_compact_fc=is_compact_fc,
fc_calculator=fc_calculator,
fc_calculator_options=fc_calculator_options,
)
def _create_phono3py_fc2(phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
is_compact_fc,
fc_calculator,
fc_calculator_options,
log_level):
def _create_phono3py_fc2(
phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
is_compact_fc,
fc_calculator,
fc_calculator_options,
log_level,
):
if input_filename is None:
disp_filename = 'disp_fc3.yaml'
disp_filename = "disp_fc3.yaml"
else:
disp_filename = 'disp_fc3.' + input_filename + '.yaml'
disp_filename = "disp_fc3." + input_filename + ".yaml"
_ph3py_yaml = _get_ph3py_yaml(disp_filename, ph3py_yaml)
try:
dataset = parse_forces(phono3py,
ph3py_yaml=_ph3py_yaml,
force_filename="FORCES_FC3",
disp_filename=disp_filename,
fc_type='fc2',
log_level=log_level)
dataset = parse_forces(
phono3py,
ph3py_yaml=_ph3py_yaml,
force_filename="FORCES_FC3",
disp_filename=disp_filename,
fc_type="fc2",
log_level=log_level,
)
except RuntimeError as e:
if log_level:
print(str(e))
@ -445,7 +473,8 @@ def _create_phono3py_fc2(phono3py,
symmetrize_fc2=symmetrize_fc2,
is_compact_fc=is_compact_fc,
fc_calculator=fc_calculator,
fc_calculator_options=fc_calculator_options)
fc_calculator_options=fc_calculator_options,
)
def _get_ph3py_yaml(disp_filename, ph3py_yaml):
@ -453,34 +482,38 @@ def _get_ph3py_yaml(disp_filename, ph3py_yaml):
# Try to use phono3py.phonon_dataset when the disp file not found
if not os.path.isfile(disp_filename):
disp_filename = None
if _ph3py_yaml is None and os.path.isfile('phono3py_disp.yaml'):
if _ph3py_yaml is None and os.path.isfile("phono3py_disp.yaml"):
_ph3py_yaml = Phono3pyYaml()
_ph3py_yaml.read('phono3py_disp.yaml')
_ph3py_yaml.read("phono3py_disp.yaml")
return _ph3py_yaml
def _create_phono3py_phonon_fc2(phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
is_compact_fc,
fc_calculator,
fc_calculator_options,
log_level):
def _create_phono3py_phonon_fc2(
phono3py,
ph3py_yaml,
symmetrize_fc2,
input_filename,
is_compact_fc,
fc_calculator,
fc_calculator_options,
log_level,
):
if input_filename is None:
disp_filename = 'disp_fc2.yaml'
disp_filename = "disp_fc2.yaml"
else:
disp_filename = 'disp_fc2.' + input_filename + '.yaml'
disp_filename = "disp_fc2." + input_filename + ".yaml"
_ph3py_yaml = _get_ph3py_yaml(disp_filename, ph3py_yaml)
try:
dataset = parse_forces(phono3py,
ph3py_yaml=_ph3py_yaml,
force_filename="FORCES_FC2",
disp_filename=disp_filename,
fc_type='phonon_fc2',
log_level=log_level)
dataset = parse_forces(
phono3py,
ph3py_yaml=_ph3py_yaml,
force_filename="FORCES_FC2",
disp_filename=disp_filename,
fc_type="phonon_fc2",
log_level=log_level,
)
except RuntimeError as e:
if log_level:
print(str(e))
@ -494,49 +527,50 @@ def _create_phono3py_phonon_fc2(phono3py,
symmetrize_fc2=symmetrize_fc2,
is_compact_fc=is_compact_fc,
fc_calculator=fc_calculator,
fc_calculator_options=fc_calculator_options)
fc_calculator_options=fc_calculator_options,
)
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']
force_to_eVperA = physical_units["force_to_eVperA"]
distance_to_A = physical_units["distance_to_A"]
if 'first_atoms' in dataset:
for d1 in dataset['first_atoms']:
if "first_atoms" in dataset:
for d1 in dataset["first_atoms"]:
if distance_to_A is not None:
disp = _to_ndarray(d1['displacement'])
d1['displacement'] = disp * distance_to_A
if force_to_eVperA is not None and 'forces' in d1:
forces = _to_ndarray(d1['forces'])
d1['forces'] = forces * force_to_eVperA
if 'second_atoms' in d1:
for d2 in d1['second_atoms']:
disp = _to_ndarray(d1["displacement"])
d1["displacement"] = disp * distance_to_A
if force_to_eVperA is not None and "forces" in d1:
forces = _to_ndarray(d1["forces"])
d1["forces"] = forces * force_to_eVperA
if "second_atoms" in d1:
for d2 in d1["second_atoms"]:
if distance_to_A is not None:
disp = _to_ndarray(d2['displacement'])
d2['displacement'] = disp * distance_to_A
if force_to_eVperA is not None and 'forces' in d2:
forces = _to_ndarray(d2['forces'])
d2['forces'] = forces * force_to_eVperA
disp = _to_ndarray(d2["displacement"])
d2["displacement"] = disp * distance_to_A
if force_to_eVperA is not None and "forces" in d2:
forces = _to_ndarray(d2["forces"])
d2["forces"] = forces * force_to_eVperA
else:
if distance_to_A is not None and 'displacements' in dataset:
disp = _to_ndarray(dataset['displacements'])
dataset['displacements'] = disp * distance_to_A
if force_to_eVperA is not None and 'forces' in dataset:
forces = _to_ndarray(dataset['forces'])
dataset['forces'] = forces * force_to_eVperA
if distance_to_A is not None and "displacements" in dataset:
disp = _to_ndarray(dataset["displacements"])
dataset["displacements"] = disp * distance_to_A
if force_to_eVperA is not None and "forces" in dataset:
forces = _to_ndarray(dataset["forces"])
dataset["forces"] = forces * force_to_eVperA
def _to_ndarray(array, dtype='double'):
def _to_ndarray(array, dtype="double"):
if type(array) is not np.ndarray:
return np.array(array, dtype=dtype, order='C')
return np.array(array, dtype=dtype, order="C")
else:
return array
def _extract_datast_from_ph3py_yaml(ph3py_yaml, fc_type):
dataset = None
if fc_type == 'phonon_fc2':
if fc_type == "phonon_fc2":
if ph3py_yaml and ph3py_yaml.phonon_dataset is not None:
# copy dataset
# otherwise unit conversion can be applied multiple times.

View File

@ -1,3 +1,4 @@
"""Utilities of main CUI script."""
# Copyright (C) 2015 Atsushi Togo
# All rights reserved.
#
@ -32,61 +33,65 @@
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
from phonopy.interface.calculator import write_supercells_with_displacements
from phono3py import Phono3py
from phono3py.file_IO import write_disp_fc3_yaml, write_disp_fc2_yaml
from phono3py.file_IO import write_disp_fc2_yaml, write_disp_fc3_yaml
from phono3py.interface.calculator import (
get_additional_info_to_write_fc2_supercells,
get_additional_info_to_write_supercells,
get_default_displacement_distance)
from phonopy.interface.calculator import write_supercells_with_displacements
get_default_displacement_distance,
)
def create_phono3py_supercells(cell_info,
settings,
symprec,
output_filename=None,
interface_mode='vasp',
log_level=1):
"""create displacements and supercells
def create_phono3py_supercells(
cell_info,
settings,
symprec,
output_filename=None,
interface_mode="vasp",
log_level=1,
):
"""Create displacements and supercells.
Distance unit used is that for the calculator interface.
The default unit is Angstron.
"""
optional_structure_info = cell_info['optional_structure_info']
optional_structure_info = cell_info["optional_structure_info"]
if settings.displacement_distance is None:
distance = get_default_displacement_distance(interface_mode)
else:
distance = settings.displacement_distance
phono3py = Phono3py(
cell_info['unitcell'],
cell_info['supercell_matrix'],
primitive_matrix=cell_info['primitive_matrix'],
phonon_supercell_matrix=cell_info['phonon_supercell_matrix'],
cell_info["unitcell"],
cell_info["supercell_matrix"],
primitive_matrix=cell_info["primitive_matrix"],
phonon_supercell_matrix=cell_info["phonon_supercell_matrix"],
is_symmetry=settings.is_symmetry,
symprec=symprec,
calculator=interface_mode)
calculator=interface_mode,
)
phono3py.generate_displacements(
distance=distance,
cutoff_pair_distance=settings.cutoff_pair_distance,
is_plusminus=settings.is_plusminus_displacement,
is_diagonal=settings.is_diagonal_displacement)
is_diagonal=settings.is_diagonal_displacement,
)
if log_level:
print('')
print("Unit cell was read from \"%s\"." %
optional_structure_info[0])
print("")
print('Unit cell was read from "%s".' % optional_structure_info[0])
print("Displacement distance: %s" % distance)
if output_filename is None:
filename = 'disp_fc3.yaml'
filename = "disp_fc3.yaml"
else:
filename = 'disp_fc3.' + output_filename + '.yaml'
num_disps, num_disp_files = write_disp_fc3_yaml(phono3py.dataset,
phono3py.supercell,
filename=filename)
filename = "disp_fc3." + output_filename + ".yaml"
num_disps, num_disp_files = write_disp_fc3_yaml(
phono3py.dataset, phono3py.supercell, filename=filename
)
ids = []
disp_cells = []
for i, cell in enumerate(phono3py.supercells_with_displacements):
@ -95,41 +100,46 @@ def create_phono3py_supercells(cell_info,
disp_cells.append(cell)
additional_info = get_additional_info_to_write_supercells(
interface_mode, phono3py.supercell_matrix)
write_supercells_with_displacements(interface_mode,
phono3py.supercell,
disp_cells,
optional_structure_info,
displacement_ids=ids,
zfill_width=5,
additional_info=additional_info)
interface_mode, phono3py.supercell_matrix
)
write_supercells_with_displacements(
interface_mode,
phono3py.supercell,
disp_cells,
optional_structure_info,
displacement_ids=ids,
zfill_width=5,
additional_info=additional_info,
)
if log_level:
print("Number of displacements: %d" % num_disps)
if settings.cutoff_pair_distance is not None:
print("Cutoff distance for displacements: %s" %
settings.cutoff_pair_distance)
print("Number of displacement supercell files created: %d" %
num_disp_files)
print(
"Cutoff distance for displacements: %s" % settings.cutoff_pair_distance
)
print("Number of displacement supercell files created: %d" % num_disp_files)
if phono3py.phonon_supercell_matrix is not None:
if output_filename is None:
filename = 'disp_fc2.yaml'
filename = "disp_fc2.yaml"
else:
filename = 'disp_fc2.' + output_filename + '.yaml'
filename = "disp_fc2." + output_filename + ".yaml"
num_disps = write_disp_fc2_yaml(phono3py.phonon_dataset,
phono3py.phonon_supercell,
filename=filename)
num_disps = write_disp_fc2_yaml(
phono3py.phonon_dataset, phono3py.phonon_supercell, filename=filename
)
additional_info = get_additional_info_to_write_fc2_supercells(
interface_mode, phono3py.phonon_supercell_matrix)
interface_mode, phono3py.phonon_supercell_matrix
)
write_supercells_with_displacements(
interface_mode,
phono3py.supercell,
phono3py.phonon_supercells_with_displacements,
optional_structure_info,
zfill_width=5,
additional_info=additional_info)
additional_info=additional_info,
)
if log_level:
print("Number of displacements for special fc2: %d" % num_disps)

Some files were not shown because too many files have changed in this diff Show More