mirror of https://github.com/phonopy/phono3py.git
Merge branch 'rc'
This commit is contained in:
commit
a8cbfb0421
|
@ -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
|
||||
|
|
|
@ -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: |
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
93
.travis.yml
93
.travis.yml
|
@ -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
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"python.testing.pytestArgs": [
|
||||
"test"
|
||||
],
|
||||
"python.testing.unittestEnabled": false,
|
||||
"python.testing.nosetestsEnabled": false,
|
||||
"python.testing.pytestEnabled": true
|
||||
}
|
59
README.md
59
README.md
|
@ -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
|
||||
```
|
||||
|
|
176
c/_lapackepy.c
176
c/_lapackepy.c
|
@ -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);
|
||||
}
|
||||
|
|
4012
c/_phono3py.c
4012
c/_phono3py.c
File diff suppressed because it is too large
Load Diff
347
c/_phononmod.c
347
c/_phononmod.c
|
@ -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;
|
||||
}
|
||||
|
|
779
c/bzgrid.c
779
c/bzgrid.c
|
@ -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];
|
||||
}
|
||||
|
|
51
c/bzgrid.h
51
c/bzgrid.h
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
927
c/dynmat.c
927
c/dynmat.c
File diff suppressed because it is too large
Load Diff
68
c/dynmat.h
68
c/dynmat.h
|
@ -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
|
||||
|
|
36
c/fc3.h
36
c/fc3.h
|
@ -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
|
||||
|
|
467
c/grgrid.c
467
c/grgrid.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
37
c/grgrid.h
37
c/grgrid.h
|
@ -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],
|
||||
|
|
371
c/gridsys.c
371
c/gridsys.c
|
@ -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);
|
||||
}
|
||||
|
|
102
c/gridsys.h
102
c/gridsys.h
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
563
c/interaction.c
563
c/interaction.c
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
330
c/isotope.c
330
c/isotope.c
|
@ -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;
|
||||
}
|
||||
|
|
38
c/isotope.h
38
c/isotope.h
|
@ -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
|
||||
|
|
394
c/lagrid.c
394
c/lagrid.c
|
@ -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;
|
||||
}
|
||||
|
|
26
c/lagrid.h
26
c/lagrid.h
|
@ -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]);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
1359
c/phono3py.c
1359
c/phono3py.c
File diff suppressed because it is too large
Load Diff
411
c/phono3py.h
411
c/phono3py.h
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
983
c/phonon.c
983
c/phonon.c
File diff suppressed because it is too large
Load Diff
76
c/phonon.h
76
c/phonon.h
|
@ -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
|
||||
|
|
112
c/phononmod.c
112
c/phononmod.c
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
591
c/pp_collision.c
591
c/pp_collision.c
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
709
c/snf3x3.c
709
c/snf3x3.c
|
@ -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();
|
||||
|
|
|
@ -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
234
c/triplet.c
234
c/triplet.c
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
61
c/triplet.h
61
c/triplet.h
|
@ -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
|
||||
|
|
759
c/triplet_grid.c
759
c/triplet_grid.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
534
c/triplet_iw.c
534
c/triplet_iw.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 |
391
doc/changelog.md
391
doc/changelog.md
|
@ -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.
|
||||
|
|
|
@ -47,4 +47,4 @@ following article:
|
|||
doi = {10.1103/PhysRevLett.110.265506},
|
||||
url = {https://link.aps.org/doi/10.1103/PhysRevLett.110.265506}
|
||||
}
|
||||
```
|
||||
```
|
||||
|
|
|
@ -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 Kramers–Kronig 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.
|
||||
|
|
55
doc/conf.py
55
doc/conf.py
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
```
|
||||
```
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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) |
|
||||
```
|
||||
```
|
||||
|
|
|
@ -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
|
||||
```
|
||||
```
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -849,4 +849,4 @@ displacement_pairs:
|
|||
|
||||
displacement_pair_info:
|
||||
number_of_singles: 1
|
||||
number_of_pairs: 110
|
||||
number_of_pairs: 110
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -849,4 +849,4 @@ displacement_pairs:
|
|||
|
||||
displacement_pair_info:
|
||||
number_of_singles: 1
|
||||
number_of_pairs: 110
|
||||
number_of_pairs: 110
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -849,4 +849,4 @@ displacement_pairs:
|
|||
|
||||
displacement_pair_info:
|
||||
number_of_singles: 1
|
||||
number_of_pairs: 110
|
||||
number_of_pairs: 110
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -851,4 +851,4 @@ displacement_pairs:
|
|||
|
||||
displacement_pair_info:
|
||||
number_of_singles: 1
|
||||
number_of_pairs: 110
|
||||
number_of_pairs: 110
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -8,4 +8,3 @@ $coord
|
|||
5.17898184151 0.00000000000 5.17898184151 si
|
||||
0.00000000000 5.17898184151 5.17898184151 si
|
||||
$end
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -0,0 +1 @@
|
|||
"""Command user interface related routines."""
|
|
@ -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.
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue