From 5691d930f1440f3b2d7c016dc066b3e77ddd6f88 Mon Sep 17 00:00:00 2001 From: HTP-tools Developers Date: Sat, 14 Sep 2024 01:07:20 +0000 Subject: [PATCH] Deploy docs to v1.1.0 by GitHub Actions triggered by 69d21f681be1579beb86ad534e29a1af71a80552 --- manual/v1.1.0/en/cif2x-usersguide.pdf | Bin 0 -> 119245 bytes manual/v1.1.0/en/html/.buildinfo | 4 + .../html/_sources/cif2x/about/index.rst.txt | 86 ++ .../_sources/cif2x/appendix/index.rst.txt | 47 + .../html/_sources/cif2x/basic-usage.rst.txt | 123 +++ .../html/_sources/cif2x/command/index.rst.txt | 56 ++ .../_sources/cif2x/filespec/index.rst.txt | 300 ++++++ .../en/html/_sources/cif2x/index.rst.txt | 16 + .../_sources/cif2x/tutorial/index.rst.txt | 67 ++ .../html/_sources/getcif/about/index.rst.txt | 5 + .../_sources/getcif/appendix/index.rst.txt | 320 ++++++ .../_sources/getcif/command/index.rst.txt | 44 + .../_sources/getcif/filespec/index.rst.txt | 137 +++ .../en/html/_sources/getcif/index.rst.txt | 14 + .../_sources/getcif/tutorial/index.rst.txt | 114 +++ manual/v1.1.0/en/html/_sources/index.rst.txt | 20 + manual/v1.1.0/en/html/_static/alabaster.css | 708 ++++++++++++++ manual/v1.1.0/en/html/_static/basic.css | 925 ++++++++++++++++++ manual/v1.1.0/en/html/_static/custom.css | 1 + manual/v1.1.0/en/html/_static/doctools.js | 156 +++ .../en/html/_static/documentation_options.js | 13 + manual/v1.1.0/en/html/_static/file.png | Bin 0 -> 286 bytes .../v1.1.0/en/html/_static/language_data.js | 199 ++++ manual/v1.1.0/en/html/_static/minus.png | Bin 0 -> 90 bytes manual/v1.1.0/en/html/_static/plus.png | Bin 0 -> 90 bytes manual/v1.1.0/en/html/_static/pygments.css | 75 ++ manual/v1.1.0/en/html/_static/searchtools.js | 620 ++++++++++++ .../en/html/_static/sphinx_highlight.js | 154 +++ manual/v1.1.0/en/html/cif2x/about/index.html | 186 ++++ .../v1.1.0/en/html/cif2x/appendix/index.html | 151 +++ manual/v1.1.0/en/html/cif2x/basic-usage.html | 236 +++++ .../v1.1.0/en/html/cif2x/command/index.html | 167 ++++ .../v1.1.0/en/html/cif2x/filespec/index.html | 395 ++++++++ manual/v1.1.0/en/html/cif2x/index.html | 162 +++ .../v1.1.0/en/html/cif2x/tutorial/index.html | 217 ++++ manual/v1.1.0/en/html/genindex.html | 103 ++ manual/v1.1.0/en/html/getcif/about/index.html | 122 +++ .../v1.1.0/en/html/getcif/appendix/index.html | 466 +++++++++ .../v1.1.0/en/html/getcif/command/index.html | 160 +++ .../v1.1.0/en/html/getcif/filespec/index.html | 238 +++++ manual/v1.1.0/en/html/getcif/index.html | 144 +++ .../v1.1.0/en/html/getcif/tutorial/index.html | 258 +++++ manual/v1.1.0/en/html/index.html | 122 +++ manual/v1.1.0/en/html/objects.inv | Bin 0 -> 610 bytes manual/v1.1.0/en/html/search.html | 120 +++ manual/v1.1.0/en/html/searchindex.js | 1 + manual/v1.1.0/ja/cif2x-usersguide.pdf | Bin 0 -> 127756 bytes manual/v1.1.0/ja/html/.buildinfo | 4 + .../html/_sources/cif2x/about/index.rst.txt | 93 ++ .../_sources/cif2x/appendix/index.rst.txt | 50 + .../html/_sources/cif2x/basic-usage.rst.txt | 121 +++ .../html/_sources/cif2x/command/index.rst.txt | 57 ++ .../_sources/cif2x/filespec/index.rst.txt | 291 ++++++ .../ja/html/_sources/cif2x/index.rst.txt | 16 + .../_sources/cif2x/tutorial/index.rst.txt | 65 ++ .../html/_sources/getcif/about/index.rst.txt | 5 + .../_sources/getcif/appendix/index.rst.txt | 322 ++++++ .../_sources/getcif/command/index.rst.txt | 45 + .../_sources/getcif/filespec/index.rst.txt | 126 +++ .../ja/html/_sources/getcif/index.rst.txt | 13 + .../_sources/getcif/tutorial/index.rst.txt | 109 +++ manual/v1.1.0/ja/html/_sources/index.rst.txt | 20 + manual/v1.1.0/ja/html/_static/alabaster.css | 708 ++++++++++++++ manual/v1.1.0/ja/html/_static/basic.css | 925 ++++++++++++++++++ manual/v1.1.0/ja/html/_static/custom.css | 1 + manual/v1.1.0/ja/html/_static/doctools.js | 156 +++ .../ja/html/_static/documentation_options.js | 13 + manual/v1.1.0/ja/html/_static/file.png | Bin 0 -> 286 bytes .../v1.1.0/ja/html/_static/language_data.js | 26 + manual/v1.1.0/ja/html/_static/minus.png | Bin 0 -> 90 bytes manual/v1.1.0/ja/html/_static/plus.png | Bin 0 -> 90 bytes manual/v1.1.0/ja/html/_static/pygments.css | 75 ++ manual/v1.1.0/ja/html/_static/searchtools.js | 620 ++++++++++++ .../ja/html/_static/sphinx_highlight.js | 154 +++ manual/v1.1.0/ja/html/_static/translations.js | 60 ++ manual/v1.1.0/ja/html/cif2x/about/index.html | 190 ++++ .../v1.1.0/ja/html/cif2x/appendix/index.html | 155 +++ manual/v1.1.0/ja/html/cif2x/basic-usage.html | 236 +++++ .../v1.1.0/ja/html/cif2x/command/index.html | 168 ++++ .../v1.1.0/ja/html/cif2x/filespec/index.html | 394 ++++++++ manual/v1.1.0/ja/html/cif2x/index.html | 163 +++ .../v1.1.0/ja/html/cif2x/tutorial/index.html | 217 ++++ manual/v1.1.0/ja/html/genindex.html | 104 ++ manual/v1.1.0/ja/html/getcif/about/index.html | 123 +++ .../v1.1.0/ja/html/getcif/appendix/index.html | 465 +++++++++ .../v1.1.0/ja/html/getcif/command/index.html | 161 +++ .../v1.1.0/ja/html/getcif/filespec/index.html | 246 +++++ manual/v1.1.0/ja/html/getcif/index.html | 145 +++ .../v1.1.0/ja/html/getcif/tutorial/index.html | 246 +++++ manual/v1.1.0/ja/html/index.html | 123 +++ manual/v1.1.0/ja/html/objects.inv | Bin 0 -> 705 bytes manual/v1.1.0/ja/html/search.html | 120 +++ manual/v1.1.0/ja/html/searchindex.js | 1 + 93 files changed, 14784 insertions(+) create mode 100644 manual/v1.1.0/en/cif2x-usersguide.pdf create mode 100644 manual/v1.1.0/en/html/.buildinfo create mode 100644 manual/v1.1.0/en/html/_sources/cif2x/about/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/cif2x/appendix/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/cif2x/basic-usage.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/cif2x/command/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/cif2x/filespec/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/cif2x/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/cif2x/tutorial/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/getcif/about/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/getcif/appendix/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/getcif/command/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/getcif/filespec/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/getcif/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/getcif/tutorial/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_sources/index.rst.txt create mode 100644 manual/v1.1.0/en/html/_static/alabaster.css create mode 100644 manual/v1.1.0/en/html/_static/basic.css create mode 100644 manual/v1.1.0/en/html/_static/custom.css create mode 100644 manual/v1.1.0/en/html/_static/doctools.js create mode 100644 manual/v1.1.0/en/html/_static/documentation_options.js create mode 100644 manual/v1.1.0/en/html/_static/file.png create mode 100644 manual/v1.1.0/en/html/_static/language_data.js create mode 100644 manual/v1.1.0/en/html/_static/minus.png create mode 100644 manual/v1.1.0/en/html/_static/plus.png create mode 100644 manual/v1.1.0/en/html/_static/pygments.css create mode 100644 manual/v1.1.0/en/html/_static/searchtools.js create mode 100644 manual/v1.1.0/en/html/_static/sphinx_highlight.js create mode 100644 manual/v1.1.0/en/html/cif2x/about/index.html create mode 100644 manual/v1.1.0/en/html/cif2x/appendix/index.html create mode 100644 manual/v1.1.0/en/html/cif2x/basic-usage.html create mode 100644 manual/v1.1.0/en/html/cif2x/command/index.html create mode 100644 manual/v1.1.0/en/html/cif2x/filespec/index.html create mode 100644 manual/v1.1.0/en/html/cif2x/index.html create mode 100644 manual/v1.1.0/en/html/cif2x/tutorial/index.html create mode 100644 manual/v1.1.0/en/html/genindex.html create mode 100644 manual/v1.1.0/en/html/getcif/about/index.html create mode 100644 manual/v1.1.0/en/html/getcif/appendix/index.html create mode 100644 manual/v1.1.0/en/html/getcif/command/index.html create mode 100644 manual/v1.1.0/en/html/getcif/filespec/index.html create mode 100644 manual/v1.1.0/en/html/getcif/index.html create mode 100644 manual/v1.1.0/en/html/getcif/tutorial/index.html create mode 100644 manual/v1.1.0/en/html/index.html create mode 100644 manual/v1.1.0/en/html/objects.inv create mode 100644 manual/v1.1.0/en/html/search.html create mode 100644 manual/v1.1.0/en/html/searchindex.js create mode 100644 manual/v1.1.0/ja/cif2x-usersguide.pdf create mode 100644 manual/v1.1.0/ja/html/.buildinfo create mode 100644 manual/v1.1.0/ja/html/_sources/cif2x/about/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/cif2x/appendix/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/cif2x/basic-usage.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/cif2x/command/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/cif2x/filespec/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/cif2x/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/cif2x/tutorial/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/getcif/about/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/getcif/appendix/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/getcif/command/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/getcif/filespec/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/getcif/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/getcif/tutorial/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_sources/index.rst.txt create mode 100644 manual/v1.1.0/ja/html/_static/alabaster.css create mode 100644 manual/v1.1.0/ja/html/_static/basic.css create mode 100644 manual/v1.1.0/ja/html/_static/custom.css create mode 100644 manual/v1.1.0/ja/html/_static/doctools.js create mode 100644 manual/v1.1.0/ja/html/_static/documentation_options.js create mode 100644 manual/v1.1.0/ja/html/_static/file.png create mode 100644 manual/v1.1.0/ja/html/_static/language_data.js create mode 100644 manual/v1.1.0/ja/html/_static/minus.png create mode 100644 manual/v1.1.0/ja/html/_static/plus.png create mode 100644 manual/v1.1.0/ja/html/_static/pygments.css create mode 100644 manual/v1.1.0/ja/html/_static/searchtools.js create mode 100644 manual/v1.1.0/ja/html/_static/sphinx_highlight.js create mode 100644 manual/v1.1.0/ja/html/_static/translations.js create mode 100644 manual/v1.1.0/ja/html/cif2x/about/index.html create mode 100644 manual/v1.1.0/ja/html/cif2x/appendix/index.html create mode 100644 manual/v1.1.0/ja/html/cif2x/basic-usage.html create mode 100644 manual/v1.1.0/ja/html/cif2x/command/index.html create mode 100644 manual/v1.1.0/ja/html/cif2x/filespec/index.html create mode 100644 manual/v1.1.0/ja/html/cif2x/index.html create mode 100644 manual/v1.1.0/ja/html/cif2x/tutorial/index.html create mode 100644 manual/v1.1.0/ja/html/genindex.html create mode 100644 manual/v1.1.0/ja/html/getcif/about/index.html create mode 100644 manual/v1.1.0/ja/html/getcif/appendix/index.html create mode 100644 manual/v1.1.0/ja/html/getcif/command/index.html create mode 100644 manual/v1.1.0/ja/html/getcif/filespec/index.html create mode 100644 manual/v1.1.0/ja/html/getcif/index.html create mode 100644 manual/v1.1.0/ja/html/getcif/tutorial/index.html create mode 100644 manual/v1.1.0/ja/html/index.html create mode 100644 manual/v1.1.0/ja/html/objects.inv create mode 100644 manual/v1.1.0/ja/html/search.html create mode 100644 manual/v1.1.0/ja/html/searchindex.js diff --git a/manual/v1.1.0/en/cif2x-usersguide.pdf b/manual/v1.1.0/en/cif2x-usersguide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..05cef9b8f5011a422eb7cefed60c16b86ad1a4ae GIT binary patch literal 119245 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, `Quantum ESPRESSO `_, `OpenMX `_, and `AkaiKKR `_. + +License +---------------------------------------------------------------- + +The distribution of the program package and the source codes for cif2x follow GNU General Public License version 3 (GPL v3) or later. + +Contributors +---------------------------------------------------------------- + +This software was developed by the following contributors. + + - Developers + + - Kazuyoshi Yoshimi (The Instutite for Solid State Physics, The University of Tokyo) + + - Tatsumi Aoyama (The Instutite for Solid State Physics, The University of Tokyo) + + - Yuichi Motoyama (The Instutite for Solid State Physics, The University of Tokyo) + + - Masahiro Fukuda (The Instutite for Solid State Physics, The University of Tokyo) + + - Kota Ido (The Instutite for Solid State Physics, The University of Tokyo) + + - Tetsuya Fukushima (The National Institute of Advanced Industrial Science and Technology (AIST)) + + - Shusuke Kasamatsu (Yamagata University) + + - Takashi Koretsune (Tohoku University) + + - Project Corrdinator + + - Taisuke Ozaki (The Instutite for Solid State Physics, The University of Tokyo) + +Release history +---------------------------------------------------------------- + + ver.1.1.0 + Released on 2024/09/14 + + ver.1.0.1 + Released on 2024/03/31 + + ver.1.0.0 + Released on 2024/03/19 + + ver.1.0-alpha + Released on 2023/12/28 + +Copyright +---------------------------------------------------------------- + +.. only:: html + + |copy| *2023- The University of Tokyo. All rights reserved.* + + .. |copy| unicode:: 0xA9 .. copyright sign + +.. only:: latex + + :math:`\copyright` *2023- The University of Tokyo. All rights reserved.* + + +This software was developed with the support of "Project for advancement of software usability in materials science" of The Institute for Solid State Physics, The University of Tokyo. + +Operating environment +---------------------------------------------------------------- + +This tool was tested on the following platforms: + +- Ubuntu Linux + python3 + diff --git a/manual/v1.1.0/en/html/_sources/cif2x/appendix/index.rst.txt b/manual/v1.1.0/en/html/_sources/cif2x/appendix/index.rst.txt new file mode 100644 index 0000000..9aabd23 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/cif2x/appendix/index.rst.txt @@ -0,0 +1,47 @@ +.. _sec-cif2x-appendix: + +================================================================ +Extension guide +================================================================ + +Adding modes of Quantum ESPRESSO +---------------------------------------------------------------- + +In order to add supports to modes of Quantum ESPRESSO, the mapping between the modes and the transformation classes should be added to ``create_modeproc()`` function in ``src/cif2x/qe/calc_mode.py``. + +.. code-block:: python + + def create_modeproc(mode, qe): + if mode in ["scf", "nscf"]: + modeproc = QEmode_pw(qe) + else: + modeproc = QEmode_generic(qe) + return modeproc + + +The transformation functionality for each mode is provided as a derived class of ``QEmode_base`` class. This class implements methods ``update_namelist()`` for updating the namelist block, and ``update_cards()`` for generating data of card blocks. +In the current version, two classes are provided: ``QEmode_pw`` class for scf and nscf calculations of pw.x, and ``QEmode_generic`` class for generating output as-is. + +.. code-block:: python + + class QEmode_base: + def __init__(self, qe): + def update_namelist(self, content): + def update_cards(self, content): + + +For the namelist, the transformation class generates values for blank entries from crystal structure data and other sources. It may also force to set values such as the lattice parameters that are determined from the crystal structure data, or those that must be specified consistently with other parameters. The functions are provided for each mode separately. + +For card blocks, a function is provided for each card, and the mapping between the card type and the function is given in the ``card_table`` variable. +The method ``update_cards()`` in the base class picks up and runs the function associated to the card, and updates the content of the card. Of course, a new ``update_cards()`` function may be defined. + +.. code-block:: python + + self.card_table = { + 'CELL_PARAMETERS': generate_cell_parameters, + 'ATOMIC_SPECIES': generate_atomic_species, + 'ATOMIC_POSITIONS': generate_atomic_positions, + 'K_POINTS': generate_k_points, + } + +The functions for cards are gathered in ``src/cif2x/qe/cards.py`` with the function names as ``generate_{card name}``. These functions takes parameters for card blocks as argument, and returns a dictionary containing the card name, the options, and the data field. diff --git a/manual/v1.1.0/en/html/_sources/cif2x/basic-usage.rst.txt b/manual/v1.1.0/en/html/_sources/cif2x/basic-usage.rst.txt new file mode 100644 index 0000000..b30186f --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/cif2x/basic-usage.rst.txt @@ -0,0 +1,123 @@ +Installation and basic usage +================================================================ + +**Prerequisite** + + Input file generator for first-principles calculation ``cif2x`` included in HTP-tools requires the following programs and libraries: + + - python 3.x + - pymatgen module + - ruamel.yaml module + - f90nml module + - qe-tools module + - numpy module + - pandas module + - monty module + - OpenBabel module (optional) + - AkaiKKRPythonUtil module + + For A tool to retrieve crystallographic data from databases ``getcif``, the additional library is required: + + - mp-api module + + +**Official pages** + + - `GitHub repository `_ + +**Downloads** + + cif2x can be downloaded by the following command with git: + + .. code-block:: bash + + $ git clone https://github.com/issp-center-dev/cif2x.git + +**Installation** + + Once the source files are obtained, you can install cif2x by running the following command. The required libraries will also be installed automatically at the same time. + + .. code-block:: bash + + $ cd ./cif2x + $ python3 -m pip install . + + The executable files ``cif2x`` and ``getcif`` will be installed. + You may need to add ``--user`` option next to ``install`` keyword above in case you are not allowed to install packages system-wide. + + AkaiKKRPythonUtil module need to be installed separately. The source package is available from `the repository `_. Then follow the steps below to install the module along with the required seaborn module: + + .. code-block:: bash + + $ git clone https://github.com/AkaiKKRteam/AkaiKKRPythonUtil.git + $ cd ./AkaiKKRPythonUtil/library/PyAkaiKKR + $ python3 -m pip install . + $ python3 -m pip install seaborn + + +**Directory structure** + + :: + + . + |-- LICENSE + |-- README.md + |-- pyproject.toml + |-- docs/ + | |-- ja/ + | |-- en/ + | |-- tutorial/ + |-- src/ + | |-- cif2x/ + | |-- __init__.py + | |-- main.py + | |-- cif2struct.py + | |-- struct2qe.py + | |-- qe/ + | | |-- __init__.py + | | |-- calc_mode.py + | | |-- cards.py + | | |-- content.py + | | |-- qeutils.py + | | |-- tools.py + | |-- struct2vasp.py + | |-- struct2openmx.py + | |-- openmx/ + | | |-- __init__.py + | | |-- vps_table.py + | |-- struct2akaikkr.py + | |-- akaikkr/ + | | |-- make_input.py + | | |-- read_input.py + | | |-- run_cif2kkr.py + | |-- utils.py + | |-- getcif/ + | |-- __init__.py + | |-- main.py + |-- sample/ + + +**Basic usage** + + ``cif2x`` is a tool to generate a set of input files for first-principles calculation software. It takes an input parameter file as a template, and generates parameter items that may vary by materials and calculation conditions from crystallographic data. In the present version, ``cif2x`` supports Quantum ESPRESSO, VASP, OpenMX, and AkaiKKR. + + #. Prepare input parameter file + + First, you need to create an input parameter file in YAML format that describes contents of the input file to be generated for the first-principles calculation software. + + #. Prepare crystal structure files and pseudo-potential files + + The crystal structure data need to be prepared for the target materials. The file format is CIF, POSCAR, xfs, or those supported by pymatgen. + + For Quantum ESPRESSO, the pseudo-potential files and the index file in CSV format need to be placed. Their locations are specified in the input parameter file. + + For VASP, the location of the pseudo-potential files will be specified in a file ``~/.config/.pmgrc.yaml`` or by an environment variable. It may be specified in the input parameter file. + + #. Run command + + Run ``cif2x`` command with the input parameter file and the crystal structure data as arguments. To generate input files for Quantum ESPRESSO, the target option ``-t QE`` should be specified. The option turns to ``-t VASP`` for VASP, ``-t OpenMX`` for OpenMX, and ``-t AkaiKKR`` for AkaiKKR. + + .. code-block:: bash + + $ cif2x -t QE input.yaml material.cif + diff --git a/manual/v1.1.0/en/html/_sources/cif2x/command/index.rst.txt b/manual/v1.1.0/en/html/_sources/cif2x/command/index.rst.txt new file mode 100644 index 0000000..2aa37a0 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/cif2x/command/index.rst.txt @@ -0,0 +1,56 @@ +Command reference +================================================================ + +cif2x +---------------------------------------------------------------- + + Generate input files for first-principles calculation software + +SYNOPSIS: + + .. code-block:: bash + + cif2x [-v][-q] -t target input_yaml material.cif + cif2x -h + cif2x --version + +DESCRIPTION: + + This program reads an input parameter file specified by ``input_yaml`` and a crystal data file specified by ``material.cif``, and generates a set of input files for first-principles calculation software. In the current version, the supported software includes Quantum ESPRESSO, VASP, and OpenMX. + It takes the following command line options. + + - ``-v`` + + increases verbosity of the runtime messages. When specified multiple times, the program becomes more verbose. + + - ``-q`` + + decreases verbosity of the runtime messages. It cancels the effect of ``-v`` option, and when specified multiple times, the program becomes more quiet. + + - ``-t`` *target* + + specifies the target first-principles calculation software. The supported software for *target* is listed as follows: + + - ``QE``, ``espresso``, ``quantum_espresso``: generates input files for Quantum ESPRESSO. + + - ``VASP``: generates input files for VASP. + + - ``OpenMX``: generates input files for OpenMX. + + - ``AkaiKKR``: generates input files for AkaiKKR. + + - ``input_yaml`` + + specifies an input parameter file in YAML format. + + - ``material.cif`` + + specifies crystal structure data file. It is in CIF (Crystallographic Information Framework) format, or other format supported by pymatgen. + + - ``-h`` + + displays help and exits. + + - ``--version`` + + displays version information. diff --git a/manual/v1.1.0/en/html/_sources/cif2x/filespec/index.rst.txt b/manual/v1.1.0/en/html/_sources/cif2x/filespec/index.rst.txt new file mode 100644 index 0000000..c99d2c5 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/cif2x/filespec/index.rst.txt @@ -0,0 +1,300 @@ +.. _sec-cif2x-fileformat: + +====================== +File format +====================== + +Input parameter file +====================== + +An input parameter file describes information necessary to generate input files for first-principles calculation software by ``cif2x``. It should be given in YAML format, and consist of the following sections. + + 1. structure section: describes how to handle crystal structure data. + + 2. optional section: describes pseudo-potential files, and symbol definitions for reference feature of YAML. + + 3. tasks section: describes contents of input files. + + +structure +--------- + + ``use_ibrav`` (default value: ``false``) + + This parameter specifies whether ``ibrav`` parameter is used for Quantum ESPRESSO as the input of the crystal structure. When it is set to ``true``, the lattice is transformed to match the convention of Quantum ESPRESSO, and the lattice parameters ``a``, ``b``, ``c``, ``cosab``, ``cosac``, and ``cosbc`` are written to the input file as needed. + + ``tolerance`` (default value: 0.01) + + This parameter specifies the tolerance in the difference between the reconstructed Structure data and the original data when ``use_ibrav`` is set to ``true``. + + ``supercell`` (default value: none) + + This parameter specifies the size of supercell, when it is adopted, in the form of [:math:`n_x`, :math:`n_y`, :math:`n_z`]. + + +optional +-------- +This section contains global settings needed for the first-principles calculation software. The available parameters are described in the corresponding sections below. + +tasks +----- +This section defines contents of the input files. It is organized as a list of blocks, each corresponding to an input file, to allow for generating a set of input files for an input. The terms described in each block are explained in the following. + + + ``mode`` (Quantum ESPRESSO) + + This parameter specifies the type of calculation. In the current version, the supported mode includes ``scf`` and ``nscf`` for pw.x of Quantum ESPRESSO. If an unsupported mode is specified, the settings in ``content`` will be exported as is. + + ``output_file`` (Quantum ESPRESSO) + + This parameter specifies the file name of the output. + + ``output_dir`` + + This parameter specifies the directory name of the output. The default value is the current directory. + + ``content`` + + This parameter describes the content of the output. + For Quantum ESPRESSO, it contains the namelist data (blocks starting from ``&system``, ``&control``, etc.) in ``namelist`` block, and other card data (such as ``K_POINTS``) as individual blocks. Some card data may take parameters. + + ``template`` (Quantum ESPRESSO) + + ``template_dir`` (VASP) + + These parameters specifies the template file and the template directory for the input files, respectively. If they are not given, templates will not be used. The content of the template file is merged with those of ``content``. The entries in the template file will be superseded by those of ``content`` if the entries of the same keys appear both. + + +Specifying parameter set +---------------------------------------- +An input parameter may be given a list or range of parameters. In this case, a separate directory is created for every combination of parameters to store the generated input files. A special syntax ``${...}`` is used to specify the parameter set as follows: + +- a list: ``${[ A, B, ... ]}`` + + a set of parameter values is described as a Python list. Each entry may be a scalar value, or a list of values. + +- a range: ``${range(N)}``, ``${range(start, end, step)}`` + + a range of parameter is given by the keyword ``range``. The former specifies the values from ``0`` to ``N-1``, and the latter from ``start`` to ``end`` with every ``step``. (If ``step`` is omitted, it is assumed to be ``1``.) + + +Parameters for Quantum ESPRESSO +=============================== + +The entries of ``optional`` section and ``content`` part of the ``tasks`` section specific to Quantum ESPRESSO are explained below. +In the current version, ``scf`` mode and ``nscf`` mode of ``pw.x`` are supported. + +optional section +------------------ + + ``pp_file`` + + This parameter specifies the index file in CSV format that relates the element type and the pseudo-potential file. This file contains the following columns: element name, type of pseudo-potential, nexclude, orbitals. An example line is given as: + + .. code-block:: + + Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd + + The name of the pseudo-potential file corresponding to the above example reads + Fe.pbe-spn-rrkjus_psl.0.2.1.UPF . + + ``cutoff_file`` + + This parameter specifies the index file in CSV format that relates the pseudo-potential file and the cutoff values. This file contains the following columns: name of pseudo-potential file, ``ecutwfc`` value, ``ecutrho`` value. + + ``pseudo_dir`` + + This parameter specifies the name of the directory that holds pseudo-potential files. It is used when the cutoff values are obtained from the pseudo-potential files. + It is indenepent from the ``pseudo_dir`` parameter in the input files for Quantum ESPRESSO. + + +content +-------- + + **namelist** + + - The lattice specifications in ``&system`` block will be superseded according to ``use_ibrav`` parameter in the ``structure`` section. + + - ``use_ibrav = false``: + ``ibrav`` is set to ``0``, and the lattice parameters including ``a``, ``b``, ``c``, ``cosab``, ``cosac``, ``cosbc``, ``celldm`` are removed. + + - ``use_ibrav = true``: + ``ibrab`` is set to the index of Bravais lattices obtained from the crystal structure data. The Structure data will be reconstructed to match the convention of Quantum ESPRESSO. + + - ``nat`` (the number of atoms) and ``ntyp`` (the number of element types) will be superseded by the values obtained from the crystal structure data. + + - The cutoff values ``ecutwfc`` and ``ecutrho`` are obtained from the pseudo-potential files if these parameters are left blank. + + **CELL_PARAMETERS** + + - This block will not be generated if ``use_ibrav`` is set to ``true``. Otherwise, the lattice vectors are exported in units of angstrom. + + - The information of the lattice vectors are obtained from the crystal structure data. When the ``data`` field is defined and contains a 3x3 matrix, that value will be used for the set of lattice vectors instead. + + **ATOMIC_SPECIES** + + - This block exports a list of atom species, atomic mass, and the file name of the pseudo-potential data. + + - The information of the atoms are obtained from the crystal structure data. The file names of the pseudo-potential data are referred from the CSV-formatted index file specified by ``pp_list`` parameter. + + - When the ``data`` field is defined and contains the required data, these values will be used instead. + + **ATOMIC_POSITIONS** + + - This block exports the atomic species and their fractional coordinates. + + - When ``ignore_species`` is given to specify an atomic species or a list of species, the values of ``if_pos`` for these species will be set to ``0``. It is used for MD or structure relaxations. + + - When the ``data`` field is defined and contains the required data, these values will be used instead. + + **K_POINTS** + + - This block exports the information of k points. The type of the output is specified by the ``option`` parameter that takes one of the following: + + - ``gamma``: uses :math:`\Gamma` point. + + - ``crystal``: generates a list of k points in mesh pattern. The mesh width is given by the ``grid`` parameter, or derived from the ``vol_density`` or ``k_resolution`` parameters. + + - ``automatic``: generates a mesh of k points. It is given by the ``grid`` parameter, or derived from the ``vol_density`` or ``k_resolution`` parameters. The shift is obtained from the ``kshifts`` parameter. + + - The mesh width is determined in the following order: + + - the ``grid`` parameter, specified by a list of :math:`n_x, n_y, n_z`, or a scalar value :math:`n`. For the latter, :math:`n_x = n_y = n_z = n` is assumed. + - derived from the ``vol_density`` parameter. + - derived from the ``k_resolution`` parameter, whose default value is 0.15. + + - When the ``data`` field is defined and contains the required data, these values will be used. + + +Parameters for VASP +=============================== + +The entries of ``optional`` section and ``content`` part of the ``tasks`` section specific to VASP are explained below. + +optional +-------- + +The type and the location of pseudo-potential files are specified. + +According to pymatgen, the pseudo-potential files are obtained from +``PMG_VASP_PSP_DIR``/*functional*/POTCAR.{element}(.gz) or +``PMG_VASP_PSP_DIR``/*functional*/{element}/POTCAR, +where +``PMG_VASP_PSP_DIR`` points to the directory and it is given in the configuration file +``~/.config/.pmgrc.yaml`` or by the environment variable of the same name. +*functional* refers to the type of the pseudo-potential, whose value is predefined as +``POT_GGA_PAW_PBE``, ``POT_LDA_PAW``, etc. + + + ``pseudo_functional`` + + This parameter specifies the type of the pseudo-potential. The relation to the *functional* value above is defined in the table of pymatgen, for example, by ``PBE`` to ``POT_GGA_PAW_PBE``, or by ``LDA`` to ``POT_LDA_PAW``, or in a similar manner. + + +When the ``pseudo_dir`` parameter is specified, it is used as the directory that holds the pseudo-potential files, ignoring the convention of pymatgen. + + ``psuedo_dir`` + + This parameter specifies the directory that holds the pseudo-potential files. The paths to the pseudo-potential file turn to ``pseudo_dir``/POTCAR.{element}(.gz), or ``pseudo_dir``/{element}/POTCAR. + +tasks +----- + +The template files are assumed to be placed in the directory specified by the ``template_dir`` parameter by the names ``INCAR``, ``KPOINTS``, ``POSCAR``, and ``POTCAR``. The missing files will be ignored. + + + +content +------- + + **incar** + + - This block contains parameters described in the INCAR file + + **kpoints** + + - ``type`` + + The ``type`` parameter describes how KPOINTS are specified. The following values are allowed, with some types accepting parameters. See pymatgen.io.vasp manual for further details. + + - ``automatic`` + + parameter: ``grid`` + + - ``gamma_automatic`` + + parameter: ``grid``, ``shift`` + + - ``monkhorst_automatic`` + + parameter: ``grid``, ``shift`` + + - ``automatic_density`` + + parameter: ``kppa``, ``force_gamma`` + + - ``automatic_gamma_density`` + + parameter: ``grid_density`` + + - ``automatic_density_by_vol`` + + parameter: ``grid_density``, ``force_gamma`` + + - ``automatic_density_by_lengths`` + + parameter: ``length_density``, ``force_gamma`` + + - ``automatic_linemode`` + + parameter: ``division``, ``path_type`` (corresponding to the ``path_type`` parameter of HighSymmKpath.) + + +Parameters for OpenMX +=============================== + +The entries of ``optional`` section and ``content`` part of the ``tasks`` section specific to OpenMX are explained below. + +optional +-------- + + ``data_path`` + + This parameter specifies the name of directory that holds files for pseudo-atomic orbitals and pseudo-potentials. It corresponds to the ``DATA.PATH`` parameter. + +content +-------- + + ``precision`` + + This parameter specifies the set of pseudo-atomic orbitals listed in Tables 1 and 2 of Section 10.6 of the OpenMX manual. It is one of ``quick``, ``standard``, or ``precise``. The default value is ``quick``. + +Parameters for AkaiKKR +=============================== + +The entries of ``optional`` section and ``content`` part of the ``tasks`` section specific to AkaiKKR are explained below. + +optional +-------- + + ``workdir`` + + This parameter specifies the directory in which temporal files are stored. If it is not given, ``/tmp`` or the value of the environment variable ``TMPDIR`` is used. + + +content +-------- + +The ``content`` part contains the input parameters of AkaiKKR. +A blank is written to the input file for an unspecified parameter, to which the default value defined in AkaiKKR will be assumed. +The parameter values listed below are replaced by the values obtained from the crystal structure data. + +- ``brvtyp``, except when it is set to ``aux`` (or a string that contains ``aux``). + +- lattice parameters, ``a``, ``c/a``, ``b/a``, ``alpha``, ``beta``, ``gamma``, ``r1``, ``r2``, ``r3``. + +- type information, ``ntyp``, ``type``, ``ncmp``, ``rmt``, ``field``, ``mxl``, ``anclr``, ``conc``. + +- element information, ``natm``, ``atmicx``, ``atmtyp``. + +For ``rmt`` and ``field``, the values specified in the input parameter file will be used only when they are lists having the same number of elements as ``ntyp``. diff --git a/manual/v1.1.0/en/html/_sources/cif2x/index.rst.txt b/manual/v1.1.0/en/html/_sources/cif2x/index.rst.txt new file mode 100644 index 0000000..b43528b --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/cif2x/index.rst.txt @@ -0,0 +1,16 @@ +**************************************************************** +Input file generator for first-principles calculations (cif2x) +**************************************************************** + + +.. toctree:: + :maxdepth: 2 + :numbered: 2 + + about/index + basic-usage + tutorial/index + command/index + filespec/index + appendix/index + ../getcif/index diff --git a/manual/v1.1.0/en/html/_sources/cif2x/tutorial/index.rst.txt b/manual/v1.1.0/en/html/_sources/cif2x/tutorial/index.rst.txt new file mode 100644 index 0000000..5abdf05 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/cif2x/tutorial/index.rst.txt @@ -0,0 +1,67 @@ +.. _sec-cif2x-tutorial: + +Tutorial +================================================================ + +The procedure to use the input file generator ``cif2x`` for first-principles calculation software consists of preparing an input parameter file, crystal structure data, and pseudo-potential files, and running the program ``cif2x``. +In the current version, the supported software includes Quantum ESPRESSO, VASP, OpenMX, and AkaiKKR. +In this tutorial, we will explain the steps along a sample for Quantum ESPRESSO in ``docs/tutorial/cif2x``. + + +Prepare an input parameter file +---------------------------------------------------------------- + +An input parameter file describes the content of input files for the first-principles calculation software. +An example is presented below. It is a text file in YAML format that contains options to crystal structure data, and contents of the input file used as an input for the first-principle calculation. See :ref:`file format ` section for the details of specification. + +In YAML format, parameters are given in dictionary form as ``keyword: value``, where ``value`` is a scalar such as a number or a string, or a set of values enclosed in ``[ ]`` or listed in itemized form, or a nested dictionary. + +.. literalinclude:: ../../../../tutorial/cif2x/input.yaml + :language: yaml + + +The input parameter file consists of ``structure``, ``optional``, and ``tasks`` sections. +The ``structure`` section specifies options to the crystal structure data. +The ``optional`` section holds global settings concerning the pseudo-potentials. + +The ``tasks`` section describes inputs for the first-principles calculations. In case of generating multiple files for a series of calculations, the ``tasks`` section takes a list of parameter sets. +For each set, the calculation type is specified by the ``mode`` parameter: ``scf`` and ``nscf`` are supported as modes, as well as arbitrary modes for generic output. + +The content of the output is given in ``content`` section. +The input files of Quantum ESPRESSO are composed of the parts in namelist format of Fortran90 starting from ``&keyword``, and the blocks called cards that start with keywords such as ``K_POINTS`` and end with blank lines. The ``content`` block holds namelist and cards in a form of nested dictionary. +Basically, the specified items are written to the input files as-is, except for several cases. If a keyword is left blank, its value will be obtained form the crystal structure data or other sources. + +Besides, templates of the input files can be used. The content of the file given by the ``template`` keyword is considered as input data along with the entries in ``content`` block. When the entries of the same keywords appear both, those of the input parameter files will be used. Therefore, it is possible to use template files and overwrite some entries by the input parameter file as needed. +In the present example, the file (``scf.in_tmpl``) shown below is read as a template, and the entries on cutoff parameters as well as cards of CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINTS are generated from the crystal structure data and pseudo-potential files. It is noted that the values of ``ecutwfc`` and ``ecutrho`` are overwritten by the empty lines. + +.. literalinclude:: ../../../../tutorial/cif2x/scf.in_tmpl + :language: fortran + + +Generating input files +---------------------------------------------------------------- + +The program ``cif2x`` is executed with the input parameter file (``input.yaml``) and crystal structure data (``Co3SnS2_nosym.cif``) as follows. + +.. code-block:: bash + + $ cif2x -t QE input.yaml Co3SnS2_nosym.cif + +The required pseudo-potential files should be placed in the directory ``./pseudo``, and the index file for the pseudo-potential should be prepared as ``./psudo/pp_psl_pbe_rrkjus.csv``. + +Run ``cif2x`` and a set of input files for Quantum ESPRESSO will be created. The output file is specified by ``output_file`` parameter of the input parameter file, and stored in the directory given by ``output_dir``. In this example, the input file for SCF calculation is created as ``./scf/scf.in``. + + +Specifying parameter sets +---------------------------------------------------------------- + +In some cases, a series of input files should be generated with varying their parameter values. For example, the convergence is examined by modifying the cutoff values or grid resolution of k points. The input parameter can be given a list or a range of values, and the input files for every combination from the choices of parameter values are generated and stored in separate directories. To specify parameter set, a special syntax ``${...}`` is adopted. + +.. code-block:: yaml + + content: + K_POINTS: + option: automatic + grid: ${ [ [4,4,4], [8,8,8], [12,12,12] ] } + +When ``K_POINTS`` is given as above, the input files having the ``grid`` value to be ``[4,4,4]``, ``[8,8,8]``, ``[12,12,12]`` will be generated in the sub-directories, ``4x4x4/``, ``8x8x8/``, ``12x12x12/``, respectively. diff --git a/manual/v1.1.0/en/html/_sources/getcif/about/index.rst.txt b/manual/v1.1.0/en/html/_sources/getcif/about/index.rst.txt new file mode 100644 index 0000000..1f6249f --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/getcif/about/index.rst.txt @@ -0,0 +1,5 @@ +**************************************************************** +Introduction +**************************************************************** + +``getcif`` is a tool to retrieve crystallographic information and other properties of materials from databases. The latest version of getcif provides access to Materials Project database. Users can search database and obtain information by specifying symmetry, composition, or physical properties of materials. diff --git a/manual/v1.1.0/en/html/_sources/getcif/appendix/index.rst.txt b/manual/v1.1.0/en/html/_sources/getcif/appendix/index.rst.txt new file mode 100644 index 0000000..7959517 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/getcif/appendix/index.rst.txt @@ -0,0 +1,320 @@ +================================================================ +Parameter List +================================================================ + +Search conditions (properties) +---------------------------------------------------------------- + +Table :ref:`getcif-cond-table` summarizes condition terms available in the properties section. + +``getcif`` uses the ``mp-api`` library provided by Materials Project as a client for accessing the database via Materials Project API. The condition terms correspond to the parameters for the ``materials.summary.search`` method of MPRester class in ``mp-api``. (The content of the table is taken and reformatted from the comments of the source file in ``mpi-api``.) + +The types of the parameter values denote as follows: + +- ``str``: a string +- ``List[str]``: a list of strings +- ``str | List[str]``: a string or a list of strings +- ``int``: an integer +- ``bool``: a boolean value (``true`` or ``false``) +- ``Tuple[float,float]``: a pair of two floating point numbers (as a list) +- ``Tuple[int,int]``: a pair of two integers (as a list) +- ``CrystalSystem``: a string representing the crystal system, one of the following: Triclinic, Monoclinic, Orthorhombic, Tetragonal, Trigonal, Hexagonal, Cubic +- ``List[HasProps]``: a list of strings representing the properties defined in ``emmet.core.summary``. The available terms include: + + absorption, + bandstructure, + charge_density, + chemenv, + dielectric, + dos, + elasticity, + electronic_structure, + eos, + grain_boundaries, + insertion_electrodes, + magnetism, + materials, + oxi_states, + phonon, + piezoelectric, + provenance, + substrates, + surface_properties, + thermo, + xas + +- ``Ordering``: a string representing the magnetic ordering, one of the following: FM, AFM, FiM, NM + +A list of the values is described in an indented style or in a comma-separated bracketted style in YAML notation. It is also available that it is described as a space-separated list. + +A ``Tuple`` is used to denote a range of values by ``min`` and ``max``. It is described by a list of two numbers, as well as by a space-separated list as ``min max``. +The following notation is also available: + + ``< max`` + less than or equal to ``max`` + + ``> min`` + more than or equal to ``min`` + + ``min ~ max`` + between ``min`` and ``max`` + + +.. _getcif-cond-table: + +.. list-table:: Search criteria + :widths: 30 20 60 + :header-rows: 1 + + * - Keyword + - Type + - Description + * - band_gap + - Tuple[float,float] + - Minimum and maximum band gap in eV to consider. + * - chemsys + - str | List[str] + - A chemical system, list of chemical systems (e.g., Li-Fe-O, Si-\*, [Si-O, Li-Fe-P]), or single formula (e.g., Fe2O3, Si\*). + * - crystal_system + - CrystalSystem + - Crystal system of material. + * - density + - Tuple[float,float] + - Minimum and maximum density to consider. + * - deprecated + - bool + - Whether the material is tagged as deprecated. + * - e_electronic + - Tuple[float,float] + - Minimum and maximum electronic dielectric constant to consider. + * - e_ionic + - Tuple[float,float] + - Minimum and maximum ionic dielectric constant to consider. + * - e_total + - Tuple[float,float] + - Minimum and maximum total dielectric constant to consider. + * - efermi + - Tuple[float,float] + - Minimum and maximum fermi energy in eV to consider. + * - elastic_anisotropy + - Tuple[float,float] + - Minimum and maximum value to consider for the elastic anisotropy. + * - elements + - List[str] + - A list of elements. + * - energy_above_hull + - Tuple[int,int] + - Minimum and maximum energy above the hull in eV/atom to consider. + * - equilibrium_reaction_energy + - Tuple[float,float] + - Minimum and maximum equilibrium reaction energy in eV/atom to consider. + * - exclude_elements + - List[str] + - List of elements to exclude. + * - formation_energy + - Tuple[int,int] + - Minimum and maximum formation energy in eV/atom to consider. + * - formula + - str | List[str] + - A formula including anonymized formula or wild cards (e.g., Fe2O3, ABO3, Si\*). A list of chemical formulas can also be passed (e.g., [Fe2O3, ABO3]). + * - g_reuss + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Reuss average of the shear modulus. + * - g_voigt + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt average of the shear modulus. + * - g_vrh + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the shear modulus. + * - has_props + - List[HasProps] + - The calculated properties available for the material. + * - has_reconstructed + - bool + - Whether the entry has any reconstructed surfaces. + * - is_gap_direct + - bool + - Whether the material has a direct band gap. + * - is_metal + - bool + - Whether the material is considered a metal. + * - is_stable + - bool + - Whether the material lies on the convex energy hull. + * - k_reuss + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Reuss average of the bulk modulus. + * - k_voigt + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt average of the bulk modulus. + * - k_vrh + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the bulk modulus. + * - magnetic_ordering + - Ordering + - Magnetic ordering of the material. + * - material_ids + - List[str] + - List of Materials Project IDs to return data for. + * - n + - Tuple[float,float] + - Minimum and maximum refractive index to consider. + * - num_elements + - Tuple[int,int] + - Minimum and maximum number of elements to consider. + * - num_sites + - Tuple[int,int] + - Minimum and maximum number of sites to consider. + * - num_magnetic_sites + - Tuple[int,int] + - Minimum and maximum number of magnetic sites to consider. + * - num_unique_magnetic_sites + - Tuple[int,int] + - Minimum and maximum number of unique magnetic sites to consider. + * - piezoelectric_modulus + - Tuple[float,float] + - Minimum and maximum piezoelectric modulus to consider. + * - poisson_ratio + - Tuple[float,float] + - Minimum and maximum value to consider for Poisson's ratio. + * - possible_species + - List[str] + - List of element symbols appended with oxidation states. (e.g. Cr2+,O2-) + * - shape_factor + - Tuple[float,float] + - Minimum and maximum shape factor values to consider. + * - spacegroup_number + - int + - Space group number of material. + * - spacegroup_symbol + - str + - Space group symbol of the material in international short symbol notation. + * - surface_energy_anisotropy + - Tuple[float,float] + - Minimum and maximum surface energy anisotropy values to consider. + * - theoretical + - bool + - Whether the material is theoretical. + * - total_energy + - Tuple[int,int] + - Minimum and maximum corrected total energy in eV/atom to consider. + * - total_magnetization + - Tuple[float,float] + - Minimum and maximum total magnetization values to consider. + * - total_magnetization_normalized_formula_units + - Tuple[float,float] + - Minimum and maximum total magnetization values normalized by formula units to consider. + * - total_magnetization_normalized_vol + - Tuple[float,float] + - Minimum and maximum total magnetization values normalized by volume to consider. + * - uncorrected_energy + - Tuple[int,int] + - Minimum and maximum uncorrected total energy in eV/atom to consider. + * - volume + - Tuple[float,float] + - Minimum and maximum volume to consider. + * - weighted_surface_energy + - Tuple[float,float] + - Minimum and maximum weighted surface energy in J/:math:`m^2` to consider. + * - weighted_work_function + - Tuple[float,float] + - Minimum and maximum weighted work function in eV to consider. + +.. +.. .. list-table:: Unsupported search criteria for the properties section +.. :widths: 30 20 60 +.. :header-rows: 1 +.. +.. * - Keyword +.. - Type +.. - Description +.. * - num_chunks +.. - int +.. - Maximum number of chunks of data to yield. None will yield all possible. +.. * - chunk_size +.. - int +.. - Number of data entries per chunk. +.. * - all_fields +.. - bool +.. - Whether to return all fields in the document. Defaults to True. +.. * - fields +.. - List[str] +.. - List of fields in SearchDoc to return data for. Default is material_id if all_fields is False. +.. + +Data to retrive (fields) +---------------------------------------------------------------- + +The items available for the ``fields`` section for retrieving from the database are listed below. + +.. code:: text + + band_gap + bandstructure + builder_meta + bulk_modulus + cbm + chemsys + composition + composition_reduced + database_IDs + decomposes_to + density + density_atomic + deprecated + deprecation_reasons + dos + dos_energy_down + dos_energy_up + e_electronic + e_ij_max + e_ionic + e_total + efermi + elements + energy_above_hull + energy_per_atom + equilibrium_reaction_energy_per_atom + es_source_calc_id + formation_energy_per_atom + formula_anonymous + formula_pretty + grain_boundaries + has_props + has_reconstructed + homogeneous_poisson + is_gap_direct + is_magnetic + is_metal + is_stable + last_updated + material_id + n + nelements + nsites + num_magnetic_sites + num_unique_magnetic_sites + ordering + origins + possible_species + property_name + shape_factor + shear_modulus + structure + surface_anisotropy + symmetry + task_ids + theoretical + total_magnetization + total_magnetization_normalized_formula_units + total_magnetization_normalized_vol + types_of_magnetic_species + uncorrected_energy_per_atom + universal_anisotropy + vbm + volume + warnings + weighted_surface_energy + weighted_surface_energy_EV_PER_ANG2 + weighted_work_function + xas diff --git a/manual/v1.1.0/en/html/_sources/getcif/command/index.rst.txt b/manual/v1.1.0/en/html/_sources/getcif/command/index.rst.txt new file mode 100644 index 0000000..48ee973 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/getcif/command/index.rst.txt @@ -0,0 +1,44 @@ +Command reference +================================================================ + +getcif +---------------------------------------------------------------- + + Retrieve crystallographic and other data from databases. + +SYNOPSIS: + + .. code-block:: bash + + getcif [-v][-q] [--dry-run] input_yaml + getcif -h + getcif --version + +DESCRIPTION: + + This program reads an input parameter file specified by ``input_yaml``, and connects to the database to submit a query and obtain the crystallographic data of materials. + It takes the following command line options. + + - ``input_yaml`` + + specifies an input parameter file in YAML format. + + - ``-v`` + + increases verbosity of the runtime messages. When specified multiple times, the program becomes more verbose. + + - ``-q`` + + decreases verbosity of the runtime messages. It cancels the effect of ``-v`` option, and when specified multiple times, the program becomes more quiet. + + - ``--dry-run`` + + displays search parameters and exits without connecting to the database. It allows to confirm the search conditions. This option supersedes the ``dry_run`` parameter in the input file. + + - ``-h`` + + displays help and exits. + + - ``--version`` + + displays version information. diff --git a/manual/v1.1.0/en/html/_sources/getcif/filespec/index.rst.txt b/manual/v1.1.0/en/html/_sources/getcif/filespec/index.rst.txt new file mode 100644 index 0000000..4ae408b --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/getcif/filespec/index.rst.txt @@ -0,0 +1,137 @@ +.. _sec-getcif-fileformat: + +================================ +File format +================================ + +Input parameter file +================================ + +An input parameter file describes information to search for crystallographic and other data from Materials Project database by getcif. It should be given in YAML format, and consist of the following sections. + + #. database section: describes information on the database to connect. + + #. option section: describes output directory and other parameters for command execution. + + #. properties section: describes search conditions. + + #. fields section: describes types of data to be retrieved. + + +database +-------------------------------- + +``target`` + + This parameter specifies the database to connected to. At present this parameter is ignored. + +``api_key_file`` (default value: ``materials_project.key``) + + This parameter specifies a name of a file that contains the API key to access to the database. + The suffix of the file name must be ``.key``. + If the file does not exist or it does not contain a valid value, the API key is obtained from the environment variable ``MP_API_KEY``, or from the parameter ``PMG_MAPI_KEY`` of the pymatgen configuration file in ``~/.config/.pmgrc``. + + The API key file is a text file. A line starting with ``#`` is regarded as a comment. The heading and trailing spaces are ignored. When the file contains more than one line, the API key is taken from the first valid line. + + +option +-------------------------------- + +This section contains global settings needed for the first-principles calculation software. The available parameters are described in the corresponding sections below. + +``output_dir`` (default value: ``""``) + + This parameter specifies the directory name to store the data. The retrieved data are placed in this directory under the subdirectories by the material ID for each material. The default value is the current directory. + +``dry_run`` (default value: ``False``) + + When this parameter is set to True, getcif prints the search conditions and exists without connecting to the database. It is useful to check the content of the query. + +``symprec`` (default value: 0.1) + + This parameter specifies the tolerance in calculating the symmetry of a crystal structure when the structure data are written to a CIF file. By default, 0.1 is specified. When ``symprec`` is set to 0.0, it is treated as if ``symprec`` is unspecified, in which case a CIF file is generated without considering symmetry. + + ``symprec`` is a parameter that specifies the tolerance used to determine the symmetry of a crystal structure. When calculating the symmetry of a crystal structure, it is essential to consider the slight displacements of atomic positions and the precision of numerical calculations. ``symprec`` controls the allowable range of these displacements and serves as a threshold for deciding whether a symmetry operation should be applied. + + If ``symprec`` is set to a smaller value (e.g., 0.01), the symmetry determination becomes more stringent, and even minor displacements in the crystal structure may prevent the application of symmetry operations. This can result in the identification of a lower-symmetry space group. Conversely, if ``symprec`` is set to a larger value (e.g., 1.0), the symmetry determination is more lenient, allowing small displacements to be ignored, which may lead to the recognition of a higher-symmetry space group. + + When the ``symmetry`` field is specified in the fields section, the symmetry information determined using the default ``symprec=0.1`` in the Materials Project is obtained and written to a text file (``symmetry``). + + +properties +-------------------------------- + +This section defines the search conditions. +The conditions such as the element types, the crystal symmetry, or the values of physical properties are specified in the ``keyword: value`` format. They are treated as AND condition. +The available terms, based on the Materials Project API, conform to the parameters of +the ``materials.summary.search`` method in the mp-api library. The list of terms are summarized in the Appendix, and can be seen by ``getcif --help``. + +The format of the parameter values is shown below. It follows the YAML specification with several extension for brief description. + +- a number, a string + + describe as-is. + +- a boolean value + + describe as ``true`` or ``false``. + +- a list of numbers or strings + + describe in the indented style (block style) or in the comma-separated list enclosed by the bracket (flow style) in YAML notation. + It is also available that it is described as a space-separated list, for example: + + .. code:: yaml + + element: Sr Ti + +- a range of numerical value + + described as a list of two numbers such as ``[ min, max ]``, or a pair of two numbers separated by a space as ``min max``. The following formats are also available. + + ``<= max`` + less than or equal to ``max``. + + ``< max`` + less than ``max``. (For a real number, it is equivalent to ``<= max``. For an integer, it is treated as ``<= max-1``.) + + ``>= min`` + more than or equal to ``min``. + + ``> min`` + more than ``min``. (For a real number, it is equivalent to ``>= min``. For an integer, it is treated as ``>= min+1``.) + + ``min ~ max`` + between ``min`` and ``max``. + + N.B.: + + - A space must be placed between the symbol and the number. + + - Due to the YAML syntax that the symbol ``">"`` at the beginning of a term is treated as a special character, ``> min`` and ``>= min`` should be enclosed by quotes as ``"> min"`` and ``">= min"``, respectively. + + - In list notations, ``<= max`` and ``>= min`` are denoted as ``[ None, max ]`` and ``[ min, None ]``, respectively. + + +- wild card symbols + + The term ``formula`` accepts wild card symbols ``*`` for elements. In this case, the whole value is enclosed by ``" "``. For example, + + .. code:: yaml + + formula: "**O3" + + for :math:`ABO_3`-type materials. + + +fields +-------------------------------- + +This section defines the types of data to be retrieved. +A list of types is described in the YAML format, or as a space-sparated strings. In the latter format, it can be given in multiple-line format using the "|" notation of YAML. + +The available types of data conform to the ``field`` parameter of the Materials Project API. They are listed in the Appendix, and can be viewd by ``getcif --help``. + +The types ``material_id`` and ``formula_pretty`` are retrieved automatically. + +The obtained data are placed in the directory specified by ``output_dir`` parameter under the subdirectories of the material_id for each material. Each item is stored as a separate file of the item name. The crystal structure data (``structure``) is stored in a file ``structure.cif`` in CIF format. diff --git a/manual/v1.1.0/en/html/_sources/getcif/index.rst.txt b/manual/v1.1.0/en/html/_sources/getcif/index.rst.txt new file mode 100644 index 0000000..30bd063 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/getcif/index.rst.txt @@ -0,0 +1,14 @@ +**************************************************************** +A tool to retrieve crystallographic data from databases (getcif) +**************************************************************** + + +.. toctree:: + :maxdepth: 2 + :numbered: 2 + + about/index + tutorial/index + command/index + filespec/index + appendix/index diff --git a/manual/v1.1.0/en/html/_sources/getcif/tutorial/index.rst.txt b/manual/v1.1.0/en/html/_sources/getcif/tutorial/index.rst.txt new file mode 100644 index 0000000..b595f21 --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/getcif/tutorial/index.rst.txt @@ -0,0 +1,114 @@ +.. _sec-getcif-tutorial: + +Tutorial +================================================================ + +In this tutorial, the procedure to use the database query tool ``getcif`` is described for searching and obtaining crystallographic information from databases for the materials science. +It consists of getting an API key, preparing an input parameter file, and running the getcif program. +We will explain the steps along an example of searching and obtaining information for ABO3-type materials provided in the ``docs/tutorial/getcif`` directory. + +Getting an API key +---------------------------------------------------------------- + +In order to access the Materials Project database via API, users need to register to the Materials Project and obtain an API key. +Visit the Materials Project website `https://next-gen.materialsproject.org `_, create an account and do Login. An API key is automatically generated on registration and shown in the user dashboard. The API key should be kept safe and not shared with others. + +The API key is made available to getcif by one of the following ways: + + (a) storing in the pymatgen configuration file by typing in as follows: + + .. code:: bash + + $ pmg config --add PMG_MAPI_KEY + + or editing the file ``~/.config/.pmgrc`` to include the following: + + .. code:: bash + + PMG_MAPI_KEY: + + (b) setting to an environment variable by: + + .. code:: bash + + $ MP_API_KEY="" + $ export MP_API_KEY + + (c) storing the API key to a file located in the directory where getcif is run. + The default value of the file name is ``materials_project.key``. Otherwise, it is given in the input parameter file. The file name must end with ``.key``. + + .. code:: yaml + + database: + api_key_file: materials_project.key + + Comment: it will be recommended to exclude files with ``.key`` as a suffix from version control system. (e.g. for Git, add ``*.key`` in ``.gitignore`` file.) + + +Prepare an input parameter file +---------------------------------------------------------------- + +An input parameter file describes search conditions and data items to retrieve from databases. + +An example is presented below. It is a text file in YAML format that contains information for accessing the database, search conditions, and types of data to obtain. +See :ref:`file format ` section for the details of specification. + +In YAML format, parameters are given in dictionary form as ``keyword: value``, where ``value`` is a scalar such as a number or a string, or a set of values enclosed in ``[ ]`` or listed in itemized form, or a nested dictionary. +For the search conditions and data fields, a list may be given by a space-separated items without brackets as a special notation. + +.. literalinclude:: ../../../../tutorial/getcif/input.yaml + :language: yaml + +The input parameter file consists of ``database``, ``option``, ``properties``, and ``fields`` sections. +The ``database`` section describes settings about connecting to databases. +In the example, ``target`` is set to Materials Project, though this term is not considered at present. ``api_key`` can be used to set the API key. The key may also be set in the pymatgen configuration file or in the environment variable. The latter is assumed in the tutorial. + +The ``option`` section describes optional settings for the command execution. +``output_dir`` specifies the directory to place the obtained data. The default is the current directory. If ``dry_run`` is set to ``true``, getcif does not connect to the database; instead, it just prints the search conditions and exits. ``dry_run`` may be specified in the command-line option. + +The ``properties`` section describes search conditions. They are given in the form of ``keyword: value`` and treated as AND conditions. +In the example, the search condition is specified to find materials with band gap less than or equal to 1.0, stable insulator, having composition formula of ABO3 (where A and B are arbitrary species), that belong to the space group ``Pm-3m`` (perovskite). +The ``band_gap`` takes a pair of values for the lower and upper limits, as well as the description such as ``< 1.0``. +The available terms for specifying search conditions are listed in the Appendix. + +The ``fields`` section describes the data items to obtain. It is given as a YAML list, or a space-sparated list. +``structure`` specifies the crystal structure data that will be stored in CIF format. +``band_gap`` specifies the value of band gap, and ``symmetry`` specifies the information on the symmetry. ``material_id`` that refers to the index of material data in the Materials Project, and ``formula_pretty`` that refers to the composition formula are automatically obtained. +The available items are listed in the Appendix, or can be found in the help message of getcif command. + +Obtaining data +---------------------------------------------------------------- + +The program ``getcif`` is executed with the input parameter file (``input.yaml``) as follows. + +.. code-block:: bash + + $ getcif input.yaml + +Then it connects to the Materials Project database, and obtains the data that match the specified conditions. +The summary including the material IDs, the composition formulas, and other data items is printed to the standard output as follows. + +.. literalinclude:: ../../../../tutorial/getcif/output_log.txt + :language: text + +The obtained data are placed in the directory specified by ``output_dir`` with the subdirectories of the material ID for each material. +In this example, seven subdirectories with names from mp-3163 to mp-977455 are created within ``result`` directory, and each subdirectory contains the following files: + + - band_gap + the value of band gap + + - formula + the composition formula (that corresponds to the field ``formula_pretty``) + + - structure.cif + the crystal structure data in CIF format + + - symmetry + the information about symmetry + +If an option ``--dry-run`` is added as a command-line option to ``getcif``, +the program prints the search condition as follows, and exits. +It will be useful for checking the search parameters. + +.. literalinclude:: ../../../../tutorial/getcif/output_dryrun.txt + :language: text diff --git a/manual/v1.1.0/en/html/_sources/index.rst.txt b/manual/v1.1.0/en/html/_sources/index.rst.txt new file mode 100644 index 0000000..0176a5c --- /dev/null +++ b/manual/v1.1.0/en/html/_sources/index.rst.txt @@ -0,0 +1,20 @@ +.. HTP-tools documentation master file, created by + sphinx-quickstart on Fri Jun 30 11:02:31 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Cif2x Users Guide +===================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + cif2x/index + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/manual/v1.1.0/en/html/_static/alabaster.css b/manual/v1.1.0/en/html/_static/alabaster.css new file mode 100644 index 0000000..55f9cb1 --- /dev/null +++ b/manual/v1.1.0/en/html/_static/alabaster.css @@ -0,0 +1,708 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar { + max-height: 100%; + overflow-y: auto; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 160px; +} + +div.sphinxsidebar .search > div { + display: table-cell; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Hide ugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.1.0/en/html/_static/basic.css b/manual/v1.1.0/en/html/_static/basic.css new file mode 100644 index 0000000..e5179b7 --- /dev/null +++ b/manual/v1.1.0/en/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: inherit; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.1.0/en/html/_static/custom.css b/manual/v1.1.0/en/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/manual/v1.1.0/en/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/manual/v1.1.0/en/html/_static/doctools.js b/manual/v1.1.0/en/html/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/manual/v1.1.0/en/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/manual/v1.1.0/en/html/_static/documentation_options.js b/manual/v1.1.0/en/html/_static/documentation_options.js new file mode 100644 index 0000000..c891ba6 --- /dev/null +++ b/manual/v1.1.0/en/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.1.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/manual/v1.1.0/en/html/_static/file.png b/manual/v1.1.0/en/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/en/html/_static/language_data.js b/manual/v1.1.0/en/html/_static/language_data.js new file mode 100644 index 0000000..367b8ed --- /dev/null +++ b/manual/v1.1.0/en/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/manual/v1.1.0/en/html/_static/minus.png b/manual/v1.1.0/en/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/en/html/_static/plus.png b/manual/v1.1.0/en/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/en/html/_static/pygments.css b/manual/v1.1.0/en/html/_static/pygments.css new file mode 100644 index 0000000..0d49244 --- /dev/null +++ b/manual/v1.1.0/en/html/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/manual/v1.1.0/en/html/_static/searchtools.js b/manual/v1.1.0/en/html/_static/searchtools.js new file mode 100644 index 0000000..b08d58c --- /dev/null +++ b/manual/v1.1.0/en/html/_static/searchtools.js @@ -0,0 +1,620 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/manual/v1.1.0/en/html/_static/sphinx_highlight.js b/manual/v1.1.0/en/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/manual/v1.1.0/en/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/manual/v1.1.0/en/html/cif2x/about/index.html b/manual/v1.1.0/en/html/cif2x/about/index.html new file mode 100644 index 0000000..f9b5b71 --- /dev/null +++ b/manual/v1.1.0/en/html/cif2x/about/index.html @@ -0,0 +1,186 @@ + + + + + + + + 1. Introduction — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

1. Introduction

+
+

1.1. What is cif2x?

+

In recent years, the use of machine learning for predicting material properties and designing substances (known as materials informatics) has gained considerable attention. +The accuracy of machine learning depends heavily on the preparation of appropriate training data. +Therefore, the development of tools and environments for the rapid generation of training data is expected to contribute significantly to the advancement of research in materials informatics.

+

Cif2x is a tool that generates input files for first-principles calculations from cif files. +It constructs parts that vary depending on the type of material and computational conditions from crystal structure data, using input parameters as a template. +It is capable of generating multiple input files tailored to specific computational conditions. +Currently, it supports VASP, Quantum ESPRESSO, OpenMX, and AkaiKKR.

+
+
+

1.2. License

+

The distribution of the program package and the source codes for cif2x follow GNU General Public License version 3 (GPL v3) or later.

+
+
+

1.3. Contributors

+

This software was developed by the following contributors.

+
+
    +
  • Developers

    +
      +
    • Kazuyoshi Yoshimi (The Instutite for Solid State Physics, The University of Tokyo)

    • +
    • Tatsumi Aoyama (The Instutite for Solid State Physics, The University of Tokyo)

    • +
    • Yuichi Motoyama (The Instutite for Solid State Physics, The University of Tokyo)

    • +
    • Masahiro Fukuda (The Instutite for Solid State Physics, The University of Tokyo)

    • +
    • Kota Ido (The Instutite for Solid State Physics, The University of Tokyo)

    • +
    • Tetsuya Fukushima (The National Institute of Advanced Industrial Science and Technology (AIST))

    • +
    • Shusuke Kasamatsu (Yamagata University)

    • +
    • Takashi Koretsune (Tohoku University)

    • +
    +
  • +
  • Project Corrdinator

    +
      +
    • Taisuke Ozaki (The Instutite for Solid State Physics, The University of Tokyo)

    • +
    +
  • +
+
+
+
+

1.4. Release history

+
+
+
ver.1.1.0

Released on 2024/09/14

+
+
ver.1.0.1

Released on 2024/03/31

+
+
ver.1.0.0

Released on 2024/03/19

+
+
ver.1.0-alpha

Released on 2023/12/28

+
+
+
+
+ +
+

1.6. Operating environment

+

This tool was tested on the following platforms:

+
    +
  • Ubuntu Linux + python3

  • +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/cif2x/appendix/index.html b/manual/v1.1.0/en/html/cif2x/appendix/index.html new file mode 100644 index 0000000..056fb92 --- /dev/null +++ b/manual/v1.1.0/en/html/cif2x/appendix/index.html @@ -0,0 +1,151 @@ + + + + + + + + 6. Extension guide — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

6. Extension guide

+
+

6.1. Adding modes of Quantum ESPRESSO

+

In order to add supports to modes of Quantum ESPRESSO, the mapping between the modes and the transformation classes should be added to create_modeproc() function in src/cif2x/qe/calc_mode.py.

+
def create_modeproc(mode, qe):
+    if mode in ["scf", "nscf"]:
+        modeproc = QEmode_pw(qe)
+    else:
+        modeproc = QEmode_generic(qe)
+    return modeproc
+
+
+

The transformation functionality for each mode is provided as a derived class of QEmode_base class. This class implements methods update_namelist() for updating the namelist block, and update_cards() for generating data of card blocks. +In the current version, two classes are provided: QEmode_pw class for scf and nscf calculations of pw.x, and QEmode_generic class for generating output as-is.

+
class QEmode_base:
+    def __init__(self, qe):
+    def update_namelist(self, content):
+    def update_cards(self, content):
+
+
+

For the namelist, the transformation class generates values for blank entries from crystal structure data and other sources. It may also force to set values such as the lattice parameters that are determined from the crystal structure data, or those that must be specified consistently with other parameters. The functions are provided for each mode separately.

+

For card blocks, a function is provided for each card, and the mapping between the card type and the function is given in the card_table variable. +The method update_cards() in the base class picks up and runs the function associated to the card, and updates the content of the card. Of course, a new update_cards() function may be defined.

+
self.card_table = {
+    'CELL_PARAMETERS': generate_cell_parameters,
+    'ATOMIC_SPECIES': generate_atomic_species,
+    'ATOMIC_POSITIONS': generate_atomic_positions,
+    'K_POINTS': generate_k_points,
+}
+
+
+

The functions for cards are gathered in src/cif2x/qe/cards.py with the function names as generate_{card name}. These functions takes parameters for card blocks as argument, and returns a dictionary containing the card name, the options, and the data field.

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/cif2x/basic-usage.html b/manual/v1.1.0/en/html/cif2x/basic-usage.html new file mode 100644 index 0000000..9f8fa31 --- /dev/null +++ b/manual/v1.1.0/en/html/cif2x/basic-usage.html @@ -0,0 +1,236 @@ + + + + + + + + 2. Installation and basic usage — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

2. Installation and basic usage

+

Prerequisite

+
+

Input file generator for first-principles calculation cif2x included in HTP-tools requires the following programs and libraries:

+
    +
  • python 3.x

  • +
  • pymatgen module

  • +
  • ruamel.yaml module

  • +
  • f90nml module

  • +
  • qe-tools module

  • +
  • numpy module

  • +
  • pandas module

  • +
  • monty module

  • +
  • OpenBabel module (optional)

  • +
  • AkaiKKRPythonUtil module

  • +
+

For A tool to retrieve crystallographic data from databases getcif, the additional library is required:

+
    +
  • mp-api module

  • +
+
+

Official pages

+
+
+

Downloads

+
+

cif2x can be downloaded by the following command with git:

+
$ git clone https://github.com/issp-center-dev/cif2x.git
+
+
+
+

Installation

+
+

Once the source files are obtained, you can install cif2x by running the following command. The required libraries will also be installed automatically at the same time.

+
$ cd ./cif2x
+$ python3 -m pip install .
+
+
+

The executable files cif2x and getcif will be installed. +You may need to add --user option next to install keyword above in case you are not allowed to install packages system-wide.

+

AkaiKKRPythonUtil module need to be installed separately. The source package is available from the repository. Then follow the steps below to install the module along with the required seaborn module:

+
$ git clone https://github.com/AkaiKKRteam/AkaiKKRPythonUtil.git
+$ cd ./AkaiKKRPythonUtil/library/PyAkaiKKR
+$ python3 -m pip install .
+$ python3 -m pip install seaborn
+
+
+
+

Directory structure

+
+
.
+|-- LICENSE
+|-- README.md
+|-- pyproject.toml
+|-- docs/
+|   |-- ja/
+|   |-- en/
+|   |-- tutorial/
+|-- src/
+|   |-- cif2x/
+|       |-- __init__.py
+|       |-- main.py
+|       |-- cif2struct.py
+|       |-- struct2qe.py
+|       |-- qe/
+|       |   |-- __init__.py
+|       |   |-- calc_mode.py
+|       |   |-- cards.py
+|       |   |-- content.py
+|       |   |-- qeutils.py
+|       |   |-- tools.py
+|       |-- struct2vasp.py
+|       |-- struct2openmx.py
+|       |-- openmx/
+|       |   |-- __init__.py
+|       |   |-- vps_table.py
+|       |-- struct2akaikkr.py
+|       |-- akaikkr/
+|       |   |-- make_input.py
+|       |   |-- read_input.py
+|       |   |-- run_cif2kkr.py
+|       |-- utils.py
+|   |-- getcif/
+|       |-- __init__.py
+|       |-- main.py
+|-- sample/
+
+
+
+

Basic usage

+
+

cif2x is a tool to generate a set of input files for first-principles calculation software. It takes an input parameter file as a template, and generates parameter items that may vary by materials and calculation conditions from crystallographic data. In the present version, cif2x supports Quantum ESPRESSO, VASP, OpenMX, and AkaiKKR.

+
    +
  1. Prepare input parameter file

    +
    +

    First, you need to create an input parameter file in YAML format that describes contents of the input file to be generated for the first-principles calculation software.

    +
    +
  2. +
  3. Prepare crystal structure files and pseudo-potential files

    +
    +

    The crystal structure data need to be prepared for the target materials. The file format is CIF, POSCAR, xfs, or those supported by pymatgen.

    +

    For Quantum ESPRESSO, the pseudo-potential files and the index file in CSV format need to be placed. Their locations are specified in the input parameter file.

    +

    For VASP, the location of the pseudo-potential files will be specified in a file ~/.config/.pmgrc.yaml or by an environment variable. It may be specified in the input parameter file.

    +
    +
  4. +
  5. Run command

    +
    +

    Run cif2x command with the input parameter file and the crystal structure data as arguments. To generate input files for Quantum ESPRESSO, the target option -t QE should be specified. The option turns to -t VASP for VASP, -t OpenMX for OpenMX, and -t AkaiKKR for AkaiKKR.

    +
    $ cif2x -t QE input.yaml material.cif
    +
    +
    +
    +
  6. +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/cif2x/command/index.html b/manual/v1.1.0/en/html/cif2x/command/index.html new file mode 100644 index 0000000..71dc92a --- /dev/null +++ b/manual/v1.1.0/en/html/cif2x/command/index.html @@ -0,0 +1,167 @@ + + + + + + + + 4. Command reference — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

4. Command reference

+
+

4.1. cif2x

+
+

Generate input files for first-principles calculation software

+
+

SYNOPSIS:

+
+
cif2x [-v][-q] -t target input_yaml material.cif
+cif2x -h
+cif2x --version
+
+
+
+

DESCRIPTION:

+
+

This program reads an input parameter file specified by input_yaml and a crystal data file specified by material.cif, and generates a set of input files for first-principles calculation software. In the current version, the supported software includes Quantum ESPRESSO, VASP, and OpenMX. +It takes the following command line options.

+
    +
  • -v

    +

    increases verbosity of the runtime messages. When specified multiple times, the program becomes more verbose.

    +
  • +
  • -q

    +

    decreases verbosity of the runtime messages. It cancels the effect of -v option, and when specified multiple times, the program becomes more quiet.

    +
  • +
  • -t target

    +

    specifies the target first-principles calculation software. The supported software for target is listed as follows:

    +
      +
    • QE, espresso, quantum_espresso: generates input files for Quantum ESPRESSO.

    • +
    • VASP: generates input files for VASP.

    • +
    • OpenMX: generates input files for OpenMX.

    • +
    • AkaiKKR: generates input files for AkaiKKR.

    • +
    +
  • +
  • input_yaml

    +

    specifies an input parameter file in YAML format.

    +
  • +
  • material.cif

    +

    specifies crystal structure data file. It is in CIF (Crystallographic Information Framework) format, or other format supported by pymatgen.

    +
  • +
  • -h

    +

    displays help and exits.

    +
  • +
  • --version

    +

    displays version information.

    +
  • +
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/cif2x/filespec/index.html b/manual/v1.1.0/en/html/cif2x/filespec/index.html new file mode 100644 index 0000000..426ba00 --- /dev/null +++ b/manual/v1.1.0/en/html/cif2x/filespec/index.html @@ -0,0 +1,395 @@ + + + + + + + + 5. File format — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

5. File format

+
+

5.1. Input parameter file

+

An input parameter file describes information necessary to generate input files for first-principles calculation software by cif2x. It should be given in YAML format, and consist of the following sections.

+
+
    +
  1. structure section: describes how to handle crystal structure data.

  2. +
  3. optional section: describes pseudo-potential files, and symbol definitions for reference feature of YAML.

  4. +
  5. tasks section: describes contents of input files.

  6. +
+
+
+

structure

+
+

use_ibrav (default value: false)

+
+

This parameter specifies whether ibrav parameter is used for Quantum ESPRESSO as the input of the crystal structure. When it is set to true, the lattice is transformed to match the convention of Quantum ESPRESSO, and the lattice parameters a, b, c, cosab, cosac, and cosbc are written to the input file as needed.

+
+

tolerance (default value: 0.01)

+
+

This parameter specifies the tolerance in the difference between the reconstructed Structure data and the original data when use_ibrav is set to true.

+
+

supercell (default value: none)

+
+

This parameter specifies the size of supercell, when it is adopted, in the form of [\(n_x\), \(n_y\), \(n_z\)].

+
+
+
+
+

optional

+

This section contains global settings needed for the first-principles calculation software. The available parameters are described in the corresponding sections below.

+
+
+

tasks

+

This section defines contents of the input files. It is organized as a list of blocks, each corresponding to an input file, to allow for generating a set of input files for an input. The terms described in each block are explained in the following.

+
+

mode (Quantum ESPRESSO)

+
+

This parameter specifies the type of calculation. In the current version, the supported mode includes scf and nscf for pw.x of Quantum ESPRESSO. If an unsupported mode is specified, the settings in content will be exported as is.

+
+

output_file (Quantum ESPRESSO)

+
+

This parameter specifies the file name of the output.

+
+

output_dir

+
+

This parameter specifies the directory name of the output. The default value is the current directory.

+
+

content

+
+

This parameter describes the content of the output. +For Quantum ESPRESSO, it contains the namelist data (blocks starting from &system, &control, etc.) in namelist block, and other card data (such as K_POINTS) as individual blocks. Some card data may take parameters.

+
+

template (Quantum ESPRESSO)

+

template_dir (VASP)

+
+

These parameters specifies the template file and the template directory for the input files, respectively. If they are not given, templates will not be used. The content of the template file is merged with those of content. The entries in the template file will be superseded by those of content if the entries of the same keys appear both.

+
+
+
+
+

Specifying parameter set

+

An input parameter may be given a list or range of parameters. In this case, a separate directory is created for every combination of parameters to store the generated input files. A special syntax ${...} is used to specify the parameter set as follows:

+
    +
  • a list: ${[ A, B, ... ]}

    +

    a set of parameter values is described as a Python list. Each entry may be a scalar value, or a list of values.

    +
  • +
  • a range: ${range(N)}, ${range(start, end, step)}

    +

    a range of parameter is given by the keyword range. The former specifies the values from 0 to N-1, and the latter from start to end with every step. (If step is omitted, it is assumed to be 1.)

    +
  • +
+
+
+
+

5.2. Parameters for Quantum ESPRESSO

+

The entries of optional section and content part of the tasks section specific to Quantum ESPRESSO are explained below. +In the current version, scf mode and nscf mode of pw.x are supported.

+
+

optional section

+
+

pp_file

+
+

This parameter specifies the index file in CSV format that relates the element type and the pseudo-potential file. This file contains the following columns: element name, type of pseudo-potential, nexclude, orbitals. An example line is given as:

+
Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd
+
+
+

The name of the pseudo-potential file corresponding to the above example reads +Fe.pbe-spn-rrkjus_psl.0.2.1.UPF .

+
+

cutoff_file

+
+

This parameter specifies the index file in CSV format that relates the pseudo-potential file and the cutoff values. This file contains the following columns: name of pseudo-potential file, ecutwfc value, ecutrho value.

+
+

pseudo_dir

+
+

This parameter specifies the name of the directory that holds pseudo-potential files. It is used when the cutoff values are obtained from the pseudo-potential files. +It is indenepent from the pseudo_dir parameter in the input files for Quantum ESPRESSO.

+
+
+
+
+

content

+
+

namelist

+
    +
  • The lattice specifications in &system block will be superseded according to use_ibrav parameter in the structure section.

    +
      +
    • use_ibrav = false: +ibrav is set to 0, and the lattice parameters including a, b, c, cosab, cosac, cosbc, celldm are removed.

    • +
    • use_ibrav = true: +ibrab is set to the index of Bravais lattices obtained from the crystal structure data. The Structure data will be reconstructed to match the convention of Quantum ESPRESSO.

    • +
    +
  • +
  • nat (the number of atoms) and ntyp (the number of element types) will be superseded by the values obtained from the crystal structure data.

  • +
  • The cutoff values ecutwfc and ecutrho are obtained from the pseudo-potential files if these parameters are left blank.

  • +
+

CELL_PARAMETERS

+
    +
  • This block will not be generated if use_ibrav is set to true. Otherwise, the lattice vectors are exported in units of angstrom.

  • +
  • The information of the lattice vectors are obtained from the crystal structure data. When the data field is defined and contains a 3x3 matrix, that value will be used for the set of lattice vectors instead.

  • +
+

ATOMIC_SPECIES

+
    +
  • This block exports a list of atom species, atomic mass, and the file name of the pseudo-potential data.

  • +
  • The information of the atoms are obtained from the crystal structure data. The file names of the pseudo-potential data are referred from the CSV-formatted index file specified by pp_list parameter.

  • +
  • When the data field is defined and contains the required data, these values will be used instead.

  • +
+

ATOMIC_POSITIONS

+
    +
  • This block exports the atomic species and their fractional coordinates.

  • +
  • When ignore_species is given to specify an atomic species or a list of species, the values of if_pos for these species will be set to 0. It is used for MD or structure relaxations.

  • +
  • When the data field is defined and contains the required data, these values will be used instead.

  • +
+

K_POINTS

+
    +
  • This block exports the information of k points. The type of the output is specified by the option parameter that takes one of the following:

    +
      +
    • gamma: uses \(\Gamma\) point.

    • +
    • crystal: generates a list of k points in mesh pattern. The mesh width is given by the grid parameter, or derived from the vol_density or k_resolution parameters.

    • +
    • automatic: generates a mesh of k points. It is given by the grid parameter, or derived from the vol_density or k_resolution parameters. The shift is obtained from the kshifts parameter.

    • +
    +
  • +
  • The mesh width is determined in the following order:

    +
      +
    • the grid parameter, specified by a list of \(n_x, n_y, n_z\), or a scalar value \(n\). For the latter, \(n_x = n_y = n_z = n\) is assumed.

    • +
    • derived from the vol_density parameter.

    • +
    • derived from the k_resolution parameter, whose default value is 0.15.

    • +
    +
  • +
  • When the data field is defined and contains the required data, these values will be used.

  • +
+
+
+
+
+

5.3. Parameters for VASP

+

The entries of optional section and content part of the tasks section specific to VASP are explained below.

+
+

optional

+

The type and the location of pseudo-potential files are specified.

+

According to pymatgen, the pseudo-potential files are obtained from +PMG_VASP_PSP_DIR/functional/POTCAR.{element}(.gz) or +PMG_VASP_PSP_DIR/functional/{element}/POTCAR, +where +PMG_VASP_PSP_DIR points to the directory and it is given in the configuration file +~/.config/.pmgrc.yaml or by the environment variable of the same name. +functional refers to the type of the pseudo-potential, whose value is predefined as +POT_GGA_PAW_PBE, POT_LDA_PAW, etc.

+
+

pseudo_functional

+
+

This parameter specifies the type of the pseudo-potential. The relation to the functional value above is defined in the table of pymatgen, for example, by PBE to POT_GGA_PAW_PBE, or by LDA to POT_LDA_PAW, or in a similar manner.

+
+
+

When the pseudo_dir parameter is specified, it is used as the directory that holds the pseudo-potential files, ignoring the convention of pymatgen.

+
+

psuedo_dir

+
+

This parameter specifies the directory that holds the pseudo-potential files. The paths to the pseudo-potential file turn to pseudo_dir/POTCAR.{element}(.gz), or pseudo_dir/{element}/POTCAR.

+
+
+
+
+

tasks

+

The template files are assumed to be placed in the directory specified by the template_dir parameter by the names INCAR, KPOINTS, POSCAR, and POTCAR. The missing files will be ignored.

+
+
+

content

+
+

incar

+
    +
  • This block contains parameters described in the INCAR file

  • +
+

kpoints

+
    +
  • type

    +

    The type parameter describes how KPOINTS are specified. The following values are allowed, with some types accepting parameters. See pymatgen.io.vasp manual for further details.

    +
      +
    • automatic

      +

      parameter: grid

      +
    • +
    • gamma_automatic

      +

      parameter: grid, shift

      +
    • +
    • monkhorst_automatic

      +

      parameter: grid, shift

      +
    • +
    • automatic_density

      +

      parameter: kppa, force_gamma

      +
    • +
    • automatic_gamma_density

      +

      parameter: grid_density

      +
    • +
    • automatic_density_by_vol

      +

      parameter: grid_density, force_gamma

      +
    • +
    • automatic_density_by_lengths

      +

      parameter: length_density, force_gamma

      +
    • +
    • automatic_linemode

      +

      parameter: division, path_type (corresponding to the path_type parameter of HighSymmKpath.)

      +
    • +
    +
  • +
+
+
+
+
+

5.4. Parameters for OpenMX

+

The entries of optional section and content part of the tasks section specific to OpenMX are explained below.

+
+

optional

+
+

data_path

+
+

This parameter specifies the name of directory that holds files for pseudo-atomic orbitals and pseudo-potentials. It corresponds to the DATA.PATH parameter.

+
+
+
+
+

content

+
+

precision

+
+

This parameter specifies the set of pseudo-atomic orbitals listed in Tables 1 and 2 of Section 10.6 of the OpenMX manual. It is one of quick, standard, or precise. The default value is quick.

+
+
+
+
+
+

5.5. Parameters for AkaiKKR

+

The entries of optional section and content part of the tasks section specific to AkaiKKR are explained below.

+
+

optional

+
+

workdir

+
+

This parameter specifies the directory in which temporal files are stored. If it is not given, /tmp or the value of the environment variable TMPDIR is used.

+
+
+
+
+

content

+

The content part contains the input parameters of AkaiKKR. +A blank is written to the input file for an unspecified parameter, to which the default value defined in AkaiKKR will be assumed. +The parameter values listed below are replaced by the values obtained from the crystal structure data.

+
    +
  • brvtyp, except when it is set to aux (or a string that contains aux).

  • +
  • lattice parameters, a, c/a, b/a, alpha, beta, gamma, r1, r2, r3.

  • +
  • type information, ntyp, type, ncmp, rmt, field, mxl, anclr, conc.

  • +
  • element information, natm, atmicx, atmtyp.

  • +
+

For rmt and field, the values specified in the input parameter file will be used only when they are lists having the same number of elements as ntyp.

+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/cif2x/index.html b/manual/v1.1.0/en/html/cif2x/index.html new file mode 100644 index 0000000..0f85458 --- /dev/null +++ b/manual/v1.1.0/en/html/cif2x/index.html @@ -0,0 +1,162 @@ + + + + + + + + Input file generator for first-principles calculations (cif2x) — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/cif2x/tutorial/index.html b/manual/v1.1.0/en/html/cif2x/tutorial/index.html new file mode 100644 index 0000000..84e1a57 --- /dev/null +++ b/manual/v1.1.0/en/html/cif2x/tutorial/index.html @@ -0,0 +1,217 @@ + + + + + + + + 3. Tutorial — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

3. Tutorial

+

The procedure to use the input file generator cif2x for first-principles calculation software consists of preparing an input parameter file, crystal structure data, and pseudo-potential files, and running the program cif2x. +In the current version, the supported software includes Quantum ESPRESSO, VASP, OpenMX, and AkaiKKR. +In this tutorial, we will explain the steps along a sample for Quantum ESPRESSO in docs/tutorial/cif2x.

+
+

3.1. Prepare an input parameter file

+

An input parameter file describes the content of input files for the first-principles calculation software. +An example is presented below. It is a text file in YAML format that contains options to crystal structure data, and contents of the input file used as an input for the first-principle calculation. See file format section for the details of specification.

+

In YAML format, parameters are given in dictionary form as keyword: value, where value is a scalar such as a number or a string, or a set of values enclosed in [ ] or listed in itemized form, or a nested dictionary.

+
structure:
+  use_ibrav: false
+  tolerance: 0.05
+
+optional:
+  pseudo_dir: ./pseudo
+  pp_file: ./pseudo/pp_psl_pbe_rrkjus.csv
+
+tasks:
+  - mode: scf
+    output_file: scf.in
+    output_dir: scf
+    template: scf.in_tmpl
+    content:
+      namelist:
+        control:
+          prefix: pwscf
+          pseudo_dir:
+          outdir: ./work
+        system:
+          ecutwfc:
+          ecutrho:
+      CELL_PARAMETERS:
+      ATOMIC_SPECIES:
+      ATOMIC_POSITIONS:
+        option: crystal
+      K_POINTS:
+        option: automatic
+        grid: [8,8,8]
+
+
+

The input parameter file consists of structure, optional, and tasks sections. +The structure section specifies options to the crystal structure data. +The optional section holds global settings concerning the pseudo-potentials.

+

The tasks section describes inputs for the first-principles calculations. In case of generating multiple files for a series of calculations, the tasks section takes a list of parameter sets. +For each set, the calculation type is specified by the mode parameter: scf and nscf are supported as modes, as well as arbitrary modes for generic output.

+

The content of the output is given in content section. +The input files of Quantum ESPRESSO are composed of the parts in namelist format of Fortran90 starting from &keyword, and the blocks called cards that start with keywords such as K_POINTS and end with blank lines. The content block holds namelist and cards in a form of nested dictionary. +Basically, the specified items are written to the input files as-is, except for several cases. If a keyword is left blank, its value will be obtained form the crystal structure data or other sources.

+

Besides, templates of the input files can be used. The content of the file given by the template keyword is considered as input data along with the entries in content block. When the entries of the same keywords appear both, those of the input parameter files will be used. Therefore, it is possible to use template files and overwrite some entries by the input parameter file as needed. +In the present example, the file (scf.in_tmpl) shown below is read as a template, and the entries on cutoff parameters as well as cards of CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINTS are generated from the crystal structure data and pseudo-potential files. It is noted that the values of ecutwfc and ecutrho are overwritten by the empty lines.

+
&control
+    calculation = 'scf'
+    prefix = 'pwscf'
+    pseudo_dir = './pseudo'
+    outdir = './work'
+    tstress = .true.
+    tprnfor = .true.
+/
+
+&system
+    ibrav = 0
+    nat = 7
+    ntyp = 3
+    ecutwfc = 36.0
+    ecutrho = 180.0
+    occupations = 'smearing'
+    smearing = 'm-p'
+    degauss = 0.01
+    noncolin = .true.
+    nspin = 2
+/
+
+&electrons
+    missing_beta = 0.1
+    conv_thr = 1e-08
+/
+
+
+
+
+

3.2. Generating input files

+

The program cif2x is executed with the input parameter file (input.yaml) and crystal structure data (Co3SnS2_nosym.cif) as follows.

+
$ cif2x -t QE input.yaml Co3SnS2_nosym.cif
+
+
+

The required pseudo-potential files should be placed in the directory ./pseudo, and the index file for the pseudo-potential should be prepared as ./psudo/pp_psl_pbe_rrkjus.csv.

+

Run cif2x and a set of input files for Quantum ESPRESSO will be created. The output file is specified by output_file parameter of the input parameter file, and stored in the directory given by output_dir. In this example, the input file for SCF calculation is created as ./scf/scf.in.

+
+
+

3.3. Specifying parameter sets

+

In some cases, a series of input files should be generated with varying their parameter values. For example, the convergence is examined by modifying the cutoff values or grid resolution of k points. The input parameter can be given a list or a range of values, and the input files for every combination from the choices of parameter values are generated and stored in separate directories. To specify parameter set, a special syntax ${...} is adopted.

+
content:
+  K_POINTS:
+    option: automatic
+    grid:   ${ [ [4,4,4], [8,8,8], [12,12,12] ] }
+
+
+

When K_POINTS is given as above, the input files having the grid value to be [4,4,4], [8,8,8], [12,12,12] will be generated in the sub-directories, 4x4x4/, 8x8x8/, 12x12x12/, respectively.

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/genindex.html b/manual/v1.1.0/en/html/genindex.html new file mode 100644 index 0000000..68ca9f9 --- /dev/null +++ b/manual/v1.1.0/en/html/genindex.html @@ -0,0 +1,103 @@ + + + + + + + Index — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/getcif/about/index.html b/manual/v1.1.0/en/html/getcif/about/index.html new file mode 100644 index 0000000..5b4f17a --- /dev/null +++ b/manual/v1.1.0/en/html/getcif/about/index.html @@ -0,0 +1,122 @@ + + + + + + + + 1. Introduction — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

1. Introduction

+

getcif is a tool to retrieve crystallographic information and other properties of materials from databases. The latest version of getcif provides access to Materials Project database. Users can search database and obtain information by specifying symmetry, composition, or physical properties of materials.

+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/getcif/appendix/index.html b/manual/v1.1.0/en/html/getcif/appendix/index.html new file mode 100644 index 0000000..98961d0 --- /dev/null +++ b/manual/v1.1.0/en/html/getcif/appendix/index.html @@ -0,0 +1,466 @@ + + + + + + + + 5. Parameter List — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

5. Parameter List

+
+

5.1. Search conditions (properties)

+

Table Search criteria summarizes condition terms available in the properties section.

+

getcif uses the mp-api library provided by Materials Project as a client for accessing the database via Materials Project API. The condition terms correspond to the parameters for the materials.summary.search method of MPRester class in mp-api. (The content of the table is taken and reformatted from the comments of the source file in mpi-api.)

+

The types of the parameter values denote as follows:

+
    +
  • str: a string

  • +
  • List[str]: a list of strings

  • +
  • str | List[str]: a string or a list of strings

  • +
  • int: an integer

  • +
  • bool: a boolean value (true or false)

  • +
  • Tuple[float,float]: a pair of two floating point numbers (as a list)

  • +
  • Tuple[int,int]: a pair of two integers (as a list)

  • +
  • CrystalSystem: a string representing the crystal system, one of the following: Triclinic, Monoclinic, Orthorhombic, Tetragonal, Trigonal, Hexagonal, Cubic

  • +
  • List[HasProps]: a list of strings representing the properties defined in emmet.core.summary. The available terms include:

    +
    +

    absorption, +bandstructure, +charge_density, +chemenv, +dielectric, +dos, +elasticity, +electronic_structure, +eos, +grain_boundaries, +insertion_electrodes, +magnetism, +materials, +oxi_states, +phonon, +piezoelectric, +provenance, +substrates, +surface_properties, +thermo, +xas

    +
    +
  • +
  • Ordering: a string representing the magnetic ordering, one of the following: FM, AFM, FiM, NM

  • +
+

A list of the values is described in an indented style or in a comma-separated bracketted style in YAML notation. It is also available that it is described as a space-separated list.

+

A Tuple is used to denote a range of values by min and max. It is described by a list of two numbers, as well as by a space-separated list as min max. +The following notation is also available:

+
+
+
< max

less than or equal to max

+
+
> min

more than or equal to min

+
+
min ~ max

between min and max

+
+
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5.1 Search criteria

Keyword

Type

Description

band_gap

Tuple[float,float]

Minimum and maximum band gap in eV to consider.

chemsys

str | List[str]

A chemical system, list of chemical systems (e.g., Li-Fe-O, Si-*, [Si-O, Li-Fe-P]), or single formula (e.g., Fe2O3, Si*).

crystal_system

CrystalSystem

Crystal system of material.

density

Tuple[float,float]

Minimum and maximum density to consider.

deprecated

bool

Whether the material is tagged as deprecated.

e_electronic

Tuple[float,float]

Minimum and maximum electronic dielectric constant to consider.

e_ionic

Tuple[float,float]

Minimum and maximum ionic dielectric constant to consider.

e_total

Tuple[float,float]

Minimum and maximum total dielectric constant to consider.

efermi

Tuple[float,float]

Minimum and maximum fermi energy in eV to consider.

elastic_anisotropy

Tuple[float,float]

Minimum and maximum value to consider for the elastic anisotropy.

elements

List[str]

A list of elements.

energy_above_hull

Tuple[int,int]

Minimum and maximum energy above the hull in eV/atom to consider.

equilibrium_reaction_energy

Tuple[float,float]

Minimum and maximum equilibrium reaction energy in eV/atom to consider.

exclude_elements

List[str]

List of elements to exclude.

formation_energy

Tuple[int,int]

Minimum and maximum formation energy in eV/atom to consider.

formula

str | List[str]

A formula including anonymized formula or wild cards (e.g., Fe2O3, ABO3, Si*). A list of chemical formulas can also be passed (e.g., [Fe2O3, ABO3]).

g_reuss

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Reuss average of the shear modulus.

g_voigt

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt average of the shear modulus.

g_vrh

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the shear modulus.

has_props

List[HasProps]

The calculated properties available for the material.

has_reconstructed

bool

Whether the entry has any reconstructed surfaces.

is_gap_direct

bool

Whether the material has a direct band gap.

is_metal

bool

Whether the material is considered a metal.

is_stable

bool

Whether the material lies on the convex energy hull.

k_reuss

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Reuss average of the bulk modulus.

k_voigt

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt average of the bulk modulus.

k_vrh

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the bulk modulus.

magnetic_ordering

Ordering

Magnetic ordering of the material.

material_ids

List[str]

List of Materials Project IDs to return data for.

n

Tuple[float,float]

Minimum and maximum refractive index to consider.

num_elements

Tuple[int,int]

Minimum and maximum number of elements to consider.

num_sites

Tuple[int,int]

Minimum and maximum number of sites to consider.

num_magnetic_sites

Tuple[int,int]

Minimum and maximum number of magnetic sites to consider.

num_unique_magnetic_sites

Tuple[int,int]

Minimum and maximum number of unique magnetic sites to consider.

piezoelectric_modulus

Tuple[float,float]

Minimum and maximum piezoelectric modulus to consider.

poisson_ratio

Tuple[float,float]

Minimum and maximum value to consider for Poisson’s ratio.

possible_species

List[str]

List of element symbols appended with oxidation states. (e.g. Cr2+,O2-)

shape_factor

Tuple[float,float]

Minimum and maximum shape factor values to consider.

spacegroup_number

int

Space group number of material.

spacegroup_symbol

str

Space group symbol of the material in international short symbol notation.

surface_energy_anisotropy

Tuple[float,float]

Minimum and maximum surface energy anisotropy values to consider.

theoretical

bool

Whether the material is theoretical.

total_energy

Tuple[int,int]

Minimum and maximum corrected total energy in eV/atom to consider.

total_magnetization

Tuple[float,float]

Minimum and maximum total magnetization values to consider.

total_magnetization_normalized_formula_units

Tuple[float,float]

Minimum and maximum total magnetization values normalized by formula units to consider.

total_magnetization_normalized_vol

Tuple[float,float]

Minimum and maximum total magnetization values normalized by volume to consider.

uncorrected_energy

Tuple[int,int]

Minimum and maximum uncorrected total energy in eV/atom to consider.

volume

Tuple[float,float]

Minimum and maximum volume to consider.

weighted_surface_energy

Tuple[float,float]

Minimum and maximum weighted surface energy in J/\(m^2\) to consider.

weighted_work_function

Tuple[float,float]

Minimum and maximum weighted work function in eV to consider.

+
+
+

5.2. Data to retrive (fields)

+

The items available for the fields section for retrieving from the database are listed below.

+
band_gap
+bandstructure
+builder_meta
+bulk_modulus
+cbm
+chemsys
+composition
+composition_reduced
+database_IDs
+decomposes_to
+density
+density_atomic
+deprecated
+deprecation_reasons
+dos
+dos_energy_down
+dos_energy_up
+e_electronic
+e_ij_max
+e_ionic
+e_total
+efermi
+elements
+energy_above_hull
+energy_per_atom
+equilibrium_reaction_energy_per_atom
+es_source_calc_id
+formation_energy_per_atom
+formula_anonymous
+formula_pretty
+grain_boundaries
+has_props
+has_reconstructed
+homogeneous_poisson
+is_gap_direct
+is_magnetic
+is_metal
+is_stable
+last_updated
+material_id
+n
+nelements
+nsites
+num_magnetic_sites
+num_unique_magnetic_sites
+ordering
+origins
+possible_species
+property_name
+shape_factor
+shear_modulus
+structure
+surface_anisotropy
+symmetry
+task_ids
+theoretical
+total_magnetization
+total_magnetization_normalized_formula_units
+total_magnetization_normalized_vol
+types_of_magnetic_species
+uncorrected_energy_per_atom
+universal_anisotropy
+vbm
+volume
+warnings
+weighted_surface_energy
+weighted_surface_energy_EV_PER_ANG2
+weighted_work_function
+xas
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/getcif/command/index.html b/manual/v1.1.0/en/html/getcif/command/index.html new file mode 100644 index 0000000..074fee6 --- /dev/null +++ b/manual/v1.1.0/en/html/getcif/command/index.html @@ -0,0 +1,160 @@ + + + + + + + + 3. Command reference — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

3. Command reference

+
+

3.1. getcif

+
+

Retrieve crystallographic and other data from databases.

+
+

SYNOPSIS:

+
+
getcif [-v][-q] [--dry-run] input_yaml
+getcif -h
+getcif --version
+
+
+
+

DESCRIPTION:

+
+

This program reads an input parameter file specified by input_yaml, and connects to the database to submit a query and obtain the crystallographic data of materials. +It takes the following command line options.

+
    +
  • input_yaml

    +

    specifies an input parameter file in YAML format.

    +
  • +
  • -v

    +

    increases verbosity of the runtime messages. When specified multiple times, the program becomes more verbose.

    +
  • +
  • -q

    +

    decreases verbosity of the runtime messages. It cancels the effect of -v option, and when specified multiple times, the program becomes more quiet.

    +
  • +
  • --dry-run

    +

    displays search parameters and exits without connecting to the database. It allows to confirm the search conditions. This option supersedes the dry_run parameter in the input file.

    +
  • +
  • -h

    +

    displays help and exits.

    +
  • +
  • --version

    +

    displays version information.

    +
  • +
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/getcif/filespec/index.html b/manual/v1.1.0/en/html/getcif/filespec/index.html new file mode 100644 index 0000000..84acb16 --- /dev/null +++ b/manual/v1.1.0/en/html/getcif/filespec/index.html @@ -0,0 +1,238 @@ + + + + + + + + 4. File format — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

4. File format

+
+

4.1. Input parameter file

+

An input parameter file describes information to search for crystallographic and other data from Materials Project database by getcif. It should be given in YAML format, and consist of the following sections.

+
+
    +
  1. database section: describes information on the database to connect.

  2. +
  3. option section: describes output directory and other parameters for command execution.

  4. +
  5. properties section: describes search conditions.

  6. +
  7. fields section: describes types of data to be retrieved.

  8. +
+
+
+

database

+

target

+
+

This parameter specifies the database to connected to. At present this parameter is ignored.

+
+

api_key_file (default value: materials_project.key)

+
+

This parameter specifies a name of a file that contains the API key to access to the database. +The suffix of the file name must be .key. +If the file does not exist or it does not contain a valid value, the API key is obtained from the environment variable MP_API_KEY, or from the parameter PMG_MAPI_KEY of the pymatgen configuration file in ~/.config/.pmgrc.

+

The API key file is a text file. A line starting with # is regarded as a comment. The heading and trailing spaces are ignored. When the file contains more than one line, the API key is taken from the first valid line.

+
+
+
+

option

+

This section contains global settings needed for the first-principles calculation software. The available parameters are described in the corresponding sections below.

+

output_dir (default value: "")

+
+

This parameter specifies the directory name to store the data. The retrieved data are placed in this directory under the subdirectories by the material ID for each material. The default value is the current directory.

+
+

dry_run (default value: False)

+
+

When this parameter is set to True, getcif prints the search conditions and exists without connecting to the database. It is useful to check the content of the query.

+
+

symprec (default value: 0.1)

+
+

This parameter specifies the tolerance in calculating the symmetry of a crystal structure when the structure data are written to a CIF file. By default, 0.1 is specified. When symprec is set to 0.0, it is treated as if symprec is unspecified, in which case a CIF file is generated without considering symmetry.

+

symprec is a parameter that specifies the tolerance used to determine the symmetry of a crystal structure. When calculating the symmetry of a crystal structure, it is essential to consider the slight displacements of atomic positions and the precision of numerical calculations. symprec controls the allowable range of these displacements and serves as a threshold for deciding whether a symmetry operation should be applied.

+

If symprec is set to a smaller value (e.g., 0.01), the symmetry determination becomes more stringent, and even minor displacements in the crystal structure may prevent the application of symmetry operations. This can result in the identification of a lower-symmetry space group. Conversely, if symprec is set to a larger value (e.g., 1.0), the symmetry determination is more lenient, allowing small displacements to be ignored, which may lead to the recognition of a higher-symmetry space group.

+

When the symmetry field is specified in the fields section, the symmetry information determined using the default symprec=0.1 in the Materials Project is obtained and written to a text file (symmetry).

+
+
+
+

properties

+

This section defines the search conditions. +The conditions such as the element types, the crystal symmetry, or the values of physical properties are specified in the keyword: value format. They are treated as AND condition. +The available terms, based on the Materials Project API, conform to the parameters of +the materials.summary.search method in the mp-api library. The list of terms are summarized in the Appendix, and can be seen by getcif --help.

+

The format of the parameter values is shown below. It follows the YAML specification with several extension for brief description.

+
    +
  • a number, a string

    +
    +

    describe as-is.

    +
    +
  • +
  • a boolean value

    +
    +

    describe as true or false.

    +
    +
  • +
  • a list of numbers or strings

    +
    +

    describe in the indented style (block style) or in the comma-separated list enclosed by the bracket (flow style) in YAML notation. +It is also available that it is described as a space-separated list, for example:

    +
    element: Sr Ti
    +
    +
    +
    +
  • +
  • a range of numerical value

    +
    +

    described as a list of two numbers such as [ min, max ], or a pair of two numbers separated by a space as min max. The following formats are also available.

    +
    +
    <= max

    less than or equal to max.

    +
    +
    < max

    less than max. (For a real number, it is equivalent to <= max. For an integer, it is treated as <= max-1.)

    +
    +
    >= min

    more than or equal to min.

    +
    +
    > min

    more than min. (For a real number, it is equivalent to >= min. For an integer, it is treated as >= min+1.)

    +
    +
    min ~ max

    between min and max.

    +
    +
    +

    N.B.:

    +
    +
      +
    • A space must be placed between the symbol and the number.

    • +
    • Due to the YAML syntax that the symbol ">" at the beginning of a term is treated as a special character, > min and >= min should be enclosed by quotes as "> min" and ">= min", respectively.

    • +
    • In list notations, <= max and >= min are denoted as [ None, max ] and [ min, None ], respectively.

    • +
    +
    +
    +
  • +
  • wild card symbols

    +
    +

    The term formula accepts wild card symbols * for elements. In this case, the whole value is enclosed by " ". For example,

    +
    formula: "**O3"
    +
    +
    +

    for \(ABO_3\)-type materials.

    +
    +
  • +
+
+
+

fields

+

This section defines the types of data to be retrieved. +A list of types is described in the YAML format, or as a space-sparated strings. In the latter format, it can be given in multiple-line format using the “|” notation of YAML.

+

The available types of data conform to the field parameter of the Materials Project API. They are listed in the Appendix, and can be viewd by getcif --help.

+

The types material_id and formula_pretty are retrieved automatically.

+

The obtained data are placed in the directory specified by output_dir parameter under the subdirectories of the material_id for each material. Each item is stored as a separate file of the item name. The crystal structure data (structure) is stored in a file structure.cif in CIF format.

+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/getcif/index.html b/manual/v1.1.0/en/html/getcif/index.html new file mode 100644 index 0000000..cfbab79 --- /dev/null +++ b/manual/v1.1.0/en/html/getcif/index.html @@ -0,0 +1,144 @@ + + + + + + + + A tool to retrieve crystallographic data from databases (getcif) — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/getcif/tutorial/index.html b/manual/v1.1.0/en/html/getcif/tutorial/index.html new file mode 100644 index 0000000..48c65f2 --- /dev/null +++ b/manual/v1.1.0/en/html/getcif/tutorial/index.html @@ -0,0 +1,258 @@ + + + + + + + + 2. Tutorial — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

2. Tutorial

+

In this tutorial, the procedure to use the database query tool getcif is described for searching and obtaining crystallographic information from databases for the materials science. +It consists of getting an API key, preparing an input parameter file, and running the getcif program. +We will explain the steps along an example of searching and obtaining information for ABO3-type materials provided in the docs/tutorial/getcif directory.

+
+

2.1. Getting an API key

+

In order to access the Materials Project database via API, users need to register to the Materials Project and obtain an API key. +Visit the Materials Project website https://next-gen.materialsproject.org, create an account and do Login. An API key is automatically generated on registration and shown in the user dashboard. The API key should be kept safe and not shared with others.

+

The API key is made available to getcif by one of the following ways:

+
+
    +
  1. storing in the pymatgen configuration file by typing in as follows:

    +
    +
    $ pmg config --add PMG_MAPI_KEY <API_KEY>
    +
    +
    +
    +

    or editing the file ~/.config/.pmgrc to include the following:

    +
    +
    PMG_MAPI_KEY: <API_KEY>
    +
    +
    +
    +
  2. +
  3. setting to an environment variable by:

    +
    +
    $ MP_API_KEY="<API_KEY>"
    +$ export MP_API_KEY
    +
    +
    +
    +
  4. +
  5. storing the API key to a file located in the directory where getcif is run. +The default value of the file name is materials_project.key. Otherwise, it is given in the input parameter file. The file name must end with .key.

    +
    +
    database:
    +  api_key_file: materials_project.key
    +
    +
    +
    +

    Comment: it will be recommended to exclude files with .key as a suffix from version control system. (e.g. for Git, add *.key in .gitignore file.)

    +
  6. +
+
+
+
+

2.2. Prepare an input parameter file

+

An input parameter file describes search conditions and data items to retrieve from databases.

+

An example is presented below. It is a text file in YAML format that contains information for accessing the database, search conditions, and types of data to obtain. +See file format section for the details of specification.

+

In YAML format, parameters are given in dictionary form as keyword: value, where value is a scalar such as a number or a string, or a set of values enclosed in [ ] or listed in itemized form, or a nested dictionary. +For the search conditions and data fields, a list may be given by a space-separated items without brackets as a special notation.

+
database:
+  target: materials project
+
+option:
+  output_dir: result
+  # dry_run: false
+
+properties:
+  band_gap: < 1.0
+  is_stable: true
+  is_metal: false
+  formula: "**O3"
+  spacegroup_symbol: Pm-3m
+
+fields: |
+  structure
+  band_gap
+  symmetry
+
+
+

The input parameter file consists of database, option, properties, and fields sections. +The database section describes settings about connecting to databases. +In the example, target is set to Materials Project, though this term is not considered at present. api_key can be used to set the API key. The key may also be set in the pymatgen configuration file or in the environment variable. The latter is assumed in the tutorial.

+

The option section describes optional settings for the command execution. +output_dir specifies the directory to place the obtained data. The default is the current directory. If dry_run is set to true, getcif does not connect to the database; instead, it just prints the search conditions and exits. dry_run may be specified in the command-line option.

+

The properties section describes search conditions. They are given in the form of keyword: value and treated as AND conditions. +In the example, the search condition is specified to find materials with band gap less than or equal to 1.0, stable insulator, having composition formula of ABO3 (where A and B are arbitrary species), that belong to the space group Pm-3m (perovskite). +The band_gap takes a pair of values for the lower and upper limits, as well as the description such as < 1.0. +The available terms for specifying search conditions are listed in the Appendix.

+

The fields section describes the data items to obtain. It is given as a YAML list, or a space-sparated list. +structure specifies the crystal structure data that will be stored in CIF format. +band_gap specifies the value of band gap, and symmetry specifies the information on the symmetry. material_id that refers to the index of material data in the Materials Project, and formula_pretty that refers to the composition formula are automatically obtained. +The available items are listed in the Appendix, or can be found in the help message of getcif command.

+
+
+

2.3. Obtaining data

+

The program getcif is executed with the input parameter file (input.yaml) as follows.

+
$ getcif input.yaml
+
+
+

Then it connects to the Materials Project database, and obtains the data that match the specified conditions. +The summary including the material IDs, the composition formulas, and other data items is printed to the standard output as follows.

+
material_id  formula  band_gap  symmetry  formula_pretty
+mp-861502  AcFeO3  0.9887999999999995  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  AcFeO3
+mp-977455  PaAgO3  0.915  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  PaAgO3
+mp-11775  RbUO3  0.45420000000000016  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  RbUO3
+mp-3163  BaSnO3  0.37239999999999984  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  BaSnO3
+mp-4126  KUO3  0.44540000000000024  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  KUO3
+mp-865322  UTlO3  0.27360000000000007  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  UTlO3
+mp-753781  EuHfO3  0.4795999999999996  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  EuHfO3
+
+
+

The obtained data are placed in the directory specified by output_dir with the subdirectories of the material ID for each material. +In this example, seven subdirectories with names from mp-3163 to mp-977455 are created within result directory, and each subdirectory contains the following files:

+
+
    +
  • +
    band_gap

    the value of band gap

    +
    +
    +
  • +
  • +
    formula

    the composition formula (that corresponds to the field formula_pretty)

    +
    +
    +
  • +
  • +
    structure.cif

    the crystal structure data in CIF format

    +
    +
    +
  • +
  • +
    symmetry

    the information about symmetry

    +
    +
    +
  • +
+
+

If an option --dry-run is added as a command-line option to getcif, +the program prints the search condition as follows, and exits. +It will be useful for checking the search parameters.

+
$ getcif --dry-run input.yaml
+{'band_gap': (None, 1.0), 'is_stable': True, 'is_metal': False, 'formula': '**O3', 'spacegroup_symbol': 'Pm-3m', 'fields': ['structure', 'band_gap', 'symmetry', 'material_id', 'formula_pretty']}
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/index.html b/manual/v1.1.0/en/html/index.html new file mode 100644 index 0000000..784bdb8 --- /dev/null +++ b/manual/v1.1.0/en/html/index.html @@ -0,0 +1,122 @@ + + + + + + + + Cif2x Users Guide — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/objects.inv b/manual/v1.1.0/en/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..024ac7bbca96e5c645d4d63776512a75c7bc5189 GIT binary patch literal 610 zcmV-o0-gOMAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkoX=XBb zAXRf^a&sU@b!lW}3L_v^WpZ_Ab7^j8AbMNff5#Dj&Oj)T{eV&mN|*Nh`MZO%=`CZ90h&rB`~1CEo?lt~ASMs-ufBi&`rwDLH;XORKhxss%Sbx)ZHWX|^G}MG6sqEDylob;Wh#r7MXf z{4Lv-BT4>SW&b1FU-%@C#6}&H12@7HOPcJ^{rs9lQr&WOx?-NKuKCc3({G=;D{J0( wT5gS2@q^ITj<}M_B5ItgS^2g5C0^Ka4}82|tP literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/en/html/search.html b/manual/v1.1.0/en/html/search.html new file mode 100644 index 0000000..5bbb528 --- /dev/null +++ b/manual/v1.1.0/en/html/search.html @@ -0,0 +1,120 @@ + + + + + + + Search — cif2x Users Guide 1.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/en/html/searchindex.js b/manual/v1.1.0/en/html/searchindex.js new file mode 100644 index 0000000..dc2c869 --- /dev/null +++ b/manual/v1.1.0/en/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"A tool to retrieve crystallographic data from databases (getcif)": [[11, null]], "Adding modes of Quantum ESPRESSO": [[1, "adding-modes-of-quantum-espresso"]], "Cif2x Users Guide": [[13, null]], "Command reference": [[3, null], [9, null]], "Contents:": [[13, null]], "Contributors": [[0, "contributors"]], "Copyright": [[0, "copyright"]], "Data to retrive (fields)": [[8, "data-to-retrive-fields"]], "Extension guide": [[1, null]], "File format": [[4, null], [10, null]], "Generating input files": [[6, "generating-input-files"]], "Getting an API key": [[12, "getting-an-api-key"]], "Input file generator for first-principles calculations (cif2x)": [[5, null]], "Input parameter file": [[4, "input-parameter-file"], [10, "input-parameter-file"]], "Installation and basic usage": [[2, null]], "Introduction": [[0, null], [7, null]], "License": [[0, "license"]], "Obtaining data": [[12, "obtaining-data"]], "Operating environment": [[0, "operating-environment"]], "Parameter List": [[8, null]], "Parameters for AkaiKKR": [[4, "parameters-for-akaikkr"]], "Parameters for OpenMX": [[4, "parameters-for-openmx"]], "Parameters for Quantum ESPRESSO": [[4, "parameters-for-quantum-espresso"]], "Parameters for VASP": [[4, "parameters-for-vasp"]], "Prepare an input parameter file": [[6, "prepare-an-input-parameter-file"], [12, "prepare-an-input-parameter-file"]], "Release history": [[0, "release-history"]], "Search conditions (properties)": [[8, "search-conditions-properties"]], "Search criteria": [[8, "id1"]], "Specifying parameter set": [[4, "specifying-parameter-set"]], "Specifying parameter sets": [[6, "specifying-parameter-sets"]], "Tutorial": [[6, null], [12, null]], "What is cif2x?": [[0, "what-is-cif2x"]], "cif2x": [[3, "cif2x"]], "content": [[4, "content"], [4, "id3"], [4, "id5"], [4, "id7"]], "database": [[10, "database"]], "fields": [[10, "fields"]], "getcif": [[9, "getcif"]], "option": [[10, "option"]], "optional": [[4, "optional"], [4, "id1"], [4, "id4"], [4, "id6"]], "optional section": [[4, "optional-section"]], "properties": [[10, "properties"]], "structure": [[4, "structure"]], "tasks": [[4, "tasks"], [4, "id2"]]}, "docnames": ["cif2x/about/index", "cif2x/appendix/index", "cif2x/basic-usage", "cif2x/command/index", "cif2x/filespec/index", "cif2x/index", "cif2x/tutorial/index", "getcif/about/index", "getcif/appendix/index", "getcif/command/index", "getcif/filespec/index", "getcif/index", "getcif/tutorial/index", "index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["cif2x/about/index.rst", "cif2x/appendix/index.rst", "cif2x/basic-usage.rst", "cif2x/command/index.rst", "cif2x/filespec/index.rst", "cif2x/index.rst", "cif2x/tutorial/index.rst", "getcif/about/index.rst", "getcif/appendix/index.rst", "getcif/command/index.rst", "getcif/filespec/index.rst", "getcif/index.rst", "getcif/tutorial/index.rst", "index.rst"], "indexentries": {}, "objects": {}, "objnames": {}, "objtypes": {}, "terms": {"": 8, "0": [0, 4, 6, 10, 12], "01": [4, 6, 10], "03": 0, "05": 6, "08": 6, "09": 0, "1": [0, 4, 6, 10, 12], "10": 4, "11775": 12, "12": [0, 6], "12x12x12": 6, "14": 0, "15": 4, "180": 6, "19": 0, "1e": 6, "2": [4, 6, 8, 12], "2023": 0, "2024": 0, "221": 12, "27360000000000007": 12, "28": 0, "3": [0, 2, 6], "31": 0, "3163": 12, "36": 6, "37239999999999984": 12, "3m": 12, "3x3": 4, "4": [4, 6], "4126": 12, "44540000000000024": 12, "45420000000000016": 12, "4795999999999996": 12, "4x4x4": 6, "6": 4, "7": 6, "753781": 12, "8": 6, "861502": 12, "865322": 12, "8x8x8": 6, "915": 12, "977455": 12, "9887999999999995": 12, "A": [2, 4, 5, 8, 10, 12, 13], "AND": [10, 12], "At": 10, "By": 10, "For": [1, 2, 4, 6, 10, 12], "If": [4, 6, 10, 12], "In": [0, 1, 2, 3, 4, 6, 10, 12], "It": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12], "Of": 1, "The": [0, 1, 2, 3, 4, 6, 7, 8, 10, 12], "Their": 2, "Then": [2, 12], "These": [1, 4], "To": [2, 6], "__init__": [1, 2], "abo3": [8, 12], "abo_3": 10, "about": 12, "abov": [2, 4, 6, 8], "absorpt": 8, "accept": [4, 10], "access": [7, 8, 10, 12], "accord": 4, "account": 12, "accuraci": 0, "acfeo3": 12, "ad": [5, 12], "add": [1, 2, 12], "addit": 2, "adopt": [4, 6], "advanc": 0, "afm": 8, "aist": 0, "akaikkr": [0, 2, 3, 5, 6], "akaikkrpythonutil": 2, "akaikkrteam": 2, "all": 0, "allow": [2, 4, 9, 10], "along": [2, 6, 12], "alpha": [0, 4], "also": [1, 2, 8, 10, 12], "an": [2, 3, 4, 5, 8, 9, 10, 11], "anclr": 4, "angstrom": 4, "ani": 8, "anisotropi": 8, "anonym": 8, "aoyama": 0, "api": [2, 8, 10, 11], "api_kei": 12, "api_key_fil": [10, 12], "appear": [4, 6], "append": 8, "appendix": [10, 12], "appli": 10, "applic": 10, "appropri": 0, "ar": [1, 2, 4, 6, 8, 10, 12], "arbitrari": [6, 12], "argument": [1, 2], "associ": 1, "assum": [4, 12], "atmicx": 4, "atmtyp": 4, "atom": [4, 8, 10], "atomic_posit": [1, 4, 6], "atomic_speci": [1, 4, 6], "attent": 0, "automat": [2, 4, 6, 10, 12], "automatic_dens": 4, "automatic_density_by_length": 4, "automatic_density_by_vol": 4, "automatic_gamma_dens": 4, "automatic_linemod": 4, "aux": 4, "avail": [2, 4, 8, 10, 12], "averag": 8, "b": [4, 10, 12], "band": [8, 12], "band_gap": [8, 12], "bandstructur": 8, "base": [1, 10], "basic": [5, 6, 13], "basno3": 12, "becom": [3, 9, 10], "begin": 10, "belong": 12, "below": [2, 4, 6, 8, 10, 12], "besid": 6, "beta": 4, "between": [1, 4, 8, 10], "blank": [1, 4, 6], "block": [1, 4, 6, 10], "bool": 8, "boolean": [8, 10], "both": [4, 6], "bracket": [8, 10, 12], "bravai": 4, "brief": 10, "brvtyp": 4, "builder_meta": 8, "bulk": 8, "bulk_modulu": 8, "c": 4, "calc_mod": [1, 2], "calcul": [0, 1, 2, 3, 4, 6, 8, 10, 13], "call": 6, "can": [2, 6, 7, 8, 10, 12], "cancel": [3, 9], "capabl": 0, "card": [1, 2, 4, 6, 8, 10], "card_tabl": 1, "case": [2, 4, 6, 10], "cbm": 8, "cd": 2, "cell_paramet": [1, 4, 6], "celldm": 4, "center": 2, "charact": 10, "charge_dens": 8, "check": [10, 12], "chemenv": 8, "chemic": 8, "chemsi": 8, "choic": 6, "cif": [0, 2, 3, 6, 10, 12], "cif2struct": 2, "cif2x": [1, 2, 4, 6], "class": [1, 8], "client": 8, "clone": 2, "co3sns2_nosym": 6, "code": 0, "column": 4, "com": 2, "combin": [4, 6], "comma": [8, 10], "command": [2, 5, 10, 11, 12, 13], "comment": [8, 10, 12], "compos": 6, "composit": [7, 8, 12], "composition_reduc": 8, "comput": 0, "conc": 4, "concern": 6, "condit": [0, 2, 9, 10, 11, 12], "config": [2, 4, 10, 12], "configur": [4, 10, 12], "confirm": 9, "conform": 10, "connect": [9, 10, 12], "consid": [6, 8, 10, 12], "consider": 0, "consist": [1, 4, 6, 10, 12], "constant": 8, "construct": 0, "contain": [1, 4, 6, 10, 12], "content": [1, 2, 6, 8, 10], "contribut": 0, "contributor": 5, "control": [4, 6, 10, 12], "conv_thr": 6, "convent": 4, "converg": 6, "convers": 10, "convex": 8, "coordin": 4, "copyright": 5, "core": 8, "corrdin": 0, "correct": 8, "correspond": [4, 8, 10, 12], "cosab": 4, "cosac": 4, "cosbc": 4, "cours": 1, "cr2": 8, "creat": [2, 4, 6, 12], "create_modeproc": 1, "crystal": [0, 1, 2, 3, 4, 6, 8, 10, 12], "crystal_system": [8, 12], "crystallograph": [2, 3, 5, 7, 9, 10, 12, 13], "crystalsystem": [8, 12], "csv": [2, 4, 6], "cubic": [8, 12], "current": [0, 1, 3, 4, 6, 10, 12], "cutoff": [4, 6], "cutoff_fil": 4, "dashboard": 12, "data": [0, 1, 2, 3, 4, 5, 6, 9, 10, 13], "data_path": 4, "databas": [2, 5, 7, 8, 9, 12, 13], "database_id": 8, "decid": 10, "decomposes_to": 8, "decreas": [3, 9], "def": 1, "default": [4, 10, 12], "defin": [1, 4, 8, 10], "definit": 4, "degauss": 6, "denot": [8, 10], "densiti": 8, "density_atom": 8, "depend": 0, "deprec": 8, "deprecation_reason": 8, "deriv": [1, 4], "describ": [2, 4, 6, 8, 10, 12], "descript": [3, 8, 9, 10, 12], "design": 0, "detail": [4, 6, 12], "determin": [1, 4, 10], "dev": 2, "develop": 0, "dictionari": [1, 6, 12], "dielectr": 8, "differ": 4, "direct": 8, "directori": [2, 4, 6, 10, 12], "displac": 10, "displai": [3, 9], "distribut": 0, "divis": 4, "do": [8, 12], "doc": [2, 6, 12], "doe": [10, 12], "dos_energy_down": 8, "dos_energy_up": 8, "download": 2, "dry": [9, 12], "dry_run": [9, 10, 12], "due": 10, "e": [8, 10, 12], "e_electron": 8, "e_ij_max": 8, "e_ion": 8, "e_tot": 8, "each": [1, 4, 6, 10, 12], "ecutrho": [4, 6], "ecutwfc": [4, 6], "edit": 12, "efermi": 8, "effect": [3, 9], "elast": 8, "elastic_anisotropi": 8, "electron": [6, 8], "electronic_structur": 8, "element": [4, 8, 10], "els": 1, "emmet": 8, "empti": 6, "en": 2, "enclos": [6, 10, 12], "end": [4, 6, 12], "energi": 8, "energy_above_hul": 8, "energy_per_atom": 8, "entri": [1, 4, 6, 8], "environ": [2, 4, 5, 10, 12], "eo": 8, "equal": [8, 10, 12], "equilibrium": 8, "equilibrium_reaction_energi": 8, "equilibrium_reaction_energy_per_atom": 8, "equival": 10, "es_source_calc_id": 8, "espresso": [0, 2, 3, 5, 6], "essenti": 10, "etc": 4, "euhfo3": 12, "ev": 8, "even": 10, "everi": [4, 6], "examin": 6, "exampl": [4, 6, 10, 12], "except": [4, 6], "exclud": [8, 12], "exclude_el": 8, "execut": [2, 6, 10, 12], "exist": 10, "exit": [3, 9, 12], "expect": 0, "explain": [4, 6, 12], "export": [4, 12], "extens": [5, 10, 13], "f90nml": 2, "factor": 8, "fals": [4, 6, 8, 10, 12], "fe": [4, 8], "fe2o3": 8, "featur": 4, "fermi": 8, "field": [1, 4, 11, 12], "file": [0, 2, 3, 8, 9, 11, 13], "fim": 8, "find": 12, "first": [0, 2, 3, 4, 6, 10, 13], "float": 8, "flow": 10, "fm": 8, "follow": [0, 2, 3, 4, 6, 8, 9, 10, 12], "forc": 1, "force_gamma": 4, "form": [4, 6, 12], "format": [2, 3, 5, 6, 8, 9, 11, 12, 13], "formation_energi": 8, "formation_energy_per_atom": 8, "former": 4, "formula": [8, 10, 12], "formula_anonym": 8, "formula_pretti": [8, 10, 12], "fortran90": 6, "found": 12, "fraction": 4, "framework": 3, "from": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13], "fukuda": 0, "fukushima": 0, "function": [1, 4, 8], "further": 4, "g": [8, 10, 12], "g_reuss": 8, "g_voigt": 8, "g_vrh": 8, "gain": 0, "gamma": 4, "gamma_automat": 4, "gap": [8, 12], "gather": 1, "gen": 12, "gener": [0, 1, 2, 3, 4, 10, 12, 13], "generate_": 1, "generate_atomic_posit": 1, "generate_atomic_speci": 1, "generate_cell_paramet": 1, "generate_k_point": 1, "get": 11, "getcif": [2, 5, 7, 8, 10, 12, 13], "git": [2, 12], "github": 2, "gitignor": 12, "given": [1, 4, 6, 10, 12], "global": [4, 6, 10], "gnu": 0, "gpa": 8, "gpl": 0, "grain_boundari": 8, "grid": [4, 6], "grid_dens": 4, "group": [8, 10, 12], "guid": 5, "gz": 4, "h": [3, 9], "ha": [0, 8], "handl": 4, "has_prop": 8, "has_reconstruct": 8, "hasprop": 8, "have": [4, 6, 12], "head": 10, "heavili": 0, "help": [3, 9, 10, 12], "hexagon": 8, "higher": 10, "highsymmkpath": 4, "hill": 8, "histori": 5, "hold": [4, 6], "homogeneous_poisson": 8, "how": 4, "htp": 2, "http": [2, 12], "hull": 8, "i": [1, 2, 3, 4, 5, 6, 7, 8, 10, 12], "ibrab": 4, "ibrav": [4, 6], "id": [8, 10, 12], "identif": 10, "ido": 0, "if_po": 4, "ignor": [4, 10], "ignore_speci": 4, "implement": 1, "in_tmpl": 6, "incar": 4, "includ": [2, 3, 4, 6, 8, 12], "increas": [3, 9], "indenep": 4, "indent": [8, 10], "index": [2, 4, 6, 8, 12], "individu": 4, "industri": 0, "inform": [3, 4, 7, 9, 10, 12], "informat": 0, "input": [0, 2, 3, 9, 11, 13], "input_yaml": [3, 9], "insertion_electrod": 8, "instal": [5, 13], "instead": [4, 12], "institut": 0, "instutit": 0, "insul": 12, "int": 8, "integ": [8, 10], "intern": 8, "introduct": [5, 11, 13], "io": 4, "ionic": 8, "is_gap_direct": 8, "is_magnet": 8, "is_met": [8, 12], "is_stabl": [8, 12], "issp": 2, "item": [2, 6, 8, 10, 12], "its": 6, "j": 8, "ja": 2, "just": 12, "k": [4, 6], "k_point": [1, 4, 6], "k_resolut": 4, "k_reuss": 8, "k_voigt": 8, "k_vrh": 8, "kasamatsu": 0, "kazuyoshi": 0, "kei": [4, 10, 11], "kept": 12, "keyword": [2, 4, 6, 8, 10, 12], "known": 0, "koretsun": 0, "kota": 0, "kpoint": 4, "kppa": 4, "kshift": 4, "kuo3": 12, "larger": 10, "last_upd": 8, "later": 0, "latest": 7, "latter": [4, 10, 12], "lattic": [1, 4], "lda": 4, "lead": 10, "learn": 0, "left": [4, 6], "length_dens": 4, "lenient": 10, "less": [8, 10, 12], "li": 8, "librari": [2, 8, 10], "licens": [2, 5], "limit": 12, "line": [3, 4, 6, 9, 10, 12], "linux": 0, "list": [3, 4, 5, 6, 10, 11, 12], "locat": [2, 4, 12], "login": 12, "lower": [10, 12], "m": [2, 6, 8, 12], "machin": 0, "made": 12, "magnet": 8, "magnetic_ord": 8, "mai": [1, 2, 4, 10, 12], "main": 2, "make_input": 2, "manner": 4, "manual": 4, "map": 1, "masahiro": 0, "mass": 4, "match": [4, 12], "materi": [0, 2, 3, 7, 8, 9, 10, 12], "material_id": [8, 10, 12], "materials_project": [10, 12], "materialsproject": 12, "matrix": 4, "max": [8, 10], "maximum": 8, "md": [2, 4], "merg": 4, "mesh": 4, "messag": [3, 9, 12], "metal": 8, "method": [1, 8, 10], "min": [8, 10], "minimum": 8, "minor": 10, "miss": 4, "missing_beta": 6, "mode": [4, 5, 6], "modeproc": 1, "modifi": 6, "modul": 2, "modulu": 8, "monkhorst_automat": 4, "monoclin": 8, "monti": 2, "more": [3, 8, 9, 10], "motoyama": 0, "mp": [2, 8, 10, 12], "mp_api_kei": [10, 12], "mpi": 8, "mprester": 8, "multipl": [0, 3, 6, 9, 10], "must": [1, 10, 12], "mxl": 4, "n": [4, 8, 10], "n_x": 4, "n_y": 4, "n_z": 4, "name": [1, 4, 10, 12], "namelist": [1, 4, 6], "nat": [4, 6], "nation": 0, "natm": 4, "ncmp": 4, "necessari": 4, "need": [2, 4, 6, 10, 12], "nelement": 8, "nest": [6, 12], "new": 1, "nexclud": 4, "next": [2, 12], "nm": 8, "noncolin": 6, "none": [4, 10, 12], "normal": 8, "notat": [8, 10, 12], "note": 6, "nscf": [1, 4, 6], "nsite": 8, "nspin": 6, "ntyp": [4, 6], "num_el": 8, "num_magnetic_sit": 8, "num_sit": 8, "num_unique_magnetic_sit": 8, "number": [4, 6, 8, 10, 12], "numer": 10, "numpi": 2, "o": 8, "o2": 8, "o3": [10, 12], "obtain": [2, 4, 6, 7, 9, 10, 11], "occup": 6, "offici": 2, "omit": 4, "onc": 2, "one": [4, 8, 10, 12], "onli": 4, "openbabel": 2, "openmx": [0, 2, 3, 5, 6], "oper": [5, 10], "option": [1, 2, 3, 6, 9, 12], "orbit": 4, "order": [1, 4, 8, 12], "org": 12, "organ": 4, "origin": [4, 8], "orthorhomb": 8, "other": [1, 3, 4, 6, 7, 9, 10, 12], "otherwis": [4, 12], "outdir": 6, "output": [1, 4, 6, 10, 12], "output_dir": [4, 6, 10, 12], "output_fil": [4, 6], "overwrit": 6, "overwritten": 6, "oxi_st": 8, "oxid": 8, "ozaki": 0, "p": [6, 8], "paago3": 12, "packag": [0, 2], "page": 2, "pair": [8, 10, 12], "panda": 2, "paramet": [0, 1, 2, 3, 5, 9, 11], "part": [0, 4, 6], "pass": 8, "path": 4, "path_typ": 4, "pattern": 4, "pbe": 4, "perovskit": 12, "phonon": 8, "physic": [0, 7, 10], "pick": 1, "piezoelectr": 8, "piezoelectric_modulu": 8, "pip": 2, "place": [2, 4, 6, 10, 12], "platform": 0, "pm": 12, "pmg": 12, "pmg_mapi_kei": [10, 12], "pmg_vasp_psp_dir": 4, "pmgrc": [2, 4, 10, 12], "point": [4, 6, 8], "point_group": 12, "poisson": 8, "poisson_ratio": 8, "poscar": [2, 4], "posit": 10, "possibl": 6, "possible_speci": 8, "pot_gga_paw_pb": 4, "pot_lda_paw": 4, "potcar": 4, "potenti": [2, 4, 6], "pp_file": [4, 6], "pp_list": 4, "pp_psl_pbe_rrkju": 6, "precis": [4, 10], "predefin": 4, "predict": 0, "prefix": 6, "prepar": [0, 2, 5, 11], "prerequisit": 2, "present": [2, 6, 10, 12], "prevent": 10, "principl": [0, 2, 3, 4, 6, 10, 13], "print": [10, 12], "procedur": [6, 12], "program": [0, 2, 3, 6, 9, 12], "project": [0, 7, 8, 10, 12], "properti": [0, 7, 11, 12], "property_nam": 8, "proven": 8, "provid": [1, 7, 8, 12], "pseudo": [2, 4, 6], "pseudo_dir": [4, 6], "pseudo_funct": 4, "psudo": 6, "psuedo_dir": 4, "public": 0, "pw": [1, 4], "pwscf": 6, "py": [1, 2], "pyakaikkr": 2, "pymatgen": [2, 3, 4, 10, 12], "pyproject": 2, "python": [2, 4], "python3": [0, 2], "q": [3, 9], "qe": [1, 2, 3, 6], "qemode_bas": 1, "qemode_gener": 1, "qemode_pw": 1, "qeutil": 2, "quantum": [0, 2, 3, 5, 6], "quantum_espresso": 3, "queri": [9, 10, 12], "quick": 4, "quiet": [3, 9], "quot": 10, "r1": 4, "r2": 4, "r3": 4, "rang": [4, 6, 8, 10], "rapid": 0, "ratio": 8, "rbuo3": 12, "reaction": 8, "read": [3, 4, 6, 9], "read_input": 2, "readm": 2, "real": 10, "recent": 0, "recognit": 10, "recommend": 12, "reconstruct": [4, 8], "refer": [4, 5, 11, 12, 13], "reformat": 8, "refract": 8, "regard": 10, "regist": 12, "registr": 12, "relat": 4, "relax": 4, "releas": 5, "remov": 4, "replac": 4, "repositori": 2, "repres": 8, "requir": [2, 4, 6], "research": 0, "reserv": 0, "resolut": 6, "respect": [4, 6, 10], "result": [10, 12], "retriev": [2, 5, 7, 8, 9, 10, 12, 13], "retriv": 11, "return": [1, 8], "reuss": 8, "right": 0, "rmt": 4, "rrkjus_psl": 4, "ruamel": 2, "run": [1, 2, 6, 9, 12], "run_cif2kkr": 2, "runtim": [3, 9], "safe": 12, "same": [2, 4, 6], "sampl": [2, 6], "scalar": [4, 6, 12], "scf": [1, 4, 6], "scienc": [0, 12], "seaborn": 2, "search": [7, 9, 10, 11, 12], "section": [6, 8, 10, 12], "see": [4, 6, 12], "seen": 10, "self": 1, "separ": [1, 2, 4, 6, 8, 10, 12], "seri": 6, "serv": 10, "set": [1, 2, 3, 5, 10, 12], "seven": 12, "sever": [6, 10], "shape": 8, "shape_factor": 8, "share": 12, "shear": 8, "shear_modulu": 8, "shift": 4, "short": 8, "should": [1, 2, 4, 6, 10, 12], "shown": [6, 10, 12], "shusuk": 0, "si": 8, "significantli": 0, "similar": 4, "singl": 8, "site": 8, "size": 4, "slight": 10, "small": 10, "smaller": 10, "smear": 6, "softwar": [0, 2, 3, 4, 6, 10], "solid": 0, "some": [4, 6], "sourc": [0, 1, 2, 6, 8], "space": [8, 10, 12], "spacegroup_numb": 8, "spacegroup_symbol": [8, 12], "sparat": [10, 12], "spd": 4, "speci": [4, 12], "special": [4, 6, 10, 12], "specif": [0, 4, 6, 10, 12], "specifi": [1, 2, 3, 5, 7, 9, 10, 12], "spn": 4, "sr": 10, "src": [1, 2], "stabl": 12, "standard": [4, 12], "start": [4, 6, 10], "state": [0, 8], "step": [2, 4, 6, 12], "store": [4, 6, 10, 12], "str": 8, "string": [4, 6, 8, 10, 12], "stringent": 10, "struct2akaikkr": 2, "struct2openmx": 2, "struct2q": 2, "struct2vasp": 2, "structur": [0, 1, 2, 3, 6, 8, 10, 12], "style": [8, 10], "sub": 6, "subdirectori": [10, 12], "submit": 9, "substanc": 0, "substrat": 8, "suffix": [10, 12], "summar": [8, 10], "summari": [8, 10, 12], "supercel": 4, "supersed": [4, 9], "support": [0, 1, 2, 3, 4, 6], "surfac": 8, "surface_anisotropi": 8, "surface_energy_anisotropi": 8, "surface_properti": 8, "symbol": [4, 8, 10, 12], "symmetri": [7, 8, 10, 12], "symprec": [10, 12], "synopsi": [3, 9], "syntax": [4, 6, 10], "system": [2, 4, 6, 8, 12], "t": [2, 3, 6], "tabl": [4, 8], "tag": 8, "tailor": 0, "taisuk": 0, "takashi": 0, "take": [1, 2, 3, 4, 6, 9, 12], "taken": [8, 10], "target": [2, 3, 10, 12], "task": 6, "task_id": 8, "tatsumi": 0, "technologi": 0, "templat": [0, 2, 4, 6], "template_dir": 4, "tempor": 4, "term": [4, 8, 10, 12], "test": 0, "tetragon": 8, "tetsuya": 0, "text": [6, 10, 12], "than": [8, 10, 12], "thei": [4, 10, 12], "theoret": 8, "therefor": [0, 6], "thermo": 8, "thi": [0, 1, 3, 4, 6, 9, 10, 12], "those": [1, 2, 4, 6], "though": 12, "threshold": 10, "ti": 10, "time": [2, 3, 9], "tmp": 4, "tmpdir": 4, "tohoku": 0, "tokyo": 0, "toler": [4, 6, 10], "toml": 2, "tool": [0, 2, 5, 7, 12, 13], "total": 8, "total_energi": 8, "total_magnet": 8, "total_magnetization_normalized_formula_unit": 8, "total_magnetization_normalized_vol": 8, "tprnfor": 6, "trail": 10, "train": 0, "transform": [1, 4], "treat": [10, 12], "triclin": 8, "trigon": 8, "true": [4, 6, 8, 10, 12], "tstress": 6, "tupl": 8, "turn": [2, 4], "tutori": [2, 5, 11, 13], "two": [1, 8, 10], "type": [0, 1, 4, 6, 8, 10, 12], "types_of_magnetic_speci": 8, "ubuntu": 0, "uncorrect": 8, "uncorrected_energi": 8, "uncorrected_energy_per_atom": 8, "under": 10, "uniqu": 8, "unit": [4, 8], "univers": 0, "universal_anisotropi": 8, "unspecifi": [4, 10], "unsupport": 4, "up": 1, "updat": 1, "update_card": 1, "update_namelist": 1, "upf": 4, "upper": 12, "us": [0, 4, 6, 8, 10, 12], "usabl": 0, "usag": [5, 13], "use_ibrav": [4, 6], "user": [2, 7, 12], "util": 2, "utlo3": 12, "v": [3, 9], "v3": 0, "valid": 10, "valu": [1, 4, 6, 8, 10, 12], "vari": [0, 2, 6], "variabl": [1, 2, 4, 10, 12], "vasp": [0, 2, 3, 5, 6], "vbm": 8, "vector": 4, "ver": 0, "verbos": [3, 9], "version": [0, 1, 2, 3, 4, 6, 7, 9, 12], "via": [8, 12], "viewd": 10, "visit": 12, "voigt": 8, "vol_dens": 4, "volum": 8, "vps_tabl": 2, "wa": 0, "wai": 12, "warn": 8, "we": [6, 12], "websit": 12, "weight": 8, "weighted_surface_energi": 8, "weighted_surface_energy_ev_per_ang2": 8, "weighted_work_funct": 8, "well": [6, 8, 12], "what": 5, "when": [3, 4, 6, 9, 10], "where": [4, 6, 12], "whether": [4, 8, 10], "which": [4, 10], "whole": 10, "whose": 4, "wide": 2, "width": 4, "wild": [8, 10], "within": 12, "without": [9, 10, 12], "work": [6, 8], "workdir": 4, "written": [4, 6, 10], "x": [1, 2, 4], "xa": 8, "xf": 2, "yamagata": 0, "yaml": [2, 3, 4, 6, 8, 9, 10, 12], "year": 0, "yoshimi": 0, "you": 2, "yuichi": 0}, "titles": ["1. Introduction", "6. Extension guide", "2. Installation and basic usage", "4. Command reference", "5. File format", "Input file generator for first-principles calculations (cif2x)", "3. Tutorial", "1. Introduction", "5. Parameter List", "3. Command reference", "4. File format", "A tool to retrieve crystallographic data from databases (getcif)", "2. Tutorial", "Cif2x Users Guide"], "titleterms": {"A": 11, "ad": 1, "akaikkr": 4, "an": [6, 12], "api": 12, "basic": 2, "calcul": 5, "cif2x": [0, 3, 5, 13], "command": [3, 9], "condit": 8, "content": [4, 13], "contributor": 0, "copyright": 0, "criteria": 8, "crystallograph": 11, "data": [8, 11, 12], "databas": [10, 11], "environ": 0, "espresso": [1, 4], "extens": 1, "field": [8, 10], "file": [4, 5, 6, 10, 12], "first": 5, "format": [4, 10], "from": 11, "gener": [5, 6], "get": 12, "getcif": [9, 11], "guid": [1, 13], "histori": 0, "i": 0, "input": [4, 5, 6, 10, 12], "instal": 2, "introduct": [0, 7], "kei": 12, "licens": 0, "list": 8, "mode": 1, "obtain": 12, "openmx": 4, "oper": 0, "option": [4, 10], "paramet": [4, 6, 8, 10, 12], "prepar": [6, 12], "principl": 5, "properti": [8, 10], "quantum": [1, 4], "refer": [3, 9], "releas": 0, "retriev": 11, "retriv": 8, "search": 8, "section": 4, "set": [4, 6], "specifi": [4, 6], "structur": 4, "task": 4, "tool": 11, "tutori": [6, 12], "usag": 2, "user": 13, "vasp": 4, "what": 0}}) \ No newline at end of file diff --git a/manual/v1.1.0/ja/cif2x-usersguide.pdf b/manual/v1.1.0/ja/cif2x-usersguide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2fc5f9e06b9d02e9fe363b814f090626318ccf79 GIT binary patch literal 127756 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

WEZDcswe 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 literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/ja/html/.buildinfo b/manual/v1.1.0/ja/html/.buildinfo new file mode 100644 index 0000000..a5390ba --- /dev/null +++ b/manual/v1.1.0/ja/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 32b7f512823781dd94847adfef1b729f +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/manual/v1.1.0/ja/html/_sources/cif2x/about/index.rst.txt b/manual/v1.1.0/ja/html/_sources/cif2x/about/index.rst.txt new file mode 100644 index 0000000..5f07233 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/cif2x/about/index.rst.txt @@ -0,0 +1,93 @@ +**************************************************************** +概要 +**************************************************************** + +cif2xとは? +---------------------------------------------------------------- + +近年、機械学習を活用した物性予測や物質設計(マテリアルズインフォマティクス)が注目されています。 +機械学習の精度は、適切な教師データの準備に大きく依存しています。 +そのため、迅速に教師データを生成するためのツールや環境の整備は、 +マテリアルズインフォマティクスの研究進展に大きく貢献すると期待されます。 + +cif2xは、cifファイルから第一原理計算用の入力ファイルを生成するツールです。 +入力パラメータを雛形として、物質の種類や計算条件によって変わる箇所を結晶構造データなどから構成します。 +特定の計算条件に応じた複数の入力ファイルを生成することが可能です。 +現在は、 +`VASP `_, `Quantum ESPRESSO `_, `OpenMX `_, `AkaiKKR `_ に対応しています。 + +付属プログラムとして、物質材料データベースから結晶構造データ等を取得するツール getcif を用意しています。現在は Materials Project からのデータ取得に対応しています。物質の組成や対称性、バンドギャップなどの物性値をもとにデータベースを検索し、データを取得することができます。 + + +ライセンス +---------------------------------------------------------------- + +本ソフトウェアのプログラムパッケージおよびソースコード一式はGNU General Public License version 3 (GPL v3) に準じて配布されています。 + +開発貢献者 +---------------------------------------------------------------- + +本ソフトウェアは以下の開発貢献者により開発されています。 + + - 開発者 + + - 吉見 一慶 (東京大学 物性研究所) + + - 青山 龍美 (東京大学 物性研究所) + + - 本山 裕一 (東京大学 物性研究所) + + - 福田 将大 (東京大学 物性研究所) + + - 井戸 康太 (東京大学 物性研究所) + + - 福島 鉄也 (産業技術総合研究所) + + - 笠松 秀輔 (山形大学 学術研究院(理学部主担当)) + + - 是常 隆  (東北大学大学院理学研究科) + + - プロジェクトコーディネーター + + - 尾崎 泰助 (東京大学 物性研究所) + + +バージョン履歴 +---------------------------------------------------------------- + + ver.1.1.0 + 2024/09/14 リリース + + ver.1.0.1 + 2024/03/31 リリース + + ver.1.0.0 + 2024/03/19 リリース + + ver.1.0-alpha + 2023/12/28 リリース + + +コピーライト +---------------------------------------------------------------- + +.. only:: html + + |copy| *2023- The University of Tokyo. All rights reserved.* + + .. |copy| unicode:: 0xA9 .. copyright sign + +.. only:: latex + + :math:`\copyright` *2023- The University of Tokyo. All rights reserved.* + + +本ソフトウェアは2023年度 東京大学物性研究所 ソフトウェア高度化プロジェクトの支援を受け開発されており、その著作権は東京大学が所持しています。 + +動作環境 +---------------------------------------------------------------- + +以下の環境で動作することを確認しています。 + +- Ubuntu Linux + python3 + diff --git a/manual/v1.1.0/ja/html/_sources/cif2x/appendix/index.rst.txt b/manual/v1.1.0/ja/html/_sources/cif2x/appendix/index.rst.txt new file mode 100644 index 0000000..1355827 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/cif2x/appendix/index.rst.txt @@ -0,0 +1,50 @@ +.. _sec-cif2x-appendix: + +================================================================ +拡張ガイド +================================================================ + +Quantum ESPRESSO の mode を追加する +---------------------------------------------------------------- + +Quantum ESPRESSO の計算モードへの対応を追加するには、 ``src/cif2x/qe/calc_mode.py`` の ``create_modeproc()`` 関数に mode と変換クラスの対応付けを記述します。 + +.. code-block:: python + + def create_modeproc(mode, qe): + if mode in ["scf", "nscf"]: + modeproc = QEmode_pw(qe) + else: + modeproc = QEmode_generic(qe) + return modeproc + + +modeごとの変換機能は ``QEmode_base`` の派生クラスとしてまとめられています。 +このクラスは +``update_namelist()`` で namelist ブロックの更新と、 +``update_cards()`` で cards ブロックのデータ生成を行います。 +現在は pw.x の scf および nscf に対応する ``QEmode_pw`` クラスと、変換せずそのまま出力する ``QEmode_generic`` クラスが用意されています。 + +.. code-block:: python + + class QEmode_base: + def __init__(self, qe): + def update_namelist(self, content): + def update_cards(self, content): + + +namelist については、空欄の値を結晶構造データ等から生成して代入するほか、格子パラメータなど Structure から決まる値や、他のパラメータとの整合性をとる必要のある値を強制的にセットする場合があります。処理内容はモードごとに個別に対応します。 + +cards ブロックについては、card の種類ごとに関数を用意し、card名と関数の対応付けを ``card_table`` 変数に列挙します。 +基底クラスの ``update_cards()`` では、card名から対応する関数を取得して実行し、card の情報を更新します。もちろん、全く独自に ``update_cards()`` 関数を作成することもできます。 + +.. code-block:: python + + self.card_table = { + 'CELL_PARAMETERS': generate_cell_parameters, + 'ATOMIC_SPECIES': generate_atomic_species, + 'ATOMIC_POSITIONS': generate_atomic_positions, + 'K_POINTS': generate_k_points, + } + +cardごとの関数は ``scr/cif2x/qe/cards.py`` にまとめられており、関数名は ``generate_{card名}`` としています。この関数は card ブロックのパラメータを引数に取り、card名、option、dataフィールドからなる辞書データを返します。 diff --git a/manual/v1.1.0/ja/html/_sources/cif2x/basic-usage.rst.txt b/manual/v1.1.0/ja/html/_sources/cif2x/basic-usage.rst.txt new file mode 100644 index 0000000..79b7b90 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/cif2x/basic-usage.rst.txt @@ -0,0 +1,121 @@ +インストールと基本的な使い方 +================================================================ + +**必要なライブラリ・環境** + + HTP-tools に含まれる第一原理計算入力ファイル生成ツール cif2x を利用するには、以下のプログラムとライブラリが必要です。 + + - python 3.x + - pymatgen モジュール + - ruamel.yaml モジュール + - f90nml モジュール + - qe-tools モジュール + - numpy モジュール + - pandas モジュール + - monty モジュール + - OpenBabel モジュール (オプション) + - AkaiKKRPythonUtil モジュール + + CIFデータ取得ツール getcif を利用するには、上記に加えて以下のライブラリが必要です。 + + - mp-api モジュール + +**ソースコード配布サイト** + + - `GitHubリポジトリ `_ + +**ダウンロード方法** + + gitを利用できる場合は、以下のコマンドでcif2xをダウンロードできます。 + + .. code-block:: bash + + $ git clone https://github.com/issp-center-dev/cif2x.git + +**インストール方法** + + cif2xをダウンロード後、以下のコマンドを実行してインストールします。cif2xが利用するライブラリも必要に応じてインストールされます。 + + .. code-block:: bash + + $ cd ./cif2x + $ python3 -m pip install . + + 実行プログラム ``cif2x``, ``getcif`` がインストールされます。 + + なお、AkaiKKRPythonUtil モジュールは別途インストールが必要です。 + 以下の手順で `配布サイト `_ からソースコードを取得しインストールします。また、必要な seaborn モジュールもインストールしておきます。 + + .. code-block:: bash + + $ git clone https://github.com/AkaiKKRteam/AkaiKKRPythonUtil.git + $ cd ./AkaiKKRPythonUtil/library/PyAkaiKKR + $ python3 -m pip install . + $ python3 -m pip install seaborn + + +**ディレクトリ構成** + + :: + + . + |-- LICENSE + |-- README.md + |-- pyproject.toml + |-- docs/ + | |-- ja/ + | |-- tutorial/ + |-- src/ + | |-- cif2x/ + | |-- __init__.py + | |-- main.py + | |-- cif2struct.py + | |-- struct2qe.py + | |-- qe/ + | | |-- __init__.py + | | |-- calc_mode.py + | | |-- cards.py + | | |-- content.py + | | |-- qeutils.py + | | |-- tools.py + | |-- struct2vasp.py + | |-- struct2openmx.py + | |-- openmx/ + | | |-- __init__.py + | | |-- vps_table.py + | |-- struct2akaikkr.py + | |-- akaikkr/ + | | |-- make_input.py + | | |-- read_input.py + | | |-- run_cif2kkr.py + | |-- utils.py + | |-- getcif/ + | |-- __init__.py + | |-- main.py + |-- sample/ + + +**基本的な使用方法** + + cif2xは第一原理計算プログラムのための入力ファイルを生成するツールです。入力パラメータを雛形として、物質の種類や計算条件によって変わる箇所を結晶構造データなどから構成します。現在は Quantum ESPRESSO, VASP, OpenMX, および AkaiKKR の入力ファイル形式に対応しています。 + + #. 入力パラメータファイルの作成 + + cif2xを使用するには、まず、生成する入力ファイルの内容を記述したパラメータファイルをYAML形式で作成します。詳細についてはファイルフォーマットの章を参照してください。 + + #. 結晶構造ファイルと擬ポテンシャルファイルの配置 + + 対象となる物質の結晶構造を記述したファイルを用意します。ファイル形式は CIF または pymatgen が扱える POSCAR や xfs 形式に対応しています。 + + Quantum ESPRESSO の場合、利用する擬ポテンシャルファイルと、CSV形式のインデックスファイルを配置します。擬ポテンシャルファイルの配置先などは入力パラメータファイル内に指定します。 + + VASP の場合、擬ポテンシャルファイルの格納場所を ``~/.config/.pmgrc.yaml`` ファイルに記述するか環境変数にセットします。入力パラメータファイル内で指定することもできます。 + + #. コマンドの実行 + + 作成した入力パラメータファイルおよび結晶構造データファイルを入力としてcif2xプログラムを実行します。Quantum ESPRESSO用の入力ファイルを生成する場合はターゲットオプションに ``-t QE`` を指定します。VASPの場合は ``-t VASP``, OpenMX の場合は ``-t OpenMX``, AkaiKKR の場合は ``-t akaikkr`` を指定します。 + + .. code-block:: bash + + $ cif2x -t QE input.yaml material.cif + diff --git a/manual/v1.1.0/ja/html/_sources/cif2x/command/index.rst.txt b/manual/v1.1.0/ja/html/_sources/cif2x/command/index.rst.txt new file mode 100644 index 0000000..c414ad9 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/cif2x/command/index.rst.txt @@ -0,0 +1,57 @@ +コマンドリファレンス +================================================================ + +cif2x +---------------------------------------------------------------- + + 第一原理計算のための入力ファイルを生成する + +書式: + + .. code-block:: bash + + cif2x [-v][-q] -t target input_yaml material.cif + cif2x -h + cif2x --version + +説明: + + input_yaml に指定した入力パラメータファイルと material.cif に指定した結晶構造データを読み込み、第一原理計算プログラム用の入力ファイルを生成します。現在は Quantum ESPRESSO, VASP, OpenMX に対応しています。 + 以下のオプションを受け付けます。 + + - ``-v`` + + 実行時に表示されるメッセージを冗長にします。複数回指定すると冗長度が上がります。 + + - ``-q`` + + 実行時に表示されるメッセージの冗長度を下げます。 ``-v`` の効果を打ち消します。複数回の指定が可能です。 + + - ``-t`` *target* + + 対象となる第一原理計算プログラムを指定します。 *target* として指定可能な値は以下のとおりです。大文字小文字は区別しません。 + + - ``QE``, ``espresso``, ``quantum_espresso``: Quantum ESPRESSO向け入力ファイルを生成します。 + + - ``VASP``: VASP向け入力ファイルを生成します。 + + - ``OpenMX``: OpenMX向け入力ファイルを生成します。 + + - ``AkaiKKR``: AkaiKKR向け入力ファイルを生成します。 + + - ``input_yaml`` + + 入力パラメータファイルを指定します。形式は YAML format です。 + + - ``material.cif`` + + 結晶構造データファイルを指定します。形式は CIF の他、pymatgen で扱える形式のファイルを指定できます。 + + - ``-h`` + + ヘルプを表示します。 + + - ``--version`` + + バージョン情報を表示します。 + diff --git a/manual/v1.1.0/ja/html/_sources/cif2x/filespec/index.rst.txt b/manual/v1.1.0/ja/html/_sources/cif2x/filespec/index.rst.txt new file mode 100644 index 0000000..67557fe --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/cif2x/filespec/index.rst.txt @@ -0,0 +1,291 @@ +.. _sec-cif2x-fileformat: + +====================== + ファイルフォーマット +====================== + +入力パラメータファイル +====================== + +入力パラメータファイルでは、cif2x で第一原理計算入力ファイルを生成するための設定情報を YAML形式で記述します。本ファイルは以下の部分から構成されます。 + + 1. structureセクション: 結晶構造データの扱いについてのオプションを記述します。 + + 2. optionalセクション: 擬ポテンシャルファイルの指定や、YAMLの参照機能を利用する場合のシンボル定義を行います。 + + 3. tasksセクション: 入力ファイルの内容を記述します。 + + +structure +--------- + + ``use_ibrav`` (デフォルト値: ``false``) + + 結晶構造の入力に Quantum ESPRESSO の ``ibrav`` パラメータを利用します。 ``true`` の場合、格子のとり方を Quantum ESPRESSO の convention に合うように変換します。入力ファイルにはあわせて格子に関するパラメータ ``a``, ``b``, ``c``, ``cosab``, ``cosac``, ``cosbc`` が(必要に応じて)書き出されます。 + + ``tolerance`` (デフォルト値: 0.01) + + ``use_ibrav = true`` の場合に、再構成した Structure データと元データとの一致を評価する際の許容度を指定します。 + + ``supercell`` (デフォルト値: なし) + + supercell を設定する場合に supercell のサイズを [:math:`n_x`, :math:`n_y`, :math:`n_z`] で指定します。 + +optional +-------- +第一原理計算プログラムごとに必要な global な設定を行います。記述する内容は以下の各節に記述します。 + +tasks +----- +入力ファイルの内容を記述します。複数の入力ファイルに対応するため、 ``tasks`` には各入力ファイルごとのブロックからなるリスト形式をとります。各ブロックに記述する項目は以下のとおりです。 + + ``mode`` (Quantum ESPRESSO) + + 入力ファイルの計算内容を指定します。 + 現時点では Quantum ESPRESSO の pw.x 向けに ``scf`` と ``nscf`` に対応しています。対応していない mode については、 ``content`` の内容をそのまま出力します。 + + ``output_file`` (Quantum ESPRESSO) + + 出力ファイル名を指定します。 + + ``output_dir`` + + 出力先のディレクトリ名を指定します。デフォルト値はカレントディレクトリです。 + + ``content`` + + 出力内容を指定します。Quantum ESPRESSO の場合は ``namelist`` ブロックに namelist データ (``&system`` や ``&control`` など) を記述し、 ``K_POINTS`` 等の card データを個別のブロックとして記述します。card データはパラメータをとるものがあります。 + + ``template`` (Quantum ESPRESSO) + + ``template_dir`` (VASP) + + 出力内容のテンプレートファイルを指定します。指定がない場合はテンプレートを利用しません。 + このファイルの内容を ``content`` に追加します。同じデータがある場合は後者を優先します。 + +パラメータセット指定 +-------------------- +入力パラメータには値のリストや範囲を指定することができ、値の組み合わせごとに個別のディレクトリを作成して入力ファイルを生成します。パラメータセットの指定には特別な構文 ``${...}`` を用います。 +指定方法は次の通りです: + +- リスト ``${[ A, B, ... ]}`` + + パラメータセットを Python のリストとして列挙します。各項目はスカラー値やリストを指定できます。 + +- 範囲指定 ``${range(N)}``, ``${range(start, end, step)}`` + + パラメータの範囲を指定します。それぞれ 0〜N-1, start〜end を step 刻み (step を省略した場合は 1) です。 ``N``, ``start``, ``end``, ``step`` は int または float です。 + +Quantum ESPRESSO 向けパラメータ +=============================== + +``optional`` セクションおよび ``tasks`` セクションの ``content`` に記載する内容について、Quantum ESPRESSO 固有の内容を記述します。 +現時点では pw.x の ``scf`` および ``nscf`` に対応しています。 + +optionalセクション +------------------ + + ``pp_file`` + + 元素種と擬ポテンシャルを対応付けるCSV形式のインデックスファイルを指定します。 + ファイルの書式は、元素種、擬ポテンシャルファイルのタイプ、nexclude、orbitals です。例: + + .. code-block:: + + Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd + + 擬ポテンシャルファイルのファイル名は Fe.pbe-spn-rrkjus_psl.0.2.1.UPF に対応します。 + + ``cutoff_file`` + + 擬ポテンシャルファイルとカットオフを対応付けるCSV形式のインデックスファイルを指定します。 + ファイルの書式は、擬ポテンシャルファイル、ecutwfcの値、ecutrhoの値 です。 + + ``pseudo_dir`` + + 擬ポテンシャルファイルを格納するディレクトリ名を指定します。カットオフの値を擬ポテンシャルファイルから取得する場合に使用します。Quantum ESPRESSO の ``pseudo_dir`` パラメータとは独立に指定します。 + + +content +-------- + + **namelist** + + - ``structure`` セクションの ``use_ibrav`` パラメータに応じて、 ``&system`` の格子情報の指定が上書きされます。 + + - ``use_ibrav = false``: + ``ibrav`` は 0 にセットされます。また、格子パラメータに関する ``a``, ``b``, ``c``, ``cosab``, ``cosac``, ``cosbc``, ``celldm`` は削除されます。 + + - ``use_ibrav = true``: + ``ibrav`` は結晶構造データから取得された Bravais 格子のインデックスがセットされます。また、Structure データは基本格子のとり方など Quantum ESPRESSO の convention に合わせて再構成されます。 + + - ``nat`` (原子数) および ``ntyp`` (元素種の数)は結晶構造データから取得される値で上書きされます。 + + - カットオフ ``ecutwfc`` および ``ecutrho`` の情報は、パラメータの値が空欄の場合は擬ポテンシャルファイルから取得します。 + + **CELL_PARAMETERS** + + - ``structure`` セクションの ``use_ibrav`` パラメータが true の場合は出力されません。false の場合は格子ベクトルが出力されます。単位は angstrom です。 + + - 格子ベクトルの情報は結晶構造データから取得されます。 ``data`` フィールドに 3x3 の行列を直接指定した場合はその値が用いられます。 + + **ATOMIC_SPECIES** + + - 原子種・原子量・擬ポテンシャルファイル名のリストを出力します。 + + - 原子種の情報は結晶構造データから取得されます。擬ポテンシャルのファイル名は ``pp_list`` で指定するCSV形式のインデックスファイルを参照します。 + + - ``data`` フィールドに必要なデータを指定した場合はその値が用いられます。 + + **ATOMIC_POSITIONS** + + - 原子種と原子座標(fractional coordinate)のリストを出力します。 + + - ``ignore_species`` に原子種または原子種のリストを指定した場合、その原子種については ``if_pos`` の値が 0 にセットされます。MDや構造最適化の際に使われます。 + + - ``data`` フィールドに必要なデータを指定した場合はその値が用いられます。 + + **K_POINTS** + + - k点の情報を出力します。 ``option`` に出力タイプを指定します。 + + - ``gamma``: :math:`\Gamma` 点を用います。 + + - ``crystal``: メッシュ状の k点のリストを出力します。メッシュの指定は ``grid`` パラメータまたは ``vol_density`` や ``k_resolution`` から導出される値が用いられます。 + + - ``automatic``: k点のメッシュを指定します。メッシュの指定は ``grid`` パラメータまたは ``vol_density`` や ``k_resolution`` から導出される値が用いられます。 シフトの指定は ``kshifts`` パラメータを参照します。 + + - メッシュの指定は以下の順序で決定されます。 + + - ``grid`` パラメータの指定。grid の値は :math:`n_x, n_y, n_z` の配列またはスカラー値 :math:`n` です。後者の場合は :math:`n_x = n_y = n_z = n` と仮定します。 + - ``vol_density`` パラメータから自動導出。 + - ``k_resolution`` パラメータから自動導出。``k_resolution`` のデフォルトは 0.15 です。 + + - ``data`` フィールドに必要なデータを指定した場合はその値が用いられます。 + + +VASP 向けパラメータ +=============================== + +``optional`` セクションおよび ``tasks`` セクションの ``content`` に記載する内容について、VASP 固有の内容を記述します。 + +optional +-------- + +擬ポテンシャルのタイプや格納場所を指定します。 + +pymatgen では、擬ポテンシャルファイルを +``PMG_VASP_PSP_DIR``/*functional*/POTCAR. *element* (.gz) または +``PMG_VASP_PSP_DIR``/*functional*/ *element* /POTCAR から取得します。 +``PMG_VASP_PSP_DIR`` はディレクトリの指定で、設定ファイル ``~/.config/.pmgrc.yaml`` に記載するか、同名の環境変数に指定します。また、 *functional* は擬ポテンシャルのタイプで、 ``POT_GGA_PAW_PBE`` や ``POT_LDA_PAW`` などが決められています。 + + ``pseudo_functional`` + + 擬ポテンシャルのタイプを指定します。タイプの指定と上記の *functional* の対応は pymatgen 内のテーブルに定義され、 ``PBE`` → ``POT_GGA_PAW_PBE``,  ``LDA`` → ``POT_LDA_PAW`` などのようになっています。 + +以下の ``pseudo_dir`` を指定した場合は pymatgen の流儀を無視して擬ポテンシャルの格納ディレクトリを探します。 + + ``psuedo_dir`` + + 擬ポテンシャルの格納ディレクトリを指定します。擬ポテンシャルファイルのファイル名は ``pseudo_dir``/POTCAR. *element* (.gz) または ``pseudo_dir``/*element*/POTCAR です。 + + +tasks +----- + +テンプレートファイルは、 ``template_dir`` で指定するディレクトリ内に ``INCAR``, ``KPOINTS``, ``POSCAR``, ``POTCAR`` ファイルを配置します。ファイルがない項目は無視されます。 + +content +------- + + **incar** + + - INCAR ファイルに記述するパラメータを列挙します。 + + **kpoints** + + - ``type`` + + KPOINTS の指定方法を記述します。以下の値に対応しています。タイプによりパラメータが指定可能なものがあります。詳細は pymatgen.io.vasp のマニュアルを参照してください。 + + - ``automatic`` + + parameter: ``grid`` + + - ``gamma_automatic`` + + parameter: ``grid``, ``shift`` + + - ``monkhorst_automatic`` + + parameter: ``grid``, ``shift`` + + - ``automatic_density`` + + parameter: ``kppa``, ``force_gamma`` + + - ``automatic_gamma_density`` + + parameter: ``grid_density`` + + - ``automatic_density_by_vol`` + + parameter: ``grid_density``, ``force_gamma`` + + - ``automatic_density_by_lengths`` + + parameter: ``length_density``, ``force_gamma`` + + - ``automatic_linemode`` + + parameter: ``division``, ``path_type`` (HighSymmKpath の path_type に対応) + + +OpenMX 向けパラメータ +=============================== + +``optional`` セクションおよび ``tasks`` セクションの ``content`` に記載する内容について、OpenMX 固有の内容を記述します。 + +optional +-------- + + ``data_path`` + + 擬原子軌道および擬ポテンシャルのファイルを格納するディレクトリを指定します。入力ファイルの ``DATA.PATH`` パラメータに対応します。 + +content +-------- + + ``precision`` + + 擬原子軌道を OpenMXマニュアル 10.6 章の Table 1, 2 にしたがって選択します。 ``quick``, ``standard``, ``precise`` のいずれかの値を取ります。デフォルト値は ``quick`` です。 + +AkaiKKR 向けパラメータ +=============================== + +``optional`` セクションおよび ``tasks`` セクションの ``content`` に記載する内容について、AkaiKKR 固有の内容を記述します。 + +optional +-------- + + ``workdir`` + + 一時ファイルの出力先を指定します。指定しない場合は ``/tmp`` または ``TMPDIR`` 環境変数の値を利用します。 + + +content +-------- + +``content`` には AkaiKKR の入力パラメータの内容を記述します。指定のない項目は空欄が出力され、AkaiKKR内部のデフォルト値が使われます。 +以下のパラメータは結晶構造データから決まる値で置き換えられます。 + +- ``brvtyp``: + ただし、 ``brvtyp`` に ``aux`` (を含む)値が指定されている場合は上書きされません。 + +- 格子パラメータ: ``a``, ``c/a``, ``b/a``, ``alpha``, ``beta``, ``gamma``, ``r1``, ``r2``, ``r3`` + +- タイプ情報: ``ntyp``, ``type``, ``ncmp``, ``rmt``, ``field``, ``mxl``, ``anclr``, ``conc`` + +- 元素種の情報: ``natm``, ``atmicx``, ``atmtyp`` + +なお、 ``rmt`` と ``field`` の値は、入力パラメータファイル内で ``ntyp`` 個の要素からなるリストとして指定されている場合のみ、入力パラメータファイルの値が使われます。 diff --git a/manual/v1.1.0/ja/html/_sources/cif2x/index.rst.txt b/manual/v1.1.0/ja/html/_sources/cif2x/index.rst.txt new file mode 100644 index 0000000..008f70a --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/cif2x/index.rst.txt @@ -0,0 +1,16 @@ +**************************************************************** +第一原理計算入力ファイル生成ツール (cif2x) +**************************************************************** + + +.. toctree:: + :maxdepth: 2 + :numbered: 2 + + about/index + basic-usage + tutorial/index + command/index + filespec/index + appendix/index + ../getcif/index diff --git a/manual/v1.1.0/ja/html/_sources/cif2x/tutorial/index.rst.txt b/manual/v1.1.0/ja/html/_sources/cif2x/tutorial/index.rst.txt new file mode 100644 index 0000000..6a20ee7 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/cif2x/tutorial/index.rst.txt @@ -0,0 +1,65 @@ +.. _sec-cif2x-tutorial: + +チュートリアル +================================================================ + +第一原理計算入力ファイル生成ツール cif2x を使うには、入力パラメータファイルと結晶構造データおよび擬ポテンシャルファイルを用意した後、プログラム cif2x を実行します。現在は Quantum ESPRESSO, VASP, OpenMX, AkaiKKR の入力ファイル生成に対応しています。以下では、 ``docs/tutorial/cif2x`` ディレクトリにある Quantum ESPRESSO 向けサンプルを例にチュートリアルを実施します。 + +入力パラメータファイルを作成する +---------------------------------------------------------------- + +入力パラメータファイルには、第一原理計算プログラムに与える入力ファイルの内容を記述します。 + +以下に入力パラメータファイルのサンプルを記載します。このファイルは YAML形式のテキストファイルで、結晶構造データに対するオプションの指定や、出力する第一原理計算入力ファイルの内容を記述します。仕様の詳細については :ref:`ファイルフォーマット ` の章を参照してください。 + +YAMLフォーマットでは、 ``keyword: value`` の辞書形式でパラメータを記述します。 ``value`` には数値や文字列などのスカラー値や、複数の値を ``[ ]`` または箇条書きの形式で列挙するリスト型、または辞書型を入れ子にすることができます。 + +.. literalinclude:: ../../../../tutorial/cif2x/input.yaml + :language: yaml + + +入力パラメータファイルは ``structure``, ``optional``, ``tasks`` のブロックから構成されます。 +``structure`` は結晶構造データに関するオプションを指定します。 +``optional`` は擬ポテンシャルに関する global な設定などを行います。 + +``tasks`` は出力する第一原理計算入力ファイルの内容を指定します。一連の計算に対応して複数のファイルを生成できるよう、tasks は配列の値を取ります。 +各出力について、計算内容は ``mode`` パラメータで指定します。SCF計算の ``scf`` や NSCF計算の ``nscf`` に対応するほか、一般的な出力を行う任意の出力モードを指定できます。 +ファイルは ``output_dir`` および ``output_file`` で指定するファイルに書き出されます。 + +出力内容は ``content`` に記載します。 +Quantum ESPRESSO の入力ファイルは、 ``&keyword`` で始まる Fortran90 の namelist 形式と、 ``K_POINTS`` などのキーワードで始まり空行で分割される cards と呼ばれるブロックからなります。 ``content`` には namelist と cards を入れ子の辞書形式で指定します。 +いくつかの例外を除いて、指定された内容が基本的にはそのまま入力ファイルに書き出されます。値が空欄のキーワードは、結晶構造データなどから求めた値が代入されます。 + +また、template として入力ファイルの雛形を指定することもできます。 ``template`` に指定したファイルの内容と ``content`` のデータを合わせたものを入力データとして扱います。同じキーワードのデータが存在する場合は ``content`` の指定が優先されます。従って、既存の入力ファイルを元に必要な箇所を入力パラメータファイルで上書きする使い方が可能です。上記の例では次のファイル(``scf.in_tmpl``)を template として取り込み、カットオフと CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINT の箇所を結晶構造等から決めます。 ``ecutwfc`` と ``ecutrho`` が空欄で上書きされていることに留意してください。 + +.. literalinclude:: ../../../../tutorial/cif2x/scf.in_tmpl + :language: fortran + + +第一原理計算入力ファイルを生成する +---------------------------------------------------------------- + +入力パラメータファイル(input.yaml)と結晶構造データ(Co3SnS2_nosym.cif)を入力として cif2x を実行します。 + +.. code-block:: bash + + $ cif2x -t QE input.yaml Co3SnS2_nosym.cif + +予め必要な擬ポテンシャルのファイルを ``./pseudo`` ディレクトリに配置し、擬ポテンシャルのインデックスファイルを ``./pseudo/pp_psl_pbe_rrkjus.csv`` に作成しておきます。 + +``cif2x`` を実行すると Quantum ESPRESSO用の入力ファイルが生成され出力されます。出力先は入力パラメータファイル内のパラメータで指定するディレクトリ(``output_dir``)およびファイル(``output_file``)です。この例では ``./scf/scf.in`` に SCF計算用の入力ファイルが書き出されます。 + +パラメータセットを指定する +---------------------------------------------------------------- + +入力パラメータ内の値をいくつか変えながら一連の入力ファイルを生成したいことがあります。例えばカットオフの値やk点の数を変えて収束性を評価するなどの場合です。入力パラメータには値のリストや範囲を指定することができ、値の組み合わせごとに個別のディレクトリを作成して入力ファイルを生成します。 +パラメータセットの指定は特別な構文 ``${...}`` を用います。 + +.. code-block:: yaml + + content: + K_POINTS: + option: automatic + grid: ${ [ [4,4,4], [8,8,8], [12,12,12] ] } + +例えば上記のように ``K_POINTS`` を指定すると、 ``grid`` の値が ``[4,4,4]``, ``[8,8,8]``, ``[12,12,12]`` の入力ファイルがそれぞれ ``4x4x4/``, ``8x8x8/``, ``12x12x12/`` サブディレクトリ内に作成されます。 diff --git a/manual/v1.1.0/ja/html/_sources/getcif/about/index.rst.txt b/manual/v1.1.0/ja/html/_sources/getcif/about/index.rst.txt new file mode 100644 index 0000000..49a517f --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/getcif/about/index.rst.txt @@ -0,0 +1,5 @@ +**************************************************************** +概要 +**************************************************************** + +getcifは物質材料データベースから結晶構造データ等を取得するツールです。現在は Materials Project からのデータ取得に対応しています。物質の組成や対称性、バンドギャップなどの物性値をもとにデータベースを検索し、データを取得することができます。 diff --git a/manual/v1.1.0/ja/html/_sources/getcif/appendix/index.rst.txt b/manual/v1.1.0/ja/html/_sources/getcif/appendix/index.rst.txt new file mode 100644 index 0000000..fc235ea --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/getcif/appendix/index.rst.txt @@ -0,0 +1,322 @@ +================================================================ +パラメータリスト +================================================================ + +検索条件 (properties) +---------------------------------------------------------------- + +properties に指定できる項目と、その項目がどのような値を取るかを以下にまとめます。 + +Materials Project API のクライアントアプリケーションの一つとして mp-api パッケージが Materials Project から公開されており、getcif はこのライブラリを利用してデータベースへの接続を行います。 +以下は MPRester クラスの materials.summary.search メソッドのパラメータに対応します。 +(以下の表は materials.summary.search のソースコードのコメントから転記しました。) + +値の型の表記は次のとおりです。 + +- ``str``: 文字列型 +- ``List[str]``: 文字列型のリスト +- ``str | List[str]``: 単一の文字列、または、文字列型のリスト +- ``int``: 整数型 +- ``bool``: 真偽値 (true または false) +- ``Tuple[float,float]``: 実数値 2つからなる組 (リスト) +- ``Tuple[int,int]``: 整数値 2つからなる組 (リスト) +- ``CrystalSystem``: 結晶のタイプを表す文字列。Triclinic, Monoclinic, Orthorhombic, Tetragonal, Trigonal, Hexagonal, Cubic のいずれか。 +- ``List[HasProps]``: 特性値のタイプを表す文字列のリスト。特性値は emmet.core.summary に定義されている。以下のいずれかの値を取る。 + + absorption, + bandstructure, + charge_density, + chemenv, + dielectric, + dos, + elasticity, + electronic_structure, + eos, + grain_boundaries, + insertion_electrodes, + magnetism, + materials, + oxi_states, + phonon, + piezoelectric, + provenance, + substrates, + surface_properties, + thermo, + xas + +- ``Ordering``: 磁気秩序を表す文字列。FM, AFM, FiM, NM のいずれか。 + +値のリストは、YAML形式の箇条書きおよび ``[ ... ]`` にカンマ区切りで記述するほか、空白区切りで列挙する記法も可能です。 + +``Tuple`` で表される型は値の範囲 (min, max) の指定に使われます。値のリストとして記述するほか、空白区切りで ``min max`` のように記述することもできます。また、以下の表記も可能です。 + + ``<= max`` : max 以下 + + ``< max`` : max より小さい + + ``>= min`` : min 以上 + + ``> min`` : min より大きい + + ``min ~ max`` : min 以上 max 以下 + +.. _getcif-cond-table: + +.. list-table:: 検索条件のキーワード + :widths: 30 20 60 + :header-rows: 1 + + * - Keyword + - Type + - Description + * - band_gap + - Tuple[float,float] + - Minimum and maximum band gap in eV to consider. + * - chemsys + - str | List[str] + - A chemical system, list of chemical systems (e.g., Li-Fe-O, Si-\*, [Si-O, Li-Fe-P]), or single formula (e.g., Fe2O3, Si\*). + * - crystal_system + - CrystalSystem + - Crystal system of material. + * - density + - Tuple[float,float] + - Minimum and maximum density to consider. + * - deprecated + - bool + - Whether the material is tagged as deprecated. + * - e_electronic + - Tuple[float,float] + - Minimum and maximum electronic dielectric constant to consider. + * - e_ionic + - Tuple[float,float] + - Minimum and maximum ionic dielectric constant to consider. + * - e_total + - Tuple[float,float] + - Minimum and maximum total dielectric constant to consider. + * - efermi + - Tuple[float,float] + - Minimum and maximum fermi energy in eV to consider. + * - elastic_anisotropy + - Tuple[float,float] + - Minimum and maximum value to consider for the elastic anisotropy. + * - elements + - List[str] + - A list of elements. + * - energy_above_hull + - Tuple[int,int] + - Minimum and maximum energy above the hull in eV/atom to consider. + * - equilibrium_reaction_energy + - Tuple[float,float] + - Minimum and maximum equilibrium reaction energy in eV/atom to consider. + * - exclude_elements + - List[str] + - List of elements to exclude. + * - formation_energy + - Tuple[int,int] + - Minimum and maximum formation energy in eV/atom to consider. + * - formula + - str | List[str] + - A formula including anonymized formula or wild cards (e.g., Fe2O3, ABO3, Si\*). A list of chemical formulas can also be passed (e.g., [Fe2O3, ABO3]). + * - g_reuss + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Reuss average of the shear modulus. + * - g_voigt + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt average of the shear modulus. + * - g_vrh + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the shear modulus. + * - has_props + - List[HasProps] + - The calculated properties available for the material. + * - has_reconstructed + - bool + - Whether the entry has any reconstructed surfaces. + * - is_gap_direct + - bool + - Whether the material has a direct band gap. + * - is_metal + - bool + - Whether the material is considered a metal. + * - is_stable + - bool + - Whether the material lies on the convex energy hull. + * - k_reuss + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Reuss average of the bulk modulus. + * - k_voigt + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt average of the bulk modulus. + * - k_vrh + - Tuple[float,float] + - Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the bulk modulus. + * - magnetic_ordering + - Ordering + - Magnetic ordering of the material. + * - material_ids + - List[str] + - List of Materials Project IDs to return data for. + * - n + - Tuple[float,float] + - Minimum and maximum refractive index to consider. + * - num_elements + - Tuple[int,int] + - Minimum and maximum number of elements to consider. + * - num_sites + - Tuple[int,int] + - Minimum and maximum number of sites to consider. + * - num_magnetic_sites + - Tuple[int,int] + - Minimum and maximum number of magnetic sites to consider. + * - num_unique_magnetic_sites + - Tuple[int,int] + - Minimum and maximum number of unique magnetic sites to consider. + * - piezoelectric_modulus + - Tuple[float,float] + - Minimum and maximum piezoelectric modulus to consider. + * - poisson_ratio + - Tuple[float,float] + - Minimum and maximum value to consider for Poisson's ratio. + * - possible_species + - List[str] + - List of element symbols appended with oxidation states. (e.g. Cr2+,O2-) + * - shape_factor + - Tuple[float,float] + - Minimum and maximum shape factor values to consider. + * - spacegroup_number + - int + - Space group number of material. + * - spacegroup_symbol + - str + - Space group symbol of the material in international short symbol notation. + * - surface_energy_anisotropy + - Tuple[float,float] + - Minimum and maximum surface energy anisotropy values to consider. + * - theoretical + - bool + - Whether the material is theoretical. + * - total_energy + - Tuple[int,int] + - Minimum and maximum corrected total energy in eV/atom to consider. + * - total_magnetization + - Tuple[float,float] + - Minimum and maximum total magnetization values to consider. + * - total_magnetization_normalized_formula_units + - Tuple[float,float] + - Minimum and maximum total magnetization values normalized by formula units to consider. + * - total_magnetization_normalized_vol + - Tuple[float,float] + - Minimum and maximum total magnetization values normalized by volume to consider. + * - uncorrected_energy + - Tuple[int,int] + - Minimum and maximum uncorrected total energy in eV/atom to consider. + * - volume + - Tuple[float,float] + - Minimum and maximum volume to consider. + * - weighted_surface_energy + - Tuple[float,float] + - Minimum and maximum weighted surface energy in J/:math:`m^2` to consider. + * - weighted_work_function + - Tuple[float,float] + - Minimum and maximum weighted work function in eV to consider. + +.. +.. .. list-table:: Unsupported search criteria for the properties section +.. :widths: 30 20 60 +.. :header-rows: 1 +.. +.. * - Keyword +.. - Type +.. - Description +.. * - num_chunks +.. - int +.. - Maximum number of chunks of data to yield. None will yield all possible. +.. * - chunk_size +.. - int +.. - Number of data entries per chunk. +.. * - all_fields +.. - bool +.. - Whether to return all fields in the document. Defaults to True. +.. * - fields +.. - List[str] +.. - List of fields in SearchDoc to return data for. Default is material_id if all_fields is False. +.. + + +出力項目 (fields) +---------------------------------------------------------------- + +fields に指定できる項目を以下に列挙します。 + +.. code:: text + + band_gap + bandstructure + builder_meta + bulk_modulus + cbm + chemsys + composition + composition_reduced + database_IDs + decomposes_to + density + density_atomic + deprecated + deprecation_reasons + dos + dos_energy_down + dos_energy_up + e_electronic + e_ij_max + e_ionic + e_total + efermi + elements + energy_above_hull + energy_per_atom + equilibrium_reaction_energy_per_atom + es_source_calc_id + formation_energy_per_atom + formula_anonymous + formula_pretty + grain_boundaries + has_props + has_reconstructed + homogeneous_poisson + is_gap_direct + is_magnetic + is_metal + is_stable + last_updated + material_id + n + nelements + nsites + num_magnetic_sites + num_unique_magnetic_sites + ordering + origins + possible_species + property_name + shape_factor + shear_modulus + structure + surface_anisotropy + symmetry + task_ids + theoretical + total_magnetization + total_magnetization_normalized_formula_units + total_magnetization_normalized_vol + types_of_magnetic_species + uncorrected_energy_per_atom + universal_anisotropy + vbm + volume + warnings + weighted_surface_energy + weighted_surface_energy_EV_PER_ANG2 + weighted_work_function + xas diff --git a/manual/v1.1.0/ja/html/_sources/getcif/command/index.rst.txt b/manual/v1.1.0/ja/html/_sources/getcif/command/index.rst.txt new file mode 100644 index 0000000..4077042 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/getcif/command/index.rst.txt @@ -0,0 +1,45 @@ +コマンドリファレンス +================================================================ + +getcif +---------------------------------------------------------------- + + 結晶構造データをデータベースから取得する + +書式: + + .. code-block:: bash + + getcif [-v][-q] [--dry-run] input_yaml + getcif -h + getcif --version + +説明: + + input_yaml に指定した入力パラメータファイルを読み込み、データベースを検索して結晶構造等のデータを取得します。 + 以下のオプションを受け付けます。 + + - ``-v`` + + 実行時に表示されるメッセージを冗長にします。複数回指定すると冗長度が上がります。 + + - ``-q`` + + 実行時に表示されるメッセージの冗長度を下げます。 ``-v`` の効果を打ち消します。複数回の指定が可能です。 + + - ``--dry-run`` + + 検索パラメータを出力し、データベースへの接続をせずに終了します。検索条件を確認することができます。入力パラメータファイルの ``dry_run`` の指定より優先します。 + + - ``input_yaml`` + + 入力パラメータファイルを指定します。ファイルフォーマットはYAML形式です。 + + - ``-h``, ``--help`` + + ヘルプを表示します。指定可能な検索条件 (properties) と取得データ (fields) の一覧も表示されます。 + + - ``--version`` + + バージョン情報を表示します。 + diff --git a/manual/v1.1.0/ja/html/_sources/getcif/filespec/index.rst.txt b/manual/v1.1.0/ja/html/_sources/getcif/filespec/index.rst.txt new file mode 100644 index 0000000..3313c51 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/getcif/filespec/index.rst.txt @@ -0,0 +1,126 @@ +.. _sec-getcif-fileformat: + +====================== +ファイルフォーマット +====================== + +入力パラメータファイル +====================== + +入力パラメータファイルでは、getcif で Materials Project の物質材料データベースから結晶構造等のデータを取得するための設定情報を YAML形式で記述します。本ファイルは以下の部分から構成されます。 + + #. databaseセクション: 接続するデータベースについての情報を記述します。 + + #. optionセクション: 出力先のディレクトリや実行条件などを記述します。 + + #. propertiesセクション: 検索条件を記述します。 + + #. fieldsセクション: 取得データの種類を記述します。 + +database +-------------------------------- + + ``target`` + + 接続先のデータベースを指定します。現在はこの項目は無視されます。 + + ``api_key_file`` (デフォルト値: ``materials_project.key``) + + データベースに接続する際の APIキーを格納したファイルのファイル名を指定します。ファイル名の拡張子は ``.key`` とします。 + ファイルが存在しない、または有効なAPIキーが見つからない場合は、環境変数 ``MP_API_KEY`` または pymatgen の設定ファイル ``~/.config/.pmgrc`` の ``PMG_MAPI_KEY`` からAPIキーを取得します。 + + APIキーファイルはテキスト形式です。 ``#`` から始まる行はコメントとして扱われます。前後の空白は無視されます。複数行からなる場合は最初の有効な行からキーを取得します。 + + +option +-------------------------------- + + ``output_dir`` (デフォルト値: ``""``) + + 取得データを格納するディレクトリを指定します。データは ``output_dir`` 以下に、material ID をディレクトリ名としたディレクトリに出力されます。指定がない場合はカレントディレクトリです。 + + ``dry_run`` (デフォルト値: ``False``) + + データベースへの接続は行わず、検索条件を出力して終了します。検索内容の確認を行うことができます。 + + ``symprec`` (デフォルト値: 0.1) + + 結晶構造データをCIFファイルに出力する際の対称性を判定する許容精度を指定します。デフォルトは 0.1 です。 ``symprec`` に 0.0 を指定した場合は ``symprec`` を指定しないものとして扱い、対称性を考慮しないCIFファイルが生成されます。 + + ``symprec`` は、結晶構造における対称性を判定する際の許容精度(tolerance)を指定するパラメータです。対称性の計算においては、原子位置の微細なずれや数値計算の精度の影響を考慮する必要があります。``symprec`` はこのずれの許容範囲を制御し、対称操作が適用されるかどうかを決定する際の閾値として機能します。 + + ``symprec`` を小さく設定する(例: 0.01)と、対称性の判定がより厳密になり、結晶構造のわずかなずれでも対称操作が適用されない可能性が高まります。その結果、より低い対称性の空間群が得られることがあります。逆に、``symprec`` を大きく設定する(例: 1.0)と、対称性の判定が緩やかになり、わずかなずれが無視され、より高い対称性が認められることがあります。 + + なお、 ``fields`` セクションで ``symmetry`` を指定すると、Materials Project でデフォルトの ``symprec=0.1`` で判定された対称性の情報を取得し、テキストファイル(symmetry)に出力します。 + + +properties +-------------------------------- +検索条件を記述します。 +元素組成や結晶の対称性、物性値の範囲などの項目を、「項目名: 値」の形式で指定します。これらの条件は AND で扱われます。 +指定できる項目は Materials Project の API に定義されていますが、指定方法は mp-api ライブラリの ``materials.summary.search`` のパラメータに準拠します。項目のリストは Appendix を参照してください。また、 ``getcif --help`` で一覧を見ることができます。 + +値の指定方法は次のとおりです。YAML形式に準拠しますが、一部に簡便な記法を用意しています。 + +- 数値、文字列 + + そのまま記述します。 + +- 真偽値 + + true または false を記述します + +- 数値や文字列のリスト + + YAML形式の箇条書きおよび ``[ ... ]`` にカンマ区切りで記述するほか、空白区切りで列挙する記法も可能です。例: + + .. code:: yaml + + element: Sr Ti + +- 数値の範囲 + + 上限・下限のリストとして ``[ min, max ]`` のように記述するほか、空白区切りで ``min max`` のように記述することもできます。また、以下の記法も可能です。 + + ``<= max`` + max 以下 + + ``< max`` + max より小さい (実数の場合は ``<=`` と同等。整数の場合は ``<= max-1`` として扱われる) + + ``>= min`` + min 以上 + + ``> min`` + min より大きい (実数の場合は ``>=`` と同等。整数の場合は ``>= min+1`` として扱われる) + + ``min ~ max`` + min 以上 max 以下 + + 注記: + + - 記号と数値の間は空白を置きます。 + + - YAML記法では ``>`` は特殊文字として扱われるため、 ``>= min``, ``> min`` はそれぞれ ``">= min"``, ``"> min"`` のように ``" "`` で囲む必要があります。 + + - リストで記述する場合、 ``<= max``, ``>= min`` はそれぞれ ``[ None, max ]``, ``[ min, None ]`` のように表記します。 + +- ワイルドカード + + ``formula`` には元素種にワイルドカード ``*`` を指定できます。その場合は値を ``" "`` で囲みます。例: + .. code:: yaml + + formula: "**O3" + + :math:`ABO_3` 系の物質を指定します。 + +fields +-------------------------------- +取得するデータの種類を記述します。 +項目のリストを YAML形式で列挙するほか、空白区切りの文字列として記述することもできます。文字列は YAML記法 ``|`` を用いて複数行で書くこともできます。 +指定できる項目は Materials Project の API の ``fields`` パラメータに準拠します。項目のリストは Appendix を参照してください。また、 ``getcif --help`` で一覧を見ることができます。 + +``material_id`` と ``formula_pretty`` は暗黙的に取得します。 + +取得したデータは、 ``option`` セクションの ``output_dir`` で指定したディレクトリ内に、物質ごとに ``material_id`` をディレクトリ名とするディレクトリを作成し、その中に格納されます。 +項目ごとに、項目名をファイル名としたファイルに保存されます。但し、結晶構造データ (``structure``) は ``structure.cif`` というファイル名で CIF形式で書き出されます。 diff --git a/manual/v1.1.0/ja/html/_sources/getcif/index.rst.txt b/manual/v1.1.0/ja/html/_sources/getcif/index.rst.txt new file mode 100644 index 0000000..550bc75 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/getcif/index.rst.txt @@ -0,0 +1,13 @@ +**************************************************************** +CIFデータ取得ツール (getcif) +**************************************************************** + +.. toctree:: + :maxdepth: 2 + :numbered: 2 + + about/index + tutorial/index + command/index + filespec/index + appendix/index diff --git a/manual/v1.1.0/ja/html/_sources/getcif/tutorial/index.rst.txt b/manual/v1.1.0/ja/html/_sources/getcif/tutorial/index.rst.txt new file mode 100644 index 0000000..514c785 --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/getcif/tutorial/index.rst.txt @@ -0,0 +1,109 @@ +.. _sec-getcif-tutorial: + +チュートリアル +================================================================ + +結晶構造などのデータを物質材料データベースから取得するツール getcif を使うには、検索条件と取得するデータを記述した入力パラメータファイルを作成し、プログラム getcif を実行します。現在は Materials Project が公開しているデータベースに対応しています。以下では ``docs/tutorial/getcif`` ディレクトリにある ABO3 系の物質を検索・取得するサンプルを例にチュートリアルを実施します。 + +APIキーを取得する +---------------------------------------------------------------- + +Materials Project のデータベースをプログラムから検索するには、あらかじめ Materials Project にユーザ登録し、APIキーを取得する必要があります。 +Materials Project の公式サイト `https://next-gen.materialsproject.org `_ にアクセスし、Login します。APIキーはユーザ登録時に自動的生成され、ユーザのダッシュボードから確認できます。取得した APIキーは安全に保管し、他人に知られないようにしましょう。 + +APIキーを getcif にセットするには、以下のいずれかを実行します。 + + (a) pymatgen の設定ファイルに登録する + + .. code:: bash + + $ pmg config --add PMG_MAPI_KEY + + を実行するか、設定ファイル ``~/.config/.pmgrc`` に + + .. code:: bash + + PMG_MAPI_KEY: + + を書き込みます。 + + (b) 環境変数にセットする + + .. code:: bash + + $ MP_API_KEY="" + $ export MP_API_KEY + + を実行します。 + + (c) ファイルに格納する + + APIキーをファイルに書き込み、getcif を実行するディレクトリに配置します。ファイル名のデフォルトは ``materials_project.key`` です。異なるファイル名を使う場合は、入力パラメータファイル (input.yaml) の api_key_file にファイル名を指定します。ファイル名は ``.key`` の拡張子が必要です。 + + .. code:: yaml + + database: + api_key_file: materials_project.key + + 註: バージョン管理ツールを使っている場合は、 ``.key`` の拡張子を持つファイルを管理から除外するとよいでしょう。(Git の場合は ``.gitignore`` ファイルに ``*.key`` を追加します。) + + +入力パラメータファイルを作成する +---------------------------------------------------------------- + +入力パラメータファイルにはデータベース検索および出力についての設定を記述します。 + +以下に入力パラメータファイルのサンプルを記載します。このファイルは YAML形式のテキストファイルで、データベースへの接続に必要な情報や、検索条件、取得するデータの種類などの内容を記述します。仕様の詳細については :ref:`ファイルフォーマット ` の章を参照してください。 + +YAMLフォーマットでは、 ``keyword: value`` の辞書形式でパラメータを記述します。 ``value`` には数値や文字列などのスカラー値や、複数の値を ``[ ]`` または箇条書きの形式で列挙するリスト型、または辞書型を入れ子にすることができます。検索条件と出力項目については、特別な記法として、リスト型を括弧を使わず空白区切りで列挙する形式でも書くことができます。 + +.. literalinclude:: ../../../../tutorial/getcif/input.yaml + :language: yaml + +入力パラメータファイルは ``database``, ``option``, ``properties``, ``fields`` のブロックからなります。 +``database`` にはデータベース接続に関する設定を記述します。例では ``target`` に Materials Project を指定していますが、現時点ではこの項目は無視されます。その他、 ``api_key`` に APIキーを指定できます。APIキーは pymatgen の設定ファイルや環境変数にセットすることもできます。例では後者の方式を仮定しています。 + +``option`` には実行時のオプションを記述します。 ``output_dir`` は取得したデータの格納先ディレクトリを指定します。省略時にはカレントディレクトリに書き出されます。 ``dry_run`` を ``true`` にセットすると、データベースへの接続はせず、検索条件を出力して終了します。 ``dry_run`` はコマンドラインオプションでも指定できます。 + +``properties`` は検索条件の指定を行います。検索条件を「項目: 値」の書式で列挙し、これらの条件は AND で扱われます。例では、バンドギャップが 1.0以下、安定な絶縁体で、組成式は ABO3 (A, B は任意の元素種)、空間群は ``Pm-3m`` という条件を指定しています。 ``band_gap`` には値の範囲を上限・下限の組で指定するほか、 ``< 1.0`` のような記法も使用できます。検索条件にどのような項目が指定できるかは Appendix を参照してください。 + +``fields`` には出力項目を列挙します。YAMLのリスト形式のほか、空白区切りで項目を列挙する書き方もできます。また、例に示したとおり、YAMLの記法を使って複数行で書くこともできます。 +``structure`` は結晶構造データで、取得したデータはCIF形式で出力されます。 ``band_gap`` はバンドギャップの数値、 ``symmetry`` は対称性の情報です。この他に、 ``material_id`` で Materials Project 内の物質データのインデックスと、 ``formula_pretty`` で組成式が暗黙的に取得されます。出力項目の一覧は Appendix を参照してください。また、getcif コマンドのヘルプメッセージにも一覧が出力されます。 + + +データを取得する +---------------------------------------------------------------- + +入力パラメータファイル(input.yaml)を引数として getcif を実行します。 + +.. code-block:: bash + + $ getcif input.yaml + +``getcif`` を実行すると Materials Project のデータベースに接続し、検索条件に合致するデータを取得します。標準出力には、以下のように、物質の material ID と組成式、データ項目のサマリーが出力されます。 + +.. literalinclude:: ../../../../tutorial/getcif/output_log.txt + :language: text + +取得したデータは、 ``output_dir`` で指定した result ディレクトリ内に物質ごとに格納されます。この例では、 result 以下に mp-3163 から mp-977455 までの 7つのディレクトリが作成され、各ディレクトリには次のファイルが書き込まれます。 + + - band_gap + + バンドギャップの値 + + - formula + + 組成式 (formula_pretty に対応します) + + - structure.cif + + CIF形式の結晶構造データ + + - symmetry + + 対称性に関するデータ + +``getcif`` の実行に ``--dry-run`` オプションを付けると、以下のように検索条件を出力して終了します。データベースに実際に接続する前に検索項目を確認できます。 + +.. literalinclude:: ../../../../tutorial/getcif/output_dryrun.txt + :language: text diff --git a/manual/v1.1.0/ja/html/_sources/index.rst.txt b/manual/v1.1.0/ja/html/_sources/index.rst.txt new file mode 100644 index 0000000..0176a5c --- /dev/null +++ b/manual/v1.1.0/ja/html/_sources/index.rst.txt @@ -0,0 +1,20 @@ +.. HTP-tools documentation master file, created by + sphinx-quickstart on Fri Jun 30 11:02:31 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Cif2x Users Guide +===================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + cif2x/index + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/manual/v1.1.0/ja/html/_static/alabaster.css b/manual/v1.1.0/ja/html/_static/alabaster.css new file mode 100644 index 0000000..55f9cb1 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/alabaster.css @@ -0,0 +1,708 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar { + max-height: 100%; + overflow-y: auto; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 160px; +} + +div.sphinxsidebar .search > div { + display: table-cell; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Hide ugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/_static/basic.css b/manual/v1.1.0/ja/html/_static/basic.css new file mode 100644 index 0000000..e5179b7 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: inherit; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/_static/custom.css b/manual/v1.1.0/ja/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/manual/v1.1.0/ja/html/_static/doctools.js b/manual/v1.1.0/ja/html/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/manual/v1.1.0/ja/html/_static/documentation_options.js b/manual/v1.1.0/ja/html/_static/documentation_options.js new file mode 100644 index 0000000..f0550d2 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.1.0', + LANGUAGE: 'ja', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/_static/file.png b/manual/v1.1.0/ja/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/ja/html/_static/language_data.js b/manual/v1.1.0/ja/html/_static/language_data.js new file mode 100644 index 0000000..89083d9 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/language_data.js @@ -0,0 +1,26 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = []; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Dummy stemmer for languages without stemming rules. + */ +var Stemmer = function() { + this.stemWord = function(w) { + return w; + } +} + diff --git a/manual/v1.1.0/ja/html/_static/minus.png b/manual/v1.1.0/ja/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/ja/html/_static/plus.png b/manual/v1.1.0/ja/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/manual/v1.1.0/ja/html/_static/pygments.css b/manual/v1.1.0/ja/html/_static/pygments.css new file mode 100644 index 0000000..0d49244 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/_static/searchtools.js b/manual/v1.1.0/ja/html/_static/searchtools.js new file mode 100644 index 0000000..b08d58c --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/searchtools.js @@ -0,0 +1,620 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/manual/v1.1.0/ja/html/_static/sphinx_highlight.js b/manual/v1.1.0/ja/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/manual/v1.1.0/ja/html/_static/translations.js b/manual/v1.1.0/ja/html/_static/translations.js new file mode 100644 index 0000000..df5af81 --- /dev/null +++ b/manual/v1.1.0/ja/html/_static/translations.js @@ -0,0 +1,60 @@ +Documentation.addTranslations({ + "locale": "ja", + "messages": { + "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", + "© %(copyright_prefix)s %(copyright)s.": "", + ", in ": ", in ", + "About these documents": "\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3064\u3044\u3066", + "Automatically generated list of changes in version %(version)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9\uff08\u3053\u306e\u30ea\u30b9\u30c8\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff09", + "C API changes": "C API \u306b\u95a2\u3059\u308b\u5909\u66f4", + "Changes in Version %(version)s — %(docstitle)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9 — %(docstitle)s", + "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080", + "Complete Table of Contents": "\u7dcf\u5408\u76ee\u6b21", + "Contents": "\u30b3\u30f3\u30c6\u30f3\u30c4", + "Copyright": "\u8457\u4f5c\u6a29", + "Created using Sphinx %(sphinx_version)s.": "", + "Expand sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u5c55\u958b", + "Full index on one page": "\u7dcf\u7d22\u5f15", + "General Index": "\u7dcf\u5408\u7d22\u5f15", + "Global Module Index": "\u30e2\u30b8\u30e5\u30fc\u30eb\u7dcf\u7d22\u5f15", + "Go": "\u691c\u7d22", + "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059", + "Index": "\u7d22\u5f15", + "Index – %(key)s": "", + "Index pages by letter": "\u982d\u6587\u5b57\u5225\u7d22\u5f15", + "Indices and tables:": "\u7d22\u5f15\u3068\u8868\u4e00\u89a7:", + "Last updated on %(last_updated)s.": "\u6700\u7d42\u66f4\u65b0: %(last_updated)s", + "Library changes": "\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u95a2\u3059\u308b\u5909\u66f4", + "Navigation": "\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3", + "Next topic": "\u6b21\u306e\u30c8\u30d4\u30c3\u30af\u3078", + "Other changes": "\u305d\u306e\u4ed6\u306e\u5909\u66f4", + "Overview": "\u6982\u8981", + "Please activate JavaScript to enable the search\n functionality.": "\u691c\u7d22\u6a5f\u80fd\u3092\u4f7f\u3046\u306b\u306f JavaScript \u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "Preparing search...": "\u691c\u7d22\u3092\u6e96\u5099\u3057\u3066\u3044\u307e\u3059...", + "Previous topic": "\u524d\u306e\u30c8\u30d4\u30c3\u30af\u3078", + "Quick search": "\u30af\u30a4\u30c3\u30af\u691c\u7d22", + "Search": "\u691c\u7d22", + "Search Page": "\u691c\u7d22\u30da\u30fc\u30b8", + "Search Results": "\u691c\u7d22\u7d50\u679c", + "Search finished, found ${resultCount} page(s) matching the search query.": "", + "Search within %(docstitle)s": "%(docstitle)s \u5185\u3092\u691c\u7d22", + "Searching": "\u691c\u7d22\u4e2d", + "Searching for multiple words only shows matches that contain\n all words.": "\u8907\u6570\u306e\u5358\u8a9e\u3092\u691c\u7d22\u3059\u308b\u3068\u3001\u6b21\u3092\u542b\u3080\u4e00\u81f4\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u307e\u3059\n \u00a0\u00a0\u00a0 \u3059\u3079\u3066\u306e\u7528\u8a9e\u3002", + "Show Source": "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8868\u793a", + "Table of Contents": "\u76ee\u6b21", + "This Page": "\u3053\u306e\u30da\u30fc\u30b8", + "Welcome! This is": "Welcome! This is", + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u3057\u305f\u6587\u5b57\u5217\u306f\u3069\u306e\u6587\u66f8\u306b\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3059\u3079\u3066\u306e\u5358\u8a9e\u304c\u6b63\u78ba\u306b\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u3042\u308b\u3044\u306f\u3001\u5341\u5206\u306a\u30ab\u30c6\u30b4\u30ea\u30fc\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "all functions, classes, terms": "\u95a2\u6570\u3001\u30af\u30e9\u30b9\u304a\u3088\u3073\u7528\u8a9e\u7dcf\u89a7", + "can be huge": "\u5927\u304d\u3044\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u6ce8\u610f", + "last updated": "\u6700\u7d42\u66f4\u65b0", + "lists all sections and subsections": "\u7ae0\uff0f\u7bc0\u4e00\u89a7", + "next chapter": "\u6b21\u306e\u7ae0\u3078", + "previous chapter": "\u524d\u306e\u7ae0\u3078", + "quick access to all modules": "\u5168\u30e2\u30b8\u30e5\u30fc\u30eb\u65e9\u898b\u8868", + "search": "\u691c\u7d22", + "search this documentation": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22", + "the documentation for": "the documentation for" + }, + "plural_expr": "0" +}); \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/cif2x/about/index.html b/manual/v1.1.0/ja/html/cif2x/about/index.html new file mode 100644 index 0000000..9115c4f --- /dev/null +++ b/manual/v1.1.0/ja/html/cif2x/about/index.html @@ -0,0 +1,190 @@ + + + + + + + + 1. 概要 — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

1. 概要

+
+

1.1. cif2xとは?

+

近年、機械学習を活用した物性予測や物質設計(マテリアルズインフォマティクス)が注目されています。 +機械学習の精度は、適切な教師データの準備に大きく依存しています。 +そのため、迅速に教師データを生成するためのツールや環境の整備は、 +マテリアルズインフォマティクスの研究進展に大きく貢献すると期待されます。

+

cif2xは、cifファイルから第一原理計算用の入力ファイルを生成するツールです。 +入力パラメータを雛形として、物質の種類や計算条件によって変わる箇所を結晶構造データなどから構成します。 +特定の計算条件に応じた複数の入力ファイルを生成することが可能です。 +現在は、 +VASP, Quantum ESPRESSO, OpenMX, AkaiKKR に対応しています。

+

付属プログラムとして、物質材料データベースから結晶構造データ等を取得するツール getcif を用意しています。現在は Materials Project からのデータ取得に対応しています。物質の組成や対称性、バンドギャップなどの物性値をもとにデータベースを検索し、データを取得することができます。

+
+
+

1.2. ライセンス

+

本ソフトウェアのプログラムパッケージおよびソースコード一式はGNU General Public License version 3 (GPL v3) に準じて配布されています。

+
+
+

1.3. 開発貢献者

+

本ソフトウェアは以下の開発貢献者により開発されています。

+
+
    +
  • 開発者

    +
      +
    • 吉見 一慶 (東京大学 物性研究所)

    • +
    • 青山 龍美 (東京大学 物性研究所)

    • +
    • 本山 裕一 (東京大学 物性研究所)

    • +
    • 福田 将大 (東京大学 物性研究所)

    • +
    • 井戸 康太 (東京大学 物性研究所)

    • +
    • 福島 鉄也 (産業技術総合研究所)

    • +
    • 笠松 秀輔 (山形大学 学術研究院(理学部主担当))

    • +
    • 是常 隆  (東北大学大学院理学研究科)

    • +
    +
  • +
  • プロジェクトコーディネーター

    +
      +
    • 尾崎 泰助 (東京大学 物性研究所)

    • +
    +
  • +
+
+
+
+

1.4. バージョン履歴

+
+
+
ver.1.1.0

2024/09/14 リリース

+
+
ver.1.0.1

2024/03/31 リリース

+
+
ver.1.0.0

2024/03/19 リリース

+
+
ver.1.0-alpha

2023/12/28 リリース

+
+
+
+
+
+

1.5. コピーライト

+

© 2023- The University of Tokyo. All rights reserved.

+

本ソフトウェアは2023年度 東京大学物性研究所 ソフトウェア高度化プロジェクトの支援を受け開発されており、その著作権は東京大学が所持しています。

+
+
+

1.6. 動作環境

+

以下の環境で動作することを確認しています。

+
    +
  • Ubuntu Linux + python3

  • +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/cif2x/appendix/index.html b/manual/v1.1.0/ja/html/cif2x/appendix/index.html new file mode 100644 index 0000000..9222f05 --- /dev/null +++ b/manual/v1.1.0/ja/html/cif2x/appendix/index.html @@ -0,0 +1,155 @@ + + + + + + + + 6. 拡張ガイド — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

6. 拡張ガイド

+
+

6.1. Quantum ESPRESSO の mode を追加する

+

Quantum ESPRESSO の計算モードへの対応を追加するには、 src/cif2x/qe/calc_mode.pycreate_modeproc() 関数に mode と変換クラスの対応付けを記述します。

+
def create_modeproc(mode, qe):
+    if mode in ["scf", "nscf"]:
+        modeproc = QEmode_pw(qe)
+    else:
+        modeproc = QEmode_generic(qe)
+    return modeproc
+
+
+

modeごとの変換機能は QEmode_base の派生クラスとしてまとめられています。 +このクラスは +update_namelist() で namelist ブロックの更新と、 +update_cards() で cards ブロックのデータ生成を行います。 +現在は pw.x の scf および nscf に対応する QEmode_pw クラスと、変換せずそのまま出力する QEmode_generic クラスが用意されています。

+
class QEmode_base:
+    def __init__(self, qe):
+    def update_namelist(self, content):
+    def update_cards(self, content):
+
+
+

namelist については、空欄の値を結晶構造データ等から生成して代入するほか、格子パラメータなど Structure から決まる値や、他のパラメータとの整合性をとる必要のある値を強制的にセットする場合があります。処理内容はモードごとに個別に対応します。

+

cards ブロックについては、card の種類ごとに関数を用意し、card名と関数の対応付けを card_table 変数に列挙します。 +基底クラスの update_cards() では、card名から対応する関数を取得して実行し、card の情報を更新します。もちろん、全く独自に update_cards() 関数を作成することもできます。

+
self.card_table = {
+    'CELL_PARAMETERS': generate_cell_parameters,
+    'ATOMIC_SPECIES': generate_atomic_species,
+    'ATOMIC_POSITIONS': generate_atomic_positions,
+    'K_POINTS': generate_k_points,
+}
+
+
+

cardごとの関数は scr/cif2x/qe/cards.py にまとめられており、関数名は generate_{card名} としています。この関数は card ブロックのパラメータを引数に取り、card名、option、dataフィールドからなる辞書データを返します。

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/cif2x/basic-usage.html b/manual/v1.1.0/ja/html/cif2x/basic-usage.html new file mode 100644 index 0000000..29e1e45 --- /dev/null +++ b/manual/v1.1.0/ja/html/cif2x/basic-usage.html @@ -0,0 +1,236 @@ + + + + + + + + 2. インストールと基本的な使い方 — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

2. インストールと基本的な使い方

+

必要なライブラリ・環境

+
+

HTP-tools に含まれる第一原理計算入力ファイル生成ツール cif2x を利用するには、以下のプログラムとライブラリが必要です。

+
    +
  • python 3.x

  • +
  • pymatgen モジュール

  • +
  • ruamel.yaml モジュール

  • +
  • f90nml モジュール

  • +
  • qe-tools モジュール

  • +
  • numpy モジュール

  • +
  • pandas モジュール

  • +
  • monty モジュール

  • +
  • OpenBabel モジュール (オプション)

  • +
  • AkaiKKRPythonUtil モジュール

  • +
+

CIFデータ取得ツール getcif を利用するには、上記に加えて以下のライブラリが必要です。

+
    +
  • mp-api モジュール

  • +
+
+

ソースコード配布サイト

+
+
+

ダウンロード方法

+
+

gitを利用できる場合は、以下のコマンドでcif2xをダウンロードできます。

+
$ git clone https://github.com/issp-center-dev/cif2x.git
+
+
+
+

インストール方法

+
+

cif2xをダウンロード後、以下のコマンドを実行してインストールします。cif2xが利用するライブラリも必要に応じてインストールされます。

+
$ cd ./cif2x
+$ python3 -m pip install .
+
+
+

実行プログラム cif2x, getcif がインストールされます。

+

なお、AkaiKKRPythonUtil モジュールは別途インストールが必要です。 +以下の手順で 配布サイト からソースコードを取得しインストールします。また、必要な seaborn モジュールもインストールしておきます。

+
$ git clone https://github.com/AkaiKKRteam/AkaiKKRPythonUtil.git
+$ cd ./AkaiKKRPythonUtil/library/PyAkaiKKR
+$ python3 -m pip install .
+$ python3 -m pip install seaborn
+
+
+
+

ディレクトリ構成

+
+
.
+|-- LICENSE
+|-- README.md
+|-- pyproject.toml
+|-- docs/
+|   |-- ja/
+|   |-- tutorial/
+|-- src/
+|   |-- cif2x/
+|       |-- __init__.py
+|       |-- main.py
+|       |-- cif2struct.py
+|       |-- struct2qe.py
+|       |-- qe/
+|       |   |-- __init__.py
+|       |   |-- calc_mode.py
+|       |   |-- cards.py
+|       |   |-- content.py
+|       |   |-- qeutils.py
+|       |   |-- tools.py
+|       |-- struct2vasp.py
+|       |-- struct2openmx.py
+|       |-- openmx/
+|       |   |-- __init__.py
+|       |   |-- vps_table.py
+|       |-- struct2akaikkr.py
+|       |-- akaikkr/
+|       |   |-- make_input.py
+|       |   |-- read_input.py
+|       |   |-- run_cif2kkr.py
+|       |-- utils.py
+|   |-- getcif/
+|       |-- __init__.py
+|       |-- main.py
+|-- sample/
+
+
+
+

基本的な使用方法

+
+

cif2xは第一原理計算プログラムのための入力ファイルを生成するツールです。入力パラメータを雛形として、物質の種類や計算条件によって変わる箇所を結晶構造データなどから構成します。現在は Quantum ESPRESSO, VASP, OpenMX, および AkaiKKR の入力ファイル形式に対応しています。

+
    +
  1. 入力パラメータファイルの作成

    +
    +

    cif2xを使用するには、まず、生成する入力ファイルの内容を記述したパラメータファイルをYAML形式で作成します。詳細についてはファイルフォーマットの章を参照してください。

    +
    +
  2. +
  3. 結晶構造ファイルと擬ポテンシャルファイルの配置

    +
    +

    対象となる物質の結晶構造を記述したファイルを用意します。ファイル形式は CIF または pymatgen が扱える POSCAR や xfs 形式に対応しています。

    +

    Quantum ESPRESSO の場合、利用する擬ポテンシャルファイルと、CSV形式のインデックスファイルを配置します。擬ポテンシャルファイルの配置先などは入力パラメータファイル内に指定します。

    +

    VASP の場合、擬ポテンシャルファイルの格納場所を ~/.config/.pmgrc.yaml ファイルに記述するか環境変数にセットします。入力パラメータファイル内で指定することもできます。

    +
    +
  4. +
  5. コマンドの実行

    +
    +

    作成した入力パラメータファイルおよび結晶構造データファイルを入力としてcif2xプログラムを実行します。Quantum ESPRESSO用の入力ファイルを生成する場合はターゲットオプションに -t QE を指定します。VASPの場合は -t VASP, OpenMX の場合は -t OpenMX, AkaiKKR の場合は -t akaikkr を指定します。

    +
    $ cif2x -t QE input.yaml material.cif
    +
    +
    +
    +
  6. +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/cif2x/command/index.html b/manual/v1.1.0/ja/html/cif2x/command/index.html new file mode 100644 index 0000000..3767392 --- /dev/null +++ b/manual/v1.1.0/ja/html/cif2x/command/index.html @@ -0,0 +1,168 @@ + + + + + + + + 4. コマンドリファレンス — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

4. コマンドリファレンス

+
+

4.1. cif2x

+
+

第一原理計算のための入力ファイルを生成する

+
+

書式:

+
+
cif2x [-v][-q] -t target input_yaml material.cif
+cif2x -h
+cif2x --version
+
+
+
+

説明:

+
+

input_yaml に指定した入力パラメータファイルと material.cif に指定した結晶構造データを読み込み、第一原理計算プログラム用の入力ファイルを生成します。現在は Quantum ESPRESSO, VASP, OpenMX に対応しています。 +以下のオプションを受け付けます。

+
    +
  • -v

    +

    実行時に表示されるメッセージを冗長にします。複数回指定すると冗長度が上がります。

    +
  • +
  • -q

    +

    実行時に表示されるメッセージの冗長度を下げます。 -v の効果を打ち消します。複数回の指定が可能です。

    +
  • +
  • -t target

    +

    対象となる第一原理計算プログラムを指定します。 target として指定可能な値は以下のとおりです。大文字小文字は区別しません。

    +
      +
    • QE, espresso, quantum_espresso: Quantum ESPRESSO向け入力ファイルを生成します。

    • +
    • VASP: VASP向け入力ファイルを生成します。

    • +
    • OpenMX: OpenMX向け入力ファイルを生成します。

    • +
    • AkaiKKR: AkaiKKR向け入力ファイルを生成します。

    • +
    +
  • +
  • input_yaml

    +

    入力パラメータファイルを指定します。形式は YAML format です。

    +
  • +
  • material.cif

    +

    結晶構造データファイルを指定します。形式は CIF の他、pymatgen で扱える形式のファイルを指定できます。

    +
  • +
  • -h

    +

    ヘルプを表示します。

    +
  • +
  • --version

    +

    バージョン情報を表示します。

    +
  • +
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/cif2x/filespec/index.html b/manual/v1.1.0/ja/html/cif2x/filespec/index.html new file mode 100644 index 0000000..a763487 --- /dev/null +++ b/manual/v1.1.0/ja/html/cif2x/filespec/index.html @@ -0,0 +1,394 @@ + + + + + + + + 5. ファイルフォーマット — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

5. ファイルフォーマット

+
+

5.1. 入力パラメータファイル

+

入力パラメータファイルでは、cif2x で第一原理計算入力ファイルを生成するための設定情報を YAML形式で記述します。本ファイルは以下の部分から構成されます。

+
+
    +
  1. structureセクション: 結晶構造データの扱いについてのオプションを記述します。

  2. +
  3. optionalセクション: 擬ポテンシャルファイルの指定や、YAMLの参照機能を利用する場合のシンボル定義を行います。

  4. +
  5. tasksセクション: 入力ファイルの内容を記述します。

  6. +
+
+
+

structure

+
+

use_ibrav (デフォルト値: false)

+
+

結晶構造の入力に Quantum ESPRESSO の ibrav パラメータを利用します。 true の場合、格子のとり方を Quantum ESPRESSO の convention に合うように変換します。入力ファイルにはあわせて格子に関するパラメータ a, b, c, cosab, cosac, cosbc が(必要に応じて)書き出されます。

+
+

tolerance (デフォルト値: 0.01)

+
+

use_ibrav = true の場合に、再構成した Structure データと元データとの一致を評価する際の許容度を指定します。

+
+

supercell (デフォルト値: なし)

+
+

supercell を設定する場合に supercell のサイズを [\(n_x\), \(n_y\), \(n_z\)] で指定します。

+
+
+
+
+

optional

+

第一原理計算プログラムごとに必要な global な設定を行います。記述する内容は以下の各節に記述します。

+
+
+

tasks

+

入力ファイルの内容を記述します。複数の入力ファイルに対応するため、 tasks には各入力ファイルごとのブロックからなるリスト形式をとります。各ブロックに記述する項目は以下のとおりです。

+
+

mode (Quantum ESPRESSO)

+
+

入力ファイルの計算内容を指定します。 +現時点では Quantum ESPRESSO の pw.x 向けに scfnscf に対応しています。対応していない mode については、 content の内容をそのまま出力します。

+
+

output_file (Quantum ESPRESSO)

+
+

出力ファイル名を指定します。

+
+

output_dir

+
+

出力先のディレクトリ名を指定します。デフォルト値はカレントディレクトリです。

+
+

content

+
+

出力内容を指定します。Quantum ESPRESSO の場合は namelist ブロックに namelist データ (&system&control など) を記述し、 K_POINTS 等の card データを個別のブロックとして記述します。card データはパラメータをとるものがあります。

+
+

template (Quantum ESPRESSO)

+

template_dir (VASP)

+
+

出力内容のテンプレートファイルを指定します。指定がない場合はテンプレートを利用しません。 +このファイルの内容を content に追加します。同じデータがある場合は後者を優先します。

+
+
+
+
+

パラメータセット指定

+

入力パラメータには値のリストや範囲を指定することができ、値の組み合わせごとに個別のディレクトリを作成して入力ファイルを生成します。パラメータセットの指定には特別な構文 ${...} を用います。 +指定方法は次の通りです:

+
    +
  • リスト ${[ A, B, ... ]}

    +

    パラメータセットを Python のリストとして列挙します。各項目はスカラー値やリストを指定できます。

    +
  • +
  • 範囲指定 ${range(N)}, ${range(start, end, step)}

    +

    パラメータの範囲を指定します。それぞれ 0〜N-1, start〜end を step 刻み (step を省略した場合は 1) です。 N, start, end, step は int または float です。

    +
  • +
+
+
+
+

5.2. Quantum ESPRESSO 向けパラメータ

+

optional セクションおよび tasks セクションの content に記載する内容について、Quantum ESPRESSO 固有の内容を記述します。 +現時点では pw.x の scf および nscf に対応しています。

+
+

optionalセクション

+
+

pp_file

+
+

元素種と擬ポテンシャルを対応付けるCSV形式のインデックスファイルを指定します。 +ファイルの書式は、元素種、擬ポテンシャルファイルのタイプ、nexclude、orbitals です。例:

+
Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd
+
+
+

擬ポテンシャルファイルのファイル名は Fe.pbe-spn-rrkjus_psl.0.2.1.UPF に対応します。

+
+

cutoff_file

+
+

擬ポテンシャルファイルとカットオフを対応付けるCSV形式のインデックスファイルを指定します。 +ファイルの書式は、擬ポテンシャルファイル、ecutwfcの値、ecutrhoの値 です。

+
+

pseudo_dir

+
+

擬ポテンシャルファイルを格納するディレクトリ名を指定します。カットオフの値を擬ポテンシャルファイルから取得する場合に使用します。Quantum ESPRESSO の pseudo_dir パラメータとは独立に指定します。

+
+
+
+
+

content

+
+

namelist

+
    +
  • structure セクションの use_ibrav パラメータに応じて、 &system の格子情報の指定が上書きされます。

    +
      +
    • use_ibrav = false: +ibrav は 0 にセットされます。また、格子パラメータに関する a, b, c, cosab, cosac, cosbc, celldm は削除されます。

    • +
    • use_ibrav = true: +ibrav は結晶構造データから取得された Bravais 格子のインデックスがセットされます。また、Structure データは基本格子のとり方など Quantum ESPRESSO の convention に合わせて再構成されます。

    • +
    +
  • +
  • nat (原子数) および ntyp (元素種の数)は結晶構造データから取得される値で上書きされます。

  • +
  • カットオフ ecutwfc および ecutrho の情報は、パラメータの値が空欄の場合は擬ポテンシャルファイルから取得します。

  • +
+

CELL_PARAMETERS

+
    +
  • structure セクションの use_ibrav パラメータが true の場合は出力されません。false の場合は格子ベクトルが出力されます。単位は angstrom です。

  • +
  • 格子ベクトルの情報は結晶構造データから取得されます。 data フィールドに 3x3 の行列を直接指定した場合はその値が用いられます。

  • +
+

ATOMIC_SPECIES

+
    +
  • 原子種・原子量・擬ポテンシャルファイル名のリストを出力します。

  • +
  • 原子種の情報は結晶構造データから取得されます。擬ポテンシャルのファイル名は pp_list で指定するCSV形式のインデックスファイルを参照します。

  • +
  • data フィールドに必要なデータを指定した場合はその値が用いられます。

  • +
+

ATOMIC_POSITIONS

+
    +
  • 原子種と原子座標(fractional coordinate)のリストを出力します。

  • +
  • ignore_species に原子種または原子種のリストを指定した場合、その原子種については if_pos の値が 0 にセットされます。MDや構造最適化の際に使われます。

  • +
  • data フィールドに必要なデータを指定した場合はその値が用いられます。

  • +
+

K_POINTS

+
    +
  • k点の情報を出力します。 option に出力タイプを指定します。

    +
      +
    • gamma: \(\Gamma\) 点を用います。

    • +
    • crystal: メッシュ状の k点のリストを出力します。メッシュの指定は grid パラメータまたは vol_densityk_resolution から導出される値が用いられます。

    • +
    • automatic: k点のメッシュを指定します。メッシュの指定は grid パラメータまたは vol_densityk_resolution から導出される値が用いられます。 シフトの指定は kshifts パラメータを参照します。

    • +
    +
  • +
  • メッシュの指定は以下の順序で決定されます。

    +
      +
    • grid パラメータの指定。grid の値は \(n_x, n_y, n_z\) の配列またはスカラー値 \(n\) です。後者の場合は \(n_x = n_y = n_z = n\) と仮定します。

    • +
    • vol_density パラメータから自動導出。

    • +
    • k_resolution パラメータから自動導出。k_resolution のデフォルトは 0.15 です。

    • +
    +
  • +
  • data フィールドに必要なデータを指定した場合はその値が用いられます。

  • +
+
+
+
+
+

5.3. VASP 向けパラメータ

+

optional セクションおよび tasks セクションの content に記載する内容について、VASP 固有の内容を記述します。

+
+

optional

+

擬ポテンシャルのタイプや格納場所を指定します。

+

pymatgen では、擬ポテンシャルファイルを +PMG_VASP_PSP_DIR/functional/POTCAR. element (.gz) または +PMG_VASP_PSP_DIR/functional/ element /POTCAR から取得します。 +PMG_VASP_PSP_DIR はディレクトリの指定で、設定ファイル ~/.config/.pmgrc.yaml に記載するか、同名の環境変数に指定します。また、 functional は擬ポテンシャルのタイプで、 POT_GGA_PAW_PBEPOT_LDA_PAW などが決められています。

+
+

pseudo_functional

+
+

擬ポテンシャルのタイプを指定します。タイプの指定と上記の functional の対応は pymatgen 内のテーブルに定義され、 PBEPOT_GGA_PAW_PBE,  LDAPOT_LDA_PAW などのようになっています。

+
+
+

以下の pseudo_dir を指定した場合は pymatgen の流儀を無視して擬ポテンシャルの格納ディレクトリを探します。

+
+

psuedo_dir

+
+

擬ポテンシャルの格納ディレクトリを指定します。擬ポテンシャルファイルのファイル名は pseudo_dir/POTCAR. element (.gz) または pseudo_dir/element/POTCAR です。

+
+
+
+
+

tasks

+

テンプレートファイルは、 template_dir で指定するディレクトリ内に INCAR, KPOINTS, POSCAR, POTCAR ファイルを配置します。ファイルがない項目は無視されます。

+
+
+

content

+
+

incar

+
    +
  • INCAR ファイルに記述するパラメータを列挙します。

  • +
+

kpoints

+
    +
  • type

    +

    KPOINTS の指定方法を記述します。以下の値に対応しています。タイプによりパラメータが指定可能なものがあります。詳細は pymatgen.io.vasp のマニュアルを参照してください。

    +
      +
    • automatic

      +

      parameter: grid

      +
    • +
    • gamma_automatic

      +

      parameter: grid, shift

      +
    • +
    • monkhorst_automatic

      +

      parameter: grid, shift

      +
    • +
    • automatic_density

      +

      parameter: kppa, force_gamma

      +
    • +
    • automatic_gamma_density

      +

      parameter: grid_density

      +
    • +
    • automatic_density_by_vol

      +

      parameter: grid_density, force_gamma

      +
    • +
    • automatic_density_by_lengths

      +

      parameter: length_density, force_gamma

      +
    • +
    • automatic_linemode

      +

      parameter: division, path_type (HighSymmKpath の path_type に対応)

      +
    • +
    +
  • +
+
+
+
+
+

5.4. OpenMX 向けパラメータ

+

optional セクションおよび tasks セクションの content に記載する内容について、OpenMX 固有の内容を記述します。

+
+

optional

+
+

data_path

+
+

擬原子軌道および擬ポテンシャルのファイルを格納するディレクトリを指定します。入力ファイルの DATA.PATH パラメータに対応します。

+
+
+
+
+

content

+
+

precision

+
+

擬原子軌道を OpenMXマニュアル 10.6 章の Table 1, 2 にしたがって選択します。 quick, standard, precise のいずれかの値を取ります。デフォルト値は quick です。

+
+
+
+
+
+

5.5. AkaiKKR 向けパラメータ

+

optional セクションおよび tasks セクションの content に記載する内容について、AkaiKKR 固有の内容を記述します。

+
+

optional

+
+

workdir

+
+

一時ファイルの出力先を指定します。指定しない場合は /tmp または TMPDIR 環境変数の値を利用します。

+
+
+
+
+

content

+

content には AkaiKKR の入力パラメータの内容を記述します。指定のない項目は空欄が出力され、AkaiKKR内部のデフォルト値が使われます。 +以下のパラメータは結晶構造データから決まる値で置き換えられます。

+
    +
  • brvtyp: +ただし、 brvtypaux (を含む)値が指定されている場合は上書きされません。

  • +
  • 格子パラメータ: a, c/a, b/a, alpha, beta, gamma, r1, r2, r3

  • +
  • タイプ情報: ntyp, type, ncmp, rmt, field, mxl, anclr, conc

  • +
  • 元素種の情報: natm, atmicx, atmtyp

  • +
+

なお、 rmtfield の値は、入力パラメータファイル内で ntyp 個の要素からなるリストとして指定されている場合のみ、入力パラメータファイルの値が使われます。

+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/cif2x/index.html b/manual/v1.1.0/ja/html/cif2x/index.html new file mode 100644 index 0000000..d7a174d --- /dev/null +++ b/manual/v1.1.0/ja/html/cif2x/index.html @@ -0,0 +1,163 @@ + + + + + + + + 第一原理計算入力ファイル生成ツール (cif2x) — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/cif2x/tutorial/index.html b/manual/v1.1.0/ja/html/cif2x/tutorial/index.html new file mode 100644 index 0000000..b574888 --- /dev/null +++ b/manual/v1.1.0/ja/html/cif2x/tutorial/index.html @@ -0,0 +1,217 @@ + + + + + + + + 3. チュートリアル — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

3. チュートリアル

+

第一原理計算入力ファイル生成ツール cif2x を使うには、入力パラメータファイルと結晶構造データおよび擬ポテンシャルファイルを用意した後、プログラム cif2x を実行します。現在は Quantum ESPRESSO, VASP, OpenMX, AkaiKKR の入力ファイル生成に対応しています。以下では、 docs/tutorial/cif2x ディレクトリにある Quantum ESPRESSO 向けサンプルを例にチュートリアルを実施します。

+
+

3.1. 入力パラメータファイルを作成する

+

入力パラメータファイルには、第一原理計算プログラムに与える入力ファイルの内容を記述します。

+

以下に入力パラメータファイルのサンプルを記載します。このファイルは YAML形式のテキストファイルで、結晶構造データに対するオプションの指定や、出力する第一原理計算入力ファイルの内容を記述します。仕様の詳細については ファイルフォーマット の章を参照してください。

+

YAMLフォーマットでは、 keyword: value の辞書形式でパラメータを記述します。 value には数値や文字列などのスカラー値や、複数の値を [ ] または箇条書きの形式で列挙するリスト型、または辞書型を入れ子にすることができます。

+
structure:
+  use_ibrav: false
+  tolerance: 0.05
+
+optional:
+  pseudo_dir: ./pseudo
+  pp_file: ./pseudo/pp_psl_pbe_rrkjus.csv
+
+tasks:
+  - mode: scf
+    output_file: scf.in
+    output_dir: scf
+    template: scf.in_tmpl
+    content:
+      namelist:
+        control:
+          prefix: pwscf
+          pseudo_dir:
+          outdir: ./work
+        system:
+          ecutwfc:
+          ecutrho:
+      CELL_PARAMETERS:
+      ATOMIC_SPECIES:
+      ATOMIC_POSITIONS:
+        option: crystal
+      K_POINTS:
+        option: automatic
+        grid: [8,8,8]
+
+
+

入力パラメータファイルは structure, optional, tasks のブロックから構成されます。 +structure は結晶構造データに関するオプションを指定します。 +optional は擬ポテンシャルに関する global な設定などを行います。

+

tasks は出力する第一原理計算入力ファイルの内容を指定します。一連の計算に対応して複数のファイルを生成できるよう、tasks は配列の値を取ります。 +各出力について、計算内容は mode パラメータで指定します。SCF計算の scf や NSCF計算の nscf に対応するほか、一般的な出力を行う任意の出力モードを指定できます。 +ファイルは output_dir および output_file で指定するファイルに書き出されます。

+

出力内容は content に記載します。 +Quantum ESPRESSO の入力ファイルは、 &keyword で始まる Fortran90 の namelist 形式と、 K_POINTS などのキーワードで始まり空行で分割される cards と呼ばれるブロックからなります。 content には namelist と cards を入れ子の辞書形式で指定します。 +いくつかの例外を除いて、指定された内容が基本的にはそのまま入力ファイルに書き出されます。値が空欄のキーワードは、結晶構造データなどから求めた値が代入されます。

+

また、template として入力ファイルの雛形を指定することもできます。 template に指定したファイルの内容と content のデータを合わせたものを入力データとして扱います。同じキーワードのデータが存在する場合は content の指定が優先されます。従って、既存の入力ファイルを元に必要な箇所を入力パラメータファイルで上書きする使い方が可能です。上記の例では次のファイル(scf.in_tmpl)を template として取り込み、カットオフと CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINT の箇所を結晶構造等から決めます。 ecutwfcecutrho が空欄で上書きされていることに留意してください。

+
&control
+    calculation = 'scf'
+    prefix = 'pwscf'
+    pseudo_dir = './pseudo'
+    outdir = './work'
+    tstress = .true.
+    tprnfor = .true.
+/
+
+&system
+    ibrav = 0
+    nat = 7
+    ntyp = 3
+    ecutwfc = 36.0
+    ecutrho = 180.0
+    occupations = 'smearing'
+    smearing = 'm-p'
+    degauss = 0.01
+    noncolin = .true.
+    nspin = 2
+/
+
+&electrons
+    missing_beta = 0.1
+    conv_thr = 1e-08
+/
+
+
+
+
+

3.2. 第一原理計算入力ファイルを生成する

+

入力パラメータファイル(input.yaml)と結晶構造データ(Co3SnS2_nosym.cif)を入力として cif2x を実行します。

+
$ cif2x -t QE input.yaml Co3SnS2_nosym.cif
+
+
+

予め必要な擬ポテンシャルのファイルを ./pseudo ディレクトリに配置し、擬ポテンシャルのインデックスファイルを ./pseudo/pp_psl_pbe_rrkjus.csv に作成しておきます。

+

cif2x を実行すると Quantum ESPRESSO用の入力ファイルが生成され出力されます。出力先は入力パラメータファイル内のパラメータで指定するディレクトリ(output_dir)およびファイル(output_file)です。この例では ./scf/scf.in に SCF計算用の入力ファイルが書き出されます。

+
+
+

3.3. パラメータセットを指定する

+

入力パラメータ内の値をいくつか変えながら一連の入力ファイルを生成したいことがあります。例えばカットオフの値やk点の数を変えて収束性を評価するなどの場合です。入力パラメータには値のリストや範囲を指定することができ、値の組み合わせごとに個別のディレクトリを作成して入力ファイルを生成します。 +パラメータセットの指定は特別な構文 ${...} を用います。

+
content:
+  K_POINTS:
+    option: automatic
+    grid:   ${ [ [4,4,4], [8,8,8], [12,12,12] ] }
+
+
+

例えば上記のように K_POINTS を指定すると、 grid の値が [4,4,4], [8,8,8], [12,12,12] の入力ファイルがそれぞれ 4x4x4/, 8x8x8/, 12x12x12/ サブディレクトリ内に作成されます。

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/genindex.html b/manual/v1.1.0/ja/html/genindex.html new file mode 100644 index 0000000..e607333 --- /dev/null +++ b/manual/v1.1.0/ja/html/genindex.html @@ -0,0 +1,104 @@ + + + + + + + 索引 — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

索引

+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/getcif/about/index.html b/manual/v1.1.0/ja/html/getcif/about/index.html new file mode 100644 index 0000000..48f8520 --- /dev/null +++ b/manual/v1.1.0/ja/html/getcif/about/index.html @@ -0,0 +1,123 @@ + + + + + + + + 7.1. 概要 — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

7.1. 概要

+

getcifは物質材料データベースから結晶構造データ等を取得するツールです。現在は Materials Project からのデータ取得に対応しています。物質の組成や対称性、バンドギャップなどの物性値をもとにデータベースを検索し、データを取得することができます。

+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/getcif/appendix/index.html b/manual/v1.1.0/ja/html/getcif/appendix/index.html new file mode 100644 index 0000000..86ca941 --- /dev/null +++ b/manual/v1.1.0/ja/html/getcif/appendix/index.html @@ -0,0 +1,465 @@ + + + + + + + + 7.5. パラメータリスト — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

7.5. パラメータリスト

+
+

検索条件 (properties)

+

properties に指定できる項目と、その項目がどのような値を取るかを以下にまとめます。

+

Materials Project API のクライアントアプリケーションの一つとして mp-api パッケージが Materials Project から公開されており、getcif はこのライブラリを利用してデータベースへの接続を行います。 +以下は MPRester クラスの materials.summary.search メソッドのパラメータに対応します。 +(以下の表は materials.summary.search のソースコードのコメントから転記しました。)

+

値の型の表記は次のとおりです。

+
    +
  • str: 文字列型

  • +
  • List[str]: 文字列型のリスト

  • +
  • str | List[str]: 単一の文字列、または、文字列型のリスト

  • +
  • int: 整数型

  • +
  • bool: 真偽値 (true または false)

  • +
  • Tuple[float,float]: 実数値 2つからなる組 (リスト)

  • +
  • Tuple[int,int]: 整数値 2つからなる組 (リスト)

  • +
  • CrystalSystem: 結晶のタイプを表す文字列。Triclinic, Monoclinic, Orthorhombic, Tetragonal, Trigonal, Hexagonal, Cubic のいずれか。

  • +
  • List[HasProps]: 特性値のタイプを表す文字列のリスト。特性値は emmet.core.summary に定義されている。以下のいずれかの値を取る。

    +
    +

    absorption, +bandstructure, +charge_density, +chemenv, +dielectric, +dos, +elasticity, +electronic_structure, +eos, +grain_boundaries, +insertion_electrodes, +magnetism, +materials, +oxi_states, +phonon, +piezoelectric, +provenance, +substrates, +surface_properties, +thermo, +xas

    +
    +
  • +
  • Ordering: 磁気秩序を表す文字列。FM, AFM, FiM, NM のいずれか。

  • +
+

値のリストは、YAML形式の箇条書きおよび [ ... ] にカンマ区切りで記述するほか、空白区切りで列挙する記法も可能です。

+

Tuple で表される型は値の範囲 (min, max) の指定に使われます。値のリストとして記述するほか、空白区切りで min max のように記述することもできます。また、以下の表記も可能です。

+
+

<= max : max 以下

+

< max : max より小さい

+

>= min : min 以上

+

> min : min より大きい

+

min ~ max : min 以上 max 以下

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
表 7.1 検索条件のキーワード

Keyword

Type

Description

band_gap

Tuple[float,float]

Minimum and maximum band gap in eV to consider.

chemsys

str | List[str]

A chemical system, list of chemical systems (e.g., Li-Fe-O, Si-*, [Si-O, Li-Fe-P]), or single formula (e.g., Fe2O3, Si*).

crystal_system

CrystalSystem

Crystal system of material.

density

Tuple[float,float]

Minimum and maximum density to consider.

deprecated

bool

Whether the material is tagged as deprecated.

e_electronic

Tuple[float,float]

Minimum and maximum electronic dielectric constant to consider.

e_ionic

Tuple[float,float]

Minimum and maximum ionic dielectric constant to consider.

e_total

Tuple[float,float]

Minimum and maximum total dielectric constant to consider.

efermi

Tuple[float,float]

Minimum and maximum fermi energy in eV to consider.

elastic_anisotropy

Tuple[float,float]

Minimum and maximum value to consider for the elastic anisotropy.

elements

List[str]

A list of elements.

energy_above_hull

Tuple[int,int]

Minimum and maximum energy above the hull in eV/atom to consider.

equilibrium_reaction_energy

Tuple[float,float]

Minimum and maximum equilibrium reaction energy in eV/atom to consider.

exclude_elements

List[str]

List of elements to exclude.

formation_energy

Tuple[int,int]

Minimum and maximum formation energy in eV/atom to consider.

formula

str | List[str]

A formula including anonymized formula or wild cards (e.g., Fe2O3, ABO3, Si*). A list of chemical formulas can also be passed (e.g., [Fe2O3, ABO3]).

g_reuss

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Reuss average of the shear modulus.

g_voigt

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt average of the shear modulus.

g_vrh

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the shear modulus.

has_props

List[HasProps]

The calculated properties available for the material.

has_reconstructed

bool

Whether the entry has any reconstructed surfaces.

is_gap_direct

bool

Whether the material has a direct band gap.

is_metal

bool

Whether the material is considered a metal.

is_stable

bool

Whether the material lies on the convex energy hull.

k_reuss

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Reuss average of the bulk modulus.

k_voigt

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt average of the bulk modulus.

k_vrh

Tuple[float,float]

Minimum and maximum value in GPa to consider for the Voigt-Reuss-Hill average of the bulk modulus.

magnetic_ordering

Ordering

Magnetic ordering of the material.

material_ids

List[str]

List of Materials Project IDs to return data for.

n

Tuple[float,float]

Minimum and maximum refractive index to consider.

num_elements

Tuple[int,int]

Minimum and maximum number of elements to consider.

num_sites

Tuple[int,int]

Minimum and maximum number of sites to consider.

num_magnetic_sites

Tuple[int,int]

Minimum and maximum number of magnetic sites to consider.

num_unique_magnetic_sites

Tuple[int,int]

Minimum and maximum number of unique magnetic sites to consider.

piezoelectric_modulus

Tuple[float,float]

Minimum and maximum piezoelectric modulus to consider.

poisson_ratio

Tuple[float,float]

Minimum and maximum value to consider for Poisson's ratio.

possible_species

List[str]

List of element symbols appended with oxidation states. (e.g. Cr2+,O2-)

shape_factor

Tuple[float,float]

Minimum and maximum shape factor values to consider.

spacegroup_number

int

Space group number of material.

spacegroup_symbol

str

Space group symbol of the material in international short symbol notation.

surface_energy_anisotropy

Tuple[float,float]

Minimum and maximum surface energy anisotropy values to consider.

theoretical

bool

Whether the material is theoretical.

total_energy

Tuple[int,int]

Minimum and maximum corrected total energy in eV/atom to consider.

total_magnetization

Tuple[float,float]

Minimum and maximum total magnetization values to consider.

total_magnetization_normalized_formula_units

Tuple[float,float]

Minimum and maximum total magnetization values normalized by formula units to consider.

total_magnetization_normalized_vol

Tuple[float,float]

Minimum and maximum total magnetization values normalized by volume to consider.

uncorrected_energy

Tuple[int,int]

Minimum and maximum uncorrected total energy in eV/atom to consider.

volume

Tuple[float,float]

Minimum and maximum volume to consider.

weighted_surface_energy

Tuple[float,float]

Minimum and maximum weighted surface energy in J/\(m^2\) to consider.

weighted_work_function

Tuple[float,float]

Minimum and maximum weighted work function in eV to consider.

+
+
+

出力項目 (fields)

+

fields に指定できる項目を以下に列挙します。

+
band_gap
+bandstructure
+builder_meta
+bulk_modulus
+cbm
+chemsys
+composition
+composition_reduced
+database_IDs
+decomposes_to
+density
+density_atomic
+deprecated
+deprecation_reasons
+dos
+dos_energy_down
+dos_energy_up
+e_electronic
+e_ij_max
+e_ionic
+e_total
+efermi
+elements
+energy_above_hull
+energy_per_atom
+equilibrium_reaction_energy_per_atom
+es_source_calc_id
+formation_energy_per_atom
+formula_anonymous
+formula_pretty
+grain_boundaries
+has_props
+has_reconstructed
+homogeneous_poisson
+is_gap_direct
+is_magnetic
+is_metal
+is_stable
+last_updated
+material_id
+n
+nelements
+nsites
+num_magnetic_sites
+num_unique_magnetic_sites
+ordering
+origins
+possible_species
+property_name
+shape_factor
+shear_modulus
+structure
+surface_anisotropy
+symmetry
+task_ids
+theoretical
+total_magnetization
+total_magnetization_normalized_formula_units
+total_magnetization_normalized_vol
+types_of_magnetic_species
+uncorrected_energy_per_atom
+universal_anisotropy
+vbm
+volume
+warnings
+weighted_surface_energy
+weighted_surface_energy_EV_PER_ANG2
+weighted_work_function
+xas
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/getcif/command/index.html b/manual/v1.1.0/ja/html/getcif/command/index.html new file mode 100644 index 0000000..50b6d67 --- /dev/null +++ b/manual/v1.1.0/ja/html/getcif/command/index.html @@ -0,0 +1,161 @@ + + + + + + + + 7.3. コマンドリファレンス — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

7.3. コマンドリファレンス

+
+

getcif

+
+

結晶構造データをデータベースから取得する

+
+

書式:

+
+
getcif [-v][-q] [--dry-run] input_yaml
+getcif -h
+getcif --version
+
+
+
+

説明:

+
+

input_yaml に指定した入力パラメータファイルを読み込み、データベースを検索して結晶構造等のデータを取得します。 +以下のオプションを受け付けます。

+
    +
  • -v

    +

    実行時に表示されるメッセージを冗長にします。複数回指定すると冗長度が上がります。

    +
  • +
  • -q

    +

    実行時に表示されるメッセージの冗長度を下げます。 -v の効果を打ち消します。複数回の指定が可能です。

    +
  • +
  • --dry-run

    +

    検索パラメータを出力し、データベースへの接続をせずに終了します。検索条件を確認することができます。入力パラメータファイルの dry_run の指定より優先します。

    +
  • +
  • input_yaml

    +

    入力パラメータファイルを指定します。ファイルフォーマットはYAML形式です。

    +
  • +
  • -h, --help

    +

    ヘルプを表示します。指定可能な検索条件 (properties) と取得データ (fields) の一覧も表示されます。

    +
  • +
  • --version

    +

    バージョン情報を表示します。

    +
  • +
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/getcif/filespec/index.html b/manual/v1.1.0/ja/html/getcif/filespec/index.html new file mode 100644 index 0000000..0b4c16f --- /dev/null +++ b/manual/v1.1.0/ja/html/getcif/filespec/index.html @@ -0,0 +1,246 @@ + + + + + + + + 7.4. ファイルフォーマット — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

7.4. ファイルフォーマット

+
+

入力パラメータファイル

+

入力パラメータファイルでは、getcif で Materials Project の物質材料データベースから結晶構造等のデータを取得するための設定情報を YAML形式で記述します。本ファイルは以下の部分から構成されます。

+
+
    +
  1. databaseセクション: 接続するデータベースについての情報を記述します。

  2. +
  3. optionセクション: 出力先のディレクトリや実行条件などを記述します。

  4. +
  5. propertiesセクション: 検索条件を記述します。

  6. +
  7. fieldsセクション: 取得データの種類を記述します。

  8. +
+
+
+

database

+
+

target

+
+

接続先のデータベースを指定します。現在はこの項目は無視されます。

+
+

api_key_file (デフォルト値: materials_project.key)

+
+

データベースに接続する際の APIキーを格納したファイルのファイル名を指定します。ファイル名の拡張子は .key とします。 +ファイルが存在しない、または有効なAPIキーが見つからない場合は、環境変数 MP_API_KEY または pymatgen の設定ファイル ~/.config/.pmgrcPMG_MAPI_KEY からAPIキーを取得します。

+

APIキーファイルはテキスト形式です。 # から始まる行はコメントとして扱われます。前後の空白は無視されます。複数行からなる場合は最初の有効な行からキーを取得します。

+
+
+
+
+

option

+
+

output_dir (デフォルト値: "")

+
+

取得データを格納するディレクトリを指定します。データは output_dir 以下に、material ID をディレクトリ名としたディレクトリに出力されます。指定がない場合はカレントディレクトリです。

+
+

dry_run (デフォルト値: False)

+
+

データベースへの接続は行わず、検索条件を出力して終了します。検索内容の確認を行うことができます。

+
+

symprec (デフォルト値: 0.1)

+
+

結晶構造データをCIFファイルに出力する際の対称性を判定する許容精度を指定します。デフォルトは 0.1 です。 symprec に 0.0 を指定した場合は symprec を指定しないものとして扱い、対称性を考慮しないCIFファイルが生成されます。

+

symprec は、結晶構造における対称性を判定する際の許容精度(tolerance)を指定するパラメータです。対称性の計算においては、原子位置の微細なずれや数値計算の精度の影響を考慮する必要があります。symprec はこのずれの許容範囲を制御し、対称操作が適用されるかどうかを決定する際の閾値として機能します。

+

symprec を小さく設定する(例: 0.01)と、対称性の判定がより厳密になり、結晶構造のわずかなずれでも対称操作が適用されない可能性が高まります。その結果、より低い対称性の空間群が得られることがあります。逆に、symprec を大きく設定する(例: 1.0)と、対称性の判定が緩やかになり、わずかなずれが無視され、より高い対称性が認められることがあります。

+

なお、 fields セクションで symmetry を指定すると、Materials Project でデフォルトの symprec=0.1 で判定された対称性の情報を取得し、テキストファイル(symmetry)に出力します。

+
+
+
+
+

properties

+

検索条件を記述します。 +元素組成や結晶の対称性、物性値の範囲などの項目を、「項目名: 値」の形式で指定します。これらの条件は AND で扱われます。 +指定できる項目は Materials Project の API に定義されていますが、指定方法は mp-api ライブラリの materials.summary.search のパラメータに準拠します。項目のリストは Appendix を参照してください。また、 getcif --help で一覧を見ることができます。

+

値の指定方法は次のとおりです。YAML形式に準拠しますが、一部に簡便な記法を用意しています。

+
    +
  • 数値、文字列

    +
    +

    そのまま記述します。

    +
    +
  • +
  • 真偽値

    +
    +

    true または false を記述します

    +
    +
  • +
  • 数値や文字列のリスト

    +
    +

    YAML形式の箇条書きおよび [ ... ] にカンマ区切りで記述するほか、空白区切りで列挙する記法も可能です。例:

    +
    +
    element: Sr Ti
    +
    +
    +
    +
    +
  • +
  • 数値の範囲

    +
    +

    上限・下限のリストとして [ min, max ] のように記述するほか、空白区切りで min max のように記述することもできます。また、以下の記法も可能です。

    +
    +
    +
    <= max

    max 以下

    +
    +
    < max

    max より小さい (実数の場合は <= と同等。整数の場合は <= max-1 として扱われる)

    +
    +
    >= min

    min 以上

    +
    +
    > min

    min より大きい (実数の場合は >= と同等。整数の場合は >= min+1 として扱われる)

    +
    +
    min ~ max

    min 以上 max 以下

    +
    +
    +
    +

    注記:

    +
    +
      +
    • 記号と数値の間は空白を置きます。

    • +
    • YAML記法では > は特殊文字として扱われるため、 >= min, > min はそれぞれ ">= min", "> min" のように " " で囲む必要があります。

    • +
    • リストで記述する場合、 <= max, >= min はそれぞれ [ None, max ], [ min, None ] のように表記します。

    • +
    +
    +
    +
  • +
  • ワイルドカード

    +
    +
    +
    formula には元素種にワイルドカード * を指定できます。その場合は値を " " で囲みます。例:
    formula: "**O3"
    +
    +
    +
    +
    +

    \(ABO_3\) 系の物質を指定します。

    +
    +
  • +
+
+
+

fields

+

取得するデータの種類を記述します。 +項目のリストを YAML形式で列挙するほか、空白区切りの文字列として記述することもできます。文字列は YAML記法 | を用いて複数行で書くこともできます。 +指定できる項目は Materials Project の API の fields パラメータに準拠します。項目のリストは Appendix を参照してください。また、 getcif --help で一覧を見ることができます。

+

material_idformula_pretty は暗黙的に取得します。

+

取得したデータは、 option セクションの output_dir で指定したディレクトリ内に、物質ごとに material_id をディレクトリ名とするディレクトリを作成し、その中に格納されます。 +項目ごとに、項目名をファイル名としたファイルに保存されます。但し、結晶構造データ (structure) は structure.cif というファイル名で CIF形式で書き出されます。

+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/getcif/index.html b/manual/v1.1.0/ja/html/getcif/index.html new file mode 100644 index 0000000..6907c34 --- /dev/null +++ b/manual/v1.1.0/ja/html/getcif/index.html @@ -0,0 +1,145 @@ + + + + + + + + 7. CIFデータ取得ツール (getcif) — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/getcif/tutorial/index.html b/manual/v1.1.0/ja/html/getcif/tutorial/index.html new file mode 100644 index 0000000..8f77994 --- /dev/null +++ b/manual/v1.1.0/ja/html/getcif/tutorial/index.html @@ -0,0 +1,246 @@ + + + + + + + + 7.2. チュートリアル — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

7.2. チュートリアル

+

結晶構造などのデータを物質材料データベースから取得するツール getcif を使うには、検索条件と取得するデータを記述した入力パラメータファイルを作成し、プログラム getcif を実行します。現在は Materials Project が公開しているデータベースに対応しています。以下では docs/tutorial/getcif ディレクトリにある ABO3 系の物質を検索・取得するサンプルを例にチュートリアルを実施します。

+
+

APIキーを取得する

+

Materials Project のデータベースをプログラムから検索するには、あらかじめ Materials Project にユーザ登録し、APIキーを取得する必要があります。 +Materials Project の公式サイト https://next-gen.materialsproject.org にアクセスし、Login します。APIキーはユーザ登録時に自動的生成され、ユーザのダッシュボードから確認できます。取得した APIキーは安全に保管し、他人に知られないようにしましょう。

+

APIキーを getcif にセットするには、以下のいずれかを実行します。

+
+
    +
  1. pymatgen の設定ファイルに登録する

    +
    +
    $ pmg config --add PMG_MAPI_KEY <API_KEY>
    +
    +
    +
    +

    を実行するか、設定ファイル ~/.config/.pmgrc

    +
    +
    PMG_MAPI_KEY: <API_KEY>
    +
    +
    +
    +

    を書き込みます。

    +
  2. +
  3. 環境変数にセットする

    +
    +
    $ MP_API_KEY="<API_KEY>"
    +$ export MP_API_KEY
    +
    +
    +
    +

    を実行します。

    +
  4. +
  5. ファイルに格納する

    +

    APIキーをファイルに書き込み、getcif を実行するディレクトリに配置します。ファイル名のデフォルトは materials_project.key です。異なるファイル名を使う場合は、入力パラメータファイル (input.yaml) の api_key_file にファイル名を指定します。ファイル名は .key の拡張子が必要です。

    +
    +
    database:
    +  api_key_file: materials_project.key
    +
    +
    +
    +

    註: バージョン管理ツールを使っている場合は、 .key の拡張子を持つファイルを管理から除外するとよいでしょう。(Git の場合は .gitignore ファイルに *.key を追加します。)

    +
  6. +
+
+
+
+

入力パラメータファイルを作成する

+

入力パラメータファイルにはデータベース検索および出力についての設定を記述します。

+

以下に入力パラメータファイルのサンプルを記載します。このファイルは YAML形式のテキストファイルで、データベースへの接続に必要な情報や、検索条件、取得するデータの種類などの内容を記述します。仕様の詳細については ファイルフォーマット の章を参照してください。

+

YAMLフォーマットでは、 keyword: value の辞書形式でパラメータを記述します。 value には数値や文字列などのスカラー値や、複数の値を [ ] または箇条書きの形式で列挙するリスト型、または辞書型を入れ子にすることができます。検索条件と出力項目については、特別な記法として、リスト型を括弧を使わず空白区切りで列挙する形式でも書くことができます。

+
database:
+  target: materials project
+
+option:
+  output_dir: result
+  # dry_run: false
+
+properties:
+  band_gap: < 1.0
+  is_stable: true
+  is_metal: false
+  formula: "**O3"
+  spacegroup_symbol: Pm-3m
+
+fields: |
+  structure
+  band_gap
+  symmetry
+
+
+

入力パラメータファイルは database, option, properties, fields のブロックからなります。 +database にはデータベース接続に関する設定を記述します。例では target に Materials Project を指定していますが、現時点ではこの項目は無視されます。その他、 api_key に APIキーを指定できます。APIキーは pymatgen の設定ファイルや環境変数にセットすることもできます。例では後者の方式を仮定しています。

+

option には実行時のオプションを記述します。 output_dir は取得したデータの格納先ディレクトリを指定します。省略時にはカレントディレクトリに書き出されます。 dry_runtrue にセットすると、データベースへの接続はせず、検索条件を出力して終了します。 dry_run はコマンドラインオプションでも指定できます。

+

properties は検索条件の指定を行います。検索条件を「項目: 値」の書式で列挙し、これらの条件は AND で扱われます。例では、バンドギャップが 1.0以下、安定な絶縁体で、組成式は ABO3 (A, B は任意の元素種)、空間群は Pm-3m という条件を指定しています。 band_gap には値の範囲を上限・下限の組で指定するほか、 < 1.0 のような記法も使用できます。検索条件にどのような項目が指定できるかは Appendix を参照してください。

+

fields には出力項目を列挙します。YAMLのリスト形式のほか、空白区切りで項目を列挙する書き方もできます。また、例に示したとおり、YAMLの記法を使って複数行で書くこともできます。 +structure は結晶構造データで、取得したデータはCIF形式で出力されます。 band_gap はバンドギャップの数値、 symmetry は対称性の情報です。この他に、 material_id で Materials Project 内の物質データのインデックスと、 formula_pretty で組成式が暗黙的に取得されます。出力項目の一覧は Appendix を参照してください。また、getcif コマンドのヘルプメッセージにも一覧が出力されます。

+
+
+

データを取得する

+

入力パラメータファイル(input.yaml)を引数として getcif を実行します。

+
$ getcif input.yaml
+
+
+

getcif を実行すると Materials Project のデータベースに接続し、検索条件に合致するデータを取得します。標準出力には、以下のように、物質の material ID と組成式、データ項目のサマリーが出力されます。

+
material_id  formula  band_gap  symmetry  formula_pretty
+mp-861502  AcFeO3  0.9887999999999995  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  AcFeO3
+mp-977455  PaAgO3  0.915  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  PaAgO3
+mp-11775  RbUO3  0.45420000000000016  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  RbUO3
+mp-3163  BaSnO3  0.37239999999999984  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  BaSnO3
+mp-4126  KUO3  0.44540000000000024  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  KUO3
+mp-865322  UTlO3  0.27360000000000007  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  UTlO3
+mp-753781  EuHfO3  0.4795999999999996  crystal_system=<CrystalSystem.cubic: 'Cubic'> symbol='Pm-3m' number=221 point_group='m-3m' symprec=0.1 version='2.0.2'  EuHfO3
+
+
+

取得したデータは、 output_dir で指定した result ディレクトリ内に物質ごとに格納されます。この例では、 result 以下に mp-3163 から mp-977455 までの 7つのディレクトリが作成され、各ディレクトリには次のファイルが書き込まれます。

+
+
    +
  • band_gap

    +
    +

    バンドギャップの値

    +
    +
  • +
  • formula

    +
    +

    組成式 (formula_pretty に対応します)

    +
    +
  • +
  • structure.cif

    +
    +

    CIF形式の結晶構造データ

    +
    +
  • +
  • symmetry

    +
    +

    対称性に関するデータ

    +
    +
  • +
+
+

getcif の実行に --dry-run オプションを付けると、以下のように検索条件を出力して終了します。データベースに実際に接続する前に検索項目を確認できます。

+
$ getcif --dry-run input.yaml
+{'band_gap': (None, 1.0), 'is_stable': True, 'is_metal': False, 'formula': '**O3', 'spacegroup_symbol': 'Pm-3m', 'fields': ['structure', 'band_gap', 'symmetry', 'material_id', 'formula_pretty']}
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/index.html b/manual/v1.1.0/ja/html/index.html new file mode 100644 index 0000000..9525746 --- /dev/null +++ b/manual/v1.1.0/ja/html/index.html @@ -0,0 +1,123 @@ + + + + + + + + Cif2x Users Guide — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/objects.inv b/manual/v1.1.0/ja/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..e5054d9ce613c3d99c693a319af9b7f880c7447f GIT binary patch literal 705 zcmV;y0zUmCAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkoX=XBb zAXRf^a&sU@b!lW}3L_v^WpZ_Ab7^j8AbMB3TjV1p?@kUB-*c%`L35rBpsT86_ZB-gm4h57#pbs;#-N(SY-c{^mm*!$w zo|$iEcR#ObH|}>gjk@2#o3>}6t`=bHf#sW;eor%(gLj+Qb+q&(x;_bOJlbj@&$7G9 z>Pnmg-i(sj4~Sxjj(`j}scrG!Ggg`FCe-E(g!jFGJ)_k8U9KSz9-*pYoQq5Tjixw9^KGQB_0OSnFE<__BanYA!8@7Xj7BW@bYMg@$ z5?#TBy?-d#4yA~%eBSTlWVV~9;+(FV zzGvy!s5@x6hK6O{+`6r$M~68j{WO~Y{t4kZL|@q;-`I0d6SZ=kSECi5rHy6v5~G2< z2a=!Shz=56v3;Rt3aC;(S$r+~c%fQ9X~J6m@k$l31bX=75s+8Knv-{X$>05wX+`>m zz^Pr6Cj3vf6+(F=Dz5e{K + + + + + + 検索 — cif2x Users Guide 1.1.0 ドキュメント + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

検索

+ + + + +

+ 複数の単語を検索すると、次を含む一致のみが表示されます +     すべての用語。 +

+ + +
+ + + +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.1.0/ja/html/searchindex.js b/manual/v1.1.0/ja/html/searchindex.js new file mode 100644 index 0000000..85a854a --- /dev/null +++ b/manual/v1.1.0/ja/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"API\u30ad\u30fc\u3092\u53d6\u5f97\u3059\u308b": [[12, "api"]], "AkaiKKR \u5411\u3051\u30d1\u30e9\u30e1\u30fc\u30bf": [[4, "akaikkr"]], "CIF\u30c7\u30fc\u30bf\u53d6\u5f97\u30c4\u30fc\u30eb (getcif)": [[11, null]], "Cif2x Users Guide": [[13, null]], "Contents:": [[13, null]], "OpenMX \u5411\u3051\u30d1\u30e9\u30e1\u30fc\u30bf": [[4, "openmx"]], "Quantum ESPRESSO \u306e mode \u3092\u8ffd\u52a0\u3059\u308b": [[1, "quantum-espresso-mode"]], "Quantum ESPRESSO \u5411\u3051\u30d1\u30e9\u30e1\u30fc\u30bf": [[4, "quantum-espresso"]], "VASP \u5411\u3051\u30d1\u30e9\u30e1\u30fc\u30bf": [[4, "vasp"]], "cif2x": [[3, "cif2x"]], "cif2x\u3068\u306f?": [[0, "cif2x"]], "content": [[4, "content"], [4, "id7"], [4, "id9"], [4, "id11"]], "database": [[10, "database"]], "fields": [[10, "fields"]], "getcif": [[9, "getcif"]], "option": [[10, "option"]], "optional": [[4, "optional"], [4, "id5"], [4, "id8"], [4, "id10"]], "optional\u30bb\u30af\u30b7\u30e7\u30f3": [[4, "id4"]], "properties": [[10, "properties"]], "structure": [[4, "structure"]], "tasks": [[4, "tasks"], [4, "id6"]], "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9": [[2, null]], "\u30b3\u30d4\u30fc\u30e9\u30a4\u30c8": [[0, "id5"]], "\u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9": [[3, null], [9, null]], "\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb": [[6, null], [12, null]], "\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b": [[12, "id3"]], "\u30d0\u30fc\u30b8\u30e7\u30f3\u5c65\u6b74": [[0, "id4"]], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u6307\u5b9a\u3059\u308b": [[6, "id4"]], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8\u6307\u5b9a": [[4, "id3"]], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30ea\u30b9\u30c8": [[8, null]], "\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": [[4, null], [10, null]], "\u30e9\u30a4\u30bb\u30f3\u30b9": [[0, "id2"]], "\u5165\u529b\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [[4, "id2"], [10, "id2"]], "\u5165\u529b\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b": [[6, "id2"], [12, "id2"]], "\u51fa\u529b\u9805\u76ee (fields)": [[8, "fields"]], "\u52d5\u4f5c\u74b0\u5883": [[0, "id6"]], "\u62e1\u5f35\u30ac\u30a4\u30c9": [[1, null]], "\u691c\u7d22\u6761\u4ef6 (properties)": [[8, "properties"]], "\u691c\u7d22\u6761\u4ef6\u306e\u30ad\u30fc\u30ef\u30fc\u30c9": [[8, "id2"]], "\u6982\u8981": [[0, null], [7, null]], "\u7b2c\u4e00\u539f\u7406\u8a08\u7b97\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b": [[6, "id3"]], "\u7b2c\u4e00\u539f\u7406\u8a08\u7b97\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u751f\u6210\u30c4\u30fc\u30eb (cif2x)": [[5, null]], "\u958b\u767a\u8ca2\u732e\u8005": [[0, "id3"]]}, "docnames": ["cif2x/about/index", "cif2x/appendix/index", "cif2x/basic-usage", "cif2x/command/index", "cif2x/filespec/index", "cif2x/index", "cif2x/tutorial/index", "getcif/about/index", "getcif/appendix/index", "getcif/command/index", "getcif/filespec/index", "getcif/index", "getcif/tutorial/index", "index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["cif2x/about/index.rst", "cif2x/appendix/index.rst", "cif2x/basic-usage.rst", "cif2x/command/index.rst", "cif2x/filespec/index.rst", "cif2x/index.rst", "cif2x/tutorial/index.rst", "getcif/about/index.rst", "getcif/appendix/index.rst", "getcif/command/index.rst", "getcif/filespec/index.rst", "getcif/index.rst", "getcif/tutorial/index.rst", "index.rst"], "indexentries": {}, "objects": {}, "objnames": {}, "objtypes": {}, "terms": {"\"**": [10, 12], "\",": 1, "\"]": 1, "${": 6, "&control": [4, 6], "&keyword": 6, "&system": 4, "',": 12, "':": [1, 12], "'>": 12, "']": 12, "'m": 6, "'s": 8, "()": 1, "(.": 4, "(fractional": 4, "(highsymmkpath": 4, "(mode": 1, "(n": 4, "(qe": 1, "(quantum": 4, "(self": 1, "(start": 4, "(tolerance": 10, "(vasp": 4, "(\u4f8b": 10, "))": 0, "),": 12, "):": 1, ")}": 4, ")\u3001": 12, "*)": 8, "**": 12, ", [": 8, ", or": 8, ",o2": 8, "-)": 8, "-*": 8, "--": 2, "-api": [2, 8, 10], "-center": 2, "-dev": 2, "-dry": [9, 12], "-fe": 8, "-gen": 12, "-h": [3, 9], "-help": 9, "-hill": 8, "-o": 8, "-p": [6, 8], "-q": [3, 9], "-reuss": 8, "-rrkjus": 4, "-run": [9, 12], "-spn": 4, "-t": [2, 3], "-tools": 2, "-v": [3, 9], "-version": [3, 9], ". a": 8, ".,": 8, "..": [8, 10], "...": 4, "./": 6, ".card": 1, ".cif": [2, 3, 6, 10, 12], ".com": 2, ".core": 8, ".csv": 6, ".cubic": 12, ".g": 8, ".git": 2, ".gitignore": 12, ".in": 6, ".io": 4, ".key": [10, 12], ".materialsproject": 12, ".md": 2, ".org": 12, ".path": 4, ".pbe": 4, ".py": [1, 2], ".search": [8, 10], ".summary": [8, 10], ".toml": 2, ".vasp": 4, ".x": [1, 4], ".yaml": [2, 4, 6, 12], ".}": [4, 6], "/.": [2, 4, 10, 12], "/a": 4, "/akaikkrpythonutil": 2, "/akaikkrteam": 2, "/atom": 8, "/calc": 1, "/cards": 1, "/cif": [1, 2, 6], "/getcif": 12, "/issp": 2, "/library": 2, "/potcar": 4, "/pp": 6, "/pseudo": 6, "/pyakaikkr": 2, "/qe": 1, "/scf": 6, "/tmp": 4, "/tutorial": [6, 12], "1e": 6, "2akaikkr": 2, "2kkr": 2, "2o": 8, "2openmx": 2, "2qe": 2, "2struct": 2, "2vasp": 2, "2x": [1, 2, 4, 6], "2\u3064": 8, "3m": 12, "3sns": 6, "3x": 4, "4x": 6, "7\u3064": 12, "8x": 6, ":/": [2, 12], "=\"": 12, "='": 12, "=<": 12, ">\"": 12, ">=": 10, "['": 12, "[--": 9, "[float": 8, "[hasprops": 8, "[int": 8, "[str": 8, "\\gamma": 4, "])": 8, "],": 6, "][": [3, 9], "__": [1, 2], "_above": 8, "_ang": 8, "_anisotropy": 8, "_anonymous": 8, "_api": [10, 12], "_atom": 8, "_atomic": [1, 8], "_automatic": 4, "_base": 1, "_beta": 6, "_boundaries": 8, "_by": 4, "_calc": 8, "_cards": 1, "_cell": 1, "_cif": 2, "_density": [4, 8], "_dir": [4, 6, 10, 12], "_direct": 8, "_down": 8, "_electrodes": 8, "_electronic": 8, "_elements": 8, "_energy": 8, "_espresso": 3, "_ev": 8, "_factor": 8, "_file": [4, 6, 10, 12], "_formula": 8, "_function": 8, "_functional": 4, "_gamma": 4, "_gap": [8, 12], "_generic": 1, "_gga": 4, "_group": 12, "_hull": 8, "_ibrav": [4, 6], "_id": [8, 10, 12], "_ids": 8, "_ij": 8, "_input": 2, "_ionic": 8, "_k": 1, "_key": [10, 12], "_lda": 4, "_lengths": 4, "_linemode": 4, "_list": 4, "_magnetic": 8, "_magnetization": 8, "_mapi": [10, 12], "_max": 8, "_meta": 8, "_metal": [8, 12], "_mode": [1, 2], "_modeproc": 1, "_modulus": 8, "_name": 8, "_namelist": 1, "_normalized": 8, "_number": 8, "_of": 8, "_ordering": 8, "_parameter": 6, "_parameters": [1, 4, 6], "_path": 4, "_paw": 4, "_pbe": [4, 6], "_per": 8, "_point": 6, "_points": [1, 4, 6], "_poisson": 8, "_pos": 4, "_positions": [1, 4, 6], "_pretty": [8, 10, 12], "_project": [10, 12], "_properties": 8, "_props": 8, "_psl": [4, 6], "_psp": 4, "_pw": 1, "_ratio": 8, "_reaction": 8, "_reasons": 8, "_reconstructed": 8, "_reduced": 8, "_resolution": 4, "_reuss": 8, "_rrkjus": 6, "_run": [9, 10, 12], "_sites": 8, "_source": 8, "_species": [1, 4, 6, 8], "_stable": [8, 12], "_states": 8, "_structure": 8, "_surface": 8, "_symbol": [8, 12], "_system": [8, 12], "_table": [1, 2], "_thr": 6, "_tmpl": 6, "_to": 8, "_total": 8, "_type": 4, "_unique": 8, "_units": 8, "_up": 8, "_updated": 8, "_vasp": 4, "_voigt": 8, "_vol": [4, 8], "_vrh": 8, "_work": 8, "_x": 4, "_y": 4, "_yaml": [3, 9], "_z": 4, "_{": 1, "abo": [8, 10, 12], "abo3": 8, "above": 8, "absorption": 8, "acfeo": 12, "add": 12, "afm": 8, "akaikkr": [0, 2, 3, 5, 6], "akaikkrpythonutil": 2, "all": 0, "alpha": [0, 4], "also": 8, "anclr": 4, "and": [8, 10, 12], "angstrom": 4, "anisotropy": 8, "anonymized": 8, "any": 8, "api": [8, 10, 12], "api\u30ad\u30fc": [10, 11], "appended": 8, "appendix": [10, 12], "as": 8, "atmicx": 4, "atmtyp": 4, "atomic": [1, 4, 6], "automatic": [4, 6], "aux": 4, "available": 8, "average": 8, "band": [8, 12], "bandstructure": 8, "basno": 12, "be": 8, "beta": 4, "bool": 8, "bravais": 4, "brvtyp": 4, "builder": 8, "bulk": 8, "by": 8, "calc": 2, "calculated": 8, "calculation": 6, "can": 8, "card": [1, 4], "cards": [1, 2, 6, 8], "cbm": 8, "cd": 2, "cell": [1, 4, 6], "celldm": 4, "charge": 8, "chemenv": 8, "chemical": 8, "chemsys": 8, "cif": [2, 4, 6, 10, 12], "class": 1, "clone": 2, "co": 6, "composition": 8, "conc": 4, "config": [2, 4, 10, 12], "consider": 8, "considered": 8, "constant": 8, "content": [1, 2, 6], "control": 6, "conv": 6, "convention": 4, "convex": 8, "coordinate": 4, "corrected": 8, "cosab": 4, "cosac": 4, "cosbc": 4, "cr2": 8, "create": 1, "crystal": [4, 6, 8, 12], "crystalsystem": [8, 12], "csv": [2, 4], "cubic": [8, 12], "cutoff": 4, "data": [1, 4, 8], "database": [8, 12], "decomposes": 8, "def": 1, "degauss": 6, "density": 8, "deprecated": 8, "deprecation": 8, "description": 8, "dielectric": 8, "direct": 8, "division": 4, "docs": [2, 6, 12], "dos": 8, "dry": [9, 10, 12], "ecutrho": [4, 6], "ecutwfc": [4, 6], "efermi": 8, "elastic": 8, "elasticity": 8, "electronic": 8, "electrons": 6, "element": [4, 8, 10], "elements": 8, "else": 1, "emmet": 8, "end": 4, "energy": 8, "entry": 8, "eos": 8, "equilibrium": 8, "es": 8, "espresso": [0, 2, 3, 5, 6], "euhfo": 12, "ev": 8, "exclude": 8, "export": 12, "factor": 8, "false": [4, 6, 8, 10, 12], "fe": [4, 8], "fe2o": 8, "fermi": 8, "field": 4, "fields": [9, 11, 12], "fim": 8, "float": [4, 8], "for": 8, "force": 4, "format": 3, "formation": 8, "formula": [8, 10, 12], "formulas": 8, "fortran": 6, "function": 8, "functional": 4, "gamma": 4, "gap": 8, "general": 0, "generate": 1, "getcif": [0, 2, 5, 7, 8, 10, 12, 13], "git": [2, 12], "github": 2, "global": [4, 6], "gnu": 0, "gpa": 8, "gpl": 0, "grain": 8, "grid": [4, 6], "group": 8, "gz": 4, "has": 8, "help": 10, "hexagonal": 8, "homogeneous": 8, "htp": 2, "https": [2, 12], "hull": 8, "ibrav": [4, 6], "id": [10, 12], "ids": 8, "if": [1, 4], "ignore": 4, "in": [1, 8], "incar": 4, "including": 8, "index": 8, "init": [1, 2], "input": [2, 3, 6, 9, 12], "insertion": 8, "install": 2, "int": [4, 8], "international": 8, "ionic": 8, "is": [8, 12], "ja": 2, "keyword": [6, 8, 12], "kpoints": 4, "kppa": 4, "kshifts": 4, "kuo": 12, "k\u70b9": 4, "last": 8, "lda": 4, "length": 4, "li": 8, "license": [0, 2], "lies": 8, "linux": 0, "list": 8, "login": 12, "magnetic": 8, "magnetism": 8, "magnetization": 8, "main": 2, "make": 2, "material": [2, 3, 8, 10, 12], "materials": [0, 7, 8, 10, 12], "max": [8, 10], "maximum": 8, "metal": 8, "min": [8, 10], "minimum": 8, "missing": 6, "mode": [4, 5, 6], "modeproc": 1, "modulus": 8, "monkhorst": 4, "monoclinic": 8, "monty": 2, "mp": [2, 8, 10, 12], "mprester": 8, "mxl": 4, "namelist": [1, 4, 6], "nat": [4, 6], "natm": 4, "ncmp": 4, "nelements": 8, "nexclude": 4, "next": 12, "nm": 8, "nml": 2, "noncolin": 6, "none": [10, 12], "normalized": 8, "nosym": 6, "notation": 8, "nscf": [1, 4, 6], "nsites": 8, "nspin": 6, "ntyp": [4, 6], "num": 8, "number": [8, 12], "numpy": 2, "o3": [10, 12], "occupations": 6, "of": [0, 8], "on": 8, "openbabel": 2, "openmx": [0, 2, 3, 5, 6], "option": [1, 4, 6, 12], "optional": 6, "or": 8, "orbitals": 4, "ordering": 8, "origins": 8, "orthorhombic": 8, "outdir": 6, "output": [4, 6, 10, 12], "oxi": 8, "oxidation": 8, "paago": 12, "pandas": 2, "parameter": 4, "passed": 8, "path": 4, "pbe": 4, "phonon": 8, "piezoelectric": 8, "pip": 2, "pm": 12, "pmg": [4, 10, 12], "pmgrc": [2, 4, 10, 12], "point": 12, "poisson": 8, "poscar": [2, 4], "possible": 8, "pot": 4, "potcar": 4, "pp": [4, 6], "precise": 4, "precision": 4, "prefix": 6, "project": [0, 7, 8, 10, 12], "properties": [9, 11, 12], "property": 8, "provenance": 8, "pseudo": [4, 6], "psuedo": 4, "public": 0, "pw": [1, 4], "pwscf": 6, "py": 2, "pymatgen": [2, 3, 4, 10, 12], "pyproject": 2, "python": [0, 2, 4], "qe": [1, 2, 3, 6], "qemode": 1, "qeutils": 2, "quantum": [0, 2, 3, 5, 6], "quick": 4, "ratio": 8, "rbuo": 12, "reaction": 8, "read": 2, "readme": 2, "reconstructed": 8, "refractive": 8, "reserved": 0, "result": 12, "return": [1, 8], "reuss": 8, "rights": 0, "rmt": 4, "ruamel": 2, "run": 2, "sample": 2, "scf": [1, 4, 6], "scr": 1, "seaborn": 2, "self": 1, "shape": 8, "shear": 8, "shift": 4, "short": 8, "si": 8, "single": 8, "sites": 8, "smearing": 6, "space": 8, "spacegroup": [8, 12], "spd": 4, "sr": 10, "src": [1, 2], "standard": 4, "start": 4, "states": 8, "step": 4, "str": 8, "struct": 2, "structure": [1, 6, 8, 10, 12], "substrates": 8, "supercell": 4, "surface": 8, "surfaces": 8, "symbol": [8, 12], "symbols": 8, "symmetry": [8, 10, 12], "symprec": [10, 12], "system": [6, 8], "systems": 8, "table": 4, "tagged": 8, "target": [3, 10, 12], "task": 8, "tasks": 6, "template": [4, 6], "tetragonal": 8, "the": [0, 8], "theoretical": 8, "thermo": 8, "ti": 10, "tmpdir": 4, "to": 8, "tokyo": 0, "tolerance": [4, 6], "tools": 2, "total": 8, "tprnfor": 6, "trigonal": 8, "true": [4, 6, 8, 10, 12], "tstress": 6, "tuple": 8, "tutorial": 2, "type": [4, 8], "types": 8, "ubuntu": 0, "uncorrected": 8, "unique": 8, "units": 8, "universal": 8, "university": 0, "update": 1, "upf": 4, "use": [4, 6], "utils": 2, "utlo": 12, "value": [6, 8, 12], "values": 8, "vasp": [0, 2, 3, 5, 6], "vbm": 8, "ver": 0, "version": [0, 3, 9, 12], "voigt": 8, "vol": 4, "volume": 8, "vps": 2, "warnings": 8, "weighted": 8, "whether": 8, "wild": 8, "with": 8, "work": [6, 8], "workdir": 4, "xas": 8, "xfs": 2, "yaml": [2, 3, 4, 6, 8, 9, 10, 12], "{..": [4, 6], "{[": 4, "{range": 4, "|-": 2, "\u3001\u300c": 10, "\u3002(": 12, "\u3002)": [8, 12], "\u3002api\u30ad\u30fc": 12, "\u3002card": 4, "\u3002cif": 2, "\u3002fm": 8, "\u3002grid": 4, "\u3002md": 4, "\u3002quantum": [2, 4], "\u3002scf": 6, "\u3002triclinic": 8, "\u3002vasp": 2, "\u3002yaml": [10, 12], "\u3002\u307e\u305f": [2, 4, 8, 10, 12], "\u3002\u4f8b": [4, 10], "\u3002\u7701": 12, "\u301cend": 4, "\u3042\u3089\u304b\u3058\u3081": 12, "\u3042\u308a": [1, 4, 6, 10, 12], "\u3042\u308b": [1, 4, 6, 12], "\u3042\u308f\u305b": 4, "\u3044\u304f\u3064\u304b": 6, "\u3044\u308b": [4, 6, 8, 12], "\u304a\u3044": 10, "\u304a\u304d": [2, 6], "\u304a\u3051\u308b": 10, "\u304a\u3088\u3073": [0, 1, 2, 4, 6, 8, 10, 12], "\u304a\u308a": [0, 1, 8], "\u304b\u3069": 10, "\u304b\u3089": [0, 1, 2, 4, 6, 7, 8, 9, 10, 12], "\u304c\u3063": 4, "\u304c\u3069": 8, "\u304f\u3060": [2, 4, 6, 10, 12], "\u3053\u3068": [0, 1, 2, 4, 6, 7, 8, 9, 10, 12], "\u3053\u306e": [1, 4, 6, 8, 10, 12], "\u3053\u308c\u3089": [10, 12], "\u3054\u3068": [1, 4, 6, 10, 12], "\u3055\u3044": [2, 4, 6, 10, 12], "\u3057\u307e\u3057\u3087": 12, "\u3057\u307e\u305b": 3, "\u3059\u308b": [0, 2, 3, 4, 5, 7, 8, 9, 10, 11], "\u305a\u305d\u306e": 1, "\u305a\u308c": [8, 10, 12], "\u305b\u305a": 9, "\u305d\u306e": [0, 4, 6, 8, 10, 12], "\u305d\u308c\u305e\u308c": [4, 6], "\u305f\u3044": 6, "\u305f\u3060\u3057": 4, "\u305f\u3081": [0, 2, 3, 4, 10], "\u3067\u304d": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12], "\u3067\u304d\u308b": [2, 6, 8, 10, 12], "\u3067\u3057\u3087": 12, "\u3067\u3059": [0, 2, 3, 4, 6, 7, 8, 9, 10, 12], "\u3067\u3082": [10, 12], "\u3068\u3044\u3046": [10, 12], "\u3068\u304a\u308a": [3, 4, 8, 10, 12], "\u3068\u3057": [1, 10], "\u3068\u3057\u3066": [0, 1, 2, 3, 4, 6, 8, 10, 12], "\u3068\u308a": 4, "\u3068\u308b": [1, 4], "\u3069\u306e": 12, "\u306a\u3044": [4, 10, 12], "\u306a\u304a": [2, 4, 10], "\u306a\u304c\u3089": 6, "\u306a\u3057": 4, "\u306a\u305a\u308c": 10, "\u306a\u3063": 4, "\u306a\u3069": [0, 1, 2, 4, 6, 7, 10, 12], "\u306a\u3082\u306e": 4, "\u306a\u308a": [6, 10, 12], "\u306a\u308b": [1, 2, 3, 4, 8, 10, 12], "\u306b\u3064\u3044\u3066": [1, 2, 4, 6, 10, 12], "\u306b\u307e\u3068\u3081": 1, "\u306b\u3088\u3063\u3066": [0, 2], "\u306b\u3088\u308a": [0, 4], "\u306b\u5bfe\u3059\u308b": 6, "\u306b\u5bfe\u5fdc": [0, 1, 3, 4, 6, 12], "\u306b\u95a2\u3059\u308b": [4, 6, 12], "\u306e\u3044": [8, 12], "\u306e\u3044\u305a\u308c": 8, "\u306e\u3044\u305a\u308c\u304b": 4, "\u306e\u307f": 4, "\u306e\u3088\u3046": [8, 10, 12], "\u306f\u3053\u306e": 10, "\u306f\u305d\u308c\u305e\u308c": 10, "\u307b\u304b": [1, 6, 8, 10, 12], "\u307e\u3057": 8, "\u307e\u3059": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12], "\u307e\u305a": 2, "\u307e\u305b": 4, "\u307e\u305f": [2, 4, 6, 8, 10, 12], "\u307e\u3067": 12, "\u307e\u3068\u3081": [1, 8], "\u307e\u307e": [1, 4, 6, 10], "\u3082\u3061\u308d\u3093": 1, "\u3082\u3068": [0, 7], "\u3082\u306e": [4, 6, 10], "\u3088\u3044": 12, "\u3088\u3046": [4, 6, 8, 12], "\u3088\u308a": [8, 9, 10], "\u3089\u308c": [1, 4], "\u3089\u308c\u308b": 10, "\u308c\u307e\u305b": 4, "\u308c\u308b": [3, 4, 6, 8, 9, 10], "\u308f\u305a\u304b": 10, "\u30a2\u30af\u30bb\u30b9": 12, "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb": [5, 13], "\u30a4\u30f3\u30c7\u30c3\u30af\u30b9": [4, 12], "\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d5\u30a1\u30a4\u30eb": [2, 4, 6], "\u30aa\u30d7\u30b7\u30e7\u30f3": [2, 3, 4, 6, 9, 12], "\u30ab\u30c3\u30c8\u30aa\u30d5": [4, 6], "\u30ab\u30ec\u30f3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea": [4, 10, 12], "\u30ab\u30f3\u30de": [8, 10], "\u30ac\u30a4\u30c9": [5, 13], "\u30ad\u30fc": 10, "\u30ad\u30fc\u30d5\u30a1\u30a4\u30eb": 10, "\u30ad\u30fc\u30ef\u30fc\u30c9": 6, "\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3": 8, "\u30af\u30e9\u30b9": [1, 8], "\u30b3\u30d4\u30fc\u30e9\u30a4\u30c8": 5, "\u30b3\u30de\u30f3\u30c9": [2, 12], "\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3": 12, "\u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9": [5, 11, 13], "\u30b3\u30e1\u30f3\u30c8": [8, 10], "\u30b5\u30a4\u30ba": 4, "\u30b5\u30a4\u30c8": [2, 12], "\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea": 6, "\u30b5\u30de\u30ea\u30fc": 12, "\u30b5\u30f3\u30d7\u30eb": [6, 12], "\u30b7\u30d5\u30c8": 4, "\u30b7\u30f3\u30dc\u30eb": 4, "\u30b9\u30ab\u30e9\u30fc": [4, 6, 12], "\u30bb\u30af\u30b7\u30e7\u30f3": 10, "\u30bb\u30c3\u30c8": [1, 2, 4, 12], "\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2": 0, "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9": [0, 2, 8], "\u30bf\u30a4\u30d7": [4, 8], "\u30bf\u30fc\u30b2\u30c3\u30c8\u30aa\u30d7\u30b7\u30e7\u30f3": 2, "\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9": 2, "\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9": 12, "\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb": [5, 11, 13], "\u30c4\u30fc\u30eb": [0, 2, 6, 7, 12, 13], "\u30c6\u30ad\u30b9\u30c8": 10, "\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb": [6, 10, 12], "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8": 4, "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb": 4, "\u30c6\u30fc\u30d6\u30eb": 4, "\u30c7\u30a3\u30ec\u30af\u30c8\u30ea": [2, 4, 6, 10, 12], "\u30c7\u30d5\u30a9\u30eb\u30c8": [4, 10, 12], "\u30c7\u30fc\u30bf": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 13], "\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [2, 3], "\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9": [0, 7, 8, 9, 10, 12], "\u30d0\u30f3\u30c9\u30ae\u30e3\u30c3\u30d7": [0, 7, 12], "\u30d0\u30fc\u30b8\u30e7\u30f3": [3, 5, 9, 12], "\u30d1\u30c3\u30b1\u30fc\u30b8": 8, "\u30d1\u30e9\u30e1\u30fc\u30bf": [0, 1, 2, 5, 6, 8, 9, 10, 12], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8": 5, "\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [2, 3, 5, 9, 11], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30ea\u30b9\u30c8": [5, 11], "\u30d5\u30a1\u30a4\u30eb": [0, 2, 3, 4, 10, 12, 13], "\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": [2, 5, 6, 9, 11, 12, 13], "\u30d5\u30a3\u30fc\u30eb\u30c9": [1, 4], "\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": [6, 12], "\u30d6\u30ed\u30c3\u30af": [1, 4, 6, 12], "\u30d7\u30ed\u30b0\u30e9\u30e0": [0, 2, 3, 4, 6, 12], "\u30d7\u30ed\u30b0\u30e9\u30e0\u30d1\u30c3\u30b1\u30fc\u30b8": 0, "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8": 0, "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30b3\u30fc\u30c7\u30a3\u30cd\u30fc\u30bf\u30fc": 0, "\u30d8\u30eb\u30d7": [3, 9], "\u30d8\u30eb\u30d7\u30e1\u30c3\u30bb\u30fc\u30b8": 12, "\u30d9\u30af\u30c8\u30eb": 4, "\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb": [4, 6], "\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb": [2, 4, 6], "\u30de\u30c6\u30ea\u30a2\u30eb\u30ba\u30a4\u30f3\u30d5\u30a9\u30de\u30c6\u30a3\u30af\u30b9": 0, "\u30de\u30cb\u30e5\u30a2\u30eb": 4, "\u30e1\u30bd\u30c3\u30c9": 8, "\u30e1\u30c3\u30b7\u30e5": 4, "\u30e1\u30c3\u30bb\u30fc\u30b8": [3, 9], "\u30e2\u30b8\u30e5\u30fc\u30eb": 2, "\u30e2\u30fc\u30c9": [1, 6], "\u30e6\u30fc\u30b6": 12, "\u30e9\u30a4\u30bb\u30f3\u30b9": 5, "\u30e9\u30a4\u30d6\u30e9\u30ea": [2, 8, 10], "\u30ea\u30b9\u30c8": [4, 6, 8, 10, 12], "\u30ea\u30dd\u30b8\u30c8\u30ea": 2, "\u30ea\u30ea\u30fc\u30b9": 0, "\u30ef\u30a4\u30eb\u30c9\u30ab\u30fc\u30c9": 10, "\u30fb\u539f\u5b50\u91cf": 4, "\u30fb\u64ec\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb": 4, "\u4e00\u3064": 8, "\u4e00\u539f": [0, 2, 3, 4, 6], "\u4e00\u5f0f": 0, "\u4e00\u6176": 0, "\u4e00\u6642\u30d5\u30a1\u30a4\u30eb": 4, "\u4e00\u81f4": 4, "\u4e00\u822c": 6, "\u4e00\u89a7": [9, 10, 12], "\u4e00\u9023": 6, "\u4e00\u90e8": 10, "\u4e0a\u304c\u308a": [3, 9], "\u4e0a\u66f8\u304d": [4, 6], "\u4e0a\u8a18": [2, 4, 6], "\u4e0a\u9650": [10, 12], "\u4e0b\u3052": [3, 9], "\u4e0b\u9650": [10, 12], "\u4e0e\u3048\u308b": 6, "\u4e88\u3081": 6, "\u4e88\u6e2c": 0, "\u4e95\u6238": 0, "\u4ed5\u69d8": [6, 12], "\u4ed6\u4eba": 12, "\u4ed8\u3051": [1, 3, 9], "\u4ed8\u3051\u308b": [4, 12], "\u4ed8\u5c5e": 0, "\u4ee3\u5165": [1, 6], "\u4ee5\u4e0a": [8, 10], "\u4ee5\u4e0b": [0, 2, 3, 4, 6, 8, 9, 10, 12], "\u4eee\u5b9a": [4, 12], "\u4efb\u610f": [6, 12], "\u4f46\u3057": 10, "\u4f4d\u7f6e": 10, "\u4f4e\u3044": 10, "\u4f5c\u6210": [1, 2, 4, 5, 10, 11], "\u4f7f\u3044": 6, "\u4f7f\u3044\u65b9": [5, 13], "\u4f7f\u3046": [6, 12], "\u4f7f\u3063": 12, "\u4f7f\u308f": [4, 8, 12], "\u4f7f\u7528": [2, 4, 12], "\u4f8b\u3048": 6, "\u4f8b\u5916": 6, "\u4f9d\u5b58": 0, "\u4fdd\u5b58": 10, "\u4fdd\u7ba1": 12, "\u500b\u5225": [1, 4, 6], "\u5024\u3084": [1, 6], "\u512a\u5148": [4, 6, 9], "\u5143\u7d20": [4, 10], "\u5165\u308c\u5b50": [6, 12], "\u5165\u529b": [0, 2, 3, 5, 9, 11], "\u5168\u304f": 1, "\u516c\u5f0f": 12, "\u516c\u958b": [8, 12], "\u5185\u5bb9": [1, 2, 4, 6, 10, 12], "\u5185\u90e8": 4, "\u518d\u69cb": 4, "\u5197\u9577": [3, 9], "\u51e6\u7406": 1, "\u51fa\u529b": [1, 4, 6, 9, 10, 11, 12], "\u51fa\u529b\u5148": [4, 10], "\u5206\u5272": 6, "\u5217\u578b": 8, "\u5217\u6319": [1, 4, 6, 8, 10, 12], "\u5224\u5b9a": 10, "\u5225\u9014": 2, "\u5229\u7528": [2, 4, 8], "\u5236\u5fa1": 10, "\u523b\u307f": 4, "\u524a\u9664": 4, "\u524d\u5f8c": 10, "\u52a0\u3048": 2, "\u52b9\u679c": [3, 9], "\u52d5\u4f5c": 5, "\u533a\u5207\u308a": [8, 10, 12], "\u533a\u5225": 3, "\u5358\u4e00": 8, "\u5358\u4f4d": 4, "\u539f\u5b50": [4, 10], "\u539f\u5b50\u7a2e": 4, "\u53b3\u5bc6": 10, "\u53c2\u7167": [2, 4, 6, 10, 12], "\u53ce\u675f": 6, "\u53d6\u308a": [1, 4, 6], "\u53d6\u308a\u8fbc\u307f": 6, "\u53d6\u308b": 8, "\u53d6\u5f97": [0, 1, 2, 4, 5, 7, 9, 10, 13], "\u53d7\u3051": [0, 3, 9], "\u53ef\u80fd": [0, 3, 4, 6, 8, 9, 10], "\u5404\u5165": 4, "\u5404\u51fa\u529b": 6, "\u5404\u7bc0": 4, "\u5408\u3046": 4, "\u5408\u308f": 6, "\u5408\u308f\u305b": 4, "\u5408\u81f4": 12, "\u5409\u898b": 0, "\u540c\u3058": [4, 6], "\u540c\u540d": 4, "\u540c\u7b49": 10, "\u5411\u3051": [3, 5, 6], "\u542b\u307e\u308c\u308b": 2, "\u542b\u3080": 4, "\u547c\u3070": 6, "\u56de\u6307\u5b9a": [3, 9], "\u56f2\u307f": 10, "\u56f2\u3080": 10, "\u56fa\u6709": 4, "\u57fa\u5e95": 1, "\u57fa\u672c": [4, 5, 6, 13], "\u5834\u5408": [1, 2, 4, 6, 10, 12], "\u5834\u6240": [2, 4], "\u5909\u3048": 6, "\u5909\u308f\u308b": [0, 2], "\u5909\u63db": [1, 4], "\u5909\u6570": [1, 2, 4, 10, 12], "\u5927\u304d\u3044": [8, 10], "\u5927\u304d\u304f": [0, 10], "\u5927\u5b66": 0, "\u5927\u5b66\u9662": 0, "\u5927\u6587\u5b57": 3, "\u59cb\u307e\u308a": 6, "\u59cb\u307e\u308b": [6, 10], "\u5b58\u5728": [6, 10], "\u5b66\u7fd2": 0, "\u5b66\u8853": 0, "\u5b89\u5168": 12, "\u5b89\u5b9a": 12, "\u5b9a\u7fa9": [4, 8, 10], "\u5b9f\u6570": [8, 10], "\u5b9f\u65bd": [6, 12], "\u5b9f\u884c": [1, 2, 3, 6, 9, 10, 12], "\u5b9f\u969b": 12, "\u5bfe\u5fdc": [0, 1, 2, 4, 6, 7, 8, 12], "\u5bfe\u79f0": [0, 7, 10, 12], "\u5bfe\u79f0\u6027": 12, "\u5bfe\u8c61": [2, 3], "\u5c06\u5927": 0, "\u5c0e\u51fa": 4, "\u5c0f\u3055\u3044": [8, 10], "\u5c0f\u3055\u304f": 10, "\u5c0f\u6587": 3, "\u5c3e\u5d0e": 0, "\u5c65\u6b74": 5, "\u5c71\u5f62": 0, "\u5e74\u5ea6": 0, "\u5ea7\u6a19": 4, "\u5eb7\u592a": 0, "\u5f15\u6570": [1, 12], "\u5f37\u5236": 1, "\u5f62\u5f0f": [2, 3, 4, 6, 8, 9, 10, 12], "\u5f71\u97ff": 10, "\u5f8c\u8005": [4, 12], "\u5f93\u3063": 6, "\u5fae\u7d30": 10, "\u5fc5\u8981": [1, 2, 4, 6, 10, 12], "\u5fdc\u3058": [0, 2, 4], "\u60c5\u5831": [1, 3, 4, 9, 10, 12], "\u6240\u6301": 0, "\u624b\u9806": 2, "\u6253\u3061\u6d88\u3057": [3, 9], "\u6271\u3044": [4, 6, 10], "\u6271\u3048\u308b": [2, 3], "\u6271\u308f": [10, 12], "\u6280\u8853": 0, "\u62c5\u5f53": 0, "\u62e1\u5f35": [5, 13], "\u62e1\u5f35\u5b50": [10, 12], "\u62ec\u5f27": 12, "\u6301\u3064": 12, "\u6307\u5b9a": [2, 3, 5, 8, 9, 10, 12], "\u63a2\u3057": 4, "\u63a5\u7d9a": [8, 9, 10, 12], "\u63a5\u7d9a\u5148": 10, "\u63db\u3048": 4, "\u64cd\u4f5c": 10, "\u64ec\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb": 4, "\u64ec\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb": [2, 4], "\u64ec\u539f\u5b50": 4, "\u652f\u63f4": 0, "\u6559\u5e2b": 0, "\u6570\u5024": [6, 10, 12], "\u6574\u5099": 0, "\u6574\u5408": 1, "\u6574\u6570": [8, 10], "\u6587\u5b57": [8, 10], "\u6587\u5b57\u5217": [6, 10, 12], "\u65b9\u5f0f": 12, "\u65b9\u6cd5": [2, 4, 10], "\u65e2\u5b58": 6, "\u662f\u5e38": 0, "\u6697\u9ed9": [10, 12], "\u66f4\u65b0": 1, "\u66f8\u304d": [6, 8, 10, 12], "\u66f8\u304d\u51fa\u3055": [4, 6, 10, 12], "\u66f8\u304d\u65b9\u3082": 12, "\u66f8\u304d\u8fbc\u307e": 12, "\u66f8\u304d\u8fbc\u307f": 12, "\u66f8\u304f": [10, 12], "\u66f8\u5f0f": [3, 4, 9, 12], "\u6700\u521d": 10, "\u6700\u9069": 4, "\u6709\u52b9": 10, "\u671f\u5f85": 0, "\u672c\u5c71": 0, "\u6750\u6599": [0, 7, 10, 12], "\u6761\u4ef6": [0, 2, 9, 10, 11, 12], "\u6771\u4eac": 0, "\u6771\u5317": 0, "\u683c\u5b50": [1, 4], "\u683c\u7d0d": [2, 4, 10, 12], "\u691c\u7d22": [0, 7, 9, 10, 11, 12], "\u6982\u8981": [5, 11, 13], "\u69cb\u6210": [0, 2, 4, 6, 10], "\u69cb\u6587": [4, 6], "\u69cb\u9020": [0, 1, 2, 3, 4, 6, 7, 9, 10, 12], "\u6a19\u6e96": 12, "\u6a5f\u68b0": 0, "\u6a5f\u80fd": [1, 4, 10], "\u6c42\u3081": 6, "\u6c7a\u307e\u308b": [1, 4], "\u6c7a\u3081": [4, 6], "\u6c7a\u5b9a": [4, 10], "\u6ce8\u76ee": 0, "\u6ce8\u8a18": 10, "\u6cf0\u52a9": 0, "\u6d3b\u7528": 0, "\u6d3e\u751f": 1, "\u6d41\u5100": 4, "\u6e96\u3058": 0, "\u6e96\u5099": 0, "\u6e96\u62e0": 10, "\u7121\u8996": [4, 10, 12], "\u7269\u6027": [0, 7, 10], "\u7269\u8cea": [0, 2, 7, 10, 12], "\u7279\u5225": [4, 6, 12], "\u7279\u5b9a": 0, "\u7279\u6027": 8, "\u7279\u6b8a": 10, "\u72ec\u7acb": 4, "\u72ec\u81ea": 1, "\u73fe\u5728": [0, 1, 2, 3, 6, 7, 10, 12], "\u73fe\u6642\u70b9": [4, 12], "\u7406\u5b66": 0, "\u7406\u8a08": [0, 2, 3, 4, 6], "\u74b0\u5883": [2, 4, 5, 10, 12], "\u751f\u6210": [0, 1, 2, 3, 4, 10, 12, 13], "\u7523\u696d": 0, "\u7528\u3044": [4, 6, 10], "\u7528\u610f": [0, 1, 2, 6, 10], "\u7559\u610f": 6, "\u7565\u6642": 12, "\u767b\u9332": 12, "\u76f4\u63a5": 4, "\u7701\u7565": 4, "\u771f\u507d": 8, "\u771f\u507d\u5024": 10, "\u77e5\u3089\u308c": 12, "\u7814\u7a76": 0, "\u7814\u7a76\u6240": 0, "\u7814\u7a76\u9662": 0, "\u78ba\u8a8d": [0, 9, 10, 12], "\u78c1\u6c17": 8, "\u793a\u3057": 12, "\u798f\u5cf6": 0, "\u798f\u7530": 0, "\u79c0\u8f14": 0, "\u79e9\u5e8f": 8, "\u7a2e\u985e": [0, 1, 2, 10, 12], "\u7a7a\u6b04": [1, 4, 6], "\u7a7a\u767d": [8, 10, 12], "\u7a7a\u884c": 6, "\u7a7a\u9593": 10, "\u7a7a\u9593\u7fa4": 12, "\u7b20\u677e": 0, "\u7b2c\u4e00\u539f\u7406": [3, 4, 6], "\u7b2c\u4e00\u539f\u7406\u8a08": 13, "\u7b87\u6240": [0, 2, 6], "\u7b87\u6761": [6, 8, 10, 12], "\u7b97\u5165": [2, 4, 13], "\u7b97\u7528": 0, "\u7ba1\u7406": 12, "\u7bc4\u56f2": [4, 6, 8, 10, 12], "\u7c21\u4fbf": 10, "\u7cbe\u5ea6": [0, 10], "\u7d20\u7a2e": [4, 12], "\u7d42\u4e86": [9, 10, 12], "\u7d44\u307f\u5408\u308f": [4, 6], "\u7d44\u6210": [0, 7, 10, 12], "\u7d44\u6210\u5f0f": 12, "\u7d50\u6676": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12], "\u7d50\u679c": 10, "\u7d76\u7e01\u4f53": 12, "\u7dcf\u5408": 0, "\u7de9\u3084\u304b": 10, "\u7f6e\u304d": [4, 10], "\u8003\u616e": 10, "\u81ea\u52d5": [4, 12], "\u8457\u4f5c": 0, "\u884c\u3044": [1, 4, 6, 8, 12], "\u884c\u3046": [6, 10], "\u884c\u308f": 10, "\u884c\u5217": 4, "\u8868\u3055": 8, "\u8868\u3059": 8, "\u8868\u793a": [3, 9], "\u8868\u8a18": [8, 10], "\u88d5\u4e00": 0, "\u8907\u6570": [0, 3, 4, 6, 9, 10, 12], "\u8981\u7d20": 4, "\u898b\u3064": 10, "\u898b\u308b": 10, "\u8a08\u7b97": [0, 1, 2, 3, 4, 6, 10], "\u8a18\u53f7": 10, "\u8a18\u6cd5": [8, 10, 12], "\u8a18\u8f09": [4, 6, 12], "\u8a18\u8ff0": [1, 2, 4, 6, 8, 10, 12], "\u8a2d\u5b9a": [4, 6, 10, 12], "\u8a2d\u8a08": 0, "\u8a31\u5bb9": [4, 10], "\u8a55\u4fa1": [4, 6], "\u8a73\u7d30": [2, 4, 6, 12], "\u8a8d\u3081": 10, "\u8aac\u660e": [3, 9], "\u8aad\u307f\u8fbc\u307f": [3, 9], "\u8ca2\u732e": 5, "\u8ecc\u9053": 4, "\u8ee2\u8a18": 8, "\u8f9e\u66f8": [1, 6, 12], "\u8fc5\u901f": 0, "\u8fd1\u5e74": 0, "\u8fd4\u3057": 1, "\u8ffd\u52a0": [4, 5, 12], "\u901a\u308a": 4, "\u9032\u5c55": 0, "\u9069\u5207": 0, "\u9069\u7528": 10, "\u9078\u629e": 4, "\u90e8\u4e3b": 0, "\u90e8\u5206": [4, 10], "\u914d\u5217": [4, 6], "\u914d\u5e03": [0, 2], "\u914d\u7f6e": [2, 4, 6, 12], "\u9244\u4e5f": 0, "\u958b\u767a": 5, "\u95a2\u6570": 1, "\u95be\u5024": 10, "\u9664\u3044": 6, "\u9664\u5916": 12, "\u96db\u5f62": [0, 2, 6], "\u9752\u5c71": 0, "\u9805\u76ee": [4, 10, 11, 12], "\u9805\u76ee\u540d": 10, "\u9806\u5e8f": 4, "\u9ad8\u3044": 10, "\u9ad8\u307e\u308a": 10, "\u9ad8\u5ea6": 0, "\u9f8d\u7f8e": 0}, "titles": ["1. \u6982\u8981", "6. \u62e1\u5f35\u30ac\u30a4\u30c9", "2. \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9", "4. \u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9", "5. \u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8", "\u7b2c\u4e00\u539f\u7406\u8a08\u7b97\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u751f\u6210\u30c4\u30fc\u30eb (cif2x)", "3. \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb", "7.1. \u6982\u8981", "7.5. \u30d1\u30e9\u30e1\u30fc\u30bf\u30ea\u30b9\u30c8", "7.3. \u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9", "7.4. \u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8", "7. CIF\u30c7\u30fc\u30bf\u53d6\u5f97\u30c4\u30fc\u30eb (getcif)", "7.2. \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb", "Cif2x Users Guide"], "titleterms": {"2x": [0, 3, 5, 13], "akaikkr": 4, "api\u30ad\u30fc": 12, "cif": [0, 3, 5, 11, 13], "content": 4, "contents": 13, "database": 10, "espresso": [1, 4], "fields": [8, 10], "getcif": [9, 11], "guide": 13, "mode": 1, "openmx": 4, "option": 10, "optional": 4, "properties": [8, 10], "quantum": [1, 4], "structure": 4, "tasks": 4, "users": 13, "vasp": 4, "\u3059\u308b": [1, 6, 12], "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb": 2, "\u30ac\u30a4\u30c9": 1, "\u30ad\u30fc\u30ef\u30fc\u30c9": 8, "\u30b3\u30d4\u30fc\u30e9\u30a4\u30c8": 0, "\u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9": [3, 9], "\u30bb\u30af\u30b7\u30e7\u30f3": 4, "\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb": [6, 12], "\u30c4\u30fc\u30eb": [5, 11], "\u30c7\u30fc\u30bf": [11, 12], "\u30d0\u30fc\u30b8\u30e7\u30f3": 0, "\u30d1\u30e9\u30e1\u30fc\u30bf": 4, "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8": [4, 6], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [4, 6, 10, 12], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30ea\u30b9\u30c8": 8, "\u30d5\u30a1\u30a4\u30eb": [5, 6], "\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": [4, 10], "\u30e9\u30a4\u30bb\u30f3\u30b9": 0, "\u4f5c\u6210": [6, 12], "\u4f7f\u3044\u65b9": 2, "\u5165\u529b": [4, 6, 10, 12], "\u51fa\u529b": 8, "\u52d5\u4f5c": 0, "\u53d6\u5f97": [11, 12], "\u5411\u3051": 4, "\u57fa\u672c": 2, "\u5c65\u6b74": 0, "\u62e1\u5f35": 1, "\u6307\u5b9a": [4, 6], "\u6761\u4ef6": 8, "\u691c\u7d22": 8, "\u6982\u8981": [0, 7], "\u74b0\u5883": 0, "\u751f\u6210": [5, 6], "\u7b2c\u4e00\u539f\u7406\u8a08": [5, 6], "\u7b97\u5165": [5, 6], "\u8ca2\u732e": 0, "\u8ffd\u52a0": 1, "\u958b\u767a": 0, "\u9805\u76ee": 8}}) \ No newline at end of file